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(CanBus_c *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 it_event = event_map.find(s_msg->name);
41 afb_event_push(it_event->second, jsonify_simple(s_msg));
46 void jsonify_DynamicField(openxc_DynamicField *field, json_object *value)
48 if(field->has_numeric_value)
49 json_object_object_add(value, "value", json_object_new_double(field->numeric_value));
50 else if(field->has_boolean_value)
51 json_object_object_add(value, "value", json_object_new_boolean(field->boolean_value));
52 else if(field->has_string_value)
53 json_object_object_add(value, "value", json_object_new_string(field->string_value));
58 /* Extract the simple message value from an openxc_VehicleMessage
59 * and return it, or null if there isn't.
61 openxc_SimpleMessage* get_simple_message(openxc_VehicleMessage *v_msg)
63 if(v_msg->has_simple_message)
64 return v_msg->simple_message;
69 json_object* jsonify_simple(openxc_SimpleMessage *s_msg)
72 json = json_object_new_object();
77 json_object_object_add(json, "name", json_object_new_string(s_msg->name));
78 jsonify_DynamicField(&s_msg->value, json);