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