V67: #198 added process exit codes for pigs

This commit is contained in:
joan 2018-03-11 13:24:54 +00:00
parent e02f824fe8
commit eafa0b1d66
7 changed files with 95 additions and 19 deletions

View File

@ -96,6 +96,6 @@ command.o: command.c pigpio.h command.h
pigpiod.o: pigpiod.c pigpio.h pigpiod.o: pigpiod.c pigpio.h
pigpiod_if.o: pigpiod_if.c pigpio.h pigpiod_if.h command.h pigpiod_if.o: pigpiod_if.c pigpio.h pigpiod_if.h command.h
pigpiod_if2.o: pigpiod_if2.c pigpio.h pigpiod_if2.h command.h pigpiod_if2.o: pigpiod_if2.c pigpio.h pigpiod_if2.h command.h
pigs.o: pigs.c pigpio.h command.h pigs.o: pigs.c pigpio.h command.h pigs.h

View File

@ -135,7 +135,7 @@ $(LIB3): $(OBJ3)
pig2vcd.o: pig2vcd.c pigpio.h pig2vcd.o: pig2vcd.c pigpio.h
pigpiod.o: pigpiod.c pigpio.h pigpiod.o: pigpiod.c pigpio.h
pigs.o: pigs.c pigpio.h command.h pigs.o: pigs.c pigpio.h command.h pigs.h
x_pigpio.o: x_pigpio.c pigpio.h x_pigpio.o: x_pigpio.c pigpio.h
x_pigpiod_if.o: x_pigpiod_if.c pigpiod_if.h pigpio.h x_pigpiod_if.o: x_pigpiod_if.c pigpiod_if.h pigpio.h
x_pigpiod_if2.o: x_pigpiod_if2.c pigpiod_if2.h pigpio.h x_pigpiod_if2.o: x_pigpiod_if2.c pigpiod_if2.h pigpio.h

3
README
View File

@ -23,6 +23,7 @@ o the library (libpigpiod_if2.so) in /usr/local/lib
o the header file (pigpio.h) in /usr/local/include o the header file (pigpio.h) in /usr/local/include
o the header file (pigpiod_if.h) in /usr/local/include o the header file (pigpiod_if.h) in /usr/local/include
o the header file (pigpiod_if2.h) in /usr/local/include o the header file (pigpiod_if2.h) in /usr/local/include
o the header file (pigs.h) in /usr/local/include
o the daemon (pigpiod) in /usr/local/bin o the daemon (pigpiod) in /usr/local/bin
o the socket interface (pigs) in /usr/local/bin o the socket interface (pigs) in /usr/local/bin
o the utility pig2vcd in /usr/local/bin o the utility pig2vcd in /usr/local/bin
@ -35,7 +36,7 @@ TEST (optional)
* * * *
* All the tests make extensive use of gpio 25 (pin 22). * * All the tests make extensive use of gpio 25 (pin 22). *
* Ensure that either nothing or just a LED is connected to * * Ensure that either nothing or just a LED is connected to *
* gpio 4 before running any of the tests. * * gpio 25 before running any of the tests. *
* * * *
* Some tests are statistical in nature and so may on * * Some tests are statistical in nature and so may on *
* occasion fail. Repeated failures on the same test or * * occasion fail. Repeated failures on the same test or *

View File

