kstmApp/src/drvAdcPi.c
author Heinz Junkes <junkes@fhi-berlin.mpg.de>
Tue, 19 Jan 2016 10:54:27 +0100
changeset 2 3b3af1ff2783
permissions -rw-r--r--
add driver abd device support for adcPi
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     1
/** @brief driver for Pi ADC card xxx
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     2
 *
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     3
 */
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     4
#include <stdio.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     5
#include <stdint.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     6
#include <stdlib.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     7
#include <string.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     8
#include <errno.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     9
#include <unistd.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    10
#include <sys/types.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    11
#include <sys/stat.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    12
#include <sys/ioctl.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    13
#include <fcntl.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    14
#include <linux/i2c-dev.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    15
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    16
#include <epicsThread.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    17
#include <epicsTime.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    18
#include <epicsTypes.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    19
#include <devLib.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    20
#include <drvSup.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    21
#include <epicsExport.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    22
#include <errlog.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    23
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    24
#include <iocsh.h>
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    25
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    26
#include "drvAdcPi.h"
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    27
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    28
/* crc("adcPi") */
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    29
#define MYMAGIC 1729550187U 
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    30
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    31
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    32
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    33
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    34
#define MCP3424_NEW_CONV  0x80
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    35
#define MCP3424_CHANNEL_1 0x00
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    36
#define MCP3424_CHANNEL_2 0x20
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    37
#define MCP3424_CHANNEL_3 0x40
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    38
#define MCP3424_CHANNEL_4 0x60
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    39
#define MCP3424_CONT_CONV 0x10
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    40
#define MCP3424_ONE_SHOT_CONV 0x00
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    41
#define MCP3424_12BIT_240SPS 0x00
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    42
#define MCP3424_14BIT_60SPS 0x04
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    43
#define MCP3424_16BIT_15SPS 0x08
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    44
#define MCP3424_18BIT_3_75SPS 0x0c
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    45
#define MCP3424_GAIN_1 0x00
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    46
#define MCP3424_GAIN_2 0x01
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    47
#define MCP3424_GAIN_4 0x02
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    48
#define MCP3424_GAIN_8 0x03
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    49
#define MCP3424_CONT_MASK 0x6f
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    50
 
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    51
// adcPi definitions, on i2c-bus
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    52
#define ADC_1 		0x68
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    53
#define ADC_2 		0x69
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    54
#define ADC_CHANNEL1	(MCP3424_NEW_CONV | MCP3424_CHANNEL_1 | MCP3424_CONT_CONV | MCP3424_14BIT_60SPS | MCP3424_GAIN_1 )
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    55
#define ADC_CHANNEL2	(MCP3424_NEW_CONV | MCP3424_CHANNEL_2 | MCP3424_CONT_CONV | MCP3424_14BIT_60SPS | MCP3424_GAIN_1 )
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    56
#define ADC_CHANNEL3	(MCP3424_NEW_CONV | MCP3424_CHANNEL_3 | MCP3424_CONT_CONV | MCP3424_14BIT_60SPS | MCP3424_GAIN_1 )
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    57
#define ADC_CHANNEL4	(MCP3424_NEW_CONV | MCP3424_CHANNEL_4 | MCP3424_CONT_CONV | MCP3424_14BIT_60SPS | MCP3424_GAIN_1 )
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    58
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    59
/** @brief linked list of card structures
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    60
 *
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    61
 */
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    62
struct adcPiCard {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    63
	epicsUInt32 magic;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    64
	adcPiCard *next;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    65
	int cardNumber;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    66
	unsigned int i2cAddress;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    67
	char* baseAddress; // not used with i2c
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    68
	unsigned int fh; // file handle
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    69
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    70
};
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    71
static adcPiCard *firstCard = NULL;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    72
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    73
int adcPiDebug = 1;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    74
epicsExportAddress (int, adcPiDebug);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    75
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    76
static long adcPiReport (int detail);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    77
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    78
typedef struct {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    79
	long 		number;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    80
	DRVSUPFUN	report;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    81
	DRVSUPFUN	init;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    82
} drvAdcPi_drvet;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    83
drvAdcPi_drvet adcPi = {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    84
	2,
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    85
	adcPiReport,
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    86
	NULL
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    87
};
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    88
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    89
epicsExportAddress (drvet, adcPi);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    90
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    91
static epicsUInt16 getAdc(adcPiCard* card, int signal)
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    92
{
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    93
static __u8  res[4];
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    94
static unsigned int dummy; 
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    95
static __u8 adc, adc_channel;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    96
static int ret;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    97
//static unsigned int threadPrio;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    98
//epicsTimeStamp startTime, endTime;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    99
//double elapsedTime;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   100
//static int loopCounter;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   101
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   102
	if (signal < 0 || signal > ADC_PI_MAX_CHANNEL) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   103
		errMessage (-1, "Signal Number out of range");
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   104
		return 0;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   105
	}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   106
	//threadPrio = epicsThreadGetPrioritySelf();
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   107
	//epicsThreadSetPriority( epicsThreadGetIdSelf(),epicsThreadPriorityMin );
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   108
	
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   109
	//printf(" card->fh : %d, signal : %d (prio: %d)\n", card->fh, signal, epicsThreadGetPrioritySelf());
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   110
	
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   111
	switch (signal){
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   112
    	case 0: { adc=ADC_1; adc_channel=ADC_CHANNEL1; }; break;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   113
		case 1: { adc=ADC_1; adc_channel=ADC_CHANNEL2; }; break;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   114
		case 2: { adc=ADC_1; adc_channel=ADC_CHANNEL3; }; break;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   115
		case 3: { adc=ADC_1; adc_channel=ADC_CHANNEL4; }; break;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   116
		case 4: { adc=ADC_2; adc_channel=ADC_CHANNEL1; }; break;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   117
		case 5: { adc=ADC_2; adc_channel=ADC_CHANNEL2; }; break;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   118
		case 6: { adc=ADC_2; adc_channel=ADC_CHANNEL3; }; break;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   119
		case 7: { adc=ADC_2; adc_channel=ADC_CHANNEL4; }; break;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   120
		default: { adc=ADC_1; adc_channel=ADC_CHANNEL1; }; break;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   121
	}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   122
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   123
		
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   124
	// choose device
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   125
	if (ioctl(card->fh,I2C_SLAVE,adc) != 0) errMessage (0, "ioctl failed");
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   126
	//if (usleep (50000) < 0) errMessage (0, "usleep failed");
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   127
	//printf ("adc_channel = 0x%02X \n", adc_channel);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   128
	//epicsTimeGetCurrent(&startTime);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   129
	if (i2c_smbus_write_byte (card->fh, adc_channel) != 0) errMessage (0, "i2c_smbus_write_byte failed");
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   130
	// wait a little bit for end of conversion
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   131
	if (usleep (50000) < 0) errMessage (0, "usleep failed");
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   132
	// 3 for != 18bit mode
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   133
	//loopCounter = 0;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   134
	do {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   135
		ret = i2c_smbus_read_i2c_block_data(card->fh, adc_channel, 3, res);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   136
		// printf(" res[0] = 0x%02X, res[1] = 0x%02X, res[2] = 0x%02X\n", res[0], res[1], res[2]);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   137
		if (ret != 3) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   138
			errMessage (0, "i2c_smbus_read_i2c_block_data");
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   139
			fprintf (stderr, "i2c_smbus_read_i2c_block_data returns %d bytes != 3\n", ret);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   140
		}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   141
		//if (res[2] & 0x80) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   142
		//	fprintf (stderr, "i2c_smbus_read_i2c_block_data, output register (0x%02X) not updated yet\n", res[2]);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   143
		//}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   144
		//loopCounter++;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   145
	} while (res[2] & 0x80);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   146
		
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   147
	//epicsTimeGetCurrent(&endTime);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   148
	//elapsedTime = epicsTimeDiffInSeconds(&endTime, &startTime);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   149
	//printf("Elapsed time %f\n", elapsedTime);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   150
	//printf(" res[0] = 0x%02X, res[1] = 0x%02X, res[2] = 0x%02X, loopCounter = %d\n", res[0], res[1], res[2], loopCounter);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   151
    
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   152
    
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   153
    dummy = (res[0]<<8|res[1]);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   154
	if (dummy>=32768) dummy=65536-dummy;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   155
	//val = dummy * 0.000154;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   156
	// printf(" dummy = %d, val = %lf\n", dummy, val);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   157
	//return val;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   158
	//if (adcPiDebug) printf ("dummy = 0x%x\n", dummy);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   159
	// epicsThreadSetPriority( epicsThreadGetIdSelf(), threadPrio);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   160
	return dummy;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   161
}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   162
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   163
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   164
/** @brief configure function
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   165
 *
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   166
 * The configure function is called from the startup script
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   167
 */
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   168
int adcPiConfigure (int cardNumber, unsigned int i2cAddress)
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   169
{
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   170
	// long status;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   171
	// volatile void* baseAddress;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   172
	// char id[6];
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   173
	adcPiCard **pCard;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   174
	
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   175
	/** @brief Check card number for sanity */
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   176
	if (cardNumber != 1) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   177
		fprintf (stderr, "adcPiConfigure: cardNumber %d must be 1\n", cardNumber);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   178
		return S_dev_noDevice;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   179
	}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   180
	
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   181
	/** @brief Find end of card list and check for duplicates */
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   182
	for (pCard = &firstCard; *pCard; pCard=&(*pCard)->next) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   183
		if ((*pCard)->cardNumber == cardNumber) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   184
			fprintf (stderr, "adcPiConfigure: cardnumber %d already in use\n", cardNumber);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   185
			return S_dev_identifyOverlap;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   186
		}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   187
	} // pCard points to the end of the list
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   188
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   189
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   190
    /** @brief Check address for sanity
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   191
     *
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   192
     * We use /dev/i2c-1, should be fixed/solved, so a "1" should be used*/
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   193
	if (i2cAddress != 1) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   194
		fprintf (stderr, "adcPiConfigure: i2cAddress %d must be 1\n", i2cAddress);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   195
		return S_dev_noDevice;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   196
	}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   197
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   198
	// check VMEaddress for sanity
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   199
	
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   200
	// translate address to local address, check for overlap
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   201
	
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   202
	// check that correct hardware is installed, devReadProbe
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   203
	// read i2c?
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   204
	
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   205
	/** @brief create new card structure
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   206
	 *
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   207
	 */
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   208
	 *pCard = malloc (sizeof(adcPiCard));
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   209
	 if (!*pCard) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   210
		 fprintf (stderr, "adcPiConfigure: out of memory\n");
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   211
		 return S_dev_noMemory;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   212
	 }
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   213
	 
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   214
	 (*pCard)->fh = open("/dev/i2c-1", O_RDWR); // "1" hardcoded!
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   215
	 if ((*pCard)->fh <= 0) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   216
		fprintf (stderr, "adcPiConfigure: could not open /dev/i2c-1\n");
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   217
		return S_dev_noDevice;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   218
	}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   219
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   220
	(*pCard)->magic = MYMAGIC;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   221
	(*pCard)->next = NULL;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   222
	(*pCard)->cardNumber = cardNumber;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   223
	(*pCard)->i2cAddress = i2cAddress;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   224
	
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   225
	return 0;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   226
}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   227
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   228
adcPiCard* adcPiOpen (int cardNumber)
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   229
{
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   230
	adcPiCard* card;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   231
	for (card = firstCard; card; card=card->next)
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   232
		if (card->cardNumber == cardNumber) return card;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   233
	return NULL;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   234
}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   235
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   236
int adcPiGet (adcPiCard* card, int signal, epicsUInt16* pValue)
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   237
{
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   238
	
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   239
	if (adcPiDebug>1)
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   240
		printf("adcPiGet card %d signal %d (adcPiDebug: %d)\n",
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   241
		  card->cardNumber, signal, adcPiDebug);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   242
	
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   243
	if (!card) return S_dev_noDevice;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   244
	if (card->magic != MYMAGIC) return S_dev_wrongDevice;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   245
		
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   246
	if (signal < 0 || signal > ADC_PI_MAX_CHANNEL) return S_dev_badSignalNumber;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   247
		
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   248
	*pValue = getAdc(card, signal);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   249
	
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   250
	if (adcPiDebug>1)
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   251
		printf("adcPiGet card %d signal %d @%p = 0x%4X\n",
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   252
		  card->cardNumber, signal, (void *)&getAdc, (epicsUInt16)*pValue);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   253
	return 0;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   254
}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   255
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   256
/** @brief report function
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   257
 *
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   258
 */
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   259
static long adcPiReport (int detail)
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   260
{
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   261
	adcPiCard *card;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   262
	for (card = firstCard; card; card = card->next) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   263
		printf ("  card %d at address %p \n", card->cardNumber, card->baseAddress);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   264
		if (detail >= 1) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   265
			int signal;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   266
			unsigned short value;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   267
			for (signal = 0; signal < ADC_PI_MAX_CHANNEL; signal++) {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   268
				value = getAdc(card, signal);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   269
				printf("     ADC %d = 0x%04x = %+8.4f V\n", signal, value, value * 0.000154); // tobedef
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   270
			}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   271
		}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   272
	}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   273
	return 0;
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   274
}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   275
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   276
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   277
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   278
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   279
static const iocshArg adcPiConfigureArg0 = { "cardNumber", iocshArgInt };
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   280
static const iocshArg adcPiConfigureArg1 = { "i2cAddress", iocshArgInt };
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   281
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   282
static const iocshArg * const adcPiConfigureArgs[] = {
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   283
	&adcPiConfigureArg0,
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   284
	&adcPiConfigureArg1
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   285
};
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   286
static const iocshFuncDef adcPiConfigureDef = { "adcPiConfigure", 2, adcPiConfigureArgs };
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   287
static void adcPiConfigureFunc (const iocshArgBuf *args)
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   288
{
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   289
	adcPiConfigure (args[0].ival, args[1].ival);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   290
}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   291
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   292
static void adcPiRegister ()
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   293
{
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   294
	iocshRegister (&adcPiConfigureDef, adcPiConfigureFunc);
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   295
}
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   296
3b3af1ff2783 add driver abd device support for adcPi
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   297
epicsExportRegistrar (adcPiRegister);