| 57 | } |
| 58 | |
| 59 | void ExtensionBase::postProcess() { |
| 60 | uint8_t i; |
| 61 | |
| 62 | uint16_t minVal, maxVal, cenVal; |
| 63 | int16_t outVal; |
| 64 | int16_t centerOffset = 0; |
| 65 | |
| 66 | for (i = 0; i < WiiAnalogs::WII_MAX_ANALOGS; ++i) { |
| 67 | // scale calibration values before using |
| 68 | if (i != WiiAnalogs::WII_ANALOG_CALIBRATION_PRECISION) { |
| 69 | outVal = applyCalibration(analogState[i], _analogCalibration[i].minimum, _analogCalibration[i].maximum, _analogCalibration[i].center); |
| 70 | |
| 71 | minVal = map(_analogCalibration[i].minimum, 0, _analogPrecision[WiiAnalogs::WII_ANALOG_CALIBRATION_PRECISION].origin-1, 0, _analogPrecision[WiiAnalogs::WII_ANALOG_CALIBRATION_PRECISION].destination-1); |
| 72 | maxVal = map(_analogCalibration[i].maximum, 0, _analogPrecision[WiiAnalogs::WII_ANALOG_CALIBRATION_PRECISION].origin-1, 0, _analogPrecision[WiiAnalogs::WII_ANALOG_CALIBRATION_PRECISION].destination-1); |
| 73 | cenVal = map(_analogCalibration[i].center, 0, _analogPrecision[WiiAnalogs::WII_ANALOG_CALIBRATION_PRECISION].origin-1, 0, _analogPrecision[WiiAnalogs::WII_ANALOG_CALIBRATION_PRECISION].destination-1); |
| 74 | |
| 75 | if (isFirstRead) { |
| 76 | // stash the first read as the initial orientation. will reset on hotswap. |
| 77 | initialAnalogState[i] = outVal; |
| 78 | |
| 79 | if (!_hasCalibrationData) { |
| 80 | cenVal = initialAnalogState[i]; |
| 81 | } |
| 82 | } |
| 83 | |
| 84 | if (_analogCalibration[i].useOffset) { |
| 85 | centerOffset = _analogCalibration[i].center-initialAnalogState[i]; |
| 86 | } else { |
| 87 | centerOffset = 0; |
| 88 | } |
| 89 | |
| 90 | if ((i != WiiAnalogs::WII_ANALOG_LEFT_TRIGGER) && (i != WiiAnalogs::WII_ANALOG_RIGHT_TRIGGER)) { |
| 91 | outVal = map(outVal, _analogCalibration[i].minimum, _analogCalibration[i].maximum, minVal, maxVal); |
| 92 | outVal = map(outVal, minVal, maxVal, 10, (_analogPrecision[WiiAnalogs::WII_ANALOG_CALIBRATION_PRECISION].destination-1)); |
| 93 | } else { |
| 94 | outVal = bounds(outVal, 10, (_analogPrecision[i].destination-1)); |
| 95 | } |
| 96 | |
| 97 | if (outVal < 0) outVal = 10; |
| 98 | if (outVal > (_analogPrecision[i].destination-1)) outVal = (_analogPrecision[i].destination-1); |
| 99 | #if WII_EXTENSION_DEBUG==true |
| 100 | if (i == WiiAnalogs::WII_ANALOG_LEFT_X) { |
| 101 | //printf("cur:%5d min=%5d:%5d max=%5d:%5d cen=%5d:%5d out:%5d off:%5d\n", analogState[i], _analogCalibration[i].minimum, minVal, _analogCalibration[i].maximum, maxVal, _analogCalibration[i].center, cenVal, outVal, centerOffset); |
| 102 | } |
| 103 | #endif |
| 104 | |
| 105 | analogState[i] = outVal; |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | if (isFirstRead) isFirstRead = false; |
| 110 | |
| 111 | #if WII_EXTENSION_DEBUG==true |
| 112 | //if ((_lastRead[0] != regRead[0]) || (_lastRead[1] != regRead[1]) || (_lastRead[2] != regRead[2]) || (_lastRead[3] != regRead[3])) { |
| 113 | // printf("Joy1 X=%4d Y=%4d Joy2 X=%4d Y=%4d\n", joy1X, joy1Y, joy2X, joy2Y); |
| 114 | //} |
| 115 | //printf("C Joy1 X=%5d Y=%5d Joy2 X=%5d Y=%5d U=%1d D=%1d L=%1d R=%1d TL=%5d TR=%4d\n", analogState[WiiAnalogs::WII_ANALOG_LEFT_X], analogState[WiiAnalogs::WII_ANALOG_LEFT_Y], analogState[WiiAnalogs::WII_ANALOG_RIGHT_X], analogState[WiiAnalogs::WII_ANALOG_RIGHT_Y], directionalPad[WiiDirectionalPad::WII_DIRECTION_UP], directionalPad[WiiDirectionalPad::WII_DIRECTION_DOWN], directionalPad[WiiDirectionalPad::WII_DIRECTION_LEFT], directionalPad[WiiDirectionalPad::WII_DIRECTION_RIGHT], analogState[WiiAnalogs::WII_ANALOG_TRIGGER_LEFT], analogState[WiiAnalogs::WII_ANALOG_TRIGGER_RIGHT]); |
| 116 | //printf("A=%1d B=%1d X=%1d Y=%1d ZL=%1d ZR=%1d LT=%1d RT=%1d -=%1d H=%1d +=%1d\n", buttonA, buttonB, buttonX, buttonY, buttonZL, buttonZR, buttonLT, buttonRT, buttonMinus, buttonHome, buttonPlus); |