From 6a27a521f99c7babc9d000465b661f66b54ee101 Mon Sep 17 00:00:00 2001 From: fishsoupisgood Date: Sun, 8 Nov 2020 00:44:09 +0000 Subject: add wait until disarmed --- arm.c | 14 +++++++++++--- arm.h | 2 +- net_arm.c | 25 ++++++++++++++++++++----- serial_arm.c | 30 ++++++++++++++++++++++-------- 4 files changed, 54 insertions(+), 17 deletions(-) diff --git a/arm.c b/arm.c index 7cfdd3f..e34115d 100644 --- a/arm.c +++ b/arm.c @@ -122,12 +122,13 @@ static const char *ready_to_str (int i) -int show_state (int fd) +int show_state (int fd, int zone) { int i, l = SIA_MAX_DATA_LENGTH; unsigned char armed[SIA_MAX_DATA_LENGTH]; unsigned char state[SIA_MAX_DATA_LENGTH]; unsigned char ready[SIA_MAX_DATA_LENGTH]; + int s = 0; i = get_thing (fd, "SA", armed); @@ -161,12 +162,19 @@ int show_state (int fd) printf ("%-6s | %-15s | %-15s | %-15s\n", "Zone", "Armed", "State", "Ready"); printf ("-------+-----------------+-----------------+----------------\n"); - for (i = 0; i < l; ++i) + if (zone > 0) { + s = zone; + l = zone + 1; + } + + for (i = s; i < l; ++i) printf ("%6d | %-15s | %-15s | %-15s\n", i + 1, armed_to_str (armed[i]), state_to_str (state[i]), ready_to_str (ready[i])); printf ("\n"); - return armed[0] - '0'; + if (zone < 0) zone = 0; + + return armed[zone] - '0'; } diff --git a/arm.h b/arm.h index 3d4de83..d53e5b1 100644 --- a/arm.h +++ b/arm.h @@ -1,6 +1,6 @@ #ifndef _arm_h_ #define _arm_h_ extern int auth_cmd_with_ack(int fd, unsigned char fn, const void *data, size_t len,SIA_Block *b); -extern int show_state(int fd); +extern int show_state(int fd, int zone); #endif /* _arm_h_ */ diff --git a/net_arm.c b/net_arm.c index 310de09..b5674d4 100644 --- a/net_arm.c +++ b/net_arm.c @@ -39,11 +39,13 @@ int main (int argc, char *argv[]) unsigned opt; int zone = -1; int action = -1; + int disarm = 0; const char *host = NULL; unsigned port = 10005; int fd; + int timeout = 15; - while ((opt = getopt (argc, argv, "h:p:z:USPRBFTAD")) != -1) { + while ((opt = getopt (argc, argv, "h:p:z:USPRBFTADW")) != -1) { switch (opt) { case 'h': host = optarg; @@ -93,6 +95,10 @@ int main (int argc, char *argv[]) action = 8; break; + case 'W': + disarm++; + break; + default: /* '?' */ return usage (argv[0]); } @@ -108,9 +114,15 @@ int main (int argc, char *argv[]) } + if (disarm) { + if (!show_state (fd, zone)) + return 0; + + action = 0; + } if (action == -1) - return show_state (fd); + return show_state (fd, zone); if (zone != -1) @@ -127,14 +139,17 @@ int main (int argc, char *argv[]) switch (b.function) { case SIA_FN_ACKNOLEDGE: printf ("Panel acks command\n"); - return 0; + break; case SIA_FN_REJECT: printf ("Panel nacks command\n"); - /*fall through */ + return -1; } - return -1; + while (disarm && timeout && show_state (fd, zone)) + sleep (2); + + return !timeout; } diff --git a/serial_arm.c b/serial_arm.c index 4ed28b9..c8f6b66 100644 --- a/serial_arm.c +++ b/serial_arm.c @@ -39,11 +39,13 @@ int main (int argc, char *argv[]) unsigned opt; int zone = -1; int action = -1; + int disarm = 0; const char *port = NULL; unsigned baud = 9600; int fd; + int timeout = 15; - while ((opt = getopt (argc, argv, "h:p:z:USPRBFTAD")) != -1) { + while ((opt = getopt (argc, argv, "h:p:z:USPRBFTADW")) != -1) { switch (opt) { case 'p': port = optarg; @@ -93,6 +95,10 @@ int main (int argc, char *argv[]) action = 8; break; + case 'W': + disarm++; + break; + default: /* '?' */ return usage (argv[0]); } @@ -112,13 +118,18 @@ int main (int argc, char *argv[]) - if (action == -1) { - if (show_state (fd)) - return -1; - return 0; + if (disarm) { + if (!show_state (fd, zone)) + return 0; + + action = 0; } + if (action == -1) + return show_state (fd, zone); + + if (zone != -1) sprintf (cmd, "SA%d*%d", zone, action); @@ -134,14 +145,17 @@ int main (int argc, char *argv[]) switch (b.function) { case SIA_FN_ACKNOLEDGE: printf ("Panel acks command\n"); - return 0; + break; case SIA_FN_REJECT: printf ("Panel nacks command\n"); - /*fall through */ + return -1; } - return -1; + while (disarm && timeout && show_state (fd, zone)) + sleep (2); + + return !timeout; } -- cgit v1.2.3