init

Committer:
gert_lauritsen
Date:
Thu Nov 05 12:47:33 2015 +0000
Revision:
0:c9f3777fe0b4
Child:
2:c1599cad82c3
Fungere med display

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gert_lauritsen 0:c9f3777fe0b4 1 //------------------------------------------------------------------------------------
gert_lauritsen 0:c9f3777fe0b4 2 // :
gert_lauritsen 0:c9f3777fe0b4 3 // Title : Comlink
gert_lauritsen 0:c9f3777fe0b4 4 // Filename : Queue.h
gert_lauritsen 0:c9f3777fe0b4 5 // Author : Gert Lauritsen
gert_lauritsen 0:c9f3777fe0b4 6 // Origin Date : 26/05/2015
gert_lauritsen 0:c9f3777fe0b4 7 // Version : 1.000
gert_lauritsen 0:c9f3777fe0b4 8 // Compiler : Keil
gert_lauritsen 0:c9f3777fe0b4 9 // Target :
gert_lauritsen 0:c9f3777fe0b4 10 // Notes : None
gert_lauritsen 0:c9f3777fe0b4 11 //
gert_lauritsen 0:c9f3777fe0b4 12 //------------------------------------------------------------------------------------
gert_lauritsen 0:c9f3777fe0b4 13
gert_lauritsen 0:c9f3777fe0b4 14 #include "ComLink.h"
gert_lauritsen 0:c9f3777fe0b4 15 #define Frameheader 3
gert_lauritsen 0:c9f3777fe0b4 16
gert_lauritsen 0:c9f3777fe0b4 17 ComLink::ComLink(PinName tx, PinName rx,callback_type _callback) : _com(tx,rx)
gert_lauritsen 0:c9f3777fe0b4 18 {
gert_lauritsen 0:c9f3777fe0b4 19 //_com=new Serial(tx,rx);
gert_lauritsen 0:c9f3777fe0b4 20 init_q();
gert_lauritsen 0:c9f3777fe0b4 21 _com.baud(19200);
gert_lauritsen 0:c9f3777fe0b4 22 TxAktiv=0; //Signal om at der ikke sendes data for øjeblikket
gert_lauritsen 0:c9f3777fe0b4 23 _com.attach(this,&ComLink::txCallback, Serial::TxIrq); //Interrupt rutiner
gert_lauritsen 0:c9f3777fe0b4 24 _com.attach(this,&ComLink::rxCallback, Serial::RxIrq);
gert_lauritsen 0:c9f3777fe0b4 25 callback = _callback;
gert_lauritsen 0:c9f3777fe0b4 26 }
gert_lauritsen 0:c9f3777fe0b4 27
gert_lauritsen 0:c9f3777fe0b4 28 bool ComLink::CRC() {
gert_lauritsen 0:c9f3777fe0b4 29 unsigned char CRCin=0;
gert_lauritsen 0:c9f3777fe0b4 30 int framesize=inbuff[1];
gert_lauritsen 0:c9f3777fe0b4 31 for (int i=0; i<(framesize+Frameheader); i++) CRCin^=inbuff[i];
gert_lauritsen 0:c9f3777fe0b4 32 //return CRCin==inbuff[framesize+Frameheader];
gert_lauritsen 0:c9f3777fe0b4 33 return 1;
gert_lauritsen 0:c9f3777fe0b4 34 }
gert_lauritsen 0:c9f3777fe0b4 35
gert_lauritsen 0:c9f3777fe0b4 36 //------------------------------------------------------------------------------------
gert_lauritsen 0:c9f3777fe0b4 37 // STX Size type Data CRC
gert_lauritsen 0:c9f3777fe0b4 38 // 0 1 2 3..Dsize Dsize+3
gert_lauritsen 0:c9f3777fe0b4 39 //------------------------------------------------------------------------------------
gert_lauritsen 0:c9f3777fe0b4 40
gert_lauritsen 0:c9f3777fe0b4 41 void ComLink::rxCallback() //modtager data, når frame er modtaget sende besked
gert_lauritsen 0:c9f3777fe0b4 42 {
gert_lauritsen 0:c9f3777fe0b4 43 static unsigned char InPointer;
gert_lauritsen 0:c9f3777fe0b4 44 static bool Incoming;
gert_lauritsen 0:c9f3777fe0b4 45 unsigned char framesize;
gert_lauritsen 0:c9f3777fe0b4 46 int _Dtype=0;
gert_lauritsen 0:c9f3777fe0b4 47
gert_lauritsen 0:c9f3777fe0b4 48 inbuff[InPointer]=_com.getc();
gert_lauritsen 0:c9f3777fe0b4 49 if ((!Incoming) && (inbuff[InPointer]==stx)) {
gert_lauritsen 0:c9f3777fe0b4 50 Incoming=1;
gert_lauritsen 0:c9f3777fe0b4 51 }
gert_lauritsen 0:c9f3777fe0b4 52 if (Incoming) {
gert_lauritsen 0:c9f3777fe0b4 53 if (InPointer>Frameheader) {
gert_lauritsen 0:c9f3777fe0b4 54 framesize=inbuff[1];
gert_lauritsen 0:c9f3777fe0b4 55 if (InPointer==framesize-1) { //Vi har modtaget det hele
gert_lauritsen 0:c9f3777fe0b4 56 if (CRC()) {
gert_lauritsen 0:c9f3777fe0b4 57 _Dtype=inbuff[2]; DSize=framesize;
gert_lauritsen 0:c9f3777fe0b4 58 strncpy(&Data[0],&inbuff[3],framesize);
gert_lauritsen 0:c9f3777fe0b4 59 callback(_Dtype); //sender besked længere op i systemet
gert_lauritsen 0:c9f3777fe0b4 60 InPointer=0;
gert_lauritsen 0:c9f3777fe0b4 61 Incoming=0;
gert_lauritsen 0:c9f3777fe0b4 62 } //if crc
gert_lauritsen 0:c9f3777fe0b4 63 else {
gert_lauritsen 0:c9f3777fe0b4 64 InPointer=0;
gert_lauritsen 0:c9f3777fe0b4 65 Incoming=0;
gert_lauritsen 0:c9f3777fe0b4 66 }
gert_lauritsen 0:c9f3777fe0b4 67
gert_lauritsen 0:c9f3777fe0b4 68 } //if framesize..
gert_lauritsen 0:c9f3777fe0b4 69 } //if (Inpo..
gert_lauritsen 0:c9f3777fe0b4 70 if (Incoming) InPointer++; //
gert_lauritsen 0:c9f3777fe0b4 71 } //if incoming
gert_lauritsen 0:c9f3777fe0b4 72 }
gert_lauritsen 0:c9f3777fe0b4 73
gert_lauritsen 0:c9f3777fe0b4 74
gert_lauritsen 0:c9f3777fe0b4 75 void ComLink::txCallback() //Skal tage den næste byt i rækken og sende den
gert_lauritsen 0:c9f3777fe0b4 76 {
gert_lauritsen 0:c9f3777fe0b4 77 unsigned char NextCh=0;
gert_lauritsen 0:c9f3777fe0b4 78 if (Get(&NextCh)==0) TxAktiv=0;
gert_lauritsen 0:c9f3777fe0b4 79 else
gert_lauritsen 0:c9f3777fe0b4 80 _com.putc((int) NextCh); //sender næste char fra q
gert_lauritsen 0:c9f3777fe0b4 81 }
gert_lauritsen 0:c9f3777fe0b4 82
gert_lauritsen 0:c9f3777fe0b4 83 void ComLink::Senddata(unsigned char Dtype,unsigned char Dsize, char *str)
gert_lauritsen 0:c9f3777fe0b4 84 {
gert_lauritsen 0:c9f3777fe0b4 85 unsigned char NextCh=0;
gert_lauritsen 0:c9f3777fe0b4 86 Q_crc=0;
gert_lauritsen 0:c9f3777fe0b4 87 //printf("N=%d %s\r\n",Dsize, &str[2]);
gert_lauritsen 0:c9f3777fe0b4 88 Put(stx); //Start Frame
gert_lauritsen 0:c9f3777fe0b4 89 Put(Dsize); //FrameSize
gert_lauritsen 0:c9f3777fe0b4 90 Put(Dtype); //Frame type
gert_lauritsen 0:c9f3777fe0b4 91 for (int i=0; i<Dsize; i++) { //Datasektion
gert_lauritsen 0:c9f3777fe0b4 92 Put(*str);
gert_lauritsen 0:c9f3777fe0b4 93 str++;
gert_lauritsen 0:c9f3777fe0b4 94 }
gert_lauritsen 0:c9f3777fe0b4 95 Put(Q_crc); //CRC
gert_lauritsen 0:c9f3777fe0b4 96 if (!TxAktiv) { //Hvis vi ikke sender noget for tiden startes tømningen fra Q
gert_lauritsen 0:c9f3777fe0b4 97 Get(&NextCh);
gert_lauritsen 0:c9f3777fe0b4 98 _com.putc((int) NextCh); //sender næste char fra q
gert_lauritsen 0:c9f3777fe0b4 99 TxAktiv=1;
gert_lauritsen 0:c9f3777fe0b4 100 }
gert_lauritsen 0:c9f3777fe0b4 101 }
gert_lauritsen 0:c9f3777fe0b4 102 //---------------------------------------------------------------------------------------------------
gert_lauritsen 0:c9f3777fe0b4 103 //Tx Frames
gert_lauritsen 0:c9f3777fe0b4 104 //Public functions:
gert_lauritsen 0:c9f3777fe0b4 105 void ComLink::TxFloats(unsigned char Ftype, float *Fvalue, int Size){
gert_lauritsen 0:c9f3777fe0b4 106 char OutStr[40];
gert_lauritsen 0:c9f3777fe0b4 107 union {
gert_lauritsen 0:c9f3777fe0b4 108 char bytes[4];
gert_lauritsen 0:c9f3777fe0b4 109 float val;
gert_lauritsen 0:c9f3777fe0b4 110 } Float2Byte;
gert_lauritsen 0:c9f3777fe0b4 111 for (int i=0; i<Size; i++) {
gert_lauritsen 0:c9f3777fe0b4 112 Float2Byte.val=*Fvalue;
gert_lauritsen 0:c9f3777fe0b4 113 memcpy(&OutStr[i*4],&Float2Byte.bytes[0],4);
gert_lauritsen 0:c9f3777fe0b4 114 }
gert_lauritsen 0:c9f3777fe0b4 115 Senddata(Ftype,Size*4,OutStr);
gert_lauritsen 0:c9f3777fe0b4 116 }
gert_lauritsen 0:c9f3777fe0b4 117
gert_lauritsen 0:c9f3777fe0b4 118 void ComLink::TxCalRecord(float *value, int Size){
gert_lauritsen 0:c9f3777fe0b4 119 TxFloats(2,value,Size);
gert_lauritsen 0:c9f3777fe0b4 120 }
gert_lauritsen 0:c9f3777fe0b4 121
gert_lauritsen 0:c9f3777fe0b4 122
gert_lauritsen 0:c9f3777fe0b4 123 void ComLink::TxStatus(float *value, int Size){
gert_lauritsen 0:c9f3777fe0b4 124 TxFloats(3,value,Size);
gert_lauritsen 0:c9f3777fe0b4 125 }
gert_lauritsen 0:c9f3777fe0b4 126
gert_lauritsen 0:c9f3777fe0b4 127 void ComLink::TxErrStateArr(float *value, int Size){
gert_lauritsen 0:c9f3777fe0b4 128 TxFloats(4,value,Size);
gert_lauritsen 0:c9f3777fe0b4 129 }
gert_lauritsen 0:c9f3777fe0b4 130
gert_lauritsen 0:c9f3777fe0b4 131 void ComLink::TxSetStateArr(float *value, int Size){
gert_lauritsen 0:c9f3777fe0b4 132 TxFloats(5,value,Size);
gert_lauritsen 0:c9f3777fe0b4 133 }
gert_lauritsen 0:c9f3777fe0b4 134
gert_lauritsen 0:c9f3777fe0b4 135
gert_lauritsen 0:c9f3777fe0b4 136 void ComLink::WriteLCD(unsigned char x,unsigned char y, char *str)
gert_lauritsen 0:c9f3777fe0b4 137 {
gert_lauritsen 0:c9f3777fe0b4 138 char outstr[20];
gert_lauritsen 0:c9f3777fe0b4 139 outstr[0]=x;
gert_lauritsen 0:c9f3777fe0b4 140 outstr[1]=y;
gert_lauritsen 0:c9f3777fe0b4 141 strcpy(&outstr[2],str);
gert_lauritsen 0:c9f3777fe0b4 142 Senddata(6,2+strlen(str),outstr);
gert_lauritsen 0:c9f3777fe0b4 143 }
gert_lauritsen 0:c9f3777fe0b4 144
gert_lauritsen 0:c9f3777fe0b4 145 void ComLink::cls()
gert_lauritsen 0:c9f3777fe0b4 146 {
gert_lauritsen 0:c9f3777fe0b4 147 Senddata(7,0,"");
gert_lauritsen 0:c9f3777fe0b4 148 }