// Non-static method public void sensorEventThread() { try { while (true) { ZenEvent zenEvent = new ZenEvent(); //Console.WriteLine(mZenHandle); if (OpenZen.ZenWaitForNextEvent(mZenHandle, zenEvent)) { if (zenEvent.component.handle == 0) { // if the handle is on, its not a sensor event but a system wide // event switch (zenEvent.eventType) { case (int)ZenSensorEvent.ZenSensorEvent_SensorFound: Console.WriteLine("found sensor event event " + zenEvent.data.sensorFound.name); mFoundSensors.Add(zenEvent.data.sensorFound); break; case (int)ZenSensorEvent.ZenSensorEvent_SensorListingProgress: if (zenEvent.data.sensorListingProgress.progress == 1.0) { mSearchDone = true; } break; } } else { switch (zenEvent.eventType) { case (int)ZenImuEvent.ZenImuEvent_Sample: mImuEventCount++; if (mImuEventCount % 100 == 0) { continue; } // read acceleration OpenZenFloatArray fa = OpenZenFloatArray.frompointer(zenEvent.data.imuData.a); // read angular velocity OpenZenFloatArray fg = OpenZenFloatArray.frompointer(zenEvent.data.imuData.g); // read euler angles OpenZenFloatArray fr = OpenZenFloatArray.frompointer(zenEvent.data.imuData.r); // read quaternion OpenZenFloatArray fq = OpenZenFloatArray.frompointer(zenEvent.data.imuData.q); Console.WriteLine("Sensor data\n -> Acceleration a = " + fa.getitem(0) + " " + fa.getitem(1) + " " + fa.getitem(2)); Console.WriteLine(" -> Angular velocity g = " + fg.getitem(0) + " " + fg.getitem(1) + " " + fg.getitem(2)); Console.WriteLine(" -> Euler angles r = " + fr.getitem(0) + " " + +fr.getitem(1) + " " + fr.getitem(2)); Console.WriteLine(" -> Quaternion w = " + fq.getitem(0) + " x " + +fq.getitem(1) + " y " + +fq.getitem(2) + " z " + +fq.getitem(3)); break; } } } } } catch (ThreadAbortException) { } }
// Non-static method public void sensorEventThread() { try { OpenZen.ZenInit(device_Handle); ZenEvent zenEvent = new ZenEvent(); Boolean connected = false; ZenSensorInitError sensorInitError = ZenSensorInitError.ZenSensorInitError_Max; // try three connection attempts for (int i = 0; i < 1; i++) { sensorInitError = OpenZen.ZenObtainSensor(device_Handle, mSensor, device_Sensor); if (sensorInitError == ZenSensorInitError.ZenSensorInitError_None) { connected = true; // Enable Disconnect Button MainForm mainForm = FormProvider.getMain(); switch (device_No) { case 1: if (mainForm.InvokeRequired) { mainForm.BeginInvoke((Action) delegate() { mainForm.device_List1.Enabled = false; mainForm.disconnect_Device1.Visible = true; mainForm.connect_Device1.Enabled = false; }); } else { mainForm.device_List1.Enabled = false; mainForm.disconnect_Device1.Visible = true; mainForm.connect_Device1.Enabled = false; } break; case 2: if (mainForm.InvokeRequired) { mainForm.BeginInvoke((Action) delegate() { mainForm.device_List2.Enabled = false; mainForm.disconnect_Device2.Visible = true; mainForm.connect_Device2.Enabled = false; }); } else { mainForm.device_List2.Enabled = false; mainForm.disconnect_Device2.Visible = true; mainForm.connect_Device2.Enabled = false; } break; case 3: if (mainForm.InvokeRequired) { mainForm.BeginInvoke((Action) delegate() { mainForm.device_List3.Enabled = false; mainForm.disconnect_Device3.Visible = true; mainForm.connect_Device3.Enabled = false; }); } else { mainForm.device_List3.Enabled = false; mainForm.disconnect_Device3.Visible = true; mainForm.connect_Device3.Enabled = false; } break; case 4: if (mainForm.InvokeRequired) { mainForm.BeginInvoke((Action) delegate() { mainForm.device_List4.Enabled = false; mainForm.disconnect_Device4.Visible = true; mainForm.connect_Device4.Enabled = false; }); } else { mainForm.device_List4.Enabled = false; mainForm.disconnect_Device4.Visible = true; mainForm.connect_Device4.Enabled = false; } break; } MessageBox.Show("Succesfully connected to sensor for Device #" + device_No.ToString()); break; } else { MessageBox.Show("Failed"); } } while (connected) { //Console.WriteLine(mZenHandle); if (OpenZen.ZenWaitForNextEvent(device_Handle, zenEvent)) { if (zenEvent.component.handle != 0) { switch (zenEvent.eventType) { case (int)ZenImuEvent.ZenImuEvent_Sample: count++; // read raw accelerometer OpenZenFloatArray raw_fa = OpenZenFloatArray.frompointer(zenEvent.data.imuData.aRaw); // read calibrated accelerometer OpenZenFloatArray fa = OpenZenFloatArray.frompointer(zenEvent.data.imuData.a); // read raw accelerometer OpenZenFloatArray raw_fg = OpenZenFloatArray.frompointer(zenEvent.data.imuData.gRaw); // read calibrated gyroscope OpenZenFloatArray fg = OpenZenFloatArray.frompointer(zenEvent.data.imuData.g); // read raw magnetometer OpenZenFloatArray raw_fb = OpenZenFloatArray.frompointer(zenEvent.data.imuData.bRaw); // read calibrated magnetometer OpenZenFloatArray fb = OpenZenFloatArray.frompointer(zenEvent.data.imuData.b); // read euler angle OpenZenFloatArray fr = OpenZenFloatArray.frompointer(zenEvent.data.imuData.r); // read quaternion OpenZenFloatArray fq = OpenZenFloatArray.frompointer(zenEvent.data.imuData.q); // Create new imuData object IMUData imuData = new IMUData( raw_fa.getitem(0), raw_fa.getitem(1), raw_fa.getitem(2), fa.getitem(0), fa.getitem(1), fa.getitem(2), raw_fg.getitem(0), raw_fg.getitem(1), raw_fg.getitem(2), fg.getitem(0), fg.getitem(1), fg.getitem(2), raw_fb.getitem(0), raw_fb.getitem(1), raw_fb.getitem(2), fb.getitem(0), fb.getitem(1), fb.getitem(2), fr.getitem(0), fr.getitem(1), fr.getitem(2), fq.getitem(0), fq.getitem(1), fq.getitem(2) ); // Push data in to the new imuData Object switch (device_No) { case (1): transferDevice1_Data(imuData); //Debug.WriteLine(count); break; case (2): transferDevice2_Data(imuData); break; case (3): transferDevice3_Data(imuData); break; case (4): transferDevice4_Data(imuData); Debug.WriteLine(count); break; } break; } } } } } catch (ThreadAbortException) { } }
private void retrieve_Port_Click(object sender, EventArgs e) { foundSensors.Clear(); device_List1.Items.Clear(); device_List2.Items.Clear(); device_List3.Items.Clear(); device_List4.Items.Clear(); OpenZen.ZenInit(zenHandle); ZenEvent zenEvent = new ZenEvent(); Boolean searchDone = false; // start sensor listing, new sensors will be reported as Events in our event thread OpenZen.ZenListSensorsAsync(zenHandle); // Searching for device while (searchDone == false) { if (OpenZen.ZenWaitForNextEvent(zenHandle, zenEvent) && zenEvent.component.handle == 0) { // Handle Event switch (zenEvent.eventType) { case (int)ZenSensorEvent.ZenSensorEvent_SensorFound: //MessageBox.Show("Device : " + zenEvent.data.sensorFound.name); ZenSensorDesc sensor = new ZenSensorDesc(); sensor.identifier = zenEvent.data.sensorFound.identifier; sensor.baudRate = zenEvent.data.sensorFound.baudRate; sensor.ioType = zenEvent.data.sensorFound.ioType; sensor.name = zenEvent.data.sensorFound.name; sensor.serialNumber = zenEvent.data.sensorFound.serialNumber; foundSensors.Add(sensor); break; case (int)ZenSensorEvent.ZenSensorEvent_SensorListingProgress: if (zenEvent.data.sensorListingProgress.progress == 1.0) { searchDone = true; } break; } } } // Listing Connected Device if (foundSensors.Count > 0) { for (int i = 0; i < foundSensors.Count; i++) { device_List1.Items.Add(foundSensors[i].name); device_List2.Items.Add(foundSensors[i].name); device_List3.Items.Add(foundSensors[i].name); device_List4.Items.Add(foundSensors[i].name); } device_List1.SelectedIndex = 0; device_List2.SelectedIndex = 0; device_List3.SelectedIndex = 0; device_List4.SelectedIndex = 0; } else { MessageBox.Show("No Sensor Device is found"); } }
// Non-static method public void sensorEventThread() { try { while (true) { ZenEvent zenEvent = new ZenEvent(); //Console.WriteLine(mZenHandle); if (OpenZen.ZenWaitForNextEvent(mZenHandle, zenEvent)) { if (zenEvent.component.handle == 0) { // if the handle is on, its not a sensor event but a system wide // event switch (zenEvent.eventType) { case (int)ZenSensorEvent.ZenSensorEvent_SensorFound: Console.WriteLine("found sensor event event " + zenEvent.data.sensorFound.name); mFoundSensors.Add(zenEvent.data.sensorFound); break; case (int)ZenSensorEvent.ZenSensorEvent_SensorListingProgress: if (zenEvent.data.sensorListingProgress.progress == 1.0) { mSearchDone = true; } break; } } else { switch (zenEvent.eventType) { case (int)ZenImuEvent.ZenImuEvent_Sample: mImuEventCount++; if (mImuEventCount % 100 == 0) { continue; } // read acceleration OpenZenFloatArray fa = OpenZenFloatArray.frompointer(zenEvent.data.imuData.a); // read euler angles OpenZenFloatArray fg = OpenZenFloatArray.frompointer(zenEvent.data.imuData.g); // read quaternion OpenZenFloatArray fb = OpenZenFloatArray.frompointer(zenEvent.data.imuData.b); // Output Data IMU_Display_Monitor imu = FormProvider.getIMU_Display_Monitor(); // Accelerometer imu.acx = fa.getitem(0); imu.acy = fa.getitem(1); imu.acz = fa.getitem(2); // Gyroscope imu.gyx = fg.getitem(0); imu.gyy = fg.getitem(1); imu.gyz = fg.getitem(2); // Magnetometer imu.mgx = fb.getitem(0); imu.mgy = fb.getitem(1); imu.mgz = fb.getitem(2); break; } } } } } catch (ThreadAbortException) { } }