2 * Copyright (C) 2015, 2016 "IoT.bzh"
3 * Author "Romain Forlot" <romain.forlot@iot.bzh>
4 * Author "Loic Collignon" <loic.collignon@iot.bzh>
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
19 #include <linux/can.h>
20 #include <linux/can/raw.h>
23 #include <afb/afb-binding.h>
25 #include "can-utils.h"
26 #include "openxc.pb.h"
27 #include "json-c/json.h"
29 void can_event_push(can_bus_t& can_bus)
31 openxc_VehicleMessage v_message;
32 openxc_SimpleMessage s_message;
37 if(v_message = can_bus->next_vehicle_message())
39 s_message = get_simple_message(v_msg);
40 const auto& it_event = subscribed_signals.find(s_msg.name);
41 if(! it_event->end() && afb_event_is_valid(it_event->second))
42 afb_event_push(it_event->second, jsonify_simple(s_msg));
47 void jsonify_DynamicField(const openxc_DynamicField& field, const json_object& value)
49 if(field.has_numeric_value)
50 json_object_object_add(value, "value", json_object_new_double(field.numeric_value));
51 else if(field.has_boolean_value)
52 json_object_object_add(value, "value", json_object_new_boolean(field.boolean_value));
53 else if(field.has_string_value)
54 json_object_object_add(value, "value", json_object_new_string(field.string_value));
59 /* Extract the simple message value from an openxc_VehicleMessage
60 * and return it, or null if there isn't.
62 openxc_SimpleMessage get_simple_message(const openxc_VehicleMessage& v_msg)
64 return v_msg.has_simple_message ? v_msg.simple_message : {0};
67 json_object jsonify_simple(const openxc_SimpleMessage& s_msg)
74 json = json_object_new_object();
75 json_object_object_add(json, "name", json_object_new_string(s_msg->name));
76 jsonify_DynamicField(&s_msg->value, json);