forked from Archive/PX4-Autopilot
Merge pull request #1232 from jean-m-cyr/master
Improve update performance and clean compiler warnings in px4io driver
This commit is contained in:
commit
577e75ab5a
|
@ -157,6 +157,10 @@ private:
|
||||||
perf_counter_t _pc_idle;
|
perf_counter_t _pc_idle;
|
||||||
perf_counter_t _pc_badidle;
|
perf_counter_t _pc_badidle;
|
||||||
|
|
||||||
|
/* do not allow top copying this class */
|
||||||
|
PX4IO_serial(PX4IO_serial &);
|
||||||
|
PX4IO_serial& operator = (const PX4IO_serial &);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
IOPacket PX4IO_serial::_dma_buffer;
|
IOPacket PX4IO_serial::_dma_buffer;
|
||||||
|
@ -173,7 +177,9 @@ PX4IO_serial::PX4IO_serial() :
|
||||||
_tx_dma(nullptr),
|
_tx_dma(nullptr),
|
||||||
_rx_dma(nullptr),
|
_rx_dma(nullptr),
|
||||||
_rx_dma_status(_dma_status_inactive),
|
_rx_dma_status(_dma_status_inactive),
|
||||||
_pc_txns(perf_alloc(PC_ELAPSED, "io_txns ")),
|
_bus_semaphore(SEM_INITIALIZER(0)),
|
||||||
|
_completion_semaphore(SEM_INITIALIZER(0)),
|
||||||
|
_pc_txns(perf_alloc(PC_ELAPSED, "io_txns ")),
|
||||||
_pc_dmasetup(perf_alloc(PC_ELAPSED, "io_dmasetup ")),
|
_pc_dmasetup(perf_alloc(PC_ELAPSED, "io_dmasetup ")),
|
||||||
_pc_retries(perf_alloc(PC_COUNT, "io_retries ")),
|
_pc_retries(perf_alloc(PC_COUNT, "io_retries ")),
|
||||||
_pc_timeouts(perf_alloc(PC_COUNT, "io_timeouts ")),
|
_pc_timeouts(perf_alloc(PC_COUNT, "io_timeouts ")),
|
||||||
|
|
|
@ -65,7 +65,8 @@
|
||||||
|
|
||||||
PX4IO_Uploader::PX4IO_Uploader() :
|
PX4IO_Uploader::PX4IO_Uploader() :
|
||||||
_io_fd(-1),
|
_io_fd(-1),
|
||||||
_fw_fd(-1)
|
_fw_fd(-1),
|
||||||
|
bl_rev(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,7 +246,7 @@ PX4IO_Uploader::upload(const char *filenames[])
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PX4IO_Uploader::recv(uint8_t &c, unsigned timeout)
|
PX4IO_Uploader::recv_byte_with_timeout(uint8_t *c, unsigned timeout)
|
||||||
{
|
{
|
||||||
struct pollfd fds[1];
|
struct pollfd fds[1];
|
||||||
|
|
||||||
|
@ -262,19 +263,19 @@ PX4IO_Uploader::recv(uint8_t &c, unsigned timeout)
|
||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
read(_io_fd, &c, 1);
|
read(_io_fd, c, 1);
|
||||||
#ifdef UDEBUG
|
#ifdef UDEBUG
|
||||||
log("recv 0x%02x", c);
|
log("recv_bytes 0x%02x", c);
|
||||||
#endif
|
#endif
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PX4IO_Uploader::recv(uint8_t *p, unsigned count)
|
PX4IO_Uploader::recv_bytes(uint8_t *p, unsigned count)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = OK;
|
||||||
while (count--) {
|
while (count--) {
|
||||||
ret = recv(*p++, 5000);
|
ret = recv_byte_with_timeout(p++, 5000);
|
||||||
|
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
break;
|
break;
|
||||||
|
@ -289,10 +290,10 @@ PX4IO_Uploader::drain()
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
// the small recv timeout here is to allow for fast
|
// the small recv_bytes timeout here is to allow for fast
|
||||||
// drain when rebooting the io board for a forced
|
// drain when rebooting the io board for a forced
|
||||||
// update of the fw without using the safety switch
|
// update of the fw without using the safety switch
|
||||||
ret = recv(c, 40);
|
ret = recv_byte_with_timeout(&c, 40);
|
||||||
|
|
||||||
#ifdef UDEBUG
|
#ifdef UDEBUG
|
||||||
if (ret == OK) {
|
if (ret == OK) {
|
||||||
|
@ -331,12 +332,12 @@ PX4IO_Uploader::get_sync(unsigned timeout)
|
||||||
uint8_t c[2];
|
uint8_t c[2];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = recv(c[0], timeout);
|
ret = recv_byte_with_timeout(c, timeout);
|
||||||
|
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = recv(c[1], timeout);
|
ret = recv_byte_with_timeout(c + 1, timeout);
|
||||||
|
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -372,7 +373,7 @@ PX4IO_Uploader::get_info(int param, uint32_t &val)
|
||||||
send(param);
|
send(param);
|
||||||
send(PROTO_EOC);
|
send(PROTO_EOC);
|
||||||
|
|
||||||
ret = recv((uint8_t *)&val, sizeof(val));
|
ret = recv_bytes((uint8_t *)&val, sizeof(val));
|
||||||
|
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -513,7 +514,7 @@ PX4IO_Uploader::verify_rev2(size_t fw_size)
|
||||||
for (ssize_t i = 0; i < count; i++) {
|
for (ssize_t i = 0; i < count; i++) {
|
||||||
uint8_t c;
|
uint8_t c;
|
||||||
|
|
||||||
ret = recv(c, 5000);
|
ret = recv_byte_with_timeout(&c, 5000);
|
||||||
|
|
||||||
if (ret != OK) {
|
if (ret != OK) {
|
||||||
log("%d: got %d waiting for bytes", sent + i, ret);
|
log("%d: got %d waiting for bytes", sent + i, ret);
|
||||||
|
@ -600,7 +601,7 @@ PX4IO_Uploader::verify_rev3(size_t fw_size_local)
|
||||||
send(PROTO_GET_CRC);
|
send(PROTO_GET_CRC);
|
||||||
send(PROTO_EOC);
|
send(PROTO_EOC);
|
||||||
|
|
||||||
ret = recv((uint8_t*)(&crc), sizeof(crc));
|
ret = recv_bytes((uint8_t*)(&crc), sizeof(crc));
|
||||||
|
|
||||||
if (ret != OK) {
|
if (ret != OK) {
|
||||||
log("did not receive CRC checksum");
|
log("did not receive CRC checksum");
|
||||||
|
|
|
@ -74,19 +74,19 @@ private:
|
||||||
INFO_BOARD_REV = 3, /**< board revision */
|
INFO_BOARD_REV = 3, /**< board revision */
|
||||||
INFO_FLASH_SIZE = 4, /**< max firmware size in bytes */
|
INFO_FLASH_SIZE = 4, /**< max firmware size in bytes */
|
||||||
|
|
||||||
PROG_MULTI_MAX = 60, /**< protocol max is 255, must be multiple of 4 */
|
PROG_MULTI_MAX = 248, /**< protocol max is 255, must be multiple of 4 */
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int _io_fd;
|
int _io_fd;
|
||||||
int _fw_fd;
|
int _fw_fd;
|
||||||
|
|
||||||
uint32_t bl_rev; /**< bootloader revision */
|
uint32_t bl_rev; /**< bootloader revision */
|
||||||
|
|
||||||
void log(const char *fmt, ...);
|
void log(const char *fmt, ...);
|
||||||
|
|
||||||
int recv(uint8_t &c, unsigned timeout);
|
int recv_byte_with_timeout(uint8_t *c, unsigned timeout);
|
||||||
int recv(uint8_t *p, unsigned count);
|
int recv_bytes(uint8_t *p, unsigned count);
|
||||||
void drain();
|
void drain();
|
||||||
int send(uint8_t c);
|
int send(uint8_t c);
|
||||||
int send(uint8_t *p, unsigned count);
|
int send(uint8_t *p, unsigned count);
|
||||||
|
|
Loading…
Reference in New Issue