2013-12-12 11:27:22 +01:00
/*
This is free and unencumbered software released into the public domain .
Anyone is free to copy , modify , publish , use , compile , sell , or
distribute this software , either in source code form or as a compiled
binary , for any purpose , commercial or non - commercial , and by any
means .
In jurisdictions that recognize copyright laws , the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain . We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors . We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law .
THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND ,
EXPRESS OR IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY , FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT .
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM , DAMAGES OR
OTHER LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE ,
ARISING FROM , OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE .
For more information , please refer to < http : //unlicense.org/>
*/
/*
2016-10-30 16:30:20 +01:00
This version is for pigpio version 57 +
2013-12-12 11:27:22 +01:00
*/
# ifndef COMMAND_H
# define COMMAND_H
# include <stdio.h>
# include <string.h>
# include "pigpio.h"
2014-06-12 19:31:00 +02:00
# define CMD_MAX_PARAM 512
2014-11-20 16:36:16 +01:00
# define CMD_MAX_EXTENSION (1<<16)
2014-03-13 16:50:23 +01:00
2014-04-19 13:19:29 +02:00
# define CMD_UNKNOWN_CMD -1
# define CMD_BAD_PARAMETER -2
2014-06-12 19:31:00 +02:00
# define CMD_EXT_TOO_SMALL -3
# define CMD_P_ARR 10
# define CMD_V_ARR 10
2014-03-13 16:50:23 +01:00
# define CMD_NUMERIC 1
2014-04-19 13:19:29 +02:00
# define CMD_VAR 2
# define CMD_PAR 3
2014-03-13 16:50:23 +01:00
2014-06-12 19:31:00 +02:00
typedef struct
{
uint32_t cmd ;
uint32_t p1 ;
uint32_t p2 ;
union
{
uint32_t p3 ;
uint32_t ext_len ;
uint32_t res ;
} ;
} cmdCmd_t ;
2013-12-12 11:27:22 +01:00
typedef struct
{
2014-04-19 13:19:29 +02:00
int eaten ;
int8_t opt [ 4 ] ;
} cmdCtlParse_t ;
2014-03-13 16:50:23 +01:00
typedef struct
{
int cmd ; /* command number */
char * name ; /* command name */
int vt ; /* command verification type */
int rv ; /* command return value type */
2013-12-12 11:27:22 +01:00
} cmdInfo_t ;
2014-04-19 13:19:29 +02:00
typedef struct
{
uint32_t tag ;
int step ;
} cmdTagStep_t ;
typedef struct
{
2018-12-08 18:04:22 +01:00
uintptr_t p [ 5 ] ; //these are sometimes converted to pointers, so presumablly they sometimes have pointers stored in them, I haven't figured out where though. --plugwash
2014-04-19 13:19:29 +02:00
int8_t opt [ 4 ] ;
} cmdInstr_t ;
typedef struct
{
/*
+ - - - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - - - - - - - - +
| PARAMS . . . | VARS . . . | CMDS . . . | STRING AREA . . . |
+ - - - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - - - - - - - - +
*/
int * par ;
int * var ;
cmdInstr_t * instr ;
int instrs ;
char * str_area ;
int str_area_len ;
int str_area_pos ;
} cmdScript_t ;
2013-12-12 11:27:22 +01:00
extern cmdInfo_t cmdInfo [ ] ;
2014-03-13 16:50:23 +01:00
extern char * cmdUsage ;
2018-12-08 18:04:22 +01:00
int cmdParse ( char * buf , uintptr_t * p , unsigned ext_len , char * ext , cmdCtlParse_t * ctl ) ;
2014-04-19 13:19:29 +02:00
int cmdParseScript ( char * script , cmdScript_t * s , int diags ) ;
2013-12-12 11:27:22 +01:00
2014-03-13 16:50:23 +01:00
char * cmdErrStr ( int error ) ;
2013-12-12 11:27:22 +01:00
2014-03-13 16:50:23 +01:00
char * cmdStr ( void ) ;
2013-12-12 11:27:22 +01:00
# endif
2014-01-21 20:04:59 +01:00