kstmApp/src/devadcpi.c
author Heinz Junkes <junkes@fhi-berlin.mpg.de>
Mon, 09 Jul 2018 13:36:24 +0200
changeset 4 f7598b2df637
parent 1 7029db7ac3db
permissions -rw-r--r--
update
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     1
#include <stdio.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     2
#include <stdint.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     3
#include <stdlib.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     4
#include <string.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     5
#include <errno.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     6
#include <unistd.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     7
#include <sys/types.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     8
#include <sys/stat.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     9
#include <sys/ioctl.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    10
#include <fcntl.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    11
#include <linux/i2c-dev.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    12
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    13
#include <epicsExport.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    14
#include <dbAccess.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    15
#include <devSup.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    16
#include <recGbl.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    17
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    18
#include <aiRecord.h>
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    19
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    20
// ADCPi definitions
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    21
#define ADC_1 		0x68
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    22
#define ADC_2 		0x69
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    23
#define ADC_CHANNEL1	0x98
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    24
#define ADC_CHANNEL2	0xB8
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    25
#define ADC_CHANNEL3 	0xD8
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    26
#define ADC_CHANNEL4	0xF8
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    27
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    28
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    29
static long init_record(aiRecord *pai);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    30
static long read_ai(aiRecord *pai);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    31
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    32
struct adcPiChannel {
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    33
  unsigned int channel;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    34
};
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    35
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    36
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    37
int getadc (int chn){
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    38
  unsigned int fh,dummy, adc, adc_channel;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    39
//  double val;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    40
  __u8  res[4];
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    41
printf(" Read channel Nr: %d\n", chn);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    42
  switch (chn){
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    43
    case 1: { adc=ADC_1; adc_channel=ADC_CHANNEL1; }; break;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    44
    case 2: { adc=ADC_1; adc_channel=ADC_CHANNEL2; }; break;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    45
    case 3: { adc=ADC_1; adc_channel=ADC_CHANNEL3; }; break;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    46
    case 4: { adc=ADC_1; adc_channel=ADC_CHANNEL4; }; break;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    47
    case 5: { adc=ADC_2; adc_channel=ADC_CHANNEL1; }; break;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    48
    case 6: { adc=ADC_2; adc_channel=ADC_CHANNEL2; }; break;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    49
    case 7: { adc=ADC_2; adc_channel=ADC_CHANNEL3; }; break;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    50
    case 8: { adc=ADC_2; adc_channel=ADC_CHANNEL4; }; break;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    51
    default: { adc=ADC_1; adc_channel=ADC_CHANNEL1; }; break;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    52
  }
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    53
  fh = open("/dev/i2c-1", O_RDWR);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    54
  ioctl(fh,I2C_SLAVE,adc);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    55
  i2c_smbus_write_byte (fh, adc_channel);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    56
  usleep (50000);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    57
  i2c_smbus_read_i2c_block_data(fh,adc_channel,4,res);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    58
  usleep(50000);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    59
  close (fh);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    60
  dummy = (res[0]<<8|res[1]);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    61
  if (dummy>=32768) dummy=65536-dummy;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    62
  //val = dummy * 0.000154;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    63
// printf(" dummy = %d, val = %lf\n", dummy, val);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    64
  //return val;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    65
  return dummy;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    66
}
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    67
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    68
static long init_record(aiRecord *pai)
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    69
{
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    70
  struct adcPiChannel* priv;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    71
  unsigned long channel;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    72
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    73
  priv=malloc(sizeof(struct adcPiChannel));
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    74
  if(!priv){
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    75
    recGblRecordError(S_db_noMemory, (void*)pai,
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    76
      "devAoTimebase failed to allocate private struct");
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    77
    return S_db_noMemory;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    78
  }
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    79
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    80
  recGblInitConstantLink(&pai->inp,DBF_ULONG,&channel);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    81
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    82
  priv->channel=channel;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    83
  pai->dpvt=priv;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    84
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    85
  return 0;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    86
}
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    87
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    88
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    89
static long read_ai(aiRecord *pai)
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    90
{
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    91
  struct adcPiChannel* priv=pai->dpvt;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    92
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    93
  pai->rval = getadc(priv->channel);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    94
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    95
  return 0;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    96
}
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    97
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    98
struct {
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    99
  long num;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   100
  DEVSUPFUN  report;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   101
  DEVSUPFUN  init;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   102
  DEVSUPFUN  init_record;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   103
  DEVSUPFUN  get_ioint_info;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   104
  DEVSUPFUN  read_ai;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   105
  DEVSUPFUN  special_linconv;
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   106
} devAiAdcPi = {
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   107
  6, /* space for 6 functions */
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   108
  NULL,
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   109
  NULL,
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   110
  init_record,
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   111
  NULL,
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   112
  read_ai,
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   113
  NULL
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   114
};
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   115
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   116
epicsExportAddress(dset,devAiAdcPi);
7029db7ac3db Add adcPi device support
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   117