Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ReceivePacket.cpp Source File

ReceivePacket.cpp

00001 /*******************************************
00002  * ReceivePacket.h
00003  * @author Yuki Suga
00004  * @copyright Yuki Suga (ysuga.net) Nov, 10th, 2010.
00005  * @license LGPLv3
00006  *****************************************/
00007 /********************************************
00008 It changed a little for mbed. 
00009 The serial buffer is not used. 
00010 2011/7/27 @nucho
00011 ********************************************/
00012 #include "ReceivePacket.h"
00013 #include "Serial.h"
00014 //#include <HardwareSerial.h>
00015 //#include <WConstants.h>
00016 
00017 int ReceivePacket(char* packet) {
00018     //int counter = 0;
00019     unsigned char sum = 0;
00020     /*
00021     while (Serial.available() < PACKET_HEADER_SIZE) {
00022         delayMicroseconds(PACKET_WAITING_DELAY);
00023         counter++;
00024         if (counter == PACKET_WAITING_COUNT) {
00025             return -TIMEOUT;
00026         }
00027     }*/
00028     //    char host = Serial.read();
00029     //    char target = Serial.read();
00030 
00031     packet[INTERFACE] = pc.getc();
00032     sum += packet[INTERFACE];
00033 
00034     packet[DATA_LENGTH] = pc.getc();
00035     sum += packet[DATA_LENGTH];
00036 
00037     /*
00038     while (Serial.available() < packet[DATA_LENGTH]+1) {
00039         //delayMicroseconds(PACKET_WAITING_DELAY);
00040         wait_us(PACKET_WAITING_DELAY);
00041         counter++;
00042         if (counter == PACKET_WAITING_COUNT) {
00043             return -DATA_TIMEOUT;
00044         }
00045     }*/
00046 
00047     for (int i = 0; i < packet[DATA_LENGTH]; i++) {
00048         packet[PACKET_HEADER_SIZE+i] = pc.getc();
00049         sum += packet[PACKET_HEADER_SIZE+i];
00050     }
00051     packet[PACKET_HEADER_SIZE+packet[DATA_LENGTH]] = pc.getc();
00052     if (sum != packet[PACKET_HEADER_SIZE+packet[DATA_LENGTH]]) {
00053         return -CHECKSUM_ERROR;
00054     }
00055     return PACKET_HEADER_SIZE + packet[DATA_LENGTH] + 1;
00056 }
00057 
00058 /*
00059 int read_string(char* buffer, int flag=1) {
00060   int counter = 0;
00061   for(int i = 0;i < 100;i++) {
00062     if(Serial.available() > 0) {
00063       buffer[counter] = Serial.read();
00064       if(buffer[counter] == '^') {
00065     buffer[counter] = 0;
00066     Serial.print("AO^");
00067     return counter+1;
00068       }
00069       counter++;
00070     }
00071     delayMicroseconds(100);
00072   }
00073   if(flag)
00074   Serial.print("AE^");
00075   return -1;
00076 }
00077 
00078 */