Пример #1
0
        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);
            }
        }