Fix initialisation of extension bug in status report.

The first status report were missed because checkExtension had to be true.
Should fix bug reported here: http://blog.tkjelectronics.dk/2012/08/wiimote-added-to-usb-host-library/#comment-500635
This commit is contained in:
Kristian Sloth Lauszus 2015-04-16 16:50:08 +02:00
parent a3fbffb42c
commit 9cb31799a8
2 changed files with 14 additions and 9 deletions

21
Wii.cpp
View file

@ -296,11 +296,8 @@ void WII::ACLData(uint8_t* l2capinbuf) {
#endif #endif
wiiState = l2capinbuf[12]; // (0x01: Battery is nearly empty), (0x02: An Extension Controller is connected), (0x04: Speaker enabled), (0x08: IR enabled), (0x10: LED1, 0x20: LED2, 0x40: LED3, 0x80: LED4) wiiState = l2capinbuf[12]; // (0x01: Battery is nearly empty), (0x02: An Extension Controller is connected), (0x04: Speaker enabled), (0x08: IR enabled), (0x10: LED1, 0x20: LED2, 0x40: LED3, 0x80: LED4)
batteryLevel = l2capinbuf[15]; // Update battery level batteryLevel = l2capinbuf[15]; // Update battery level
#ifdef DEBUG_USB_HOST
if(l2capinbuf[12] & 0x01) if(!checkBatteryLevel) { // If this is true it means that the user must have called getBatteryLevel()
Notify(PSTR("\r\nWARNING: Battery is nearly empty"), 0x80);
#endif
if(checkExtension) { // If this is false it means that the user must have called getBatteryLevel()
if(l2capinbuf[12] & 0x02) { // Check if a extension is connected if(l2capinbuf[12] & 0x02) { // Check if a extension is connected
#ifdef DEBUG_USB_HOST #ifdef DEBUG_USB_HOST
if(!unknownExtensionConnected) if(!unknownExtensionConnected)
@ -334,8 +331,16 @@ void WII::ACLData(uint8_t* l2capinbuf) {
} else } else
setReportMode(false, 0x31); // If there is no extension connected we will read the buttons and accelerometer setReportMode(false, 0x31); // If there is no extension connected we will read the buttons and accelerometer
} }
} else }
checkExtension = true; // Check for extensions by default #ifdef DEBUG_USB_HOST
else
Notify(PSTR("\r\nChecking battery level"), 0x80);
if(l2capinbuf[12] & 0x01)
Notify(PSTR("\r\nWARNING: Battery is nearly empty"), 0x80);
#endif
checkBatteryLevel = false; // Check for extensions by default
break; break;
case 0x21: // Read Memory Data case 0x21: // Read Memory Data
if((l2capinbuf[12] & 0x0F) == 0) { // No error if((l2capinbuf[12] & 0x0F) == 0) { // No error
@ -926,7 +931,7 @@ void WII::setLedStatus() {
} }
uint8_t WII::getBatteryLevel() { uint8_t WII::getBatteryLevel() {
checkExtension = false; // This is needed so the library knows that the status response is a response to this function checkBatteryLevel = true; // This is needed so the library knows that the status response is a response to this function
statusRequest(); // This will update the battery level statusRequest(); // This will update the battery level
return batteryLevel; return batteryLevel;
}; };

2
Wii.h
View file

@ -422,7 +422,7 @@ private:
uint16_t stateCounter; uint16_t stateCounter;
bool unknownExtensionConnected; bool unknownExtensionConnected;
bool extensionConnected; bool extensionConnected;
bool checkExtension; // Set to false when getBatteryLevel() is called otherwise if should be true bool checkBatteryLevel; // Set to true when getBatteryLevel() is called otherwise if should be false
bool motionPlusInside; // True if it's a new Wiimote with the Motion Plus extension build into it bool motionPlusInside; // True if it's a new Wiimote with the Motion Plus extension build into it
/* L2CAP Channels */ /* L2CAP Channels */