mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 20:42:44 +02:00
hidbus: Updated structs/enums.
This commit is contained in:
parent
5aa8986505
commit
3a11e1d309
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user