diff --git a/hwconf/hw.h b/hwconf/hw.h index ade94a05..9e3374eb 100644 --- a/hwconf/hw.h +++ b/hwconf/hw.h @@ -231,6 +231,12 @@ #ifndef AUX_OFF #define AUX_OFF() #endif +#ifndef AUX2_ON +#define AUX2_ON() +#endif +#ifndef AUX2_OFF +#define AUX2_OFF() +#endif #ifndef PHASE_FILTER_ON #define PHASE_FILTER_ON() diff --git a/hwconf/hw_60v2_alva.c b/hwconf/hw_60v2_alva.c index d315b53a..50d2c036 100644 --- a/hwconf/hw_60v2_alva.c +++ b/hwconf/hw_60v2_alva.c @@ -88,11 +88,15 @@ void hw_init_gpio(void) { CURRENT_FILTER_OFF(); - // AUX pin + // AUX pins AUX_OFF(); palSetPadMode(AUX_GPIO, AUX_PIN, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); + AUX2_OFF(); + palSetPadMode(AUX2_GPIO, AUX2_PIN, + PAL_MODE_OUTPUT_PUSHPULL | + PAL_STM32_OSPEED_HIGHEST); // Sensor port voltage SENSOR_PORT_3V3(); diff --git a/hwconf/hw_60v2_alva.h b/hwconf/hw_60v2_alva.h index 3a9d03f8..ece8cf08 100644 --- a/hwconf/hw_60v2_alva.h +++ b/hwconf/hw_60v2_alva.h @@ -55,6 +55,10 @@ #define AUX_PIN 12 #define AUX_ON() palSetPad(AUX_GPIO, AUX_PIN) #define AUX_OFF() palClearPad(AUX_GPIO, AUX_PIN) +#define AUX2_GPIO GPIOC +#define AUX2_PIN 13 +#define AUX2_ON() palSetPad(AUX2_GPIO, AUX2_PIN) +#define AUX2_OFF() palClearPad(AUX2_GPIO, AUX2_PIN) #define CURRENT_FILTER_GPIO GPIOD #define CURRENT_FILTER_PIN 2 diff --git a/lispBM/lispif_vesc_extensions.c b/lispBM/lispif_vesc_extensions.c index 91d1febf..de75188e 100644 --- a/lispBM/lispif_vesc_extensions.c +++ b/lispBM/lispif_vesc_extensions.c @@ -247,6 +247,30 @@ static lbm_value ext_secs_since(lbm_value *args, lbm_uint argn) { return lbm_enc_F(UTILS_AGE_S(lbm_dec_as_u(args[0]))); } +static lbm_value ext_set_aux(lbm_value *args, lbm_uint argn) { + CHECK_ARGN_NUMBER(2); + + int port = lbm_dec_as_u(args[0]); + bool on = lbm_dec_as_u(args[1]); + if (port == 1) { + if (on) { + AUX_ON(); + } else { + AUX_OFF(); + } + return lbm_enc_sym(SYM_TRUE); + } else if (port == 2) { + if (on) { + AUX2_ON(); + } else { + AUX2_OFF(); + } + return lbm_enc_sym(SYM_TRUE); + } + + return lbm_enc_sym(SYM_EERROR); +} + // Motor set commands static lbm_value ext_set_current(lbm_value *args, lbm_uint argn) { @@ -476,6 +500,7 @@ void lispif_load_vesc_extensions(void) { lbm_add_extension("get-adc", ext_get_adc); lbm_add_extension("systime", ext_systime); lbm_add_extension("secs-since", ext_secs_since); + lbm_add_extension("set-aux", ext_set_aux); // Motor set commands lbm_add_extension("set-current", ext_set_current); diff --git a/lispBM/tests/LispLoader.qml b/lispBM/tests/LispLoader.qml index a1ef2df3..4ef5b7be 100644 --- a/lispBM/tests/LispLoader.qml +++ b/lispBM/tests/LispLoader.qml @@ -50,8 +50,9 @@ Item { // mLogReader.openLogFile("example_control_servo_from_encoder.lisp") // mLogReader.openLogFile("example_control_servo_from_duty.lisp") // mLogReader.openLogFile("example_print_bms_data.lisp") - mLogReader.openLogFile("example_can_pos_follow.lisp") +// mLogReader.openLogFile("example_can_pos_follow.lisp") // mLogReader.openLogFile("example_speed_test.lisp") + mLogReader.openLogFile("example_aux.lisp") // // mLogReader.openLogFile("test_math.lisp") diff --git a/lispBM/tests/example_aux.lisp b/lispBM/tests/example_aux.lisp new file mode 100644 index 00000000..ec52e69d --- /dev/null +++ b/lispBM/tests/example_aux.lisp @@ -0,0 +1,17 @@ +(define set-auxtime (lambda (port state time) + (progn + (set-aux port state) + (define aux-now (list port state time)) + (yield (* 1000 time)) +))) + +(let ((f (lambda () + (progn + (set-auxtime 1 1 1500) + (set-auxtime 1 0 500) + (set-auxtime 2 1 1500) + (set-auxtime 2 0 500) + (yield 1000000) + (f) +)))) (f)) +