mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-01-29 14:52:12 +01:00
OP-21/Bootloader - Changes to the IAPObject. Implements MB and AHRS user mode IAPObject. Added user mode reset command to the CLI. To many changes to bootloading system to write here, a Wiki page will have to be writen.
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2238 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
f7c824cdb8
commit
c034a35d2c
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
# Set developer code and compile options
|
# Set developer code and compile options
|
||||||
# Set to YES for debugging
|
# Set to YES for debugging
|
||||||
DEBUG ?= NO
|
DEBUG ?= YES
|
||||||
USE_BOOTLOADER ?= NO
|
USE_BOOTLOADER ?= NO
|
||||||
|
|
||||||
# Set to YES when using Code Sourcery toolchain
|
# Set to YES when using Code Sourcery toolchain
|
||||||
@ -121,6 +121,7 @@ SRC += $(PIOSSTM32F10X)/pios_exti.c
|
|||||||
SRC += $(PIOSCOMMON)/pios_com.c
|
SRC += $(PIOSCOMMON)/pios_com.c
|
||||||
SRC += $(PIOSCOMMON)/pios_hmc5843.c
|
SRC += $(PIOSCOMMON)/pios_hmc5843.c
|
||||||
SRC += $(PIOSCOMMON)/printf-stdarg.c
|
SRC += $(PIOSCOMMON)/printf-stdarg.c
|
||||||
|
SRC += $(PIOSCOMMON)/pios_iap.c
|
||||||
|
|
||||||
## CMSIS for STM32
|
## CMSIS for STM32
|
||||||
SRC += $(CMSISDIR)/core_cm3.c
|
SRC += $(CMSISDIR)/core_cm3.c
|
||||||
|
@ -76,7 +76,12 @@ void altitude_callback(AhrsObjHandle obj);
|
|||||||
void calibration_callback(AhrsObjHandle obj);
|
void calibration_callback(AhrsObjHandle obj);
|
||||||
void gps_callback(AhrsObjHandle obj);
|
void gps_callback(AhrsObjHandle obj);
|
||||||
void settings_callback(AhrsObjHandle obj);
|
void settings_callback(AhrsObjHandle obj);
|
||||||
|
|
||||||
|
/* Bootloader related functions and var*/
|
||||||
|
static uint32_t iap_calc_crc(void);
|
||||||
|
static void read_description(uint8_t *);
|
||||||
void firmwareiapobj_callback(AhrsObjHandle obj);
|
void firmwareiapobj_callback(AhrsObjHandle obj);
|
||||||
|
volatile uint8_t reset_count=0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @addtogroup AHRS_Global_Data AHRS Global Data
|
* @addtogroup AHRS_Global_Data AHRS Global Data
|
||||||
@ -459,6 +464,8 @@ int main()
|
|||||||
/* Communication system */
|
/* Communication system */
|
||||||
PIOS_COM_Init();
|
PIOS_COM_Init();
|
||||||
|
|
||||||
|
/* IAP System Setup */
|
||||||
|
PIOS_IAP_Init();
|
||||||
/* ADC system */
|
/* ADC system */
|
||||||
AHRS_ADC_Config(adc_oversampling);
|
AHRS_ADC_Config(adc_oversampling);
|
||||||
AHRS_ADC_SetCallback(adc_callback);
|
AHRS_ADC_SetCallback(adc_callback);
|
||||||
@ -1015,10 +1022,51 @@ void firmwareiapobj_callback(AhrsObjHandle obj)
|
|||||||
{
|
{
|
||||||
FirmwareIAPObjData firmwareIAPObj;
|
FirmwareIAPObjData firmwareIAPObj;
|
||||||
FirmwareIAPObjGet(&firmwareIAPObj);
|
FirmwareIAPObjGet(&firmwareIAPObj);
|
||||||
|
if(firmwareIAPObj.ArmReset==0)
|
||||||
|
reset_count=0;
|
||||||
|
if(firmwareIAPObj.ArmReset==1)
|
||||||
|
{
|
||||||
|
|
||||||
// float time = timer_counter() / timer_rate();
|
if((firmwareIAPObj.Target==FUNC_ID) || (firmwareIAPObj.Target==0xFF))
|
||||||
|
{
|
||||||
|
|
||||||
|
++reset_count;
|
||||||
|
if(reset_count>2)
|
||||||
|
{
|
||||||
|
PIOS_IAP_SetRequest1();
|
||||||
|
PIOS_IAP_SetRequest2();
|
||||||
|
PIOS_SYS_Reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(firmwareIAPObj.Target==FUNC_ID && firmwareIAPObj.crc!=iap_calc_crc())
|
||||||
|
{
|
||||||
|
read_description(firmwareIAPObj.Description);
|
||||||
|
firmwareIAPObj.crc=iap_calc_crc();
|
||||||
|
firmwareIAPObj.HWVersion=HW_VERSION;
|
||||||
|
FirmwareIAPObjSet(&firmwareIAPObj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint32_t iap_calc_crc(void)
|
||||||
|
{
|
||||||
|
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
|
||||||
|
CRC_ResetDR();
|
||||||
|
CRC_CalcBlockCRC((uint32_t *) START_OF_USER_CODE, (SIZE_OF_CODE) >> 2);
|
||||||
|
return CRC_GetCRC();
|
||||||
|
}
|
||||||
|
static uint8_t *FLASH_If_Read(uint32_t SectorAddress)
|
||||||
|
{
|
||||||
|
return (uint8_t *) (SectorAddress);
|
||||||
|
}
|
||||||
|
static void read_description(uint8_t * array)
|
||||||
|
{
|
||||||
|
uint8_t x = 0;
|
||||||
|
for (uint32_t i = START_OF_USER_CODE + SIZE_OF_CODE; i < START_OF_USER_CODE + SIZE_OF_CODE + SIZE_OF_DESCRIPTION; ++i) {
|
||||||
|
array[x] = *FLASH_If_Read(i);
|
||||||
|
++x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -108,6 +108,7 @@ SRC += $(PIOSSTM32F10X)/pios_spi.c
|
|||||||
SRC += $(PIOSCOMMON)/pios_opahrs_proto.c
|
SRC += $(PIOSCOMMON)/pios_opahrs_proto.c
|
||||||
SRC += $(PIOSCOMMON)/printf-stdarg.c
|
SRC += $(PIOSCOMMON)/printf-stdarg.c
|
||||||
SRC += $(PIOSCOMMON)/pios_bl_helper.c
|
SRC += $(PIOSCOMMON)/pios_bl_helper.c
|
||||||
|
SRC += $(PIOSCOMMON)/pios_iap.c
|
||||||
|
|
||||||
## CMSIS for STM32
|
## CMSIS for STM32
|
||||||
SRC += $(CMSISDIR)/core_cm3.c
|
SRC += $(CMSISDIR)/core_cm3.c
|
||||||
|
@ -82,15 +82,22 @@ int main() {
|
|||||||
// PIOS_DELAY_WaitmS(1000);
|
// PIOS_DELAY_WaitmS(1000);
|
||||||
// }
|
// }
|
||||||
//GO_dfu = TRUE;
|
//GO_dfu = TRUE;
|
||||||
GO_dfu = GO_dfu;// OR with app boot request
|
PIOS_IAP_Init();
|
||||||
|
GO_dfu = GO_dfu | PIOS_IAP_CheckRequest();// OR with app boot request
|
||||||
if (GO_dfu == FALSE) {
|
if (GO_dfu == FALSE) {
|
||||||
jump_to_app();
|
jump_to_app();
|
||||||
}
|
}
|
||||||
|
if(PIOS_IAP_CheckRequest())
|
||||||
|
{
|
||||||
|
PIOS_DELAY_WaitmS(1000);
|
||||||
|
PIOS_IAP_ClearRequest();
|
||||||
|
}
|
||||||
/* SPI link to master */
|
/* SPI link to master */
|
||||||
PIOS_SPI_Init();
|
PIOS_SPI_Init();
|
||||||
lfsm_init();
|
lfsm_init();
|
||||||
boot_status = idle;
|
boot_status = idle;
|
||||||
Fw_crc = crc_memory_calc();
|
Fw_crc = crc_memory_calc();
|
||||||
|
PIOS_LED_On(LED1);
|
||||||
while (1) {
|
while (1) {
|
||||||
process_spi_request();
|
process_spi_request();
|
||||||
}
|
}
|
||||||
|
@ -182,7 +182,7 @@ SRC += $(STMSPDSRCDIR)/stm32f10x_rtc.c
|
|||||||
SRC += $(STMSPDSRCDIR)/stm32f10x_spi.c
|
SRC += $(STMSPDSRCDIR)/stm32f10x_spi.c
|
||||||
SRC += $(STMSPDSRCDIR)/stm32f10x_tim.c
|
SRC += $(STMSPDSRCDIR)/stm32f10x_tim.c
|
||||||
SRC += $(STMSPDSRCDIR)/stm32f10x_usart.c
|
SRC += $(STMSPDSRCDIR)/stm32f10x_usart.c
|
||||||
SRC += $(STMSPDSRCDIR)/stm32f10x_iwdg.c
|
#SRC += $(STMSPDSRCDIR)/stm32f10x_iwdg.c
|
||||||
SRC += $(STMSPDSRCDIR)/stm32f10x_dbgmcu.c
|
SRC += $(STMSPDSRCDIR)/stm32f10x_dbgmcu.c
|
||||||
SRC += $(STMSPDSRCDIR)/misc.c
|
SRC += $(STMSPDSRCDIR)/misc.c
|
||||||
|
|
||||||
|
@ -109,11 +109,27 @@ int main() {
|
|||||||
USB_connected = TRUE;
|
USB_connected = TRUE;
|
||||||
|
|
||||||
PIOS_IAP_Init();
|
PIOS_IAP_Init();
|
||||||
|
|
||||||
if (PIOS_IAP_CheckRequest() == TRUE) {
|
if (PIOS_IAP_CheckRequest() == TRUE) {
|
||||||
|
PIOS_Board_Init();
|
||||||
|
PIOS_DELAY_WaitmS(1000);
|
||||||
User_DFU_request = TRUE;
|
User_DFU_request = TRUE;
|
||||||
PIOS_IAP_ClearRequest();
|
PIOS_IAP_ClearRequest();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PIOS_Board_Init();
|
||||||
|
for(uint8_t x=0;x<10;++x)
|
||||||
|
{
|
||||||
|
PIOS_LED_Toggle(LED1);
|
||||||
|
PIOS_LED_Toggle(LED2);
|
||||||
|
PIOS_DELAY_WaitmS(1000);
|
||||||
|
}
|
||||||
|
PIOS_IAP_SetRequest1();
|
||||||
|
PIOS_IAP_SetRequest2();
|
||||||
|
PIOS_SYS_Reset();
|
||||||
|
}*/
|
||||||
GO_dfu = (USB_connected == TRUE) || (User_DFU_request == TRUE);
|
GO_dfu = (USB_connected == TRUE) || (User_DFU_request == TRUE);
|
||||||
|
|
||||||
if (GO_dfu == TRUE) {
|
if (GO_dfu == TRUE) {
|
||||||
|
@ -573,6 +573,7 @@ uint32_t CalcFirmCRC() {
|
|||||||
void sendData(uint8_t * buf,uint16_t size)
|
void sendData(uint8_t * buf,uint16_t size)
|
||||||
{
|
{
|
||||||
if (ProgPort == Usb) {
|
if (ProgPort == Usb) {
|
||||||
|
|
||||||
PIOS_COM_SendBuffer(PIOS_COM_TELEM_USB, buf, size);//FIX+1
|
PIOS_COM_SendBuffer(PIOS_COM_TELEM_USB, buf, size);//FIX+1
|
||||||
} else if (ProgPort == Serial) {
|
} else if (ProgPort == Serial) {
|
||||||
ssp_SendData(&ssp_port, buf, size);
|
ssp_SendData(&ssp_port, buf, size);
|
||||||
|
@ -66,9 +66,24 @@ static void FirmwareIAPCallback(UAVObjEvent* ev);
|
|||||||
|
|
||||||
static uint32_t iap_calc_crc(void);
|
static uint32_t iap_calc_crc(void);
|
||||||
|
|
||||||
|
static void read_description(uint8_t *);
|
||||||
|
|
||||||
FirmwareIAPObjData data;
|
FirmwareIAPObjData data;
|
||||||
|
|
||||||
static uint32_t get_time(void);
|
static uint32_t get_time(void);
|
||||||
|
|
||||||
|
// Private constants
|
||||||
|
#define STACK_SIZE configMINIMAL_STACK_SIZE
|
||||||
|
#define TASK_PRIORITY (tskIDLE_PRIORITY+1)
|
||||||
|
|
||||||
|
// Private types
|
||||||
|
|
||||||
|
// Private variables
|
||||||
|
static xTaskHandle taskHandle;
|
||||||
|
|
||||||
|
// Private functions
|
||||||
|
static void resetTask(void *parameters);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialise the module, called on startup.
|
* Initialise the module, called on startup.
|
||||||
* \returns 0 on success or -1 if initialisation failed
|
* \returns 0 on success or -1 if initialisation failed
|
||||||
@ -85,11 +100,11 @@ static uint32_t get_time(void);
|
|||||||
|
|
||||||
int32_t FirmwareIAPInitialize()
|
int32_t FirmwareIAPInitialize()
|
||||||
{
|
{
|
||||||
data.Version[0] = version[0];
|
data.Target=FUNC_ID;
|
||||||
data.Version[1] = version[1];
|
read_description(data.Description);
|
||||||
data.Version[2] = version[2];
|
data.HWVersion=HW_VERSION;
|
||||||
data.SVN = SVN;
|
data.ArmReset=0;
|
||||||
data.crc = iap_calc_crc();
|
data.crc = 0;
|
||||||
FirmwareIAPObjSet( &data );
|
FirmwareIAPObjSet( &data );
|
||||||
FirmwareIAPObjConnectCallback( &FirmwareIAPCallback );
|
FirmwareIAPObjConnectCallback( &FirmwareIAPCallback );
|
||||||
return 0;
|
return 0;
|
||||||
@ -116,7 +131,18 @@ static void FirmwareIAPCallback(UAVObjEvent* ev)
|
|||||||
this_time = get_time();
|
this_time = get_time();
|
||||||
delta = this_time - last_time;
|
delta = this_time - last_time;
|
||||||
last_time = this_time;
|
last_time = this_time;
|
||||||
|
if((data.Target==FUNC_ID)&&(data.crc != iap_calc_crc()))
|
||||||
|
{
|
||||||
|
read_description(data.Description);
|
||||||
|
data.HWVersion=HW_VERSION;
|
||||||
|
data.crc = iap_calc_crc();
|
||||||
|
FirmwareIAPObjSet( &data );
|
||||||
|
}
|
||||||
|
if((data.ArmReset==1)&&(taskHandle==0))
|
||||||
|
{
|
||||||
|
data.ArmReset=0;
|
||||||
|
FirmwareIAPObjSet( &data );
|
||||||
|
}
|
||||||
switch(iap_state) {
|
switch(iap_state) {
|
||||||
case IAP_STATE_READY:
|
case IAP_STATE_READY:
|
||||||
if( data.Command == IAP_CMD_STEP_1 ) {
|
if( data.Command == IAP_CMD_STEP_1 ) {
|
||||||
@ -140,8 +166,7 @@ static void FirmwareIAPCallback(UAVObjEvent* ev)
|
|||||||
// we've met the time requirements.
|
// we've met the time requirements.
|
||||||
PIOS_IAP_SetRequest1();
|
PIOS_IAP_SetRequest1();
|
||||||
PIOS_IAP_SetRequest2();
|
PIOS_IAP_SetRequest2();
|
||||||
// goodbye cruel world...
|
xTaskCreate(resetTask, (signed char *)"Reset", STACK_SIZE, NULL, TASK_PRIORITY, &taskHandle);
|
||||||
PIOS_SYS_Reset();
|
|
||||||
} else {
|
} else {
|
||||||
iap_state = IAP_STATE_READY;
|
iap_state = IAP_STATE_READY;
|
||||||
}
|
}
|
||||||
@ -200,4 +225,36 @@ static uint32_t iap_calc_crc(void)
|
|||||||
CRC_CalcBlockCRC((uint32_t *) START_OF_USER_CODE, (SIZE_OF_CODE) >> 2);
|
CRC_CalcBlockCRC((uint32_t *) START_OF_USER_CODE, (SIZE_OF_CODE) >> 2);
|
||||||
return CRC_GetCRC();
|
return CRC_GetCRC();
|
||||||
}
|
}
|
||||||
|
static uint8_t *FLASH_If_Read(uint32_t SectorAddress)
|
||||||
|
{
|
||||||
|
return (uint8_t *) (SectorAddress);
|
||||||
|
}
|
||||||
|
static void read_description(uint8_t * array)
|
||||||
|
{
|
||||||
|
uint8_t x = 0;
|
||||||
|
for (uint32_t i = START_OF_USER_CODE + SIZE_OF_CODE; i < START_OF_USER_CODE + SIZE_OF_CODE + SIZE_OF_DESCRIPTION; ++i) {
|
||||||
|
array[x] = *FLASH_If_Read(i);
|
||||||
|
++x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void resetTask(void *parameters)
|
||||||
|
{
|
||||||
|
|
||||||
|
portTickType lastSysTime;
|
||||||
|
uint8_t count=0;
|
||||||
|
// Main task loop
|
||||||
|
lastSysTime = xTaskGetTickCount();
|
||||||
|
while (1) {
|
||||||
|
data.Target=0xFF;
|
||||||
|
data.ArmReset=1;
|
||||||
|
data.crc=count;
|
||||||
|
FirmwareIAPObjSet(&data);
|
||||||
|
vTaskDelayUntil(&lastSysTime, 500 / portTICK_RATE_MS);
|
||||||
|
++count;
|
||||||
|
if(count>3)
|
||||||
|
{
|
||||||
|
PIOS_SYS_Reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
#define FIRMWAREIAPOBJ_H
|
#define FIRMWAREIAPOBJ_H
|
||||||
|
|
||||||
// Object constants
|
// Object constants
|
||||||
#define FIRMWAREIAPOBJ_OBJID 1075803696U
|
#define FIRMWAREIAPOBJ_OBJID 879185696U
|
||||||
#define FIRMWAREIAPOBJ_NAME "FirmwareIAPObj"
|
#define FIRMWAREIAPOBJ_NAME "FirmwareIAPObj"
|
||||||
#define FIRMWAREIAPOBJ_METANAME "FirmwareIAPObjMeta"
|
#define FIRMWAREIAPOBJ_METANAME "FirmwareIAPObjMeta"
|
||||||
#define FIRMWAREIAPOBJ_ISSINGLEINST 1
|
#define FIRMWAREIAPOBJ_ISSINGLEINST 1
|
||||||
@ -72,20 +72,22 @@
|
|||||||
// Object data
|
// Object data
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t Command;
|
uint16_t Command;
|
||||||
uint32_t Port;
|
uint8_t Description[100];
|
||||||
uint8_t Version[3];
|
uint8_t HWVersion;
|
||||||
uint16_t SVN;
|
uint8_t Target;
|
||||||
|
uint8_t ArmReset;
|
||||||
uint32_t crc;
|
uint32_t crc;
|
||||||
|
|
||||||
} __attribute__((packed)) FirmwareIAPObjData;
|
} __attribute__((packed)) FirmwareIAPObjData;
|
||||||
|
|
||||||
// Field information
|
// Field information
|
||||||
// Field Command information
|
// Field Command information
|
||||||
// Field Port information
|
// Field Description information
|
||||||
// Field Version information
|
/* Number of elements for field Description */
|
||||||
/* Number of elements for field Version */
|
#define FIRMWAREIAPOBJ_DESCRIPTION_NUMELEM 100
|
||||||
#define FIRMWAREIAPOBJ_VERSION_NUMELEM 3
|
// Field HWVersion information
|
||||||
// Field SVN information
|
// Field Target information
|
||||||
|
// Field ArmReset information
|
||||||
// Field crc information
|
// Field crc information
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,6 +64,7 @@ TIM8 | | | |
|
|||||||
//------------------------
|
//------------------------
|
||||||
// BOOTLOADER_SETTINGS
|
// BOOTLOADER_SETTINGS
|
||||||
//------------------------
|
//------------------------
|
||||||
|
#define FUNC_ID 2
|
||||||
#define HW_VERSION 69
|
#define HW_VERSION 69
|
||||||
#define BOOTLOADER_VERSION 0
|
#define BOOTLOADER_VERSION 0
|
||||||
#define MEM_SIZE 0x20000 //128K
|
#define MEM_SIZE 0x20000 //128K
|
||||||
|
@ -69,6 +69,7 @@ TIM8 | Servo 5 | Servo 6 | Servo 7 | Servo 8
|
|||||||
// BOOTLOADER_SETTINGS
|
// BOOTLOADER_SETTINGS
|
||||||
//------------------------
|
//------------------------
|
||||||
|
|
||||||
|
#define FUNC_ID 1
|
||||||
#define HW_VERSION 01
|
#define HW_VERSION 01
|
||||||
#define BOOTLOADER_VERSION 0
|
#define BOOTLOADER_VERSION 0
|
||||||
#define MEM_SIZE 524288 //512K
|
#define MEM_SIZE 524288 //512K
|
||||||
|
@ -69,6 +69,7 @@ void PIOS_IAP_Init( void )
|
|||||||
|
|
||||||
/* Clear Tamper pin Event(TE) pending flag */
|
/* Clear Tamper pin Event(TE) pending flag */
|
||||||
BKP_ClearFlag();
|
BKP_ClearFlag();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -13,8 +13,6 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
// OP_DFU dfu(false);
|
|
||||||
// dfu.test();
|
|
||||||
QCoreApplication a(argc, argv);
|
QCoreApplication a(argc, argv);
|
||||||
// argc=4;
|
// argc=4;
|
||||||
// argv[1]="-ls";
|
// argv[1]="-ls";
|
||||||
@ -25,6 +23,7 @@ int main(int argc, char *argv[])
|
|||||||
bool use_serial=false;
|
bool use_serial=false;
|
||||||
bool verify;
|
bool verify;
|
||||||
bool debug=false;
|
bool debug=false;
|
||||||
|
bool umodereset=false;
|
||||||
OP_DFU::Actions action;
|
OP_DFU::Actions action;
|
||||||
QString file;
|
QString file;
|
||||||
QString serialport;
|
QString serialport;
|
||||||
@ -37,6 +36,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
if(args.contains("-debug"))
|
if(args.contains("-debug"))
|
||||||
debug=true;
|
debug=true;
|
||||||
|
if(args.contains("-ur"))
|
||||||
|
umodereset=true;
|
||||||
if(args.contains("-?")||(!PRIVATE && argc==1))
|
if(args.contains("-?")||(!PRIVATE && argc==1))
|
||||||
{
|
{
|
||||||
cout<<"_________________________________________________________________________\n";
|
cout<<"_________________________________________________________________________\n";
|
||||||
@ -55,7 +56,8 @@ int main(int argc, char *argv[])
|
|||||||
cout<<"| -r : resets the device |\n";
|
cout<<"| -r : resets the device |\n";
|
||||||
cout<<"| -j : exits bootloader and jumps to user FW |\n";
|
cout<<"| -j : exits bootloader and jumps to user FW |\n";
|
||||||
cout<<"| -debug : prints debug information |\n";
|
cout<<"| -debug : prints debug information |\n";
|
||||||
cout<<"| -t <port> : uses serial port* |\n";
|
cout<<"| -t <port> : uses serial port(requires:-ur) |\n";
|
||||||
|
cout<<"| -ur <port> : user mode reset* |\n";
|
||||||
cout<<"| |\n";
|
cout<<"| |\n";
|
||||||
cout<<"| examples: |\n";
|
cout<<"| examples: |\n";
|
||||||
cout<<"| |\n";
|
cout<<"| |\n";
|
||||||
@ -203,7 +205,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////ACTIONS START///////////////////////////////////////////////////
|
///////////////////////////////////ACTIONS START///////////////////////////////////////////////////
|
||||||
OP_DFU dfu(debug,use_serial,serialport);
|
OP_DFU dfu(debug,use_serial,serialport,umodereset);
|
||||||
if(!dfu.ready())
|
if(!dfu.ready())
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include <qwaitcondition.h>
|
#include <qwaitcondition.h>
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
|
|
||||||
OP_DFU::OP_DFU(bool _debug,bool _use_serial,QString portname): debug(_debug),use_serial(_use_serial),mready(true)
|
OP_DFU::OP_DFU(bool _debug,bool _use_serial,QString portname,bool umodereset): debug(_debug),use_serial(_use_serial),mready(true)
|
||||||
{
|
{
|
||||||
if(use_serial)
|
if(use_serial)
|
||||||
{
|
{
|
||||||
@ -30,6 +30,9 @@ OP_DFU::OP_DFU(bool _debug,bool _use_serial,QString portname): debug(_debug),use
|
|||||||
mready=false;
|
mready=false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(umodereset)
|
||||||
|
sendReset();
|
||||||
|
delay::msleep(5000);
|
||||||
serialhandle=new qsspt(info,debug);
|
serialhandle=new qsspt(info,debug);
|
||||||
|
|
||||||
while(serialhandle->ssp_Synchronise()==false)
|
while(serialhandle->ssp_Synchronise()==false)
|
||||||
@ -64,19 +67,61 @@ OP_DFU::OP_DFU(bool _debug,bool _use_serial,QString portname): debug(_debug),use
|
|||||||
}
|
}
|
||||||
if(debug)
|
if(debug)
|
||||||
qDebug() << numDevices << " device(s) opened";
|
qDebug() << numDevices << " device(s) opened";
|
||||||
//sendReset();
|
if(umodereset)
|
||||||
|
{
|
||||||
|
sendReset();
|
||||||
|
|
||||||
|
qDebug()<<"before delay";
|
||||||
|
delay::msleep(5000);
|
||||||
|
qDebug()<<"after delay";
|
||||||
|
if(hidHandle.open(1,0x20a0,0x4117,0,0)==0)
|
||||||
|
mready=false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void OP_DFU::sendReset(void)
|
void OP_DFU::sendReset(void)
|
||||||
{
|
{
|
||||||
char b[64]={0x02,0x24,0x3C,0x20,0x17,0x00,0x30,0x76,0x1F,0x40,0x62,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x40,0x2E,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
qDebug()<<"Requesting user mode reset";
|
||||||
sendData(b,64);
|
char aa[255]= {0x02,0x3E,0x3C,0x20,0x75,0x00,0x20,0x4F,0x67,0x34,0x62,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//63
|
||||||
|
char ba[255]= {0x02,0x3E,0x3C,0x20,0x75,0x00,0x20,0x4F,0x67,0x34,0xB9,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
||||||
|
char ca[255]= {0x02,0x3E,0x3C,0x20,0x75,0x00,0x20,0x4F,0x67,0x34,0x10,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
||||||
|
char bb[255]={0x02,0x3D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x8D,0x19,0x00,0x00,0x13};
|
||||||
|
char ab[255]={0x02,0x3D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x1B,0x19,0x00,0x00,0x76};
|
||||||
|
char cb[255]={0x02,0x3D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x78,0x1C,0x00,0x00,0x25};
|
||||||
|
//125
|
||||||
|
if(!use_serial)
|
||||||
|
{
|
||||||
|
hidHandle.send(0,aa, 64, 5000);
|
||||||
|
hidHandle.send(0,ab, 64, 5000);
|
||||||
delay::msleep(600);
|
delay::msleep(600);
|
||||||
char bb[64]={0x02,0x24,0x3C,0x20,0x17,0x00,0x30,0x76,0x1F,0x40,0xB9,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0xE8,0x30,0x00,0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
hidHandle.send(0,ba, 64, 5000);
|
||||||
sendData(bb,64);
|
hidHandle.send(0,bb, 64, 5000);
|
||||||
delay::msleep(600);
|
delay::msleep(600);
|
||||||
char bbb[64]={0x02,0x24,0x3C,0x20,0x17,0x00,0x30,0x76,0x1F,0x40,0x10,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF9,0x61,0x34,0x00,0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
hidHandle.send(0,ca, 64, 5000);
|
||||||
sendData(bbb,64);
|
hidHandle.send(0,cb, 64, 5000);
|
||||||
|
delay::msleep(100);
|
||||||
|
hidHandle.close(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char a[255];
|
||||||
|
char b[255];
|
||||||
|
char c[255];
|
||||||
|
memcpy (a,aa+2,62);
|
||||||
|
memcpy (a+62,ab+2,60);
|
||||||
|
memcpy (b,ba+2,62);
|
||||||
|
memcpy (b+62,bb+2,60);
|
||||||
|
memcpy (c,ca+2,62);
|
||||||
|
memcpy (c+62,cb+2,60);
|
||||||
|
for(int x=0;x<123;++x)
|
||||||
|
info->pfSerialWrite(a[x]);
|
||||||
|
delay::msleep(600);
|
||||||
|
for(int x=0;x<123;++x)
|
||||||
|
info->pfSerialWrite(b[x]);
|
||||||
|
delay::msleep(600);
|
||||||
|
for(int x=0;x<123;++x)
|
||||||
|
info->pfSerialWrite(c[x]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OP_DFU::SaveByteArrayToFile(QString const & sfile, const QByteArray &array)
|
bool OP_DFU::SaveByteArrayToFile(QString const & sfile, const QByteArray &array)
|
||||||
|
@ -123,7 +123,7 @@ public:
|
|||||||
bool SaveByteArrayToFile(QString const & file,QByteArray const &array);
|
bool SaveByteArrayToFile(QString const & file,QByteArray const &array);
|
||||||
void CopyWords(char * source, char* destination, int count);
|
void CopyWords(char * source, char* destination, int count);
|
||||||
// QByteArray DownloadData(int devNumber,int numberOfPackets);
|
// QByteArray DownloadData(int devNumber,int numberOfPackets);
|
||||||
OP_DFU(bool debug,bool use_serial,QString port);
|
OP_DFU(bool debug,bool use_serial,QString port,bool umodereset);
|
||||||
void sendReset(void);
|
void sendReset(void);
|
||||||
bool findDevices();
|
bool findDevices();
|
||||||
QList<device> devices;
|
QList<device> devices;
|
||||||
|
@ -45,17 +45,117 @@ FirmwareIAPObj::FirmwareIAPObj(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTINGS,
|
|||||||
QStringList CommandElemNames;
|
QStringList CommandElemNames;
|
||||||
CommandElemNames.append("0");
|
CommandElemNames.append("0");
|
||||||
fields.append( new UAVObjectField(QString("Command"), QString("na"), UAVObjectField::UINT16, CommandElemNames, QStringList()) );
|
fields.append( new UAVObjectField(QString("Command"), QString("na"), UAVObjectField::UINT16, CommandElemNames, QStringList()) );
|
||||||
QStringList PortElemNames;
|
QStringList DescriptionElemNames;
|
||||||
PortElemNames.append("0");
|
DescriptionElemNames.append("0");
|
||||||
fields.append( new UAVObjectField(QString("Port"), QString("na"), UAVObjectField::UINT32, PortElemNames, QStringList()) );
|
DescriptionElemNames.append("1");
|
||||||
QStringList VersionElemNames;
|
DescriptionElemNames.append("2");
|
||||||
VersionElemNames.append("0");
|
DescriptionElemNames.append("3");
|
||||||
VersionElemNames.append("1");
|
DescriptionElemNames.append("4");
|
||||||
VersionElemNames.append("2");
|
DescriptionElemNames.append("5");
|
||||||
fields.append( new UAVObjectField(QString("Version"), QString("na"), UAVObjectField::UINT8, VersionElemNames, QStringList()) );
|
DescriptionElemNames.append("6");
|
||||||
QStringList SVNElemNames;
|
DescriptionElemNames.append("7");
|
||||||
SVNElemNames.append("0");
|
DescriptionElemNames.append("8");
|
||||||
fields.append( new UAVObjectField(QString("SVN"), QString("na"), UAVObjectField::UINT16, SVNElemNames, QStringList()) );
|
DescriptionElemNames.append("9");
|
||||||
|
DescriptionElemNames.append("10");
|
||||||
|
DescriptionElemNames.append("11");
|
||||||
|
DescriptionElemNames.append("12");
|
||||||
|
DescriptionElemNames.append("13");
|
||||||
|
DescriptionElemNames.append("14");
|
||||||
|
DescriptionElemNames.append("15");
|
||||||
|
DescriptionElemNames.append("16");
|
||||||
|
DescriptionElemNames.append("17");
|
||||||
|
DescriptionElemNames.append("18");
|
||||||
|
DescriptionElemNames.append("19");
|
||||||
|
DescriptionElemNames.append("20");
|
||||||
|
DescriptionElemNames.append("21");
|
||||||
|
DescriptionElemNames.append("22");
|
||||||
|
DescriptionElemNames.append("23");
|
||||||
|
DescriptionElemNames.append("24");
|
||||||
|
DescriptionElemNames.append("25");
|
||||||
|
DescriptionElemNames.append("26");
|
||||||
|
DescriptionElemNames.append("27");
|
||||||
|
DescriptionElemNames.append("28");
|
||||||
|
DescriptionElemNames.append("29");
|
||||||
|
DescriptionElemNames.append("30");
|
||||||
|
DescriptionElemNames.append("31");
|
||||||
|
DescriptionElemNames.append("32");
|
||||||
|
DescriptionElemNames.append("33");
|
||||||
|
DescriptionElemNames.append("34");
|
||||||
|
DescriptionElemNames.append("35");
|
||||||
|
DescriptionElemNames.append("36");
|
||||||
|
DescriptionElemNames.append("37");
|
||||||
|
DescriptionElemNames.append("38");
|
||||||
|
DescriptionElemNames.append("39");
|
||||||
|
DescriptionElemNames.append("40");
|
||||||
|
DescriptionElemNames.append("41");
|
||||||
|
DescriptionElemNames.append("42");
|
||||||
|
DescriptionElemNames.append("43");
|
||||||
|
DescriptionElemNames.append("44");
|
||||||
|
DescriptionElemNames.append("45");
|
||||||
|
DescriptionElemNames.append("46");
|
||||||
|
DescriptionElemNames.append("47");
|
||||||
|
DescriptionElemNames.append("48");
|
||||||
|
DescriptionElemNames.append("49");
|
||||||
|
DescriptionElemNames.append("50");
|
||||||
|
DescriptionElemNames.append("51");
|
||||||
|
DescriptionElemNames.append("52");
|
||||||
|
DescriptionElemNames.append("53");
|
||||||
|
DescriptionElemNames.append("54");
|
||||||
|
DescriptionElemNames.append("55");
|
||||||
|
DescriptionElemNames.append("56");
|
||||||
|
DescriptionElemNames.append("57");
|
||||||
|
DescriptionElemNames.append("58");
|
||||||
|
DescriptionElemNames.append("59");
|
||||||
|
DescriptionElemNames.append("60");
|
||||||
|
DescriptionElemNames.append("61");
|
||||||
|
DescriptionElemNames.append("62");
|
||||||
|
DescriptionElemNames.append("63");
|
||||||
|
DescriptionElemNames.append("64");
|
||||||
|
DescriptionElemNames.append("65");
|
||||||
|
DescriptionElemNames.append("66");
|
||||||
|
DescriptionElemNames.append("67");
|
||||||
|
DescriptionElemNames.append("68");
|
||||||
|
DescriptionElemNames.append("69");
|
||||||
|
DescriptionElemNames.append("70");
|
||||||
|
DescriptionElemNames.append("71");
|
||||||
|
DescriptionElemNames.append("72");
|
||||||
|
DescriptionElemNames.append("73");
|
||||||
|
DescriptionElemNames.append("74");
|
||||||
|
DescriptionElemNames.append("75");
|
||||||
|
DescriptionElemNames.append("76");
|
||||||
|
DescriptionElemNames.append("77");
|
||||||
|
DescriptionElemNames.append("78");
|
||||||
|
DescriptionElemNames.append("79");
|
||||||
|
DescriptionElemNames.append("80");
|
||||||
|
DescriptionElemNames.append("81");
|
||||||
|
DescriptionElemNames.append("82");
|
||||||
|
DescriptionElemNames.append("83");
|
||||||
|
DescriptionElemNames.append("84");
|
||||||
|
DescriptionElemNames.append("85");
|
||||||
|
DescriptionElemNames.append("86");
|
||||||
|
DescriptionElemNames.append("87");
|
||||||
|
DescriptionElemNames.append("88");
|
||||||
|
DescriptionElemNames.append("89");
|
||||||
|
DescriptionElemNames.append("90");
|
||||||
|
DescriptionElemNames.append("91");
|
||||||
|
DescriptionElemNames.append("92");
|
||||||
|
DescriptionElemNames.append("93");
|
||||||
|
DescriptionElemNames.append("94");
|
||||||
|
DescriptionElemNames.append("95");
|
||||||
|
DescriptionElemNames.append("96");
|
||||||
|
DescriptionElemNames.append("97");
|
||||||
|
DescriptionElemNames.append("98");
|
||||||
|
DescriptionElemNames.append("99");
|
||||||
|
fields.append( new UAVObjectField(QString("Description"), QString("na"), UAVObjectField::UINT8, DescriptionElemNames, QStringList()) );
|
||||||
|
QStringList HWVersionElemNames;
|
||||||
|
HWVersionElemNames.append("0");
|
||||||
|
fields.append( new UAVObjectField(QString("HWVersion"), QString("na"), UAVObjectField::UINT8, HWVersionElemNames, QStringList()) );
|
||||||
|
QStringList TargetElemNames;
|
||||||
|
TargetElemNames.append("0");
|
||||||
|
fields.append( new UAVObjectField(QString("Target"), QString("na"), UAVObjectField::UINT8, TargetElemNames, QStringList()) );
|
||||||
|
QStringList ArmResetElemNames;
|
||||||
|
ArmResetElemNames.append("0");
|
||||||
|
fields.append( new UAVObjectField(QString("ArmReset"), QString("na"), UAVObjectField::UINT8, ArmResetElemNames, QStringList()) );
|
||||||
QStringList crcElemNames;
|
QStringList crcElemNames;
|
||||||
crcElemNames.append("0");
|
crcElemNames.append("0");
|
||||||
fields.append( new UAVObjectField(QString("crc"), QString("na"), UAVObjectField::UINT32, crcElemNames, QStringList()) );
|
fields.append( new UAVObjectField(QString("crc"), QString("na"), UAVObjectField::UINT32, crcElemNames, QStringList()) );
|
||||||
|
@ -44,25 +44,27 @@ public:
|
|||||||
// Field structure
|
// Field structure
|
||||||
typedef struct {
|
typedef struct {
|
||||||
quint16 Command;
|
quint16 Command;
|
||||||
quint32 Port;
|
quint8 Description[100];
|
||||||
quint8 Version[3];
|
quint8 HWVersion;
|
||||||
quint16 SVN;
|
quint8 Target;
|
||||||
|
quint8 ArmReset;
|
||||||
quint32 crc;
|
quint32 crc;
|
||||||
|
|
||||||
} __attribute__((packed)) DataFields;
|
} __attribute__((packed)) DataFields;
|
||||||
|
|
||||||
// Field information
|
// Field information
|
||||||
// Field Command information
|
// Field Command information
|
||||||
// Field Port information
|
// Field Description information
|
||||||
// Field Version information
|
/* Number of elements for field Description */
|
||||||
/* Number of elements for field Version */
|
static const quint32 DESCRIPTION_NUMELEM = 100;
|
||||||
static const quint32 VERSION_NUMELEM = 3;
|
// Field HWVersion information
|
||||||
// Field SVN information
|
// Field Target information
|
||||||
|
// Field ArmReset information
|
||||||
// Field crc information
|
// Field crc information
|
||||||
|
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
static const quint32 OBJID = 1075803696U;
|
static const quint32 OBJID = 879185696U;
|
||||||
static const QString NAME;
|
static const QString NAME;
|
||||||
static const bool ISSINGLEINST = 1;
|
static const bool ISSINGLEINST = 1;
|
||||||
static const bool ISSETTINGS = 0;
|
static const bool ISSETTINGS = 0;
|
||||||
|
@ -48,8 +48,117 @@ _fields = [ \
|
|||||||
}
|
}
|
||||||
),
|
),
|
||||||
uavobject.UAVObjectField(
|
uavobject.UAVObjectField(
|
||||||
'Port',
|
'Description',
|
||||||
'I',
|
'B',
|
||||||
|
100,
|
||||||
|
[
|
||||||
|
'0',
|
||||||
|
'1',
|
||||||
|
'2',
|
||||||
|
'3',
|
||||||
|
'4',
|
||||||
|
'5',
|
||||||
|
'6',
|
||||||
|
'7',
|
||||||
|
'8',
|
||||||
|
'9',
|
||||||
|
'10',
|
||||||
|
'11',
|
||||||
|
'12',
|
||||||
|
'13',
|
||||||
|
'14',
|
||||||
|
'15',
|
||||||
|
'16',
|
||||||
|
'17',
|
||||||
|
'18',
|
||||||
|
'19',
|
||||||
|
'20',
|
||||||
|
'21',
|
||||||
|
'22',
|
||||||
|
'23',
|
||||||
|
'24',
|
||||||
|
'25',
|
||||||
|
'26',
|
||||||
|
'27',
|
||||||
|
'28',
|
||||||
|
'29',
|
||||||
|
'30',
|
||||||
|
'31',
|
||||||
|
'32',
|
||||||
|
'33',
|
||||||
|
'34',
|
||||||
|
'35',
|
||||||
|
'36',
|
||||||
|
'37',
|
||||||
|
'38',
|
||||||
|
'39',
|
||||||
|
'40',
|
||||||
|
'41',
|
||||||
|
'42',
|
||||||
|
'43',
|
||||||
|
'44',
|
||||||
|
'45',
|
||||||
|
'46',
|
||||||
|
'47',
|
||||||
|
'48',
|
||||||
|
'49',
|
||||||
|
'50',
|
||||||
|
'51',
|
||||||
|
'52',
|
||||||
|
'53',
|
||||||
|
'54',
|
||||||
|
'55',
|
||||||
|
'56',
|
||||||
|
'57',
|
||||||
|
'58',
|
||||||
|
'59',
|
||||||
|
'60',
|
||||||
|
'61',
|
||||||
|
'62',
|
||||||
|
'63',
|
||||||
|
'64',
|
||||||
|
'65',
|
||||||
|
'66',
|
||||||
|
'67',
|
||||||
|
'68',
|
||||||
|
'69',
|
||||||
|
'70',
|
||||||
|
'71',
|
||||||
|
'72',
|
||||||
|
'73',
|
||||||
|
'74',
|
||||||
|
'75',
|
||||||
|
'76',
|
||||||
|
'77',
|
||||||
|
'78',
|
||||||
|
'79',
|
||||||
|
'80',
|
||||||
|
'81',
|
||||||
|
'82',
|
||||||
|
'83',
|
||||||
|
'84',
|
||||||
|
'85',
|
||||||
|
'86',
|
||||||
|
'87',
|
||||||
|
'88',
|
||||||
|
'89',
|
||||||
|
'90',
|
||||||
|
'91',
|
||||||
|
'92',
|
||||||
|
'93',
|
||||||
|
'94',
|
||||||
|
'95',
|
||||||
|
'96',
|
||||||
|
'97',
|
||||||
|
'98',
|
||||||
|
'99',
|
||||||
|
],
|
||||||
|
{
|
||||||
|
}
|
||||||
|
),
|
||||||
|
uavobject.UAVObjectField(
|
||||||
|
'HWVersion',
|
||||||
|
'B',
|
||||||
1,
|
1,
|
||||||
[
|
[
|
||||||
'0',
|
'0',
|
||||||
@ -58,20 +167,18 @@ _fields = [ \
|
|||||||
}
|
}
|
||||||
),
|
),
|
||||||
uavobject.UAVObjectField(
|
uavobject.UAVObjectField(
|
||||||
'Version',
|
'Target',
|
||||||
'B',
|
'B',
|
||||||
3,
|
1,
|
||||||
[
|
[
|
||||||
'0',
|
'0',
|
||||||
'1',
|
|
||||||
'2',
|
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
uavobject.UAVObjectField(
|
uavobject.UAVObjectField(
|
||||||
'SVN',
|
'ArmReset',
|
||||||
'H',
|
'B',
|
||||||
1,
|
1,
|
||||||
[
|
[
|
||||||
'0',
|
'0',
|
||||||
@ -94,7 +201,7 @@ _fields = [ \
|
|||||||
|
|
||||||
class FirmwareIAPObj(uavobject.UAVObject):
|
class FirmwareIAPObj(uavobject.UAVObject):
|
||||||
## Object constants
|
## Object constants
|
||||||
OBJID = 1075803696
|
OBJID = 879185696
|
||||||
NAME = "FirmwareIAPObj"
|
NAME = "FirmwareIAPObj"
|
||||||
METANAME = "FirmwareIAPObjMeta"
|
METANAME = "FirmwareIAPObjMeta"
|
||||||
ISSINGLEINST = 1
|
ISSINGLEINST = 1
|
||||||
|
@ -2,9 +2,10 @@
|
|||||||
<object name="FirmwareIAPObj" singleinstance="true" settings="false">
|
<object name="FirmwareIAPObj" singleinstance="true" settings="false">
|
||||||
<description>Firmware IAP</description>
|
<description>Firmware IAP</description>
|
||||||
<field name="Command" units="na" type="uint16" elements="1"/>
|
<field name="Command" units="na" type="uint16" elements="1"/>
|
||||||
<field name="Port" units="na" type="uint32" elements="1"/>
|
<field name="Description" units="na" type="uint8" elements="100"/>
|
||||||
<field name="Version" units="na" type="uint8" elements="3"/>
|
<field name="HWVersion" units="na" type="uint8" elements="1"/>
|
||||||
<field name="SVN" units="na" type="uint16" elements="1"/>
|
<field name="Target" units="na" type="uint8" elements="1"/>
|
||||||
|
<field name="ArmReset" units="na" type="uint8" elements="1"/>
|
||||||
<field name="crc" units="na" type="uint32" elements="1"/>
|
<field name="crc" units="na" type="uint32" elements="1"/>
|
||||||
<access gcs="readwrite" flight="readwrite"/>
|
<access gcs="readwrite" flight="readwrite"/>
|
||||||
<telemetrygcs acked="true" updatemode="manual" period="0"/>
|
<telemetrygcs acked="true" updatemode="manual" period="0"/>
|
||||||
@ -12,3 +13,4 @@
|
|||||||
<logging updatemode="never" period="0"/>
|
<logging updatemode="never" period="0"/>
|
||||||
</object>
|
</object>
|
||||||
</xml>
|
</xml>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user