mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-03-15 07:29:15 +01:00
OP-21/Flight Bootloader - some changes for the bootloader to work
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1682 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
1b9811aa0e
commit
c9752a6a3a
@ -77,10 +77,11 @@ uint32_t crc_memory_calc()
|
||||
|
||||
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=*FLASH_If_Read(i);
|
||||
array++;
|
||||
array[x]=*FLASH_If_Read(i);
|
||||
++x;
|
||||
}
|
||||
}
|
||||
void CRC_Ini()
|
||||
|
@ -49,7 +49,7 @@ static int32_t opahrs_msg_txrx (const uint8_t * tx, uint8_t * rx, uint32_t len)
|
||||
#ifdef PIOS_INCLUDE_FREERTOS
|
||||
vTaskDelay(20 / portTICK_RATE_MS);
|
||||
#else
|
||||
PIOS_DELAY_WaitmS(20);
|
||||
//PIOS_DELAY_WaitmS(20);
|
||||
#endif
|
||||
rc = PIOS_SPI_TransferBlock(PIOS_OPAHRS_SPI, tx, rx, len, NULL);
|
||||
PIOS_SPI_RC_PinSet(PIOS_OPAHRS_SPI, 1);
|
||||
@ -83,7 +83,7 @@ static enum opahrs_result opahrs_msg_v0_send_req (const struct opahrs_msg_v0 * r
|
||||
#ifdef PIOS_INCLUDE_FREERTOS
|
||||
vTaskDelay(20 / portTICK_RATE_MS);
|
||||
#else
|
||||
PIOS_DELAY_WaitmS(20);
|
||||
//PIOS_DELAY_WaitmS(1);
|
||||
#endif
|
||||
continue;
|
||||
case OPAHRS_MSG_LINK_STATE_READY:
|
||||
@ -97,7 +97,7 @@ static enum opahrs_result opahrs_msg_v0_send_req (const struct opahrs_msg_v0 * r
|
||||
#ifdef PIOS_INCLUDE_FREERTOS
|
||||
vTaskDelay(50 / portTICK_RATE_MS);
|
||||
#else
|
||||
PIOS_DELAY_WaitmS(50);
|
||||
//PIOS_DELAY_WaitmS(1);
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
@ -131,7 +131,7 @@ static enum opahrs_result opahrs_msg_v0_recv_rsp (enum opahrs_msg_v0_tag tag, st
|
||||
#ifdef PIOS_INCLUDE_FREERTOS
|
||||
vTaskDelay(20 / portTICK_RATE_MS);
|
||||
#else
|
||||
PIOS_DELAY_WaitmS(20);
|
||||
PIOS_DELAY_WaitmS(1);
|
||||
#endif
|
||||
continue;
|
||||
case OPAHRS_MSG_LINK_STATE_INACTIVE:
|
||||
@ -202,21 +202,20 @@ enum opahrs_result PIOS_OPAHRS_bl_GetSerial(struct opahrs_msg_v0 * rsp)
|
||||
OPAHRS_MSG_V0_RSP_SERIAL));
|
||||
}
|
||||
|
||||
enum opahrs_result PIOS_OPAHRS_bl_FwupStart(struct opahrs_msg_v0 * req, struct opahrs_msg_v0 * rsp)
|
||||
enum opahrs_result PIOS_OPAHRS_bl_FwupStart(struct opahrs_msg_v0 * rsp)
|
||||
{
|
||||
if (!req || !rsp) return OPAHRS_RESULT_FAILED;
|
||||
enum opahrs_result rc;
|
||||
/* Make up an attituderaw request */
|
||||
opahrs_msg_v0_init_user_tx (req, OPAHRS_MSG_V0_REQ_FWUP_START);
|
||||
if (!rsp) return OPAHRS_RESULT_FAILED;
|
||||
return (PIOS_OPAHRS_v0_simple_req (OPAHRS_MSG_V0_REQ_FWUP_START,
|
||||
rsp,
|
||||
OPAHRS_MSG_V0_RSP_FWUP_STATUS));
|
||||
}
|
||||
|
||||
/* Send the message until it is received */
|
||||
rc = opahrs_msg_v0_send_req (req);
|
||||
if (rc != OPAHRS_RESULT_OK) {
|
||||
/* Failed to send the request, bail out */
|
||||
return rc;
|
||||
}
|
||||
|
||||
return opahrs_msg_v0_recv_rsp (OPAHRS_MSG_V0_RSP_FWUP_STATUS, rsp);
|
||||
enum opahrs_result PIOS_OPAHRS_bl_FwupStatus(struct opahrs_msg_v0 * rsp)
|
||||
{
|
||||
if (!rsp) return OPAHRS_RESULT_FAILED;
|
||||
return (PIOS_OPAHRS_v0_simple_req (OPAHRS_MSG_V0_REQ_FWUP_STATUS,
|
||||
rsp,
|
||||
OPAHRS_MSG_V0_RSP_FWUP_STATUS));
|
||||
}
|
||||
|
||||
enum opahrs_result PIOS_OPAHRS_bl_FwupData(struct opahrs_msg_v0 * req, struct opahrs_msg_v0 * rsp)
|
||||
@ -258,7 +257,7 @@ enum opahrs_result PIOS_OPAHRS_bl_resync(void)
|
||||
#ifdef PIOS_INCLUDE_FREERTOS
|
||||
vTaskDelay(20 / portTICK_RATE_MS);
|
||||
#else
|
||||
PIOS_DELAY_WaitmS(20);
|
||||
//PIOS_DELAY_WaitmS(1);
|
||||
#endif
|
||||
|
||||
for (uint32_t i = 0; i < sizeof(req); i++) {
|
||||
@ -277,7 +276,7 @@ enum opahrs_result PIOS_OPAHRS_bl_resync(void)
|
||||
#ifdef PIOS_INCLUDE_FREERTOS
|
||||
vTaskDelay(10 / portTICK_RATE_MS);
|
||||
#else
|
||||
PIOS_DELAY_WaitmS(10);
|
||||
PIOS_DELAY_WaitmS(1);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -287,21 +286,24 @@ enum opahrs_result PIOS_OPAHRS_bl_resync(void)
|
||||
return rc;
|
||||
}
|
||||
|
||||
enum opahrs_result PIOS_OPAHRS_bl_reset()
|
||||
enum opahrs_result PIOS_OPAHRS_bl_reset(uint32_t delay)
|
||||
{
|
||||
struct opahrs_msg_v0 rsp;
|
||||
return (PIOS_OPAHRS_v0_simple_req (OPAHRS_MSG_V0_REQ_RESET,
|
||||
&rsp,
|
||||
OPAHRS_MSG_V0_RSP_FWUP_STATUS));
|
||||
struct opahrs_msg_v0 req;
|
||||
/* Make up an attituderaw request */
|
||||
opahrs_msg_v0_init_user_tx (&req, OPAHRS_MSG_V0_REQ_RESET);
|
||||
req.payload.user.v.req.reset.reset_delay_in_ms=delay;
|
||||
/* Send the message until it is received */
|
||||
return opahrs_msg_v0_send_req (&req);
|
||||
}
|
||||
|
||||
enum opahrs_result PIOS_OPAHRS_bl_boot()
|
||||
enum opahrs_result PIOS_OPAHRS_bl_boot(uint32_t delay)
|
||||
{
|
||||
struct opahrs_msg_v0 rsp;
|
||||
|
||||
return (PIOS_OPAHRS_v0_simple_req (OPAHRS_MSG_V0_REQ_BOOT,
|
||||
&rsp,
|
||||
OPAHRS_MSG_V0_RSP_FWUP_STATUS));
|
||||
struct opahrs_msg_v0 req;
|
||||
/* Make up an attituderaw request */
|
||||
opahrs_msg_v0_init_user_tx (&req, OPAHRS_MSG_V0_REQ_BOOT);
|
||||
req.payload.user.v.req.boot.boot_delay_in_ms=delay;
|
||||
/* Send the message until it is received */
|
||||
return opahrs_msg_v0_send_req (&req);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_OPAHRS */
|
||||
|
||||
|
@ -46,13 +46,14 @@ extern void PIOS_OPAHRS_Init(void);
|
||||
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_GetVersions(struct opahrs_msg_v0 * rsp);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_GetSerial(struct opahrs_msg_v0 * rsp);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_FwupStart(struct opahrs_msg_v0 * req, struct opahrs_msg_v0 * rsp);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_FwupStart(struct opahrs_msg_v0 * rsp);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_FwupStatus(struct opahrs_msg_v0 * rsp);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_FwupData(struct opahrs_msg_v0 * req, struct opahrs_msg_v0 * rsp);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_FwupVerify(struct opahrs_msg_v0 * rsp);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_resync(void);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_GetMemMap(struct opahrs_msg_v0 * rsp);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_reset();
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_boot();
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_reset(uint32_t delay);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_boot(uint32_t delay);
|
||||
/*
|
||||
* Protocol V1 messages used by application
|
||||
*/
|
||||
|
@ -84,9 +84,13 @@ struct opahrs_msg_v0_req_serial {
|
||||
struct opahrs_msg_v0_req_fwup_start {
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct opahrs_msg_v0_req_fwup_status {
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct opahrs_msg_v0_req_fwup_data {
|
||||
uint32_t adress;
|
||||
uint32_t data;
|
||||
uint32_t data[14];
|
||||
uint8_t size;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct opahrs_msg_v0_req_mem_map {
|
||||
@ -102,6 +106,7 @@ union opahrs_msg_v0_req {
|
||||
struct opahrs_msg_v0_req_reset reset;
|
||||
struct opahrs_msg_v0_req_boot boot;
|
||||
struct opahrs_msg_v0_req_serial serial;
|
||||
struct opahrs_msg_v0_req_fwup_status status_req;
|
||||
struct opahrs_msg_v0_req_mem_map mem_map;
|
||||
struct opahrs_msg_v0_req_fwup_start fwup_start;
|
||||
struct opahrs_msg_v0_req_fwup_data fwup_data;
|
||||
@ -112,7 +117,7 @@ struct opahrs_msg_v0_rsp_versions {
|
||||
uint8_t hw_version;
|
||||
uint16_t bl_version;
|
||||
uint32_t fw_version;
|
||||
uint8_t description[100];
|
||||
uint8_t description[100];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct opahrs_msg_v0_rsp_serial {
|
||||
@ -152,6 +157,7 @@ enum opahrs_msg_v0_tag {
|
||||
OPAHRS_MSG_V0_REQ_FWUP_START,
|
||||
OPAHRS_MSG_V0_REQ_FWUP_DATA,
|
||||
OPAHRS_MSG_V0_REQ_FWUP_VERIFY,
|
||||
OPAHRS_MSG_V0_REQ_FWUP_STATUS,
|
||||
|
||||
OPAHRS_MSG_V0_RSP_VERSIONS,
|
||||
OPAHRS_MSG_V0_RSP_SERIAL,
|
||||
|
Loading…
x
Reference in New Issue
Block a user