durandal-v1:Bootloader

Change PID to 0x4b:
     Holybro obtained their own PID and VID but APM did not follow
     the PX4 convention of makeing the board_id (0x8b) match the PID)

   Incorporated the Upstream Bootloader state sequencing checking change.

   Change the usb cout to send all chars in 1 write.
This commit is contained in:
David Sidrane 2019-11-22 04:09:59 -08:00 committed by Lorenz Meier
parent 5b235c34c2
commit 7ca8a8dbaa
4 changed files with 23 additions and 25 deletions

View File

@ -29,7 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=22114
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_PRODUCTID=0x008b
CONFIG_CDCACM_PRODUCTID=0x004b
CONFIG_CDCACM_PRODUCTSTR="PX4 BL Holybro Durandal Vx"
CONFIG_CDCACM_RXBUFSIZE=600
CONFIG_CDCACM_TXBUFSIZE=12000

View File

@ -44,7 +44,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_PRODUCTID=0x008b
CONFIG_CDCACM_PRODUCTID=0x004b
CONFIG_CDCACM_PRODUCTSTR="PX4 DurandalV1"
CONFIG_CDCACM_RXBUFSIZE=600
CONFIG_CDCACM_TXBUFSIZE=12000

View File

@ -39,6 +39,7 @@
* Aside from the header includes below, this file should have no board-specific logic.
*/
#include "hw_config.h"
#include <inttypes.h>
#include <stdlib.h>
#include <stdbool.h>
@ -141,7 +142,7 @@
#define STATE_ALLOWS_REBOOT (STATE_PROTO_GET_SYNC)
# define SET_BL_STATE(s)
#else
#define STATE_ALLOWS_ERASE (STATE_PROTO_GET_SYNC|STATE_PROTO_GET_DEVICE|STATE_PROTO_GET_CHIP)
#define STATE_ALLOWS_ERASE (STATE_PROTO_GET_SYNC|STATE_PROTO_GET_DEVICE)
#define STATE_ALLOWS_REBOOT (STATE_ALLOWS_ERASE|STATE_PROTO_PROG_MULTI|STATE_PROTO_GET_CRC)
# define SET_BL_STATE(s) bl_state |= (s)
#endif

View File

@ -53,8 +53,11 @@ char *g_init = 0;
#if defined(SERIAL_TRACE)
int in = 0;
int out = 0;
char in_trace[254];
char out_trace[254];
// must be powere of 2 length
#define TRACE_SIZE 256
#define TRACE_WRAP(f) (f) &=(TRACE_SIZE-1)
char in_trace[TRACE_SIZE];
char out_trace[TRACE_SIZE];
#endif
void usb_cinit(void *config)
@ -72,6 +75,7 @@ void usb_cinit(void *config)
g_device = pt;
}
g_usb_df = -1;
int fd = open(g_device, O_RDWR | O_NONBLOCK);
if (fd >= 0) {
@ -105,9 +109,8 @@ int usb_cin(void)
if (read(g_usb_df, &b, 1) == 1) {
c = b;
#if defined(SERIAL_TRACE)
in_trace[in] = b;
in++;
in &= 255;
in_trace[in++] = b;
TRACE_WRAP(in);
#endif
}
@ -115,24 +118,18 @@ int usb_cin(void)
}
void usb_cout(uint8_t *buf, unsigned len)
{
uint32_t timeout = 1000;
for (unsigned i = 0; i < len; i++) {
while (timeout) {
if (write(g_usb_df, &buf[i], 1) == 1) {
write(g_usb_df, buf, len);
#if defined(SERIAL_TRACE)
out_trace[out] = buf[i];
out++;
out &= 255;
#endif
timeout = 1000;
break;
} else {
if (timeout-- == 0) {
return;
}
}
}
if (len > TRACE_SIZE) {
len = TRACE_SIZE;
out = 0;
}
for (unsigned i = 0; i < len; i++) {
out_trace[out++] = buf[i];
TRACE_WRAP(out);
}
#endif
}