mirror of
https://gitee.com/xiaohuolufeihua/bizhang_-obav.git
synced 2026-05-21 01:12:11 +00:00
Add LEDs to ARK Can Bootloader
This commit is contained in:
@@ -20,9 +20,12 @@ px4_add_board(
|
||||
load_mon
|
||||
#sensors
|
||||
SYSTEMCMDS
|
||||
mft
|
||||
mtd
|
||||
param
|
||||
perf
|
||||
reboot
|
||||
system_time
|
||||
top
|
||||
topic_listener
|
||||
ver
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -49,6 +49,12 @@
|
||||
|
||||
#include <nuttx/board.h>
|
||||
|
||||
__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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,6 +69,12 @@
|
||||
# include <parameters/flashparams/flashfs.h>
|
||||
#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;
|
||||
}
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user