denso_controller_rc8.cpp
Go to the documentation of this file.
00001 
00025 #include "denso_robot_core/denso_controller_rc8.h"
00026 
00027 #define BCAP_CTRL_CONNECT_ARGS (4)
00028 
00029 namespace denso_robot_core {
00030 
00031 DensoControllerRC8::DensoControllerRC8(const std::string& name, const int* mode)
00032   : DensoController(name, mode)
00033 {
00034 
00035 }
00036 
00037 DensoControllerRC8::~DensoControllerRC8()
00038 {
00039 
00040 }
00041 
00042 HRESULT DensoControllerRC8::AddController()
00043 {
00044   static const std::string CTRL_CONNECT_OPTION[BCAP_CTRL_CONNECT_ARGS] = 
00045     {"", "CaoProv.DENSO.VRC", "localhost", ""};
00046 
00047   HRESULT hr = E_FAIL;
00048   int srvs, argc;
00049 
00050   for(srvs = DensoBase::SRV_MIN; srvs <= DensoBase::SRV_MAX; srvs++) {
00051     std::stringstream ss;
00052     std::string strTmp;
00053     VARIANT_Ptr vntRet(new VARIANT());
00054     VARIANT_Vec vntArgs;
00055 
00056     VariantInit(vntRet.get());
00057 
00058     for(argc = 0; argc < BCAP_CTRL_CONNECT_ARGS; argc++) {
00059       VARIANT_Ptr vntTmp(new VARIANT());
00060       VariantInit(vntTmp.get());
00061 
00062       vntTmp->vt = VT_BSTR;
00063 
00064       if(argc == 0) {
00065         strTmp = "";
00066         if(m_name != "") {
00067           ss << ros::this_node::getNamespace() << m_name << srvs;
00068           strTmp = ss.str();
00069         }
00070       } else {
00071         strTmp = CTRL_CONNECT_OPTION[argc];
00072       }
00073 
00074       vntTmp->bstrVal = ConvertStringToBSTR(strTmp);
00075 
00076       vntArgs.push_back(*vntTmp.get());
00077     }
00078 
00079     hr = m_vecService[srvs]->ExecFunction(ID_CONTROLLER_CONNECT, vntArgs, vntRet);
00080     if(FAILED(hr)) break;
00081 
00082     m_vecHandle.push_back(vntRet->ulVal);
00083   }
00084 
00085   return hr;
00086 }
00087 
00088 HRESULT DensoControllerRC8::AddRobot(XMLElement *xmlElem)
00089 {
00090   int objs;
00091   HRESULT hr;
00092 
00093   Name_Vec   vecName;
00094   hr = DensoBase::GetObjectNames(ID_CONTROLLER_GETROBOTNAMES, vecName);
00095   if(SUCCEEDED(hr)) {
00096     for(objs = 0; objs < vecName.size(); objs++) {
00097       Handle_Vec vecHandle;
00098       hr = DensoBase::AddObject(
00099           ID_CONTROLLER_GETROBOT, vecName[objs], vecHandle);
00100       if(FAILED(hr)) break;
00101 
00102       DensoRobot_Ptr rob(new DensoRobotRC8(this,
00103           m_vecService, vecHandle, vecName[objs], m_mode));
00104       hr = rob->InitializeBCAP(xmlElem);
00105       if(FAILED(hr)) break;
00106 
00107       m_vecRobot.push_back(rob);
00108     }
00109   }
00110 
00111   return hr;
00112 }
00113 
00114 }


denso_robot_core
Author(s): DENSO WAVE INCORPORATED
autogenerated on Thu Jun 6 2019 21:00:11