//***************************************************************************** // // //***************************************************************************** void receivePayLoad(void) { int iReturnValue = receivePackets(); if (iReturnValue > 0) { payloadReceived(requestBuffer, iReturnValue); } }
void LogLoader::parseBuffer(QByteArray buffer) { if (buffer.size() <= 3) { qDebug() << "Not long enough to even contain a header!"; return; } //Trim off 0xAA and 0xCC from the start and end buffer = buffer.mid(1); buffer = buffer.mid(0,buffer.length()-1); //qDebug() << "Packet:" << QString::number(buffer[1],16) << QString::number(buffer[buffer.length()-2],16); QByteArray header; //currPacket.clear(); //Parse the packet here int headersize = 3; int iloc = 0; bool seq = false; bool len = false; if (buffer[iloc] & 0b00000100) { //Has header seq = true; //qDebug() << "Has seq"; headersize += 1; } if (buffer[iloc] & 0b00000001) { //Has length len = true; //qDebug() << "Has length"; headersize += 2; } header = buffer.mid(0,headersize); iloc++; unsigned int payloadid = (unsigned int)buffer[iloc] << 8; payloadid += (unsigned char)buffer[iloc+1]; //qDebug() << QString::number(payloadid,16); //qDebug() << QString::number(buffer[iloc-1],16); //qDebug() << QString::number(buffer[iloc],16); //qDebug() << QString::number(buffer[iloc+1],16); //qDebug() << QString::number(buffer[iloc+2],16); iloc += 2; //qDebug() << QString::number(payloadid,16); if (seq) { //qDebug() << "Sequence number" << QString::number(currPacket[iloc]); iloc += 1; } QByteArray payload; if (len) { //qDebug() << "Length found, buffer size:" << buffer.length() << "iloc:" << QString::number(iloc); unsigned int length = buffer[iloc] << 8; length += buffer[iloc+1]; //qDebug() << "Length:" << length; iloc += 2; //curr += length; payload.append(buffer.mid(iloc,length)); } else { //qDebug() << "Buffer length:" << buffer.length(); //qDebug() << "Attempted cut:" << buffer.length() - iloc; payload.append(buffer.mid(iloc),(buffer.length()-iloc) -1); } //qDebug() << "Payload"; QString output; for (int i=0;i<payload.size();i++) { int num = (unsigned char)payload[i]; output.append(" ").append((num < 0xF) ? "0" : "").append(QString::number(num,16)); } //qDebug() << output; output.clear(); //qDebug() << "Header"; for (int i=0;i<header.size();i++) { int num = (unsigned char)header[i]; output.append(" ").append((num < 0xF) ? "0" : "").append(QString::number(num,16)); } //qDebug() << output; //Last byte of currPacket should be out checksum. unsigned char sum = 0; for (int i=0;i<header.size();i++) { sum += header[i]; } for (int i=0;i<payload.size();i++) { sum += payload[i]; } //qDebug() << "Payload sum:" << QString::number(sum); //qDebug() << "Checksum sum:" << QString::number((unsigned char)currPacket[currPacket.length()-1]); if (sum != (unsigned char)buffer[buffer.length()-1]) { qDebug() << "BAD CHECKSUM!"; qDebug() << "header size:" << header.size(); qDebug() << "payload size:" << payload.size(); } else { //qDebug() << "Got full packet. Header length:" << header.length() << "Payload length:" << payload.length(); emit payloadReceived(header,payload); //payload is our actual data. //unsigned int rpm = (payload[26] << 8) + payload[27]; //qDebug() << "f" << f.getValue(&payload); //qDebug() << QString::number(rpm); //qDebug() << QString::number(((unsigned short)payload[8] << 8) + (unsigned short)payload[9]); } }