public void scanPorts() { List <XsPortInfo> scannedDevicesSet = new List <XsPortInfo>(); XsPortInfoArray scannedDevices = XsScanner.scanPorts(); // Check if we found new devices. for (uint i = 0; i < scannedDevices.size(); i++) { XsPortInfo port = scannedDevices.at(i); scannedDevicesSet.Add(port); if (!findPortInfo(port)) { if (port.deviceId().isWirelessMaster()) { if (WirelessMasterDetected != null) { WirelessMasterDetected(this, new PortInfoArg(port)); } } else if (port.deviceId().isMtw()) { if (DockedMtwDetected != null) { DockedMtwDetected(this, new PortInfoArg(port)); } } } } // Check if we have lost devices (that are not opened already). foreach (XsPortInfo portD in _DetectedDevices) { bool found = false; String did = portD.deviceId().toXsString().toString(); foreach (XsPortInfo portS in scannedDevicesSet) { if (portS.deviceId().toXsString().toString() == portD.deviceId().toXsString().toString()) { found = true; } } if (!found) { if (portD.deviceId().isMtw() && MtwUndocked != null) { MtwUndocked(this, new PortInfoArg(portD)); } } } _DetectedDevices = scannedDevicesSet; }
private bool findPortInfo(XsPortInfo portInfo) { bool retval = false; foreach (XsPortInfo port in _DetectedDevices) { String did1 = port.deviceId().toXsString().toString(); String did2 = portInfo.deviceId().toXsString().toString(); if (port.deviceId().toXsString().toString() == portInfo.deviceId().toXsString().toString()) { retval = true; break; } } return(retval); }
private void btnScan_Click(object sender, EventArgs e) { rtbSteps.Text = "Scanning for devices..."; btnScan.Enabled = false; Update(); GT_Senxda.m_object.reset(); GT_Senxda.m_object.scanPorts(); if (GT_Senxda.m_object._DetectedDevices.Count > 0) { rtbSteps.Text = string.Format("Found {0} device(s)\n", GT_Senxda.m_object._DetectedDevices.Count); XsPortInfo portInfo = GT_Senxda.m_object._DetectedDevices[0]; if (portInfo.deviceId().isMtMk4() || portInfo.deviceId().isFmt_X000() || portInfo.deviceId().isMt9c() || portInfo.deviceId().isLegacyMtig()) { rtbSteps.Text += "Opening port...\n"; GT_Senxda.m_object.openPort(portInfo); MasterInfo ai = new MasterInfo(portInfo.deviceId()); ai.ComPort = portInfo.portName(); ai.BaudRate = portInfo.baudrate(); _measuringDevice = GT_Senxda.m_object.getDevice(ai.DeviceId); ai.ProductCode = new XsString(_measuringDevice.productCode()); // Print information about detected MTi / MTx / MTmk4 device rtbSteps.Text += string.Format("Found a device with id: {0} @ port: {1}, baudrate: {2}\n", _measuringDevice.deviceId().toXsString().toString(), ai.ComPort.toString(), ai.BaudRate); // Create and attach callback handler to device _myMtCallback = new MyMtCallback(); _measuringDevice.addCallbackHandler(_myMtCallback); ConnectedMtData mtwData = new ConnectedMtData(); // connect signals _myMtCallback.DataAvailable += new EventHandler <DataAvailableArgs>(_callbackHandler_DataAvailable); // Put the device in configuration mode rtbSteps.Text += "Putting device into configuration mode...\n"; if (!_measuringDevice.gotoConfig()) // Put the device into configuration mode before configuring the device { rtbSteps.Text = "Could not put device into configuration mode. Aborting."; return; } // Configure the device. Note the differences between MTix and MTmk4 rtbSteps.Text += "Configuring the device...\n"; if (_measuringDevice.deviceId().isMt9c() || _measuringDevice.deviceId().isLegacyMtig()) { XsOutputMode outputMode = XsOutputMode.XOM_Orientation; // output orientation data XsOutputSettings outputSettings = XsOutputSettings.XOS_OrientationMode_Quaternion; // output orientation data as quaternion XsDeviceMode deviceMode = new XsDeviceMode(100); // make a device mode with update rate: 100 Hz deviceMode.setModeFlag(outputMode); deviceMode.setSettingsFlag(outputSettings); // set the device configuration if (!_measuringDevice.setDeviceMode(deviceMode)) { rtbSteps.Text = "Could not configure MTix device. Aborting."; return; } } else if (_measuringDevice.deviceId().isMtMk4() || _measuringDevice.deviceId().isFmt_X000()) { XsOutputConfigurationArray configArray = new XsOutputConfigurationArray(); if (_measuringDevice.deviceId().isMtMk4_1() || _measuringDevice.deviceId().isMtMk4_10() || _measuringDevice.deviceId().isMtMk4_100() || _measuringDevice.deviceId().isFmt1010()) { configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_PacketCounter, 0)); configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_SampleTimeFine, 0)); configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_DeltaV, 100)); configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_DeltaQ, 100)); configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_MagneticField, 100)); } else { configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_PacketCounter, 0)); configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_SampleTimeFine, 0)); configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_Quaternion, 100)); configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_DeltaV, 100)); configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_DeltaQ, 100)); configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_MagneticField, 100)); configArray.push_back(new XsOutputConfiguration(XsDataIdentifier.XDI_StatusWord, 0)); } if (!_measuringDevice.setOutputConfiguration(configArray)) { rtbSteps.Text = "Could not configure MTmk4 device. Aborting."; return; } } else { rtbSteps.Text = "Unknown device while configuring. Aborting."; return; } // Put the device in measurement mode rtbSteps.Text += "Putting device into measurement mode...\n"; if (!_measuringDevice.gotoMeasurement()) { rtbSteps.Text = "Could not put device into measurement mode. Aborting."; return; } btnRecord.Enabled = true; } timer1.Interval = 20; timer1.Enabled = true; } else { rtbSteps.Text = "No devices detected. Press 'Scan' to retry."; btnScan.Enabled = true; } }
public void Start() { if (state != XSensState.NotStarted) { Debug.Log("[XSensGyroscope] Cannot call Start twice! Ignoring...\n"); return; } this.UpdateState(XSensState.Starting); _xda.scanPorts(); Debug.LogFormat("[XSensGyroscope] Found {0} device(s)\n", _xda._DetectedDevices.Count); if (_xda._DetectedDevices.Count > 0) { XsPortInfo portInfo = _xda._DetectedDevices[0]; if (portInfo.deviceId().isMtMk4()) { _xda.openPort(portInfo); MasterInfo ai = new MasterInfo(portInfo.deviceId()); ai.ComPort = portInfo.portName(); ai.BaudRate = portInfo.baudrate(); _measuringDevice = _xda.getDevice(ai.DeviceId); ai.ProductCode = new XsString(_measuringDevice.productCode()); // Print information about detected MTi / MTx / MTmk4 device Debug.LogFormat("[XSensGyroscope] Found a device with id: {0} @ port: {1}, baudrate: {2}\n", _measuringDevice.deviceId().toXsString().toString(), ai.ComPort.toString(), ai.BaudRate); // Create and attach callback handler to device _myMtCallback = new MyMtCallback(); _measuringDevice.addCallbackHandler(_myMtCallback); ConnectedMtData mtwData = new ConnectedMtData(); // connect signals _myMtCallback.DataAvailable += new EventHandler <DataAvailableArgs>(DataAvailable); // Put the device in configuration mode Debug.Log("[XSensGyroscope] Putting device into configuration mode...\n"); if (!_measuringDevice.gotoConfig()) // Put the device into configuration mode before configuring the device { Debug.Log("[XSensGyroscope] Could not put device into configuration mode. Aborting."); this.UpdateState(XSensState.Failed); return; } // Configure the device. Note the differences between MTix and MTmk4 Debug.Log("[XSensGyroscope] Configuring the device...\n"); if (_measuringDevice.deviceId().isMt9c()) { XsOutputMode outputMode = XsOutputMode.XOM_Orientation; // output orientation data XsOutputSettings outputSettings = XsOutputSettings.XOS_OrientationMode_Quaternion; // output orientation data as quaternion XsDeviceMode deviceMode = new XsDeviceMode(100); // make a device mode with update rate: 100 Hz deviceMode.setModeFlag(outputMode); deviceMode.setSettingsFlag(outputSettings); // set the device configuration if (!_measuringDevice.setDeviceMode(deviceMode)) { Debug.Log("[XSensGyroscope] Could not configure MTix device. Aborting."); this.UpdateState(XSensState.Failed); return; } } else if (_measuringDevice.deviceId().isMtMk4()) { XsOutputConfiguration quat = new XsOutputConfiguration(XsDataIdentifier.XDI_Quaternion, 0); XsOutputConfigurationArray configArray = new XsOutputConfigurationArray(); configArray.push_back(quat); if (!_measuringDevice.setOutputConfiguration(configArray)) { Debug.Log("[XSensGyroscope] Could not configure MTmk4 device. Aborting."); this.UpdateState(XSensState.Failed); return; } } else { Debug.Log("[XSensGyroscope] Unknown device while configuring. Aborting."); this.UpdateState(XSensState.Failed); return; } // Put the device in measurement mode Debug.Log("[XSensGyroscope] Putting device into measurement mode...\n"); if (!_measuringDevice.gotoMeasurement()) { Debug.Log("[XSensGyroscope] Could not put device into measurement mode. Aborting."); this.UpdateState(XSensState.Failed); return; } this.UpdateState(XSensState.Started); } } }