mirror of https://github.com/joan2937/pigpio
V67: #198 added process exit codes for pigs
This commit is contained in:
parent
e02f824fe8
commit
eafa0b1d66
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -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
3
README
|
@ -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 *
|
||||||
|
|
2
pigpio.h
2
pigpio.h
|
@ -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
20
pigs.1
|
@ -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
|
||||||
|
|
42
pigs.c
42
pigs.c
|
@ -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,6 +98,10 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue