xref: /openbmc/openbmc-tools/adcapp/src/adcapp.c (revision 7c0a5dc1)
1cf3c1e67SAndrew Jeffery /*****************************************************************
2cf3c1e67SAndrew Jeffery  *
3cf3c1e67SAndrew Jeffery  * adcapp.c
4cf3c1e67SAndrew Jeffery  * application to acess ADC adriver
5cf3c1e67SAndrew Jeffery  *
6cf3c1e67SAndrew Jeffery  * Author: Rama Rao Bisa <ramab@ami.com>
7cf3c1e67SAndrew Jeffery  *
8cf3c1e67SAndrew Jeffery  * Copyright (C) <2019> <American Megatrends International LLC>
9cf3c1e67SAndrew Jeffery  *
10cf3c1e67SAndrew Jeffery  *****************************************************************/
11cf3c1e67SAndrew Jeffery 
12cf3c1e67SAndrew Jeffery #include <stdio.h>
13cf3c1e67SAndrew Jeffery #include <stdlib.h>
14cf3c1e67SAndrew Jeffery #include <errno.h>
15cf3c1e67SAndrew Jeffery #include <string.h>
16cf3c1e67SAndrew Jeffery #include <fcntl.h>
17cf3c1e67SAndrew Jeffery #include <ctype.h>
18cf3c1e67SAndrew Jeffery #include <unistd.h>
19cf3c1e67SAndrew Jeffery #include <sys/select.h>
20cf3c1e67SAndrew Jeffery #include <sys/ioctl.h>
21cf3c1e67SAndrew Jeffery #include <sys/poll.h>
22cf3c1e67SAndrew Jeffery #include <sys/time.h>
23cf3c1e67SAndrew Jeffery #include <stdint.h>
24cf3c1e67SAndrew Jeffery #include "EINTR_wrappers.h"
25cf3c1e67SAndrew Jeffery #include "adc.h"
26cf3c1e67SAndrew Jeffery #include "adcifc.h"
27cf3c1e67SAndrew Jeffery 
28cf3c1e67SAndrew Jeffery typedef enum {
29cf3c1e67SAndrew Jeffery 	GET_ADC_VALUE,
30cf3c1e67SAndrew Jeffery 	END_OF_FUNCLIST
31cf3c1e67SAndrew Jeffery 
32cf3c1e67SAndrew Jeffery }e_adc_actions;
33cf3c1e67SAndrew Jeffery 
34cf3c1e67SAndrew Jeffery e_adc_actions action = END_OF_FUNCLIST;
35cf3c1e67SAndrew Jeffery 
ShowUsuage(void)36cf3c1e67SAndrew Jeffery static void ShowUsuage ( void )
37cf3c1e67SAndrew Jeffery {
38cf3c1e67SAndrew Jeffery 	printf ("ADC Test Tool - Copyright (c) 2009-2015 American Megatrends Inc.\n");
39cf3c1e67SAndrew Jeffery 	printf( "Usage : addapp NumOfMaxChannels <option> \n" );
40cf3c1e67SAndrew Jeffery 	printf( "option: \n" );
41cf3c1e67SAndrew Jeffery 	printf( "\t--read-adc-channel 	\tGet ADC value for all the ADC channels\n" );
42cf3c1e67SAndrew Jeffery 	printf( "\n" );
43cf3c1e67SAndrew Jeffery }
44cf3c1e67SAndrew Jeffery 
process_arguments(int argc,char ** argv)45cf3c1e67SAndrew Jeffery static int process_arguments( int argc, char **argv )
46cf3c1e67SAndrew Jeffery {
47cf3c1e67SAndrew Jeffery 	int i=2;
48cf3c1e67SAndrew Jeffery 	if( strcmp( argv[ i ], "--read-adc-channel" ) == 0 )
49cf3c1e67SAndrew Jeffery 	{
50cf3c1e67SAndrew Jeffery 		action = GET_ADC_VALUE;
51cf3c1e67SAndrew Jeffery 	}
52cf3c1e67SAndrew Jeffery 	else
53cf3c1e67SAndrew Jeffery 	{
54cf3c1e67SAndrew Jeffery 		action = END_OF_FUNCLIST;
55cf3c1e67SAndrew Jeffery 	}
56cf3c1e67SAndrew Jeffery 	return 0;
57cf3c1e67SAndrew Jeffery }
58cf3c1e67SAndrew Jeffery 
59cf3c1e67SAndrew Jeffery int
main(int argc,char * argv[])60cf3c1e67SAndrew Jeffery main ( int argc , char* argv [] )
61cf3c1e67SAndrew Jeffery {
62cf3c1e67SAndrew Jeffery 
63cf3c1e67SAndrew Jeffery 	get_adc_value_t get_adc_value;
64cf3c1e67SAndrew Jeffery 	int max_adc_channels;
65cf3c1e67SAndrew Jeffery 	int i,ret_val;
66cf3c1e67SAndrew Jeffery 	unsigned short reading=0;
67cf3c1e67SAndrew Jeffery 	if ( !(argc >= 3 ) )
68cf3c1e67SAndrew Jeffery 	{
69cf3c1e67SAndrew Jeffery 		ShowUsuage () ;
70cf3c1e67SAndrew Jeffery 		return 0;
71cf3c1e67SAndrew Jeffery 	}
72cf3c1e67SAndrew Jeffery 	max_adc_channels = (unsigned char)strtol( argv[1], NULL, 10);
73cf3c1e67SAndrew Jeffery 	process_arguments( argc , argv);
74cf3c1e67SAndrew Jeffery 	if ( (END_OF_FUNCLIST == action))
75cf3c1e67SAndrew Jeffery 	{
76cf3c1e67SAndrew Jeffery 		ShowUsuage ();
77cf3c1e67SAndrew Jeffery 		return 0;
78cf3c1e67SAndrew Jeffery 	}
79cf3c1e67SAndrew Jeffery 
80cf3c1e67SAndrew Jeffery 	switch ( action )
81cf3c1e67SAndrew Jeffery 	{
82cf3c1e67SAndrew Jeffery 		case GET_ADC_VALUE:
83cf3c1e67SAndrew Jeffery 			for (i = 0; i < max_adc_channels; i++)
84cf3c1e67SAndrew Jeffery 			{
85cf3c1e67SAndrew Jeffery 				get_adc_value.channel_num  = i;
86cf3c1e67SAndrew Jeffery 				get_adc_value.channel_value = 0;
87cf3c1e67SAndrew Jeffery 
88cf3c1e67SAndrew Jeffery 				ret_val = get_adc_val(get_adc_value.channel_num, &reading);
89cf3c1e67SAndrew Jeffery 
90cf3c1e67SAndrew Jeffery 				if (ret_val == -1)
91cf3c1e67SAndrew Jeffery 				{
92cf3c1e67SAndrew Jeffery 					printf ("Read ADC channel failed\n");
93cf3c1e67SAndrew Jeffery 					return -1;
94cf3c1e67SAndrew Jeffery 				}
95*7c0a5dc1SRaghul R                                 printf(
96*7c0a5dc1SRaghul R                                     "ADC Channel Value =%5dmv for channel %d\n",
97*7c0a5dc1SRaghul R                                     reading, get_adc_value.channel_num);
98cf3c1e67SAndrew Jeffery                         }
99cf3c1e67SAndrew Jeffery                         break;
100cf3c1e67SAndrew Jeffery 
101cf3c1e67SAndrew Jeffery 		default:
102cf3c1e67SAndrew Jeffery 			printf("Invalid ADC Function Call ");
103cf3c1e67SAndrew Jeffery 			break;
104cf3c1e67SAndrew Jeffery 	}
105cf3c1e67SAndrew Jeffery 
106cf3c1e67SAndrew Jeffery 	return 0;
107cf3c1e67SAndrew Jeffery }
108