ros_publisher.cpp
Go to the documentation of this file.
00001 //=================================================================================================
00002 // Copyright (c) 2012, Johannes Meyer, TU Darmstadt
00003 // All rights reserved.
00004 
00005 // Redistribution and use in source and binary forms, with or without
00006 // modification, are permitted provided that the following conditions are met:
00007 //     * Redistributions of source code must retain the above copyright
00008 //       notice, this list of conditions and the following disclaimer.
00009 //     * Redistributions in binary form must reproduce the above copyright
00010 //       notice, this list of conditions and the following disclaimer in the
00011 //       documentation and/or other materials provided with the distribution.
00012 //     * Neither the name of the Flight Systems and Automatic Control group,
00013 //       TU Darmstadt, nor the names of its contributors may be used to
00014 //       endorse or promote products derived from this software without
00015 //       specific prior written permission.
00016 
00017 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00018 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00019 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00020 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
00021 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00022 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00023 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00024 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00026 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027 //=================================================================================================
00028 
00029 #include <mex.h>
00030 #include <rosmatlab/ros.h>
00031 #include <rosmatlab/options.h>
00032 
00033 using namespace rosmatlab;
00034 
00035 void mexFunction( int nlhs, mxArray *plhs[],
00036                   int nrhs, const mxArray *prhs[] )
00037 {
00038   if (nrhs < 1) {
00039     throw Exception("At least 1 input argument is required");
00040   }
00041 
00042   try {
00043     init();
00044     Publisher *publisher = getObject<Publisher>(*prhs++); nrhs--;
00045     std::string method;
00046     if (nrhs) { method = Options::getString(*prhs++); nrhs--; }
00047 
00048     // construction
00049     if (method == "create") {
00050       delete publisher;
00051       mexPrintf("[rosmatlab] Creating new Publisher object\n");
00052       publisher = new Publisher(nrhs, prhs);
00053       plhs[0] = publisher->handle();
00054       return;
00055     }
00056 
00057     // destruction
00058     if (method == "delete") {
00059       mexPrintf("[rosmatlab] Deleting Publisher object\n");
00060       delete publisher;
00061       return;
00062     }
00063 
00064     if (!publisher) {
00065       throw Exception("Publisher instance not found");
00066     }
00067 
00068     // subscribe()
00069     if (method == "advertise") {
00070       plhs[0] = mxCreateLogicalScalar(publisher->advertise(nrhs, prhs));
00071       return;
00072     }
00073 
00074     // publish()
00075     if (method == "publish") {
00076       publisher->publish(nrhs, prhs);
00077       return;
00078     }
00079 
00080     // getTopic()
00081     if (method == "getTopic") {
00082       plhs[0] = publisher->getTopic();
00083       return;
00084     }
00085 
00086     // getNumSubscribers()
00087     if (method == "getNumSubscribers") {
00088       plhs[0] = publisher->getNumSubscribers();
00089       return;
00090     }
00091 
00092     // isLatched()
00093     if (method == "isLatched") {
00094       plhs[0] = publisher->isLatched();
00095       return;
00096     }
00097 
00098     // unknown method exception
00099     throw Exception("unknown method '" + method + "'");
00100 
00101   } catch(Exception &e) {
00102     mexErrMsgTxt(e.what());
00103   }
00104 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Friends


rosmatlab
Author(s): Johannes Meyer
autogenerated on Tue Jan 8 2013 17:31:00