public void RegisterCallBack() { receivedDataCallback = (IntPtr pUserParam, IntPtr ptr, int data_rate, byte radio_strength, IntPtr cal_score_ptr, float battery, int hand_type, int radio_channel) => { GCHandle handle_consume = (GCHandle)pUserParam; VRTRIXDataWrapper objDataGlove = (handle_consume.Target as VRTRIXDataWrapper); VRTRIX_Quat[] quat = new VRTRIX_Quat[16]; MarshalUnmananagedArray2Struct <VRTRIX_Quat>(ptr, 16, out quat); for (int i = 0; i < 16; i++) { objDataGlove.data[i] = new Quaternion(quat[i].qx, quat[i].qy, quat[i].qz, quat[i].qw); } objDataGlove.data_rate = data_rate; objDataGlove.radio_strength = radio_strength; objDataGlove.battery = battery; objDataGlove.hand_type = (HANDTYPE)hand_type; objDataGlove.radio_channel = radio_channel; Marshal.Copy(cal_score_ptr, objDataGlove.calscore, 0, 6); }; receivedEventCallback = (IntPtr pUserParam, IntPtr pEvent) => { GCHandle handle_consume = (GCHandle)pUserParam; VRTRIXDataWrapper objDataGlove = (handle_consume.Target as VRTRIXDataWrapper); VRTRIXGloveEvent gloveEvent = (VRTRIXGloveEvent)pEvent; if (gloveEvent == VRTRIXGloveEvent.VRTRIXGloveEvent_Connected) { objDataGlove.stat = VRTRIXGloveStatus.NORMAL; Debug.Log("VRTRIXGloveEvent_Connected"); } else if (gloveEvent == VRTRIXGloveEvent.VRTRIXGloveEvent_Disconnected) { objDataGlove.stat = VRTRIXGloveStatus.DISCONNECTED; Debug.Log("VRTRIXGloveEvent_Disconnected"); } else if (gloveEvent == VRTRIXGloveEvent.VRTRIXGloveEvent_ChannelHopping) { Debug.Log("VRTRIXGloveEvent_ChannelHopping"); } }; if (sp != IntPtr.Zero) { GCHandle handle_reg = GCHandle.Alloc(this); IntPtr pUserParam = (IntPtr)handle_reg; RegisterDataCallback(pUserParam, this.sp, receivedDataCallback); RegisterEventCallback(this.sp, receivedEventCallback); } }
public void receivedData(HANDTYPE type) { receivedDataCallback = (IntPtr ptr, int data_rate, byte radio_strength, IntPtr cal_score_ptr) => { VRTRIX_Quat[] quat = new VRTRIX_Quat[16]; MarshalUnmananagedArray2Struct <VRTRIX_Quat>(ptr, 16, out quat); for (int i = 0; i < 16; i++) { data[i] = new Quaternion(quat[i].qx, quat[i].qy, quat[i].qz, quat[i].qw); } this.data_rate = data_rate; this.radio_strength = radio_strength; Marshal.Copy(cal_score_ptr, this.calscore, 0, 6); }; if (this.sp != IntPtr.Zero) { RegisterDataCallback(this.sp, receivedDataCallback); } }