diff --git a/boards/ark/can-flow/default.cmake b/boards/ark/can-flow/default.cmake index eaaa5120de..af24344394 100644 --- a/boards/ark/can-flow/default.cmake +++ b/boards/ark/can-flow/default.cmake @@ -20,9 +20,12 @@ px4_add_board( load_mon #sensors SYSTEMCMDS + mft + mtd param perf reboot + system_time top topic_listener ver diff --git a/boards/ark/can-flow/src/CMakeLists.txt b/boards/ark/can-flow/src/CMakeLists.txt index 97375e699b..0a0d160823 100644 --- a/boards/ark/can-flow/src/CMakeLists.txt +++ b/boards/ark/can-flow/src/CMakeLists.txt @@ -51,12 +51,14 @@ else() can.c i2c.cpp init.c + led.c spi.cpp ) target_link_libraries(drivers_board PRIVATE arch_spi + drivers__led # drv_led_start nuttx_arch nuttx_drivers px4_layer diff --git a/boards/ark/can-flow/src/board_config.h b/boards/ark/can-flow/src/board_config.h index 28a50bbc11..44424aeae7 100644 --- a/boards/ark/can-flow/src/board_config.h +++ b/boards/ark/can-flow/src/board_config.h @@ -53,8 +53,12 @@ #define GPIO_BOOT_CONFIG /* PC15 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN15|GPIO_EXTI) /* LEDs are driven with push open drain to support Anode to 5V or 3.3V */ -#define GPIO_LED_RED /* PB3 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN3) -#define GPIO_LED_BLUE /* PA8 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN8) +#define GPIO_nLED_RED /* PB3 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN3) +#define GPIO_nLED_BLUE /* PA8 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN8) + +#define BOARD_HAS_CONTROL_STATUS_LEDS 1 +#define BOARD_OVERLOAD_LED LED_RED +#define BOARD_ARMED_STATE_LED LED_BLUE #define FLASH_BASED_PARAMS diff --git a/boards/ark/can-flow/src/boot.c b/boards/ark/can-flow/src/boot.c index 824dc1f7f1..a0716b9dcb 100644 --- a/boards/ark/can-flow/src/boot.c +++ b/boards/ark/can-flow/src/boot.c @@ -49,6 +49,12 @@ #include +__BEGIN_DECLS +extern void led_init(void); +extern void bootloader_led_on(int led); +extern void bootloader_led_off(int led); +__END_DECLS + /************************************************************************************ * Name: stm32_boardinitialize * @@ -69,6 +75,8 @@ __EXPORT void stm32_boardinitialize(void) putreg32(getreg32(STM32_RCC_APB1RSTR) | RCC_APB1RSTR_CAN1RST, STM32_RCC_APB1RSTR); putreg32(getreg32(STM32_RCC_APB1RSTR) & ~RCC_APB1RSTR_CAN1RST, STM32_RCC_APB1RSTR); + led_init(); + #if defined(OPT_WAIT_FOR_GETNODEINFO_JUMPER_GPIO) stm32_configgpio(GPIO_GETNODEINFO_JUMPER); #endif @@ -152,48 +160,27 @@ size_t board_get_hardware_version(uavcan_HardwareVersion_t *hw_version) * None * ****************************************************************************/ -// #define led(n, code, r , g , b, h) {.red = (r),.green = (g), .blue = (b),.hz = (h)} - -// typedef begin_packed_struct struct led_t { -// uint8_t red; -// uint8_t green; -// uint8_t blue; -// uint8_t hz; -// } end_packed_struct led_t; - -// static const led_t i2l[] = { - -// led(0, off, 0, 0, 0, 0), -// led(1, reset, 128, 128, 128, 30), -// led(2, autobaud_start, 0, 128, 0, 1), -// led(3, autobaud_end, 0, 128, 0, 2), -// led(4, allocation_start, 0, 0, 64, 2), -// led(5, allocation_end, 0, 128, 64, 3), -// led(6, fw_update_start, 32, 128, 64, 3), -// led(7, fw_update_erase_fail, 32, 128, 32, 3), -// led(8, fw_update_invalid_response, 64, 0, 0, 1), -// led(9, fw_update_timeout, 64, 0, 0, 2), -// led(a, fw_update_invalid_crc, 64, 0, 0, 4), -// led(b, jump_to_app, 0, 128, 0, 10), - -// }; - void board_indicate(uiindication_t indication) { - // switch(indication) { - // case off: - // led_off(GPIO_nLED_RED); - // led_off(GPIO_nLED_BLUE); - // break; - // case reset: - // led_on(GPIO_nLED_RED); - // led_on(GPIO_nLED_BLUE); - // break; - // case jump_to_app: - // led_on(GPIO_nLED_RED); - // led_off(GPIO_nLED_BLUE); - // break; - // default: - // break; - // } + if (indication == off) { + bootloader_led_off(GPIO_nLED_RED); + bootloader_led_off(GPIO_nLED_BLUE); + + } else if (indication == fw_update_start) { + bootloader_led_on(GPIO_nLED_RED); + bootloader_led_on(GPIO_nLED_BLUE); + + } else if ((indication == fw_update_erase_fail) || (indication == fw_update_invalid_response) + || (indication == fw_update_timeout) || (indication == fw_update_invalid_crc)) { + bootloader_led_on(GPIO_nLED_RED); + bootloader_led_off(GPIO_nLED_BLUE); + + } else if (indication == allocation_start) { + bootloader_led_on(GPIO_nLED_RED); + bootloader_led_off(GPIO_nLED_BLUE); + + } else { + bootloader_led_off(GPIO_nLED_RED); + bootloader_led_on(GPIO_nLED_BLUE); + } } diff --git a/boards/ark/can-flow/src/init.c b/boards/ark/can-flow/src/init.c index 6254761a39..501c13d29d 100644 --- a/boards/ark/can-flow/src/init.c +++ b/boards/ark/can-flow/src/init.c @@ -69,6 +69,12 @@ # include #endif +__BEGIN_DECLS +extern void led_init(void); +extern void led_on(int led); +extern void led_off(int led); +__END_DECLS + /************************************************************************************ * Name: stm32_boardinitialize * @@ -121,6 +127,9 @@ __EXPORT int board_app_initialize(uintptr_t arg) { px4_platform_init(); + // Configure LEDs. + board_autoled_initialize(); + #if defined(FLASH_BASED_PARAMS) static sector_descriptor_t params_sector_map[] = { {2, 16 * 1024, 0x08008000}, @@ -138,7 +147,14 @@ __EXPORT int board_app_initialize(uintptr_t arg) #endif // FLASH_BASED_PARAMS - //px4_platform_configure(); + /* initial LED state */ + drv_led_start(); + led_off(LED_RED); + led_on(LED_BLUE); + + /* Configure the HW based on the manifest */ + + px4_platform_configure(); return OK; } diff --git a/boards/ark/can-flow/src/led.c b/boards/ark/can-flow/src/led.c index 19c72d8705..aa47edac93 100644 --- a/boards/ark/can-flow/src/led.c +++ b/boards/ark/can-flow/src/led.c @@ -55,14 +55,17 @@ */ __BEGIN_DECLS extern void led_init(void); +extern void bootloader_led_on(int led); +extern void bootloader_led_off(int led); extern void led_on(int led); extern void led_off(int led); extern void led_toggle(int led); __END_DECLS +# define xlat(p) (p) static uint32_t g_ledmap[] = { - GPIO_LED_RED, - GPIO_LED_BLUE, + GPIO_nLED_BLUE, + GPIO_nLED_RED, }; __EXPORT void led_init(void) @@ -70,10 +73,21 @@ __EXPORT void led_init(void) /* Configure LED GPIOs for output */ for (size_t l = 0; l < (sizeof(g_ledmap) / sizeof(g_ledmap[0])); l++) { stm32_configgpio(g_ledmap[l]); - stm32_gpiowrite(g_ledmap[l], true); } } +__EXPORT void bootloader_led_on(int led) +{ + /* Pull Down to switch on */ + stm32_gpiowrite(led, false); +} + +__EXPORT void bootloader_led_off(int led) +{ + /* Pull Up to switch on */ + stm32_gpiowrite(led, true); +} + static void phy_set_led(int led, bool state) { /* Pull Down to switch on */ @@ -82,21 +96,20 @@ static void phy_set_led(int led, bool state) static bool phy_get_led(int led) { - return !stm32_gpioread(g_ledmap[led]); } __EXPORT void led_on(int led) { - phy_set_led(led, true); + phy_set_led(xlat(led), true); } __EXPORT void led_off(int led) { - phy_set_led(led, false); + phy_set_led(xlat(led), false); } __EXPORT void led_toggle(int led) { - phy_set_led(led, !phy_get_led(led)); + phy_set_led(xlat(led), !phy_get_led(xlat(led))); }