Use high frequency when available

This commit is contained in:
Denis 2024-02-20 02:23:14 +01:00
parent c68e06a88b
commit 5947da5f2d
No known key found for this signature in database
GPG key ID: DD9B63F805CF5C03
3 changed files with 37 additions and 5 deletions

View file

@ -435,9 +435,16 @@ void *dev_out_thread_func(void *ptr) {
printf("Keyboard initialized: fd=%d\n", current_keyboard_fd); printf("Keyboard initialized: fd=%d\n", current_keyboard_fd);
} }
const int64_t kbd_report_timing_us = 2025; bool high_hz_avail = false;
const int64_t mouse_report_timing_us = 1650; const char *const avail_freq = inline_read_file("/sys/bus/iio/devices/iio:device0/", "name");
const int64_t gamepad_report_timing_us = 2500; if ((avail_freq != NULL) && (strstr(avail_freq, "1600.0") != NULL)) {
printf("High iio sampling frequency available: 1600.0 Hz");
high_hz_avail = true;
}
const int64_t kbd_report_timing_us = high_hz_avail ? 1125 : 2025;
const int64_t mouse_report_timing_us = high_hz_avail ? 950 : 1650;
const int64_t gamepad_report_timing_us = high_hz_avail ? 1250 : 2500;
if (current_gamepad == GAMEPAD_DUALSENSE) { if (current_gamepad == GAMEPAD_DUALSENSE) {
const int ds5_init_res = virt_dualsense_init( const int ds5_init_res = virt_dualsense_init(

View file

@ -1708,7 +1708,15 @@ static dev_old_iio_t* dev_old_iio_create(const char* path) {
// ======================================= anglvel_sampling_rate_hz ========================================== // ======================================= anglvel_sampling_rate_hz ==========================================
{ {
const char *const avail_freq = inline_read_file(iio->path, "/in_anglvel_sampling_frequency_available");
const char* preferred_scale = PREFERRED_SAMPLING_FREQ_STR; const char* preferred_scale = PREFERRED_SAMPLING_FREQ_STR;
double new_freq = PREFERRED_SAMPLING_FREQ;
if ((avail_freq != NULL) && (strstr(avail_freq, "1600.0"))) {
preferred_scale = PREFERRED_SAMPLING_FREQ_HIGH_HZ_STR;
new_freq = PREFERRED_SAMPLING_FREQ_HIGH_HZ;
}
const char *scale_main_file = "/in_anglvel_sampling_frequency"; const char *scale_main_file = "/in_anglvel_sampling_frequency";
char* const accel_scale = inline_read_file(iio->path, scale_main_file); char* const accel_scale = inline_read_file(iio->path, scale_main_file);
@ -1717,7 +1725,7 @@ static dev_old_iio_t* dev_old_iio_create(const char* path) {
free((void*)accel_scale); free((void*)accel_scale);
if (inline_write_file(iio->path, scale_main_file, preferred_scale, strlen(preferred_scale)) >= 0) { if (inline_write_file(iio->path, scale_main_file, preferred_scale, strlen(preferred_scale)) >= 0) {
iio->anglvel_sampling_rate_hz = PREFERRED_SAMPLING_FREQ; iio->anglvel_sampling_rate_hz = new_freq;
printf("anglvel sampling rate changed to %f for device %s\n", iio->accel_scale_x, iio->name); printf("anglvel sampling rate changed to %f for device %s\n", iio->accel_scale_x, iio->name);
} else { } else {
fprintf(stderr, "Unable to set preferred in_anglvel_sampling_frequency for device %s.\n", iio->name); fprintf(stderr, "Unable to set preferred in_anglvel_sampling_frequency for device %s.\n", iio->name);
@ -1734,7 +1742,15 @@ static dev_old_iio_t* dev_old_iio_create(const char* path) {
// ======================================= accel_sampling_rate_hz ========================================== // ======================================= accel_sampling_rate_hz ==========================================
{ {
const char *const avail_freq = inline_read_file(iio->path, "/in_accel_sampling_frequency_available");
const char* preferred_scale = PREFERRED_SAMPLING_FREQ_STR; const char* preferred_scale = PREFERRED_SAMPLING_FREQ_STR;
double new_freq = PREFERRED_SAMPLING_FREQ;
if ((avail_freq != NULL) && (strstr(avail_freq, "1600.0"))) {
preferred_scale = PREFERRED_SAMPLING_FREQ_HIGH_HZ_STR;
new_freq = PREFERRED_SAMPLING_FREQ_HIGH_HZ;
}
const char *scale_main_file = "/in_accel_sampling_frequency"; const char *scale_main_file = "/in_accel_sampling_frequency";
char* const accel_scale = inline_read_file(iio->path, scale_main_file); char* const accel_scale = inline_read_file(iio->path, scale_main_file);
@ -1743,7 +1759,7 @@ static dev_old_iio_t* dev_old_iio_create(const char* path) {
free((void*)accel_scale); free((void*)accel_scale);
if (inline_write_file(iio->path, scale_main_file, preferred_scale, strlen(preferred_scale)) >= 0) { if (inline_write_file(iio->path, scale_main_file, preferred_scale, strlen(preferred_scale)) >= 0) {
iio->accel_sampling_rate_hz = PREFERRED_SAMPLING_FREQ; iio->accel_sampling_rate_hz = new_freq;
printf("accel sampling rate changed to %f for device %s\n", iio->accel_scale_x, iio->name); printf("accel sampling rate changed to %f for device %s\n", iio->accel_scale_x, iio->name);
} else { } else {
fprintf(stderr, "Unable to set preferred in_accel_sampling_frequency for device %s.\n", iio->name); fprintf(stderr, "Unable to set preferred in_accel_sampling_frequency for device %s.\n", iio->name);
@ -2050,6 +2066,12 @@ input_dev_composite_t rc71l_composite = {
input_dev_composite_t* rog_ally_device_def(const dev_in_settings_t *const conf) { input_dev_composite_t* rog_ally_device_def(const dev_in_settings_t *const conf) {
if (conf->enable_imu) { if (conf->enable_imu) {
const char *const avail_freq = inline_read_file(iio_base_path, "/in_accel_sampling_frequency_available");
if ((avail_freq != NULL) && (strstr(avail_freq, "1600.0"))) {
printf("Using high sampling rate mode");
bmc150_timer_dev.filters.timer.ticktime_ns = 625000;
}
bmc150_timer_data.name = inline_read_file(iio_base_path, "name"); bmc150_timer_data.name = inline_read_file(iio_base_path, "name");
if ((bmc150_timer_data.name != NULL) && (strcmp(bmc150_timer_data.name, "bmi323"))) { if ((bmc150_timer_data.name != NULL) && (strcmp(bmc150_timer_data.name, "bmi323"))) {
printf("Old bmc150-accel-i2c for bmi323 device has been selected! Are you running a neptune kernel?\n"); printf("Old bmc150-accel-i2c for bmi323 device has been selected! Are you running a neptune kernel?\n");

View file

@ -55,6 +55,9 @@
#define PREFERRED_SAMPLING_FREQ ((double)800.000000) #define PREFERRED_SAMPLING_FREQ ((double)800.000000)
#define PREFERRED_SAMPLING_FREQ_STR "800.000000" #define PREFERRED_SAMPLING_FREQ_STR "800.000000"
#define PREFERRED_SAMPLING_FREQ_HIGH_HZ ((double)1600.000000)
#define PREFERRED_SAMPLING_FREQ_HIGH_HZ_STR "1600.000000"
// courtesy of linux kernel // courtesy of linux kernel
#ifndef __packed #ifndef __packed
#define __packed __attribute__((packed)) #define __packed __attribute__((packed))