0

This is the main code where error happened:

void VRInputRemapping::DigitalInputConfig() {
bool orginput = this->curVRConfig->GetorgDigitalInput();
uint32_t deviceId = this->curVRConfig->GetcurDeviceId();
uint32_t buttonId = this->curVRConfig->GetcurButtonId();

printf("Digital orginput: %d      device:%d    butonid:%d\n", orginput, deviceId, buttonId);
vrinputemulator::DigitalInputRemapping* m_currentRemapping =new vrinputemulator::DigitalInputRemapping(true);
vrinputemulator::DigitalBinding* m_currentBinding = new vrinputemulator::DigitalBinding;
if (orginput == false) {
    m_currentBinding->type = vrinputemulator::DigitalBindingType::Disabled;
    memset(&m_currentBinding->data, 0, sizeof(m_currentBinding->data));
    m_currentBinding->data.openvr.buttonId = buttonId;
    m_currentBinding->toggleEnabled = false;
    m_currentBinding->toggleDelay = 0;
    m_currentBinding->autoTriggerEnabled = false;
    m_currentBinding->autoTriggerFrequency = 1;
    m_currentRemapping->binding = *m_currentBinding;
}
else if (orginput == true) {
    m_currentBinding->type = vrinputemulator::DigitalBindingType::NoRemapping;
    memset(&m_currentBinding->data, 0, sizeof(m_currentBinding->data));
    m_currentBinding->data.openvr.buttonId = buttonId;
    m_currentBinding->toggleEnabled = false;
    m_currentBinding->toggleDelay = 0;
    m_currentBinding->autoTriggerEnabled = false;
    m_currentBinding->autoTriggerFrequency = 1;
    m_currentRemapping->binding = *m_currentBinding;
}

    printf(" void VRInputRemapping::DigitalInputConfig()  m_currentRemapping->binding.type:%d      device:%d    buttonId:%d  remapping.data.openvr.buttonId%d\n", m_currentRemapping->binding.type, deviceId, buttonId, m_currentRemapping->binding.data.openvr.buttonId);

//<--------------------Here is the function call-------------------------------------->

this->inputEmulator->setDigitalInputRemapping(deviceId, buttonId, m_currentRemapping);

//<--------------------Here is the function call-------------------------------------->

    printf(" void VRInputRemapping::DigitalInputConfig()  m_currentRemapping->binding.type:%d      device:%d    buttonId:%d  remapping.data.openvr.buttonId%d\n", m_currentRemapping->binding.type, deviceId, buttonId, m_currentRemapping->binding.data.openvr.buttonId);

delete m_currentBinding;
delete m_currentRemapping;
Sleep(1);

}

This is the Function:

void VRInputEmulator::setDigitalInputRemapping(uint32_t deviceId, uint32_t buttonId, DigitalInputRemapping* remapping, bool modal) {
printf("VRInputEmulator::setDigitalInputRemapping   Digital orginput: %d      device:%d    butonid:%d    remapping->binding.data.openvr.buttonId%d\n", remapping->binding.type, deviceId, buttonId, remapping->binding.data.openvr.buttonId);
if (_ipcServerQueue) {
    ipc::Request message(ipc::RequestType::InputRemapping_SetDigitalRemapping);
    memset(&message.msg, 0, sizeof(message.msg));
    message.msg.ir_SetDigitalRemapping.clientId = m_clientId;
    message.msg.ir_SetDigitalRemapping.messageId = 0;
    message.msg.ir_SetDigitalRemapping.controllerId = deviceId;
    message.msg.ir_SetDigitalRemapping.buttonId = buttonId;
    message.msg.ir_SetDigitalRemapping.remapData = *remapping;
    if (modal) {
        uint32_t messageId = _ipcRandomDist(_ipcRandomDevice);
        message.msg.ir_SetDigitalRemapping.messageId = messageId;
        std::promise<ipc::Reply> respPromise;
        auto respFuture = respPromise.get_future();
        {
            std::lock_guard<std::recursive_mutex> lock(_mutex);
            _ipcPromiseMap.insert({ messageId, std::move(respPromise) });
        }
        _ipcServerQueue->send(&message, sizeof(ipc::Request), 0);
        auto resp = respFuture.get();
        {
            std::lock_guard<std::recursive_mutex> lock(_mutex);
            _ipcPromiseMap.erase(messageId);
        }
        std::stringstream ss;
        ss << "Error while setting digital input remapping: ";
        if (resp.status == ipc::ReplyStatus::InvalidId) {
            ss << "Invalid device id";
            throw vrinputemulator_invalidid(ss.str(), (int)resp.status);
        } else if (resp.status == ipc::ReplyStatus::NotFound) {
            ss << "Device not found";
            throw vrinputemulator_notfound(ss.str(), (int)resp.status);
        } else if (resp.status != ipc::ReplyStatus::Ok) {
            ss << "Error code " << (int)resp.status;
            throw vrinputemulator_exception(ss.str(), (int)resp.status);
        }
    } else {
        _ipcServerQueue->send(&message, sizeof(ipc::Request), 0);
    }
} else {
    throw vrinputemulator_connectionerror("No active connection.");
}

}

You can See the Printf I had use before and after the function call, also used in the head of the dunction,This is the output:

void VRInputRemapping::DigitalInputConfig() m_currentRemapping->binding.type:0 device:1 buttonId:32 remapping.data.openvr.buttonId: 32 VRInputEmulator::setDigitalInputRemapping Digital orginput: 0 device:1 butonid:32 remapping->binding.data.openvr.buttonId: 0 void VRInputRemapping::DigitalInputConfig() m_currentRemapping->binding.type 0 device:1 buttonId:32 remapping.data.openvr.buttonId: 32

The output in the consloe

a zou
  • 11
  • 1
  • 3
    Please provide a [mcve] and include the output of that (as text!) in your question as well. Also, as a new user here, please take the [tour] and read [ask]. – Ulrich Eckhardt Nov 26 '21 at 06:53
  • As an aside, it would also make things a lot clearer if you used a consistent naming scheme for member variables, and got rid of all the usages of "this->". – cosimo193 Nov 26 '21 at 08:18
  • I know OpenVR is a mess, including their examples, but can clarify what's wrong or what you are trying to achieve? – Oleg Vorobiov Dec 02 '21 at 09:41

0 Answers0