diff options
Diffstat (limited to 'src/can_event_push.cpp')
-rw-r--r-- | src/can_event_push.cpp | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/src/can_event_push.cpp b/src/can_event_push.cpp index b08619b..db14a44 100644 --- a/src/can_event_push.cpp +++ b/src/can_event_push.cpp @@ -24,15 +24,58 @@ #include "can-utils.h" #include "openxc.pb.h" +#include "json-c/json.h" void can_event_push(CanBus_c *can_bus) { + openxc_VehicleMessage *v_message; + openxc_SimpleMessage *s_message; + iterator it_event; + while(true) { - if(! can_bus->vehicle_message_q.empty()) + if(v_message = can_bus->next_vehicle_message()) { - vehicle_message = can_bus->vehicle_message_q.front(); - can_bus->vehicle_message_q.pop(); + s_message = get_simple_message(v_msg); + it_event = event_map.find(s_msg->name); + afb_event_push(it_event->second, jsonify_simple(s_msg)); } } } + +void jsonify_DynamicField(openxc_DynamicField *field, json_object *value) +{ + if(field->has_numeric_value) + json_object_object_add(value, "value", json_object_new_double(field->numeric_value)); + else if(field->has_boolean_value) + json_object_object_add(value, "value", json_object_new_boolean(field->boolean_value)); + else if(field->has_string_value) + json_object_object_add(value, "value", json_object_new_string(field->string_value)); + +return value; +} + +/* Extract the simple message value from an openxc_VehicleMessage + * and return it, or null if there isn't. + */ +openxc_SimpleMessage* get_simple_message(openxc_VehicleMessage *v_msg) +{ + if(v_msg->has_simple_message) + return v_msg->simple_message; + + return nullptr; +} + +json_object* jsonify_simple(openxc_SimpleMessage *s_msg) +{ + json_object *json; + json = json_object_new_object(); + + if(!s_msg->has_name) + return nullptr; + + json_object_object_add(json, "name", json_object_new_string(s_msg->name)); + jsonify_DynamicField(&s_msg->value, json); + + return json; +}
\ No newline at end of file |