From d6d3a56116b066f192300733c76418abeef573d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Mon, 25 Jul 2016 12:26:51 +0200 Subject: [PATCH] tap_esc: add buffer size check for _esc_feedback.esc[] --- src/drivers/tap_esc/tap_esc.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/drivers/tap_esc/tap_esc.cpp b/src/drivers/tap_esc/tap_esc.cpp index f13d6deb2e..1536ed2b99 100644 --- a/src/drivers/tap_esc/tap_esc.cpp +++ b/src/drivers/tap_esc/tap_esc.cpp @@ -445,7 +445,7 @@ void TAP_ESC:: send_esc_outputs(const float *pwm, const unsigned num_pwm) void TAP_ESC::read_data_from_uart() { - uint8_t tmp_serial_buf[UART_BUFFER_SIZE] = {0}; + uint8_t tmp_serial_buf[UART_BUFFER_SIZE]; int len =::read(_uart_fd, tmp_serial_buf, arraySize(tmp_serial_buf)); @@ -518,7 +518,7 @@ bool TAP_ESC:: parse_tap_esc_feedback(ESC_UART_BUF *serial_buf, EscPacket *packe if (crc_data_cal == serial_buf->esc_feedback_buf[serial_buf->head]) { packetdata->crc_data = serial_buf->esc_feedback_buf[serial_buf->head]; - if (++serial_buf->head >= 128) { + if (++serial_buf->head >= UART_BUFFER_SIZE) { serial_buf->head = 0; } @@ -726,20 +726,22 @@ TAP_ESC::cycle() if (parse_tap_esc_feedback(&uartbuf, &_packet) == true) { if (_packet.msg_id == ESCBUS_MSG_ID_RUN_INFO) { RunInfoRepsonse &feed_back_data = _packet.d.rspRunInfo; - _esc_feedback.esc[feed_back_data.channelID].esc_rpm = feed_back_data.speed; -// _esc_feedback.esc[feed_back_data.channelID].esc_voltage = feed_back_data.voltage; - _esc_feedback.esc[feed_back_data.channelID].esc_state = feed_back_data.ESCStatus; - _esc_feedback.esc[feed_back_data.channelID].esc_vendor = esc_status_s::ESC_VENDOR_TAP; - // printf("vol is %d\n",feed_back_data.voltage ); - // printf("speed is %d\n",feed_back_data.speed ); + if (feed_back_data.channelID < esc_status_s::CONNECTED_ESC_MAX) { + _esc_feedback.esc[feed_back_data.channelID].esc_rpm = feed_back_data.speed; +// _esc_feedback.esc[feed_back_data.channelID].esc_voltage = feed_back_data.voltage; + _esc_feedback.esc[feed_back_data.channelID].esc_state = feed_back_data.ESCStatus; + _esc_feedback.esc[feed_back_data.channelID].esc_vendor = esc_status_s::ESC_VENDOR_TAP; + // printf("vol is %d\n",feed_back_data.voltage ); + // printf("speed is %d\n",feed_back_data.speed ); - _esc_feedback.esc_connectiontype = esc_status_s::ESC_CONNECTION_TYPE_SERIAL; - _esc_feedback.counter++; - _esc_feedback.esc_count = esc_count; + _esc_feedback.esc_connectiontype = esc_status_s::ESC_CONNECTION_TYPE_SERIAL; + _esc_feedback.counter++; + _esc_feedback.esc_count = esc_count; - _esc_feedback.timestamp = hrt_absolute_time(); + _esc_feedback.timestamp = hrt_absolute_time(); - orb_publish(ORB_ID(esc_status), _esc_feedback_pub, &_esc_feedback); + orb_publish(ORB_ID(esc_status), _esc_feedback_pub, &_esc_feedback); + } } }