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_MultiArrayLayout_h
nucho 0:06fc856e99ca 2 #define ros_MultiArrayLayout_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/MultiArrayDimension.h"
nucho 0:06fc856e99ca 9
nucho 1:098e75fd5ad2 10 namespace std_msgs {
nucho 0:06fc856e99ca 11
nucho 1:098e75fd5ad2 12 class MultiArrayLayout : public ros::Msg {
nucho 1:098e75fd5ad2 13 public:
nucho 1:098e75fd5ad2 14 unsigned char dim_length;
nucho 1:098e75fd5ad2 15 std_msgs::MultiArrayDimension st_dim;
nucho 1:098e75fd5ad2 16 std_msgs::MultiArrayDimension * dim;
nucho 1:098e75fd5ad2 17 unsigned long data_offset;
nucho 0:06fc856e99ca 18
nucho 1:098e75fd5ad2 19 virtual int serialize(unsigned char *outbuffer) {
nucho 1:098e75fd5ad2 20 int offset = 0;
nucho 1:098e75fd5ad2 21 *(outbuffer + offset++) = dim_length;
nucho 1:098e75fd5ad2 22 *(outbuffer + offset++) = 0;
nucho 1:098e75fd5ad2 23 *(outbuffer + offset++) = 0;
nucho 1:098e75fd5ad2 24 *(outbuffer + offset++) = 0;
nucho 1:098e75fd5ad2 25 for ( unsigned char i = 0; i < dim_length; i++) {
nucho 1:098e75fd5ad2 26 offset += this->dim[i].serialize(outbuffer + offset);
nucho 1:098e75fd5ad2 27 }
nucho 1:098e75fd5ad2 28 union {
nucho 1:098e75fd5ad2 29 uint32_t real;
nucho 1:098e75fd5ad2 30 uint32_t base;
nucho 1:098e75fd5ad2 31 } u_data_offset;
nucho 1:098e75fd5ad2 32 u_data_offset.real = this->data_offset;
nucho 1:098e75fd5ad2 33 *(outbuffer + offset + 0) = (u_data_offset.base >> (8 * 0)) & 0xFF;
nucho 1:098e75fd5ad2 34 *(outbuffer + offset + 1) = (u_data_offset.base >> (8 * 1)) & 0xFF;
nucho 1:098e75fd5ad2 35 *(outbuffer + offset + 2) = (u_data_offset.base >> (8 * 2)) & 0xFF;
nucho 1:098e75fd5ad2 36 *(outbuffer + offset + 3) = (u_data_offset.base >> (8 * 3)) & 0xFF;
nucho 1:098e75fd5ad2 37 offset += sizeof(this->data_offset);
nucho 1:098e75fd5ad2 38 return offset;
nucho 0:06fc856e99ca 39 }
nucho 0:06fc856e99ca 40
nucho 1:098e75fd5ad2 41 virtual int deserialize(unsigned char *inbuffer) {
nucho 1:098e75fd5ad2 42 int offset = 0;
nucho 1:098e75fd5ad2 43 unsigned char dim_lengthT = *(inbuffer + offset++);
nucho 1:098e75fd5ad2 44 if (dim_lengthT > dim_length)
nucho 1:098e75fd5ad2 45 this->dim = (std_msgs::MultiArrayDimension*)realloc(this->dim, dim_lengthT * sizeof(std_msgs::MultiArrayDimension));
nucho 1:098e75fd5ad2 46 offset += 3;
nucho 1:098e75fd5ad2 47 dim_length = dim_lengthT;
nucho 1:098e75fd5ad2 48 for ( unsigned char i = 0; i < dim_length; i++) {
nucho 1:098e75fd5ad2 49 offset += this->st_dim.deserialize(inbuffer + offset);
nucho 1:098e75fd5ad2 50 memcpy( &(this->dim[i]), &(this->st_dim), sizeof(std_msgs::MultiArrayDimension));
nucho 1:098e75fd5ad2 51 }
nucho 1:098e75fd5ad2 52 union {
nucho 1:098e75fd5ad2 53 uint32_t real;
nucho 1:098e75fd5ad2 54 uint32_t base;
nucho 1:098e75fd5ad2 55 } u_data_offset;
nucho 1:098e75fd5ad2 56 u_data_offset.base = 0;
nucho 1:098e75fd5ad2 57 u_data_offset.base |= ((typeof(u_data_offset.base)) (*(inbuffer + offset + 0))) << (8 * 0);
nucho 1:098e75fd5ad2 58 u_data_offset.base |= ((typeof(u_data_offset.base)) (*(inbuffer + offset + 1))) << (8 * 1);
nucho 1:098e75fd5ad2 59 u_data_offset.base |= ((typeof(u_data_offset.base)) (*(inbuffer + offset + 2))) << (8 * 2);
nucho 1:098e75fd5ad2 60 u_data_offset.base |= ((typeof(u_data_offset.base)) (*(inbuffer + offset + 3))) << (8 * 3);
nucho 1:098e75fd5ad2 61 this->data_offset = u_data_offset.real;
nucho 1:098e75fd5ad2 62 offset += sizeof(this->data_offset);
nucho 1:098e75fd5ad2 63 return offset;
nucho 0:06fc856e99ca 64 }
nucho 0:06fc856e99ca 65
nucho 1:098e75fd5ad2 66 virtual const char * getType() {
nucho 1:098e75fd5ad2 67 return "std_msgs/MultiArrayLayout";
nucho 1:098e75fd5ad2 68 };
nucho 0:06fc856e99ca 69
nucho 1:098e75fd5ad2 70 };
nucho 0:06fc856e99ca 71
nucho 0:06fc856e99ca 72 }
nucho 0:06fc856e99ca 73 #endif