hidbus: Updated structs/enums.

This commit is contained in:
yellows8 2020-11-30 12:10:46 -05:00 committed by fincs
parent 5aa8986505
commit 3a11e1d309
No known key found for this signature in database
GPG Key ID: 62C7609ADA219C60
4 changed files with 71 additions and 71 deletions

View File

@ -49,7 +49,7 @@ typedef struct {
/// Polling data extracted from \ref HidbusJoyPollingReceivedData. /// Polling data extracted from \ref HidbusJoyPollingReceivedData.
typedef struct { typedef struct {
s16 data; ///< Sensor state data. s16 data; ///< Sensor state data.
u64 timestamp; ///< Sample timestamp. u64 sampling_number; ///< SamplingNumber
} RingConPollingData; } RingConPollingData;
/// Ring-Con state object. /// Ring-Con state object.
@ -58,7 +58,7 @@ typedef struct {
HidbusBusHandle handle; HidbusBusHandle handle;
void* workbuf; void* workbuf;
size_t workbuf_size; size_t workbuf_size;
u64 polling_last_timestamp; u64 polling_last_sampling_number;
u32 error_flags; u32 error_flags;
u64 id_l, id_h; u64 id_l, id_h;

View File

@ -12,9 +12,9 @@
/// BusType /// BusType
typedef enum { typedef enum {
HidbusBusType_JoyLeftRail = 0, ///< JoyLeftRail HidbusBusType_LeftJoyRail = 0, ///< LeftJoyRail
HidbusBusType_JoyRightRail = 1, ///< JoyRightRail HidbusBusType_RightJoyRail = 1, ///< RightJoyRail
HidbusBusType_LarkRightRail = 2, ///< [6.0.0+] LarkRightRail (for microphone). HidbusBusType_RightLarkRail = 2, ///< [6.0.0+] RightLarkRail (for microphone).
} HidbusBusType; } HidbusBusType;
/// JoyPollingMode /// JoyPollingMode
@ -36,8 +36,8 @@ typedef struct {
/// JoyPollingReceivedData /// JoyPollingReceivedData
typedef struct { typedef struct {
u8 data[0x30]; ///< Data. u8 data[0x30]; ///< Data.
u64 size; ///< Size of data. u64 out_size; ///< Size of data.
u64 timestamp; ///< Timestamp. u64 sampling_number; ///< SamplingNumber
} HidbusJoyPollingReceivedData; } HidbusJoyPollingReceivedData;
/// HidbusDataAccessorHeader /// HidbusDataAccessorHeader
@ -52,42 +52,42 @@ typedef struct {
/// HidbusJoyDisableSixAxisPollingDataAccessorEntryData /// HidbusJoyDisableSixAxisPollingDataAccessorEntryData
typedef struct { typedef struct {
u8 data[0x26]; ///< Data. u8 data[0x26]; ///< Data.
u8 size; ///< Size of data. u8 out_size; ///< Size of data.
u8 pad; ///< Padding. u8 pad; ///< Padding.
u64 timestamp; ///< Timestamp. u64 sampling_number; ///< SamplingNumber
} HidbusJoyDisableSixAxisPollingDataAccessorEntryData; } HidbusJoyDisableSixAxisPollingDataAccessorEntryData;
/// HidbusJoyDisableSixAxisPollingDataAccessorEntry /// HidbusJoyDisableSixAxisPollingDataAccessorEntry
typedef struct { typedef struct {
u64 timestamp; ///< Timestamp. u64 sampling_number; ///< SamplingNumber
HidbusJoyDisableSixAxisPollingDataAccessorEntryData data; ///< \ref HidbusJoyDisableSixAxisPollingDataAccessorEntryData HidbusJoyDisableSixAxisPollingDataAccessorEntryData data; ///< \ref HidbusJoyDisableSixAxisPollingDataAccessorEntryData
} HidbusJoyDisableSixAxisPollingDataAccessorEntry; } HidbusJoyDisableSixAxisPollingDataAccessorEntry;
/// HidbusJoyEnableSixAxisPollingDataAccessorEntryData /// HidbusJoyEnableSixAxisPollingDataAccessorEntryData
typedef struct { typedef struct {
u8 data[0x8]; ///< Data. u8 data[0x8]; ///< Data.
u8 size; ///< Size of data. u8 out_size; ///< Size of data.
u8 pad[7]; ///< Padding. u8 pad[7]; ///< Padding.
u64 timestamp; ///< Timestamp. u64 sampling_number; ///< SamplingNumber
} HidbusJoyEnableSixAxisPollingDataAccessorEntryData; } HidbusJoyEnableSixAxisPollingDataAccessorEntryData;
/// HidbusJoyEnableSixAxisPollingDataAccessorEntry /// HidbusJoyEnableSixAxisPollingDataAccessorEntry
typedef struct { typedef struct {
u64 timestamp; ///< Timestamp. u64 sampling_number; ///< SamplingNumber
HidbusJoyEnableSixAxisPollingDataAccessorEntryData data; ///< \ref HidbusJoyEnableSixAxisPollingDataAccessorEntryData HidbusJoyEnableSixAxisPollingDataAccessorEntryData data; ///< \ref HidbusJoyEnableSixAxisPollingDataAccessorEntryData
} HidbusJoyEnableSixAxisPollingDataAccessorEntry; } HidbusJoyEnableSixAxisPollingDataAccessorEntry;
/// HidbusJoyButtonOnlyPollingDataAccessorEntryData /// HidbusJoyButtonOnlyPollingDataAccessorEntryData
typedef struct { typedef struct {
u8 data[0x2c]; ///< Data. u8 data[0x2c]; ///< Data.
u8 size; ///< Size of data. u8 out_size; ///< Size of data.
u8 pad[3]; ///< Padding. u8 pad[3]; ///< Padding.
u64 timestamp; ///< Timestamp. u64 sampling_number; ///< SamplingNumber
} HidbusJoyButtonOnlyPollingDataAccessorEntryData; } HidbusJoyButtonOnlyPollingDataAccessorEntryData;
/// HidbusJoyButtonOnlyPollingDataAccessorEntry /// HidbusJoyButtonOnlyPollingDataAccessorEntry
typedef struct { typedef struct {
u64 timestamp; ///< Timestamp. u64 sampling_number; ///< SamplingNumber
HidbusJoyButtonOnlyPollingDataAccessorEntryData data; ///< \ref HidbusJoyEnableSixAxisPollingDataAccessorEntryData HidbusJoyButtonOnlyPollingDataAccessorEntryData data; ///< \ref HidbusJoyEnableSixAxisPollingDataAccessorEntryData
} HidbusJoyButtonOnlyPollingDataAccessorEntry; } HidbusJoyButtonOnlyPollingDataAccessorEntry;
@ -111,13 +111,13 @@ typedef struct {
/// Common data for HidbusStatusManagerEntry*. /// Common data for HidbusStatusManagerEntry*.
typedef struct { typedef struct {
u8 flag_x0; ///< Flag. u8 is_connected; ///< IsConnected
u8 pad[3]; ///< Padding. u8 pad[3]; ///< Padding.
Result res; ///< Result. Result is_connected_result; ///< IsConnectedResult
u8 device_enabled; ///< Flag indicating whether a device is enabled (\ref hidbusEnableExternalDevice). u8 is_enabled; ///< Flag indicating whether a device is enabled (\ref hidbusEnableExternalDevice).
u8 is_valid; ///< Flag indicating whether this entry is valid. u8 is_in_focus; ///< Flag indicating whether this entry is valid.
u8 polling_enabled; ///< Flag indicating whether polling is enabled (\ref hidbusEnableJoyPollingReceiveMode). u8 is_polling_mode; ///< Flag indicating whether polling is enabled (\ref hidbusEnableJoyPollingReceiveMode).
u8 unk_xb; ///< Unknown / padding? u8 reserved; ///< Reserved
u32 polling_mode; ///< \ref HidbusJoyPollingMode u32 polling_mode; ///< \ref HidbusJoyPollingMode
} HidbusStatusManagerEntryCommon; } HidbusStatusManagerEntryCommon;

View File

@ -70,9 +70,9 @@ Result ringconCreate(RingCon *c, HidNpadIdType id) {
if (R_SUCCEEDED(rc)) { if (R_SUCCEEDED(rc)) {
if (style_set & HidNpadStyleTag_NpadJoyLeft) if (style_set & HidNpadStyleTag_NpadJoyLeft)
bus_type = HidbusBusType_JoyLeftRail; bus_type = HidbusBusType_LeftJoyRail;
else if (style_set & (HidNpadStyleTag_NpadJoyRight | HidNpadStyleTag_NpadJoyDual)) else if (style_set & (HidNpadStyleTag_NpadJoyRight | HidNpadStyleTag_NpadJoyDual))
bus_type = HidbusBusType_JoyRightRail; bus_type = HidbusBusType_RightJoyRail;
else else
rc = MAKERESULT(Module_Libnx, LibnxError_BadInput); rc = MAKERESULT(Module_Libnx, LibnxError_BadInput);
} }
@ -265,10 +265,10 @@ Result ringconGetPollingData(RingCon *c, RingConPollingData *out, s32 count, s32
rc = hidbusGetJoyPollingReceivedData(c->handle, recv_data, 0x9); rc = hidbusGetJoyPollingReceivedData(c->handle, recv_data, 0x9);
if (R_SUCCEEDED(rc)) { if (R_SUCCEEDED(rc)) {
u64 tmp = recv_data[0].timestamp - c->polling_last_timestamp; u64 tmp = recv_data[0].sampling_number - c->polling_last_sampling_number;
if (tmp > 0x9) tmp = 0x9; if (tmp > 0x9) tmp = 0x9;
if (count > tmp) count = tmp; if (count > tmp) count = tmp;
c->polling_last_timestamp = recv_data[0].timestamp; c->polling_last_sampling_number = recv_data[0].sampling_number;
for (s32 i=0; i<count; i++) { for (s32 i=0; i<count; i++) {
struct { struct {
@ -278,10 +278,10 @@ Result ringconGetPollingData(RingCon *c, RingConPollingData *out, s32 count, s32
u8 pad2[0x2]; u8 pad2[0x2];
} *reply = (void*)recv_data[i].data; } *reply = (void*)recv_data[i].data;
if (recv_data[i].size != sizeof(*reply) || reply->status != 0) return MAKERESULT(218, 7); if (recv_data[i].out_size != sizeof(*reply) || reply->status != 0) return MAKERESULT(218, 7);
out[i].data = reply->data; out[i].data = reply->data;
out[i].timestamp = recv_data[i].timestamp; out[i].sampling_number = recv_data[i].sampling_number;
} }
} }

View File

@ -180,24 +180,24 @@ static HidbusStatusManagerEntryCommon* _hidbusGetStatusManagerEntryCommon(u8 int
return &((HidbusStatusManager*)hidbusGetSharedmemAddr())->entries[internal_index].common; return &((HidbusStatusManager*)hidbusGetSharedmemAddr())->entries[internal_index].common;
} }
static bool _hidbusGetStatusManagerEntryFlag_x0(u8 internal_index) { static bool _hidbusGetStatusManagerEntryIsConnected(u8 internal_index) {
return atomic_load_explicit(&_hidbusGetStatusManagerEntryCommon(internal_index)->flag_x0, memory_order_acquire) & 1; return atomic_load_explicit(&_hidbusGetStatusManagerEntryCommon(internal_index)->is_connected, memory_order_acquire) & 1;
} }
static Result _hidbusGetStatusManagerEntryRes(u8 internal_index) { static Result _hidbusGetStatusManagerEntryIsConnectedResult(u8 internal_index) {
return _hidbusGetStatusManagerEntryCommon(internal_index)->res; return _hidbusGetStatusManagerEntryCommon(internal_index)->is_connected_result;
} }
static bool _hidbusGetStatusManagerEntryDeviceEnabled(u8 internal_index) { static bool _hidbusGetStatusManagerEntryDeviceIsEnabled(u8 internal_index) {
return atomic_load_explicit(&_hidbusGetStatusManagerEntryCommon(internal_index)->device_enabled, memory_order_acquire) & 1; return atomic_load_explicit(&_hidbusGetStatusManagerEntryCommon(internal_index)->is_enabled, memory_order_acquire) & 1;
} }
static bool _hidbusGetStatusManagerEntryIsValid(u8 internal_index) { static bool _hidbusGetStatusManagerEntryIsInFocus(u8 internal_index) {
return atomic_load_explicit(&_hidbusGetStatusManagerEntryCommon(internal_index)->is_valid, memory_order_acquire) & 1; return atomic_load_explicit(&_hidbusGetStatusManagerEntryCommon(internal_index)->is_in_focus, memory_order_acquire) & 1;
} }
static bool _hidbusGetStatusManagerEntryPollingEnabled(u8 internal_index) { static bool _hidbusGetStatusManagerEntryIsPollingMode(u8 internal_index) {
return atomic_load_explicit(&_hidbusGetStatusManagerEntryCommon(internal_index)->polling_enabled, memory_order_acquire) & 1; return atomic_load_explicit(&_hidbusGetStatusManagerEntryCommon(internal_index)->is_polling_mode, memory_order_acquire) & 1;
} }
static HidbusJoyPollingMode _hidbusGetStatusManagerEntryPollingMode(u8 internal_index) { static HidbusJoyPollingMode _hidbusGetStatusManagerEntryPollingMode(u8 internal_index) {
@ -299,10 +299,10 @@ Result hidbusEnableExternalDevice(HidbusBusHandle handle, bool flag, u32 device_
mutexLock(&entry->mutex); mutexLock(&entry->mutex);
if (memcmp(&entry->handle, &handle, sizeof(handle))!=0) rc = MAKERESULT(218, 4); if (memcmp(&entry->handle, &handle, sizeof(handle))!=0) rc = MAKERESULT(218, 4);
if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryIsValid(index)) rc = MAKERESULT(218, 2); if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryIsInFocus(index)) rc = MAKERESULT(218, 2);
if (R_SUCCEEDED(rc)) rc = _hidbusGetStatusManagerEntryRes(index); if (R_SUCCEEDED(rc)) rc = _hidbusGetStatusManagerEntryIsConnectedResult(index);
if (R_SUCCEEDED(rc)) { if (R_SUCCEEDED(rc)) {
if (!_hidbusGetStatusManagerEntryFlag_x0(index) && !flag) rc = MAKERESULT(218, 5); if (!_hidbusGetStatusManagerEntryIsConnected(index) && !flag) rc = MAKERESULT(218, 5);
} }
if (R_SUCCEEDED(rc)) rc = hidbusGetServiceSession(&srv); if (R_SUCCEEDED(rc)) rc = hidbusGetServiceSession(&srv);
@ -357,7 +357,7 @@ Result hidbusSendAndReceive(HidbusBusHandle handle, const void* inbuf, size_t in
mutexLock(&entry->mutex); mutexLock(&entry->mutex);
if (memcmp(&entry->handle, &handle, sizeof(handle))!=0) rc = MAKERESULT(218, 4); if (memcmp(&entry->handle, &handle, sizeof(handle))!=0) rc = MAKERESULT(218, 4);
if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryDeviceEnabled(index)) rc = MAKERESULT(218, 8); if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryDeviceIsEnabled(index)) rc = MAKERESULT(218, 8);
if (R_SUCCEEDED(rc)) rc = hidbusGetServiceSession(&srv); if (R_SUCCEEDED(rc)) rc = hidbusGetServiceSession(&srv);
@ -388,9 +388,9 @@ Result hidbusEnableJoyPollingReceiveMode(HidbusBusHandle handle, const void* inb
mutexLock(&entry->mutex); mutexLock(&entry->mutex);
if (memcmp(&entry->handle, &handle, sizeof(handle))!=0) rc = MAKERESULT(218, 4); if (memcmp(&entry->handle, &handle, sizeof(handle))!=0) rc = MAKERESULT(218, 4);
if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryDeviceEnabled(index)) rc = MAKERESULT(218, 8); if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryDeviceIsEnabled(index)) rc = MAKERESULT(218, 8);
if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryPollingEnabled(index)) { if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryIsPollingMode(index)) {
rc = hidbusGetServiceSession(&srv); rc = hidbusGetServiceSession(&srv);
if (R_SUCCEEDED(rc)) { if (R_SUCCEEDED(rc)) {
@ -416,7 +416,7 @@ Result hidbusDisableJoyPollingReceiveMode(HidbusBusHandle handle) {
mutexLock(&entry->mutex); mutexLock(&entry->mutex);
if (memcmp(&entry->handle, &handle, sizeof(handle))!=0) rc = MAKERESULT(218, 4); if (memcmp(&entry->handle, &handle, sizeof(handle))!=0) rc = MAKERESULT(218, 4);
if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryDeviceEnabled(index)) rc = MAKERESULT(218, 8); if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryDeviceIsEnabled(index)) rc = MAKERESULT(218, 8);
if (R_SUCCEEDED(rc)) rc = hidbusGetServiceSession(&srv); if (R_SUCCEEDED(rc)) rc = hidbusGetServiceSession(&srv);
@ -434,13 +434,13 @@ Result hidbusGetJoyPollingReceivedData(HidbusBusHandle handle, HidbusJoyPollingR
HidBusDeviceEntry *entry = &g_hidbusDevices[index]; HidBusDeviceEntry *entry = &g_hidbusDevices[index];
if (memcmp(&entry->handle, &handle, sizeof(handle))!=0) rc = MAKERESULT(218, 4); if (memcmp(&entry->handle, &handle, sizeof(handle))!=0) rc = MAKERESULT(218, 4);
if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryDeviceEnabled(index)) rc = MAKERESULT(218, 8); if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryDeviceIsEnabled(index)) rc = MAKERESULT(218, 8);
if (R_SUCCEEDED(rc)) rc = _hidbusGetStatusManagerEntryRes(index); if (R_SUCCEEDED(rc)) rc = _hidbusGetStatusManagerEntryIsConnectedResult(index);
if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryFlag_x0(index)) rc = MAKERESULT(218, 8); if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryIsConnected(index)) rc = MAKERESULT(218, 8);
if (R_SUCCEEDED(rc) && count >= 1) memset(recv_data, 0, sizeof(HidbusJoyPollingReceivedData)*count); if (R_SUCCEEDED(rc) && count >= 1) memset(recv_data, 0, sizeof(HidbusJoyPollingReceivedData)*count);
if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryPollingEnabled(index)) { if (R_SUCCEEDED(rc) && !_hidbusGetStatusManagerEntryIsPollingMode(index)) {
return 0; return 0;
} }
if (R_FAILED(rc)) return rc; if (R_FAILED(rc)) return rc;
@ -490,30 +490,30 @@ Result hidbusGetJoyPollingReceivedData(HidbusBusHandle handle, HidbusJoyPollingR
for (s32 i=0; i<newcount; i++) { for (s32 i=0; i<newcount; i++) {
s32 entrypos = (((latest_entry + 0xc) - newcount) + i) % 0xb; s32 entrypos = (((latest_entry + 0xc) - newcount) + i) % 0xb;
u64 timestamp0=0, timestamp1=0; u64 sampling_number0=0, sampling_number1=0;
bool retry=false; bool retry=false;
if (polling_mode == HidbusJoyPollingMode_SixAxisSensorDisable) { if (polling_mode == HidbusJoyPollingMode_SixAxisSensorDisable) {
timestamp0 = atomic_load_explicit(&joydisable_accessor->entries[entrypos].timestamp, memory_order_acquire); sampling_number0 = atomic_load_explicit(&joydisable_accessor->entries[entrypos].sampling_number, 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); sampling_number1 = atomic_load_explicit(&joydisable_accessor->entries[entrypos].sampling_number, memory_order_acquire);
if (timestamp0 != timestamp1 || (i>0 && joydisable_accessor->entries[entrypos].data.timestamp - tmp_entries.joydisable[newcount-i].timestamp != 1)) if (sampling_number0 != sampling_number1 || (i>0 && joydisable_accessor->entries[entrypos].data.sampling_number - tmp_entries.joydisable[newcount-i].sampling_number != 1))
retry=true; retry=true;
} }
else if (polling_mode == HidbusJoyPollingMode_SixAxisSensorEnable) { else if (polling_mode == HidbusJoyPollingMode_SixAxisSensorEnable) {
timestamp0 = atomic_load_explicit(&joyenable_accessor->entries[entrypos].timestamp, memory_order_acquire); sampling_number0 = atomic_load_explicit(&joyenable_accessor->entries[entrypos].sampling_number, 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); sampling_number1 = atomic_load_explicit(&joyenable_accessor->entries[entrypos].sampling_number, memory_order_acquire);
if (timestamp0 != timestamp1 || (i>0 && joyenable_accessor->entries[entrypos].data.timestamp - tmp_entries.joyenable[newcount-i].timestamp != 1)) if (sampling_number0 != sampling_number1 || (i>0 && joyenable_accessor->entries[entrypos].data.sampling_number - tmp_entries.joyenable[newcount-i].sampling_number != 1))
retry=true; retry=true;
} }
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_ButtonOnly) { else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_ButtonOnly) {
timestamp0 = atomic_load_explicit(&joybutton_accessor->entries[entrypos].timestamp, memory_order_acquire); sampling_number0 = atomic_load_explicit(&joybutton_accessor->entries[entrypos].sampling_number, 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); sampling_number1 = atomic_load_explicit(&joybutton_accessor->entries[entrypos].sampling_number, memory_order_acquire);
if (timestamp0 != timestamp1 || (i>0 && joybutton_accessor->entries[entrypos].data.timestamp - tmp_entries.joybutton[newcount-i].timestamp != 1)) if (sampling_number0 != sampling_number1 || (i>0 && joybutton_accessor->entries[entrypos].data.sampling_number - tmp_entries.joybutton[newcount-i].sampling_number != 1))
retry=true; retry=true;
} }
@ -529,13 +529,13 @@ Result hidbusGetJoyPollingReceivedData(HidbusBusHandle handle, HidbusJoyPollingR
bool dataready=false; bool dataready=false;
if (polling_mode == HidbusJoyPollingMode_SixAxisSensorDisable) { if (polling_mode == HidbusJoyPollingMode_SixAxisSensorDisable) {
dataready = tmp_entries.joydisable[count-1].timestamp != 0; dataready = tmp_entries.joydisable[count-1].sampling_number != 0;
} }
else if (polling_mode == HidbusJoyPollingMode_SixAxisSensorEnable) { else if (polling_mode == HidbusJoyPollingMode_SixAxisSensorEnable) {
dataready = tmp_entries.joyenable[count-1].timestamp != 0; dataready = tmp_entries.joyenable[count-1].sampling_number != 0;
} }
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_ButtonOnly) { else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_ButtonOnly) {
dataready = tmp_entries.joybutton[count-1].timestamp != 0; dataready = tmp_entries.joybutton[count-1].sampling_number != 0;
} }
if (!dataready) rc = MAKERESULT(218, 7); if (!dataready) rc = MAKERESULT(218, 7);
if (R_SUCCEEDED(rc)) rc = accessor_header->res; if (R_SUCCEEDED(rc)) rc = accessor_header->res;
@ -545,25 +545,25 @@ Result hidbusGetJoyPollingReceivedData(HidbusBusHandle handle, HidbusJoyPollingR
u8 size=0; u8 size=0;
if (polling_mode == HidbusJoyPollingMode_SixAxisSensorDisable) { if (polling_mode == HidbusJoyPollingMode_SixAxisSensorDisable) {
size = tmp_entries.joydisable[i].size; size = tmp_entries.joydisable[i].out_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].out_size = size;
recv_data[i].timestamp = tmp_entries.joydisable[i].timestamp; recv_data[i].sampling_number = tmp_entries.joydisable[i].sampling_number;
} }
else if (polling_mode == HidbusJoyPollingMode_SixAxisSensorEnable) { else if (polling_mode == HidbusJoyPollingMode_SixAxisSensorEnable) {
size = tmp_entries.joyenable[i].size; size = tmp_entries.joyenable[i].out_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].out_size = size;
recv_data[i].timestamp = tmp_entries.joyenable[i].timestamp; recv_data[i].sampling_number = tmp_entries.joyenable[i].sampling_number;
} }
else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_ButtonOnly) { else if (hosversionAtLeast(6,0,0) && polling_mode == HidbusJoyPollingMode_ButtonOnly) {
size = tmp_entries.joybutton[i].size; size = tmp_entries.joybutton[i].out_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);
recv_data[i].size = size; recv_data[i].out_size = size;
recv_data[i].timestamp = tmp_entries.joybutton[i].timestamp; recv_data[i].sampling_number = tmp_entries.joybutton[i].sampling_number;
} }
} }