Files
smargopolo/LabJack/exodriver-master/examples/UE9/ue9ControlConfig.c
2021-05-26 15:51:40 +02:00

149 lines
5.0 KiB
C

//Author: LabJack
//May 25, 2011
//This example program sends a ControlConfig low-level command, and reads the
//various parameters associated with the Control processor.
#include "ue9.h"
int controlConfig_example(HANDLE hDevice, ue9CalibrationInfo *caliInfo);
int main(int argc, char **argv)
{
HANDLE hDevice;
ue9CalibrationInfo caliInfo;
//Opening first found UE9 over USB
if( (hDevice = openUSBConnection(-1)) == NULL )
goto done;
//Getting calibration information from UE9
if(getCalibrationInfo(hDevice, &caliInfo) < 0)
goto close;
controlConfig_example(hDevice, &caliInfo);
close:
closeUSBConnection(hDevice);
done:
return 0;
}
//Sends a ControlConfig low-level command to read the configuration settings
//associated with the Control chip.
int controlConfig_example(HANDLE hDevice, ue9CalibrationInfo *caliInfo)
{
uint8 sendBuff[18], recBuff[24];
uint16 checksumTotal;
int sendChars, recChars, i;
double dac;
sendBuff[1] = (uint8)(0xF8); //Command byte
sendBuff[2] = (uint8)(0x06); //Number of data words
sendBuff[3] = (uint8)(0x08); //Extended command number
//WriteMask, PowerLevel, FIODir, etc. are all passed a value of zero since
//we only want to read Control configuration settings, not change them.
for( i = 6; i < 18; i++ )
sendBuff[i] = (uint8)(0x00);
extendedChecksum(sendBuff,18);
//Sending command to UE9
sendChars = LJUSB_Write(hDevice, sendBuff, 18);
if( sendChars < 18 )
{
if( sendChars == 0 )
printf("Error : write failed\n");
else
printf("Error : did not write all of the buffer\n");
return -1;
}
//Reading response from UE9
recChars = LJUSB_Read(hDevice, recBuff, 24);
if( recChars < 24 )
{
if( recChars == 0 )
printf("Error : read failed\n");
else
printf("Error : did not read all of the buffer\n");
return -1;
}
checksumTotal = extendedChecksum16(recBuff, 24);
if( (uint8)((checksumTotal >> 8) & 0xff) != recBuff[5] )
{
printf("Error : read buffer has bad checksum16(MSB)\n");
return -1;
}
if( (uint8)(checksumTotal & 0xff) != recBuff[4] )
{
printf("Error : read buffer has bad checksum16(LSB)\n");
return -1;
}
if( extendedChecksum8(recBuff) != recBuff[0] )
{
printf("Error : read buffer has bad checksum8\n");
return -1;
}
if( recBuff[1] != (uint8)(0xF8) || recBuff[2] != (uint8)(0x09) || recBuff[3] != (uint8)(0x08) )
{
printf("Error : read buffer has wrong command bytes \n");
return -1;
}
if( recBuff[6] != 0 )
{
printf("Errorcode (byte 6): %d\n", (unsigned int)recBuff[6]);
return -1;
}
printf("PowerLevel default (byte 7): %d\n", (unsigned int)recBuff[7]);
printf("ResetSource (byte 8): %d\n", (unsigned int)recBuff[8]);
printf("ControlFW Version (bytes 9 and 10): %.3f\n", (unsigned int)recBuff[10] + (double)recBuff[9]/100.0);
printf("ControlBL Version (bytes 11 and 12): %.3f\n", (unsigned int)recBuff[12] + (double)recBuff[11]/100.0);
printf("FIO default directions and states (bytes 14 and 15):\n");
for( i = 0; i < 8; i++ )
printf(" FIO%d: %d and %d\n", i,( (unsigned int)recBuff[14] << (31 - i) ) >> 31, ( (unsigned int)recBuff[15] << (31 - i) ) >> 31);
printf("EIO default directions and states (bytes 16 and 17):\n");
for( i = 0; i < 8; i++ )
printf(" EIO%d: %d and %d\n", i, ( (unsigned int)recBuff[16] << (31 - i) ) >> 31, ( (unsigned int)recBuff[17] << (31 - i) ) >> 31);
printf("CIO default directions and states (byte 18):\n");
for( i = 0; i <= 3; i++ )
printf(" CIO%d: %d and %d\n", i, ( (unsigned int)recBuff[18] << (27 - i) ) >> 31, ( (unsigned int)recBuff[18] << (31 - i) ) >> 31);
printf("MIO default directions and states (byte 19):\n");
for( i = 0; i <= 2; i++ )
printf(" MIO%d: %d and %d\n", i, ( (unsigned int)recBuff[19] << (27 - i) ) >> 31, ( (unsigned int)recBuff[19] << (31 - i) ) >> 31);
printf("DAC0 default (bytes 20 and 21):\n Enabled: %d\n Update: %d\n", ( (unsigned int)recBuff[21] << 24 ) >> 31, ( (unsigned int)recBuff[21] << 25 ) >> 31);
//Getting DAC0 binary value
dac = (double)( (unsigned int)recBuff[20] + (( (unsigned int)recBuff[21] << 28 ) >> 20) );
//Getting DAC0 analog value ( Volts = (Bits - Offset)/Slope )
dac = (dac - caliInfo->ccConstants[11])/caliInfo->ccConstants[10];
printf(" Voltage: %.3f V\n", dac);
printf("DAC1 default (bytes 22 and 23):\n Enabled: %d\n Update: %d\n", ( (unsigned int)recBuff[23] << 24 ) >> 31, ( (unsigned int)recBuff[23] << 25 ) >> 31);
//getting DAC1 binary value
dac = (double)( (unsigned int)recBuff[22] + (( (unsigned int)recBuff[23] << 28 ) >> 20) );
//getting DAC1 analog value ( Volts = (Bits - Offset)/Slope )
dac = (dac - caliInfo->ccConstants[13])/caliInfo->ccConstants[12];
printf(" Voltage: %.3f V\n", dac);
return 0;
}