FEATIRE COMPLETE?

This commit is contained in:
2026-04-12 23:29:57 +02:00
parent 82e43b67da
commit 4abb1df03c
4 changed files with 63 additions and 43 deletions

View File

@@ -5,25 +5,31 @@
volatile uint8_t i2c_registers[16] = {0x00};
void update_fan_from_regs(volatile uint8_t* reg) {
fan_driver_target_rpm = i2c_get_register_word(reg, I2C_REG_TARGET_RPM);
fan_driver_pwm_set_duty(i2c_get_register_word(reg, I2C_REG_CURRENT_DUTY));
fan_driver_control_mode = (reg[I2C_REG_MODE] & 0x01);
fan_driver_powered_down = (reg[I2C_REG_MODE] & 0x02) >> 1;
}
void onWrite(const uint8_t reg, const uint8_t length) {
if (length == 0) return;
switch (reg) {
case I2C_REG_TARGET_RPM:
fan_driver_target_rpm = i2c_get_register_word(i2c_registers, I2C_REG_TARGET_RPM);
update_fan_from_regs(i2c_registers);
printf("set tgt fan speed to %d\n", fan_driver_target_rpm);
break;
case I2C_REG_CURRENT_DUTY:
printf("set duty cycle to %d\n", i2c_get_register_word(i2c_registers, I2C_REG_CURRENT_DUTY));
update_fan_from_regs(i2c_registers);
printf("set duty cycle to %d\n", fan_driver_pwm_get_duty());
break;
case I2C_REG_MODE:
fan_driver_control_mode = (i2c_registers[I2C_REG_MODE] & 0x01);
fan_driver_fan_type = (i2c_registers[I2C_REG_MODE] & 0x02) >> 1;
fan_driver_powered_down = (i2c_registers[I2C_REG_MODE] & 0x04) >> 2;
printf("set mode register to %x. control mode is %d, type is %d, powered down is %d\n", i2c_registers[I2C_REG_MODE], fan_driver_control_mode, fan_driver_fan_type, fan_driver_powered_down);
update_fan_from_regs(i2c_registers);
printf("set mode register to %x. control mode is %d, powered down is %d\n", i2c_registers[I2C_REG_MODE], fan_driver_control_mode, fan_driver_powered_down);
break;
default:
@@ -39,7 +45,6 @@ int main() {
printf("System bootup\n");
fan_driver_init();
fan_driver_pwm_set_duty(1000);
// Initialize I2C slave
funGpioInitC();
@@ -47,6 +52,7 @@ int main() {
funPinMode(PC2, GPIO_CFGLR_OUT_10Mhz_AF_OD); // SCL
i2c_registers_reinit(i2c_registers);
i2c_registers_set_defaults(i2c_registers);
update_fan_from_regs(i2c_registers);
fan_driver_target_rpm = i2c_get_register_word(i2c_registers, I2C_REG_TARGET_RPM);
SetupI2CSlave(I2C_DEVICE_ADDR, i2c_registers, sizeof(i2c_registers), onWrite, NULL, false);
@@ -56,9 +62,9 @@ int main() {
i2c_set_register_word(i2c_registers, I2C_REG_CURRENT_RPM, fan_driver_current_rpm);
i2c_set_register_word(i2c_registers, I2C_REG_CURRENT_DUTY, fan_driver_pwm_get_duty());
i2c_registers[I2C_REG_STATE] = (fan_driver_is_steady) | (fan_driver_is_stalled << 1);
i2c_registers[I2C_REG_STATE] = (!fan_driver_is_steady) | (fan_driver_is_stalled << 1);
Delay_Ms(200);
Delay_Ms(250);
}
}