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-07-08
- Revision:
- 1:f74116b37bc9
- Parent:
- 0:5f7bc45bc2e8
File content as of revision 1:f74116b37bc9:
#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]; }