Getting Places Slowly…

This evening I managed to successfully create a command and parse the result to come up with a nice ASCII string of the vehicle’s identification number (VIN). The VIN will allow Automon to know what car it is plugged into and if it is a new car. This will allow me to create a profile for each car, and if necessary keep statistics of it. Of course this requirement may never be implemented with the tight time constraints associated with the project but it is an essential part of the Automon kernel nevertheless.

I also successfully implemented the sensor monitoring architecture. I can now create a “RealTimeSensor” by inheriting this class and overriding the convertResult formula as every sensor handles the hex response in its own way. TheseĀ  real time sensors can easily be added to the monitoring system. eg: automonObj.addActiveSensor(CoolantTempSensor). I can also set the sensor’s frequency. This sensor for example should not be updated every cycle as it doesn’t change that quick. RPM on the other hand needs much higher priority. This system is also proven to work.

I can also pause monitoring by going to sleep, I can stop it by terminating the thread. These functions will be very important further down the line. I’m quite happy with the way my kernel’s archiecture is going now. Below is a code snippet of sending the VIN command and parsing a response. Of course this is still just quick code, all will be cleaned up before final release.

QString Automon::getVin()
{
if (m_serialHelper->isRunning())
{

#ifdef DEBUGAUTOMON
qDebug() << “Attempted to get VIN but SerialHelper is currently monitoring. Returning failure message”;
#endif

return QString(“Result could not be obtained. You must stop monitoring first!”);
}
else
{
Command vinCommand;
vinCommand.setCommand(“0902″);

m_serialHelper->sendCommand(vinCommand);

QString returnedBuffer = vinCommand.getBuffer();

/* Remove spaces to make it easier to parse */
QRegExp rx( ” “ );
returnedBuffer.replace(rx, “”);

/* Split each Line */
QStringList lineList = returnedBuffer.split(\x0D”);

/*
Next for each line, we will cut out the "49020n" so simply a
sub string from 6 to line.size()
*/

QString fullLine;

for (int i = 0; i < lineList.size(); i++)
{
QString thisLine = lineList.at(i);
thisLine = thisLine.section(“”,7,thisLine.size());
QRegExp nullFinder(“00+”);
thisLine.replace(nullFinder,“”);
fullLine += thisLine;
}

if (fullLine.size() % 2 !=0)
{

#ifdef DEBUGAUTOMON
qDebug(“The returned string for VIN was not of equal bytes. Error”);
#endif
return QString(“The Returned Number of Bytes for VIN was not even. Read Error”);
}

QString vinNumber;

for (int i=0; i < fullLine.size(); i += 2)
{
QString hexByte = fullLine.section(“”,i+1,i+2);
vinNumber += QByteArray::fromHex(hexByte.toAscii());
}

return vinNumber;
}
}

Leave a Reply

You must be logged in to post a comment.