static void dvsConfigSend(sshsNode node, caerModuleData moduleData) { caerDeviceConfigSet(moduleData->moduleState, DVS128_CONFIG_DVS, DVS128_CONFIG_DVS_ARRAY_RESET, sshsNodeGetBool(node, "ArrayReset")); caerDeviceConfigSet(moduleData->moduleState, DVS128_CONFIG_DVS, DVS128_CONFIG_DVS_TIMESTAMP_RESET, sshsNodeGetBool(node, "TimestampReset")); caerDeviceConfigSet(moduleData->moduleState, DVS128_CONFIG_DVS, DVS128_CONFIG_DVS_RUN, sshsNodeGetBool(node, "Run")); }
static void caerVisualizerEventHandlerInput(caerVisualizerPublicState state, const sf::Event &event) { // This only works with an input module. const std::string moduleLibrary = sshsNodeGetStdString(state->eventSourceConfigNode, "moduleLibrary"); if (!boost::algorithm::starts_with(moduleLibrary, "caer_input_")) { return; } // PAUSE. if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Key::Space) { bool pause = sshsNodeGetBool(state->eventSourceConfigNode, "pause"); sshsNodePutBool(state->eventSourceConfigNode, "pause", !pause); } // SLOW DOWN. else if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Key::S) { int timeSlice = sshsNodeGetInt(state->eventSourceConfigNode, "PacketContainerInterval"); sshsNodePutInt(state->eventSourceConfigNode, "PacketContainerInterval", timeSlice / 2); } // SPEED UP. else if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Key::F) { int timeSlice = sshsNodeGetInt(state->eventSourceConfigNode, "PacketContainerInterval"); sshsNodePutInt(state->eventSourceConfigNode, "PacketContainerInterval", timeSlice * 2); } }
static void caerInputEDVSExit(caerModuleData moduleData) { // Remove listener, which can reference invalid memory in userData. sshsNodeRemoveAttributeListener(moduleData->moduleNode, moduleData, &logLevelListener); sshsNode biasNode = sshsGetRelativeNode(moduleData->moduleNode, "bias/"); sshsNodeRemoveAttributeListener(biasNode, moduleData, &biasConfigListener); sshsNode dvsNode = sshsGetRelativeNode(moduleData->moduleNode, "dvs/"); sshsNodeRemoveAttributeListener(dvsNode, moduleData, &dvsConfigListener); sshsNode serialNode = sshsGetRelativeNode(moduleData->moduleNode, "serial/"); sshsNodeRemoveAttributeListener(serialNode, moduleData, &serialConfigListener); sshsNode sysNode = sshsGetRelativeNode(moduleData->moduleNode, "system/"); sshsNodeRemoveAttributeListener(sysNode, moduleData, &systemConfigListener); caerDeviceDataStop(moduleData->moduleState); caerDeviceClose((caerDeviceHandle *) &moduleData->moduleState); // Clear sourceInfo node. sshsNode sourceInfoNode = sshsGetRelativeNode(moduleData->moduleNode, "sourceInfo/"); sshsNodeRemoveAllAttributes(sourceInfoNode); if (sshsNodeGetBool(moduleData->moduleNode, "autoRestart")) { // Prime input module again so that it will try to restart if new devices detected. sshsNodePutBool(moduleData->moduleNode, "running", true); } }
static void caerInputDVS128Exit(caerModuleData moduleData) { caerDeviceDataStop(moduleData->moduleState); caerDeviceClose((caerDeviceHandle *) &moduleData->moduleState); if (sshsNodeGetBool(moduleData->moduleNode, "Auto-Restart")) { // Prime input module again so that it will try to restart if new devices detected. sshsNodePutBool(moduleData->moduleNode, "shutdown", false); } }
static void usbConfigSend(sshsNode node, caerModuleData moduleData) { caerDeviceConfigSet(moduleData->moduleState, CAER_HOST_CONFIG_USB, CAER_HOST_CONFIG_USB_BUFFER_NUMBER, U32T(sshsNodeGetInt(node, "BufferNumber"))); caerDeviceConfigSet(moduleData->moduleState, CAER_HOST_CONFIG_USB, CAER_HOST_CONFIG_USB_BUFFER_SIZE, U32T(sshsNodeGetInt(node, "BufferSize"))); caerDeviceConfigSet(moduleData->moduleState, DAVIS_CONFIG_USB, DAVIS_CONFIG_USB_EARLY_PACKET_DELAY, U32T(sshsNodeGetInt(node, "EarlyPacketDelay"))); caerDeviceConfigSet(moduleData->moduleState, DAVIS_CONFIG_USB, DAVIS_CONFIG_USB_RUN, sshsNodeGetBool(node, "Run")); }
static void caerInputDAVISExit(caerModuleData moduleData) { // Device related configuration has its own sub-node. struct caer_davis_info devInfo = caerDavisInfoGet(moduleData->moduleState); sshsNode deviceConfigNode = sshsGetRelativeNode(moduleData->moduleNode, chipIDToName(devInfo.chipID, true)); // Remove listener, which can reference invalid memory in userData. sshsNodeRemoveAttributeListener(moduleData->moduleNode, moduleData, &logLevelListener); sshsNode chipNode = sshsGetRelativeNode(deviceConfigNode, "chip/"); sshsNodeRemoveAttributeListener(chipNode, moduleData, &chipConfigListener); sshsNode muxNode = sshsGetRelativeNode(deviceConfigNode, "multiplexer/"); sshsNodeRemoveAttributeListener(muxNode, moduleData, &muxConfigListener); sshsNode dvsNode = sshsGetRelativeNode(deviceConfigNode, "dvs/"); sshsNodeRemoveAttributeListener(dvsNode, moduleData, &dvsConfigListener); sshsNode apsNode = sshsGetRelativeNode(deviceConfigNode, "aps/"); sshsNodeRemoveAttributeListener(apsNode, moduleData, &apsConfigListener); sshsNode imuNode = sshsGetRelativeNode(deviceConfigNode, "imu/"); sshsNodeRemoveAttributeListener(imuNode, moduleData, &imuConfigListener); sshsNode extNode = sshsGetRelativeNode(deviceConfigNode, "externalInput/"); sshsNodeRemoveAttributeListener(extNode, moduleData, &extInputConfigListener); sshsNode usbNode = sshsGetRelativeNode(deviceConfigNode, "usb/"); sshsNodeRemoveAttributeListener(usbNode, moduleData, &usbConfigListener); sshsNode sysNode = sshsGetRelativeNode(moduleData->moduleNode, "system/"); sshsNodeRemoveAttributeListener(sysNode, moduleData, &systemConfigListener); sshsNode biasNode = sshsGetRelativeNode(deviceConfigNode, "bias/"); size_t biasNodesLength = 0; sshsNode *biasNodes = sshsNodeGetChildren(biasNode, &biasNodesLength); if (biasNodes != NULL) { for (size_t i = 0; i < biasNodesLength; i++) { // Remove listener for this particular bias. sshsNodeRemoveAttributeListener(biasNodes[i], moduleData, &biasConfigListener); } free(biasNodes); } // Ensure Exposure value is coherent with libcaer. sshsAttributeUpdaterRemoveAllForNode(apsNode); sshsNodePutAttribute( apsNode, "Exposure", SSHS_INT, apsExposureUpdater(moduleData->moduleState, "Exposure", SSHS_INT)); // Remove statistics updaters. sshsNode statNode = sshsGetRelativeNode(deviceConfigNode, "statistics/"); sshsAttributeUpdaterRemoveAllForNode(statNode); caerDeviceDataStop(moduleData->moduleState); caerDeviceClose((caerDeviceHandle *) &moduleData->moduleState); // Clear sourceInfo node. sshsNode sourceInfoNode = sshsGetRelativeNode(moduleData->moduleNode, "sourceInfo/"); sshsNodeRemoveAllAttributes(sourceInfoNode); if (sshsNodeGetBool(moduleData->moduleNode, "autoRestart")) { // Prime input module again so that it will try to restart if new devices detected. sshsNodePutBool(moduleData->moduleNode, "running", true); } }