summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.c62
1 files changed, 59 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index 8b9582c..5db59d4 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,13 +1,69 @@
-#include <stddef.h>
#include <unistd.h>
+#include <threads.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <errno.h>
+
#include <osm/bind.h>
+#include <sys/socket.h>
+
+volatile double temperature = 0;
+volatile double humidity = 0;
+
+int _sock_connect(void *data)
+{
+ int fd = (uintptr_t)data;
+
+ double temp = temperature;
+ write(fd, &temp, sizeof(temp));
+ close(fd);
+
+ return 0;
+}
+
+int _temp_poll(void *data)
+{
+ // struct timespec sleeper = {.tv_sec = 1};
+ while(1)
+ {
+ temperature = 0.1;
+ // humidity += 0.1;
+ //printf("Hello");
+
+ // while(thrd_sleep(&sleeper, NULL))
+ // {}
+ }
+ thrd_exit(0);
+}
+
int main(int argc, char **argv)
{
int fd = osm_open_onboard(NULL);
- if (fd >= 0)
+
+ if (fd == -1)
{
- close(fd);
+ perror("Error opening socket for osm-thermald");
+ return 1;
}
+
+ thrd_t poll;
+ thrd_create(&poll, (thrd_start_t) &_temp_poll, 0);
+ thrd_detach(poll);
+
+ Vector threads = osm_listen_and_accept(fd, _sock_connect);
+ close(fd);
+
+ // Close all threads
+ for(unsigned int i = 0; i < threads.count; i++)
+ {
+ thrd_t *thread = vect_get(&threads, i);
+ thrd_join(*thread, NULL);
+ }
+
+ // Cleanup
+ vect_end(&threads);
+ thrd_join(poll, NULL);
+
return 0;
}