mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-21 11:54:15 +01:00
Implemented support for the Unique STM32 CPU serial number in the firmwareIAP object.
This commit is contained in:
parent
f0bfffda09
commit
45e92d654e
@ -56,6 +56,9 @@ const uint32_t iap_time_2_high_end = 5000;
|
|||||||
const uint32_t iap_time_3_low_end = 500;
|
const uint32_t iap_time_3_low_end = 500;
|
||||||
const uint32_t iap_time_3_high_end = 5000;
|
const uint32_t iap_time_3_high_end = 5000;
|
||||||
|
|
||||||
|
// Local macro for reading internal flash memory
|
||||||
|
#define MEM8(addr) (*((volatile uint8_t *)(addr)))
|
||||||
|
|
||||||
// Private types
|
// Private types
|
||||||
|
|
||||||
// Private variables
|
// Private variables
|
||||||
@ -71,6 +74,8 @@ static uint32_t iap_calc_crc(void);
|
|||||||
|
|
||||||
static void read_description(uint8_t *);
|
static void read_description(uint8_t *);
|
||||||
|
|
||||||
|
static void read_cpuserial(uint8_t *);
|
||||||
|
|
||||||
FirmwareIAPObjData data;
|
FirmwareIAPObjData data;
|
||||||
|
|
||||||
static uint32_t get_time(void);
|
static uint32_t get_time(void);
|
||||||
@ -98,6 +103,7 @@ int32_t FirmwareIAPInitialize()
|
|||||||
{
|
{
|
||||||
data.BoardType= BOARD_TYPE;
|
data.BoardType= BOARD_TYPE;
|
||||||
read_description(data.Description);
|
read_description(data.Description);
|
||||||
|
read_cpuserial(data.CPUSerial);
|
||||||
data.BoardRevision= BOARD_REVISION;
|
data.BoardRevision= BOARD_REVISION;
|
||||||
data.ArmReset=0;
|
data.ArmReset=0;
|
||||||
data.crc = 0;
|
data.crc = 0;
|
||||||
@ -133,6 +139,7 @@ static void FirmwareIAPCallback(UAVObjEvent* ev)
|
|||||||
if((data.BoardType==BOARD_TYPE)&&(data.crc != iap_calc_crc()))
|
if((data.BoardType==BOARD_TYPE)&&(data.crc != iap_calc_crc()))
|
||||||
{
|
{
|
||||||
read_description(data.Description);
|
read_description(data.Description);
|
||||||
|
read_cpuserial(data.CPUSerial);
|
||||||
data.BoardRevision=BOARD_REVISION;
|
data.BoardRevision=BOARD_REVISION;
|
||||||
data.crc = iap_calc_crc();
|
data.crc = iap_calc_crc();
|
||||||
FirmwareIAPObjSet( &data );
|
FirmwareIAPObjSet( &data );
|
||||||
@ -248,6 +255,19 @@ static void read_description(uint8_t * array)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read the CPU Serial number.
|
||||||
|
* @param array has to be 12 bytes long.
|
||||||
|
*/
|
||||||
|
static void read_cpuserial(uint8_t * array)
|
||||||
|
{
|
||||||
|
uint8_t x = 0;
|
||||||
|
for (uint8_t i = 0; i < 12; i++) {
|
||||||
|
array[x] = MEM8(0x1ffff7e8 + i);
|
||||||
|
++x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executed by event dispatcher callback to reset INS before resetting OP
|
* Executed by event dispatcher callback to reset INS before resetting OP
|
||||||
*/
|
*/
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
<description>Firmware IAP</description>
|
<description>Firmware IAP</description>
|
||||||
<field name="Command" units="" type="uint16" elements="1"/>
|
<field name="Command" units="" type="uint16" elements="1"/>
|
||||||
<field name="Description" units="" type="uint8" elements="100"/>
|
<field name="Description" units="" type="uint8" elements="100"/>
|
||||||
|
<field name="CPUSerial" units="" type="uint8" elements="12" />
|
||||||
<field name="BoardRevision" units="" type="uint16" elements="1"/>
|
<field name="BoardRevision" units="" type="uint16" elements="1"/>
|
||||||
<field name="BoardType" units="" type="uint8" elements="1"/>
|
<field name="BoardType" units="" type="uint8" elements="1"/>
|
||||||
<field name="ArmReset" units="" type="uint8" elements="1"/>
|
<field name="ArmReset" units="" type="uint8" elements="1"/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user