Go to the documentation of this file.00001 #include "ros/ros.h"
00002 #include <iostream>
00003 #include <list>
00004 #include <map>
00005 #include "ros/time.h"
00006 #include "ros/duration.h"
00007 #include "ros/console.h"
00008
00009
00010 #include "CsSubscriber.h"
00011 <?messageIncludes?>
00012
00013 using namespace std;
00014
00015
00016 list<ros::Subscriber> subs;
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 extern "C" uint64_t getRosNow() {
00032 ros::Time now = ros::Time::now();
00033 return ((uint64_t)now.sec)*1000000000ull+(uint64_t)now.nsec;
00034 }
00035 extern "C" void rosSleep(uint32_t ms) {
00036 ros::Duration d = ros::Duration(ms/1000, (ms%1000)*1000000);
00037 d.sleep();
00038 }
00039
00040
00041 extern "C" void rosInit(char* name, int argc, char** argv, uint32_t initOptions) {
00042 ros::init(argc, argv, name,initOptions);
00043
00044
00045
00046
00047 }
00048 extern "C" void rosShutdown() {
00049 ros::shutdown();
00050 }
00051 extern "C" bool getRosOk() {
00052 return ros::ok();
00053 }
00054 extern "C" bool checkMaster() {
00055 return ros::master::check();
00056 }
00057
00058
00059 extern "C" ros::NodeHandle* getNode(char* name) {
00060 return new ros::NodeHandle(name);
00061 }
00062
00063 extern "C" void destroyNode(ros::NodeHandle* node) {
00064 if(node!=NULL && node->ok()) {
00065 node->shutdown();
00066 delete node;
00067 }
00068 }
00069
00070 extern "C" ros::Publisher* advertiseTopic(ros::NodeHandle* node, char* topic, uint64_t messageId, int queueSize) {
00071 ros::Publisher tmp;
00072
00073
00074 <?cppMakePublisher?>
00075
00076
00077 ros::Publisher* ptr = new ros::Publisher(tmp);
00078 return ptr;
00079
00080
00081 }
00082
00083
00084
00085
00086 <?cppGetSizeOfMessage?>
00087
00088 <?cppArray2RosMethods?>
00089 extern "C" void sendmsg(ros::Publisher* pub, uint64_t messageId, int* data) {
00090 switch(messageId) {
00091 <?cppSendBody?>
00092 default:
00093 std::cerr << "Unknown message id in sendmsg: "<<messageId<<std::endl;
00094 }
00095 }
00096
00097 <?cppMessageHandleMethods?>
00098
00099 <?cppSubscriptionMethods?>
00100
00101 extern "C" bool isNodeOk(ros::NodeHandle* node) {
00102 return (node!=NULL && node->ok());
00103 }
00104
00105 extern "C" void rosDebug(char* str) {
00106 ROS_DEBUG_THROTTLE(5,"%s",str);
00107 }
00108 extern "C" void rosWarn(char* str) {
00109 ROS_WARN_THROTTLE(3,"%s",str);
00110 }
00111 extern "C" void rosError(char* str) {
00112 ROS_ERROR_THROTTLE(1,"%s",str);
00113 }
00114 extern "C" void rosFatal(char* str) {
00115 ROS_FATAL("%s",str);
00116 }
00117 extern "C" void rosInfo(char* str) {
00118 ROS_INFO_THROTTLE(10,"%s",str);
00119 }
00120
00121 extern "C" void stopSubscriber(void** ptr) {
00122 ((RosCs::Runable*)(*ptr))->Shutdown();
00123 }
00124 extern "C" char* getParam(ros::NodeHandle* node, char* paramName) {
00125
00126
00127 XmlRpc::XmlRpcValue val;
00128 node->getParam(paramName,val);
00129 stringstream s;
00130 s<<val;
00131
00132 std::string str = s.str();
00133 char* ret = (char*)malloc((str.size()+1)*sizeof(char));
00134 strcpy(ret,str.c_str());
00135
00136 return ret;
00137 }
00138 extern "C" char* searchParam(ros::NodeHandle* node, char* paramName) {
00139 std::string val;
00140 node->searchParam(paramName,val);
00141 char* ret = (char*)malloc((val.size()+1)*sizeof(char));
00142 strcpy(ret,val.c_str());
00143 return ret;
00144 }
00145 extern "C" bool hasParam(ros::NodeHandle* node, char* paramName) {
00146 return node->hasParam(paramName);
00147 }
00148
00149 extern "C" void deleteParam(ros::NodeHandle* node, char* paramName) {
00150 node->deleteParam(paramName);
00151 return;
00152 }
00153 extern "C" void setParamInt(ros::NodeHandle* node, char* key, int val) {
00154 node->setParam(key,val);
00155 return;
00156 }
00157 extern "C" void setParamBool(ros::NodeHandle* node, char* key, bool val) {
00158 node->setParam(key,val);
00159 return;
00160 }
00161 extern "C" void setParamDouble(ros::NodeHandle* node, char* key, double val) {
00162 node->setParam(key,val);
00163 return;
00164 }
00165 extern "C" void setParamString(ros::NodeHandle* node, char* key, char* val) {
00166 node->setParam(key,val);
00167 return;
00168 }
00169
00170 extern "C" void freeCharPtr(char* p) {
00171 free(p);
00172 }