QC Control software

Dependencies:   mbed

Fork of dgps by Colin Stearns

Committer:
dylanembed123
Date:
Mon Apr 07 01:30:04 2014 +0000
Revision:
13:a6d3cf2b018e
Parent:
12:e42985e3ea64
Child:
14:6be57da62283
Send Image over Xbee

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dylanembed123 12:e42985e3ea64 1 #define PACKETSIZE 256
dylanembed123 12:e42985e3ea64 2
dylanembed123 12:e42985e3ea64 3 // Example
dylanembed123 12:e42985e3ea64 4 // Packet 1. (SuperPackid=5,type=PT_IMAGE,size=0)
dylanembed123 12:e42985e3ea64 5 // Packet 2. (SuperPackid=5,type=PT_DEFAULT,size=1024)
dylanembed123 12:e42985e3ea64 6 // Packet 3. (SuperPackid=5,type=PT_DEFAULT,size=1000)
dylanembed123 12:e42985e3ea64 7 // Packet 4. (SuperPackid=5,type=PT_END,size=0)
dylanembed123 13:a6d3cf2b018e 8 #define XBEEON
dylanembed123 12:e42985e3ea64 9 enum PACKET_TYPE{
dylanembed123 12:e42985e3ea64 10 PT_DEFAULT=0,
dylanembed123 12:e42985e3ea64 11 PT_END,
dylanembed123 12:e42985e3ea64 12 PT_IMAGE,
dylanembed123 12:e42985e3ea64 13 PT_SIZE
dylanembed123 12:e42985e3ea64 14 };
dylanembed123 12:e42985e3ea64 15 typedef struct PacketStruct{
dylanembed123 13:a6d3cf2b018e 16 unsigned int type;
dylanembed123 12:e42985e3ea64 17 unsigned int size;// Number of valid bits
dylanembed123 12:e42985e3ea64 18 char data[PACKETSIZE];
dylanembed123 12:e42985e3ea64 19 unsigned int superPackID;//
dylanembed123 12:e42985e3ea64 20 }PacketStruct;
dylanembed123 12:e42985e3ea64 21
dylanembed123 12:e42985e3ea64 22 class PacketSender{
dylanembed123 12:e42985e3ea64 23 private:
dylanembed123 12:e42985e3ea64 24 unsigned int superID;
dylanembed123 12:e42985e3ea64 25 public:
dylanembed123 12:e42985e3ea64 26 unsigned int getSuperID(){return superID++;}
dylanembed123 13:a6d3cf2b018e 27 PacketSender():superID(0),outputDevice(
dylanembed123 13:a6d3cf2b018e 28 #ifdef XBEEON
dylanembed123 13:a6d3cf2b018e 29 XBEE::getSerial()
dylanembed123 13:a6d3cf2b018e 30 #else
dylanembed123 13:a6d3cf2b018e 31 USB::getSerial()
dylanembed123 13:a6d3cf2b018e 32 #endif
dylanembed123 13:a6d3cf2b018e 33 ){}
dylanembed123 12:e42985e3ea64 34 Serial& outputDevice;
dylanembed123 12:e42985e3ea64 35 void sendPacket(PacketStruct& output){
dylanembed123 12:e42985e3ea64 36 for(int a=0;a<sizeof(PacketStruct);a++){
dylanembed123 12:e42985e3ea64 37 outputDevice.putc(((char*)(&output))[a]);
dylanembed123 13:a6d3cf2b018e 38 //USB::getSerial().putc(((char*)(&output))[a]);
dylanembed123 12:e42985e3ea64 39 }
dylanembed123 12:e42985e3ea64 40 }
dylanembed123 12:e42985e3ea64 41 unsigned int min(unsigned int a,unsigned int b){
dylanembed123 12:e42985e3ea64 42 return a<b ? a : b;
dylanembed123 12:e42985e3ea64 43 }
dylanembed123 12:e42985e3ea64 44 void sendPacket(unsigned int superPackID,char* data,unsigned int size,PACKET_TYPE type = PT_END){
dylanembed123 12:e42985e3ea64 45 if(data!=NULL && size>0){
dylanembed123 13:a6d3cf2b018e 46 for(int i=0;i<=(size-1)/PACKETSIZE;i++){
dylanembed123 12:e42985e3ea64 47 PacketStruct output;
dylanembed123 12:e42985e3ea64 48 output.type=PT_DEFAULT;
dylanembed123 12:e42985e3ea64 49 output.superPackID=superPackID;
dylanembed123 12:e42985e3ea64 50 output.size=min(PACKETSIZE,size-i*PACKETSIZE);
dylanembed123 12:e42985e3ea64 51 for(int a=0;a<output.size;a++){
dylanembed123 12:e42985e3ea64 52 //USB::getSerial().printf(">>%d/%d - %d\n",a,size,output.size);
dylanembed123 12:e42985e3ea64 53 output.data[a]=data[a-i*PACKETSIZE];
dylanembed123 12:e42985e3ea64 54 }
dylanembed123 13:a6d3cf2b018e 55 for(int a=output.size;a<PACKETSIZE;a++){output.data[a]='\0';}
dylanembed123 12:e42985e3ea64 56 //memcpy(output.data,&(data[i*PACKETSIZE]),min(PACKETSIZE,size-i*PACKETSIZE));
dylanembed123 12:e42985e3ea64 57 sendPacket(output);
dylanembed123 12:e42985e3ea64 58 }
dylanembed123 12:e42985e3ea64 59
dylanembed123 12:e42985e3ea64 60 }else{
dylanembed123 12:e42985e3ea64 61 PacketStruct output;
dylanembed123 12:e42985e3ea64 62 output.type=type;
dylanembed123 13:a6d3cf2b018e 63 output.size=0;
dylanembed123 12:e42985e3ea64 64 output.superPackID=superPackID;
dylanembed123 13:a6d3cf2b018e 65 for(int a=0;a<PACKETSIZE;a++){output.data[a]=a;}
dylanembed123 12:e42985e3ea64 66 sendPacket(output);
dylanembed123 12:e42985e3ea64 67 }
dylanembed123 12:e42985e3ea64 68 }
dylanembed123 12:e42985e3ea64 69 PacketStruct* getNextPacket(){
dylanembed123 12:e42985e3ea64 70 int avail = outputDevice.readable();
dylanembed123 12:e42985e3ea64 71 if(avail <= 0)return NULL;
dylanembed123 12:e42985e3ea64 72 PacketStruct* output=new PacketStruct();
dylanembed123 12:e42985e3ea64 73 for(int i=0;i<sizeof(PacketStruct);i++){
dylanembed123 12:e42985e3ea64 74 // Wait for byte
dylanembed123 12:e42985e3ea64 75 while(outputDevice.readable()<=0){}
dylanembed123 12:e42985e3ea64 76 ((char*)output)[i] = outputDevice.getc();
dylanembed123 12:e42985e3ea64 77 }
dylanembed123 12:e42985e3ea64 78 return output;
dylanembed123 12:e42985e3ea64 79 }
dylanembed123 12:e42985e3ea64 80
dylanembed123 12:e42985e3ea64 81 };
dylanembed123 12:e42985e3ea64 82 static PacketSender* ps=NULL;
dylanembed123 12:e42985e3ea64 83 static PacketSender& getPS(){
dylanembed123 12:e42985e3ea64 84 if(ps==NULL)ps=new PacketSender();
dylanembed123 12:e42985e3ea64 85 return *ps;
dylanembed123 12:e42985e3ea64 86 }