Update AMB with amb-qt(qml) plugins to latest
[AGL/meta-agl.git] / meta-ivi-common / recipes-automotive / automotive-message-broker / automotive-message-broker / 0004-cansocketbcm-Fix-reading-of-frames-in-case-of-RX_TIM.patch
1 From 10327a700491ba7412ce1296cb709b4d3303326f Mon Sep 17 00:00:00 2001
2 From: Petr Nechaev <petr.nechaev@cogentembedded.com>
3 Date: Wed, 29 Jul 2015 17:58:49 +0300
4 Subject: [PATCH 4/9] cansocketbcm: Fix reading of frames in case of RX_TIMEOUT
5
6 If bcms.hdr.nframes==0 we must not read any frames.
7 Also, frame size can vary with the number of messages.
8 ---
9  plugins/common/cansocketbcm.cpp | 26 ++++++++++++++++++++------
10  1 file changed, 20 insertions(+), 6 deletions(-)
11
12 diff --git a/plugins/common/cansocketbcm.cpp b/plugins/common/cansocketbcm.cpp
13 index d923ce3..7ee663c 100644
14 --- a/plugins/common/cansocketbcm.cpp
15 +++ b/plugins/common/cansocketbcm.cpp
16 @@ -145,7 +145,7 @@ int CANSocketBCM::waitData(unsigned int timeout)
17  
18  /**
19   * BCM header with one message.
20 - * @note hdr.nframes must always be 0 or 1.
21 + * @note As a result, hdr.nframes must always be 0 or 1.
22   */
23  struct __attribute__ ((__packed__)) bcm_msg_one{
24      struct bcm_msg_head hdr;
25 @@ -190,7 +190,7 @@ CANSocket::CANSocketReadSuccess CANSocketBCM::readMessage(CANFrameInfo& message)
26      switch (bcms.hdr.opcode)
27      {
28      case RX_CHANGED:
29 -        if (bcms.hdr.nframes >= 1 && nbytes == sizeof(bcms))
30 +        if (bcms.hdr.nframes >= 1 && nbytes == sizeof(bcm_msg_head) + bcms.hdr.nframes*sizeof(can_frame))
31          {
32              if (bcms.hdr.nframes > 1)
33              {
34 @@ -211,10 +211,24 @@ CANSocket::CANSocketReadSuccess CANSocketBCM::readMessage(CANFrameInfo& message)
35              return CANSocket::CANSocketReadSuccess::READING_FAILED;
36          }
37      case RX_TIMEOUT:
38 -        memcpy(&message.frame, &bcms.frames[0], sizeof(bcms.frames[0]));
39 -        message.frame.can_id = bcms.hdr.can_id; //doubtful. Do we need to override this?
40 -        message.status = CANFrameInfo::CANMessageStatus::TIMEOUT;
41 -        return CANSocket::CANSocketReadSuccess::READING_SUCCEEDED;
42 +        if (bcms.hdr.nframes >= 0 && nbytes == sizeof(bcm_msg_head) + bcms.hdr.nframes*sizeof(can_frame))
43 +        {
44 +            if (bcms.hdr.nframes > 0)
45 +            {
46 +                memcpy(&message.frame, &bcms.frames[0], sizeof(bcms.frames[0]));
47 +            }
48 +            message.frame.can_id = bcms.hdr.can_id; //doubtful. Do we need to override this?
49 +            message.status = CANFrameInfo::CANMessageStatus::TIMEOUT;
50 +            return CANSocket::CANSocketReadSuccess::READING_SUCCEEDED;
51 +        }
52 +        else
53 +        {
54 +            LOG_ERROR("Unexpected data from the socket"
55 +                      << " " << bcms.hdr.opcode
56 +                      << " " << bcms.hdr.nframes
57 +                      << " " << nbytes);
58 +            return CANSocket::CANSocketReadSuccess::READING_FAILED;
59 +        }
60  
61      case TX_EXPIRED:
62          // do nothing
63 -- 
64 1.9.1
65