From 50fc14d92d7517c55e2e86961a86b4c23c61a61b Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Sat, 5 Oct 2024 15:44:28 +0200 Subject: [PATCH 01/14] start parser cleanup --- src/C++/Driver/src/KobukiParser.cpp | 105 ++++++++++++++++++++++++++++ src/C++/Driver/src/KobukiParser.h | 51 ++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 src/C++/Driver/src/KobukiParser.cpp create mode 100644 src/C++/Driver/src/KobukiParser.h diff --git a/src/C++/Driver/src/KobukiParser.cpp b/src/C++/Driver/src/KobukiParser.cpp new file mode 100644 index 0000000..9d7e4eb --- /dev/null +++ b/src/C++/Driver/src/KobukiParser.cpp @@ -0,0 +1,105 @@ +#include "KobukiParser.h" + +int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { + int rtrnvalue = checkChecksum(data); + if (rtrnvalue != 0) + return -2; + + int checkedValue = 1; + while (checkedValue < data[0]) { + unsigned char header = data[checkedValue]; + unsigned char length = data[checkedValue + 1]; + + switch (header) { + case 0x01: + if (length == 0x0F) { + parseBasicData(output, data, checkedValue); + } + break; + case 0x03: + if (length == 0x03) { + parseIRSensorData(output, data, checkedValue); + } + break; + case 0x04: + if (length == 0x07) { + parseGyroData(output, data, checkedValue); + } + break; + case 0x05: + if (length == 0x06) { + parseCliffSensorData(output, data, checkedValue); + } + break; + case 0x06: + if (length == 0x02) { + parseWheelCurrentData(output, data, checkedValue); + } + break; + case 0x0A: + if (length == 0x04) { + parseHardwareVersionData(output, data, checkedValue); + } + break; + case 0x0B: + if (length == 0x04) { + parseFirmwareVersionData(output, data, checkedValue); + } + break; + case 0x0D: + if (length == 0x0D) { + parseXYZData(output, data, checkedValue); + } + break; + case 0x10: + if (length == 0x10) { + parseDigitalAnalogInputData(output, data, checkedValue); + } + break; + case 0x13: + if (length == 0x0C) { + parseUDIDData(output, data, checkedValue); + } + break; + default: + checkedValue += length + 2; // Skip unknown data block + break; + } + } + return 0; +} + +int KobukiParser::parseBasicData(TKobukiData &output, unsigned char *data, int &checkedValue) { + checkedValue += 2; // Skip header and length + output.timestamp = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.BumperCenter = data[checkedValue] & 0x02; + output.BumperLeft = data[checkedValue] & 0x04; + output.BumperRight = data[checkedValue] & 0x01; + checkedValue++; + output.WheelDropLeft = data[checkedValue] & 0x02; + output.WheelDropRight = data[checkedValue] & 0x01; + checkedValue++; + output.CliffCenter = data[checkedValue] & 0x02; + output.CliffLeft = data[checkedValue] & 0x04; + output.CliffRight = data[checkedValue] & 0x01; + checkedValue++; + output.EncoderLeft = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.EncoderRight = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.PWMleft = data[checkedValue]; + checkedValue++; + output.PWMright = data[checkedValue]; + checkedValue++; + output.ButtonPress = data[checkedValue]; + checkedValue++; + output.Charger = data[checkedValue]; + checkedValue++; + output.Battery = data[checkedValue]; + checkedValue++; + output.overCurrent = data[checkedValue]; + checkedValue++; + return 0; +} + diff --git a/src/C++/Driver/src/KobukiParser.h b/src/C++/Driver/src/KobukiParser.h new file mode 100644 index 0000000..ed78466 --- /dev/null +++ b/src/C++/Driver/src/KobukiParser.h @@ -0,0 +1,51 @@ +#ifndef KOBUKIPARSER_H +#define KOBUKIPARSER_H + +#include + +struct TRawGyroData { + int x, y, z; +}; + +struct TExtraInfo { + int HardwareVersionPatch, HardwareVersionMinor, HardwareVersionMajor; + int FirmwareVersionPatch, FirmwareVersionMinor, FirmwareVersionMajor; + int UDID0, UDID1, UDID2; +}; + +struct TKobukiData { + int timestamp, BumperCenter, BumperLeft, BumperRight; + int WheelDropLeft, WheelDropRight; + int CliffCenter, CliffLeft, CliffRight; + int EncoderLeft, EncoderRight; + int PWMleft, PWMright; + int ButtonPress, Charger, Battery, overCurrent; + int IRSensorRight, IRSensorCenter, IRSensorLeft; + int GyroAngle, GyroAngleRate; + int CliffSensorRight, CliffSensorCenter, CliffSensorLeft; + int wheelCurrentLeft, wheelCurrentRight; + int digitalInput, analogInputCh0, analogInputCh1, analogInputCh2, analogInputCh3; + int frameId; + std::vector gyroData; + TExtraInfo extraInfo; +}; + +class KobukiParser { +public: + int parseKobukiMessage(TKobukiData &output, unsigned char *data); + +private: + int checkChecksum(unsigned char *data); + int parseBasicData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseIRSensorData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseGyroData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseCliffSensorData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseWheelCurrentData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseHardwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseFirmwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseXYZData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseDigitalAnalogInputData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseUDIDData(TKobukiData &output, unsigned char *data, int &checkedValue); +}; + +#endif // KOBUKIPARSER_H \ No newline at end of file From 33e8300814ee1446c40c96a52aca0691a1ff381a Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Sat, 5 Oct 2024 15:51:19 +0200 Subject: [PATCH 02/14] added comments --- src/C++/Driver/src/KobukiParser.cpp | 5 +++-- src/C++/Driver/src/KobukiParser.h | 7 +++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/C++/Driver/src/KobukiParser.cpp b/src/C++/Driver/src/KobukiParser.cpp index 9d7e4eb..1b36454 100644 --- a/src/C++/Driver/src/KobukiParser.cpp +++ b/src/C++/Driver/src/KobukiParser.cpp @@ -1,7 +1,8 @@ #include "KobukiParser.h" int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { - int rtrnvalue = checkChecksum(data); + //check if the checksum is correct + int rtrnvalue = CKobuki.checkChecksum(data); if (rtrnvalue != 0) return -2; @@ -62,7 +63,7 @@ int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { } break; default: - checkedValue += length + 2; // Skip unknown data block + checkedValue += length + 2; // Skip data block if nothing matches break; } } diff --git a/src/C++/Driver/src/KobukiParser.h b/src/C++/Driver/src/KobukiParser.h index ed78466..37ddbf1 100644 --- a/src/C++/Driver/src/KobukiParser.h +++ b/src/C++/Driver/src/KobukiParser.h @@ -1,7 +1,8 @@ -#ifndef KOBUKIPARSER_H +#ifndef KOBUKIPARSER_H //so that class cant be loaded twice #define KOBUKIPARSER_H #include +#include "CKobuki.h" struct TRawGyroData { int x, y, z; @@ -26,8 +27,6 @@ struct TKobukiData { int wheelCurrentLeft, wheelCurrentRight; int digitalInput, analogInputCh0, analogInputCh1, analogInputCh2, analogInputCh3; int frameId; - std::vector gyroData; - TExtraInfo extraInfo; }; class KobukiParser { @@ -48,4 +47,4 @@ private: int parseUDIDData(TKobukiData &output, unsigned char *data, int &checkedValue); }; -#endif // KOBUKIPARSER_H \ No newline at end of file +#endif \ No newline at end of file From 3184a09dc7bba08d0807379700f1324be419322c Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 11:20:48 +0200 Subject: [PATCH 03/14] edited cmake --- src/C++/Driver/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/C++/Driver/CMakeLists.txt b/src/C++/Driver/CMakeLists.txt index 4c86563..e497aa3 100644 --- a/src/C++/Driver/CMakeLists.txt +++ b/src/C++/Driver/CMakeLists.txt @@ -7,7 +7,9 @@ find_package( OpenCV REQUIRED ) set(SOURCE_FILES src/CKobuki.cpp src/CKobuki.h - src/test.cpp) + src/KobukiParser.cpp + src/KobukiParser.h + src/main.cpp) add_executable(kobuki_control ${SOURCE_FILES}) #target_link_libraries(kobuki_control ) \ No newline at end of file From 83f7d447d3a44843883f2308cdcbe2e33c952906 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 11:21:11 +0200 Subject: [PATCH 04/14] changed funtions so they point to new class --- src/C++/Driver/src/CKobuki.cpp | 404 ++++++++++++++++----------------- 1 file changed, 198 insertions(+), 206 deletions(-) diff --git a/src/C++/Driver/src/CKobuki.cpp b/src/C++/Driver/src/CKobuki.cpp index ffde869..7731f31 100755 --- a/src/C++/Driver/src/CKobuki.cpp +++ b/src/C++/Driver/src/CKobuki.cpp @@ -9,6 +9,8 @@ static std::vector vectorX; static std::vector vectorY; static std::vector vectorGyroTheta; +KobukiParser parser; + // obsluha tty pod unixom int set_interface_attribs2(int fd, int speed, int parity) { @@ -163,16 +165,6 @@ unsigned char *CKobuki::readKobukiMessage() return null_buffer; } -int CKobuki::checkChecksum(unsigned char *data) -{ // najprv hlavicku - unsigned char chckSum = 0; - for (int i = 0; i < data[0] + 2; i++) - { - chckSum ^= data[i]; - } - return chckSum; // 0 ak je vsetko v poriadku,inak nejake cislo -} - void CKobuki::setLed(int led1, int led2) { unsigned char message[8] = {0xaa, 0x55, 0x04, 0x0c, 0x02, 0x00, (unsigned char)((led1 + led2 * 4) % 256), 0x00}; @@ -297,7 +289,7 @@ int CKobuki::measure() // printf("vratil null message\n"); continue; } - int ok = parseKobukiMessage(data, message); + int ok = parser.parseKobukiMessage(parser.data, message); // maximalne moze trvat callback funkcia 20 ms, ak by trvala viac, nestihame // citat @@ -310,202 +302,202 @@ int CKobuki::measure() return 0; } -int CKobuki::parseKobukiMessage(TKobukiData &output, unsigned char *data) -{ - int rtrnvalue = checkChecksum(data); - // ak je zly checksum,tak kaslat na to - if (rtrnvalue != 0) - return -2; +// int CKobuki::parseKobukiMessage(TKobukiData &output, unsigned char *data) +// { +// int rtrnvalue = checkChecksum(data); +// // ak je zly checksum,tak kaslat na to +// if (rtrnvalue != 0) +// return -2; - int checkedValue = 1; - // kym neprejdeme celu dlzku - while (checkedValue < data[0]) - { - // basic data subload - if (data[checkedValue] == 0x01) - { - checkedValue++; - if (data[checkedValue] != 0x0F) - return -1; - checkedValue++; - output.timestamp = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.BumperCenter = data[checkedValue] && 0x02; - output.BumperLeft = data[checkedValue] && 0x04; - output.BumperRight = data[checkedValue] && 0x01; - checkedValue++; - output.WheelDropLeft = data[checkedValue] && 0x02; - output.WheelDropRight = data[checkedValue] && 0x01; - checkedValue++; - output.CliffCenter = data[checkedValue] && 0x02; - output.CliffLeft = data[checkedValue] && 0x04; - output.CliffRight = data[checkedValue] && 0x01; - checkedValue++; - output.EncoderLeft = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.EncoderRight = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.PWMleft = data[checkedValue]; - checkedValue++; - output.PWMright = data[checkedValue]; - checkedValue++; - output.ButtonPress = data[checkedValue]; - checkedValue++; - output.Charger = data[checkedValue]; - checkedValue++; - output.Battery = data[checkedValue]; - checkedValue++; - output.overCurrent = data[checkedValue]; - checkedValue++; - } - else if (data[checkedValue] == 0x03) - { - checkedValue++; - if (data[checkedValue] != 0x03) - return -3; - checkedValue++; - output.IRSensorRight = data[checkedValue]; - checkedValue++; - output.IRSensorCenter = data[checkedValue]; - checkedValue++; - output.IRSensorLeft = data[checkedValue]; - checkedValue++; - } - else if (data[checkedValue] == 0x04) - { - checkedValue++; - if (data[checkedValue] != 0x07) - return -4; - checkedValue++; - output.GyroAngle = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.GyroAngleRate = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 5; // 3 unsued - } - else if (data[checkedValue] == 0x05) - { - checkedValue++; - if (data[checkedValue] != 0x06) - return -5; - checkedValue++; - output.CliffSensorRight = - data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.CliffSensorCenter = - data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.CliffSensorLeft = - data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - } - else if (data[checkedValue] == 0x06) - { - checkedValue++; - if (data[checkedValue] != 0x02) - return -6; - checkedValue++; - output.wheelCurrentLeft = data[checkedValue]; - checkedValue++; - output.wheelCurrentRight = data[checkedValue]; - checkedValue++; - } - else if (data[checkedValue] == 0x0A) - { - checkedValue++; - if (data[checkedValue] != 0x04) - return -7; - checkedValue++; - output.extraInfo.HardwareVersionPatch = data[checkedValue]; - checkedValue++; - output.extraInfo.HardwareVersionMinor = data[checkedValue]; - checkedValue++; - output.extraInfo.HardwareVersionMajor = data[checkedValue]; - checkedValue += 2; - } - else if (data[checkedValue] == 0x0B) - { - checkedValue++; - if (data[checkedValue] != 0x04) - return -8; - checkedValue++; - output.extraInfo.FirmwareVersionPatch = data[checkedValue]; - checkedValue++; - output.extraInfo.FirmwareVersionMinor = data[checkedValue]; - checkedValue++; - output.extraInfo.FirmwareVersionMajor = data[checkedValue]; - checkedValue += 2; - } - else if (data[checkedValue] == 0x0D) - { - checkedValue++; - if (data[checkedValue] % 2 != 0) - return -9; - checkedValue++; - output.frameId = data[checkedValue]; - checkedValue++; - int howmanyFrames = data[checkedValue] / 3; - checkedValue++; - output.gyroData.reserve(howmanyFrames); - output.gyroData.clear(); - for (int hk = 0; hk < howmanyFrames; hk++) - { - TRawGyroData temp; - temp.x = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - temp.y = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - temp.z = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.gyroData.push_back(temp); - } - } - else if (data[checkedValue] == 0x10) - { - checkedValue++; - if (data[checkedValue] != 0x10) - return -10; - checkedValue++; - output.digitalInput = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh0 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh1 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh2 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh3 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 8; // 2+6 - } - else if (data[checkedValue] == 0x13) - { - checkedValue++; - if (data[checkedValue] != 0x0C) - return -11; - checkedValue++; - output.extraInfo.UDID0 = data[checkedValue + 3] * 256 * 256 * 256 + - data[checkedValue + 2] * 256 * 256 + - data[checkedValue + 1] * 256 + - data[checkedValue]; - checkedValue += 4; - output.extraInfo.UDID1 = data[checkedValue + 3] * 256 * 256 * 256 + - data[checkedValue + 2] * 256 * 256 + - data[checkedValue + 1] * 256 + - data[checkedValue]; - checkedValue += 4; - output.extraInfo.UDID2 = data[checkedValue + 3] * 256 * 256 * 256 + - data[checkedValue + 2] * 256 * 256 + - data[checkedValue + 1] * 256 + - data[checkedValue]; - checkedValue += 4; - } - else - { - checkedValue++; - checkedValue += data[checkedValue] + 1; - } - } - return 0; -} +// int checkedValue = 1; +// // kym neprejdeme celu dlzku +// while (checkedValue < data[0]) +// { +// // basic data subload +// if (data[checkedValue] == 0x01) +// { +// checkedValue++; +// if (data[checkedValue] != 0x0F) +// return -1; +// checkedValue++; +// output.timestamp = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// output.BumperCenter = data[checkedValue] && 0x02; +// output.BumperLeft = data[checkedValue] && 0x04; +// output.BumperRight = data[checkedValue] && 0x01; +// checkedValue++; +// output.WheelDropLeft = data[checkedValue] && 0x02; +// output.WheelDropRight = data[checkedValue] && 0x01; +// checkedValue++; +// output.CliffCenter = data[checkedValue] && 0x02; +// output.CliffLeft = data[checkedValue] && 0x04; +// output.CliffRight = data[checkedValue] && 0x01; +// checkedValue++; +// output.EncoderLeft = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// output.EncoderRight = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// output.PWMleft = data[checkedValue]; +// checkedValue++; +// output.PWMright = data[checkedValue]; +// checkedValue++; +// output.ButtonPress = data[checkedValue]; +// checkedValue++; +// output.Charger = data[checkedValue]; +// checkedValue++; +// output.Battery = data[checkedValue]; +// checkedValue++; +// output.overCurrent = data[checkedValue]; +// checkedValue++; +// } +// else if (data[checkedValue] == 0x03) +// { +// checkedValue++; +// if (data[checkedValue] != 0x03) +// return -3; +// checkedValue++; +// output.IRSensorRight = data[checkedValue]; +// checkedValue++; +// output.IRSensorCenter = data[checkedValue]; +// checkedValue++; +// output.IRSensorLeft = data[checkedValue]; +// checkedValue++; +// } +// else if (data[checkedValue] == 0x04) +// { +// checkedValue++; +// if (data[checkedValue] != 0x07) +// return -4; +// checkedValue++; +// output.GyroAngle = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// output.GyroAngleRate = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 5; // 3 unsued +// } +// else if (data[checkedValue] == 0x05) +// { +// checkedValue++; +// if (data[checkedValue] != 0x06) +// return -5; +// checkedValue++; +// output.CliffSensorRight = +// data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// output.CliffSensorCenter = +// data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// output.CliffSensorLeft = +// data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// } +// else if (data[checkedValue] == 0x06) +// { +// checkedValue++; +// if (data[checkedValue] != 0x02) +// return -6; +// checkedValue++; +// output.wheelCurrentLeft = data[checkedValue]; +// checkedValue++; +// output.wheelCurrentRight = data[checkedValue]; +// checkedValue++; +// } +// else if (data[checkedValue] == 0x0A) +// { +// checkedValue++; +// if (data[checkedValue] != 0x04) +// return -7; +// checkedValue++; +// output.extraInfo.HardwareVersionPatch = data[checkedValue]; +// checkedValue++; +// output.extraInfo.HardwareVersionMinor = data[checkedValue]; +// checkedValue++; +// output.extraInfo.HardwareVersionMajor = data[checkedValue]; +// checkedValue += 2; +// } +// else if (data[checkedValue] == 0x0B) +// { +// checkedValue++; +// if (data[checkedValue] != 0x04) +// return -8; +// checkedValue++; +// output.extraInfo.FirmwareVersionPatch = data[checkedValue]; +// checkedValue++; +// output.extraInfo.FirmwareVersionMinor = data[checkedValue]; +// checkedValue++; +// output.extraInfo.FirmwareVersionMajor = data[checkedValue]; +// checkedValue += 2; +// } +// else if (data[checkedValue] == 0x0D) +// { +// checkedValue++; +// if (data[checkedValue] % 2 != 0) +// return -9; +// checkedValue++; +// output.frameId = data[checkedValue]; +// checkedValue++; +// int howmanyFrames = data[checkedValue] / 3; +// checkedValue++; +// output.gyroData.reserve(howmanyFrames); +// output.gyroData.clear(); +// for (int hk = 0; hk < howmanyFrames; hk++) +// { +// TRawGyroData temp; +// temp.x = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// temp.y = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// temp.z = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// output.gyroData.push_back(temp); +// } +// } +// else if (data[checkedValue] == 0x10) +// { +// checkedValue++; +// if (data[checkedValue] != 0x10) +// return -10; +// checkedValue++; +// output.digitalInput = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// output.analogInputCh0 = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// output.analogInputCh1 = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// output.analogInputCh2 = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 2; +// output.analogInputCh3 = data[checkedValue + 1] * 256 + data[checkedValue]; +// checkedValue += 8; // 2+6 +// } +// else if (data[checkedValue] == 0x13) +// { +// checkedValue++; +// if (data[checkedValue] != 0x0C) +// return -11; +// checkedValue++; +// output.extraInfo.UDID0 = data[checkedValue + 3] * 256 * 256 * 256 + +// data[checkedValue + 2] * 256 * 256 + +// data[checkedValue + 1] * 256 + +// data[checkedValue]; +// checkedValue += 4; +// output.extraInfo.UDID1 = data[checkedValue + 3] * 256 * 256 * 256 + +// data[checkedValue + 2] * 256 * 256 + +// data[checkedValue + 1] * 256 + +// data[checkedValue]; +// checkedValue += 4; +// output.extraInfo.UDID2 = data[checkedValue + 3] * 256 * 256 * 256 + +// data[checkedValue + 2] * 256 * 256 + +// data[checkedValue + 1] * 256 + +// data[checkedValue]; +// checkedValue += 4; +// } +// else +// { +// checkedValue++; +// checkedValue += data[checkedValue] + 1; +// } +// } +// return 0; +// } long double CKobuki::gyroToRad(signed short GyroAngle) { From e5c58bff81f77c04d276cbae071fa9cc348fd91c Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 11:21:22 +0200 Subject: [PATCH 05/14] new kobuki parser testing --- src/C++/Driver/src/CKobuki.h | 160 ++++++++++++++-------------- src/C++/Driver/src/KobukiParser.cpp | 103 ++++++++++-------- src/C++/Driver/src/KobukiParser.h | 22 ++-- src/C++/Driver/src/main.cpp | 13 +-- 4 files changed, 156 insertions(+), 142 deletions(-) diff --git a/src/C++/Driver/src/CKobuki.h b/src/C++/Driver/src/CKobuki.h index bf0a75c..963f20d 100755 --- a/src/C++/Driver/src/CKobuki.h +++ b/src/C++/Driver/src/CKobuki.h @@ -32,91 +32,92 @@ #include #include "graph.h" +#include "KobukiParser.h" using namespace std; -typedef struct -{ +// typedef struct +// { - unsigned short x; - unsigned short y; - unsigned short z; +// unsigned short x; +// unsigned short y; +// unsigned short z; -}TRawGyroData; -typedef struct -{ - //Hardware Version - unsigned char HardwareVersionMajor; - unsigned char HardwareVersionMinor; - unsigned char HardwareVersionPatch; - //Firmware Version - unsigned char FirmwareVersionMajor; - unsigned char FirmwareVersionMinor; - unsigned char FirmwareVersionPatch; +// }TRawGyroData; +// typedef struct +// { +// //Hardware Version +// unsigned char HardwareVersionMajor; +// unsigned char HardwareVersionMinor; +// unsigned char HardwareVersionPatch; +// //Firmware Version +// unsigned char FirmwareVersionMajor; +// unsigned char FirmwareVersionMinor; +// unsigned char FirmwareVersionPatch; - //Unique Device IDentifier(UDID) - unsigned int UDID0; - unsigned int UDID1; - unsigned int UDID2; - //Controller Info - unsigned char PIDtype; - unsigned int PIDgainP; - unsigned int PIDgainI; - unsigned int PIDgainD; -}TExtraRequestData; +// //Unique Device IDentifier(UDID) +// unsigned int UDID0; +// unsigned int UDID1; +// unsigned int UDID2; +// //Controller Info +// unsigned char PIDtype; +// unsigned int PIDgainP; +// unsigned int PIDgainI; +// unsigned int PIDgainD; +// }TExtraRequestData; -typedef struct -{ - //---basic package - unsigned short timestamp; - //bumpers - bool BumperLeft; - bool BumperCenter; - bool BumperRight; - //cliff - bool CliffLeft; - bool CliffCenter; - bool CliffRight; - // wheel drop - bool WheelDropLeft; - bool WheelDropRight; - //wheel rotation - unsigned short EncoderRight; - unsigned short EncoderLeft; - unsigned char PWMright; - unsigned char PWMleft; - //buttons - unsigned char ButtonPress;// 0 no, 1 2 4 for button 0 1 2 (7 is all three) - //power - unsigned char Charger; - unsigned char Battery; - unsigned char overCurrent; - //---docking ir - unsigned char IRSensorRight; - unsigned char IRSensorCenter; - unsigned char IRSensorLeft; - //---Inertial Sensor Data - signed short GyroAngle; - unsigned short GyroAngleRate; - //---Cliff Sensor Data - unsigned short CliffSensorRight; - unsigned short CliffSensorCenter; - unsigned short CliffSensorLeft; - //---Current - unsigned char wheelCurrentLeft; - unsigned char wheelCurrentRight; - //---Raw Data Of 3D Gyro - unsigned char frameId; - std::vector gyroData; - //---General Purpose Input - unsigned short digitalInput; - unsigned short analogInputCh0; - unsigned short analogInputCh1; - unsigned short analogInputCh2; - unsigned short analogInputCh3; - //---structure with data that appears only on request - TExtraRequestData extraInfo; -}TKobukiData; +// typedef struct +// { +// //---basic package +// unsigned short timestamp; +// //bumpers +// bool BumperLeft; +// bool BumperCenter; +// bool BumperRight; +// //cliff +// bool CliffLeft; +// bool CliffCenter; +// bool CliffRight; +// // wheel drop +// bool WheelDropLeft; +// bool WheelDropRight; +// //wheel rotation +// unsigned short EncoderRight; +// unsigned short EncoderLeft; +// unsigned char PWMright; +// unsigned char PWMleft; +// //buttons +// unsigned char ButtonPress;// 0 no, 1 2 4 for button 0 1 2 (7 is all three) +// //power +// unsigned char Charger; +// unsigned char Battery; +// unsigned char overCurrent; +// //---docking ir +// unsigned char IRSensorRight; +// unsigned char IRSensorCenter; +// unsigned char IRSensorLeft; +// //---Inertial Sensor Data +// signed short GyroAngle; +// unsigned short GyroAngleRate; +// //---Cliff Sensor Data +// unsigned short CliffSensorRight; +// unsigned short CliffSensorCenter; +// unsigned short CliffSensorLeft; +// //---Current +// unsigned char wheelCurrentLeft; +// unsigned char wheelCurrentRight; +// //---Raw Data Of 3D Gyro +// unsigned char frameId; +// std::vector gyroData; +// //---General Purpose Input +// unsigned short digitalInput; +// unsigned short analogInputCh0; +// unsigned short analogInputCh1; +// unsigned short analogInputCh2; +// unsigned short analogInputCh3; +// //---structure with data that appears only on request +// TExtraRequestData extraInfo; +// }TKobukiData; typedef long(*src_callback_kobuki_data) (void *user_data, TKobukiData &Kobuki_data); @@ -163,6 +164,7 @@ public: + private: int HCom; pthread_t threadHandle; // handle to the thread @@ -171,10 +173,8 @@ private: src_callback_kobuki_data callbackFunction; void *userData; bool enabledCommands; - int parseKobukiMessage(TKobukiData &output, unsigned char *data ); int connect(char *portname); unsigned char *readKobukiMessage(); - int checkChecksum(unsigned char *data); //--start measurement in a new thread (reading runs in a new thread. it needs to be stopped if we want to send a request) static void * KobukiProcess(void *param) diff --git a/src/C++/Driver/src/KobukiParser.cpp b/src/C++/Driver/src/KobukiParser.cpp index 1b36454..a0cf0b0 100644 --- a/src/C++/Driver/src/KobukiParser.cpp +++ b/src/C++/Driver/src/KobukiParser.cpp @@ -2,7 +2,7 @@ int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { //check if the checksum is correct - int rtrnvalue = CKobuki.checkChecksum(data); + int rtrnvalue = checkChecksum(data); if (rtrnvalue != 0) return -2; @@ -17,51 +17,51 @@ int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { parseBasicData(output, data, checkedValue); } break; - case 0x03: - if (length == 0x03) { - parseIRSensorData(output, data, checkedValue); - } - break; - case 0x04: - if (length == 0x07) { - parseGyroData(output, data, checkedValue); - } - break; - case 0x05: - if (length == 0x06) { - parseCliffSensorData(output, data, checkedValue); - } - break; - case 0x06: - if (length == 0x02) { - parseWheelCurrentData(output, data, checkedValue); - } - break; - case 0x0A: - if (length == 0x04) { - parseHardwareVersionData(output, data, checkedValue); - } - break; - case 0x0B: - if (length == 0x04) { - parseFirmwareVersionData(output, data, checkedValue); - } - break; - case 0x0D: - if (length == 0x0D) { - parseXYZData(output, data, checkedValue); - } - break; - case 0x10: - if (length == 0x10) { - parseDigitalAnalogInputData(output, data, checkedValue); - } - break; - case 0x13: - if (length == 0x0C) { - parseUDIDData(output, data, checkedValue); - } - break; + // case 0x03: + // if (length == 0x03) { + // parseIRSensorData(output, data, checkedValue); + // } + // break; + // case 0x04: + // if (length == 0x07) { + // parseGyroData(output, data, checkedValue); + // } + // break; + // case 0x05: + // if (length == 0x06) { + // parseCliffSensorData(output, data, checkedValue); + // } + // break; + // case 0x06: + // if (length == 0x02) { + // parseWheelCurrentData(output, data, checkedValue); + // } + // break; + // case 0x0A: + // if (length == 0x04) { + // parseHardwareVersionData(output, data, checkedValue); + // } + // break; + // case 0x0B: + // if (length == 0x04) { + // parseFirmwareVersionData(output, data, checkedValue); + // } + // break; + // case 0x0D: + // if (length == 0x0D) { + // parseXYZData(output, data, checkedValue); + // } + // break; + // case 0x10: + // if (length == 0x10) { + // parseDigitalAnalogInputData(output, data, checkedValue); + // } + // break; + // case 0x13: + // if (length == 0x0C) { + // parseUDIDData(output, data, checkedValue); + // } + // break; default: checkedValue += length + 2; // Skip data block if nothing matches break; @@ -104,3 +104,14 @@ int KobukiParser::parseBasicData(TKobukiData &output, unsigned char *data, int & return 0; } + + +int KobukiParser::checkChecksum(unsigned char *data) +{ // najprv hlavicku + unsigned char chckSum = 0; + for (int i = 0; i < data[0] + 2; i++) + { + chckSum ^= data[i]; + } + return chckSum; // 0 ak je vsetko v poriadku,inak nejake cislo +} \ No newline at end of file diff --git a/src/C++/Driver/src/KobukiParser.h b/src/C++/Driver/src/KobukiParser.h index 37ddbf1..783ddf4 100644 --- a/src/C++/Driver/src/KobukiParser.h +++ b/src/C++/Driver/src/KobukiParser.h @@ -2,7 +2,6 @@ #define KOBUKIPARSER_H #include -#include "CKobuki.h" struct TRawGyroData { int x, y, z; @@ -32,19 +31,22 @@ struct TKobukiData { class KobukiParser { public: int parseKobukiMessage(TKobukiData &output, unsigned char *data); + TKobukiData data; + private: int checkChecksum(unsigned char *data); int parseBasicData(TKobukiData &output, unsigned char *data, int &checkedValue); - int parseIRSensorData(TKobukiData &output, unsigned char *data, int &checkedValue); - int parseGyroData(TKobukiData &output, unsigned char *data, int &checkedValue); - int parseCliffSensorData(TKobukiData &output, unsigned char *data, int &checkedValue); - int parseWheelCurrentData(TKobukiData &output, unsigned char *data, int &checkedValue); - int parseHardwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue); - int parseFirmwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue); - int parseXYZData(TKobukiData &output, unsigned char *data, int &checkedValue); - int parseDigitalAnalogInputData(TKobukiData &output, unsigned char *data, int &checkedValue); - int parseUDIDData(TKobukiData &output, unsigned char *data, int &checkedValue); + // int parseIRSensorData(TKobukiData &output, unsigned char *data, int &checkedValue); + // int parseGyroData(TKobukiData &output, unsigned char *data, int &checkedValue); + // int parseCliffSensorData(TKobukiData &output, unsigned char *data, int &checkedValue); + // int parseWheelCurrentData(TKobukiData &output, unsigned char *data, int &checkedValue); + // int parseHardwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue); + // int parseFirmwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue); + // int parseXYZData(TKobukiData &output, unsigned char *data, int &checkedValue); + // int parseDigitalAnalogInputData(TKobukiData &output, unsigned char *data, int &checkedValue); + // int parseUDIDData(TKobukiData &output, unsigned char *data, int &checkedValue); + }; #endif \ No newline at end of file diff --git a/src/C++/Driver/src/main.cpp b/src/C++/Driver/src/main.cpp index e17fe97..04e90f4 100644 --- a/src/C++/Driver/src/main.cpp +++ b/src/C++/Driver/src/main.cpp @@ -4,26 +4,27 @@ #include #include "graph.h" + using namespace std; CKobuki robot; int movement(); +int checkCenterCliff(); int main() { unsigned char *null_ptr(0); robot.startCommunication("/dev/ttyUSB0", true, null_ptr); - usleep(1 * 1000 * 1000); - cout << "Enter commando"; - thread mv(movement); - usleep(30 * 1000 * 1000); - mv.join(); //only exit once thread one is done running + // thread mv(movement); + // mv.join(); //only exit once thread one is done running + + checkCenterCliff(); } int checkCenterCliff() { while (true) { - std::cout << "cliffsensordata:" << robot.data.CliffSensorCenter << std::endl; + std::cout << "cliffsensordata:" << parser.data.CliffSensorCenter << std::endl; } } From fa221cf421df17bc063e1a771cf723cd2c3a706c Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 13:22:52 +0200 Subject: [PATCH 06/14] made more changes it compiles now --- .gitignore | 1 + src/C++/Driver/CMakeLists.txt | 4 ++-- src/C++/Driver/Makefile | 27 +++++++++++++++++++++++++++ src/C++/Driver/src/CKobuki.cpp | 14 +++++++------- src/C++/Driver/src/CKobuki.h | 8 +++++--- src/C++/Driver/src/KobukiParser.cpp | 3 +++ src/C++/Driver/src/main.cpp | 5 +++-- 7 files changed, 48 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 9e2042e..8d10e8c 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ src/C++/Driver/vgcore.42611 src/Socket/a.out src/C++/Driver/cmake_install.cmake src/C++/Socket/a.out +src/C++/Driver/Makefile diff --git a/src/C++/Driver/CMakeLists.txt b/src/C++/Driver/CMakeLists.txt index e497aa3..8416ecb 100644 --- a/src/C++/Driver/CMakeLists.txt +++ b/src/C++/Driver/CMakeLists.txt @@ -5,10 +5,10 @@ project(kobuki_control) find_package( OpenCV REQUIRED ) set(SOURCE_FILES - src/CKobuki.cpp - src/CKobuki.h src/KobukiParser.cpp src/KobukiParser.h + src/CKobuki.cpp + src/CKobuki.h src/main.cpp) add_executable(kobuki_control ${SOURCE_FILES}) diff --git a/src/C++/Driver/Makefile b/src/C++/Driver/Makefile index ea53047..c8881dc 100644 --- a/src/C++/Driver/Makefile +++ b/src/C++/Driver/Makefile @@ -153,6 +153,30 @@ src/CKobuki.cpp.s: $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/CKobuki.cpp.s .PHONY : src/CKobuki.cpp.s +src/KobukiParser.o: src/KobukiParser.cpp.o +.PHONY : src/KobukiParser.o + +# target to build an object file +src/KobukiParser.cpp.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/KobukiParser.cpp.o +.PHONY : src/KobukiParser.cpp.o + +src/KobukiParser.i: src/KobukiParser.cpp.i +.PHONY : src/KobukiParser.i + +# target to preprocess a source file +src/KobukiParser.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/KobukiParser.cpp.i +.PHONY : src/KobukiParser.cpp.i + +src/KobukiParser.s: src/KobukiParser.cpp.s +.PHONY : src/KobukiParser.s + +# target to generate assembly for a file +src/KobukiParser.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/KobukiParser.cpp.s +.PHONY : src/KobukiParser.cpp.s + src/main.o: src/main.cpp.o .PHONY : src/main.o @@ -189,6 +213,9 @@ help: @echo "... src/CKobuki.o" @echo "... src/CKobuki.i" @echo "... src/CKobuki.s" + @echo "... src/KobukiParser.o" + @echo "... src/KobukiParser.i" + @echo "... src/KobukiParser.s" @echo "... src/main.o" @echo "... src/main.i" @echo "... src/main.s" diff --git a/src/C++/Driver/src/CKobuki.cpp b/src/C++/Driver/src/CKobuki.cpp index 7731f31..9b4687d 100755 --- a/src/C++/Driver/src/CKobuki.cpp +++ b/src/C++/Driver/src/CKobuki.cpp @@ -4,13 +4,12 @@ #include #include + // plot p; static std::vector vectorX; static std::vector vectorY; static std::vector vectorGyroTheta; -KobukiParser parser; - // obsluha tty pod unixom int set_interface_attribs2(int fd, int speed, int parity) { @@ -267,16 +266,17 @@ void CKobuki::setSound(int noteinHz, int duration) pocet = write(HCom, &message, 9); } -void CKobuki::startCommunication(char *portname, bool CommandsEnabled, - void *userDataL) +void CKobuki::startCommunication(char *portname, bool CommandsEnabled, void *userDataL) { connect(portname); enableCommands(CommandsEnabled); userData = userDataL; int pthread_result; - pthread_result = - pthread_create(&threadHandle, NULL, KobukiProcess, (void *)this); + pthread_result = pthread_create(&threadHandle, NULL, KobukiProcess, (void *)this); + if (pthread_result != 0) { + std::cerr << "Error creating thread: " << pthread_result << std::endl; + } } int CKobuki::measure() @@ -295,7 +295,7 @@ int CKobuki::measure() // citat if (ok == 0) { - loop(userData, data); + loop(userData, parser.data); } free(message); } diff --git a/src/C++/Driver/src/CKobuki.h b/src/C++/Driver/src/CKobuki.h index 963f20d..9a99197 100755 --- a/src/C++/Driver/src/CKobuki.h +++ b/src/C++/Driver/src/CKobuki.h @@ -30,12 +30,12 @@ #include #include #include - -#include "graph.h" #include "KobukiParser.h" +#include "graph.h" using namespace std; + // typedef struct // { @@ -125,6 +125,7 @@ typedef long(*src_callback_kobuki_data) (void *user_data, TKobukiData &Kobuki_da class CKobuki { public: + CKobuki() { stopVlakno = 0; std::cout << "kobuki instantiated" << std::endl; @@ -159,13 +160,14 @@ public: void doRotation(long double th); void goToXy(long double xx, long double yy); std::ofstream odometry_log; - TKobukiData data; private: + KobukiParser parser; + int HCom; pthread_t threadHandle; // handle to the thread int threadID; // thread id diff --git a/src/C++/Driver/src/KobukiParser.cpp b/src/C++/Driver/src/KobukiParser.cpp index a0cf0b0..c7ae3b5 100644 --- a/src/C++/Driver/src/KobukiParser.cpp +++ b/src/C++/Driver/src/KobukiParser.cpp @@ -1,7 +1,9 @@ #include "KobukiParser.h" +#include int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { //check if the checksum is correct + std::cout << "Parsing message" << std::endl; int rtrnvalue = checkChecksum(data); if (rtrnvalue != 0) return -2; @@ -64,6 +66,7 @@ int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { // break; default: checkedValue += length + 2; // Skip data block if nothing matches + std::cout << "Unknown header: " << header << std::endl; break; } } diff --git a/src/C++/Driver/src/main.cpp b/src/C++/Driver/src/main.cpp index 04e90f4..6d28577 100644 --- a/src/C++/Driver/src/main.cpp +++ b/src/C++/Driver/src/main.cpp @@ -9,6 +9,7 @@ using namespace std; CKobuki robot; int movement(); int checkCenterCliff(); + KobukiParser parser; int main() { @@ -17,14 +18,14 @@ int main() // thread mv(movement); // mv.join(); //only exit once thread one is done running - checkCenterCliff(); + // checkCenterCliff(); } int checkCenterCliff() { while (true) { - std::cout << "cliffsensordata:" << parser.data.CliffSensorCenter << std::endl; + std::cout << "cliffsensordata:" << parser.data.BumperCenter << std::endl; } } From 7e4884f1bc7d0abb3dc52439d764d32eca3f49fe Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 13:34:36 +0200 Subject: [PATCH 07/14] testing sensors --- src/C++/Driver/src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/C++/Driver/src/main.cpp b/src/C++/Driver/src/main.cpp index 6d28577..a52cfdd 100644 --- a/src/C++/Driver/src/main.cpp +++ b/src/C++/Driver/src/main.cpp @@ -18,14 +18,14 @@ int main() // thread mv(movement); // mv.join(); //only exit once thread one is done running - // checkCenterCliff(); + checkCenterCliff(); } int checkCenterCliff() { while (true) { - std::cout << "cliffsensordata:" << parser.data.BumperCenter << std::endl; + std::cout << "cliffsensordata:" << parser.data.CliffCenter << std::endl; } } From 76c088bd50a82fa6605e4245fbe77e0542404ed2 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 15:49:52 +0200 Subject: [PATCH 08/14] can finaly read from main now parser cleanup (again) --- src/C++/Driver/src/CKobuki.h | 2 +- src/C++/Driver/src/KobukiParser.cpp | 291 ++++++++++++++++++---------- src/C++/Driver/src/KobukiParser.h | 2 + src/C++/Driver/src/main.cpp | 10 +- 4 files changed, 197 insertions(+), 108 deletions(-) diff --git a/src/C++/Driver/src/CKobuki.h b/src/C++/Driver/src/CKobuki.h index 9a99197..f7f9e4e 100755 --- a/src/C++/Driver/src/CKobuki.h +++ b/src/C++/Driver/src/CKobuki.h @@ -160,13 +160,13 @@ public: void doRotation(long double th); void goToXy(long double xx, long double yy); std::ofstream odometry_log; + KobukiParser parser; private: - KobukiParser parser; int HCom; pthread_t threadHandle; // handle to the thread diff --git a/src/C++/Driver/src/KobukiParser.cpp b/src/C++/Driver/src/KobukiParser.cpp index c7ae3b5..2dcd1f0 100644 --- a/src/C++/Driver/src/KobukiParser.cpp +++ b/src/C++/Driver/src/KobukiParser.cpp @@ -2,119 +2,206 @@ #include int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { - //check if the checksum is correct - std::cout << "Parsing message" << std::endl; int rtrnvalue = checkChecksum(data); + // ak je zly checksum,tak kaslat na to if (rtrnvalue != 0) return -2; int checkedValue = 1; - while (checkedValue < data[0]) { - unsigned char header = data[checkedValue]; - unsigned char length = data[checkedValue + 1]; - - switch (header) { - case 0x01: - if (length == 0x0F) { - parseBasicData(output, data, checkedValue); - } - break; - // case 0x03: - // if (length == 0x03) { - // parseIRSensorData(output, data, checkedValue); - // } - // break; - // case 0x04: - // if (length == 0x07) { - // parseGyroData(output, data, checkedValue); - // } - // break; - // case 0x05: - // if (length == 0x06) { - // parseCliffSensorData(output, data, checkedValue); - // } - // break; - // case 0x06: - // if (length == 0x02) { - // parseWheelCurrentData(output, data, checkedValue); - // } - // break; - // case 0x0A: - // if (length == 0x04) { - // parseHardwareVersionData(output, data, checkedValue); - // } - // break; - // case 0x0B: - // if (length == 0x04) { - // parseFirmwareVersionData(output, data, checkedValue); - // } - // break; - // case 0x0D: - // if (length == 0x0D) { - // parseXYZData(output, data, checkedValue); - // } - // break; - // case 0x10: - // if (length == 0x10) { - // parseDigitalAnalogInputData(output, data, checkedValue); - // } - // break; - // case 0x13: - // if (length == 0x0C) { - // parseUDIDData(output, data, checkedValue); - // } - // break; - default: - checkedValue += length + 2; // Skip data block if nothing matches - std::cout << "Unknown header: " << header << std::endl; - break; + // kym neprejdeme celu dlzku + while (checkedValue < data[0]) + { + // basic data subload + if (data[checkedValue] == 0x01) + { + checkedValue++; + if (data[checkedValue] != 0x0F) + return -1; + checkedValue++; + output.timestamp = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.BumperCenter = data[checkedValue] && 0x02; + std::cout << "BumperCenter: " << output.BumperCenter << std::endl; + output.BumperLeft = data[checkedValue] && 0x04; + output.BumperRight = data[checkedValue] && 0x01; + checkedValue++; + output.WheelDropLeft = data[checkedValue] && 0x02; + output.WheelDropRight = data[checkedValue] && 0x01; + checkedValue++; + output.CliffCenter = data[checkedValue] && 0x02; + output.CliffLeft = data[checkedValue] && 0x04; + output.CliffRight = data[checkedValue] && 0x01; + checkedValue++; + output.EncoderLeft = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.EncoderRight = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.PWMleft = data[checkedValue]; + checkedValue++; + output.PWMright = data[checkedValue]; + checkedValue++; + output.ButtonPress = data[checkedValue]; + checkedValue++; + output.Charger = data[checkedValue]; + checkedValue++; + output.Battery = data[checkedValue]; + checkedValue++; + output.overCurrent = data[checkedValue]; + checkedValue++; + } + else if (data[checkedValue] == 0x03) + { + checkedValue++; + if (data[checkedValue] != 0x03) + return -3; + checkedValue++; + output.IRSensorRight = data[checkedValue]; + checkedValue++; + output.IRSensorCenter = data[checkedValue]; + checkedValue++; + output.IRSensorLeft = data[checkedValue]; + checkedValue++; + } + else if (data[checkedValue] == 0x04) + { + checkedValue++; + if (data[checkedValue] != 0x07) + return -4; + checkedValue++; + output.GyroAngle = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.GyroAngleRate = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 5; // 3 unsued + } + else if (data[checkedValue] == 0x05) + { + checkedValue++; + if (data[checkedValue] != 0x06) + return -5; + checkedValue++; + output.CliffSensorRight = + data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.CliffSensorCenter = + data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.CliffSensorLeft = + data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + } + else if (data[checkedValue] == 0x06) + { + checkedValue++; + if (data[checkedValue] != 0x02) + return -6; + checkedValue++; + output.wheelCurrentLeft = data[checkedValue]; + checkedValue++; + output.wheelCurrentRight = data[checkedValue]; + checkedValue++; + } + else if (data[checkedValue] == 0x0A) + { + checkedValue++; + if (data[checkedValue] != 0x04) + return -7; + checkedValue++; + output.extraInfo.HardwareVersionPatch = data[checkedValue]; + checkedValue++; + output.extraInfo.HardwareVersionMinor = data[checkedValue]; + checkedValue++; + output.extraInfo.HardwareVersionMajor = data[checkedValue]; + checkedValue += 2; + } + else if (data[checkedValue] == 0x0B) + { + checkedValue++; + if (data[checkedValue] != 0x04) + return -8; + checkedValue++; + output.extraInfo.FirmwareVersionPatch = data[checkedValue]; + checkedValue++; + output.extraInfo.FirmwareVersionMinor = data[checkedValue]; + checkedValue++; + output.extraInfo.FirmwareVersionMajor = data[checkedValue]; + checkedValue += 2; + } + else if (data[checkedValue] == 0x0D) + { + checkedValue++; + if (data[checkedValue] % 2 != 0) + return -9; + checkedValue++; + output.frameId = data[checkedValue]; + checkedValue++; + int howmanyFrames = data[checkedValue] / 3; + checkedValue++; + output.gyroData.reserve(howmanyFrames); + output.gyroData.clear(); + for (int hk = 0; hk < howmanyFrames; hk++) + { + TRawGyroData temp; + temp.x = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + temp.y = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + temp.z = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.gyroData.push_back(temp); + } + } + else if (data[checkedValue] == 0x10) + { + checkedValue++; + if (data[checkedValue] != 0x10) + return -10; + checkedValue++; + output.digitalInput = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh0 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh1 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh2 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh3 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 8; // 2+6 + } + else if (data[checkedValue] == 0x13) + { + checkedValue++; + if (data[checkedValue] != 0x0C) + return -11; + checkedValue++; + output.extraInfo.UDID0 = data[checkedValue + 3] * 256 * 256 * 256 + + data[checkedValue + 2] * 256 * 256 + + data[checkedValue + 1] * 256 + + data[checkedValue]; + checkedValue += 4; + output.extraInfo.UDID1 = data[checkedValue + 3] * 256 * 256 * 256 + + data[checkedValue + 2] * 256 * 256 + + data[checkedValue + 1] * 256 + + data[checkedValue]; + checkedValue += 4; + output.extraInfo.UDID2 = data[checkedValue + 3] * 256 * 256 * 256 + + data[checkedValue + 2] * 256 * 256 + + data[checkedValue + 1] * 256 + + data[checkedValue]; + checkedValue += 4; + } + else + { + checkedValue++; + checkedValue += data[checkedValue] + 1; } } return 0; } -int KobukiParser::parseBasicData(TKobukiData &output, unsigned char *data, int &checkedValue) { - checkedValue += 2; // Skip header and length - output.timestamp = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.BumperCenter = data[checkedValue] & 0x02; - output.BumperLeft = data[checkedValue] & 0x04; - output.BumperRight = data[checkedValue] & 0x01; - checkedValue++; - output.WheelDropLeft = data[checkedValue] & 0x02; - output.WheelDropRight = data[checkedValue] & 0x01; - checkedValue++; - output.CliffCenter = data[checkedValue] & 0x02; - output.CliffLeft = data[checkedValue] & 0x04; - output.CliffRight = data[checkedValue] & 0x01; - checkedValue++; - output.EncoderLeft = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.EncoderRight = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.PWMleft = data[checkedValue]; - checkedValue++; - output.PWMright = data[checkedValue]; - checkedValue++; - output.ButtonPress = data[checkedValue]; - checkedValue++; - output.Charger = data[checkedValue]; - checkedValue++; - output.Battery = data[checkedValue]; - checkedValue++; - output.overCurrent = data[checkedValue]; - checkedValue++; - return 0; -} - - - -int KobukiParser::checkChecksum(unsigned char *data) -{ // najprv hlavicku +int KobukiParser::checkChecksum(unsigned char *data) { unsigned char chckSum = 0; - for (int i = 0; i < data[0] + 2; i++) - { + for (int i = 0; i < data[0] + 2; i++) { chckSum ^= data[i]; } - return chckSum; // 0 ak je vsetko v poriadku,inak nejake cislo + return chckSum; // 0 if everything is correct, otherwise some number } \ No newline at end of file diff --git a/src/C++/Driver/src/KobukiParser.h b/src/C++/Driver/src/KobukiParser.h index 783ddf4..1e79bbd 100644 --- a/src/C++/Driver/src/KobukiParser.h +++ b/src/C++/Driver/src/KobukiParser.h @@ -26,6 +26,8 @@ struct TKobukiData { int wheelCurrentLeft, wheelCurrentRight; int digitalInput, analogInputCh0, analogInputCh1, analogInputCh2, analogInputCh3; int frameId; + TExtraInfo extraInfo; // Add extraInfo member + std::vector gyroData; // Add gyroData member }; class KobukiParser { diff --git a/src/C++/Driver/src/main.cpp b/src/C++/Driver/src/main.cpp index a52cfdd..62d4cec 100644 --- a/src/C++/Driver/src/main.cpp +++ b/src/C++/Driver/src/main.cpp @@ -4,12 +4,10 @@ #include #include "graph.h" - using namespace std; CKobuki robot; int movement(); int checkCenterCliff(); - KobukiParser parser; int main() { @@ -19,16 +17,18 @@ int main() // mv.join(); //only exit once thread one is done running checkCenterCliff(); + + return 0; } int checkCenterCliff() { - while (true) - { - std::cout << "cliffsensordata:" << parser.data.CliffCenter << std::endl; + while(true){ + std::cout << robot.parser.data.CliffSensorCenter << endl; } } + int movement() { int text; From 65b5a3c41711a7b8909b5de74c373cb778d4ced3 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 15:53:46 +0200 Subject: [PATCH 09/14] parser finaly works --- src/C++/Driver/src/KobukiParser.cpp | 384 ++++++++++++++-------------- 1 file changed, 196 insertions(+), 188 deletions(-) diff --git a/src/C++/Driver/src/KobukiParser.cpp b/src/C++/Driver/src/KobukiParser.cpp index 2dcd1f0..b43c487 100644 --- a/src/C++/Driver/src/KobukiParser.cpp +++ b/src/C++/Driver/src/KobukiParser.cpp @@ -3,201 +3,209 @@ int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { int rtrnvalue = checkChecksum(data); - // ak je zly checksum,tak kaslat na to - if (rtrnvalue != 0) + if (rtrnvalue != 0) { + std::cerr << "Invalid checksum" << std::endl; return -2; + } int checkedValue = 1; - // kym neprejdeme celu dlzku - while (checkedValue < data[0]) - { - // basic data subload - if (data[checkedValue] == 0x01) - { - checkedValue++; - if (data[checkedValue] != 0x0F) - return -1; - checkedValue++; - output.timestamp = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.BumperCenter = data[checkedValue] && 0x02; - std::cout << "BumperCenter: " << output.BumperCenter << std::endl; - output.BumperLeft = data[checkedValue] && 0x04; - output.BumperRight = data[checkedValue] && 0x01; - checkedValue++; - output.WheelDropLeft = data[checkedValue] && 0x02; - output.WheelDropRight = data[checkedValue] && 0x01; - checkedValue++; - output.CliffCenter = data[checkedValue] && 0x02; - output.CliffLeft = data[checkedValue] && 0x04; - output.CliffRight = data[checkedValue] && 0x01; - checkedValue++; - output.EncoderLeft = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.EncoderRight = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.PWMleft = data[checkedValue]; - checkedValue++; - output.PWMright = data[checkedValue]; - checkedValue++; - output.ButtonPress = data[checkedValue]; - checkedValue++; - output.Charger = data[checkedValue]; - checkedValue++; - output.Battery = data[checkedValue]; - checkedValue++; - output.overCurrent = data[checkedValue]; - checkedValue++; - } - else if (data[checkedValue] == 0x03) - { - checkedValue++; - if (data[checkedValue] != 0x03) - return -3; - checkedValue++; - output.IRSensorRight = data[checkedValue]; - checkedValue++; - output.IRSensorCenter = data[checkedValue]; - checkedValue++; - output.IRSensorLeft = data[checkedValue]; - checkedValue++; - } - else if (data[checkedValue] == 0x04) - { - checkedValue++; - if (data[checkedValue] != 0x07) - return -4; - checkedValue++; - output.GyroAngle = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.GyroAngleRate = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 5; // 3 unsued - } - else if (data[checkedValue] == 0x05) - { - checkedValue++; - if (data[checkedValue] != 0x06) - return -5; - checkedValue++; - output.CliffSensorRight = - data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.CliffSensorCenter = - data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.CliffSensorLeft = - data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - } - else if (data[checkedValue] == 0x06) - { - checkedValue++; - if (data[checkedValue] != 0x02) - return -6; - checkedValue++; - output.wheelCurrentLeft = data[checkedValue]; - checkedValue++; - output.wheelCurrentRight = data[checkedValue]; - checkedValue++; - } - else if (data[checkedValue] == 0x0A) - { - checkedValue++; - if (data[checkedValue] != 0x04) - return -7; - checkedValue++; - output.extraInfo.HardwareVersionPatch = data[checkedValue]; - checkedValue++; - output.extraInfo.HardwareVersionMinor = data[checkedValue]; - checkedValue++; - output.extraInfo.HardwareVersionMajor = data[checkedValue]; - checkedValue += 2; - } - else if (data[checkedValue] == 0x0B) - { - checkedValue++; - if (data[checkedValue] != 0x04) - return -8; - checkedValue++; - output.extraInfo.FirmwareVersionPatch = data[checkedValue]; - checkedValue++; - output.extraInfo.FirmwareVersionMinor = data[checkedValue]; - checkedValue++; - output.extraInfo.FirmwareVersionMajor = data[checkedValue]; - checkedValue += 2; - } - else if (data[checkedValue] == 0x0D) - { - checkedValue++; - if (data[checkedValue] % 2 != 0) - return -9; - checkedValue++; - output.frameId = data[checkedValue]; - checkedValue++; - int howmanyFrames = data[checkedValue] / 3; - checkedValue++; - output.gyroData.reserve(howmanyFrames); - output.gyroData.clear(); - for (int hk = 0; hk < howmanyFrames; hk++) - { - TRawGyroData temp; - temp.x = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - temp.y = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - temp.z = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.gyroData.push_back(temp); - } - } - else if (data[checkedValue] == 0x10) - { - checkedValue++; - if (data[checkedValue] != 0x10) - return -10; - checkedValue++; - output.digitalInput = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh0 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh1 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh2 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh3 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 8; // 2+6 - } - else if (data[checkedValue] == 0x13) - { - checkedValue++; - if (data[checkedValue] != 0x0C) - return -11; - checkedValue++; - output.extraInfo.UDID0 = data[checkedValue + 3] * 256 * 256 * 256 + - data[checkedValue + 2] * 256 * 256 + - data[checkedValue + 1] * 256 + - data[checkedValue]; - checkedValue += 4; - output.extraInfo.UDID1 = data[checkedValue + 3] * 256 * 256 * 256 + - data[checkedValue + 2] * 256 * 256 + - data[checkedValue + 1] * 256 + - data[checkedValue]; - checkedValue += 4; - output.extraInfo.UDID2 = data[checkedValue + 3] * 256 * 256 * 256 + - data[checkedValue + 2] * 256 * 256 + - data[checkedValue + 1] * 256 + - data[checkedValue]; - checkedValue += 4; - } - else - { - checkedValue++; - checkedValue += data[checkedValue] + 1; + while (checkedValue < data[0]) { + unsigned char dataType = data[checkedValue]; + unsigned char dataLength = data[checkedValue + 1]; + checkedValue += 2; + + switch (dataType) { + case 0x01: + if (dataLength == 0x0F) { + output.timestamp = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.BumperCenter = data[checkedValue] & 0x02; + std::cout << "BumperCenter: " << output.BumperCenter << std::endl; + output.BumperLeft = data[checkedValue] & 0x04; + output.BumperRight = data[checkedValue] & 0x01; + checkedValue++; + output.WheelDropLeft = data[checkedValue] & 0x02; + output.WheelDropRight = data[checkedValue] & 0x01; + checkedValue++; + output.CliffCenter = data[checkedValue] & 0x02; + output.CliffLeft = data[checkedValue] & 0x04; + output.CliffRight = data[checkedValue] & 0x01; + checkedValue++; + output.EncoderLeft = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.EncoderRight = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.PWMleft = data[checkedValue]; + checkedValue++; + output.PWMright = data[checkedValue]; + checkedValue++; + output.ButtonPress = data[checkedValue]; + checkedValue++; + output.Charger = data[checkedValue]; + checkedValue++; + output.Battery = data[checkedValue]; + checkedValue++; + output.overCurrent = data[checkedValue]; + checkedValue++; + } else { + std::cerr << "Invalid data length for type 0x01" << std::endl; + checkedValue += dataLength; + } + break; + + case 0x03: + if (dataLength == 0x03) { + output.IRSensorRight = data[checkedValue]; + checkedValue++; + output.IRSensorCenter = data[checkedValue]; + checkedValue++; + output.IRSensorLeft = data[checkedValue]; + checkedValue++; + } else { + std::cerr << "Invalid data length for type 0x03" << std::endl; + checkedValue += dataLength; + } + break; + + case 0x04: + if (dataLength == 0x07) { + output.GyroAngle = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.GyroAngleRate = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 5; // 3 unused + } else { + std::cerr << "Invalid data length for type 0x04" << std::endl; + checkedValue += dataLength; + } + break; + + case 0x05: + if (dataLength == 0x06) { + output.CliffSensorRight = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.CliffSensorCenter = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.CliffSensorLeft = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + } else { + std::cerr << "Invalid data length for type 0x05" << std::endl; + checkedValue += dataLength; + } + break; + + case 0x06: + if (dataLength == 0x02) { + output.wheelCurrentLeft = data[checkedValue]; + checkedValue++; + output.wheelCurrentRight = data[checkedValue]; + checkedValue++; + } else { + std::cerr << "Invalid data length for type 0x06" << std::endl; + checkedValue += dataLength; + } + break; + + case 0x0A: + if (dataLength == 0x04) { + output.extraInfo.HardwareVersionPatch = data[checkedValue]; + checkedValue++; + output.extraInfo.HardwareVersionMinor = data[checkedValue]; + checkedValue++; + output.extraInfo.HardwareVersionMajor = data[checkedValue]; + checkedValue += 2; + } else { + std::cerr << "Invalid data length for type 0x0A" << std::endl; + checkedValue += dataLength; + } + break; + + case 0x0B: + if (dataLength == 0x04) { + output.extraInfo.FirmwareVersionPatch = data[checkedValue]; + checkedValue++; + output.extraInfo.FirmwareVersionMinor = data[checkedValue]; + checkedValue++; + output.extraInfo.FirmwareVersionMajor = data[checkedValue]; + checkedValue += 2; + } else { + std::cerr << "Invalid data length for type 0x0B" << std::endl; + checkedValue += dataLength; + } + break; + + case 0x0D: + if (dataLength % 2 == 0) { + output.frameId = data[checkedValue]; + checkedValue++; + int howmanyFrames = data[checkedValue] / 3; + checkedValue++; + output.gyroData.reserve(howmanyFrames); + output.gyroData.clear(); + for (int hk = 0; hk < howmanyFrames; hk++) { + TRawGyroData temp; + temp.x = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + temp.y = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + temp.z = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.gyroData.push_back(temp); + } + } else { + std::cerr << "Invalid data length for type 0x0D" << std::endl; + checkedValue += dataLength; + } + break; + + case 0x10: + if (dataLength == 0x10) { + output.digitalInput = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh0 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh1 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh2 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh3 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 8; // 2+6 + } else { + std::cerr << "Invalid data length for type 0x10" << std::endl; + checkedValue += dataLength; + } + break; + + case 0x13: + if (dataLength == 0x0C) { + output.extraInfo.UDID0 = data[checkedValue + 3] * 256 * 256 * 256 + + data[checkedValue + 2] * 256 * 256 + + data[checkedValue + 1] * 256 + + data[checkedValue]; + checkedValue += 4; + output.extraInfo.UDID1 = data[checkedValue + 3] * 256 * 256 * 256 + + data[checkedValue + 2] * 256 * 256 + + data[checkedValue + 1] * 256 + + data[checkedValue]; + checkedValue += 4; + output.extraInfo.UDID2 = data[checkedValue + 3] * 256 * 256 * 256 + + data[checkedValue + 2] * 256 * 256 + + data[checkedValue + 1] * 256 + + data[checkedValue]; + checkedValue += 4; + } else { + std::cerr << "Invalid data length for type 0x13" << std::endl; + checkedValue += dataLength; + } + break; + + default: + std::cerr << "Unknown data type: " << std::hex << static_cast(dataType) << std::dec << std::endl; + checkedValue += dataLength; + break; } } return 0; } - int KobukiParser::checkChecksum(unsigned char *data) { unsigned char chckSum = 0; for (int i = 0; i < data[0] + 2; i++) { From 055eccc1600fa5447207e7864e5243f51a0d4e94 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 15:54:12 +0200 Subject: [PATCH 10/14] gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8d10e8c..9ed5757 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ src/Socket/a.out src/C++/Driver/cmake_install.cmake src/C++/Socket/a.out src/C++/Driver/Makefile +src/C++/Driver/vgcore* From dc070fe46c1bd5767997382046a9de0471053f41 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 21:01:01 +0200 Subject: [PATCH 11/14] cleanup --- src/C++/Driver/src/KobukiParser.cpp | 270 ++++++++++++++++------------ src/C++/Driver/src/KobukiParser.h | 19 +- 2 files changed, 168 insertions(+), 121 deletions(-) diff --git a/src/C++/Driver/src/KobukiParser.cpp b/src/C++/Driver/src/KobukiParser.cpp index b43c487..925fed4 100644 --- a/src/C++/Driver/src/KobukiParser.cpp +++ b/src/C++/Driver/src/KobukiParser.cpp @@ -17,10 +17,97 @@ int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { switch (dataType) { case 0x01: if (dataLength == 0x0F) { + parseBasicData(output, data, checkedValue); + } else { + checkedValue += dataLength; + } + break; + + case 0x03: + if (dataLength == 0x03) { + parseIRSensorData(output, data, checkedValue); + } else { + checkedValue += dataLength; + } + break; + + case 0x04: + if (dataLength == 0x07) { + parseGyroData(output, data, checkedValue); + } else { + checkedValue += dataLength; + } + break; + + case 0x05: + if (dataLength == 0x06) { + parseCliffSensorData(output, data, checkedValue); + } else { + checkedValue += dataLength; + } + break; + + case 0x06: + if (dataLength == 0x02) { + parseWheelCurrentData(output, data, checkedValue); + } else { + checkedValue += dataLength; + } + break; + + case 0x0A: + if (dataLength == 0x04) { + parseHardwareVersionData(output, data, checkedValue); + } else { + checkedValue += dataLength; + } + break; + + case 0x0B: + if (dataLength == 0x04) { + parseFirmwareVersionData(output, data, checkedValue); + } else { + checkedValue += dataLength; + } + break; + + case 0x0D: + if (dataLength % 2 == 0) { + parseXYZData(TKobukiData &output, unsigned char *data, int &checkedValue); + } else { + checkedValue += dataLength; + } + break; + + case 0x10: + if (dataLength == 0x10) { + parseDigitalAnalogInputData(output, data, checkedValue); + } else { + checkedValue += dataLength; + } + break; + + case 0x13: + if (dataLength == 0x0C) { + parseUDIDData(output, data, checkedValue); + } else { + checkedValue += dataLength; + } + break; + + default: + std::cerr << "Unknown data type: " << std::hex << static_cast(dataType) << std::dec << std::endl; + checkedValue += dataLength; + break; + } + } + return 0; +} + +int KobukiParser::parseBasicData(TKobukiData &output, unsigned char *data, int &checkedValue){ output.timestamp = data[checkedValue + 1] * 256 + data[checkedValue]; checkedValue += 2; output.BumperCenter = data[checkedValue] & 0x02; - std::cout << "BumperCenter: " << output.BumperCenter << std::endl; output.BumperLeft = data[checkedValue] & 0x04; output.BumperRight = data[checkedValue] & 0x01; checkedValue++; @@ -47,136 +134,60 @@ int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { checkedValue++; output.overCurrent = data[checkedValue]; checkedValue++; - } else { - std::cerr << "Invalid data length for type 0x01" << std::endl; - checkedValue += dataLength; - } - break; +} - case 0x03: - if (dataLength == 0x03) { - output.IRSensorRight = data[checkedValue]; + +int KobukiParser::parseIRSensorData(TKobukiData &output, unsigned char *data, int &checkedValue){ + output.IRSensorRight = data[checkedValue]; checkedValue++; output.IRSensorCenter = data[checkedValue]; checkedValue++; output.IRSensorLeft = data[checkedValue]; checkedValue++; - } else { - std::cerr << "Invalid data length for type 0x03" << std::endl; - checkedValue += dataLength; - } - break; +} - case 0x04: - if (dataLength == 0x07) { +int KobukiParser::parseGyroData(TKobukiData &output, unsigned char *data, int &checkedValue){ output.GyroAngle = data[checkedValue + 1] * 256 + data[checkedValue]; checkedValue += 2; output.GyroAngleRate = data[checkedValue + 1] * 256 + data[checkedValue]; checkedValue += 5; // 3 unused - } else { - std::cerr << "Invalid data length for type 0x04" << std::endl; - checkedValue += dataLength; - } - break; +} - case 0x05: - if (dataLength == 0x06) { - output.CliffSensorRight = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.CliffSensorCenter = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.CliffSensorLeft = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - } else { - std::cerr << "Invalid data length for type 0x05" << std::endl; - checkedValue += dataLength; - } - break; +int KobukiParser::parseCliffSensorData(TKobukiData &output, unsigned char *data, int &checkedValue){ + output.CliffSensorRight = data[checkedValue]; + checkedValue++; + output.CliffSensorCenter = data[checkedValue]; + checkedValue++; + output.CliffSensorLeft = data[checkedValue]; + checkedValue++; +} - case 0x06: - if (dataLength == 0x02) { +int KobukiParser::parseWheelCurrentData(TKobukiData &output, unsigned char *data, int &checkedValue){ output.wheelCurrentLeft = data[checkedValue]; checkedValue++; output.wheelCurrentRight = data[checkedValue]; checkedValue++; - } else { - std::cerr << "Invalid data length for type 0x06" << std::endl; - checkedValue += dataLength; - } - break; +} - case 0x0A: - if (dataLength == 0x04) { +int KobukiParser::parseHardwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue){ output.extraInfo.HardwareVersionPatch = data[checkedValue]; checkedValue++; output.extraInfo.HardwareVersionMinor = data[checkedValue]; checkedValue++; output.extraInfo.HardwareVersionMajor = data[checkedValue]; checkedValue += 2; - } else { - std::cerr << "Invalid data length for type 0x0A" << std::endl; - checkedValue += dataLength; - } - break; +} - case 0x0B: - if (dataLength == 0x04) { +int KobukiParser::parseFirmwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue){ output.extraInfo.FirmwareVersionPatch = data[checkedValue]; checkedValue++; output.extraInfo.FirmwareVersionMinor = data[checkedValue]; checkedValue++; output.extraInfo.FirmwareVersionMajor = data[checkedValue]; checkedValue += 2; - } else { - std::cerr << "Invalid data length for type 0x0B" << std::endl; - checkedValue += dataLength; - } - break; +} - case 0x0D: - if (dataLength % 2 == 0) { - output.frameId = data[checkedValue]; - checkedValue++; - int howmanyFrames = data[checkedValue] / 3; - checkedValue++; - output.gyroData.reserve(howmanyFrames); - output.gyroData.clear(); - for (int hk = 0; hk < howmanyFrames; hk++) { - TRawGyroData temp; - temp.x = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - temp.y = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - temp.z = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.gyroData.push_back(temp); - } - } else { - std::cerr << "Invalid data length for type 0x0D" << std::endl; - checkedValue += dataLength; - } - break; - - case 0x10: - if (dataLength == 0x10) { - output.digitalInput = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh0 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh1 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh2 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 2; - output.analogInputCh3 = data[checkedValue + 1] * 256 + data[checkedValue]; - checkedValue += 8; // 2+6 - } else { - std::cerr << "Invalid data length for type 0x10" << std::endl; - checkedValue += dataLength; - } - break; - - case 0x13: - if (dataLength == 0x0C) { +int KobukiParser::parseExtraData(TKobukiData &output, unsigned char *data, int &checkedValue){ output.extraInfo.UDID0 = data[checkedValue + 3] * 256 * 256 * 256 + data[checkedValue + 2] * 256 * 256 + data[checkedValue + 1] * 256 + @@ -192,20 +203,55 @@ int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { data[checkedValue + 1] * 256 + data[checkedValue]; checkedValue += 4; - } else { - std::cerr << "Invalid data length for type 0x13" << std::endl; - checkedValue += dataLength; - } - break; - - default: - std::cerr << "Unknown data type: " << std::hex << static_cast(dataType) << std::dec << std::endl; - checkedValue += dataLength; - break; - } - } - return 0; } + +int KobukiParser::parseDigitalAnalogInputData(TKobukiData &output, unsigned char *data, int &checkedValue){ + output.digitalInput = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh0 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh1 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh2 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.analogInputCh3 = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 8; // 2+6 +} + +int KobukiParser::parseUDIDData(TKobukiData &output, unsigned char *data, int &checkedValue){ + output.extraInfo.UDID0 = data[checkedValue + 3] * 256 * 256 * 256 + + data[checkedValue + 2] * 256 * 256 + + data[checkedValue + 1] * 256 + + data[checkedValue]; + checkedValue += 4; + output.extraInfo.UDID1 = data[checkedValue + 3] * 256 * 256 * 256 + + data[checkedValue + 2] * 256 * 256 + + data[checkedValue + 1] * 256 + + data[checkedValue]; + checkedValue += 4; + output.extraInfo.UDID2 = data[checkedValue + 3] * 256 * 256 * 256 + + data[checkedValue + 2] * 256 * 256 + + data[checkedValue + 1] * 256 + + data[checkedValue]; + checkedValue += 4; +} + +int KobukiParser::parseXYZData(TKobukiData &output, unsigned char *data, int &checkedValue){ + output.gyroData.reserve(data[checkedValue]); + output.gyroData.clear(); + for (int hk = 0; hk < data[checkedValue]; hk++) { + TRawGyroData temp; + temp.x = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + temp.y = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + temp.z = data[checkedValue + 1] * 256 + data[checkedValue]; + checkedValue += 2; + output.gyroData.push_back(temp); + } +} + + int KobukiParser::checkChecksum(unsigned char *data) { unsigned char chckSum = 0; for (int i = 0; i < data[0] + 2; i++) { diff --git a/src/C++/Driver/src/KobukiParser.h b/src/C++/Driver/src/KobukiParser.h index 1e79bbd..130fb3d 100644 --- a/src/C++/Driver/src/KobukiParser.h +++ b/src/C++/Driver/src/KobukiParser.h @@ -39,15 +39,16 @@ public: private: int checkChecksum(unsigned char *data); int parseBasicData(TKobukiData &output, unsigned char *data, int &checkedValue); - // int parseIRSensorData(TKobukiData &output, unsigned char *data, int &checkedValue); - // int parseGyroData(TKobukiData &output, unsigned char *data, int &checkedValue); - // int parseCliffSensorData(TKobukiData &output, unsigned char *data, int &checkedValue); - // int parseWheelCurrentData(TKobukiData &output, unsigned char *data, int &checkedValue); - // int parseHardwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue); - // int parseFirmwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue); - // int parseXYZData(TKobukiData &output, unsigned char *data, int &checkedValue); - // int parseDigitalAnalogInputData(TKobukiData &output, unsigned char *data, int &checkedValue); - // int parseUDIDData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseIRSensorData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseGyroData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseCliffSensorData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseWheelCurrentData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseHardwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseFirmwareVersionData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseXYZData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseDigitalAnalogInputData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseUDIDData(TKobukiData &output, unsigned char *data, int &checkedValue); + int parseExtraData(TKobukiData &output, unsigned char *data, int &checkedValue) }; From 2ce91136def7cd757d02e2f2eaf664b1e2430494 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 21:02:13 +0200 Subject: [PATCH 12/14] fix small error --- src/C++/Driver/src/KobukiParser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/C++/Driver/src/KobukiParser.cpp b/src/C++/Driver/src/KobukiParser.cpp index 925fed4..629368b 100644 --- a/src/C++/Driver/src/KobukiParser.cpp +++ b/src/C++/Driver/src/KobukiParser.cpp @@ -73,7 +73,7 @@ int KobukiParser::parseKobukiMessage(TKobukiData &output, unsigned char *data) { case 0x0D: if (dataLength % 2 == 0) { - parseXYZData(TKobukiData &output, unsigned char *data, int &checkedValue); + parseXYZData(output, data, checkedValue); } else { checkedValue += dataLength; } From 515f51030c7f37d9145f4f8f89b617566c1b3159 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 21:08:56 +0200 Subject: [PATCH 13/14] update cmake and parser (now it compiles) --- .gitignore | 2 ++ src/C++/Driver/CMakeLists.txt | 3 --- src/C++/Driver/src/KobukiParser.h | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 9ed5757..e4449ed 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ src/C++/Driver/cmake_install.cmake src/C++/Socket/a.out src/C++/Driver/Makefile src/C++/Driver/vgcore* +src/C++/Driver/cmake_install.cmake +src/C++/Driver/Makefile diff --git a/src/C++/Driver/CMakeLists.txt b/src/C++/Driver/CMakeLists.txt index 8416ecb..f10f0a6 100644 --- a/src/C++/Driver/CMakeLists.txt +++ b/src/C++/Driver/CMakeLists.txt @@ -1,9 +1,6 @@ cmake_minimum_required(VERSION 3.9) project(kobuki_control) -#set(CMAKE_CXX_STANDARD 11) -find_package( OpenCV REQUIRED ) - set(SOURCE_FILES src/KobukiParser.cpp src/KobukiParser.h diff --git a/src/C++/Driver/src/KobukiParser.h b/src/C++/Driver/src/KobukiParser.h index 130fb3d..5bdb216 100644 --- a/src/C++/Driver/src/KobukiParser.h +++ b/src/C++/Driver/src/KobukiParser.h @@ -48,7 +48,7 @@ private: int parseXYZData(TKobukiData &output, unsigned char *data, int &checkedValue); int parseDigitalAnalogInputData(TKobukiData &output, unsigned char *data, int &checkedValue); int parseUDIDData(TKobukiData &output, unsigned char *data, int &checkedValue); - int parseExtraData(TKobukiData &output, unsigned char *data, int &checkedValue) + int parseExtraData(TKobukiData &output, unsigned char *data, int &checkedValue); }; From 9370be2794a54626382b0e718c90d3a50d6e7177 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 7 Oct 2024 21:10:23 +0200 Subject: [PATCH 14/14] junk removal --- src/C++/Driver/Makefile | 235 ----------------------------- src/C++/Driver/cmake_install.cmake | 62 -------- 2 files changed, 297 deletions(-) delete mode 100644 src/C++/Driver/Makefile delete mode 100644 src/C++/Driver/cmake_install.cmake diff --git a/src/C++/Driver/Makefile b/src/C++/Driver/Makefile deleted file mode 100644 index c8881dc..0000000 --- a/src/C++/Driver/Makefile +++ /dev/null @@ -1,235 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.30 - -# Default target executed when no arguments are given to make. -default_target: all -.PHONY : default_target - -# Allow only one "make -f Makefile2" at a time, but pass parallelism. -.NOTPARALLEL: - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - -# Disable VCS-based implicit rules. -% : %,v - -# Disable VCS-based implicit rules. -% : RCS/% - -# Disable VCS-based implicit rules. -% : RCS/%,v - -# Disable VCS-based implicit rules. -% : SCCS/s.% - -# Disable VCS-based implicit rules. -% : s.% - -.SUFFIXES: .hpux_make_needs_suffix_list - -# Command-line flag to silence nested $(MAKE). -$(VERBOSE)MAKESILENT = -s - -#Suppress display of executed commands. -$(VERBOSE).SILENT: - -# A target that is always out of date. -cmake_force: -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/bin/cmake - -# The command to remove a file. -RM = /usr/bin/cmake -E rm -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /home/sam/Desktop/rooziinuubii79/src/C++/Driver - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /home/sam/Desktop/rooziinuubii79/src/C++/Driver - -#============================================================================= -# Targets provided globally by CMake. - -# Special rule for the target edit_cache -edit_cache: - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..." - /usr/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) -.PHONY : edit_cache - -# Special rule for the target edit_cache -edit_cache/fast: edit_cache -.PHONY : edit_cache/fast - -# Special rule for the target rebuild_cache -rebuild_cache: - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." - /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) -.PHONY : rebuild_cache - -# Special rule for the target rebuild_cache -rebuild_cache/fast: rebuild_cache -.PHONY : rebuild_cache/fast - -# The main all target -all: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /home/sam/Desktop/rooziinuubii79/src/C++/Driver/CMakeFiles /home/sam/Desktop/rooziinuubii79/src/C++/Driver//CMakeFiles/progress.marks - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all - $(CMAKE_COMMAND) -E cmake_progress_start /home/sam/Desktop/rooziinuubii79/src/C++/Driver/CMakeFiles 0 -.PHONY : all - -# The main clean target -clean: - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean -.PHONY : clean - -# The main clean target -clean/fast: clean -.PHONY : clean/fast - -# Prepare targets for installation. -preinstall: all - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall -.PHONY : preinstall - -# Prepare targets for installation. -preinstall/fast: - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall -.PHONY : preinstall/fast - -# clear depends -depend: - $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 -.PHONY : depend - -#============================================================================= -# Target rules for targets named kobuki_control - -# Build rule for target. -kobuki_control: cmake_check_build_system - $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 kobuki_control -.PHONY : kobuki_control - -# fast build rule for target. -kobuki_control/fast: - $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/build -.PHONY : kobuki_control/fast - -src/CKobuki.o: src/CKobuki.cpp.o -.PHONY : src/CKobuki.o - -# target to build an object file -src/CKobuki.cpp.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/CKobuki.cpp.o -.PHONY : src/CKobuki.cpp.o - -src/CKobuki.i: src/CKobuki.cpp.i -.PHONY : src/CKobuki.i - -# target to preprocess a source file -src/CKobuki.cpp.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/CKobuki.cpp.i -.PHONY : src/CKobuki.cpp.i - -src/CKobuki.s: src/CKobuki.cpp.s -.PHONY : src/CKobuki.s - -# target to generate assembly for a file -src/CKobuki.cpp.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/CKobuki.cpp.s -.PHONY : src/CKobuki.cpp.s - -src/KobukiParser.o: src/KobukiParser.cpp.o -.PHONY : src/KobukiParser.o - -# target to build an object file -src/KobukiParser.cpp.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/KobukiParser.cpp.o -.PHONY : src/KobukiParser.cpp.o - -src/KobukiParser.i: src/KobukiParser.cpp.i -.PHONY : src/KobukiParser.i - -# target to preprocess a source file -src/KobukiParser.cpp.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/KobukiParser.cpp.i -.PHONY : src/KobukiParser.cpp.i - -src/KobukiParser.s: src/KobukiParser.cpp.s -.PHONY : src/KobukiParser.s - -# target to generate assembly for a file -src/KobukiParser.cpp.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/KobukiParser.cpp.s -.PHONY : src/KobukiParser.cpp.s - -src/main.o: src/main.cpp.o -.PHONY : src/main.o - -# target to build an object file -src/main.cpp.o: - $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/main.cpp.o -.PHONY : src/main.cpp.o - -src/main.i: src/main.cpp.i -.PHONY : src/main.i - -# target to preprocess a source file -src/main.cpp.i: - $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/main.cpp.i -.PHONY : src/main.cpp.i - -src/main.s: src/main.cpp.s -.PHONY : src/main.s - -# target to generate assembly for a file -src/main.cpp.s: - $(MAKE) $(MAKESILENT) -f CMakeFiles/kobuki_control.dir/build.make CMakeFiles/kobuki_control.dir/src/main.cpp.s -.PHONY : src/main.cpp.s - -# Help Target -help: - @echo "The following are some of the valid targets for this Makefile:" - @echo "... all (the default if no target is provided)" - @echo "... clean" - @echo "... depend" - @echo "... edit_cache" - @echo "... rebuild_cache" - @echo "... kobuki_control" - @echo "... src/CKobuki.o" - @echo "... src/CKobuki.i" - @echo "... src/CKobuki.s" - @echo "... src/KobukiParser.o" - @echo "... src/KobukiParser.i" - @echo "... src/KobukiParser.s" - @echo "... src/main.o" - @echo "... src/main.i" - @echo "... src/main.s" -.PHONY : help - - - -#============================================================================= -# Special targets to cleanup operation of make. - -# Special rule to run CMake to check the build system integrity. -# No rule that depends on this can have commands that come from listfiles -# because they might be regenerated. -cmake_check_build_system: - $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 -.PHONY : cmake_check_build_system - diff --git a/src/C++/Driver/cmake_install.cmake b/src/C++/Driver/cmake_install.cmake deleted file mode 100644 index 45179d9..0000000 --- a/src/C++/Driver/cmake_install.cmake +++ /dev/null @@ -1,62 +0,0 @@ -# Install script for directory: /home/sam/Desktop/rooziinuubii79/src/C++/Driver - -# Set the install prefix -if(NOT DEFINED CMAKE_INSTALL_PREFIX) - set(CMAKE_INSTALL_PREFIX "/usr/local") -endif() -string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") - -# Set the install configuration name. -if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) - if(BUILD_TYPE) - string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" - CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") - else() - set(CMAKE_INSTALL_CONFIG_NAME "") - endif() - message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") -endif() - -# Set the component getting installed. -if(NOT CMAKE_INSTALL_COMPONENT) - if(COMPONENT) - message(STATUS "Install component: \"${COMPONENT}\"") - set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") - else() - set(CMAKE_INSTALL_COMPONENT) - endif() -endif() - -# Install shared libraries without execute permission? -if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) - set(CMAKE_INSTALL_SO_NO_EXE "0") -endif() - -# Is this installation the result of a crosscompile? -if(NOT DEFINED CMAKE_CROSSCOMPILING) - set(CMAKE_CROSSCOMPILING "FALSE") -endif() - -# Set path to fallback-tool for dependency-resolution. -if(NOT DEFINED CMAKE_OBJDUMP) - set(CMAKE_OBJDUMP "/usr/bin/objdump") -endif() - -if(CMAKE_INSTALL_COMPONENT) - if(CMAKE_INSTALL_COMPONENT MATCHES "^[a-zA-Z0-9_.+-]+$") - set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") - else() - string(MD5 CMAKE_INST_COMP_HASH "${CMAKE_INSTALL_COMPONENT}") - set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INST_COMP_HASH}.txt") - unset(CMAKE_INST_COMP_HASH) - endif() -else() - set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") -endif() - -if(NOT CMAKE_INSTALL_LOCAL_ONLY) - string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT - "${CMAKE_INSTALL_MANIFEST_FILES}") - file(WRITE "/home/sam/Desktop/rooziinuubii79/src/C++/Driver/${CMAKE_INSTALL_MANIFEST}" - "${CMAKE_INSTALL_MANIFEST_CONTENT}") -endif()