/* 
    File to test the A/D Converter driver for LYNX OS 
    Copyright Kristian Mueller 2005
*/

#include <sys/file.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>

#include "ad_converterinfo.h"

int main()
{
	int iReadReturnValue;
	int iIOCTLReturnValue;
	int iDevFD;
	unsigned char sBuffer[256];
	unsigned int iAnalogValue = 0;
	unsigned char i = 0;
	unsigned short iMSB = 0;
	unsigned short iLSB = 0;


	if ((iDevFD = open("/dev/adc", O_RDWR)) == -1) {
		perror("/dev/adc could not be opened\n");
		return -1;
	}

	printf("The A/D-Converter device could be opened. :-)\n");

	for (i = 0; i < 16; i++) {
		iIOCTLReturnValue = ioctl(iDevFD, CMD_SET_DOUT, &i);
		if (iIOCTLReturnValue < 0) {
			perror("Error Calling IOCTL");
			return -1;
		} else {
			printf("IOCTL returned <%i>\n", iIOCTLReturnValue);
		}
		usleep(1);
	}

	iIOCTLReturnValue = ioctl(iDevFD, CMD_INIT_AD1, 0);
	if (iIOCTLReturnValue < 0) {
		perror("Error Calling IOCTL");
		return -1;
	} else {
		printf("IOCTL to enable AD-Conv. returned <%i>\n",
		       iIOCTLReturnValue);
	}

	while (1) {
		iReadReturnValue = read(iDevFD, sBuffer, 2);
		if (iReadReturnValue < 0) {
			perror("Error Reading from Device!");
			return -1;
		} else {
			iMSB = sBuffer[0];
			iLSB = sBuffer[1];

			iAnalogValue = iMSB;
			iAnalogValue = iAnalogValue << 8;
			iAnalogValue |= iLSB;

			printf("<%d> = <%X>\n", iAnalogValue,
			       iAnalogValue);
		}
		usleep(10);
	};

/*    
    if (write(par , &v, 1) < 0) {
        printf("Fehler beim write\n");
        return 1;
    }
*/
	printf("Test finished. :)\n");
	close(iDevFD);

	return 0;
}

