mirror of
https://github.com/gdsports/USBHost_t36
synced 2024-12-21 23:08:55 -05:00
FIX - Keyboard LEDS
The main issue was I used a setup structure on the stack which turned into garbage. Earlier I thought the data was copied, but it was not... Found that fixing this resolved the earlier issue where I needed to defer the update. So removed the defered code, plus use member variable for the one byte output instead of static variable.
This commit is contained in:
parent
ec4a7ac24c
commit
d3e21b04c0
@ -669,8 +669,6 @@ private:
|
||||
uint8_t keyOEM;
|
||||
uint8_t prev_report[8];
|
||||
KBDLeds_t leds_ = {0};
|
||||
bool update_leds_ = false;
|
||||
bool processing_new_data_ = false;
|
||||
Pipe_t mypipes[2] __attribute__ ((aligned(32)));
|
||||
Transfer_t mytransfers[4] __attribute__ ((aligned(32)));
|
||||
strbuf_t mystring_bufs[1];
|
||||
|
24
keyboard.cpp
24
keyboard.cpp
@ -179,7 +179,6 @@ static bool contains(uint8_t b, const uint8_t *data)
|
||||
|
||||
void KeyboardController::new_data(const Transfer_t *transfer)
|
||||
{
|
||||
processing_new_data_ = true;
|
||||
println("KeyboardController Callback (member)");
|
||||
print(" KB Data: ");
|
||||
print_hexbytes(transfer->buffer, 8);
|
||||
@ -197,12 +196,6 @@ void KeyboardController::new_data(const Transfer_t *transfer)
|
||||
}
|
||||
memcpy(prev_report, report, 8);
|
||||
queue_Data_Transfer(datapipe, report, 8, this);
|
||||
processing_new_data_ = false;
|
||||
|
||||
// See if we have any outstanding leds to update
|
||||
if (update_leds_) {
|
||||
updateLEDS();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -328,22 +321,9 @@ void KeyboardController::LEDS(uint8_t leds) {
|
||||
}
|
||||
|
||||
void KeyboardController::updateLEDS() {
|
||||
println("KBD: Update LEDS", leds_.byte, HEX);
|
||||
if (processing_new_data_) {
|
||||
println(" Update defered");
|
||||
update_leds_ = true;
|
||||
return; // defer until later
|
||||
}
|
||||
|
||||
// Now lets tell keyboard new state.
|
||||
static uint8_t keyboard_keys_report[1] = {0};
|
||||
setup_t keys_setup;
|
||||
keyboard_keys_report[0] = leds_.byte;
|
||||
queue_Data_Transfer(datapipe, report, 8, this);
|
||||
mk_setup(keys_setup, 0x21, 9, 0x200, 0, sizeof(keyboard_keys_report)); // hopefully this sets leds
|
||||
queue_Control_Transfer(device, &keys_setup, keyboard_keys_report, this);
|
||||
|
||||
update_leds_ = false;
|
||||
mk_setup(setup, 0x21, 9, 0x200, 0, sizeof(leds_.byte)); // hopefully this sets leds
|
||||
queue_Control_Transfer(device, &setup, &leds_.byte, this);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user