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 }