aio sanity checks
This commit is contained in:
28
src/aio.c
28
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user