aio sanity checks

This commit is contained in:
2026-08-14 01:03:46 +02:00
parent 31cd2ef211
commit cd06d047d5

View File

@@ -23,16 +23,10 @@ static struct aio_params_t params = {
},
}};
// set the duty of both fans at once
#define SET_FANS_DUTY(dev, duty) \
const uint8_t d = {duty}; \
aio_set_fan_duty(dev, &d)
static inline float clamp(const float value, const float min, const float max) {
return fmaxf(fminf(value, max), min);
}
static void aio_usb_claim(libusb_device_handle *dev) {
int ret = libusb_claim_interface(dev, 0);
if (ret != 0) {
@@ -59,7 +53,8 @@ static int aio_post(libusb_device_handle *dev, const int req_len, const int resp
static float aio_get_water_temp(libusb_device_handle *dev) {
static float last_read = 36.6f; // sane init value so it doenst ramp the fan up
req[0] = 0xa9;
aio_post(dev, 1, 6);
if (aio_post(dev, 1, 6) != 0)
return last_read;
const float temp = (float)resp[3] + (float)resp[4] / 10.0f;
if (temp > 10.0f && temp < 65.0f) {
@@ -73,13 +68,15 @@ static float aio_get_water_temp(libusb_device_handle *dev) {
static uint16_t aio_get_pump_speed(libusb_device_handle *dev) {
req[0] = 0x31;
aio_post(dev, 1, 5);
if (aio_post(dev, 1, 5) != 0)
return UINT16_MAX;
return (uint16_t)(resp[3] << 8 | resp[4]);
}
static enum aio_pump_mode_t aio_get_pump_mode(libusb_device_handle *dev) {
req[0] = 0x33;
aio_post(dev, 1, 4);
if (aio_post(dev, 1, 4) != 0)
return UNKNOWN;
return (enum aio_pump_mode_t)resp[3];
}
@@ -87,7 +84,8 @@ static void aio_get_fan_speed(libusb_device_handle *dev, uint16_t *speeds) {
for (uint8_t i = 0; i < 2; i++) {
req[0] = 0x41;
req[1] = i;
aio_post(dev, 2, 6);
if (aio_post(dev, 2, 6) != 0)
speeds[i] = UINT16_MAX;
speeds[i] = (uint8_t)(resp[4] << 8 | resp[5]);
}
}
@@ -102,8 +100,7 @@ static void aio_set_fan_duty(libusb_device_handle *dev, const uint8_t *duty) {
req[2] = MIN(MAX(duty[i], 0), 100);
if (params.fans.fan_stop && req[2] <= params.fans.min_duty)
req[2] = 0;
const int ret = aio_post(dev, sizeof(req), buf_size);
if (ret == 0)
if (aio_post(dev, sizeof(req), buf_size) == 0)
last_duty = req[2];
}
}
@@ -122,8 +119,8 @@ static void aio_set_pump_mode(libusb_device_handle *dev, const enum aio_pump_mod
applog(LOG_DBG, "setting pump to %u", mode);
req[0] = 0x32;
req[1] = (uint8_t)mode;
aio_post(dev, 2, 6);
last_mode = mode;
if (aio_post(dev, 2, 6) == 0)
last_mode = mode;
}
static void aio_set_color(libusb_device_handle *dev, const enum aio_color_mode_t mode, const uint8_t speed, const struct rgb_t *colors, const uint8_t color_count) {
@@ -230,7 +227,7 @@ void aio_update(struct aio_t *aio) {
fan_duty = clamp(fan_duty, params.fans.min_duty, params.fans.max_duty);
applog(LOG_DBG, "Fan duty %.3f, error %.4f, slope %.4f", (double)fan_duty, (double)error * (double)params.fans.ctrl.Ki, (double)slope * (double)params.fans.ctrl.Kd);
SET_FANS_DUTY(aio->handle, (uint8_t)fan_duty);
aio_set_fan_duty(aio->handle, (uint8_t[]){(uint8_t)fan_duty, (uint8_t)fan_duty}); // wew lad
/* pump logic */
if (fan_duty > (float)params.fans.max_duty * 0.75f && aio->pump_counter < 300)
@@ -244,7 +241,6 @@ void aio_update(struct aio_t *aio) {
aio_set_pump_mode(aio->handle, BALANCED);
if (aio->pump_counter == 0)
aio_set_pump_mode(aio->handle, QUIET);
// applog(LOG_DBG, "aio->pump_counter is %d", aio->pump_counter);
aio_usb_release(aio->handle);
}