public vJoystick(vJoy joy, uint jID) { m_joy = joy; Index = jID; m_nButtons = m_joy.GetVJDButtonNumber(Index); m_nPov = m_joy.GetVJDDiscPovNumber(Index); m_prodS = m_joy.GetvJoyProductString( ); m_hasX = GetState(HID_USAGES.HID_USAGE_X); m_hasY = GetState(HID_USAGES.HID_USAGE_Y); m_hasZ = GetState(HID_USAGES.HID_USAGE_Z); m_hasRX = GetState(HID_USAGES.HID_USAGE_RX); m_hasRY = GetState(HID_USAGES.HID_USAGE_RY); m_hasRZ = GetState(HID_USAGES.HID_USAGE_RZ); m_hasSL1 = GetState(HID_USAGES.HID_USAGE_SL0); m_hasSL2 = GetState(HID_USAGES.HID_USAGE_SL1); for (int i = 1; i <= m_nPov; i++) { m_hasPov[i] = GetState(HID_USAGES.HID_USAGE_POV, i); } for (int i = 1; i <= m_nButtons; i++) { m_hasBtn[i] = GetState(HID_USAGES.HID_USAGE_WHL, i); // Use WHL as button qualifier... } }
private xState[] m_hasBtn = new xState[1 + 128]; // [0] is not used private xState GetState(HID_USAGES usage, int pindex = 0) { var ret = new xState { usage = usage, current = 0 }; if (usage == HID_USAGES.HID_USAGE_POV) { ret.has = (pindex > 0 && pindex <= m_nPov); ret.pindex = pindex; ret.current = (int)POVType.Nil; } else if (usage == HID_USAGES.HID_USAGE_WHL) // button { ret.has = (pindex > 0 && pindex <= m_nPov); ret.pindex = pindex; ret.current = 0; // == false... } else { ret.has = m_joy.GetVJDAxisExist(Index, usage); if (ret.has) { long val = 0; if (m_joy.GetVJDAxisMin(Index, usage, ref val)) { ret.min = (int)val; } if (m_joy.GetVJDAxisMax(Index, usage, ref val)) { ret.max = (int)val; } ret.range = (double)(ret.max - ret.min) / xState.MAXOUT; } } return(ret); }