mirror of https://github.com/rusefi/bldc.git
Lisp
This commit is contained in:
parent
3bdf0e92aa
commit
93e6a6aeb9
|
@ -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"
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue