mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
hidbus: Updated HidbusJoyPollingMode.
This commit is contained in:
parent
141f1b6e5d
commit
d4b3b1e90f
@ -19,9 +19,9 @@ typedef enum {
|
|||||||
|
|
||||||
/// JoyPollingMode
|
/// JoyPollingMode
|
||||||
typedef enum {
|
typedef enum {
|
||||||
HidbusJoyPollingMode_JoyDisableSixAxisPollingData = 0, ///< JoyDisableSixAxisPollingData
|
HidbusJoyPollingMode_SixAxisSensorDisable = 0, ///< SixAxisSensorDisable
|
||||||
HidbusJoyPollingMode_JoyEnableSixAxisPollingData = 1, ///< JoyEnableSixAxisPollingData
|
HidbusJoyPollingMode_SixAxisSensorEnable = 1, ///< JoyEnableSixAxisPollingData
|
||||||
HidbusJoyPollingMode_JoyButtonOnlyPollingData = 2, ///< [6.0.0+] JoyButtonOnlyPollingData
|
HidbusJoyPollingMode_ButtonOnly = 2, ///< [6.0.0+] ButtonOnly
|
||||||
} HidbusJoyPollingMode;
|
} HidbusJoyPollingMode;
|
||||||
|
|
||||||
/// BusHandle
|
/// BusHandle
|
||||||
|
@ -84,7 +84,7 @@ Result ringconCreate(RingCon *c, HidNpadIdType id) {
|
|||||||
if (R_SUCCEEDED(rc)) c->bus_initialized = true;
|
if (R_SUCCEEDED(rc)) c->bus_initialized = true;
|
||||||
|
|
||||||
if (R_SUCCEEDED(rc)) rc = hidbusEnableExternalDevice(c->handle, true, 0x20);
|
if (R_SUCCEEDED(rc)) rc = hidbusEnableExternalDevice(c->handle, true, 0x20);
|
||||||
if (R_SUCCEEDED(rc)) rc = hidbusEnableJoyPollingReceiveMode(c->handle, &cmd, sizeof(cmd), c->workbuf, c->workbuf_size, HidbusJoyPollingMode_JoyEnableSixAxisPollingData);
|
if (R_SUCCEEDED(rc)) rc = hidbusEnableJoyPollingReceiveMode(c->handle, &cmd, sizeof(cmd), c->workbuf, c->workbuf_size, HidbusJoyPollingMode_SixAxisSensorEnable);
|
||||||
|
|
||||||
if (R_SUCCEEDED(rc)) rc = _ringconSetup(c);
|
if (R_SUCCEEDED(rc)) rc = _ringconSetup(c);
|
||||||
|
|
||||||
|
@ -453,13 +453,13 @@ Result hidbusGetJoyPollingReceivedData(HidbusBusHandle handle, HidbusJoyPollingR
|
|||||||
HidbusDataAccessorHeader *accessor_header;
|
HidbusDataAccessorHeader *accessor_header;
|
||||||
|
|
||||||
HidbusJoyPollingMode polling_mode = _hidbusGetStatusManagerEntryPollingMode(index);
|
HidbusJoyPollingMode polling_mode = _hidbusGetStatusManagerEntryPollingMode(index);
|
||||||
if (polling_mode == HidbusJoyPollingMode_JoyDisableSixAxisPollingData) {
|
if (polling_mode == HidbusJoyPollingMode_SixAxisSensorDisable) {
|
||||||
accessor_header = &joydisable_accessor->hdr;
|
accessor_header = &joydisable_accessor->hdr;
|
||||||
}
|
}
|
||||||
else if (polling_mode == HidbusJoyPollingMode_JoyEnableSixAxisPollingData) {
|
else if (polling_mode == HidbusJoyPollingMode_SixAxisSensorEnable) {
|
||||||
accessor_header = &joyenable_accessor->hdr;
|
accessor_header = &joyenable_accessor->hdr;
|
||||||
}
|
}
|
||||||
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_JoyButtonOnlyPollingData) {
|
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_ButtonOnly) {
|
||||||
accessor_header = &joybutton_accessor->hdr;
|
accessor_header = &joybutton_accessor->hdr;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -477,13 +477,13 @@ Result hidbusGetJoyPollingReceivedData(HidbusBusHandle handle, HidbusJoyPollingR
|
|||||||
HidbusJoyButtonOnlyPollingDataAccessorEntryData joybutton[0xa];
|
HidbusJoyButtonOnlyPollingDataAccessorEntryData joybutton[0xa];
|
||||||
} tmp_entries;
|
} tmp_entries;
|
||||||
|
|
||||||
if (polling_mode == HidbusJoyPollingMode_JoyDisableSixAxisPollingData) {
|
if (polling_mode == HidbusJoyPollingMode_SixAxisSensorDisable) {
|
||||||
memset(tmp_entries.joydisable, 0, sizeof(tmp_entries.joydisable));
|
memset(tmp_entries.joydisable, 0, sizeof(tmp_entries.joydisable));
|
||||||
}
|
}
|
||||||
else if (polling_mode == HidbusJoyPollingMode_JoyEnableSixAxisPollingData) {
|
else if (polling_mode == HidbusJoyPollingMode_SixAxisSensorEnable) {
|
||||||
memset(tmp_entries.joyenable, 0, sizeof(tmp_entries.joyenable));
|
memset(tmp_entries.joyenable, 0, sizeof(tmp_entries.joyenable));
|
||||||
}
|
}
|
||||||
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_JoyButtonOnlyPollingData) {
|
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_ButtonOnly) {
|
||||||
memset(tmp_entries.joybutton, 0, sizeof(tmp_entries.joybutton));
|
memset(tmp_entries.joybutton, 0, sizeof(tmp_entries.joybutton));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -492,7 +492,7 @@ Result hidbusGetJoyPollingReceivedData(HidbusBusHandle handle, HidbusJoyPollingR
|
|||||||
|
|
||||||
u64 timestamp0=0, timestamp1=0;
|
u64 timestamp0=0, timestamp1=0;
|
||||||
bool retry=false;
|
bool retry=false;
|
||||||
if (polling_mode == HidbusJoyPollingMode_JoyDisableSixAxisPollingData) {
|
if (polling_mode == HidbusJoyPollingMode_SixAxisSensorDisable) {
|
||||||
timestamp0 = atomic_load_explicit(&joydisable_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
timestamp0 = atomic_load_explicit(&joydisable_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
||||||
memcpy(&tmp_entries.joydisable[newcount-i-1], &joydisable_accessor->entries[entrypos].data, sizeof(HidbusJoyDisableSixAxisPollingDataAccessorEntryData));
|
memcpy(&tmp_entries.joydisable[newcount-i-1], &joydisable_accessor->entries[entrypos].data, sizeof(HidbusJoyDisableSixAxisPollingDataAccessorEntryData));
|
||||||
timestamp1 = atomic_load_explicit(&joydisable_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
timestamp1 = atomic_load_explicit(&joydisable_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
||||||
@ -500,7 +500,7 @@ Result hidbusGetJoyPollingReceivedData(HidbusBusHandle handle, HidbusJoyPollingR
|
|||||||
if (timestamp0 != timestamp1 || (i>0 && joydisable_accessor->entries[entrypos].data.timestamp - tmp_entries.joydisable[newcount-i].timestamp != 1))
|
if (timestamp0 != timestamp1 || (i>0 && joydisable_accessor->entries[entrypos].data.timestamp - tmp_entries.joydisable[newcount-i].timestamp != 1))
|
||||||
retry=true;
|
retry=true;
|
||||||
}
|
}
|
||||||
else if (polling_mode == HidbusJoyPollingMode_JoyEnableSixAxisPollingData) {
|
else if (polling_mode == HidbusJoyPollingMode_SixAxisSensorEnable) {
|
||||||
timestamp0 = atomic_load_explicit(&joyenable_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
timestamp0 = atomic_load_explicit(&joyenable_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
||||||
memcpy(&tmp_entries.joyenable[newcount-i-1], &joyenable_accessor->entries[entrypos].data, sizeof(HidbusJoyEnableSixAxisPollingDataAccessorEntryData));
|
memcpy(&tmp_entries.joyenable[newcount-i-1], &joyenable_accessor->entries[entrypos].data, sizeof(HidbusJoyEnableSixAxisPollingDataAccessorEntryData));
|
||||||
timestamp1 = atomic_load_explicit(&joyenable_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
timestamp1 = atomic_load_explicit(&joyenable_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
||||||
@ -508,7 +508,7 @@ Result hidbusGetJoyPollingReceivedData(HidbusBusHandle handle, HidbusJoyPollingR
|
|||||||
if (timestamp0 != timestamp1 || (i>0 && joyenable_accessor->entries[entrypos].data.timestamp - tmp_entries.joyenable[newcount-i].timestamp != 1))
|
if (timestamp0 != timestamp1 || (i>0 && joyenable_accessor->entries[entrypos].data.timestamp - tmp_entries.joyenable[newcount-i].timestamp != 1))
|
||||||
retry=true;
|
retry=true;
|
||||||
}
|
}
|
||||||
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_JoyButtonOnlyPollingData) {
|
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_ButtonOnly) {
|
||||||
timestamp0 = atomic_load_explicit(&joybutton_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
timestamp0 = atomic_load_explicit(&joybutton_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
||||||
memcpy(&tmp_entries.joybutton[newcount-i-1], &joybutton_accessor->entries[entrypos].data, sizeof(HidbusJoyButtonOnlyPollingDataAccessorEntryData));
|
memcpy(&tmp_entries.joybutton[newcount-i-1], &joybutton_accessor->entries[entrypos].data, sizeof(HidbusJoyButtonOnlyPollingDataAccessorEntryData));
|
||||||
timestamp1 = atomic_load_explicit(&joybutton_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
timestamp1 = atomic_load_explicit(&joybutton_accessor->entries[entrypos].timestamp, memory_order_acquire);
|
||||||
@ -528,13 +528,13 @@ Result hidbusGetJoyPollingReceivedData(HidbusBusHandle handle, HidbusJoyPollingR
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool dataready=false;
|
bool dataready=false;
|
||||||
if (polling_mode == HidbusJoyPollingMode_JoyDisableSixAxisPollingData) {
|
if (polling_mode == HidbusJoyPollingMode_SixAxisSensorDisable) {
|
||||||
dataready = tmp_entries.joydisable[count-1].timestamp != 0;
|
dataready = tmp_entries.joydisable[count-1].timestamp != 0;
|
||||||
}
|
}
|
||||||
else if (polling_mode == HidbusJoyPollingMode_JoyEnableSixAxisPollingData) {
|
else if (polling_mode == HidbusJoyPollingMode_SixAxisSensorEnable) {
|
||||||
dataready = tmp_entries.joyenable[count-1].timestamp != 0;
|
dataready = tmp_entries.joyenable[count-1].timestamp != 0;
|
||||||
}
|
}
|
||||||
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_JoyButtonOnlyPollingData) {
|
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_ButtonOnly) {
|
||||||
dataready = tmp_entries.joybutton[count-1].timestamp != 0;
|
dataready = tmp_entries.joybutton[count-1].timestamp != 0;
|
||||||
}
|
}
|
||||||
if (!dataready) rc = MAKERESULT(218, 7);
|
if (!dataready) rc = MAKERESULT(218, 7);
|
||||||
@ -544,21 +544,21 @@ Result hidbusGetJoyPollingReceivedData(HidbusBusHandle handle, HidbusJoyPollingR
|
|||||||
for (s32 i=0; i<count; i++) {
|
for (s32 i=0; i<count; i++) {
|
||||||
u8 size=0;
|
u8 size=0;
|
||||||
|
|
||||||
if (polling_mode == HidbusJoyPollingMode_JoyDisableSixAxisPollingData) {
|
if (polling_mode == HidbusJoyPollingMode_SixAxisSensorDisable) {
|
||||||
size = tmp_entries.joydisable[i].size;
|
size = tmp_entries.joydisable[i].size;
|
||||||
if (size > sizeof(tmp_entries.joydisable[i].data)) return MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen);
|
if (size > sizeof(tmp_entries.joydisable[i].data)) return MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen);
|
||||||
memcpy(recv_data[i].data, tmp_entries.joydisable[i].data, size);
|
memcpy(recv_data[i].data, tmp_entries.joydisable[i].data, size);
|
||||||
recv_data[i].size = size;
|
recv_data[i].size = size;
|
||||||
recv_data[i].timestamp = tmp_entries.joydisable[i].timestamp;
|
recv_data[i].timestamp = tmp_entries.joydisable[i].timestamp;
|
||||||
}
|
}
|
||||||
else if (polling_mode == HidbusJoyPollingMode_JoyEnableSixAxisPollingData) {
|
else if (polling_mode == HidbusJoyPollingMode_SixAxisSensorEnable) {
|
||||||
size = tmp_entries.joyenable[i].size;
|
size = tmp_entries.joyenable[i].size;
|
||||||
if (size > sizeof(tmp_entries.joyenable[i].data)) return MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen);
|
if (size > sizeof(tmp_entries.joyenable[i].data)) return MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen);
|
||||||
memcpy(recv_data[i].data, tmp_entries.joyenable[i].data, size);
|
memcpy(recv_data[i].data, tmp_entries.joyenable[i].data, size);
|
||||||
recv_data[i].size = size;
|
recv_data[i].size = size;
|
||||||
recv_data[i].timestamp = tmp_entries.joyenable[i].timestamp;
|
recv_data[i].timestamp = tmp_entries.joyenable[i].timestamp;
|
||||||
}
|
}
|
||||||
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_JoyButtonOnlyPollingData) {
|
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_ButtonOnly) {
|
||||||
size = tmp_entries.joybutton[i].size;
|
size = tmp_entries.joybutton[i].size;
|
||||||
if (size > sizeof(tmp_entries.joybutton[i].data)) return MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen);
|
if (size > sizeof(tmp_entries.joybutton[i].data)) return MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen);
|
||||||
memcpy(recv_data[i].data, tmp_entries.joybutton[i].data, size);
|
memcpy(recv_data[i].data, tmp_entries.joybutton[i].data, size);
|
||||||
|
Loading…
Reference in New Issue
Block a user