diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2021-12-01 23:42:19 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2021-12-01 23:42:19 -0700 |
commit | 62715093e446d952bbc3fa82fdb65deacd576be2 (patch) | |
tree | c4fca7d19d8cd73b76c030de8f66eedc1930ec22 /main/sockbuf.c | |
parent | b1ca00800f34ab86c0a99c46796c73a8028157ff (diff) | |
download | esp32-ws2812b-62715093e446d952bbc3fa82fdb65deacd576be2.tar.gz esp32-ws2812b-62715093e446d952bbc3fa82fdb65deacd576be2.tar.bz2 esp32-ws2812b-62715093e446d952bbc3fa82fdb65deacd576be2.zip |
Add a controller shell.
This adds a mini shell to the tcp server that allows the user
to modify the current state.
Commands are in the form:
set [int_attribute] (=|+=|-=) [number]
set [bool_attribute] (on|off|toggle)
print
end
for example:
set brightness += 5
set power on
print
end
Diffstat (limited to 'main/sockbuf.c')
-rw-r--r-- | main/sockbuf.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/main/sockbuf.c b/main/sockbuf.c new file mode 100644 index 0000000..0fede63 --- /dev/null +++ b/main/sockbuf.c @@ -0,0 +1,43 @@ +#include "sockbuf.h" + +#include <unistd.h> +#include <string.h> + +void sockbuf_write(sockbuf_t* sockbuf, const char* value) +{ + write(sockbuf->socket, value, strlen(value)); +} + +sockbuf_t* init_sockbuf(sockbuf_t* sockbuf, int socket) +{ + memset(sockbuf, 0, sizeof(sockbuf_t)); + sockbuf->socket = socket; + + return sockbuf; +} + +int peek_char(sockbuf_t* sockbuf) +{ + if (sockbuf->next == sockbuf->last) { + sockbuf->next = 0; + int size = read(sockbuf->socket, sockbuf->buf, sizeof(sockbuf->buf)); + sockbuf->last = (uint8_t) size; + + if (size <= 0) { + return size - 1; + } + } + + return sockbuf->buf[sockbuf->next]; +} + +int get_char(sockbuf_t* sockbuf) +{ + int ret = peek_char(sockbuf); + + if (ret >= 0) { + sockbuf->next ++; + } + + return ret; +} |