Implement CanMessage_c method to navigate through
authorRomain Forlot <romain.forlot@iot.bzh>
Tue, 14 Feb 2017 17:20:22 +0000 (18:20 +0100)
committerRomain Forlot <romain.forlot@iot.bzh>
Tue, 14 Feb 2017 17:22:04 +0000 (18:22 +0100)
can_message queue (get/set)

Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
src/can-utils.cpp
src/can-utils.h
src/can_reader.cpp

index 6721410..09f4947 100644 (file)
@@ -128,6 +128,29 @@ int CanBus_c::send_can_message(CanMessage_c can_msg)
        return 0;
 }
 
+/*
+ * Get a CanMessage from can_message_q and return it
+ * then point to the next CanMessage in queue.
+ * 
+ * Return the next queue element or NULL if queue is empty.
+ */
+CanMessage_c* CanBus_c::next_can_message()
+{
+       if(! can_message_q.empty())
+       {
+               CanMessage_c can_msg = can_message_q.front();
+               can_message_q.pop()
+               return &can_msg;
+       }
+
+       return NULL;
+}
+
+void CanBus_c::insert_new_can_message(CanMessage_c *can_msg)
+{
+       can_message_q.push(can_msg);
+}
+
 /********************************************************************************
 *
 *              CanMessage method implementation
index 8c850e6..a760af1 100644 (file)
@@ -99,8 +99,9 @@ class CanBus_c {
                std::thread th_reading;
                std::thread th_decoding;
                std::thread th_pushing;
+
                std::queue <CanMessage_c> can_message_q;
-               std::queue <openxc_VehicleMessage> VehicleMessage_q;
+               std::queue <openxc_VehicleMessage> vehicle_message_q;
 
        public:
                int open();
@@ -108,6 +109,9 @@ class CanBus_c {
 
                void start_threads();
                int send_can_message(CanMessage_c can_msg);
+
+               CanMessage_c* next_can_message();
+               void insert_new_can_message(CanMessage_c *can_msg);
 };
 
 /* A compact representation of a single CAN message, meant to be used in in/out
@@ -165,17 +169,12 @@ typedef enum CanMessageFormat CanMessageFormat;
  *
  * value - The integer value of the state on the CAN bus.
  * name  - The corresponding string name for the state in OpenXC.
+ */
 struct CanSignalState {
        const int value;
        const char* name;
 };
 typedef struct CanSignalState CanSignalState;
- */
- class CanSignalState_c {
-        private:
-               const int value;
-               const char *name;
-};
 
 /* Public: A CAN signal to decode from the bus and output over USB.
  *
@@ -299,7 +298,8 @@ LIST_HEAD(CanMessageDefinitionList, CanMessageDefinitionListEntry);
  *     signalCount - The number of CAN signals (across all messages) defined for
  *             this message set.
  *     commandCount - The number of CanCommmands defined for this message set.
-typedef struct {
+ */
+ typedef struct {
        uint8_t index;
        const char* name;
        uint8_t busCount;
@@ -307,16 +307,6 @@ typedef struct {
        unsigned short signalCount;
        unsigned short commandCount;
 } CanMessageSet;
- */
-class CanMessageSet_c {
-       private:
-               uint8_t index;
-               const char * name;
-               uint8_t busCount;
-               unsigned short messageCount;
-               unsigned short signalCount;
-               unsigned short commandCount;
-};
 
 /* Public: The type signature for a function to handle a custom OpenXC command.
  *
index d9b3e67..6403cfa 100644 (file)
@@ -63,4 +63,4 @@ void can_reader(CanBus_c *can_bus))
 
                can_message_q.push(can_message);
        }
-}
+}
\ No newline at end of file