RTno is communicating library and framework which allows you to make your embedded device capable of communicating with RT-middleware world. RT-middleware is a platform software to realize Robotic system. In RTM, robots are developed by constructing robotics technologies\' elements (components) named RT-component. Therefore, the RTno helps you to create your own RT-component with your mbed and arduino. To know how to use your RTno device, visit here: http://ysuga.net/robot_e/rtm_e/rtc_e/1065?lang=en To know about RT-middleware and RT-component, visit http://www.openrtm.org
Dependencies: EthernetInterface mbed-rtos
Transport.cpp
- Committer:
- ysuga
- Date:
- 2013-08-29
- Revision:
- 7:6c7af1d50fb3
- Parent:
- 1:f74116b37bc9
File content as of revision 7:6c7af1d50fb3:
#define RTNO_SUBMODULE_DEFINE
#include <stdint.h>
#include "mbed.h"
#include "Transport.h"
#include "Packet.h"
int8_t Transport_init()
{
return 0;
}
int8_t Transport_SendPacket(const char interface, const uint8_t data_length, const int8_t* packet_data) {
uint8_t sum = 0;//0x0a + 0x0a;
uint8_t header[2] = {0x0a, 0x0a};
SerialDevice_putc(header[0]);
SerialDevice_putc(header[1]);
SerialDevice_putc(interface);
sum += interface;
SerialDevice_putc(data_length);
sum += data_length;
//uint8_t sender[4] = {'U', 'A', 'R', 'T'};
//for(uint8_t i = 0;i < 4;i++) {
//sum += sender[i];
// SerialDevice_putc(sender[i]);
//}
for(uint8_t i = 0;i < data_length;i++) {
sum += packet_data[i];
SerialDevice_putc(packet_data[i]);
}
SerialDevice_putc(sum);
return PACKET_HEADER_SIZE + data_length + 1;
}
/**
* Transport_ReceivePacket
* ¥arg packet
* ¥arg timeout
*/
int8_t Transport_ReceivePacket(uint8_t* packet, const uint32_t& timeout) {
uint8_t counter = 0;
uint8_t buf;
int8_t ret;
while(1) {
if((ret=SerialDevice_read(&buf, 1, timeout)) < 0) {
return 0;
}
if (buf != PACKET_STARTING_CHARACTOR_0) {
counter++;
continue;
}
if((ret=SerialDevice_read(&buf, 1, timeout)) < 0) {
return 0;
}
if (buf != PACKET_STARTING_CHARACTOR_1) {
counter++;
continue;
}
break;
}
if((ret=SerialDevice_read(packet, PACKET_HEADER_SIZE, timeout)) < 0) {
return ret;
}
//if((ret=SerialDevice_read(packet+PACKET_HEADER_SIZE,
// 4,
// timeout)) < 0) {
// return ret;
//}
if((ret=SerialDevice_read(packet+PACKET_HEADER_SIZE,
packet[DATA_LENGTH],
timeout)) < 0) {
return ret;
}
if((ret=SerialDevice_read(&buf, 1, timeout)) < 0) {
return ret;
}
uint8_t sum = 0;//PACKET_STARTING_CHARACTOR_0 + PACKET_STARTING_CHARACTOR_1;
for(uint8_t i = 0;i < PACKET_HEADER_SIZE+packet[DATA_LENGTH];i++) {
sum += packet[i];
}
if(buf != sum) {
return -CHECKSUM_ERROR;
}
return PACKET_HEADER_SIZE + packet[DATA_LENGTH];
}
Yuki Suga