From ff94868a658c026397b095f0f14224e2ece49782 Mon Sep 17 00:00:00 2001 From: Jason Benaim Date: Wed, 5 Sep 2018 12:44:11 -0700 Subject: [PATCH] Initial commit --- .gitignore | 3 ++ Makefile | 12 ++++++ comms.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++ comms.h | 5 +++ hs100.c | 56 +++++++++++++++++++++++++ 5 files changed, 194 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 comms.c create mode 100644 comms.h create mode 100644 hs100.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..51ff052 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +hs100 +*.o +*.swp diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..68dc978 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +target ?= hs100 +objects := $(patsubst %.c,%.o,$(wildcard *.c)) +CFLAGS=-Wall -Werror -std=c99 -ggdb -Os + +.PHONY: all +all: $(target) + +.PHONY: clean +clean: + rm -f $(target) $(objects) + +$(target): $(objects) diff --git a/comms.c b/comms.c new file mode 100644 index 0000000..e4a09fe --- /dev/null +++ b/comms.c @@ -0,0 +1,118 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "comms.h" + +bool hs100_encrypt(uint8_t *d, uint8_t *s, size_t len) +{ + if(d == NULL) + return false; + if(s == NULL) + return false; + if(len == 0) + return false; + + uint8_t key = 0xab; + for(size_t i=0; i +#include +#include +#include +#include "comms.h" + +struct cmd_alias_s { + char *alias; + char *command; + int end; +}; +struct cmd_alias_s cmd_aliases[] = { + { + .alias = "off", + .command = "{\"system\":{\"set_relay_state\":{\"state\":0}}}", + }, + { + .alias = "on", + .command = "{\"system\":{\"set_relay_state\":{\"state\":1}}}", + }, + { + .end = 1, + }, +}; + +char *get_cmd(char *needle) +{ + int cmds_index = 0; + while(!cmd_aliases[cmds_index].end) + { + if(!strcmp(cmd_aliases[cmds_index].alias, needle)) + return cmd_aliases[cmds_index].command; + cmds_index++; + } + return needle; +} + +int main(int argc, char *argv[]) +{ + char *plug_addr = argv[1]; + char *cmd = argv[2]; + + cmd = get_cmd(cmd); + + char *response = hs100_send(plug_addr, cmd); + + if(response == NULL) { + fprintf(stderr, "failed to send command\n"); + return 1; + } + + printf("%s\n", response); + + free(response); + return 0; +}