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-- |
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 |