This commit is contained in:
Benjamin Vedder 2022-02-17 00:49:11 +01:00
parent 3bdf0e92aa
commit 93e6a6aeb9
4 changed files with 107 additions and 88 deletions

View File

@ -24,7 +24,7 @@
#define FW_VERSION_MAJOR 6
#define FW_VERSION_MINOR 00
// Set to 0 for building a release and iterate during beta test builds
#define FW_TEST_VERSION_NUMBER 7
#define FW_TEST_VERSION_NUMBER 8
#include "datatypes.h"

View File

@ -13,8 +13,9 @@ LISPBMSRC = $(LISPBM)/src/env.c \
$(LISPBM)/src/lispbm.c \
$(LISPBM)/src/eval_cps.c \
$(LISPBM)/platform/chibios/src/platform_mutex.c \
$(LISPBM)/streams.c \
$(LISPBM)/lbm_c_interop.c \
$(LISPBM)/src/streams.c \
$(LISPBM)/src/lbm_c_interop.c \
$(LISPBM)/src/lbm_variables.c \
lispBM/lispif.c \
lispBM/lispif_vesc_extensions.c

View File

@ -39,12 +39,16 @@
#define LISP_MEM_BITMAP_SIZE LBM_MEMORY_BITMAP_SIZE_8K
#define GC_STACK_SIZE 160
#define PRINT_STACK_SIZE 128
#define EXTENSION_STORAGE_SIZE 128
#define VARIABLE_STORAGE_SIZE 128
__attribute__((section(".ram4"))) static lbm_cons_t heap[HEAP_SIZE] __attribute__ ((aligned (8)));
static uint32_t memory_array[LISP_MEM_SIZE];
static uint32_t bitmap_array[LISP_MEM_BITMAP_SIZE];
static uint32_t gc_stack_storage[GC_STACK_SIZE];
static uint32_t print_stack_storage[PRINT_STACK_SIZE];
static extension_fptr extension_storage[EXTENSION_STORAGE_SIZE];
static lbm_value variable_storage[VARIABLE_STORAGE_SIZE];
static lbm_tokenizer_string_state_t string_tok_state;
static lbm_tokenizer_char_stream_t string_tok;
@ -168,6 +172,16 @@ void lispif_process_cmd(unsigned char *data, unsigned int len,
curr = lbm_cdr(curr);
}
for (int i = 0; i < lbm_get_num_variables(); i ++) {
const char *name = lbm_get_variable_name_by_index(i);
const lbm_value var = lbm_get_variable_by_index(i);
if (lbm_is_number(var) && name) {
strcpy((char*)(send_buffer_global + ind), name);
ind += strlen(name) + 1;
buffer_append_float32_auto(send_buffer_global, lbm_dec_as_f(var), &ind);
}
}
reply_func(send_buffer_global, ind);
chMtxUnlock(&send_buffer_mutex);
} break;
@ -189,7 +203,9 @@ static bool start_lisp(bool print) {
gc_stack_storage, GC_STACK_SIZE,
memory_array, LBM_MEMORY_SIZE_8K,
bitmap_array, LBM_MEMORY_BITMAP_SIZE_8K,
print_stack_storage, PRINT_STACK_SIZE);
print_stack_storage, PRINT_STACK_SIZE,
extension_storage, EXTENSION_STORAGE_SIZE);
lbm_variables_init(variable_storage, VARIABLE_STORAGE_SIZE);
lbm_set_timestamp_us_callback(timestamp_callback);
lbm_set_usleep_callback(sleep_callback);
@ -206,7 +222,9 @@ static bool start_lisp(bool print) {
gc_stack_storage, GC_STACK_SIZE,
memory_array, LBM_MEMORY_SIZE_8K,
bitmap_array, LBM_MEMORY_BITMAP_SIZE_8K,
print_stack_storage, PRINT_STACK_SIZE);
print_stack_storage, PRINT_STACK_SIZE,
extension_storage, EXTENSION_STORAGE_SIZE);
lbm_variables_init(variable_storage, VARIABLE_STORAGE_SIZE);
lbm_pause_eval();
while (lbm_get_eval_state() != EVAL_CPS_STATE_PAUSED) {

View File

@ -1044,89 +1044,6 @@ static lbm_value ext_raw_hall(lbm_value *args, lbm_uint argn) {
return hall_list;
}
void lispif_process_can(uint32_t can_id, uint8_t *data8, int len, bool is_ext) {
if (!event_handler_registered) {
return;
}
if (!event_can_sid_en && !is_ext) {
return;
}
if (!event_can_eid_en && is_ext) {
return;
}
bool ok = true;
int timeout_cnt = 1000;
lbm_pause_eval_with_gc(100);
while (lbm_get_eval_state() != EVAL_CPS_STATE_PAUSED && timeout_cnt > 0) {
chThdSleep(1);
timeout_cnt--;
}
ok = timeout_cnt > 0;
if (ok) {
lbm_value data = lbm_enc_sym(SYM_NIL);
for (int i = len - 1;i >= 0;i--) {
data = lbm_cons(lbm_enc_i(data8[i]), data);
}
lbm_value msg_data = lbm_cons(lbm_enc_I(can_id), data);
lbm_value msg;
if (is_ext) {
msg = lbm_cons(lbm_enc_sym(sym_signal_can_eid), msg_data);
} else {
msg = lbm_cons(lbm_enc_sym(sym_signal_can_sid), msg_data);
}
lbm_send_message(event_handler_pid, msg);
}
lbm_continue_eval();
}
void lispif_process_custom_app_data(unsigned char *data, unsigned int len) {
if (!event_handler_registered) {
return;
}
if (!event_data_rx_en) {
return;
}
bool ok = true;
int timeout_cnt = 1000;
lbm_pause_eval_with_gc(100);
while (lbm_get_eval_state() != EVAL_CPS_STATE_PAUSED && timeout_cnt > 0) {
chThdSleep(1);
timeout_cnt--;
}
ok = timeout_cnt > 0;
if (ok) {
lbm_value bytes = lbm_enc_sym(SYM_NIL);
for (int i = len - 1;i >= 0;i--) {
bytes = lbm_cons(lbm_enc_i(data[i]), bytes);
}
lbm_value msg = lbm_cons(lbm_enc_sym(sym_signal_data_rx), bytes);
lbm_send_message(event_handler_pid, msg);
}
lbm_continue_eval();
}
void lispif_disable_all_events(void) {
event_handler_registered = false;
event_can_sid_en = false;
event_can_eid_en = false;
}
void lispif_load_vesc_extensions(void) {
lbm_add_symbol_const("signal-can-sid", &sym_signal_can_sid);
lbm_add_symbol_const("signal-can-eid", &sym_signal_can_eid);
@ -1229,3 +1146,86 @@ void lispif_load_vesc_extensions(void) {
lbm_add_extension("raw-mod-beta-measured", ext_raw_mod_beta_measured);
lbm_add_extension("raw-hall", ext_raw_hall);
}
void lispif_process_can(uint32_t can_id, uint8_t *data8, int len, bool is_ext) {
if (!event_handler_registered) {
return;
}
if (!event_can_sid_en && !is_ext) {
return;
}
if (!event_can_eid_en && is_ext) {
return;
}
bool ok = true;
int timeout_cnt = 1000;
lbm_pause_eval_with_gc(100);
while (lbm_get_eval_state() != EVAL_CPS_STATE_PAUSED && timeout_cnt > 0) {
chThdSleep(1);
timeout_cnt--;
}
ok = timeout_cnt > 0;
if (ok) {
lbm_value data = lbm_enc_sym(SYM_NIL);
for (int i = len - 1;i >= 0;i--) {
data = lbm_cons(lbm_enc_i(data8[i]), data);
}
lbm_value msg_data = lbm_cons(lbm_enc_I(can_id), data);
lbm_value msg;
if (is_ext) {
msg = lbm_cons(lbm_enc_sym(sym_signal_can_eid), msg_data);
} else {
msg = lbm_cons(lbm_enc_sym(sym_signal_can_sid), msg_data);
}
lbm_send_message(event_handler_pid, msg);
}
lbm_continue_eval();
}
void lispif_process_custom_app_data(unsigned char *data, unsigned int len) {
if (!event_handler_registered) {
return;
}
if (!event_data_rx_en) {
return;
}
bool ok = true;
int timeout_cnt = 1000;
lbm_pause_eval_with_gc(100);
while (lbm_get_eval_state() != EVAL_CPS_STATE_PAUSED && timeout_cnt > 0) {
chThdSleep(1);
timeout_cnt--;
}
ok = timeout_cnt > 0;
if (ok) {
lbm_value bytes = lbm_enc_sym(SYM_NIL);
for (int i = len - 1;i >= 0;i--) {
bytes = lbm_cons(lbm_enc_i(data[i]), bytes);
}
lbm_value msg = lbm_cons(lbm_enc_sym(sym_signal_data_rx), bytes);
lbm_send_message(event_handler_pid, msg);
}
lbm_continue_eval();
}
void lispif_disable_all_events(void) {
event_handler_registered = false;
event_can_sid_en = false;
event_can_eid_en = false;
}