src.nth.io/

summaryrefslogtreecommitdiff
path: root/main/src/event_queue.c
diff options
context:
space:
mode:
authorLuke Hoersten <[email protected]>2021-03-12 11:56:07 -0600
committerLuke Hoersten <[email protected]>2021-03-12 11:56:07 -0600
commitc6d3d96ed6a659f7a3c1f616caebe325a3d139bd (patch)
tree470016b10b16e31a8190da4fb769725b6bd9898a /main/src/event_queue.c
parent2d08f681e6e53b71a295b0ab05155f4315fea76f (diff)
Broke out services into their own files.
Diffstat (limited to 'main/src/event_queue.c')
-rw-r--r--main/src/event_queue.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/main/src/event_queue.c b/main/src/event_queue.c
new file mode 100644
index 0000000..113cc56
--- /dev/null
+++ b/main/src/event_queue.c
@@ -0,0 +1,87 @@
+#include <stdio.h>
+#include <string.h>
+#include <freertos/FreeRTOS.h>
+#include <freertos/task.h>
+#include <freertos/timers.h>
+#include <freertos/queue.h>
+#include <esp_log.h>
+#include <driver/gpio.h>
+#include <driver/adc.h>
+
+#include <hap.h>
+
+#include <hap_apple_servs.h>
+#include <hap_apple_chars.h>
+
+#include <app_wifi.h>
+#include <app_hap_setup_payload.h>
+
+#include <lock.h>
+#include <bell.h>
+#include <event_queue.h>
+
+static const int INTERCOM_EVENT_QUEUE_BELL_RING = 1;
+static const int INTERCOM_EVENT_QUEUE_LOCK_UNSECURE = 2;
+static const int INTERCOM_EVENT_QUEUE_LOCK_SECURE = 3;
+static const int INTERCOM_EVENT_QUEUE_LOCK_TIMEOUT = 4;
+
+static xQueueHandle intercom_event_queue = NULL;
+
+void intercom_event_queue_bell_ring()
+{
+ xQueueSendFromISR(intercom_event_queue, (void *)&INTERCOM_EVENT_QUEUE_BELL_RING, NULL);
+}
+
+void intercom_event_queue_lock_unsecure()
+{
+ xQueueSendToBack(intercom_event_queue, (void *)&INTERCOM_EVENT_QUEUE_LOCK_UNSECURE, 10);
+}
+
+void intercom_event_queue_lock_secure()
+{
+ xQueueSendToBack(intercom_event_queue, (void *)&INTERCOM_EVENT_QUEUE_LOCK_SECURE, 10);
+}
+
+void intercom_event_queue_lock_timeout()
+{
+ xQueueSendToBack(intercom_event_queue, (void *)&INTERCOM_EVENT_QUEUE_LOCK_TIMEOUT, 10);
+}
+
+void intercom_event_queue_run()
+{
+ uint8_t intercom_event_queue_item = INTERCOM_EVENT_QUEUE_LOCK_SECURE;
+
+ while (1)
+ {
+ if (xQueueReceive(intercom_event_queue, &intercom_event_queue_item, portMAX_DELAY) == pdFALSE)
+ {
+ ESP_LOGI(TAG, "Intercom event queue trigger FAIL");
+ }
+ else
+ {
+ switch (intercom_event_queue_item)
+ {
+ case INTERCOM_EVENT_QUEUE_BELL_RING:
+ intercom_bell_ring();
+ break;
+ case INTERCOM_EVENT_QUEUE_LOCK_UNSECURE:
+ intercom_lock_unsecure();
+ break;
+ case INTERCOM_EVENT_QUEUE_LOCK_SECURE:
+ intercom_lock_secure();
+ break;
+ case INTERCOM_EVENT_QUEUE_LOCK_TIMEOUT:
+ intercom_lock_timeout();
+ break;
+ }
+ }
+ }
+}
+
+bool intercom_event_queue_init()
+{
+ int queue_len = 4;
+ int queue_item_size = sizeof(uint8_t);
+ intercom_event_queue = xQueueCreate(queue_len, queue_item_size);
+ return intercom_event_queue != NULL;
+}