voor willem test

Dependencies:   4DGL MODSERIAL mbed mbos

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?

UserRevisionLine numberNew 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