From cd06d047d5250d1923d851a1ccff2844fc393e3e Mon Sep 17 00:00:00 2001 From: drath Date: Fri, 14 Aug 2026 01:03:46 +0200 Subject: [PATCH] aio sanity checks --- src/aio.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/aio.c b/src/aio.c index b15e11a..caf7ecf 100644 --- a/src/aio.c +++ b/src/aio.c @@ -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); }