New work version with additional functions

Dependencies:   4DGL-UC ConfigFile MODSERIAL mbed mbos

Fork of CDU_Mbed_35 by Engravity-CDU

Committer:
WillemBraat
Date:
Wed Oct 08 14:14:52 2014 +0000
Revision:
20:2d6ac4577e68
Parent:
14:5767d651d624
New release with additional new functions.
; * File handling for config files
; * CDU setup & test screens
; * External power monitoring

Who changed what in which revision?

UserRevisionLine numberNew contents of line
LvdK 14:5767d651d624 1 // L. van der Kolk, ELVEDEKA, Holland
LvdK 14:5767d651d624 2 // File: CDU2FS_message_6.cpp
LvdK 14:5767d651d624 3 //
LvdK 14:5767d651d624 4 // -- Message handling from CDU to FS --
LvdK 14:5767d651d624 5
LvdK 14:5767d651d624 6 #include "mbed.h"
LvdK 14:5767d651d624 7 #include "MODSERIAL.h"
LvdK 14:5767d651d624 8 #include "keys.h"
LvdK 14:5767d651d624 9
LvdK 14:5767d651d624 10 extern MODSERIAL USB;
LvdK 14:5767d651d624 11 extern int CDU_FS_interface;
LvdK 14:5767d651d624 12
LvdK 14:5767d651d624 13 int key_hit_ID = 0; // : number of key that was hit, 0 = no hit of any key. ( global flag ! )
LvdK 14:5767d651d624 14
LvdK 14:5767d651d624 15 char key_message[25] = "$PCDUKEY,"; // : setup begin of KEY message to FS
LvdK 14:5767d651d624 16 char alive_message[25] = "$PCDUOKE,"; // : setup begin of ALIVE message to FS
LvdK 14:5767d651d624 17
LvdK 14:5767d651d624 18 void send_message_to_FS(char *message_string) {
LvdK 14:5767d651d624 19 // Common fnction to send a created message string (KEY or OKE) to the FS.
LvdK 14:5767d651d624 20 // Parameter is pointer to char string that has to be sent.
LvdK 14:5767d651d624 21 // Interface can be USB port or Ethernet port.
LvdK 14:5767d651d624 22 int i = 0;
LvdK 14:5767d651d624 23 if ( CDU_FS_interface == 0 ) { // : messages will be sent out by USB port
LvdK 14:5767d651d624 24 while ( message_string[i] != '\0' ) {
LvdK 14:5767d651d624 25 USB.putc(message_string[i]);
LvdK 14:5767d651d624 26 i++;
LvdK 14:5767d651d624 27 }
LvdK 14:5767d651d624 28 }
LvdK 14:5767d651d624 29 if ( CDU_FS_interface == 1 ) {
LvdK 14:5767d651d624 30 // Messages will be sent out by Ehternet interface
LvdK 14:5767d651d624 31 // -- Not implemented --
LvdK 14:5767d651d624 32 }
LvdK 14:5767d651d624 33 }
LvdK 14:5767d651d624 34
LvdK 14:5767d651d624 35 void Send_ALIVE_message(int seconds){
LvdK 14:5767d651d624 36 int i;
LvdK 14:5767d651d624 37 char byte_read;
LvdK 14:5767d651d624 38 char exor_byte = 0;
LvdK 14:5767d651d624 39 //Create alive message:
LvdK 14:5767d651d624 40 i = 9; // : i points to first place after "$PCDUOKE,"
LvdK 14:5767d651d624 41 // Add seconds in 2 dec digits and a '*' char :
LvdK 14:5767d651d624 42 sprintf(&alive_message[i],"%02d*",seconds);
LvdK 14:5767d651d624 43 // Calculate checksum now :
LvdK 14:5767d651d624 44 i = 1; // : i points to first place after '$'
LvdK 14:5767d651d624 45 do { byte_read = alive_message[i];
LvdK 14:5767d651d624 46 if (byte_read == '*') break; // : exclude '*' from exor calculation
LvdK 14:5767d651d624 47 exor_byte = exor_byte ^ byte_read;
LvdK 14:5767d651d624 48 i++;
LvdK 14:5767d651d624 49 } while ( i < 20 );
LvdK 14:5767d651d624 50 i++; // : i now points to first digit of checksum after '*'
LvdK 14:5767d651d624 51 // Add exor_byte in 2 hex chars (with upper case A-F) and a CR + LF:
LvdK 14:5767d651d624 52 sprintf(&alive_message[i],"%02X\r\n",exor_byte); // : + extra NULL char added by sprintf
LvdK 14:5767d651d624 53 send_message_to_FS(alive_message); // : send message to FS
LvdK 14:5767d651d624 54 }
LvdK 14:5767d651d624 55
LvdK 14:5767d651d624 56 void Send_KEY_message(int key_nr) {
LvdK 14:5767d651d624 57 // Function creates a valid KEY message out of key_nr parameter.
LvdK 14:5767d651d624 58 // Based on key_nr, a key char string is looked up and added to the message.
LvdK 14:5767d651d624 59 // After adding a checksum, the total KEY message will be sent.
LvdK 14:5767d651d624 60 int i;
LvdK 14:5767d651d624 61 char byte_read;
LvdK 14:5767d651d624 62 char exor_byte = 0;
LvdK 14:5767d651d624 63 // Create key message, starting with "$PCDUKEY," message header
LvdK 14:5767d651d624 64 i = 9; // : i points to first position after "$PCDUKEY," message header
LvdK 14:5767d651d624 65 // Add key string to message string including '*'
LvdK 14:5767d651d624 66 if ( key_nr != 0 && key_nr < max_keys_CDUpanel ) {
LvdK 14:5767d651d624 67 strcpy(&key_message[i],key_value[key_nr]);
LvdK 14:5767d651d624 68 // Calculate checksum now :
LvdK 14:5767d651d624 69 i = 1; // : i points to first place after '$' in message
LvdK 14:5767d651d624 70 do { byte_read = key_message[i];
LvdK 14:5767d651d624 71 if (byte_read == '*') break; // : exclude '*' from calculation
LvdK 14:5767d651d624 72 exor_byte = exor_byte ^ byte_read;
LvdK 14:5767d651d624 73 i++;
LvdK 14:5767d651d624 74 } while ( i < 20 );
LvdK 14:5767d651d624 75 i++; // : i now points to first digit of checksum after '*'
LvdK 14:5767d651d624 76 // Add exor_byte in 2 hex digits and a CR + LF:
LvdK 14:5767d651d624 77 sprintf(&key_message[i],"%02X\r\n",exor_byte); // : extra NULL char added by sprintf
LvdK 14:5767d651d624 78 send_message_to_FS(key_message); // : send message to FS
LvdK 14:5767d651d624 79 }
LvdK 14:5767d651d624 80 }
LvdK 14:5767d651d624 81
LvdK 14:5767d651d624 82