diff --git a/lispBM/c_libs/vesc_c_if.h b/lispBM/c_libs/vesc_c_if.h index f3015dab..dc6cb06e 100755 --- a/lispBM/c_libs/vesc_c_if.h +++ b/lispBM/c_libs/vesc_c_if.h @@ -143,6 +143,23 @@ typedef enum { VESC_PIN_MODE_ANALOG, } VESC_PIN_MODE; +typedef enum { + CFG_PARAM_l_current_max = 0, + CFG_PARAM_l_current_min, + CFG_PARAM_l_in_current_max, + CFG_PARAM_l_in_current_min, + CFG_PARAM_l_abs_current_max, + CFG_PARAM_l_min_erpm, + CFG_PARAM_l_max_erpm, + CFG_PARAM_l_erpm_start, + CFG_PARAM_l_max_erpm_fbrake, + CFG_PARAM_l_max_erpm_fbrake_cc, + CFG_PARAM_l_min_vin, + CFG_PARAM_l_max_vin, + CFG_PARAM_l_battery_cut_start, + CFG_PARAM_l_battery_cut_end, +} CFG_PARAM; + #ifndef PACKET_MAX_PL_LEN #define PACKET_MAX_PL_LEN 512 #endif @@ -366,6 +383,12 @@ typedef struct { // Send app data (which can be received by QML) void (*send_app_data)(unsigned char *data, unsigned int len); + + // Age of timestamp in seconds + float (*ts_to_age_s)(systime_t ts); + + // Settings (TODO: Add more types and also setters) + float (*get_cfg_float)(CFG_PARAM p); } vesc_c_if; typedef struct { diff --git a/lispBM/lispif_c_lib.c b/lispBM/lispif_c_lib.c index 8e4762d0..b827439a 100644 --- a/lispBM/lispif_c_lib.c +++ b/lispBM/lispif_c_lib.c @@ -365,6 +365,36 @@ static int32_t lib_uart_read(void) { return sdGetTimeout(&HW_UART_DEV, TIME_IMMEDIATE); } +static float lib_ts_to_age_s(systime_t ts) { + return UTILS_AGE_S(ts); +} + +static float lib_get_cfg_float(CFG_PARAM p) { + float res = 0.0; + + const volatile mc_configuration *conf = mc_interface_get_configuration(); + + switch (p) { + case CFG_PARAM_l_current_max: res = conf->l_current_max; break; + case CFG_PARAM_l_current_min: res = conf->l_current_min; break; + case CFG_PARAM_l_in_current_max: res = conf->l_in_current_max; break; + case CFG_PARAM_l_in_current_min: res = conf->l_in_current_min; break; + case CFG_PARAM_l_abs_current_max: res = conf->l_abs_current_max; break; + case CFG_PARAM_l_min_erpm: res = conf->l_min_erpm; break; + case CFG_PARAM_l_max_erpm: res = conf->l_max_erpm; break; + case CFG_PARAM_l_erpm_start: res = conf->l_erpm_start; break; + case CFG_PARAM_l_max_erpm_fbrake: res = conf->l_max_erpm_fbrake; break; + case CFG_PARAM_l_max_erpm_fbrake_cc: res = conf->l_max_erpm_fbrake_cc; break; + case CFG_PARAM_l_min_vin: res = conf->l_min_vin; break; + case CFG_PARAM_l_max_vin: res = conf->l_max_vin; break; + case CFG_PARAM_l_battery_cut_start: res = conf->l_battery_cut_start; break; + case CFG_PARAM_l_battery_cut_end: res = conf->l_battery_cut_end; break; + default: break; + } + + return res; +} + lbm_value ext_load_native_lib(lbm_value *args, lbm_uint argn) { lbm_value res = lbm_enc_sym(SYM_EERROR); @@ -572,6 +602,12 @@ lbm_value ext_load_native_lib(lbm_value *args, lbm_uint argn) { // App data cif.cif.send_app_data = commands_send_app_data; + // Age of timestamp in seconds + cif.cif.ts_to_age_s = lib_ts_to_age_s; + + // Settings + cif.cif.get_cfg_float = lib_get_cfg_float; + lib_init_done = true; }