mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-19 01:23:34 +08:00
canbootloder:Make support for ALT Bootloader an Option
This commit is contained in:
committed by
Daniel Agar
parent
174f2624df
commit
5ea56af5f0
@@ -34,6 +34,7 @@
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#if defined(SUPPORT_ALT_CAN_BOOTLOADER)
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -46,8 +47,6 @@
|
||||
|
||||
#include <lib/systemlib/crc.h>
|
||||
|
||||
extern void *_sapp_bl_shared;
|
||||
|
||||
/****************************************************************************
|
||||
* Name: bootloader_alt_app_shared_read
|
||||
*
|
||||
@@ -142,3 +141,4 @@ __EXPORT void bootloader_alt_app_shared_invalidate(void)
|
||||
bootloader_alt_app_shared->signature = 0;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <nuttx/compiler.h>
|
||||
|
||||
#if defined(SUPPORT_ALT_CAN_BOOTLOADER)
|
||||
__BEGIN_DECLS
|
||||
|
||||
/****************************************************************************
|
||||
@@ -73,6 +73,7 @@ typedef begin_packed_struct struct bootloader_alt_app_shared_t {
|
||||
} end_packed_struct bootloader_alt_app_shared_t;
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
extern bootloader_alt_app_shared_t _sapp_bl_shared;
|
||||
|
||||
/****************************************************************************
|
||||
* Name: bootloader_alt_app_shared_read
|
||||
@@ -144,3 +145,4 @@ void bootloader_alt_app_shared_write(bootloader_alt_app_shared_t *alt_shared);
|
||||
void bootloader_alt_app_shared_invalidate(void);
|
||||
|
||||
__END_DECLS
|
||||
#endif
|
||||
|
||||
@@ -251,17 +251,19 @@ void UavcanNode::cb_beginfirmware_update(const uavcan::ReceivedDataStructure<Uav
|
||||
|
||||
if (!inprogress) {
|
||||
inprogress = true;
|
||||
#if defined(SUPPORT_ALT_CAN_BOOTLOADER)
|
||||
|
||||
if (!board_booted_by_px4()) {
|
||||
bootloader_alt_app_shared_t shared_alt{0};
|
||||
shared_alt.fw_server_node_id = req.source_node_id;
|
||||
shared_alt.node_id = _node.getNodeID().get();
|
||||
shared_alt.path[0] = '\0';
|
||||
strncat((char *)shared_alt.path, (const char *)req.image_file_remote_path.path.c_str(), sizeof(shared_alt.path) - 1);
|
||||
bootloader_alt_app_shared_write(&shared_alt);
|
||||
board_configure_reset(BOARD_RESET_MODE_CAN_BL, shared_alt.node_id);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
bootloader_app_shared_t shared;
|
||||
shared.bus_speed = active_bitrate;
|
||||
shared.node_id = _node.getNodeID().get();
|
||||
@@ -527,17 +529,24 @@ extern "C" int uavcannode_start(int argc, char *argv[])
|
||||
|
||||
} else {
|
||||
// Node ID
|
||||
#if defined(SUPPORT_ALT_CAN_BOOTLOADER)
|
||||
if (!board_booted_by_px4()) {
|
||||
node_id = 0;
|
||||
bitrate = 1000000;
|
||||
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
(void)param_get(param_find("CANNODE_NODE_ID"), &node_id);
|
||||
(void)param_get(param_find("CANNODE_BITRATE"), &bitrate);
|
||||
}
|
||||
}
|
||||
|
||||
if (board_booted_by_px4() && (node_id < 0 || node_id > uavcan::NodeID::Max || !uavcan::NodeID(node_id).isUnicast())) {
|
||||
if (
|
||||
#if defined(SUPPORT_ALT_CAN_BOOTLOADER)
|
||||
board_booted_by_px4() &&
|
||||
#endif
|
||||
(node_id < 0 || node_id > uavcan::NodeID::Max || !uavcan::NodeID(node_id).isUnicast())) {
|
||||
PX4_ERR("Invalid Node ID %i", node_id);
|
||||
return 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user