mirror of
https://github.com/pumpitupdev/pumptools.git
synced 2025-02-17 10:58:36 +01:00
wip piuio add time measuring code
This commit is contained in:
parent
d9a96a818e
commit
a0b926eee5
@ -13,6 +13,7 @@
|
|||||||
#include "ptapi/io/piuio/util/lib.h"
|
#include "ptapi/io/piuio/util/lib.h"
|
||||||
|
|
||||||
#include "util/log.h"
|
#include "util/log.h"
|
||||||
|
#include "util/time.h"
|
||||||
|
|
||||||
static bool _patch_piuio_enumerate(bool real_exists);
|
static bool _patch_piuio_enumerate(bool real_exists);
|
||||||
static enum cnh_result _patch_piuio_open(void);
|
static enum cnh_result _patch_piuio_open(void);
|
||||||
@ -99,35 +100,68 @@ static enum cnh_result _patch_piuio_reset(void)
|
|||||||
return CNH_RESULT_SUCCESS;
|
return CNH_RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO cleanup code and hide measuring time behind feature flag, add this to
|
||||||
|
// all supported games + documentation for debugging purpose to detect lag issues
|
||||||
|
// (potentially with IO implementations)
|
||||||
|
static util_time_counter_t _patch_piuio_poll_timer_start;
|
||||||
|
static uint32_t _patch_piuio_poll_counter;
|
||||||
|
|
||||||
static enum cnh_result _patch_piuio_control_msg(int request_type, int request, int value, int index,
|
static enum cnh_result _patch_piuio_control_msg(int request_type, int request, int value, int index,
|
||||||
struct cnh_iobuf* buffer, int timeout)
|
struct cnh_iobuf* buffer, int timeout)
|
||||||
{
|
{
|
||||||
|
enum cnh_result result;
|
||||||
|
util_time_counter_t time_counter_start;
|
||||||
|
util_time_counter_t time_counter_delta;
|
||||||
|
double time_ms;
|
||||||
|
|
||||||
|
if (_patch_piuio_poll_timer_start == 0) {
|
||||||
|
_patch_piuio_poll_counter = 0;
|
||||||
|
_patch_piuio_poll_timer_start = util_time_get_counter();
|
||||||
|
} else if (util_time_get_elapsed_ms_double(util_time_get_counter() - _patch_piuio_poll_timer_start) >= 1000.0) {
|
||||||
|
log_debug("ctrl_msg refresh rate: %d hz", _patch_piuio_poll_counter);
|
||||||
|
_patch_piuio_poll_counter = 0;
|
||||||
|
_patch_piuio_poll_timer_start = util_time_get_counter();
|
||||||
|
}
|
||||||
|
|
||||||
|
time_counter_start = util_time_get_counter();
|
||||||
|
|
||||||
if (request_type == PIUIO_DRV_USB_CTRL_TYPE_IN && request == PIUIO_DRV_USB_CTRL_REQUEST) {
|
if (request_type == PIUIO_DRV_USB_CTRL_TYPE_IN && request == PIUIO_DRV_USB_CTRL_REQUEST) {
|
||||||
if (buffer->nbytes != PIUIO_DRV_BUFFER_SIZE) {
|
if (buffer->nbytes != PIUIO_DRV_BUFFER_SIZE) {
|
||||||
log_error("Invalid buffer size for ctrl in: %d", buffer->nbytes);
|
log_error("Invalid buffer size for ctrl in: %d", buffer->nbytes);
|
||||||
return CNH_RESULT_INVALID_PARAMETER;
|
result = CNH_RESULT_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
result = _patch_piuio_process_inputs(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _patch_piuio_process_inputs(buffer);
|
|
||||||
} else if (request_type == PIUIO_DRV_USB_CTRL_TYPE_OUT && request == PIUIO_DRV_USB_CTRL_REQUEST) {
|
} else if (request_type == PIUIO_DRV_USB_CTRL_TYPE_OUT && request == PIUIO_DRV_USB_CTRL_REQUEST) {
|
||||||
if (buffer->nbytes != PIUIO_DRV_BUFFER_SIZE) {
|
if (buffer->nbytes != PIUIO_DRV_BUFFER_SIZE) {
|
||||||
log_error("Invalid buffer size for ctrl out: %d", buffer->nbytes);
|
log_error("Invalid buffer size for ctrl out: %d", buffer->nbytes);
|
||||||
return CNH_RESULT_INVALID_PARAMETER;
|
result = CNH_RESULT_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
result = _patch_piuio_process_outputs(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _patch_piuio_process_outputs(buffer);
|
|
||||||
} else if (request_type == 0 && request == 0) {
|
} else if (request_type == 0 && request == 0) {
|
||||||
/* ITG 2/PIU Pro kernel hack */
|
/* ITG 2/PIU Pro kernel hack */
|
||||||
if (buffer->nbytes != PIUIO_DRV_BUFFER_SIZE * 4) {
|
if (buffer->nbytes != PIUIO_DRV_BUFFER_SIZE * 4) {
|
||||||
log_error("Invalid buffer size for kernel hack: %d", buffer->nbytes);
|
log_error("Invalid buffer size for kernel hack: %d", buffer->nbytes);
|
||||||
return CNH_RESULT_INVALID_PARAMETER;
|
result = CNH_RESULT_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
result = _patch_piuio_process_itg_kernel_module_hack(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _patch_piuio_process_itg_kernel_module_hack(buffer);
|
|
||||||
} else {
|
} else {
|
||||||
log_error("Invalid usb control request to PIUIO: 0x%02X", request);
|
log_error("Invalid usb control request to PIUIO: 0x%02X", request);
|
||||||
return CNH_RESULT_INVALID_PARAMETER;
|
result = CNH_RESULT_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
time_counter_delta = util_time_get_counter() - time_counter_start;
|
||||||
|
time_ms = util_time_get_elapsed_ms_double(time_counter_delta);
|
||||||
|
|
||||||
|
if (time_ms > 0.010) {
|
||||||
|
log_debug("High processing time sample: %f ms", time_ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch_piuio_poll_counter++;
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _patch_piuio_close(void)
|
static void _patch_piuio_close(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user