2 * Copyright (C) 2012 TOYOTA MOTOR 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
26 #include "ambinterface.h"
28 #include "mwinterface.h"
30 Converter::Converter()
32 specialconvertlist.push_back(VehicleProperty::TransmissionShiftPosition);
33 specialconvertlist.push_back(VehicleProperty::TransmissionGearPosition);
34 specialconvertlist.push_back(VehicleProperty::TransmissionMode);
35 specialconvertlist.push_back(VehicleProperty::TurnSignal);
36 specialconvertlist.push_back(VehicleProperty::ButtonEvent);
39 Converter::~Converter()
41 converttablelist.clear();
45 Converter::initialize(AMBConfig *conf)
47 vector<VehicleInfoDefine> dtableArray;
48 dtableArray = conf->getVehicleInfoConfig();
49 for (auto itr = dtableArray.begin(), itr_end = dtableArray.end(); itr != itr_end; itr++) {
51 ctable.mwname = string((*itr).KeyEventType);
52 DebugOut(10) << "Converter initialize mwname = " << ctable.mwname << "\n";
53 for (auto itr2 = (*itr).status.begin(); itr2 != (*itr).status.end();
55 ConvertTable::AmbVehicleInfoData ambdata;
56 ambdata.ambname = (*itr2).ambPropertyName;
57 DebugOut(10) << "Converter initialize ambname = " << ambdata.ambname
59 ambdata.type = (*itr2).type;
60 ambdata.typesize = (*itr2).typesize;
61 ambdata.zone = (*itr2).zone;
62 ctable.ambdataarray.push_back(ambdata);
64 converttablelist.push_back(ctable);
66 DebugOut(1) << "INFO CHG_VIC_INF ConvertTable size is " << converttablelist.size() << ".\n";
71 Converter::convertMWtoAMB(MWVehicleInfo *mwvehicleinfo,
72 AMBVehicleInfo *ambvehicleinfo, int arraysize)
76 ct.mwname = mwvehicleinfo->name;
77 auto itr = std::find(converttablelist.begin(), converttablelist.end(), ct);
78 if (itr == converttablelist.end()) {
83 for (auto itr2 = (*itr).ambdataarray.begin();
84 itr2 != (*itr).ambdataarray.end(); itr2++) {
85 ambvehicleinfo[arrayidx].name = (*itr2).ambname;
86 DebugOut(8) << "getPropertyTypeForPropertyNameValue Start\n";
87 ambvehicleinfo[arrayidx].value =
88 VehicleProperty::getPropertyTypeForPropertyNameValue(
89 ambvehicleinfo[arrayidx].name, "0");
90 DebugOut(8) << "getPropertyTypeForPropertyNameValue End\n";
91 if (ambvehicleinfo[arrayidx].value == NULL) {
94 ambvehicleinfo[arrayidx].value->timestamp = toDouble(
95 mwvehicleinfo->recordtime);
96 char statusbuf[(*itr2).typesize];
97 memcpy(statusbuf, mwvehicleinfo->status + statusidx,
99 DebugOut(8) << "fromString, toSting Start\n";
100 ambvehicleinfo[arrayidx].value->fromString(
101 toString((*itr2).ambname, statusbuf, sizeof(statusbuf),
103 DebugOut(8) << "fromString, toSting End\n";
104 statusidx += sizeof(statusbuf);
105 DebugOut(8) << "Converter convertMWtoAMB ambname = "
106 << (*itr2).ambname << "("
107 << ambvehicleinfo[arrayidx].value->toString() << ")\n";
108 ambvehicleinfo[arrayidx].zone = (*itr2).zone;
110 if (arrayidx == arraysize
112 < static_cast<int>((*itr).ambdataarray.size())) {
122 Converter::convertAMBtoMW(AMBVehicleInfo *ambvehicleinfo,
123 MWVehicleInfo *mwvehicleinfo)
127 for (auto itr = converttablelist.begin(); itr != converttablelist.end();
130 DebugOut(10) << "Converter convertAMBtoMW mwname = " << (*itr).mwname
132 for (auto itr2 = (*itr).ambdataarray.begin();
133 itr2 != (*itr).ambdataarray.end(); itr2++) {
134 DebugOut(10) << "Converter convertAMBtoMW ambname = "
135 << (*itr2).ambname << "\n";
136 if ((*itr2).ambname == ambvehicleinfo->name) {
137 DebugOut(10) << "Converter convertAMBtoMW ambname = "
138 << (*itr2).ambname << "\n";
139 mwvehicleinfo->name = (*itr).mwname;
140 mwvehicleinfo->recordtime = toTimeval(
141 ambvehicleinfo->value->timestamp);
142 if (ambvehicleinfo->value == NULL) {
143 DebugOut(10) << "Converter convertAMBtoMW "
144 << "ambvehicleinfo->value is NULL\n";
148 DebugOut(10) << "Converter check data "
149 << ambvehicleinfo->value->toString() << std::endl;
150 toBinary(ambvehicleinfo->name, ambvehicleinfo->value,
151 (*itr2).typesize, (*itr2).type,
152 mwvehicleinfo->status + statusidx);
157 statusidx += (*itr2).typesize;
164 Converter::toString(string ambname, char *data, int size, DataType type)
166 if (find(specialconvertlist.begin(), specialconvertlist.end(), ambname)
167 != specialconvertlist.end()) {
168 return specialConvertMWtoAMB(ambname, data, size, type);
177 memcpy(&val, data, size);
184 memcpy(&val, data, size);
191 memcpy(&val, data, size);
198 memcpy(&val, data, size);
205 memcpy(&val, data, size);
212 memcpy(&val, data, size);
219 memcpy(&val, data, size);
226 memcpy(&val, data, size);
233 memcpy(&val, data, size);
234 DebugOut(10) << "ToString(BOOL): Receive data(size = " << size << ") is " << data << " ->(convert this function)(size = " << sizeof(bool) << ") " << val << "\n";
253 Converter::toBinary(string ambname, AbstractPropertyType *value, int size,
254 DataType type, char *buf)
258 if (find(specialconvertlist.begin(), specialconvertlist.end(), ambname)
259 != specialconvertlist.end()) {
260 sstr << specialConvertAMBtoMW(ambname, value);
263 sstr << value->toString();
265 DebugOut(10) << "Converter toBinary " << sstr.str() << "\n";
271 memcpy(buf, &val, size);
272 DebugOut(10) << "Converter toBinary<int> " << val << "\n";
279 memcpy(buf, &val, size);
280 DebugOut(10) << "Converter toBinary<double> " << val << "\n";
287 memcpy(buf, &val, size);
288 DebugOut(10) << "Converter toBinary<char> " << val << "\n";
295 memcpy(buf, &val, size);
296 DebugOut(10) << "Converter toBinary<int16_t> " << val << "\n";
303 memcpy(buf, &val, size);
304 DebugOut(10) << "Converter toBinary<uint16_t> " << val << "\n";
311 memcpy(buf, &val, size);
312 DebugOut(10) << "Converter toBinary<uint32_t> " << val << "\n";
319 memcpy(buf, &val, size);
320 DebugOut(10) << "Converter toBinary<int64_t> " << val << "\n";
327 memcpy(buf, &val, size);
328 DebugOut(10) << "Converter toBinary<uint64_t> " << val << "\n";
342 memcpy(buf, &val, sizeof(bool));
343 DebugOut(10) << "Converter toBinary<bool> " << val << "\n";
356 Converter::toDouble(timeval time)
358 return static_cast<double>(time.tv_sec + (time.tv_usec * (1.0 / 1000000)));
362 Converter::toTimeval(double time)
366 double utime = time - tv.tv_sec;
367 tv.tv_usec = utime * 1000000;
372 Converter::specialConvertAMBtoMW(std::string ambname,
373 AbstractPropertyType *value)
377 if (ambname == VehicleProperty::TransmissionShiftPosition) {
378 switch (boost::any_cast < Transmission::TransmissionPositions
379 > (value->anyValue())) {
380 case Transmission::Neutral:
385 case Transmission::First:
390 case Transmission::Second:
395 case Transmission::Third:
400 case Transmission::Forth:
405 case Transmission::Fifth:
410 case Transmission::Sixth:
415 case Transmission::Seventh:
420 case Transmission::Eighth:
425 case Transmission::Ninth:
430 case Transmission::Tenth:
435 case Transmission::CVT:
440 case Transmission::Drive:
445 case Transmission::Reverse:
450 case Transmission::Park:
456 DebugOut(10) << "Converter specialConvertAMBtoMW"
457 << "(TransmissionShiftPosition): " << value->toString() << "->"
458 << retstr.str() << std::endl;
460 else if (ambname == VehicleProperty::TransmissionGearPosition) {
461 switch (boost::any_cast < Transmission::TransmissionPositions
462 > (value->anyValue())) {
463 case Transmission::Neutral:
468 case Transmission::First:
469 case Transmission::Second:
470 case Transmission::Third:
471 case Transmission::Forth:
472 case Transmission::Fifth:
473 case Transmission::Sixth:
474 case Transmission::Seventh:
475 case Transmission::Eighth:
476 case Transmission::Ninth:
477 case Transmission::Tenth:
479 retstr << value->toString();
482 case Transmission::CVT:
487 case Transmission::Drive:
492 case Transmission::Reverse:
497 case Transmission::Park:
508 DebugOut(10) << "Converter specialConvertAMBtoMW"
509 << "(TransmissionGearPosition): " << value->toString() << "->"
510 << retstr.str() << std::endl;
512 else if (ambname == VehicleProperty::TransmissionMode) {
513 retstr << value->toString();
515 else if (ambname == VehicleProperty::TurnSignal) {
516 retstr << value->toString();
518 else if (ambname == VehicleProperty::ButtonEvent) {
525 Converter::specialConvertMWtoAMB(std::string ambname, char *data, int size,
530 if (ambname == VehicleProperty::TransmissionShiftPosition) {
532 memcpy(&val, data, size);
536 retstr << Transmission::Park;
541 retstr << Transmission::Reverse;
546 retstr << Transmission::Neutral;
551 retstr << Transmission::Drive;
556 retstr << Transmission::First;
561 retstr << Transmission::Second;
566 retstr << Transmission::Third;
571 retstr << Transmission::Forth;
576 retstr << Transmission::Fifth;
581 retstr << Transmission::Sixth;
586 retstr << Transmission::Seventh;
591 retstr << Transmission::Eighth;
596 retstr << Transmission::Ninth;
601 retstr << Transmission::Tenth;
606 retstr << Transmission::CVT;
614 DebugOut(10) << "Converter specialConvertMWtoAMB"
615 << "(TransmissionShiftPosition): " << val << "->"
616 << retstr.str() << std::endl;
618 else if (ambname == VehicleProperty::TransmissionGearPosition) {
620 memcpy(&val, data, size);
638 retstr << Transmission::Neutral;
643 retstr << Transmission::Reverse;
648 retstr << Transmission::CVT;
657 DebugOut(10) << "Converter specialConvertMWtoAMB"
658 << "(TransmissionGearPosition): " << val << "->" << retstr.str()
661 else if (ambname == VehicleProperty::TransmissionMode) {
663 memcpy(&val, data, size);
666 else if (ambname == VehicleProperty::TurnSignal) {
668 memcpy(&val, data, size);
671 else if (ambname == VehicleProperty::ButtonEvent) {