void CanBus_c::start_threads()
{
- std::queue <canfd_frame> canfd_frame_queue;
- std::queue <openxc_can_message_type> can_message_queue;
+ std::queue <CanMessage_t> can_message_q;
- th_reading = std::thread(can_reader, interface, socket, canfd_frame_queue);
- th_decoding = std::thread(can_decoder, interface, canfd_frame_queue, can_message_queue);
+ th_reading = std::thread(can_reader, interface, socket, can_message_q);
+ th_decoding = std::thread(can_decoder, interface, can_message_q, can_message_queue);
th_pushing = std::thread(can_event_push, interface, can_message_queue);
}
lenght = new_lenght;
}
+/*
+ * This is the prefered way to initialize a CanMessage object
+ * from a read canfd_frame message.
+ *
+ * params: canfd_frame pointer
+ */
void CanMessage_c::convert_canfd_frame_to_CanMessage(canfd_frame *frame)
{
case (canfd_frame->can_id & CAN_EFF_FLAG):
id = canfd_frame->can_id & CAN_EFF_MASK;
format = EXTENDED;
- default:
- format = STANDARD;
- id = canfd_frame->can_id & CAN_SFF_MASK;
+ break;
+ default:
+ format = STANDARD;
+ id = canfd_frame->can_id & CAN_SFF_MASK;
+ break;
if (sizeof(canfd_frame->data) <= sizeof(data))
{
can_message->data.bytes[i] = canfd_frame->data[i];
return 0;
} else if (sizeof(canfd_frame->data) >= CAN_MAX_DLEN)
- {
- ERROR(interface, "parse_can_frame: can_frame data too long to be stored into openxc_CanMessage data field");
- }
+ ERROR(interface, "CanMessage_c: canfd_frame data too long to be stored into CanMessage object");
}
\ No newline at end of file
typedef uint64_t (*SignalEncoder)(struct CanSignal* signal,
openxc_DynamicField* value, bool* send);
-/* CanBus represent a can device definition gotten from configuraiton file */
+/*
+ * CanBus represent a can device definition gotten from configuraiton file
+ */
class CanBus_c {
private:
/* Got from conf file */
#include <afb/afb-binding.h>
-void decode_can_message(afb_binding_interface *interface, std::queue <canfd_frame>& canfd_frame_queue, std::queue <openxc_can_message_type>& can_message_queue)
+#include "can-utils.h"
+#include "openxc.pb.h"
+
+void decode_can_message(afb_binding_interface *interface, std::queue <CanMessage_t>& can_message_q, std::queue <openxc_VehicleMessage>& VehicleMessage_q)
{
canfd_frame canfd_frame;
#include <afb/afb-binding.h>
-void can_event_push(afb_binding_interface *interface, std::queue <openxc_can_message_type>& can_message_queue)
+#include "can-utils.h"
+#include "openxc.pb.h"
+
+void can_event_push(afb_binding_interface *interface, std::queue <openxc_VehicleMessage>& vehicle_message_q)
{
while(true)
{
- if(! can_message_queue.empty())
+ if(! vehicle_message_q.empty())
{
- can_message = can_message_queue.front();
- can_message_queue.pop();
+ vehicle_message = vehicle_message_q.front();
+ vehicle_message_q.pop();
}
}
}
#include <afb/afb-binding.h>
+#include "can-utils.h"
+
void can_reader(afb_binding_interface *interface, int socket, std::queue <CanMessage_t>& can_message_q)
{
ssize_t nbytes;
return -2;
}
- /*
- * TODO: thread handle
- if (parse_can_frame(can_message, &canfd_frame, maxdlen))
- {
- ERROR(interface, "read_can: Can't parse the can frame. ID: %i, DLC: %i, DATA: %s",
- canfd_frame.can_id, canfd_frame.len, canfd_frame.data);
- return -4;
- }
- */
-
can_message.convert_canfd_frame_to_CanMessage(canfd_frame);
can_message_q.push(can_message);
}
-}
+}
\ No newline at end of file
+++ /dev/null
-Subproject commit e506334e270d77b20c0bc259ac6c7d8c9b702b7a