Skip to content

Commit 784efc1

Browse files
mindneverfilnet
authored andcommitted
Merged in mindnever/librepilot/LP-556-Allow_BoardId_and_Revision_spoofing (pull request #475)
LP-556 Allow BoardId and Revision spoofing Approved-by: Alessio Morale <alessiomorale@gmail.com> Approved-by: Vladimir Zidar <mr_w@mindnever.org> Approved-by: Philippe Renon <philippe_renon@yahoo.fr> Approved-by: Lalanne Laurent <f5soh@free.fr>
2 parents 578e7ad + c3d9c27 commit 784efc1

5 files changed

Lines changed: 51 additions & 2 deletions

File tree

flight/modules/FirmwareIAP/firmwareiap.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,12 @@ int32_t FirmwareIAPInitialize()
9696
FirmwareIAPObjData data;
9797
FirmwareIAPObjGet(&data);
9898

99-
data.BoardType = bdinfo->board_type;
10099
PIOS_BL_HELPER_FLASH_Read_Description(data.Description, FIRMWAREIAPOBJ_DESCRIPTION_NUMELEM);
101100
PIOS_SYS_SerialNumberGetBinary(data.CPUSerial);
102-
data.BoardRevision = bdinfo->board_rev;
101+
if (data.BoardType == 0) {
102+
data.BoardRevision = bdinfo->board_rev;
103+
data.BoardType = bdinfo->board_type;
104+
}
103105
data.BootloaderRevision = bdinfo->bl_rev;
104106
data.ArmReset = 0;
105107
data.crc = 0;

flight/targets/boards/discoveryf4bare/firmware/UAVObjects.inc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,11 @@ UAVOBJSRCFILENAMES += velocitydesired
106106
UAVOBJSRCFILENAMES += watchdogstatus
107107
UAVOBJSRCFILENAMES += flightstatus
108108
UAVOBJSRCFILENAMES += hwsettings
109+
UAVOBJSRCFILENAMES += hwdiscoveryf4baresettings
110+
UAVOBJSRCFILENAMES += hwpikoblxsettings
111+
UAVOBJSRCFILENAMES += hwspracingf3evosettings
112+
UAVOBJSRCFILENAMES += hwspracingf3settings
113+
UAVOBJSRCFILENAMES += hwtinyfishsettings
109114
UAVOBJSRCFILENAMES += receiveractivity
110115
UAVOBJSRCFILENAMES += receiverstatus
111116
UAVOBJSRCFILENAMES += cameradesired

flight/targets/boards/discoveryf4bare/firmware/pios_board.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
#include <taskinfo.h>
3434
#include <pios_ws2811.h>
3535

36+
#include "hwdiscoveryf4baresettings.h"
37+
#include "firmwareiapobj.h"
3638

3739
#ifdef PIOS_INCLUDE_INSTRUMENTATION
3840
#include <pios_instrumentation.h>
@@ -58,6 +60,19 @@ uintptr_t pios_user_fs_id;
5860
uint32_t pios_ws2811_id;
5961
#endif
6062

63+
static HwDiscoveryF4BareSettingsData boardHwSettings;
64+
65+
static void hwDiscoveryF4BareSettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
66+
{
67+
HwDiscoveryF4BareSettingsData currentBoardHwSettings;
68+
69+
HwDiscoveryF4BareSettingsGet(&currentBoardHwSettings);
70+
71+
if (memcmp(&currentBoardHwSettings, &boardHwSettings, sizeof(HwDiscoveryF4BareSettingsData)) != 0) {
72+
ExtendedAlarmsSet(SYSTEMALARMS_ALARM_BOOTFAULT, SYSTEMALARMS_ALARM_CRITICAL, SYSTEMALARMS_EXTENDEDALARMSTATUS_REBOOTREQUIRED, 0);
73+
}
74+
}
75+
6176
static const PIOS_BOARD_IO_UART_Function flexiio_function_map[] = {
6277
[HWSETTINGS_RM_RCVRPORT_PPMTELEMETRY] = PIOS_BOARD_IO_UART_TELEMETRY,
6378
[HWSETTINGS_RM_RCVRPORT_PPMDEBUGCONSOLE] = PIOS_BOARD_IO_UART_DEBUGCONSOLE,
@@ -189,6 +204,21 @@ void PIOS_Board_Init(void)
189204
UAVObjInitialize();
190205
SETTINGS_INITIALISE_ALL;
191206

207+
HwDiscoveryF4BareSettingsConnectCallback(hwDiscoveryF4BareSettingsUpdatedCb);
208+
HwDiscoveryF4BareSettingsGet(&boardHwSettings);
209+
210+
if (boardHwSettings.BoardType != 0) {
211+
FirmwareIAPObjInitialize();
212+
213+
FirmwareIAPObjData iap;
214+
FirmwareIAPObjGet(&iap);
215+
216+
iap.BoardType = boardHwSettings.BoardType;
217+
iap.BoardRevision = boardHwSettings.BoardRevision;
218+
219+
FirmwareIAPObjSet(&iap);
220+
}
221+
192222
/* Initialize the alarms library */
193223
AlarmsInitialize();
194224

ground/gcs/src/plugins/uavobjects/uavobjects.pro

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ UAVOBJS = \
101101
$${UAVOBJ_XML_DIR}/hwspracingf3evosettings.xml \
102102
$${UAVOBJ_XML_DIR}/hwpikoblxsettings.xml \
103103
$${UAVOBJ_XML_DIR}/hwtinyfishsettings.xml \
104+
$${UAVOBJ_XML_DIR}/hwdiscoveryf4baresettings.xml \
104105
$${UAVOBJ_XML_DIR}/i2cstats.xml \
105106
$${UAVOBJ_XML_DIR}/magsensor.xml \
106107
$${UAVOBJ_XML_DIR}/magstate.xml \
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<xml>
2+
<object name="HwDiscoveryF4BareSettings" singleinstance="true" settings="true" category="System">
3+
<description>DiscoveryF4 Bare hardware configuration</description>
4+
<field name="BoardRevision" units="" type="uint16" elements="1" defaultvalue="0"/>
5+
<field name="BoardType" units="" type="uint8" elements="1" defaultvalue="0"/>
6+
<access gcs="readwrite" flight="readwrite"/>
7+
<telemetrygcs acked="true" updatemode="onchange" period="0"/>
8+
<telemetryflight acked="true" updatemode="onchange" period="0"/>
9+
<logging updatemode="manual" period="0"/>
10+
</object>
11+
</xml>

0 commit comments

Comments
 (0)