/// <summary> /// Devices the value received. /// </summary> /// <param name="device">Device.</param> /// <param name="type">Type.</param> /// <param name="uid">Uid.</param> /// <param name="value">Value.</param> internal void DeviceValueReceived(IDevice device,Native.IOHIDElementType type,uint uid,int value) { // UnityEngine.Debug.Log ("OSXDriver>>DeviceValueReceived type="+type+" uid:"+uid+" value:"+value); //AXIS if(type==Native.IOHIDElementType.kIOHIDElementTypeInput_Misc || type==Native.IOHIDElementType.kIOHIDElementTypeInput_Axis) { int numAxes=device.Axis.Count; AxisDetails axisDetails; //numAxes for (int axisIndex = 0; axisIndex < numAxes; axisIndex++) { axisDetails=device.Axis[axisIndex] as AxisDetails; //UnityEngine.Debug.Log ("OSXDriver>>DeviceValueReceived axisDetails="+axisDetails.uid); if (axisDetails!=null) if(axisDetails.uid== uid) { //UnityEngine.Debug.Log ("OSXDriver>>DeviceValueReceived Axis["+axisIndex+"] axisDetails.uid="+axisDetails.uid); //check hatch //Check if POV element. if(axisDetails.isHat) { //UnityEngine.Debug.Log ("OSXDriver>>DeviceValueReceived axisDetails.uid="+axisDetails.isHat); //Workaround for POV hat switches that do not have null states. if(!axisDetails.isNullable) { value = value < axisDetails.min ? axisDetails.max - axisDetails.min + 1 : value - 1; } float outX=0f; float outY=0f; if(value<15) hatValueToXY(value,(axisDetails.max - axisDetails.min)+1,out outX,out outY); device.Axis[JoystickAxis.AxisPovX].value=outX; device.Axis[JoystickAxis.AxisPovY].value=outY; axisIndex++;//cos 2 axis are handled // UnityEngine.Debug.Log("POVX:"+device.Axis[JoystickAxis.AxisPovX].value+" POVY:"+device.Axis[JoystickAxis.AxisPovY].value); }else{ // if(axisIndex==2){ // UnityEngine.Debug.Log("ORG Axis"+axisIndex+" Counts:"+ (int)value+" min:"+axisDetails.min+" max:"+axisDetails.max); // // } //Sanity check. if(value < axisDetails.min) { value = axisDetails.min; } if(value > axisDetails.max) { value = axisDetails.max; } //Calculate the -1 to 1 float from the min and max possible values. float analogValue=0f; //if trigger if(axisDetails.isTrigger) analogValue=(float)value/axisDetails.max; else analogValue=(value - axisDetails.min) / (float)(axisDetails.max - axisDetails.min) * 2.0f - 1.0f; axisDetails.value=analogValue; } }else{//cos update of values happen only on "interrupt" and its returning only one element value //the rest should take previous value which would update ButtonState //!!! side effect inputput might left to "hold" forever axisDetails.value=axisDetails.value; } // if(axisIndex==1){ // //UnityEngine.Debug.Log("Axis"+axisIndex+" Counts:"+ value+" min:"+axisDetails.min+" max:"+axisDetails.max); // //UnityEngine.Debug.Log("Axis"+axisIndex+" Value:"+axisDetails.value); // } }//end for //BUTTONS }else if(type==Native.IOHIDElementType.kIOHIDElementTypeInput_Button){ int numButtons=device.Buttons.Count; IButtonDetails buttonDetails; for (int buttonIndex = 0; buttonIndex < numButtons; buttonIndex++) { buttonDetails=device.Buttons[buttonIndex]; if(buttonDetails==null) continue; if ( buttonDetails.uid== uid) { buttonDetails.value=value; // UnityEngine.Debug.Log("Button "+buttonIndex+" value:"+value+" State:"+device.Buttons[buttonIndex].buttonState); }else{//cos update of values happen only on "interrupt" and its returning only one element value //the rest should take previous value which would update ButtonState buttonDetails.value=buttonDetails.value; } } } }