kobe leysen / Mbed 2 deprecated TEST

Dependencies:   DAQ mbed-rtos mbed

Committer:
leysenkobe
Date:
Wed Apr 30 11:41:10 2014 +0000
Revision:
2:7f7eb0cc78a4
Parent:
1:fa51edf89e71
kbk;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leysenkobe 0:6ee88b4152dc 1 #include "Uart.h"
leysenkobe 0:6ee88b4152dc 2 #include "Packet.h"
leysenkobe 0:6ee88b4152dc 3 #include "mbed.h"
leysenkobe 0:6ee88b4152dc 4
leysenkobe 0:6ee88b4152dc 5 Serial pc(USBTX, USBRX);
leysenkobe 0:6ee88b4152dc 6
leysenkobe 0:6ee88b4152dc 7 Uart::Uart(Module *m)
leysenkobe 0:6ee88b4152dc 8 {
leysenkobe 0:6ee88b4152dc 9 pc.baud(230400);
leysenkobe 0:6ee88b4152dc 10 this->m = m;
leysenkobe 0:6ee88b4152dc 11 packetscount = 0;
leysenkobe 0:6ee88b4152dc 12 blub = 0;
leysenkobe 0:6ee88b4152dc 13 }
leysenkobe 0:6ee88b4152dc 14
leysenkobe 0:6ee88b4152dc 15 Uart::~Uart(void)
leysenkobe 0:6ee88b4152dc 16 {
leysenkobe 0:6ee88b4152dc 17
leysenkobe 0:6ee88b4152dc 18 }
leysenkobe 0:6ee88b4152dc 19
leysenkobe 0:6ee88b4152dc 20 void Uart::uart_thread()
leysenkobe 0:6ee88b4152dc 21 {
leysenkobe 0:6ee88b4152dc 22 //kijken of we data kunnen ontvangen
leysenkobe 0:6ee88b4152dc 23 if(pc.readable())
leysenkobe 0:6ee88b4152dc 24 {
leysenkobe 0:6ee88b4152dc 25 //TOT_SIZE bepalen voor de totale groote van de array
leysenkobe 0:6ee88b4152dc 26 uint8_t *totsize = new uint8_t[2];
leysenkobe 0:6ee88b4152dc 27 totsize[0] = pc.getc();
leysenkobe 0:6ee88b4152dc 28 totsize[1] = pc.getc();
leysenkobe 0:6ee88b4152dc 29 int TOT_SIZE = ((totsize[0] << 8) + totsize[1]);
leysenkobe 0:6ee88b4152dc 30
leysenkobe 0:6ee88b4152dc 31 if(TOT_SIZE<7 || TOT_SIZE>50)
leysenkobe 0:6ee88b4152dc 32 {
leysenkobe 0:6ee88b4152dc 33 this->flush();
leysenkobe 0:6ee88b4152dc 34 Packet *p = new Packet(m->getID());
leysenkobe 0:6ee88b4152dc 35 m->packetWorker(p);
leysenkobe 0:6ee88b4152dc 36 return;
leysenkobe 0:6ee88b4152dc 37 }
leysenkobe 0:6ee88b4152dc 38
leysenkobe 0:6ee88b4152dc 39 //DATA packet aanmaken
leysenkobe 0:6ee88b4152dc 40 uint8_t *data = new uint8_t[TOT_SIZE+2];
leysenkobe 0:6ee88b4152dc 41
leysenkobe 0:6ee88b4152dc 42 //TOT_SIZE
leysenkobe 0:6ee88b4152dc 43 data[0] = totsize[0];
leysenkobe 0:6ee88b4152dc 44 data[1] = totsize[1];
leysenkobe 0:6ee88b4152dc 45
leysenkobe 0:6ee88b4152dc 46 //ID
leysenkobe 0:6ee88b4152dc 47 data[2] = pc.getc();
leysenkobe 0:6ee88b4152dc 48 data[3] = pc.getc();
leysenkobe 0:6ee88b4152dc 49
leysenkobe 0:6ee88b4152dc 50 //CMD
leysenkobe 0:6ee88b4152dc 51 data[4] = pc.getc();
leysenkobe 0:6ee88b4152dc 52
leysenkobe 0:6ee88b4152dc 53 //CMD_SIZE
leysenkobe 0:6ee88b4152dc 54 data[5] = pc.getc();
leysenkobe 0:6ee88b4152dc 55 data[6] = pc.getc();
leysenkobe 0:6ee88b4152dc 56
leysenkobe 0:6ee88b4152dc 57 //CMD_DATA
leysenkobe 0:6ee88b4152dc 58 int size = ((data[5] << 8) + data[6]);
leysenkobe 0:6ee88b4152dc 59 if(size+7 != TOT_SIZE)
leysenkobe 0:6ee88b4152dc 60 {
leysenkobe 0:6ee88b4152dc 61 this->flush();
leysenkobe 0:6ee88b4152dc 62 Packet *p = new Packet(m->getID());
leysenkobe 0:6ee88b4152dc 63 m->packetWorker(p);
leysenkobe 0:6ee88b4152dc 64 return;
leysenkobe 0:6ee88b4152dc 65 }
leysenkobe 0:6ee88b4152dc 66 for (int i = 7; i < size+7; i++)
leysenkobe 0:6ee88b4152dc 67 {
leysenkobe 0:6ee88b4152dc 68 data[i] = pc.getc();
leysenkobe 0:6ee88b4152dc 69 }
leysenkobe 0:6ee88b4152dc 70 //RESERVED
leysenkobe 0:6ee88b4152dc 71 data[size+7] = pc.getc();
leysenkobe 0:6ee88b4152dc 72 data[size+8] = pc.getc();
leysenkobe 0:6ee88b4152dc 73
leysenkobe 0:6ee88b4152dc 74 this->flush();
leysenkobe 2:7f7eb0cc78a4 75 Packet *p = new Packet(m->getID(),data,TOT_SIZE+2);
leysenkobe 2:7f7eb0cc78a4 76 m->packetWorker(p);
leysenkobe 0:6ee88b4152dc 77
leysenkobe 0:6ee88b4152dc 78 delete [] totsize;
leysenkobe 0:6ee88b4152dc 79 delete [] data;
leysenkobe 0:6ee88b4152dc 80
leysenkobe 0:6ee88b4152dc 81 }
leysenkobe 0:6ee88b4152dc 82 //kijken of we data kunnen versturen
leysenkobe 0:6ee88b4152dc 83 if(packetscount > 0)
leysenkobe 0:6ee88b4152dc 84 {
leysenkobe 0:6ee88b4152dc 85 for(int i = 0; i < packetscount; i++)
leysenkobe 0:6ee88b4152dc 86 {
leysenkobe 0:6ee88b4152dc 87 //pc.printf("PACKET: ");
leysenkobe 0:6ee88b4152dc 88 Packet *p = packets[i];
leysenkobe 0:6ee88b4152dc 89
leysenkobe 0:6ee88b4152dc 90 //TOT_SIZE bytes
leysenkobe 0:6ee88b4152dc 91 pc.putc((p->getTOT_SIZE() >> 8) & 255);
leysenkobe 0:6ee88b4152dc 92 pc.putc((p->getTOT_SIZE() & 255));
leysenkobe 0:6ee88b4152dc 93
leysenkobe 0:6ee88b4152dc 94 //ID bytes
leysenkobe 0:6ee88b4152dc 95 pc.putc(p->getID()[0]);
leysenkobe 0:6ee88b4152dc 96 pc.putc(p->getID()[1]);
leysenkobe 0:6ee88b4152dc 97
leysenkobe 0:6ee88b4152dc 98 //CMD byte
leysenkobe 0:6ee88b4152dc 99 pc.putc(p->getCMD());
leysenkobe 0:6ee88b4152dc 100
leysenkobe 0:6ee88b4152dc 101 //CMD_SIZE bytes
leysenkobe 0:6ee88b4152dc 102 pc.putc((p->getCMD_SIZE()>>8)& 255);
leysenkobe 0:6ee88b4152dc 103 pc.putc(p->getCMD_SIZE() & 255);
leysenkobe 0:6ee88b4152dc 104
leysenkobe 0:6ee88b4152dc 105 //CMD_DATA
leysenkobe 0:6ee88b4152dc 106 for (int j = 0; j < p->getCMD_SIZE(); j++)
leysenkobe 0:6ee88b4152dc 107 {
leysenkobe 0:6ee88b4152dc 108 pc.putc(p->getCMD_DATA()[j]);
leysenkobe 0:6ee88b4152dc 109 }
leysenkobe 0:6ee88b4152dc 110
leysenkobe 0:6ee88b4152dc 111 //RESERVED bytes
leysenkobe 0:6ee88b4152dc 112 pc.putc(p->getRESERVED()[0]);
leysenkobe 0:6ee88b4152dc 113 pc.putc(p->getRESERVED()[1]);
leysenkobe 0:6ee88b4152dc 114
leysenkobe 1:fa51edf89e71 115 //pc.printf("PACKET: %d \n",this->blub++);
leysenkobe 0:6ee88b4152dc 116 delete p;
leysenkobe 0:6ee88b4152dc 117 //pc.printf("\n");
leysenkobe 0:6ee88b4152dc 118 }
leysenkobe 0:6ee88b4152dc 119 packetscount = 0;
leysenkobe 0:6ee88b4152dc 120 }
leysenkobe 0:6ee88b4152dc 121 }
leysenkobe 0:6ee88b4152dc 122 void Uart::send(Packet *p)
leysenkobe 0:6ee88b4152dc 123 {
leysenkobe 0:6ee88b4152dc 124 //packet toevoegen aan de buffer
leysenkobe 0:6ee88b4152dc 125 if(packetscount<2)
leysenkobe 0:6ee88b4152dc 126 {
leysenkobe 0:6ee88b4152dc 127 packets[packetscount] = p;
leysenkobe 0:6ee88b4152dc 128 packetscount++;
leysenkobe 0:6ee88b4152dc 129 }
leysenkobe 0:6ee88b4152dc 130 else
leysenkobe 0:6ee88b4152dc 131 {
leysenkobe 0:6ee88b4152dc 132 //laten weten aan module dat de buffer vol zit, zodat een lampje gaat branden
leysenkobe 0:6ee88b4152dc 133 }
leysenkobe 0:6ee88b4152dc 134 }
leysenkobe 0:6ee88b4152dc 135
leysenkobe 0:6ee88b4152dc 136 void Uart::flush(void)
leysenkobe 0:6ee88b4152dc 137 {
leysenkobe 0:6ee88b4152dc 138 while(pc.readable())
leysenkobe 0:6ee88b4152dc 139 {
leysenkobe 0:6ee88b4152dc 140 pc.getc();
leysenkobe 0:6ee88b4152dc 141 }
leysenkobe 0:6ee88b4152dc 142 return;
leysenkobe 0:6ee88b4152dc 143 }