Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: Ken_CAN_test.cpp
- Revision:
- 12:e950feba910d
- Parent:
- 11:abd3df435a2b
- Child:
- 13:e3a4abc461f4
--- a/Ken_CAN_test.cpp Wed Jul 06 11:19:51 2022 +0000 +++ b/Ken_CAN_test.cpp Fri Jul 08 13:04:15 2022 +0000 @@ -85,6 +85,8 @@ int idwasfound = 0; int columnidwasfound = 0; +char c = NULL; + int mbedCANbusspeed = 500 * 1000; int CANGatewayCANbusspeed = 500 * 1000; int listen = 1; @@ -92,16 +94,24 @@ int customentry = 0; int normalkeypresses = 1; +int tablesmode = 0; string customentrystring = ""; int hextotal = 0; +int numberkeypressed = -1; + //Array of IDs to translate can be overwritten with the 'copyarray'. //It's arranged in columns of IDs that are translated to the ID in the next column. //NOTE: Array must be a large enough size to contain all ID translations. int idsarray[2][8][10] = {}; +//int copyarray[2][8][10] = {}; int arrayx = 2; int arrayy = 8; int arrayz = 10; +int x = 0; +int y = 0; +int z = 0; +int totalarraysize = 0; //A function to easily get the total of seconds a spam has taken int getspamsecondstotal(void) @@ -138,6 +148,269 @@ return(spamsecondstotal, spamspersecond); } +//A function to get table cells +void dealwithtable(int copyarray) + { + for (int arrayprogress = 0; arrayprogress < totalarraysize; arrayprogress++) + { + x++; + if (x >= arrayx) + { + x = 0; + y++; + } + if (y >= arrayy) + { + y = 0; + z++; + } + //int cellcontents = copyarray[x][y][z]; + //pc.printf("Array progress is %d. Examining %d,%d,%d. It says '%d'.\r\n", arrayprogress, x, y, z, cellcontents); + } + } + +//Structure for CAN conversion table +struct CANconversion { + int IDfrom; + int IDto; + int length; + int Data [8]; + }; + +struct CANconversion CANconversionlist[32]; //This defines a list of CANconversion structures, each with its own IDfrom, IDto, length, etc. (E.g.: 'CANconversionlist[0].IDfrom') +int CANconversionlistheight = 32; + +//CANconversion CANconversionlist[32] = {}; // Trying to make a list here that contains multiple CANconversion data types. + +//A function to handle key presses in tables mode +void tablesmodekeypress(void) + { + //pc.printf("Key press detected in tables mode!\r\n"); + if (c >= 48 and c <= 57) + { + numberkeypressed = c - 48; + pc.printf("That's a number key press.('%d')\r\n", numberkeypressed); + if (numberkeypressed == 1) + { + CANconversionlist[0].IDfrom = 0x301; + CANconversionlist[0].IDto = 0x401; + CANconversionlist[0].length = 0x8; + CANconversionlist[0].Data[0] = 0x01; + CANconversionlist[0].Data[1] = 0x00; + CANconversionlist[0].Data[2] = 0x00; + CANconversionlist[0].Data[3] = 0x00; + CANconversionlist[0].Data[4] = 0x00; + CANconversionlist[0].Data[5] = 0x00; + CANconversionlist[0].Data[6] = 0x00; + CANconversionlist[0].Data[7] = 0x00; + + CANconversionlist[1].IDfrom = 0x302; + CANconversionlist[1].IDto = 0x402; + CANconversionlist[1].length = 0x8; + CANconversionlist[1].Data[0] = 0x04; + CANconversionlist[1].Data[1] = 0x05; + CANconversionlist[1].Data[2] = 0x06; + CANconversionlist[1].Data[3] = 0x07; + CANconversionlist[1].Data[4] = 0x00; + CANconversionlist[1].Data[5] = 0x00; + CANconversionlist[1].Data[6] = 0x00; + CANconversionlist[1].Data[7] = 0x00; + + CANconversionlist[2].IDfrom = 0x303; + CANconversionlist[2].IDto = 0x403; + CANconversionlist[2].length = 0x8; + CANconversionlist[2].Data[0] = 0x03; + CANconversionlist[2].Data[1] = 0x04; + CANconversionlist[2].Data[2] = 0x05; + CANconversionlist[2].Data[3] = 0x00; + CANconversionlist[2].Data[4] = 0x00; + CANconversionlist[2].Data[5] = 0x00; + CANconversionlist[2].Data[6] = 0x00; + CANconversionlist[2].Data[7] = 0x00; + + CANconversionlist[3].IDfrom = 0x304; + CANconversionlist[3].IDto = 0x404; + CANconversionlist[3].length = 0x8; + CANconversionlist[3].Data[0] = 0x04; + CANconversionlist[3].Data[1] = 0x05; + CANconversionlist[3].Data[2] = 0x06; + CANconversionlist[3].Data[3] = 0x07; + CANconversionlist[3].Data[4] = 0x00; + CANconversionlist[3].Data[5] = 0x00; + CANconversionlist[3].Data[6] = 0x00; + CANconversionlist[3].Data[7] = 0x00; + + CANconversionlist[4].IDfrom = 0x305; + CANconversionlist[4].IDto = 0x405; + CANconversionlist[4].length = 0x8; + CANconversionlist[4].Data[0] = 0x04; + CANconversionlist[4].Data[1] = 0x05; + CANconversionlist[4].Data[2] = 0x06; + CANconversionlist[4].Data[3] = 0x07; + CANconversionlist[4].Data[4] = 0x00; + CANconversionlist[4].Data[5] = 0x00; + CANconversionlist[4].Data[6] = 0x00; + CANconversionlist[4].Data[7] = 0x00; + + CANconversionlist[5].IDfrom = 0x306; + CANconversionlist[5].IDto = 0x406; + CANconversionlist[5].length = 0x8; + CANconversionlist[5].Data[0] = 0x02; + CANconversionlist[5].Data[1] = 0x03; + CANconversionlist[5].Data[2] = 0x00; + CANconversionlist[5].Data[3] = 0x00; + CANconversionlist[5].Data[4] = 0x00; + CANconversionlist[5].Data[5] = 0x00; + CANconversionlist[5].Data[6] = 0x00; + CANconversionlist[5].Data[7] = 0x00; + + CANconversionlist[6].IDfrom = 0x308; + CANconversionlist[6].IDto = 0x407; + CANconversionlist[6].length = 0x8; + CANconversionlist[6].Data[0] = 0x00; + CANconversionlist[6].Data[1] = 0x00; + CANconversionlist[6].Data[2] = 0x00; + CANconversionlist[6].Data[3] = 0x00; + CANconversionlist[6].Data[4] = 0x00; + CANconversionlist[6].Data[5] = 0x00; + CANconversionlist[6].Data[6] = 0x00; + CANconversionlist[6].Data[7] = 0x00; + + CANconversionlist[7].IDfrom = 0x309; + CANconversionlist[7].IDto = 0x408; + CANconversionlist[7].length = 0x8; + CANconversionlist[7].Data[0] = 0x06; + CANconversionlist[7].Data[1] = 0x07; + CANconversionlist[7].Data[2] = 0x08; + CANconversionlist[7].Data[3] = 0x00; + CANconversionlist[7].Data[4] = 0x00; + CANconversionlist[7].Data[5] = 0x00; + CANconversionlist[7].Data[6] = 0x00; + CANconversionlist[7].Data[7] = 0x00; + + CANconversionlistheight = 8; + } + if (numberkeypressed == 2) + { + CANconversionlist[0].IDfrom = 0x301; + CANconversionlist[0].IDto = 0x301; + CANconversionlist[0].length = 0x8; + CANconversionlist[0].Data[0] = 0x08; + CANconversionlist[0].Data[1] = 0x00; + CANconversionlist[0].Data[2] = 0x00; + CANconversionlist[0].Data[3] = 0x00; + CANconversionlist[0].Data[4] = 0x00; + CANconversionlist[0].Data[5] = 0x00; + CANconversionlist[0].Data[6] = 0x00; + CANconversionlist[0].Data[7] = 0x00; + + CANconversionlist[1].IDfrom = 0x302; + CANconversionlist[1].IDto = 0x302; + CANconversionlist[1].length = 0x8; + CANconversionlist[1].Data[0] = 0x06; + CANconversionlist[1].Data[1] = 0x07; + CANconversionlist[1].Data[2] = 0x00; + CANconversionlist[1].Data[3] = 0x00; + CANconversionlist[1].Data[4] = 0x00; + CANconversionlist[1].Data[5] = 0x00; + CANconversionlist[1].Data[6] = 0x00; + CANconversionlist[1].Data[7] = 0x00; + + CANconversionlist[2].IDfrom = 0x303; + CANconversionlist[2].IDto = 0x303; + CANconversionlist[2].length = 0x8; + CANconversionlist[2].Data[0] = 0x00; + CANconversionlist[2].Data[1] = 0x00; + CANconversionlist[2].Data[2] = 0x00; + CANconversionlist[2].Data[3] = 0x00; + CANconversionlist[2].Data[4] = 0x00; + CANconversionlist[2].Data[5] = 0x00; + CANconversionlist[2].Data[6] = 0x00; + CANconversionlist[2].Data[7] = 0x00; + + CANconversionlist[3].IDfrom = 0x304; + CANconversionlist[3].IDto = 0x304; + CANconversionlist[3].length = 0x8; + CANconversionlist[3].Data[0] = 0x08; + CANconversionlist[3].Data[1] = 0x00; + CANconversionlist[3].Data[2] = 0x00; + CANconversionlist[3].Data[3] = 0x00; + CANconversionlist[3].Data[4] = 0x00; + CANconversionlist[3].Data[5] = 0x00; + CANconversionlist[3].Data[6] = 0x00; + CANconversionlist[3].Data[7] = 0x00; + + CANconversionlist[4].IDfrom = 0x305; + CANconversionlist[4].IDto = 0x305; + CANconversionlist[4].length = 0x8; + CANconversionlist[4].Data[0] = 0x08; + CANconversionlist[4].Data[1] = 0x00; + CANconversionlist[4].Data[2] = 0x09; + CANconversionlist[4].Data[3] = 0x09; + CANconversionlist[4].Data[4] = 0x00; + CANconversionlist[4].Data[5] = 0x00; + CANconversionlist[4].Data[6] = 0x00; + CANconversionlist[4].Data[7] = 0x00; + + CANconversionlist[5].IDfrom = 0x306; + CANconversionlist[5].IDto = 0x306; + CANconversionlist[5].length = 0x8; + CANconversionlist[5].Data[0] = 0x02; + CANconversionlist[5].Data[1] = 0x03; + CANconversionlist[5].Data[2] = 0x00; + CANconversionlist[5].Data[3] = 0x00; + CANconversionlist[5].Data[4] = 0x00; + CANconversionlist[5].Data[5] = 0x00; + CANconversionlist[5].Data[6] = 0x00; + CANconversionlist[5].Data[7] = 0x00; + + CANconversionlist[6].IDfrom = 0x308; + CANconversionlist[6].IDto = 0x307; + CANconversionlist[6].length = 0x8; + CANconversionlist[6].Data[0] = 0x06; + CANconversionlist[6].Data[1] = 0x07; + CANconversionlist[6].Data[2] = 0x08; + CANconversionlist[6].Data[3] = 0x00; + CANconversionlist[6].Data[4] = 0x00; + CANconversionlist[6].Data[5] = 0x00; + CANconversionlist[6].Data[6] = 0x00; + CANconversionlist[6].Data[7] = 0x00; + + CANconversionlist[7].IDfrom = 0x309; + CANconversionlist[7].IDto = 0x308; + CANconversionlist[7].length = 0x8; + CANconversionlist[7].Data[0] = 0x06; + CANconversionlist[7].Data[1] = 0x07; + CANconversionlist[7].Data[2] = 0x08; + CANconversionlist[7].Data[3] = 0x00; + CANconversionlist[7].Data[4] = 0x00; + CANconversionlist[7].Data[5] = 0x00; + CANconversionlist[7].Data[6] = 0x00; + CANconversionlist[7].Data[7] = 0x00; + + CANconversionlistheight = 8; + } + pc.printf("CAN conversion list currently has %d rows:\r\n", CANconversionlistheight); + int i = 0; + while (i < CANconversionlistheight) + { + //pc.printf("Printing row %d: ", i+1); + pc.printf("ID \033[1;37m%03X\033[0m will convert to: \033[1;30;47m%03X %01X %02X %02X %02X %02X %02X %02X %02X %02X\033[0m.", CANconversionlist[i].IDfrom, CANconversionlist[i].IDto, CANconversionlist[i].length, CANconversionlist[i].Data[0], CANconversionlist[i].Data[1], CANconversionlist[i].Data[2], CANconversionlist[i].Data[3], CANconversionlist[i].Data[4], CANconversionlist[i].Data[5], CANconversionlist[i].Data[6], CANconversionlist[i].Data[7]); + pc.printf("\r\n"); + i++; + } + CANpassthrough = 0; + pc.printf("CANpassthrough is now set to %d.\r\n", CANpassthrough); + numberkeypressed = -1; + } + if (c == 27) + { + pc.printf("Esc key press found.\r\n"); + normalkeypresses = 1; + tablesmode = 0; + } + } + //A function to report if baud rates differ void reportbaudrates(void) { @@ -390,9 +663,9 @@ idwasfound = 0; if (CANpassthrough == 0) { - for(int i = 0; i <=arrayy-1; i++) + for(int i = 0; i <=CANconversionlistheight-1; i++) { - if(idsarray[0][i][0] == expected1) + if (CANconversionlist[i].IDfrom == expected1) { //pc.printf("ID was found in the array at %d.\r\n", i); idwasfound = 1; @@ -474,16 +747,16 @@ { //pc.printf("ID was found in table earlier, setting expectations\r\n"); int i = columnidwasfound; - expected1 = idsarray[1][i][0]; - expected2 = idsarray[1][i][1]; - expected3 = idsarray[1][i][2]; - expected4 = idsarray[1][i][3]; - expected5 = idsarray[1][i][4]; - expected6 = idsarray[1][i][5]; - expected7 = idsarray[1][i][6]; - expected8 = idsarray[1][i][7]; - expected9 = idsarray[1][i][8]; - expected10 = idsarray[1][i][9]; + expected1 = CANconversionlist[i].IDto; + expected2 = CANconversionlist[i].length; + expected3 = CANconversionlist[i].Data[0]; + expected4 = CANconversionlist[i].Data[1]; + expected5 = CANconversionlist[i].Data[2]; + expected6 = CANconversionlist[i].Data[3]; + expected7 = CANconversionlist[i].Data[4]; + expected8 = CANconversionlist[i].Data[5]; + expected9 = CANconversionlist[i].Data[6]; + expected10 = CANconversionlist[i].Data[7]; } //pc.printf("Part %d complete.\r\n", partincrement); //pc.printf("--------------------------------------\r\n"); @@ -592,7 +865,7 @@ pc.printf("Build date %s %s\r\n",__DATE__,__TIME__); pc.printf("\033[1;32mFor help, press '?'.\033[0m\r\n"); pc.printf("------------------------------------------\r\n"); - char c; + //char c; //Check for button presses while (1) @@ -784,7 +1057,7 @@ } if (c == '5' and normalkeypresses == 1) { - buttonPressMessageOutText = "15B 8 01 02 03 04 05 06 07 08"; + buttonPressMessageOutText = "305 8 01 02 03 04 05 06 07 08"; idlistincrementer = 0x15B; } if (c == '6' and normalkeypresses == 1) @@ -985,50 +1258,16 @@ pc.printf("Starting CAN passthrough mode. Will expect to recieve the same CAN that is sent.\r\n"); CANpassthrough = 1; } - if (c == 'm' and CANpassthrough == 1 and normalkeypresses == 1) + if (c == 'm' and normalkeypresses == 1) //New menu to select multiple expectation tables { - pc.printf("Will make a CAN ID translation array.\r\n"); - //Making a two-dimensional array with 301-309 in the first column, then 401-409 in the second column. - int copyarray[2][8][10] = { - { {0x301,0x8, 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}, {0x302,0x8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}, {0x303,0x8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}, {0x304,0x8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}, {0x305,0x8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}, {0x306,0x8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}, {0x308,0x8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}, {0x309,0x8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08} }, - { {0x401,0x8,0x08,0x00,0x00,0x00,0x04,0x05,0x06,0x01}, {0x402,0x8,0x04,0x05,0x06,0x07,0x06,0x07,0x08,0x00}, {0x403,0x8,0x03,0x04,0x05,0x05,0x06,0x80,0x00,0x00}, {0x404,0x8,0x04,0x05,0x06,0x07,0x06,0x07,0x08,0x00}, {0x405,0x8,0x04,0x05,0x06,0x07,0x06,0x07,0x08,0x00}, {0x406,0x8,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00}, {0x408,0x8,0x06,0x07,0x08,0x00,0x00,0x00,0x00,0x00}, {0x409,0x8,0x06,0x07,0x08,0x00,0x00,0x00,0x00,0x00} }, - }; - //int copyarray[2][8][10] = {{769, 770, 771, 772, 773, 774, 776, 777}, {1025, 1026, 1027, 1028, 1029, 1030, 1032, 1033}}; - //int copyarray[2][1] = {{2047}, {1025}}; - memcpy(idsarray, copyarray, sizeof(copyarray)); //Copy the new array over the old 'idsarray'. - arrayx = 2; - arrayy = 8; - arrayz = 10; - //pc.printf("Array is %dx%d.\r\n", arrayx, arrayy); //Report the size variables of the new array. - for(int i = 0; i <arrayy; i++) - { - //pc.printf("Will show contents of table at column %d.\r\n", i); - pc.printf("1st column of CAN array (%d) says \033[0;30;47m%03X %01X %02X %02X %02X %02X %02X %02X %02X %02X\033[0m\r\n", i, idsarray[0][i][0], idsarray[0][i][1], idsarray[0][i][2], idsarray[0][i][3], idsarray[0][i][4], idsarray[0][i][5], idsarray[0][i][6], idsarray[0][i][7], idsarray[0][i][8], idsarray[0][i][9]); - pc.printf("2nd column of CAN array (%d) says \033[0;30;47m%03X %01X %02X %02X %02X %02X %02X %02X %02X %02X\033[0m\r\n", i, idsarray[1][i][0], idsarray[1][i][1], idsarray[1][i][2], idsarray[1][i][3], idsarray[1][i][4], idsarray[1][i][5], idsarray[1][i][6], idsarray[1][i][7], idsarray[1][i][8], idsarray[1][i][9]); - } - //pc.printf("1st column of IDs array says \033[0;30;47m%03X, %01X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X\033[0m\r\n", idsarray[0][0][0], idsarray[0][0][1], idsarray[0][0][2], idsarray[0][0][3], idsarray[0][0][4], idsarray[0][0][5], idsarray[0][0][6], idsarray[0][0][7], idsarray[0][0][8], idsarray[0][0][9]); - //pc.printf("2nd column of IDs array says \033[0;30;47m%03X, %01X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X\033[0m\r\n", idsarray[1][0][0], idsarray[1][0][1], idsarray[1][0][2], idsarray[1][0][3], idsarray[1][0][4], idsarray[1][0][5], idsarray[1][0][6], idsarray[1][0][7], idsarray[1][0][8], idsarray[1][0][9]); - //pc.printf("1st column of IDs array says %d.\r\n", idsarray[0][0]); - //pc.printf("2nd column of IDs array says %d.\r\n", idsarray[1][0]); - CANpassthrough = 0; - pc.printf("CANpassthrough is now set to %d.\r\n", CANpassthrough); - /* - pc.printf("Will search for '305' in row 1.\r\n"); - //Search for '305' in the array. - for(int i = 0; i <=arrayy; i++) - { - if(idsarray[0][i] == 305) - { - pc.printf("Element is found at 0,%d.\r\n", i); - } - } - */ + normalkeypresses = 0; //Go out of 'normal key presses' mode. + pc.printf("Now entering Expectation Table mode. Press the number keys to activate different expectation tables.\r\n"); + tablesmode = 1; } - //if (c == 's') - // { - // pc.printf("Sending authentic sats message.\r\n"); - // messageOutText = "301 8 06 3F B2 29 12 97 67 37"; - // } + if (c != NULL and tablesmode == 1) + { + tablesmodekeypress(); + } if (c == 'o' and idspamon == 0 and spamon == 1) { incrementer = (incrementer * 16); @@ -1262,9 +1501,35 @@ if (expected10 != messageIn.data[7] and checklaterbytes >= 1) {itsamatch = 0;} - //pc.printf("itsamatch %d, shouldntcomein %d.", itsamatch, shouldntcomein); if (itsamatch == 0 and shouldntcomein == 0) { + if (goodnoreplystreak > 0) + { + goodnoreplystreak = 0; + goodnoreplystreakstartid = 0; + if (aspamisgoing == 1) + { + pc.printf("\r\n\n"); + } + } + if (failsstreak > 0) + { + failsstreak = 0; + failsstreakstart = 0; + if (aspamisgoing == 1) + { + pc.printf("\r\n\n"); + } + } + if (CANmatchstreak > 0) + { + CANmatchstreak = 0; + CANmatchstreakstartID = 0; + if (aspamisgoing == 1) + { + pc.printf("\r\n\n"); + } + } if (failsstreak == 0) { failsstreakstart = idlistincrementer;