This program is porting rosserial_arduino for mbed http://www.ros.org/wiki/rosserial_arduino This program supported the revision of 169 of rosserial. This program contains an example.

Dependencies:   rosserial_mbed_lib mbed Servo

Committer:
nucho
Date:
Sun Oct 16 07:17:43 2011 +0000
Revision:
1:098e75fd5ad2
Parent:
0:06fc856e99ca
Child:
3:dff241b66f84
This program supported the revision of 143 of rosserial.
And the bug fix of receive of array data.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nucho 0:06fc856e99ca 1 #ifndef ros_Int8MultiArray_h
nucho 0:06fc856e99ca 2 #define ros_Int8MultiArray_h
nucho 0:06fc856e99ca 3
nucho 0:06fc856e99ca 4 #include <stdint.h>
nucho 0:06fc856e99ca 5 #include <string.h>
nucho 0:06fc856e99ca 6 #include <stdlib.h>
nucho 0:06fc856e99ca 7 #include "../ros/msg.h"
nucho 0:06fc856e99ca 8 #include "std_msgs/MultiArrayLayout.h"
nucho 0:06fc856e99ca 9
nucho 0:06fc856e99ca 10 namespace std_msgs
nucho 0:06fc856e99ca 11 {
nucho 0:06fc856e99ca 12
nucho 0:06fc856e99ca 13 class Int8MultiArray : public ros::Msg
nucho 0:06fc856e99ca 14 {
nucho 0:06fc856e99ca 15 public:
nucho 0:06fc856e99ca 16 std_msgs::MultiArrayLayout layout;
nucho 0:06fc856e99ca 17 unsigned char data_length;
nucho 1:098e75fd5ad2 18 int8_t st_data;
nucho 1:098e75fd5ad2 19 int8_t * data;
nucho 0:06fc856e99ca 20
nucho 0:06fc856e99ca 21 virtual int serialize(unsigned char *outbuffer)
nucho 0:06fc856e99ca 22 {
nucho 0:06fc856e99ca 23 int offset = 0;
nucho 0:06fc856e99ca 24 offset += this->layout.serialize(outbuffer + offset);
nucho 0:06fc856e99ca 25 *(outbuffer + offset++) = data_length;
nucho 0:06fc856e99ca 26 *(outbuffer + offset++) = 0;
nucho 0:06fc856e99ca 27 *(outbuffer + offset++) = 0;
nucho 0:06fc856e99ca 28 *(outbuffer + offset++) = 0;
nucho 0:06fc856e99ca 29 for( unsigned char i = 0; i < data_length; i++){
nucho 0:06fc856e99ca 30 union {
nucho 1:098e75fd5ad2 31 int8_t real;
nucho 1:098e75fd5ad2 32 uint8_t base;
nucho 0:06fc856e99ca 33 } u_datai;
nucho 0:06fc856e99ca 34 u_datai.real = this->data[i];
nucho 0:06fc856e99ca 35 *(outbuffer + offset + 0) = (u_datai.base >> (8 * 0)) & 0xFF;
nucho 0:06fc856e99ca 36 offset += sizeof(this->data[i]);
nucho 0:06fc856e99ca 37 }
nucho 0:06fc856e99ca 38 return offset;
nucho 0:06fc856e99ca 39 }
nucho 0:06fc856e99ca 40
nucho 0:06fc856e99ca 41 virtual int deserialize(unsigned char *inbuffer)
nucho 0:06fc856e99ca 42 {
nucho 0:06fc856e99ca 43 int offset = 0;
nucho 0:06fc856e99ca 44 offset += this->layout.deserialize(inbuffer + offset);
nucho 0:06fc856e99ca 45 unsigned char data_lengthT = *(inbuffer + offset++);
nucho 0:06fc856e99ca 46 if(data_lengthT > data_length)
nucho 1:098e75fd5ad2 47 this->data = (int8_t*)realloc(this->data, data_lengthT * sizeof(int8_t));
nucho 0:06fc856e99ca 48 offset += 3;
nucho 0:06fc856e99ca 49 data_length = data_lengthT;
nucho 0:06fc856e99ca 50 for( unsigned char i = 0; i < data_length; i++){
nucho 0:06fc856e99ca 51 union {
nucho 1:098e75fd5ad2 52 int8_t real;
nucho 1:098e75fd5ad2 53 uint8_t base;
nucho 0:06fc856e99ca 54 } u_st_data;
nucho 0:06fc856e99ca 55 u_st_data.base = 0;
nucho 0:06fc856e99ca 56 u_st_data.base |= ((typeof(u_st_data.base)) (*(inbuffer + offset + 0))) << (8 * 0);
nucho 0:06fc856e99ca 57 this->st_data = u_st_data.real;
nucho 0:06fc856e99ca 58 offset += sizeof(this->st_data);
nucho 1:098e75fd5ad2 59 memcpy( &(this->data[i]), &(this->st_data), sizeof(int8_t));
nucho 0:06fc856e99ca 60 }
nucho 0:06fc856e99ca 61 return offset;
nucho 0:06fc856e99ca 62 }
nucho 0:06fc856e99ca 63
nucho 0:06fc856e99ca 64 virtual const char * getType(){ return "std_msgs/Int8MultiArray"; };
nucho 0:06fc856e99ca 65
nucho 0:06fc856e99ca 66 };
nucho 0:06fc856e99ca 67
nucho 0:06fc856e99ca 68 }
nucho 0:06fc856e99ca 69 #endif