Yuki Suga / RTnoV4

Dependencies:   EthernetInterface mbed-rtos

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Transport.cpp Source File

Transport.cpp

00001 #define RTNO_SUBMODULE_DEFINE
00002 #include <stdint.h>
00003 #include "mbed.h"
00004 
00005 #include "Transport.h"
00006 #include "Packet.h"
00007 
00008 int8_t Transport_init()
00009 {
00010     return 0;
00011 }
00012 
00013 
00014 int8_t Transport_SendPacket(const char interface, const uint8_t data_length, const int8_t* packet_data) {
00015   uint8_t sum = 0;//0x0a + 0x0a;
00016 
00017   uint8_t header[2] = {0x0a, 0x0a};
00018   SerialDevice_putc(header[0]);
00019   SerialDevice_putc(header[1]);
00020   
00021   SerialDevice_putc(interface);
00022   sum += interface;
00023   SerialDevice_putc(data_length);
00024   sum += data_length;
00025 
00026   //uint8_t sender[4] = {'U', 'A', 'R', 'T'};
00027   //for(uint8_t i = 0;i < 4;i++) {
00028     //sum += sender[i];
00029   //  SerialDevice_putc(sender[i]);
00030   //}
00031 
00032   for(uint8_t i = 0;i < data_length;i++) {
00033     sum += packet_data[i];
00034     SerialDevice_putc(packet_data[i]);
00035   }
00036   SerialDevice_putc(sum);
00037   return PACKET_HEADER_SIZE + data_length + 1;
00038 }
00039 
00040 /**
00041  * Transport_ReceivePacket
00042  * ¥arg packet
00043  * ¥arg timeout
00044  */
00045 int8_t Transport_ReceivePacket(uint8_t* packet, const uint32_t& timeout) {
00046   uint8_t counter = 0;
00047   uint8_t buf;
00048   int8_t ret;
00049   while(1) {
00050     if((ret=SerialDevice_read(&buf, 1, timeout)) < 0) {
00051       return 0;
00052     }
00053     if (buf != PACKET_STARTING_CHARACTOR_0) {
00054       counter++;
00055       continue;
00056     }  
00057     if((ret=SerialDevice_read(&buf, 1, timeout)) < 0) {
00058       return 0;
00059     }
00060     if (buf != PACKET_STARTING_CHARACTOR_1) {
00061       counter++;
00062       continue;
00063     }
00064     break;
00065   }
00066   
00067    
00068   if((ret=SerialDevice_read(packet, PACKET_HEADER_SIZE, timeout)) < 0) {
00069     return ret;
00070   }  
00071 
00072   //if((ret=SerialDevice_read(packet+PACKET_HEADER_SIZE,
00073   //  4,
00074   //  timeout)) < 0) {
00075   //  return ret;
00076   //}
00077 
00078   if((ret=SerialDevice_read(packet+PACKET_HEADER_SIZE,
00079     packet[DATA_LENGTH],
00080     timeout)) < 0) {
00081     return ret;
00082   }
00083   
00084   if((ret=SerialDevice_read(&buf, 1, timeout)) < 0) {
00085     return ret;
00086   }
00087   
00088   uint8_t sum = 0;//PACKET_STARTING_CHARACTOR_0 + PACKET_STARTING_CHARACTOR_1;
00089   for(uint8_t i = 0;i < PACKET_HEADER_SIZE+packet[DATA_LENGTH];i++) {
00090     sum += packet[i];
00091   }
00092   if(buf != sum) {
00093     return -CHECKSUM_ERROR;
00094   }
00095   return PACKET_HEADER_SIZE + packet[DATA_LENGTH];
00096 }