From afed9a4e6702f84cfa7bbc28ee7de9cac1fb786b Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Wed, 10 Mar 2021 11:01:04 +0100 Subject: [PATCH] give it a try --- src/main/app_main.c | 1 + src/main/gpio.c | 4 +-- src/main/sinkSender.c | 59 ++++++++++++++++++++++++++++++++++++++++++- src/main/timesync.c | 2 +- 4 files changed, 62 insertions(+), 4 deletions(-) diff --git a/src/main/app_main.c b/src/main/app_main.c index c4cb854..5dec9ad 100644 --- a/src/main/app_main.c +++ b/src/main/app_main.c @@ -18,6 +18,7 @@ #include "timesync.h" #include "sinkSender.h" +const char VERSION[] = "deadbeef; // static const char *TAG = "app"; diff --git a/src/main/gpio.c b/src/main/gpio.c index aa8a460..8b94b13 100644 --- a/src/main/gpio.c +++ b/src/main/gpio.c @@ -10,6 +10,8 @@ static const char *TAG = "gpio"; void gpioInit() { + ESP_LOGI(TAG, "Initializing gpios"); + gpio_config_t io_conf; io_conf.intr_type = GPIO_INTR_DISABLE; io_conf.pin_bit_mask = (1ULL << GPIO_FORCE_PROV); @@ -27,8 +29,6 @@ void gpioInit() { gpio_install_isr_service(0); gpio_isr_handler_add(GPIO_ZERO_CROSSING, counterZeroCrossingISR, NULL); - - ESP_LOGI(TAG, "gpios configured"); } bool isGpioForceProv() { diff --git a/src/main/sinkSender.c b/src/main/sinkSender.c index cab2360..e68b4a6 100644 --- a/src/main/sinkSender.c +++ b/src/main/sinkSender.c @@ -1,9 +1,15 @@ #include "sinkSender.h" #include "sinkStruct.h" +#include "sha256.h" #include #include - +#include +#include +#include +#include +#include +#include #include #include @@ -11,16 +17,67 @@ #include static const char *TAG = "ss"; +extern char VERSION[]; extern xQueueHandle minuteBufferQueue; + +static void sinksenderSend(t_minuteBuffer *minuteBuffer) { + struct sysinfo info; + sysinfo(&info); + + minuteBuffer.s.totalRunningHours = info.uptime / 3600; + minuteBuffer.s.totalPowercycles = 0; + minuteBuffer.s.totalWatchdogResets = 0; + minuteBuffer.s.version = strtoll(VERSION, NULL, 16); + + memset(minuteBuffer.s.deviceId, 0, sizeof(minuteBuffer.s.deviceId)); + strcpy(minuteBuffer.s.deviceId, deviceId); + + memcpy(minuteBuffer.s.hash, sharedSecret, SHA256_BLOCK_SIZE); + SHA256_CTX ctx; + sha256_init(&ctx); + sha256_update(&ctx, minuteBuffer.b, sizeof(minuteBuffer.b)); + sha256_final(&ctx, minuteBuffer.s.hash); + + struct hostent *hptr = gethostbyname(sinkServer); + if (hptr) { + if (hptr->h_addrtype == AF_INET) { + char *sinkAddr = hptr->h_addr_list[0]; + ESP_LOGI(TAG, "sink addr: %d.%d.%d.%d", + sinkAddr[0], sinkAddr[1], sinkAddr[2], sinkAddr[3]); + + int sockfd = socket(AF_INET, SOCK_DGRAM, 0); + if (sockfd != -1) { + struct sockaddr_in servaddr; + memset(&servaddr, 0, sizeof(servaddr)); + servaddr.sin_family = AF_INET; + servaddr.sin_port = htons(sinkPort); + memcpy(&servaddr.sin_addr.s_addr, sinkAddr, 4); + + ssize_t res = sendto(sockfd, minuteBuffer.b, sizeof(minuteBuffer.b), + 0, (struct sockaddr*)&servaddr, + sizeof(servaddr)); + ESP_LOGI(TAG, "%d octets sent", res); + } else { + ESP_LOGE(TAG, "unable to get socket: %s", strerror(errno)); + } + } else { + ESP_LOGE(TAG, "unknown address type: %d", hptr->h_addrtype); + } + } else { + ESP_LOGE(TAG, "sinkserver %s couldn't be resolved: %s", sinkServer, hstrerror(h_errno)); + } +} + static void sinksenderExecTask(void *arg) { while (1) { if (minuteBufferQueue) { static t_minuteBuffer minuteBuffer; if (xQueueReceive(minuteBufferQueue, &minuteBuffer, portMAX_DELAY) == pdPASS) { ESP_LOGI(TAG, "Got a buffer from queue"); + sinksenderSend(&minuteBuffer); } } } diff --git a/src/main/timesync.c b/src/main/timesync.c index 919a363..49ed4bf 100644 --- a/src/main/timesync.c +++ b/src/main/timesync.c @@ -21,7 +21,7 @@ void timesyncCallback(struct timeval *tv) { } void timesyncInit() { - ESP_LOGI(TAG, "Initializiing SNTP"); + ESP_LOGI(TAG, "Initializing SNTP"); sntp_setoperatingmode(SNTP_OPMODE_POLL); sntp_setservername(0, SNTP_SERVER); sntp_set_time_sync_notification_cb(timesyncCallback);