adafruit / Adafruit_TinyUSB_Arduino

Arduino library for TinyUSB
MIT License
450 stars 120 forks source link

Mouse movement issue #368

Open FBMNBAWA opened 5 months ago

FBMNBAWA commented 5 months ago

Operating System

Windows 10

Arduino IDE version

2.2.1

Board

rp2040

ArduinoCore version

All versions

TinyUSB Library version

All versions

Sketch as ATTACHED TXT

/***** Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!

MIT license, check LICENSE for more information Copyright (c) 2023 Bill Binko for Adafruit Industries Based on tremor_filter example by Thach Ha All text above, and the splash screen below must be included in any redistribution *****/

/* This example demonstrates use of both device and host, where

/* Example sketch receive mouse report from host interface (from e.g consumer mouse)

// USBHost is defined in usbh_helper.h

include "usbh_helper.h"

// HID report descriptor using TinyUSB's template // Single Report (no ID) descriptor uint8_t const desc_hid_report[] = { TUD_HID_REPORT_DESC_MOUSE() };

// USB HID object. For ESP32 these values cannot be changed after this declaration // desc report, desc len, protocol, interval, use out endpoint Adafruit_USBD_HID usb_hid(desc_hid_report, sizeof(desc_hid_report), HID_ITF_PROTOCOL_MOUSE, 2, false);

hid_mouse_report_t filtered_report1;

/* Adjustable parameters for the log_filter() method.

void setup() { Serial.begin(115200); Serial1.begin(115200); usb_hid.begin();

if defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421

// init host stack on controller (rhport) 1 // For rp2040: this is called in core1's setup1() USBHost.begin(1);

endif

//while ( !Serial ) delay(10); // wait for native usb Serial.println("ATMakers Logarithm Tremor Filter Example"); }

if defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421

//--------------------------------------------------------------------+ // Using Host shield MAX3421E controller //--------------------------------------------------------------------+

void loop() { USBHost.task(); Serial.flush();

}

elif defined(ARDUINO_ARCH_RP2040)

//--------------------------------------------------------------------+ // For RP2040 use both core0 for device stack, core1 for host stack //--------------------------------------------------------------------+

void loop() { Serial.flush(); USBHost.task(); Serial.flush(); if(usb_hid.ready()){ if(Serial1.available()){

}

} }

//------------- Core1 -------------// void setup1() { // configure pio-usb: defined in usbh_helper.h rp2040_configure_pio_usb();

// run host stack on controller (rhport) 1 // Note: For rp2040 pico-pio-usb, calling USBHost.begin() on core1 will have most of the // host bit-banging processing works done in core1 to free up core0 for other works USBHost.begin(1); }

void loop1() { USBHost.task(); }

endif

//--------------------------------------------------------------------+ // TinyUSB Host callbacks //--------------------------------------------------------------------+ extern "C" {

// Invoked when device with hid interface is mounted // Report descriptor is also available for use. // tuh_hid_parse_report_descriptor() can be used to parse common/simple enough // descriptor. Note: if report descriptor length > CFG_TUH_ENUMERATION_BUFSIZE, // it will be skipped therefore report_desc = NULL, desc_len = 0 void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const *desc_report, uint16_t desc_len) { (void) desc_report; (void) desc_len; uint16_t vid, pid; tuh_vid_pid_get(dev_addr, &vid, &pid);

Serial.printf("HID device address = %d, instance = %d is mounted\r\n", dev_addr, instance); Serial.printf("VID = %04x, PID = %04x\r\n", vid, pid);

uint8_t const itf_protocol = tuh_hid_interface_protocol(dev_addr, instance); if (itf_protocol == HID_ITF_PROTOCOL_MOUSE) { Serial.printf("HID Mouse\r\n"); if (!tuh_hid_receive_report(dev_addr, instance)) { Serial.printf("Error: cannot request to receive report\r\n"); } } }

// Invoked when device with hid interface is un-mounted void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t instance) { Serial.printf("HID device address = %d, instance = %d is unmounted\r\n", dev_addr, instance); }

// Invoked when received report from device via interrupt endpoint void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t const report, uint16_t len) { filter_report((hid_mouse_report_t const ) report);

// continue to request to receive report if (!tuh_hid_receive_report(dev_addr, instance)) { Serial.printf("Error: cannot request to receive report\r\n"); } }

} // extern C

//--------------------------------------------------------------------+ // Low pass filter Functions //--------------------------------------------------------------------+

/*

/*

}

Compiled Log as ATTACHED TXT

.

What happened ?

I inserted a serial port chip into Serial1 port and used the Serial1available() code in loop. When I inserted the mouse into the rp2040 board and moved it, I stopped the mouse movement but it still moved on its own. In the void filter, I_ Report (hid_mouseReport_t const * report) {} I wrote the output under this function and found that it would receive messages from the mouse, but the mouse did not do so. I am using a G502 mouse

How to reproduce ?

.

Debug Log

No response

Screenshots

No response

FBMNBAWA commented 5 months ago

In short, even after I stop moving the mouse, the mouse still moves, and the scroll wheel does the same

FBMNBAWA commented 5 months ago

That mouse has a return rate of 1000

hathach commented 4 months ago

please edit your 1st post, to attached sketch as txt file instead.