@ -31,7 +31,7 @@ For more information, please refer to <http://unlicense.org/>
#include <stdint.h> #include <stdint.h>
#include <pthread.h> #include <pthread.h>
#define PIGPIO_VERSION 6701 #define PIGPIO_VERSION 6702
/*TEXT /*TEXT

20
pigs.1
View File

@ -96,6 +96,26 @@ echo "{command}+" >/dev/pigpio
.br .br
pigs will show the result of the command on screen. pigs will show the result of the command on screen.
.br
The pigs process returns an exit status (which can be displayed with
the command echo $?).
.br
.EX
PIGS_OK 0
.br
PIGS_CONNECT_ERR 255
.br
PIGS_OPTION_ERR 254
.br
PIGS_SCRIPT_ERR 253
.br
.br
.br
.EE
.br .br
The results of /dev/pigpio commands need to be read from /dev/pigout, The results of /dev/pigpio commands need to be read from /dev/pigout,
e.g. cat /dev/pigout (try cat /dev/pigout& so that all subsequent e.g. cat /dev/pigout (try cat /dev/pigout& so that all subsequent

44
pigs.c
View File

@ -26,7 +26,7 @@ For more information, please refer to <http://unlicense.org/>
*/ */
/* /*
This version is for pigpio version 56+ This version is for pigpio version 67+
*/ */
#include <stdio.h> #include <stdio.h>
@ -42,6 +42,7 @@ This version is for pigpio version 56+
#include "pigpio.h" #include "pigpio.h"
#include "command.h" #include "command.h"
#include "pigs.h"
/* /*
This program provides a socket interface to some of This program provides a socket interface to some of
@ -53,16 +54,20 @@ char response_buf[CMD_MAX_EXTENSION];
int printFlags = 0; int printFlags = 0;
int status = PIGS_OK;
#define SOCKET_OPEN_FAILED -1 #define SOCKET_OPEN_FAILED -1
#define PRINT_HEX 1 #define PRINT_HEX 1
#define PRINT_ASCII 2 #define PRINT_ASCII 2
void fatal(char *fmt, ...) void report(int err, char *fmt, ...)
{ {
char buf[128]; char buf[128];
va_list ap; va_list ap;
if (err > status) status = err;
va_start(ap, fmt); va_start(ap, fmt);
vsnprintf(buf, sizeof(buf), fmt, ap); vsnprintf(buf, sizeof(buf), fmt, ap);
va_end(ap); va_end(ap);
@ -76,6 +81,8 @@ static int initOpts(int argc, char *argv[])
{ {
int opt, args; int opt, args;
opterr = 0;
args = 1; args = 1;
while ((opt = getopt(argc, argv, "ax")) != -1) while ((opt = getopt(argc, argv, "ax")) != -1)
@ -91,7 +98,11 @@ static int initOpts(int argc, char *argv[])
printFlags |= PRINT_HEX; printFlags |= PRINT_HEX;
args++; args++;
break; break;
}
default:
args++;
report(PIGS_OPTION_ERR, "ERROR: bad option %c", optopt);
}
} }
return args; return args;
} }
@ -150,13 +161,13 @@ void print_result(int sock, int rv, cmdCmd_t cmd)
if (r < 0) if (r < 0)
{ {
printf("%d\n", r); printf("%d\n", r);
fatal("ERROR: %s", cmdErrStr(r)); report(PIGS_SCRIPT_ERR, "ERROR: %s", cmdErrStr(r));
} }
break; break;
case 2: case 2:
printf("%d\n", r); printf("%d\n", r);
if (r < 0) fatal("ERROR: %s", cmdErrStr(r)); if (r < 0) report(PIGS_SCRIPT_ERR, "ERROR: %s", cmdErrStr(r));
break; break;
case 3: case 3:
@ -176,7 +187,7 @@ void print_result(int sock, int rv, cmdCmd_t cmd)
I2CZ SERR SLR SPIX SPIR I2CZ SERR SLR SPIX SPIR
*/ */
printf("%d", r); printf("%d", r);
if (r < 0) fatal("ERROR: %s", cmdErrStr(r)); if (r < 0) report(PIGS_SCRIPT_ERR, "ERROR: %s", cmdErrStr(r));
if (r > 0) if (r > 0)
{ {
if (printFlags == PRINT_ASCII) printf(" "); if (printFlags == PRINT_ASCII) printf(" ");
@ -203,7 +214,7 @@ void print_result(int sock, int rv, cmdCmd_t cmd)
if (r != (4 + (4*PI_MAX_SCRIPT_PARAMS))) if (r != (4 + (4*PI_MAX_SCRIPT_PARAMS)))
{ {
printf("%d", r); printf("%d", r);
fatal("ERROR: %s", cmdErrStr(r)); report(PIGS_SCRIPT_ERR, "ERROR: %s", cmdErrStr(r));
} }
else else
{ {
@ -223,7 +234,7 @@ void print_result(int sock, int rv, cmdCmd_t cmd)
if (r < 0) if (r < 0)
{ {
printf("%d", r); printf("%d", r);
fatal("ERROR: %s", cmdErrStr(r)); report(PIGS_SCRIPT_ERR, "ERROR: %s", cmdErrStr(r));
} }
p = (uint32_t *)response_buf; p = (uint32_t *)response_buf;
@ -354,26 +365,29 @@ int main(int argc , char *argv[])
print_result(sock, cmdInfo[idx].rv, cmd); print_result(sock, cmdInfo[idx].rv, cmd);
} }
else fatal("socket receive failed"); else report(PIGS_CONNECT_ERR, "socket receive failed");
} }
else fatal("socket send failed"); else report(PIGS_CONNECT_ERR, "socket send failed");
} }
else fatal("socket connect failed"); else report(PIGS_CONNECT_ERR, "socket connect failed");
} }
} }
else fatal("%s only allowed within a script", cmdInfo[idx].name); else report(PIGS_SCRIPT_ERR,
"%s only allowed within a script", cmdInfo[idx].name);
} }
else else
{ {
if (idx == CMD_UNKNOWN_CMD) if (idx == CMD_UNKNOWN_CMD)
fatal("%s? unknown command, pigs h for help", cmdStr()); report(PIGS_SCRIPT_ERR,
"%s? unknown command, pigs h for help", cmdStr());
else else
fatal("%s: bad parameter, pigs h for help", cmdStr()); report(PIGS_SCRIPT_ERR,
"%s: bad parameter, pigs h for help", cmdStr());
} }
} }
if (sock >= 0) close(sock); if (sock >= 0) close(sock);
return 0; return status;
} }

41
pigs.h Normal file
View File

@ -0,0 +1,41 @@
/*
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/>
*/
/*
This version is for pigpio version 67+
*/
#ifndef PIGS_H
#define PIGS_H
#define PIGS_OK 0
#define PIGS_CONNECT_ERR 255
#define PIGS_OPTION_ERR 254
#define PIGS_SCRIPT_ERR 253
#endif