static inline void DecodeVector(SendProp const *pProp, bf_read *pIn, float *v) { v[0] = DecodeFloat(pProp, pIn); v[1] = DecodeFloat(pProp, pIn); // Don't read in the third component for normals if ((pProp->GetFlags() & SPROP_NORMAL) == 0) { v[2] = DecodeFloat(pProp, pIn); } else { int signbit = pIn->ReadOneBit(); float v0v0v1v1 = v[0] * v[0] + v[1] * v[1]; if (v0v0v1v1 < 1.0f) v[2] = sqrtf( 1.0f - v0v0v1v1 ); else v[2] = 0.0f; if (signbit) v[2] *= -1.0f; } }
static inline void DecodeQuaternion(SendProp const *pProp, bf_read *pIn, float *v) { v[0] = DecodeFloat(pProp, pIn); v[1] = DecodeFloat(pProp, pIn); v[2] = DecodeFloat(pProp, pIn); v[3] = DecodeFloat(pProp, pIn); }
void Float_Decode( DecodeInfo *pInfo ) { pInfo->m_Value.m_Float = DecodeFloat(pInfo->m_pProp, pInfo->m_pIn); if ( pInfo->m_pRecvProp ) pInfo->m_pRecvProp->GetProxyFn()( pInfo, pInfo->m_pStruct, pInfo->m_pData ); }
///////////////////////////////////////////////////////////////////////////////////////////// // Sensor Display Info // HID Type: Get Feature // HID Packet Length: 56 ///////////////////////////////////////////////////////////////////////////////////////////// BOOLEAN getSensorInfo( Device *dev ) { UInt8 Buffer[56]; //UInt16 CommandId; int res; Buffer[0] = 0x9; // DisplayInfo res = hid_get_feature_report(dev->hidapi_dev, Buffer, 56 ); if (res < 0) { return FALSE; } else { dev->sensorInfo.DistortionType = Buffer[3]; dev->sensorInfo.HResolution = DecodeUInt16(Buffer+4); dev->sensorInfo.VResolution = DecodeUInt16(Buffer+6); dev->sensorInfo.HScreenSize = DecodeUInt32(Buffer+8) * (1/1000000.f); dev->sensorInfo.VScreenSize = DecodeUInt32(Buffer+12) * (1/1000000.f); dev->sensorInfo.VCenter = DecodeUInt32(Buffer+16) * (1/1000000.f); dev->sensorInfo.LensSeparation = DecodeUInt32(Buffer+20) * (1/1000000.f); dev->sensorInfo.EyeToScreenDistance[0] = DecodeUInt32(Buffer+24) * (1/1000000.f); dev->sensorInfo.EyeToScreenDistance[1] = DecodeUInt32(Buffer+28) * (1/1000000.f); dev->sensorInfo.DistortionK[0] = DecodeFloat(Buffer+32); dev->sensorInfo.DistortionK[1] = DecodeFloat(Buffer+36); dev->sensorInfo.DistortionK[2] = DecodeFloat(Buffer+40); dev->sensorInfo.DistortionK[3] = DecodeFloat(Buffer+44); dev->sensorInfo.DistortionK[4] = DecodeFloat(Buffer+48); dev->sensorInfo.DistortionK[5] = DecodeFloat(Buffer+52); #if 0 { int i; printf ("\nSensor Info:\n"); for (i = 0; i < res; i++) printf("%hhx ", Buffer[i]); puts("\n"); printf ("\nR: %d x %d", dev->sensorInfo.HResolution, dev->sensorInfo.VResolution ); printf ("\tS: %f x %f\n", dev->sensorInfo.HScreenSize, dev->sensorInfo.VScreenSize ); } #endif } return TRUE; }
bool Float_IsEncodedZero( const SendProp *pProp, bf_read *pIn ) { return DecodeFloat( pProp, pIn ) == 0.0f; }