1
0
mirror of https://github.com/whowechina/chu_pico.git synced 2025-02-20 20:11:06 +01:00

Firmware progress 70%, some HID part works

This commit is contained in:
whowechina 2023-09-05 22:15:17 +08:00
parent 0c58024de6
commit 1b77bea2ba
5 changed files with 49 additions and 25 deletions

View File

@ -29,19 +29,20 @@
{ uint64_t _t = time_us_64(); func; \
printf(#func ":%lld\n", time_us_64() - _t); }
struct {
uint16_t buttons;
uint8_t joy[6];
} hid_report;
struct __attribute__((packed)) {
uint16_t buttons; // 16 buttons; see JoystickButtons_t for bit mapping
uint8_t HAT; // HAT switch; one nibble w/ unused nibble
uint32_t axis; // slider touch data
uint8_t VendorSpec;
} hid_joy;
void report_usb_hid()
{
if (tud_hid_ready()) {
hid_report.joy[2] = 0;
hid_report.joy[3] = 64;
hid_report.joy[4] = 128;
hid_report.joy[5] = 192;
tud_hid_n_report(0x00, REPORT_ID_JOYSTICK, &hid_report, sizeof(hid_report));
hid_joy.buttons = 0;
hid_joy.HAT = 0;
hid_joy.VendorSpec = 0;
tud_hid_n_report(0x00, REPORT_ID_JOYSTICK, &hid_joy, sizeof(hid_joy));
}
}
@ -91,7 +92,6 @@ static void core0_loop()
while(1) {
tud_task();
hid_report.buttons = 0xcccc;
report_usb_hid();
slider_update();
air_update();
@ -102,9 +102,18 @@ static void core0_loop()
printf("Touch: %04x\n", touch);
old_touch = touch;
}
hid_joy.axis = 0;
for (int i = 0; i < 16; i++) {
bool k1 = slider_touched(i * 2);
bool k2 = slider_touched(i * 2 + 1);
if (k1) {
hid_joy.axis |= 1 << (30 - i * 2);
}
if (k2) {
hid_joy.axis |= 1 << (31 - i * 2);
}
uint8_t r = k1 ? 255 : 0;
uint8_t g = k2 ? 255 : 0;
if (k1 || k2) {
@ -112,7 +121,7 @@ static void core0_loop()
}
rgb_key_color(i, rgb32(r, g, g, false));
}
hid_joy.axis ^= 0x80808080; // some magic number from CrazyRedMachine
for (int i = 0; i < air_num(); i++) {
uint8_t v = air_value(i) << 2;
rgb_set_color(31 + i, rgb32(v, v, v, false));

View File

@ -51,8 +51,8 @@ tusb_desc_device_t desc_device_joy = {
.bDeviceProtocol = 0x00,
.bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE,
.idVendor = 0xCaff,
.idProduct = USB_PID,
.idVendor = 0x0f0d,
.idProduct = 0x4092,
.bcdDevice = 0x0100,
.iManufacturer = 0x01,
@ -130,7 +130,7 @@ uint8_t const* tud_descriptor_configuration_cb(uint8_t index) {
const char *string_desc_arr[] = {
(const char[]){0x09, 0x04}, // 0: is supported language is English (0x0409)
"WHowe" , // 1: Manufacturer
"Pico IIDX Controller", // 2: Product
"Chu Pico Controller", // 2: Product
"654321", // 3: Serials, should use chip ID
"Button 1",
"Button 2",

View File

@ -22,22 +22,37 @@ enum {
// Joystick Report Descriptor Template - Based off Drewol/rp2040-gamecon
// Button Map | X | Y
#define GAMECON_REPORT_DESC_JOYSTICK(...) \
HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), \
HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), \
HID_USAGE(HID_USAGE_DESKTOP_JOYSTICK), \
HID_COLLECTION(HID_COLLECTION_APPLICATION), \
__VA_ARGS__ HID_USAGE_PAGE(HID_USAGE_PAGE_BUTTON), HID_USAGE_MIN(1), \
HID_USAGE_MAX(13), \
HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), HID_REPORT_COUNT(13), \
HID_REPORT_SIZE(1), HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
HID_REPORT_COUNT(1), HID_REPORT_SIZE(16 - 13), /*Padding*/ \
__VA_ARGS__ HID_USAGE_PAGE(HID_USAGE_PAGE_BUTTON), \
HID_USAGE_MIN(1), HID_USAGE_MAX(16), \
HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), \
HID_REPORT_COUNT(16), HID_REPORT_SIZE(1), \
HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
HID_REPORT_COUNT(16 - 16), HID_REPORT_SIZE(1), /*Padding*/ \
HID_INPUT(HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE), \
HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_LOGICAL_MIN(0x00), \
HID_LOGICAL_MAX_N(0x00ff, 2), /* Below is Joystick/analog */ \
\
HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), \
HID_USAGE(HID_USAGE_DESKTOP_HAT_SWITCH), \
HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX(0xff), \
HID_REPORT_SIZE(8), HID_REPORT_COUNT(1), \
HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
\
HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), \
HID_USAGE(HID_USAGE_DESKTOP_X), HID_USAGE(HID_USAGE_DESKTOP_Y), \
HID_USAGE(HID_USAGE_DESKTOP_Z), HID_USAGE(HID_USAGE_DESKTOP_RX), \
HID_USAGE(HID_USAGE_DESKTOP_RY), HID_USAGE(HID_USAGE_DESKTOP_RZ), \
HID_REPORT_COUNT(6), HID_REPORT_SIZE(8), \
HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), HID_COLLECTION_END
HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX(0xff), /* Analog */ \
HID_REPORT_SIZE(8), HID_REPORT_COUNT(4), \
HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
\
HID_USAGE_PAGE_N(HID_USAGE_PAGE_VENDOR, 2), \
HID_USAGE(0), \
HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX(0xff), \
HID_REPORT_SIZE(8), HID_REPORT_COUNT(1), \
HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
\
HID_COLLECTION_END
// Light Map
#define GAMECON_REPORT_DESC_LIGHTS(...) \

BIN
firmware/test/chuniio.dll Normal file

Binary file not shown.

BIN
firmware/test/chunitest.exe Normal file

Binary file not shown.