Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions common/src/c/grid_decode.c
Original file line number Diff line number Diff line change
Expand Up @@ -1216,12 +1216,10 @@ uint8_t grid_decode_config_to_ui(char* header, char* chunk) {
script[scriptlength] = '\0';
grid_lua_semaphore_lock(&grid_lua_state);
grid_ui_register_script(&grid_ui_state, element, event, script);
grid_ui_event_render_script(eve, NULL);
grid_lua_semaphore_release(&grid_lua_state);
script[scriptlength] = GRID_CONST_ETX;

// Local-trigger the event
grid_ui_event_state_set(eve, GRID_EVE_STATE_TRIG_LOCAL);

// Set acknowledge as response code
respinstr = GRID_INSTR_ACKNOWLEDGE_code;

Expand Down
5 changes: 1 addition & 4 deletions common/src/c/grid_lua.c
Original file line number Diff line number Diff line change
Expand Up @@ -198,12 +198,10 @@ void grid_lua_dostring_end(struct grid_lua_model* lua) {
grid_lua_semaphore_release(lua);
}

bool grid_lua_do_event(struct grid_lua_model* lua, uint8_t index, const char* function_name) {
bool grid_lua_do_event_unsafe(struct grid_lua_model* lua, uint8_t index, const char* function_name) {

bool ret = false;

grid_lua_semaphore_lock(lua);

// Attempt to get element table
if (lua_getglobal(lua->L, "ele") != LUA_TTABLE) {
goto grid_lua_do_event_cleanup;
Expand Down Expand Up @@ -243,7 +241,6 @@ bool grid_lua_do_event(struct grid_lua_model* lua, uint8_t index, const char* fu
grid_lua_do_event_cleanup:

lua_pop(lua->L, lua_gettop(lua->L));
grid_lua_semaphore_release(lua);
return ret;
}

Expand Down
2 changes: 1 addition & 1 deletion common/src/c/grid_lua.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ uint32_t grid_lua_dostring_unsafe(struct grid_lua_model* lua, const char* code);
uint32_t grid_lua_dostring(struct grid_lua_model* lua, const char* code);
bool grid_lua_dostring_begin(struct grid_lua_model* lua, const char* code);
void grid_lua_dostring_end(struct grid_lua_model* lua);
bool grid_lua_do_event(struct grid_lua_model* lua, uint8_t index, const char* function_name);
bool grid_lua_do_event_unsafe(struct grid_lua_model* lua, uint8_t index, const char* function_name);
void grid_lua_decode_clear_results(struct grid_lua_model* lua);
void grid_lua_decode_process_results(struct grid_lua_model* lua);

Expand Down
114 changes: 8 additions & 106 deletions common/src/c/grid_ui.c
Original file line number Diff line number Diff line change
Expand Up @@ -474,8 +474,6 @@ int grid_ui_event_recall_configuration(struct grid_ui_model* ui, uint8_t page, u

uint8_t grid_ui_event_istriggered(struct grid_ui_event* eve) { return eve != NULL && eve->state == GRID_EVE_STATE_TRIG; }

uint8_t grid_ui_event_istriggered_local(struct grid_ui_event* eve) { return eve != NULL && eve->state == GRID_EVE_STATE_TRIG_LOCAL; }

uint16_t grid_ui_event_count_istriggered(struct grid_ui_model* ui) {

uint16_t count = 0;
Expand All @@ -494,23 +492,6 @@ uint16_t grid_ui_event_count_istriggered(struct grid_ui_model* ui) {
return count;
}

uint16_t grid_ui_event_count_istriggered_local(struct grid_ui_model* ui) {

uint16_t count = 0;

for (uint8_t j = 0; j < ui->element_list_length; ++j) {

for (uint8_t k = 0; k < ui->element_list[j].event_list_length; ++k) {

if (grid_ui_event_istriggered_local(&ui->element_list[j].event_list[k])) {

count++;
}
}
}
return count;
}

struct grid_ui_element* grid_ui_element_find(struct grid_ui_model* ui, uint8_t element_number) {

if (element_number < ui->element_list_length) {
Expand Down Expand Up @@ -589,15 +570,17 @@ void grid_ui_event_render_event(struct grid_ui_event* eve, struct grid_msg* msg)

void grid_ui_event_render_script(struct grid_ui_event* eve, struct grid_msg* msg) {

if (!grid_lua_do_event(&grid_lua_state, eve->parent->index, eve->function_name)) {
if (!grid_lua_do_event_unsafe(&grid_lua_state, eve->parent->index, eve->function_name)) {

grid_lua_broadcast_stde(&grid_lua_state);
}

char* stdo = grid_lua_get_output_string(&grid_lua_state);
grid_msg_nprintf(msg, "%s", stdo);
grid_lua_clear_stdo(&grid_lua_state);
if (msg) {
char* stdo = grid_lua_get_output_string(&grid_lua_state);
grid_msg_nprintf(msg, "%s", stdo);
}

grid_lua_clear_stdo(&grid_lua_state);
grid_lua_clear_stde(&grid_lua_state);

// Call the event clear callback
Expand Down Expand Up @@ -649,89 +632,6 @@ void grid_ui_event_render_event_view(struct grid_ui_event* eve, struct grid_msg*
grid_msg_add_frame(msg, GRID_CLASS_EVENTVIEW_frame_end);
}

void grid_port_process_ui_local_UNSAFE(struct grid_ui_model* ui) {

if (!grid_ui_bulk_semaphore_try(ui)) {
return;
}

uint8_t xy = GRID_PARAMETER_GLOBAL_POSITION;

struct grid_msg msg_local;
grid_msg_init_brc(&grid_msg_state, &msg_local, xy, xy);
uint16_t local_start_length = msg_local.length;

struct grid_msg msg_global;
grid_msg_init_brc(&grid_msg_state, &msg_global, xy, xy);
uint16_t global_start_length = msg_global.length;

for (uint8_t j = 0; j < ui->element_list_length; j++) {

// Handle the system element first, then all the UI elements in ascending order
uint8_t element_index = (j == 0 ? ui->element_list_length - 1 : j - 1);

struct grid_ui_element* ele = &ui->element_list[element_index];

for (uint8_t k = 0; k < ele->event_list_length; k++) {

if (msg_local.length >= GRID_PARAMETER_PACKET_margin) {
break;
}

if (msg_global.length >= GRID_PARAMETER_PACKET_margin) {
break;
}

struct grid_ui_event* eve = &ele->event_list[k];

if (!grid_ui_event_istriggered_local(eve)) {
continue;
}

grid_ui_event_render_script(eve, &msg_local);

grid_ui_event_state_set(eve, GRID_EVE_STATE_INIT);

// Automatically report elementname after config
if (ele->type != GRID_PARAMETER_ELEMENT_SYSTEM && ele->type != GRID_PARAMETER_ELEMENT_LCD) {

char command[26] = {0};

sprintf(command, "gens(%d,ele[%d]:gen())", ele->index, ele->index);

grid_lua_clear_stdo(&grid_lua_state);
grid_lua_dostring(&grid_lua_state, command);
grid_msg_nprintf(&msg_global, "%s", grid_lua_get_output_string(&grid_lua_state));
grid_lua_clear_stdo(&grid_lua_state);
}
}
}

if (msg_global.length > global_start_length) {

if (grid_msg_close_brc(&grid_msg_state, &msg_global) >= 0) {

grid_transport_send_msg_to_all(&grid_transport_state, &msg_global);
}
}

if (msg_local.length > local_start_length) {

if (grid_msg_close_brc(&grid_msg_state, &msg_local) >= 0) {

struct grid_port* port = grid_transport_get_port(&grid_transport_state, 4, GRID_PORT_UI, 0);

struct grid_swsr_t* tx = grid_port_get_tx(port);

if (grid_swsr_writable(tx, msg_local.length)) {
grid_msg_to_swsr(&msg_local, tx);
}
}
}

grid_ui_bulk_semaphore_release(ui);
}

void grid_port_process_ui_UNSAFE(struct grid_ui_model* ui) {

if (!grid_ui_bulk_semaphore_try(ui)) {
Expand Down Expand Up @@ -764,7 +664,9 @@ void grid_port_process_ui_UNSAFE(struct grid_ui_model* ui) {

grid_ui_event_render_event(eve, &msg);
grid_ui_event_render_event_view(eve, &msg);
grid_lua_semaphore_lock(&grid_lua_state);
grid_ui_event_render_script(eve, &msg);
grid_lua_semaphore_release(&grid_lua_state);

grid_ui_event_state_set(eve, GRID_EVE_STATE_INIT);
}
Expand Down
6 changes: 1 addition & 5 deletions common/src/c/grid_ui.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ void grid_ui_semaphore_init(struct grid_ui_semaphore* semaphore, void* handle, v
enum grid_eve_state_t {
GRID_EVE_STATE_INIT = 0,
GRID_EVE_STATE_TRIG,
GRID_EVE_STATE_TRIG_LOCAL,
};

struct grid_ui_event {
Expand Down Expand Up @@ -165,9 +164,7 @@ void grid_ui_event_get_script(struct grid_ui_event* eve, char* targetstring);
int grid_ui_event_recall_configuration(struct grid_ui_model* ui, uint8_t page, uint8_t element, uint8_t event_type, char* targetstring);

uint8_t grid_ui_event_istriggered(struct grid_ui_event* eve);
uint8_t grid_ui_event_istriggered_local(struct grid_ui_event* eve);
uint16_t grid_ui_event_count_istriggered(struct grid_ui_model* ui);
uint16_t grid_ui_event_count_istriggered_local(struct grid_ui_model* ui);

struct grid_ui_element* grid_ui_element_find(struct grid_ui_model* ui, uint8_t element_number);

Expand Down Expand Up @@ -198,8 +195,7 @@ void grid_ui_bulk_conferase_next(struct grid_ui_model* ui);
int grid_ui_bulk_nvmerase_init(struct grid_ui_model* ui, uint8_t lastheader_id, void (*success_cb)(uint8_t));
void grid_ui_bulk_nvmerase_next(struct grid_ui_model* ui);

void grid_port_process_ui_local_UNSAFE(struct grid_ui_model* ui);

void grid_ui_event_render_script(struct grid_ui_event* eve, struct grid_msg* msg);
void grid_port_process_ui_UNSAFE(struct grid_ui_model* ui);

void grid_ui_bulk_start_with_state(struct grid_ui_model* ui, fn_prthread_bulk_t next, uint8_t page, uint8_t lastheader_id, void (*success_cb)(uint8_t));
Expand Down
6 changes: 4 additions & 2 deletions common/src/c/grid_utask.c
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
#include "grid_utask.h"

#include <limits.h>

#include "grid_platform.h"

bool grid_utask_timer_elapsed(struct grid_utask_timer* timer) {

uint64_t now = grid_platform_rtc_get_micros();

bool ret = grid_platform_rtc_get_diff(now, timer->last) >= timer->period;
bool ret = grid_platform_rtc_get_diff(now, timer->last) > timer->period;

if (ret) {
timer->last = now;
Expand All @@ -15,4 +17,4 @@ bool grid_utask_timer_elapsed(struct grid_utask_timer* timer) {
return ret;
}

void grid_utask_timer_realign(struct grid_utask_timer* timer) { timer->last = grid_platform_rtc_get_micros(); }
void grid_utask_timer_realign_to_elapse(struct grid_utask_timer* timer) { timer->last = grid_platform_rtc_get_micros() - (timer->period + 1); }
6 changes: 5 additions & 1 deletion common/src/c/grid_utask.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,16 @@
#include <stdbool.h>
#include <stdint.h>

// clang-format off
#define GRID_UTASK_DISABLED { .last = 0, .period = UINT64_MAX }
// clang-format on

struct grid_utask_timer {
uint64_t last;
uint64_t period;
};

bool grid_utask_timer_elapsed(struct grid_utask_timer* timer);
void grid_utask_timer_realign(struct grid_utask_timer* timer);
void grid_utask_timer_realign_to_elapse(struct grid_utask_timer* timer);

#endif /* GRID_UTASK_H */
11 changes: 0 additions & 11 deletions d51n20a/grid_d51n20a.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,17 +164,6 @@ void grid_utask_process_ui(struct grid_utask_timer* timer) {
return;
}

if (grid_ui_bulk_in_progress(&grid_ui_state)) {
return;
}

// Service local triggers first and as fast as possible
if (grid_ui_event_count_istriggered_local(&grid_ui_state) > 0) {

grid_port_process_ui_local_UNSAFE(&grid_ui_state);
return;
}

if (grid_ui_event_count_istriggered(&grid_ui_state) > 0) {

if (!grid_utask_timer_elapsed(timer)) {
Expand Down
Loading
Loading