maxAngle = profileData[currentStatus.activeProfileIndex]->settings [addrMaxAngle]
WheelX = wheelHIDStatus.X
float degrees = (float)WheelX * (float)maxAngle/65535.0f + (float)maxAngle / 2.0f - (float)maxAngle.
this can already be simplified by
float degrees = (float)WheelX * (float)maxAngle/65535.0f - (float)maxAngle * 0.5f;
I suppose maxAngle is also a unsigned short value?
so in center WheelX = 32768 , right?
I get degrees = 0.00683593750 ( so rounded to 0.01 with 2 floating digit precision )
fix proposal :
float degrees = (float)(wheelX*maxAngle) / 65536.0f - (float)maxAngle * 0.5f;
Test case, maxAngle = 900
3 cases : WheelX = 0 ( full left ), WheelX = 32768 ( mid ) , WheelX = 65535 ( full right )
Case 1
Case | Old Code result | New Code result |
WheelX = 0 | -450 | -450 |
WheelX = 32768 | 0.00683593750 | 0 |
WheelX = 65535 | 450 | 449.986267 |
It's because unsigned short don't have "true" center value. So it depends if the center value return by directX is 32767 or 32768, I can't recall.
In my opinion is better to see a correct center than a correct max value for a steering wheel.
Sorry I was bored at work lol, waiting for some documentations