Skip to content

Commit ff50acf

Browse files
committed
Fix WebUI currency converter, reorganize some code
1 parent 5dd47c2 commit ff50acf

14 files changed

+228
-195
lines changed

data

Submodule data updated from 761c7f2 to 7d82b1e

src/lib/block_notify.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include "lib/led_handler.hpp"
1313
#include "lib/screen_handler.hpp"
14+
#include "lib/timers.hpp"
1415
#include "lib/shared.hpp"
1516

1617
// using namespace websockets;

src/lib/button_handler.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include "lib/screen_handler.hpp"
66
#include "lib/shared.hpp"
7+
#include "lib/timers.hpp"
78

89
extern TaskHandle_t buttonTaskHandle;
910

src/lib/config.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ void setupWebsocketClients(void *pvParameters)
404404
{
405405
if (preferences.getBool("ownDataSource", DEFAULT_OWN_DATA_SOURCE))
406406
{
407-
setupV2Notify();
407+
V2Notify::setupV2Notify();
408408
}
409409
else
410410
{
@@ -553,7 +553,7 @@ void setupHardware()
553553
{
554554
Serial.println(F("Found BH1750"));
555555
hasLuxSensor = true;
556-
bh1750.begin(BH1750::CONTINUOUS_LOW_RES_MODE, 0x5C);
556+
bh1750.begin(BH1750::CONTINUOUS_HIGH_RES_MODE, 0x5C);
557557
}
558558
else
559559
{

src/lib/nostr_notify.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "price_notify.hpp"
1414
#include "block_notify.hpp"
15+
#include "lib/timers.hpp"
1516

1617
void setupNostrNotify(bool asDatasource, bool zapNotify);
1718

src/lib/ota.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include "lib/config.hpp"
77
#include "lib/shared.hpp"
8+
#include "lib/timers.hpp"
89

910
#ifndef UPDATE_MESSAGE_HPP
1011
#define UPDATE_MESSAGE_HPP

src/lib/screen_handler.cpp

+2-90
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
// TaskHandle_t timeUpdateTaskHandle;
66
TaskHandle_t taskScreenRotateTaskHandle;
77
TaskHandle_t workerTaskHandle;
8-
esp_timer_handle_t screenRotateTimer;
9-
esp_timer_handle_t minuteTimer;
8+
109

1110
std::array<std::string, NUM_SCREENS> taskEpdContent = {};
1211
std::string priceString;
@@ -23,8 +22,6 @@ void workerTask(void *pvParameters) {
2322
while (1) {
2423
// Wait for a work item to be available in the queue
2524
if (xQueueReceive(workQueue, &receivedItem, portMAX_DELAY)) {
26-
uint firstIndex = 0;
27-
2825
// Process the work item based on its type
2926
switch (receivedItem.type) {
3027
case TASK_BITAXE_UPDATE: {
@@ -42,10 +39,7 @@ void workerTask(void *pvParameters) {
4239
case TASK_PRICE_UPDATE: {
4340
uint currency = getCurrentCurrency();
4441
uint price = getPrice(currency);
45-
// u_char priceSymbol = '$';
46-
// if (preferences.getBool("fetchEurPrice", DEFAULT_FETCH_EUR_PRICE)) {
47-
// priceSymbol = '[';
48-
// }
42+
4943
if (getCurrentScreen() == SCREEN_BTC_TICKER) {
5044
taskEpdContent = parsePriceData(price, currency, preferences.getBool("suffixPrice", DEFAULT_SUFFIX_PRICE));
5145
} else if (getCurrentScreen() == SCREEN_SATS_PER_CURRENCY) {
@@ -121,29 +115,6 @@ void taskScreenRotate(void *pvParameters) {
121115
}
122116
}
123117

124-
void IRAM_ATTR minuteTimerISR(void *arg) {
125-
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
126-
// vTaskNotifyGiveFromISR(timeUpdateTaskHandle, &xHigherPriorityTaskWoken);
127-
WorkItem timeUpdate = {TASK_TIME_UPDATE, 0};
128-
xQueueSendFromISR(workQueue, &timeUpdate, &xHigherPriorityTaskWoken);
129-
130-
if (bitaxeFetchTaskHandle != NULL) {
131-
vTaskNotifyGiveFromISR(bitaxeFetchTaskHandle, &xHigherPriorityTaskWoken);
132-
}
133-
134-
if (xHigherPriorityTaskWoken == pdTRUE) {
135-
portYIELD_FROM_ISR();
136-
}
137-
}
138-
139-
void IRAM_ATTR screenRotateTimerISR(void *arg) {
140-
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
141-
vTaskNotifyGiveFromISR(taskScreenRotateTaskHandle, &xHigherPriorityTaskWoken);
142-
if (xHigherPriorityTaskWoken == pdTRUE) {
143-
portYIELD_FROM_ISR();
144-
}
145-
}
146-
147118
void setupTasks() {
148119
workQueue = xQueueCreate(WORK_QUEUE_SIZE, sizeof(WorkItem));
149120

@@ -159,65 +130,6 @@ void setupTasks() {
159130
setCurrentScreen(preferences.getUInt("currentScreen", DEFAULT_CURRENT_SCREEN));
160131
}
161132

162-
void setupTimeUpdateTimer(void *pvParameters) {
163-
const esp_timer_create_args_t minuteTimerConfig = {
164-
.callback = &minuteTimerISR, .name = "minute_timer"};
165-
166-
esp_timer_create(&minuteTimerConfig, &minuteTimer);
167-
168-
time_t currentTime;
169-
struct tm timeinfo;
170-
time(&currentTime);
171-
localtime_r(&currentTime, &timeinfo);
172-
uint32_t secondsUntilNextMinute = 60 - timeinfo.tm_sec;
173-
174-
if (secondsUntilNextMinute > 0)
175-
vTaskDelay(pdMS_TO_TICKS((secondsUntilNextMinute * 1000)));
176-
177-
esp_timer_start_periodic(minuteTimer, usPerMinute);
178-
179-
WorkItem timeUpdate = {TASK_TIME_UPDATE, 0};
180-
xQueueSend(workQueue, &timeUpdate, portMAX_DELAY);
181-
// xTaskNotifyGive(timeUpdateTaskHandle);
182-
183-
vTaskDelete(NULL);
184-
}
185-
186-
void setupScreenRotateTimer(void *pvParameters) {
187-
const esp_timer_create_args_t screenRotateTimerConfig = {
188-
.callback = &screenRotateTimerISR, .name = "screen_rotate_timer"};
189-
190-
esp_timer_create(&screenRotateTimerConfig, &screenRotateTimer);
191-
192-
if (preferences.getBool("timerActive", DEFAULT_TIMER_ACTIVE)) {
193-
esp_timer_start_periodic(screenRotateTimer,
194-
getTimerSeconds() * usPerSecond);
195-
}
196-
197-
vTaskDelete(NULL);
198-
}
199-
200-
uint getTimerSeconds() { return preferences.getUInt("timerSeconds", DEFAULT_TIMER_SECONDS); }
201-
202-
bool isTimerActive() { return esp_timer_is_active(screenRotateTimer); }
203-
204-
void setTimerActive(bool status) {
205-
if (status) {
206-
esp_timer_start_periodic(screenRotateTimer,
207-
getTimerSeconds() * usPerSecond);
208-
queueLedEffect(LED_EFFECT_START_TIMER);
209-
preferences.putBool("timerActive", true);
210-
} else {
211-
esp_timer_stop(screenRotateTimer);
212-
queueLedEffect(LED_EFFECT_PAUSE_TIMER);
213-
preferences.putBool("timerActive", false);
214-
}
215-
216-
if (eventSourceTaskHandle != NULL) xTaskNotifyGive(eventSourceTaskHandle);
217-
}
218-
219-
void toggleTimerActive() { setTimerActive(!isTimerActive()); }
220-
221133
uint getCurrentScreen() { return currentScreen; }
222134

223135
void setCurrentScreen(uint newScreen) {

src/lib/screen_handler.hpp

+1-11
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@
1616
extern TaskHandle_t workerTaskHandle;
1717
extern TaskHandle_t taskScreenRotateTaskHandle;
1818

19-
extern esp_timer_handle_t screenRotateTimer;
20-
extern esp_timer_handle_t minuteTimer;
21-
2219
extern QueueHandle_t workQueue;
2320

2421
typedef enum {
@@ -42,21 +39,14 @@ void previousScreen();
4239

4340
void showSystemStatusScreen();
4441

45-
void setupTimeUpdateTimer(void *pvParameters);
46-
void setupScreenRotateTimer(void *pvParameters);
4742

48-
void IRAM_ATTR minuteTimerISR(void *arg);
49-
void IRAM_ATTR screenRotateTimerISR(void *arg);
5043

5144
// void taskPriceUpdate(void *pvParameters);
5245
// void taskBlockUpdate(void *pvParameters);
5346
// void taskTimeUpdate(void *pvParameters);
5447
void taskScreenRotate(void *pvParameters);
5548

56-
uint getTimerSeconds();
57-
bool isTimerActive();
58-
void setTimerActive(bool status);
59-
void toggleTimerActive();
49+
6050

6151
void setupTasks();
6252
void setCurrentCurrency(char currency);

src/lib/timers.cpp

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#include "timers.hpp"
2+
3+
esp_timer_handle_t screenRotateTimer;
4+
esp_timer_handle_t minuteTimer;
5+
6+
void setupTimeUpdateTimer(void *pvParameters) {
7+
const esp_timer_create_args_t minuteTimerConfig = {
8+
.callback = &minuteTimerISR, .name = "minute_timer"};
9+
10+
esp_timer_create(&minuteTimerConfig, &minuteTimer);
11+
12+
time_t currentTime;
13+
struct tm timeinfo;
14+
time(&currentTime);
15+
localtime_r(&currentTime, &timeinfo);
16+
uint32_t secondsUntilNextMinute = 60 - timeinfo.tm_sec;
17+
18+
if (secondsUntilNextMinute > 0)
19+
vTaskDelay(pdMS_TO_TICKS((secondsUntilNextMinute * 1000)));
20+
21+
esp_timer_start_periodic(minuteTimer, usPerMinute);
22+
23+
WorkItem timeUpdate = {TASK_TIME_UPDATE, 0};
24+
xQueueSend(workQueue, &timeUpdate, portMAX_DELAY);
25+
// xTaskNotifyGive(timeUpdateTaskHandle);
26+
27+
vTaskDelete(NULL);
28+
}
29+
30+
void setupScreenRotateTimer(void *pvParameters) {
31+
const esp_timer_create_args_t screenRotateTimerConfig = {
32+
.callback = &screenRotateTimerISR, .name = "screen_rotate_timer"};
33+
34+
esp_timer_create(&screenRotateTimerConfig, &screenRotateTimer);
35+
36+
if (preferences.getBool("timerActive", DEFAULT_TIMER_ACTIVE)) {
37+
esp_timer_start_periodic(screenRotateTimer,
38+
getTimerSeconds() * usPerSecond);
39+
}
40+
41+
vTaskDelete(NULL);
42+
}
43+
44+
uint getTimerSeconds() { return preferences.getUInt("timerSeconds", DEFAULT_TIMER_SECONDS); }
45+
46+
bool isTimerActive() { return esp_timer_is_active(screenRotateTimer); }
47+
48+
void setTimerActive(bool status) {
49+
if (status) {
50+
esp_timer_start_periodic(screenRotateTimer,
51+
getTimerSeconds() * usPerSecond);
52+
queueLedEffect(LED_EFFECT_START_TIMER);
53+
preferences.putBool("timerActive", true);
54+
} else {
55+
esp_timer_stop(screenRotateTimer);
56+
queueLedEffect(LED_EFFECT_PAUSE_TIMER);
57+
preferences.putBool("timerActive", false);
58+
}
59+
60+
if (eventSourceTaskHandle != NULL) xTaskNotifyGive(eventSourceTaskHandle);
61+
}
62+
63+
void toggleTimerActive() { setTimerActive(!isTimerActive()); }
64+
65+
void IRAM_ATTR minuteTimerISR(void *arg) {
66+
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
67+
// vTaskNotifyGiveFromISR(timeUpdateTaskHandle, &xHigherPriorityTaskWoken);
68+
WorkItem timeUpdate = {TASK_TIME_UPDATE, 0};
69+
xQueueSendFromISR(workQueue, &timeUpdate, &xHigherPriorityTaskWoken);
70+
71+
if (bitaxeFetchTaskHandle != NULL) {
72+
vTaskNotifyGiveFromISR(bitaxeFetchTaskHandle, &xHigherPriorityTaskWoken);
73+
}
74+
75+
if (xHigherPriorityTaskWoken == pdTRUE) {
76+
portYIELD_FROM_ISR();
77+
}
78+
}
79+
80+
void IRAM_ATTR screenRotateTimerISR(void *arg) {
81+
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
82+
vTaskNotifyGiveFromISR(taskScreenRotateTaskHandle, &xHigherPriorityTaskWoken);
83+
if (xHigherPriorityTaskWoken == pdTRUE) {
84+
portYIELD_FROM_ISR();
85+
}
86+
}

src/lib/timers.hpp

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#pragma once
2+
3+
#include <esp_timer.h>
4+
#include <freertos/FreeRTOS.h>
5+
#include <freertos/task.h>
6+
7+
#include "lib/shared.hpp"
8+
#include "lib/screen_handler.hpp"
9+
10+
extern esp_timer_handle_t screenRotateTimer;
11+
extern esp_timer_handle_t minuteTimer;
12+
13+
void setupTimeUpdateTimer(void *pvParameters);
14+
void setupScreenRotateTimer(void *pvParameters);
15+
16+
void IRAM_ATTR minuteTimerISR(void *arg);
17+
void IRAM_ATTR screenRotateTimerISR(void *arg);
18+
19+
uint getTimerSeconds();
20+
bool isTimerActive();
21+
void setTimerActive(bool status);
22+
void toggleTimerActive();

0 commit comments

Comments
 (0)