Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
6431b3ba5f
|
|||
7f17d9ddff
|
|||
ae347139ab
|
|||
07e8b947b5
|
|||
51122a0705
|
|||
cb96432b90
|
|||
2a4c89aee6
|
|||
1a03fdb9da
|
|||
44696c4d97
|
|||
7464d741d6
|
|||
073c003446
|
|||
14a0ff8810
|
|||
271bcb6d91
|
|||
9d5c7cfe84
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
src/build/
|
src/build/
|
||||||
|
src/main/version.c
|
||||||
config.csv
|
config.csv
|
||||||
config.bin
|
config.bin
|
||||||
|
6
readme.md
Normal file
6
readme.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Generate configuration binary:
|
||||||
|
~/esp/esp-idf/components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py generate --version 1 config.csv config.bin 0x6000
|
||||||
|
|
||||||
|
Flash configuration binary:
|
||||||
|
esptool -p /dev/ttyUSB0 write_flash 0x9000 ../config.bin
|
||||||
|
|
@ -5,4 +5,5 @@ idf_component_register(SRCS "app_main.c"
|
|||||||
"timesync.c"
|
"timesync.c"
|
||||||
"sha256.c"
|
"sha256.c"
|
||||||
"sinkSender.c"
|
"sinkSender.c"
|
||||||
|
"version.c"
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#include "timesync.h"
|
#include "timesync.h"
|
||||||
#include "sinkSender.h"
|
#include "sinkSender.h"
|
||||||
|
|
||||||
const char VERSION[] = "deadbeef";
|
extern const uint32_t APP_VERSION;
|
||||||
|
|
||||||
|
|
||||||
// static const char *TAG = "app";
|
// static const char *TAG = "app";
|
||||||
|
@ -23,9 +23,6 @@ static const uint64_t QUEUE_MARKER = UINT64_MAX;
|
|||||||
|
|
||||||
xQueueHandle minuteBufferQueue = NULL;
|
xQueueHandle minuteBufferQueue = NULL;
|
||||||
|
|
||||||
static t_minuteBuffer minuteBuffer;
|
|
||||||
static uint32_t secondOfMinute;
|
|
||||||
static bool settled = false;
|
|
||||||
|
|
||||||
static void counterSecondTask(void *arg) {
|
static void counterSecondTask(void *arg) {
|
||||||
while (1) {
|
while (1) {
|
||||||
@ -35,9 +32,14 @@ static void counterSecondTask(void *arg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void counterZeroCrossingAveragerTask(void *arg) {
|
static void counterZeroCrossingAveragerTask(void *arg) {
|
||||||
|
static uint32_t secondOfMinute = 0;
|
||||||
|
static bool settled = false;
|
||||||
|
static t_minuteBuffer minuteBuffer;
|
||||||
|
|
||||||
uint64_t counterCnt = 0;
|
uint64_t counterCnt = 0;
|
||||||
uint64_t counterSum = 0;
|
uint64_t counterSum = 0;
|
||||||
uint64_t savedCounterValue = 0;
|
uint64_t savedCounterValue = 0;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
uint64_t currentCounterValue;
|
uint64_t currentCounterValue;
|
||||||
xQueueReceive(zeroCrossingQueue, ¤tCounterValue, portMAX_DELAY);
|
xQueueReceive(zeroCrossingQueue, ¤tCounterValue, portMAX_DELAY);
|
||||||
@ -45,7 +47,8 @@ static void counterZeroCrossingAveragerTask(void *arg) {
|
|||||||
if (counterCnt > 0) {
|
if (counterCnt > 0) {
|
||||||
uint32_t counterSecondAverage = ((uint32_t)(counterSum)) / ((uint32_t)(counterCnt));
|
uint32_t counterSecondAverage = ((uint32_t)(counterSum)) / ((uint32_t)(counterCnt));
|
||||||
bool timeInSync = timesyncReady();
|
bool timeInSync = timesyncReady();
|
||||||
ESP_LOGI(TAG, "%d %u %u %u", timeInSync, (uint32_t)counterCnt, (uint32_t)counterSum, counterSecondAverage);
|
ESP_LOGI(TAG, "%d %u %u %u %u", timeInSync, secondOfMinute, (uint32_t)counterCnt,
|
||||||
|
(uint32_t)counterSum, counterSecondAverage);
|
||||||
|
|
||||||
if (timeInSync) {
|
if (timeInSync) {
|
||||||
uint32_t frequency = PRECISION * COUNTER_FREQUENCY / counterSecondAverage;
|
uint32_t frequency = PRECISION * COUNTER_FREQUENCY / counterSecondAverage;
|
||||||
@ -119,9 +122,6 @@ void counterInit() {
|
|||||||
zeroCrossingQueue = xQueueCreate(20, sizeof(uint64_t));
|
zeroCrossingQueue = xQueueCreate(20, sizeof(uint64_t));
|
||||||
minuteBufferQueue = xQueueCreate(5, sizeof(t_minuteBuffer));
|
minuteBufferQueue = xQueueCreate(5, sizeof(t_minuteBuffer));
|
||||||
|
|
||||||
settled = false;
|
|
||||||
secondOfMinute = 0;
|
|
||||||
|
|
||||||
xTaskCreate(counterSecondTask, "counter_second_task", 2048, NULL, 5, NULL);
|
xTaskCreate(counterSecondTask, "counter_second_task", 2048, NULL, 5, NULL);
|
||||||
xTaskCreate(counterZeroCrossingAveragerTask, "counter_averager_task", 2048, NULL, 5, NULL);
|
xTaskCreate(counterZeroCrossingAveragerTask, "counter_averager_task", 4096, NULL, 5, NULL);
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,6 @@
|
|||||||
|
|
||||||
|
|
||||||
static const char *TAG = "ss";
|
static const char *TAG = "ss";
|
||||||
extern char VERSION[];
|
|
||||||
|
|
||||||
|
|
||||||
static const char SINK_SERVER[] = "sink.hottis.de";
|
static const char SINK_SERVER[] = "sink.hottis.de";
|
||||||
static const uint16_t SINK_PORT = 20169;
|
static const uint16_t SINK_PORT = 20169;
|
||||||
@ -31,6 +29,7 @@ static char deviceId[16];
|
|||||||
static const char DEFAULT_SHAREDSECRET[] = "1234567890123456789012345678901";
|
static const char DEFAULT_SHAREDSECRET[] = "1234567890123456789012345678901";
|
||||||
static char sharedSecret[32];
|
static char sharedSecret[32];
|
||||||
|
|
||||||
|
extern const uint32_t APP_VERSION;
|
||||||
|
|
||||||
|
|
||||||
extern xQueueHandle minuteBufferQueue;
|
extern xQueueHandle minuteBufferQueue;
|
||||||
@ -41,7 +40,7 @@ static void sinksenderSend(t_minuteBuffer *minuteBuffer) {
|
|||||||
minuteBuffer->s.totalRunningHours = (uint32_t) uptime;
|
minuteBuffer->s.totalRunningHours = (uint32_t) uptime;
|
||||||
minuteBuffer->s.totalPowercycles = 0;
|
minuteBuffer->s.totalPowercycles = 0;
|
||||||
minuteBuffer->s.totalWatchdogResets = 0;
|
minuteBuffer->s.totalWatchdogResets = 0;
|
||||||
minuteBuffer->s.version = strtoll(VERSION, NULL, 16);
|
minuteBuffer->s.version = APP_VERSION;
|
||||||
|
|
||||||
memset(minuteBuffer->s.deviceId, 0, sizeof(minuteBuffer->s.deviceId));
|
memset(minuteBuffer->s.deviceId, 0, sizeof(minuteBuffer->s.deviceId));
|
||||||
strcpy(minuteBuffer->s.deviceId, deviceId);
|
strcpy(minuteBuffer->s.deviceId, deviceId);
|
||||||
@ -104,39 +103,64 @@ void sinksenderInit() {
|
|||||||
ESP_LOGI(TAG, "Initializing sink sender");
|
ESP_LOGI(TAG, "Initializing sink sender");
|
||||||
|
|
||||||
ESP_LOGI(TAG, "About to load sink sender configuration");
|
ESP_LOGI(TAG, "About to load sink sender configuration");
|
||||||
|
|
||||||
|
uint8_t macAddress[6];
|
||||||
|
if (ESP_OK == esp_efuse_mac_get_default(macAddress)) {
|
||||||
|
sprintf(deviceId, "%02x%02x%02x%02x%02x%02x",
|
||||||
|
macAddress[0], macAddress[1], macAddress[2],
|
||||||
|
macAddress[3], macAddress[4], macAddress[5]);
|
||||||
|
} else {
|
||||||
|
ESP_LOGE(TAG, "can not read mac address, use default device id");
|
||||||
|
strcpy(deviceId, DEFAULT_DEVICE_ID);
|
||||||
|
}
|
||||||
|
|
||||||
nvs_handle_t nvsHandle;
|
nvs_handle_t nvsHandle;
|
||||||
if (ESP_OK != nvs_open("sink", NVS_READWRITE, &nvsHandle)) {
|
if (ESP_OK != nvs_open("sink", NVS_READWRITE, &nvsHandle)) {
|
||||||
ESP_LOGE(TAG, "Unable to open nvs namespace sink, use default values");
|
ESP_LOGE(TAG, "Unable to open nvs namespace sink, use default values");
|
||||||
strcpy(deviceId, DEFAULT_DEVICE_ID);
|
|
||||||
strcpy(sharedSecret, DEFAULT_SHAREDSECRET);
|
strcpy(sharedSecret, DEFAULT_SHAREDSECRET);
|
||||||
} else {
|
} else {
|
||||||
size_t s;
|
size_t s;
|
||||||
esp_err_t err;
|
esp_err_t err;
|
||||||
|
|
||||||
err = nvs_get_str(nvsHandle, "deviceId", NULL, &s);
|
|
||||||
ESP_LOGI(TAG, "1. err: %d, len: %d", err, s);
|
|
||||||
err = nvs_get_str(nvsHandle, "deviceId", deviceId, &s);
|
|
||||||
ESP_LOGI(TAG, "2. err: %d, len: %d", err, s);
|
|
||||||
if (err == ESP_OK) {
|
|
||||||
ESP_LOGI(TAG, "deviceId: %s", deviceId);
|
|
||||||
} else {
|
|
||||||
strcpy(deviceId, DEFAULT_DEVICE_ID);
|
|
||||||
ESP_LOGI(TAG, "deviceId not configured, use default");
|
|
||||||
}
|
|
||||||
err = nvs_get_str(nvsHandle, "sharedSecret", NULL, &s);
|
err = nvs_get_str(nvsHandle, "sharedSecret", NULL, &s);
|
||||||
ESP_LOGI(TAG, "1. err: %d, len: %d", err, s);
|
|
||||||
err = nvs_get_str(nvsHandle, "sharedSecret", sharedSecret, &s);
|
err = nvs_get_str(nvsHandle, "sharedSecret", sharedSecret, &s);
|
||||||
ESP_LOGI(TAG, "2. err: %d, len: %d", err, s);
|
if (err != ESP_OK) {
|
||||||
if (err == ESP_OK) {
|
ESP_LOGI(TAG, "sharedSecret not configured, create one");
|
||||||
ESP_LOGI(TAG, "sharedSecret: %s", sharedSecret);
|
memset(sharedSecret, 0, sizeof(sharedSecret));
|
||||||
} else {
|
esp_fill_random(sharedSecret, sizeof(sharedSecret)-1);
|
||||||
strcpy(sharedSecret, DEFAULT_SHAREDSECRET);
|
for (uint8_t i = 0; i < sizeof(sharedSecret)-1; i++) {
|
||||||
ESP_LOGI(TAG, "sharedSecret not configured, use default");
|
sharedSecret[i] = (sharedSecret[i] % 90) + 33; // 0 .. 255 -> 33 .. 122
|
||||||
|
if (sharedSecret[i] == 34) { // "
|
||||||
|
sharedSecret[i] = 123; // {
|
||||||
|
}
|
||||||
|
if (sharedSecret[i] == 39) { // '
|
||||||
|
sharedSecret[i] = 124; // |
|
||||||
|
}
|
||||||
|
if (sharedSecret[i] == 92) { // }
|
||||||
|
sharedSecret[i] = 125; //
|
||||||
|
}
|
||||||
|
if (sharedSecret[i] == 96) { // `
|
||||||
|
sharedSecret[i] = 126; // ~
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ESP_LOGI(TAG, "generated sharedSecret is %s", sharedSecret);
|
||||||
|
if (ESP_OK == nvs_set_str(nvsHandle, "sharedSecret", sharedSecret)) {
|
||||||
|
ESP_LOGI(TAG, "new sharedSecret stored");
|
||||||
|
if (ESP_OK == nvs_commit(nvsHandle)) {
|
||||||
|
ESP_LOGI(TAG, "config store committed");
|
||||||
|
} else {
|
||||||
|
ESP_LOGE(TAG, "unable to commit config store");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ESP_LOGE(TAG, "unable to store sharedSecret");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ESP_LOGI(TAG, "finally deviceId: %s", deviceId);
|
ESP_LOGI(TAG, "finally deviceId: %s", deviceId);
|
||||||
ESP_LOGI(TAG, "finally sharedSecret: %s", sharedSecret);
|
ESP_LOGI(TAG, "finally sharedSecret: [masked]");
|
||||||
|
|
||||||
|
nvs_close(nvsHandle);
|
||||||
|
|
||||||
xTaskCreate(sinksenderExecTask, "sinksender_exec_task", 4096, NULL, 5, NULL);
|
xTaskCreate(sinksenderExecTask, "sinksender_exec_task", 4096, NULL, 5, NULL);
|
||||||
}
|
}
|
||||||
|
10
tools/setVersion.sh
Executable file
10
tools/setVersion.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
VERSION=`git rev-parse --short=8 HEAD`
|
||||||
|
|
||||||
|
cat - > ./src/main/version.c <<EOF
|
||||||
|
#include <stdint.h>
|
||||||
|
const uint32_t APP_VERSION = 0x${VERSION};
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user