initscripts-shr: remove devtmpfs initscript for palmpre machine
[openembedded.git] / recipes / robostix-utils / robostix-cmdline / robostix.c
blobbe47b5c5a9bd535a7893cb61c626418e43b13a0f
1 /****************************************************************************
3 * Copyright (c) 2006 Dave Hylands <dhylands@gmail.com>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
9 * Alternatively, this software may be distributed under the terms of BSD
10 * license.
12 * See README and COPYING for more details.
14 ****************************************************************************/
15 /**
17 * robostix.c
19 * PURPOSE:
21 * This implements the usermode program for talking to the robostix.
23 *****************************************************************************/
25 /* ---- Include Files ---------------------------------------------------- */
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <fcntl.h>
30 #include <errno.h>
32 #include "robostix.h"
34 /* ---- Public Variables ------------------------------------------------- */
36 int gFd = -1;
38 int gVal;
40 /* ---- Private Constants and Types -------------------------------------- */
41 /* ---- Private Variables ------------------------------------------------ */
43 typedef struct
45 const char *cmdStr;
46 const char *argStr;
47 const char *helpStr;
48 int (*parseArgs)( int argc, char **argv );
49 void (*execFunc)( int cmd );
50 int cmd;
52 } Cmd;
54 int ParseNone( int argc, char **argv );
55 int ParseOnOffArg( int argc, char **argv );
56 int ParseOnOffPulseArg( int argc, char **argv );
57 void Usage( void );
59 void Power( int cmd );
60 void ReadIOctl( int cmd );
61 void SimpleIOctl( int cmd );
63 Cmd gCmd[] =
65 { "power", "on|off", "Controls the robostix voltage regulators", ParseOnOffArg, Power, -1 },
66 { "reset", "on|off|pulse", "Resets the robostix", ParseOnOffPulseArg, SimpleIOctl, ROBOSTIX_IOCTL_RESET },
67 { "245", "on|off", "Controls the 245 buffer chip", ParseOnOffArg, SimpleIOctl, ROBOSTIX_IOCTL_245_ENABLE },
69 { "sck", "on|off", "Sets/clears the SCK line", ParseOnOffArg, SimpleIOctl, ROBOSTIX_IOCTL_SET_SCK },
70 { "ss", "on|off", "Sets/clears the SS line", ParseOnOffArg, SimpleIOctl, ROBOSTIX_IOCTL_SET_SS },
71 { "txd", "on|off", "Sets/clears the IR-TXD line", ParseOnOffArg, SimpleIOctl, ROBOSTIX_IOCTL_SET_IR_TXD },
72 { "mosi", "on|off", "Sets/clears the MOSI line", ParseOnOffArg, SimpleIOctl, ROBOSTIX_IOCTL_SET_MOSI },
74 { "rxd", "", "Reads the IR-RXD line", ParseNone, ReadIOctl, ROBOSTIX_IOCTL_GET_IR_RXD },
75 { "irq", "", "Reads the TM-IRQ line", ParseNone, ReadIOctl, ROBOSTIX_IOCTL_GET_IRQ },
76 { "miso", "", "Reads the MISO line", ParseNone, ReadIOctl, ROBOSTIX_IOCTL_GET_MISO },
78 { NULL }
81 /* ---- Private Function Prototypes -------------------------------------- */
82 /* ---- Functions -------------------------------------------------------- */
85 /****************************************************************************
87 * main
89 ***************************************************************************/
91 int main( int argc, char **argv )
93 char *cmdStr;
94 int argIdx;
95 Cmd *cmd;
97 if ( argc == 1 )
99 Usage( );
100 exit( 0 );
103 if (( gFd = open( "/dev/robostix", O_RDWR )) < 0 )
105 perror( "Unable to open /dev/robostix" );
106 exit( 1 );
109 argIdx = 1;
110 cmdStr = argv[ argIdx++ ];
112 for ( cmd = gCmd; cmd->cmdStr != NULL; cmd++ )
114 if ( strcasecmp( cmdStr, cmd->cmdStr ) == 0 )
116 break;
119 if ( cmd->cmdStr == NULL )
121 fprintf( stderr, "Unrecognized command: '%s'\n", cmdStr );
122 exit( 1 );
125 if ( cmd->parseArgs( argc - argIdx, &argv[ argIdx ] ))
127 cmd->execFunc( cmd->cmd );
130 close( gFd );
132 exit( 0 );
133 return 0;
135 } // main
137 /****************************************************************************
139 * Checks to see if the argument is on/off (or equivalent)
141 ***************************************************************************/
143 int IsOnOffArg( int argc, char **argv )
145 if (( strcasecmp( *argv, "on" ) == 0 )
146 || ( strcasecmp( *argv, "t" ) == 0 )
147 || ( strcasecmp( *argv, "1" ) == 0 ))
149 gVal = 1;
150 return 1;
153 if (( strcasecmp( *argv, "off" ) == 0 )
154 || ( strcasecmp( *argv, "f" ) == 0 )
155 || ( strcasecmp( *argv, "0" ) == 0 ))
157 gVal = 0;
158 return 1;
161 return 0;
163 } // IsOnOffArg
165 /****************************************************************************
167 * Parses no arguments
169 ***************************************************************************/
171 int ParseNone( int argc, char **argv )
173 return 1;
175 } // ParseNone
177 /****************************************************************************
179 * Parses a command line argument for legel on/off values
181 ***************************************************************************/
183 int ParseOnOffArg( int argc, char **argv )
185 if ( IsOnOffArg( argc, argv ))
187 return 1;
190 fprintf( stderr, "Expecting on/off, found: '%s'\n", *argv );
191 return 0;
193 } // ParseOnOffArg
195 /****************************************************************************
197 * Parses a command line argument for legel on/off values
199 ***************************************************************************/
201 int ParseOnOffPulseArg( int argc, char **argv )
203 if (( strcasecmp( *argv, "pulse" ) == 0 )
204 || ( strcasecmp( *argv, "2" ) == 0 ))
206 gVal = 2;
207 return 1;
210 if ( IsOnOffArg( argc, argv ))
212 return 1;
215 fprintf( stderr, "Expecting on/off/pulse, found: '%s'\n", *argv );
216 return 0;
218 } // ParseOnoffPulseArg
220 /****************************************************************************
222 * Power
224 ***************************************************************************/
226 void Power( int cmd )
228 SimpleIOctl( ROBOSTIX_IOCTL_POWER_VCC5 );
230 } // Power
232 /****************************************************************************
234 * SimpleIOctl
236 ***************************************************************************/
238 void SimpleIOctl( int cmd )
240 if ( ioctl( gFd, cmd, gVal ) != 0 )
242 fprintf( stderr, "ioctl call failed: %d\n", errno );
245 } // SimpleIOctl
247 /****************************************************************************
249 * SimpleIOctl
251 ***************************************************************************/
253 void ReadIOctl( int cmd )
255 if ( ioctl( gFd, cmd, &gVal ) != 0 )
257 fprintf( stderr, "ioctl call failed: %d\n", errno );
260 } // ReadIOctl
262 /****************************************************************************
264 * Usage
266 ***************************************************************************/
268 void Usage( void )
270 Cmd *cmd;
272 for ( cmd = gCmd; cmd->cmdStr != NULL; cmd++ )
274 printf( "%-12s %-12s %s\n", cmd->cmdStr, cmd->argStr, cmd->helpStr );
277 } // Usage