aboutsummaryrefslogtreecommitdiff
path: root/main/sockbuf.c
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2021-12-01 23:42:19 -0700
committerJosh Rahm <joshuarahm@gmail.com>2021-12-01 23:42:19 -0700
commit62715093e446d952bbc3fa82fdb65deacd576be2 (patch)
treec4fca7d19d8cd73b76c030de8f66eedc1930ec22 /main/sockbuf.c
parentb1ca00800f34ab86c0a99c46796c73a8028157ff (diff)
downloadesp32-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.c43
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;
+}