2 Copyright (C) 2012 Intel Corporation
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 #include "exampleplugin.h"
20 #include "timestamp.h"
23 #include <boost/assert.hpp>
30 uint16_t accelerationX = 0;
31 Transmission::TransmissionPositions transmissionShiftPostion = Transmission::Neutral;
32 uint16_t steeringWheelAngle=0;
33 uint16_t throttlePos = 0;
34 uint16_t engineCoolant = 40;
35 bool machineGun = false;
37 static gboolean timeoutCallback(gpointer data)
39 ExampleSourcePlugin* src = (ExampleSourcePlugin*)data;
41 src->randomizeProperties();
46 ExampleSourcePlugin::ExampleSourcePlugin(AbstractRoutingEngine* re, map<string, string> config)
47 :AbstractSource(re, config), velocity(0), engineSpeed(0)
49 re->setSupported(supported(), this);
50 debugOut("setting timeout");
51 g_timeout_add(1000, timeoutCallback, this );
57 extern "C" AbstractSource * create(AbstractRoutingEngine* routingengine, map<string, string> config)
59 return new ExampleSourcePlugin(routingengine, config);
63 string ExampleSourcePlugin::uuid()
65 return "6dd4268a-c605-4a06-9034-59c1e8344c8e";
69 void ExampleSourcePlugin::getPropertyAsync(AsyncPropertyReply *reply)
71 DebugOut()<<"ExampleSource: getPropertyAsync called for property: "<<reply->property<<endl;
75 if(reply->property == VehicleProperty::VehicleSpeed)
77 VehicleProperty::VehicleSpeedType temp(velocity);
79 reply->success = true;
80 reply->completed(reply);
82 else if(reply->property == VehicleProperty::EngineSpeed)
84 VehicleProperty::EngineSpeedType temp(engineSpeed);
86 reply->success = true;
87 reply->completed(reply);
89 else if(reply->property == VehicleProperty::AccelerationX)
91 VehicleProperty::AccelerationXType temp(accelerationX);
93 reply->success = true;
94 reply->completed(reply);
96 else if(reply->property == VehicleProperty::TransmissionShiftPosition)
98 VehicleProperty::TransmissionShiftPositionType temp(transmissionShiftPostion);
100 reply->success = true;
101 reply->completed(reply);
103 else if(reply->property == VehicleProperty::SteeringWheelAngle)
105 VehicleProperty::SteeringWheelAngleType temp(steeringWheelAngle);
106 reply->value = &temp;
107 reply->success = true;
108 reply->completed(reply);
110 else if(reply->property == VehicleProperty::VIN)
112 VehicleProperty::VINType temp("ABC00000000000000");
113 reply->value = &temp;
114 reply->success = true;
115 reply->completed(reply);
117 else if(reply->property == VehicleProperty::WMI)
119 VehicleProperty::WMIType temp("abc");
120 reply->value = &temp;
121 reply->success = true;
122 reply->completed(reply);
124 else if(reply->property == VehicleProperty::BatteryVoltage)
126 VehicleProperty::BatteryVoltageType temp(12.6);
127 reply->value = &temp;
128 reply->success = true;
129 reply->completed(reply);
131 else if(reply->property == VehicleProperty::ExteriorBrightness)
133 VehicleProperty::ExteriorBrightnessType temp(1000);
134 reply->value = &temp;
135 reply->success = true;
136 reply->completed(reply);
138 else if(reply->property == VehicleProperty::DoorsPerRow)
140 VehicleProperty::DoorsPerRowType temp;
142 BasicPropertyType<uint16_t> row1(2);
143 BasicPropertyType<uint16_t> row2(2);
144 BasicPropertyType<uint16_t> row3(1);
150 reply->value = &temp;
151 reply->success = true;
152 reply->completed(reply);
154 else if(reply->property == VehicleProperty::AirbagStatus)
156 VehicleProperty::AirbagStatusType temp;
158 temp.append(Airbag::Driver, Airbag::Active);
159 temp.append(Airbag::Passenger, Airbag::Active);
160 temp.append(Airbag::LeftSide, Airbag::Active);
161 temp.append(Airbag::RightSide, Airbag::Active);
163 reply->value = &temp;
164 reply->success = true;
165 reply->completed(reply);
169 void ExampleSourcePlugin::getRangePropertyAsync(AsyncRangePropertyReply *reply)
174 AsyncPropertyReply *ExampleSourcePlugin::setProperty(AsyncSetPropertyRequest request )
179 void ExampleSourcePlugin::subscribeToPropertyChanges(VehicleProperty::Property property)
181 mRequests.push_back(property);
184 PropertyList ExampleSourcePlugin::supported()
187 props.push_back(VehicleProperty::EngineSpeed);
188 props.push_back(VehicleProperty::VehicleSpeed);
189 props.push_back(VehicleProperty::AccelerationX);
190 props.push_back(VehicleProperty::TransmissionShiftPosition);
191 props.push_back(VehicleProperty::SteeringWheelAngle);
192 props.push_back(VehicleProperty::ThrottlePosition);
193 props.push_back(VehicleProperty::EngineCoolantTemperature);
194 props.push_back(VehicleProperty::VIN);
195 props.push_back(VehicleProperty::WMI);
196 props.push_back(VehicleProperty::BatteryVoltage);
197 props.push_back(VehicleProperty::MachineGunTurretStatus);
198 props.push_back(VehicleProperty::ExteriorBrightness);
199 props.push_back(VehicleProperty::DoorsPerRow);
200 props.push_back(VehicleProperty::AirbagStatus);
205 int ExampleSourcePlugin::supportedOperations()
207 return Get | Set | GetRanged;
210 void ExampleSourcePlugin::unsubscribeToPropertyChanges(VehicleProperty::Property property)
212 mRequests.remove(property);
215 void ExampleSourcePlugin::randomizeProperties()
217 velocity = 1 + (255.00 * (rand() / (RAND_MAX + 1.0)));
218 engineSpeed = 1 + (15000.00 * (rand() / (RAND_MAX + 1.0)));
219 accelerationX = 1 + (15000.00 * (rand() / (RAND_MAX + 1.0)));
220 transmissionShiftPostion = Transmission::TransmissionPositions(1 + (6.00 * (rand() / (RAND_MAX + 1.0))));
221 steeringWheelAngle = 1 + (359.00 * (rand() / (RAND_MAX + 1.0)));
222 throttlePos = 1 + (100.00 * (rand() / (RAND_MAX + 1.0)));
223 engineCoolant = 1 + (40.00 * (rand() / (RAND_MAX + 140.0)));
225 DebugOut()<<"setting velocity to: "<<velocity<<endl;
226 DebugOut()<<"setting enginespeed to: "<<engineSpeed<<endl;
228 VehicleProperty::VehicleSpeedType vel(velocity);
229 VehicleProperty::EngineSpeedType es(engineSpeed);
230 VehicleProperty::AccelerationXType ac(accelerationX);
231 VehicleProperty::SteeringWheelAngleType swa(steeringWheelAngle);
232 VehicleProperty::TransmissionShiftPositionType tsp(transmissionShiftPostion);
233 VehicleProperty::ThrottlePositionType tp(throttlePos);
234 VehicleProperty::EngineCoolantTemperatureType ec(engineCoolant);
235 VehicleProperty::MachineGunTurretStatusType mgt(machineGun);
237 machineGun = !machineGun;
239 vel.timestamp = amb::currentTime();
240 es.timestamp = amb::currentTime();
241 ac.timestamp = amb::currentTime();
242 swa.timestamp = amb::currentTime();
243 tsp.timestamp = amb::currentTime();
244 tp.timestamp = amb::currentTime();
245 ec.timestamp = amb::currentTime();
247 routingEngine->updateProperty(VehicleProperty::VehicleSpeed, &vel, uuid());
248 routingEngine->updateProperty(VehicleProperty::EngineSpeed, &es, uuid());
249 routingEngine->updateProperty(VehicleProperty::AccelerationX, &ac, uuid());
250 routingEngine->updateProperty(VehicleProperty::SteeringWheelAngle, &swa, uuid());
251 routingEngine->updateProperty(VehicleProperty::TransmissionShiftPosition,&tsp, uuid());
252 routingEngine->updateProperty(VehicleProperty::ThrottlePosition, &tp, uuid());
253 routingEngine->updateProperty(VehicleProperty::EngineCoolantTemperature, &ec, uuid());
254 //routingEngine->updateProperty(VehicleProperty::MachineGunTurretStatus, &mgt);