nucho / Mbed 2 deprecated rosserial_mbed

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 1:098e75fd5ad2 1 #ifndef ros_rosserial_msgs_TopicInfo_h
nucho 1:098e75fd5ad2 2 #define ros_rosserial_msgs_TopicInfo_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 namespace rosserial_msgs
nucho 0:06fc856e99ca 9 {
nucho 0:06fc856e99ca 10 class TopicInfo : public ros::Msg
nucho 0:06fc856e99ca 11 {
nucho 0:06fc856e99ca 12 public:
nucho 0:06fc856e99ca 13 unsigned short topic_id;
nucho 0:06fc856e99ca 14 char * topic_name;
nucho 0:06fc856e99ca 15 char * message_type;
nucho 1:098e75fd5ad2 16 char * md5_checksum;
nucho 0:06fc856e99ca 17 enum { ID_PUBLISHER = 0 };
nucho 0:06fc856e99ca 18 enum { ID_SUBSCRIBER = 1 };
nucho 0:06fc856e99ca 19 enum { ID_SERVICE_SERVER = 2 };
nucho 0:06fc856e99ca 20 enum { ID_SERVICE_CLIENT = 3 };
nucho 0:06fc856e99ca 21 enum { ID_PARAMETER_REQUEST = 4 };
nucho 0:06fc856e99ca 22 enum { ID_LOG = 5 };
nucho 0:06fc856e99ca 23 enum { ID_TIME = 10 };
nucho 0:06fc856e99ca 24
nucho 0:06fc856e99ca 25 virtual int serialize(unsigned char *outbuffer)
nucho 0:06fc856e99ca 26 {
nucho 0:06fc856e99ca 27 int offset = 0;
nucho 0:06fc856e99ca 28 union {
nucho 1:098e75fd5ad2 29 uint16_t real;
nucho 1:098e75fd5ad2 30 uint16_t base;
nucho 0:06fc856e99ca 31 } u_topic_id;
nucho 0:06fc856e99ca 32 u_topic_id.real = this->topic_id;
nucho 0:06fc856e99ca 33 *(outbuffer + offset + 0) = (u_topic_id.base >> (8 * 0)) & 0xFF;
nucho 0:06fc856e99ca 34 *(outbuffer + offset + 1) = (u_topic_id.base >> (8 * 1)) & 0xFF;
nucho 0:06fc856e99ca 35 offset += sizeof(this->topic_id);
nucho 1:098e75fd5ad2 36
nucho 0:06fc856e99ca 37 long * length_topic_name = (long *)(outbuffer + offset);
nucho 0:06fc856e99ca 38 *length_topic_name = strlen( (const char*) this->topic_name);
nucho 0:06fc856e99ca 39 offset += 4;
nucho 0:06fc856e99ca 40 memcpy(outbuffer + offset, this->topic_name, *length_topic_name);
nucho 0:06fc856e99ca 41 offset += *length_topic_name;
nucho 1:098e75fd5ad2 42
nucho 0:06fc856e99ca 43 long * length_message_type = (long *)(outbuffer + offset);
nucho 0:06fc856e99ca 44 *length_message_type = strlen( (const char*) this->message_type);
nucho 0:06fc856e99ca 45 offset += 4;
nucho 0:06fc856e99ca 46 memcpy(outbuffer + offset, this->message_type, *length_message_type);
nucho 0:06fc856e99ca 47 offset += *length_message_type;
nucho 1:098e75fd5ad2 48
nucho 1:098e75fd5ad2 49 long * length_md5_checksum = (long *)(outbuffer + offset);
nucho 1:098e75fd5ad2 50 *length_md5_checksum = strlen( (const char*) this->md5_checksum);
nucho 1:098e75fd5ad2 51 offset += 4;
nucho 1:098e75fd5ad2 52 memcpy(outbuffer + offset, this->md5_checksum, *length_md5_checksum);
nucho 1:098e75fd5ad2 53 offset += *length_md5_checksum;
nucho 1:098e75fd5ad2 54
nucho 0:06fc856e99ca 55 return offset;
nucho 0:06fc856e99ca 56 }
nucho 0:06fc856e99ca 57
nucho 0:06fc856e99ca 58 virtual int deserialize(unsigned char *inbuffer)
nucho 0:06fc856e99ca 59 {
nucho 0:06fc856e99ca 60 int offset = 0;
nucho 0:06fc856e99ca 61 union {
nucho 0:06fc856e99ca 62 unsigned short real;
nucho 0:06fc856e99ca 63 unsigned short base;
nucho 0:06fc856e99ca 64 } u_topic_id;
nucho 0:06fc856e99ca 65 u_topic_id.base = 0;
nucho 0:06fc856e99ca 66 u_topic_id.base |= ((typeof(u_topic_id.base)) (*(inbuffer + offset + 0))) << (8 * 0);
nucho 0:06fc856e99ca 67 u_topic_id.base |= ((typeof(u_topic_id.base)) (*(inbuffer + offset + 1))) << (8 * 1);
nucho 0:06fc856e99ca 68 this->topic_id = u_topic_id.real;
nucho 0:06fc856e99ca 69 offset += sizeof(this->topic_id);
nucho 0:06fc856e99ca 70 uint32_t length_topic_name = *(uint32_t *)(inbuffer + offset);
nucho 0:06fc856e99ca 71 offset += 4;
nucho 0:06fc856e99ca 72 for(unsigned int k= offset; k< offset+length_topic_name; ++k){
nucho 0:06fc856e99ca 73 inbuffer[k-1]=inbuffer[k];
nucho 0:06fc856e99ca 74 }
nucho 0:06fc856e99ca 75 inbuffer[offset+length_topic_name-1]=0;
nucho 0:06fc856e99ca 76 this->topic_name = (char *)(inbuffer + offset-1);
nucho 0:06fc856e99ca 77 offset += length_topic_name;
nucho 0:06fc856e99ca 78 uint32_t length_message_type = *(uint32_t *)(inbuffer + offset);
nucho 0:06fc856e99ca 79 offset += 4;
nucho 0:06fc856e99ca 80 for(unsigned int k= offset; k< offset+length_message_type; ++k){
nucho 0:06fc856e99ca 81 inbuffer[k-1]=inbuffer[k];
nucho 0:06fc856e99ca 82 }
nucho 0:06fc856e99ca 83 inbuffer[offset+length_message_type-1]=0;
nucho 0:06fc856e99ca 84 this->message_type = (char *)(inbuffer + offset-1);
nucho 0:06fc856e99ca 85 offset += length_message_type;
nucho 1:098e75fd5ad2 86
nucho 1:098e75fd5ad2 87 uint32_t length_md5_checksum = *(uint32_t *)(inbuffer + offset);
nucho 1:098e75fd5ad2 88 offset += 4;
nucho 1:098e75fd5ad2 89 for(unsigned int k= offset; k< offset+length_md5_checksum; ++k){
nucho 1:098e75fd5ad2 90 inbuffer[k-1]=inbuffer[k];
nucho 1:098e75fd5ad2 91 }
nucho 1:098e75fd5ad2 92 inbuffer[offset+length_md5_checksum-1]=0;
nucho 1:098e75fd5ad2 93 this->md5_checksum = (char *)(inbuffer + offset-1);
nucho 1:098e75fd5ad2 94 offset += length_md5_checksum;
nucho 1:098e75fd5ad2 95
nucho 0:06fc856e99ca 96 return offset;
nucho 0:06fc856e99ca 97 }
nucho 0:06fc856e99ca 98
nucho 0:06fc856e99ca 99 virtual const char * getType(){ return "rosserial_msgs/TopicInfo"; };
nucho 0:06fc856e99ca 100
nucho 0:06fc856e99ca 101 };
nucho 0:06fc856e99ca 102
nucho 0:06fc856e99ca 103 }
nucho 0:06fc856e99ca 104 #endif