voor willem test
Dependencies: 4DGL MODSERIAL mbed mbos
CDU2FS_message_2.cpp@6:e0bf3b244d7c, 2013-01-29 (annotated)
- Committer:
- LvdK
- Date:
- Tue Jan 29 14:54:14 2013 +0000
- Revision:
- 6:e0bf3b244d7c
Goed werkende mbos versie met 0.5 sec ALIVE message
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
LvdK | 6:e0bf3b244d7c | 1 | // L. van der Kolk, ELVEDEKA, Holland // |
LvdK | 6:e0bf3b244d7c | 2 | // File: CDU2FS_message_2.cpp |
LvdK | 6:e0bf3b244d7c | 3 | |
LvdK | 6:e0bf3b244d7c | 4 | #include "mbed.h" |
LvdK | 6:e0bf3b244d7c | 5 | #include "MODSERIAL.h" |
LvdK | 6:e0bf3b244d7c | 6 | |
LvdK | 6:e0bf3b244d7c | 7 | extern MODSERIAL USB; |
LvdK | 6:e0bf3b244d7c | 8 | extern int CDU_FS_interface; |
LvdK | 6:e0bf3b244d7c | 9 | |
LvdK | 6:e0bf3b244d7c | 10 | int key_hit_ID = 0; // : number of key that was hit, 0 = no hit of any key. ( global flag ! ) |
LvdK | 6:e0bf3b244d7c | 11 | |
LvdK | 6:e0bf3b244d7c | 12 | char key_message[20] = "$PCDUKEY,"; // : setup begin of KEY message to FS |
LvdK | 6:e0bf3b244d7c | 13 | char val_message[50] = "$PCDUVAL,"; // : setup begin of VAL message to FS |
LvdK | 6:e0bf3b244d7c | 14 | char alive_message[20] = "$PCDUOKE,"; // : setup begin of ALIVE message to FS |
LvdK | 6:e0bf3b244d7c | 15 | |
LvdK | 6:e0bf3b244d7c | 16 | // ---- Key strings for FS-to-CDU key message SPCDUKEY ------------------------------------------------ |
LvdK | 6:e0bf3b244d7c | 17 | #define max_keys_CDUpanel 70 // : absolute max. number of keys found on CDU panel |
LvdK | 6:e0bf3b244d7c | 18 | const char *key_value[max_keys_CDUpanel] = // : array of pointers to keystrings terminated by '*' |
LvdK | 6:e0bf3b244d7c | 19 | { "???*", // key 0 not valid |
LvdK | 6:e0bf3b244d7c | 20 | "LSK1*", // key 1 |
LvdK | 6:e0bf3b244d7c | 21 | "LSK2*", // key 2 |
LvdK | 6:e0bf3b244d7c | 22 | "LSK3*", // key 3 |
LvdK | 6:e0bf3b244d7c | 23 | "LSK4*", // key 4 |
LvdK | 6:e0bf3b244d7c | 24 | "LSK5*", // key 5 |
LvdK | 6:e0bf3b244d7c | 25 | "LSK6*", // key 6 |
LvdK | 6:e0bf3b244d7c | 26 | "INITRF*", // key 7 |
LvdK | 6:e0bf3b244d7c | 27 | "RTE*", // key 8 |
LvdK | 6:e0bf3b244d7c | 28 | "CLB*", // key 9 |
LvdK | 6:e0bf3b244d7c | 29 | "CRZ*", // key 10 |
LvdK | 6:e0bf3b244d7c | 30 | "DES*", // key 11 |
LvdK | 6:e0bf3b244d7c | 31 | "MENU*", // key 12 |
LvdK | 6:e0bf3b244d7c | 32 | "LEGS*", // key 13 |
LvdK | 6:e0bf3b244d7c | 33 | "DEPARR*", // key 14 |
LvdK | 6:e0bf3b244d7c | 34 | "HOLD*", // key 15 |
LvdK | 6:e0bf3b244d7c | 35 | "PROG*", // key 16 |
LvdK | 6:e0bf3b244d7c | 36 | "EXEC*", // key 17 |
LvdK | 6:e0bf3b244d7c | 37 | "N1LMT*", // key 18 |
LvdK | 6:e0bf3b244d7c | 38 | "FIX*", // key 19 |
LvdK | 6:e0bf3b244d7c | 39 | "PRPAGE*", // key 20 |
LvdK | 6:e0bf3b244d7c | 40 | "NXPAGE*", // key 21 |
LvdK | 6:e0bf3b244d7c | 41 | "1*", // key 22 |
LvdK | 6:e0bf3b244d7c | 42 | "2*", // key 23 |
LvdK | 6:e0bf3b244d7c | 43 | "4*", // key 24 |
LvdK | 6:e0bf3b244d7c | 44 | "5*", // key 25 |
LvdK | 6:e0bf3b244d7c | 45 | "6*", // key 26 |
LvdK | 6:e0bf3b244d7c | 46 | "7*", // key 27 |
LvdK | 6:e0bf3b244d7c | 47 | "8*", // key 28 |
LvdK | 6:e0bf3b244d7c | 48 | "9*", // key 29 |
LvdK | 6:e0bf3b244d7c | 49 | "0*", // key 30 |
LvdK | 6:e0bf3b244d7c | 50 | ".*", // key 31 |
LvdK | 6:e0bf3b244d7c | 51 | "+/-*", // key 32 |
LvdK | 6:e0bf3b244d7c | 52 | "A*", // key 33 |
LvdK | 6:e0bf3b244d7c | 53 | "B*", // key 34 |
LvdK | 6:e0bf3b244d7c | 54 | "C*", // key 35 |
LvdK | 6:e0bf3b244d7c | 55 | "D*", // key 36 |
LvdK | 6:e0bf3b244d7c | 56 | "E*", // key 37 |
LvdK | 6:e0bf3b244d7c | 57 | "F*", // key 38 |
LvdK | 6:e0bf3b244d7c | 58 | "G*", // key 39 |
LvdK | 6:e0bf3b244d7c | 59 | "H*", // key 40 |
LvdK | 6:e0bf3b244d7c | 60 | "I*", // key 41 |
LvdK | 6:e0bf3b244d7c | 61 | "J*", // key 42 |
LvdK | 6:e0bf3b244d7c | 62 | "K*", // key 43 |
LvdK | 6:e0bf3b244d7c | 63 | "L*", // key 44 |
LvdK | 6:e0bf3b244d7c | 64 | "M*", // key 45 |
LvdK | 6:e0bf3b244d7c | 65 | "N*", // key 46 |
LvdK | 6:e0bf3b244d7c | 66 | "O*", // key 47 |
LvdK | 6:e0bf3b244d7c | 67 | "P*", // key 48 |
LvdK | 6:e0bf3b244d7c | 68 | "Q*", // key 49 |
LvdK | 6:e0bf3b244d7c | 69 | "R*", // key 50 |
LvdK | 6:e0bf3b244d7c | 70 | "S*", // key 51 |
LvdK | 6:e0bf3b244d7c | 71 | "T*", // key 52 |
LvdK | 6:e0bf3b244d7c | 72 | "U*", // key 53 |
LvdK | 6:e0bf3b244d7c | 73 | "V*", // key 54 |
LvdK | 6:e0bf3b244d7c | 74 | "W*", // key 55 |
LvdK | 6:e0bf3b244d7c | 75 | "X*", // key 56 |
LvdK | 6:e0bf3b244d7c | 76 | "Y*", // key 57 |
LvdK | 6:e0bf3b244d7c | 77 | "Z*", // key 58 |
LvdK | 6:e0bf3b244d7c | 78 | "SPC*", // key 59 |
LvdK | 6:e0bf3b244d7c | 79 | "DEL*", // key 60 |
LvdK | 6:e0bf3b244d7c | 80 | "CLR*", // key 61 |
LvdK | 6:e0bf3b244d7c | 81 | "/*", // key 62 |
LvdK | 6:e0bf3b244d7c | 82 | "RSK1*", // key 63 |
LvdK | 6:e0bf3b244d7c | 83 | "RSK2*", // key 64 |
LvdK | 6:e0bf3b244d7c | 84 | "RSK3*", // key 65 |
LvdK | 6:e0bf3b244d7c | 85 | "RSK4*", // key 67 |
LvdK | 6:e0bf3b244d7c | 86 | "RSK5*", // key 68 |
LvdK | 6:e0bf3b244d7c | 87 | "RSK6*" // key 69 |
LvdK | 6:e0bf3b244d7c | 88 | }; |
LvdK | 6:e0bf3b244d7c | 89 | // ------------------------------------------------------------------------------------------------ |
LvdK | 6:e0bf3b244d7c | 90 | |
LvdK | 6:e0bf3b244d7c | 91 | void send_message_to_FS(char *message_string) { |
LvdK | 6:e0bf3b244d7c | 92 | // Common fnction to send a created message string (VAL, KEY or OKE) to the FS. |
LvdK | 6:e0bf3b244d7c | 93 | // Parameter is pointer to char string that has to be sent. |
LvdK | 6:e0bf3b244d7c | 94 | // Interface can be USB port or Ethernet port. |
LvdK | 6:e0bf3b244d7c | 95 | if ( CDU_FS_interface == 0 ) { // : messages will be sent by USB port |
LvdK | 6:e0bf3b244d7c | 96 | // Test if TX buffer is not full: |
LvdK | 6:e0bf3b244d7c | 97 | // Note: Only writing in the Tx buffer if there is enough space, |
LvdK | 6:e0bf3b244d7c | 98 | // prevents Tx buffer overflow, but caharcters can be lost when Tx buffersize is defined too small ! |
LvdK | 6:e0bf3b244d7c | 99 | // In this case the Blue-Leds-Of-Death due to a TX overflow interrupt will never occur, |
LvdK | 6:e0bf3b244d7c | 100 | // and Mbed will keep running ! |
LvdK | 6:e0bf3b244d7c | 101 | USB.puts(message_string); // : write total string in USB TX buffer <<<<<<<<<<<<<<<<< ???? |
LvdK | 6:e0bf3b244d7c | 102 | } |
LvdK | 6:e0bf3b244d7c | 103 | //if ( CDU_FS_interface == 1 ) Ethernet.puts(message_string); // : messages will be sent by Ehternet |
LvdK | 6:e0bf3b244d7c | 104 | } |
LvdK | 6:e0bf3b244d7c | 105 | |
LvdK | 6:e0bf3b244d7c | 106 | void Send_VAL_message(int var, char *char_pntr) { |
LvdK | 6:e0bf3b244d7c | 107 | // Function creates a valid VAL message out of var parameter and out of value string |
LvdK | 6:e0bf3b244d7c | 108 | // which is addressed by parameter char_pntr. |
LvdK | 6:e0bf3b244d7c | 109 | // After adding a checksum, the total VAL message string will be sent. |
LvdK | 6:e0bf3b244d7c | 110 | |
LvdK | 6:e0bf3b244d7c | 111 | //USB.printf("pseudo VAL message: %d , %s\n",var,char_pntr); // debug only ! |
LvdK | 6:e0bf3b244d7c | 112 | int i; |
LvdK | 6:e0bf3b244d7c | 113 | char byte_read; |
LvdK | 6:e0bf3b244d7c | 114 | char exor_byte = 0; |
LvdK | 6:e0bf3b244d7c | 115 | // Create VAL message, starting with "$PCDUVAL," message header |
LvdK | 6:e0bf3b244d7c | 116 | i = 9; // : i points to first place after "$PCDUVAL," header |
LvdK | 6:e0bf3b244d7c | 117 | // : add 2 digit var number and comma to message: |
LvdK | 6:e0bf3b244d7c | 118 | sprintf(&val_message[i],"%02d,",var); |
LvdK | 6:e0bf3b244d7c | 119 | // Add value of var and extra '*' char to VAL message: |
LvdK | 6:e0bf3b244d7c | 120 | i = 12; |
LvdK | 6:e0bf3b244d7c | 121 | sprintf(&val_message[i],"%s*",char_pntr); |
LvdK | 6:e0bf3b244d7c | 122 | // Calculate checksum now : |
LvdK | 6:e0bf3b244d7c | 123 | i = 1; // : i points to first place after '$' in message |
LvdK | 6:e0bf3b244d7c | 124 | do { byte_read = val_message[i]; |
LvdK | 6:e0bf3b244d7c | 125 | if (byte_read == '*') break; // : exclude '*' from calculation |
LvdK | 6:e0bf3b244d7c | 126 | exor_byte = exor_byte ^ byte_read; |
LvdK | 6:e0bf3b244d7c | 127 | i++; |
LvdK | 6:e0bf3b244d7c | 128 | } while ( i < 50 ); |
LvdK | 6:e0bf3b244d7c | 129 | i++; // : i now points to first digit of checksum after '*' |
LvdK | 6:e0bf3b244d7c | 130 | // Add exor_byte in 2 hex digits and a CR + LF: |
LvdK | 6:e0bf3b244d7c | 131 | sprintf(&val_message[i],"%02x\r\n",exor_byte); // : extra NULL char added by sprintf |
LvdK | 6:e0bf3b244d7c | 132 | send_message_to_FS(val_message); // : send message to defined CDU-FS interface |
LvdK | 6:e0bf3b244d7c | 133 | } |
LvdK | 6:e0bf3b244d7c | 134 | |
LvdK | 6:e0bf3b244d7c | 135 | void Send_ALIVE_message(int seconds){ |
LvdK | 6:e0bf3b244d7c | 136 | int i; |
LvdK | 6:e0bf3b244d7c | 137 | char byte_read; |
LvdK | 6:e0bf3b244d7c | 138 | char exor_byte = 0; |
LvdK | 6:e0bf3b244d7c | 139 | //Create alive message: |
LvdK | 6:e0bf3b244d7c | 140 | i = 9; // : i points to first place after "$PCDUOKE," |
LvdK | 6:e0bf3b244d7c | 141 | // Add seconds in 2 dec digits and a '*' char : |
LvdK | 6:e0bf3b244d7c | 142 | sprintf(&alive_message[i],"%02d*",seconds); |
LvdK | 6:e0bf3b244d7c | 143 | // Calculate checksum now : |
LvdK | 6:e0bf3b244d7c | 144 | i = 1; // : i points to first place after '$' |
LvdK | 6:e0bf3b244d7c | 145 | do { byte_read = alive_message[i]; |
LvdK | 6:e0bf3b244d7c | 146 | if (byte_read == '*') break; // : exclude '*' from exor calculation |
LvdK | 6:e0bf3b244d7c | 147 | exor_byte = exor_byte ^ byte_read; |
LvdK | 6:e0bf3b244d7c | 148 | i++; |
LvdK | 6:e0bf3b244d7c | 149 | } while ( i < 20 ); |
LvdK | 6:e0bf3b244d7c | 150 | i++; // : i now points to first digit of checksum after '*' |
LvdK | 6:e0bf3b244d7c | 151 | // Add exor_byte in 2 hex chars (with upper case A-F) and a CR + LF: |
LvdK | 6:e0bf3b244d7c | 152 | sprintf(&alive_message[i],"%02X\r\n",exor_byte); // : + extra NULL char added by sprintf |
LvdK | 6:e0bf3b244d7c | 153 | send_message_to_FS(alive_message); // : send message to defined CDU-FS interface |
LvdK | 6:e0bf3b244d7c | 154 | |
LvdK | 6:e0bf3b244d7c | 155 | } |
LvdK | 6:e0bf3b244d7c | 156 | |
LvdK | 6:e0bf3b244d7c | 157 | void Send_KEY_message(int key_nr) { |
LvdK | 6:e0bf3b244d7c | 158 | // Function creates a valid KEY message out of key_nr parameter. |
LvdK | 6:e0bf3b244d7c | 159 | // Based on key_nr, a key char string is looked up and added to the message. |
LvdK | 6:e0bf3b244d7c | 160 | // After adding a checksum, the total KEY message will be sent. |
LvdK | 6:e0bf3b244d7c | 161 | int i; |
LvdK | 6:e0bf3b244d7c | 162 | char byte_read; |
LvdK | 6:e0bf3b244d7c | 163 | char exor_byte = 0; |
LvdK | 6:e0bf3b244d7c | 164 | // Create key message, starting with "$PCDUKEY," message header |
LvdK | 6:e0bf3b244d7c | 165 | i = 9; // : i points to first position after "$PCDUKEY," message header |
LvdK | 6:e0bf3b244d7c | 166 | // Add key string to message string including '*' |
LvdK | 6:e0bf3b244d7c | 167 | if ( key_nr != 0 && key_nr < max_keys_CDUpanel ) { |
LvdK | 6:e0bf3b244d7c | 168 | strcpy(&key_message[i],key_value[key_nr]); |
LvdK | 6:e0bf3b244d7c | 169 | } |
LvdK | 6:e0bf3b244d7c | 170 | // Calculate checksum now : |
LvdK | 6:e0bf3b244d7c | 171 | i = 1; // : i points to first place after '$' in message |
LvdK | 6:e0bf3b244d7c | 172 | do { byte_read = key_message[i]; |
LvdK | 6:e0bf3b244d7c | 173 | if (byte_read == '*') break; // : exclude '*' from calculation |
LvdK | 6:e0bf3b244d7c | 174 | exor_byte = exor_byte ^ byte_read; |
LvdK | 6:e0bf3b244d7c | 175 | i++; |
LvdK | 6:e0bf3b244d7c | 176 | } while ( i < 20 ); |
LvdK | 6:e0bf3b244d7c | 177 | i++; // : i now points to first digit of checksum after '*' |
LvdK | 6:e0bf3b244d7c | 178 | // Add exor_byte in 2 hex digits and a CR + LF: |
LvdK | 6:e0bf3b244d7c | 179 | sprintf(&key_message[i],"%02x\r\n",exor_byte); // : extra NULL char added by sprintf |
LvdK | 6:e0bf3b244d7c | 180 | send_message_to_FS(key_message); // : send message to defined CDU-FS interface |
LvdK | 6:e0bf3b244d7c | 181 | } |
LvdK | 6:e0bf3b244d7c | 182 | |
LvdK | 6:e0bf3b244d7c | 183 | |
LvdK | 6:e0bf3b244d7c | 184 | |
LvdK | 6:e0bf3b244d7c | 185 | |
LvdK | 6:e0bf3b244d7c | 186 | |
LvdK | 6:e0bf3b244d7c | 187 | |
LvdK | 6:e0bf3b244d7c | 188 |