Kenneth Dunlop / Mbed 2 deprecated Ken_CAN_test

Dependencies:   mbed

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;