#include "stm32f7xx_hal.h" #include "config.h" #include "status.h" void status_init(void) { __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitTypeDef gpio = {0}; gpio.Mode = GPIO_MODE_OUTPUT_PP; gpio.Pull = GPIO_NOPULL; gpio.Speed = GPIO_SPEED_FREQ_LOW; /* LED1 - PC15 */ gpio.Pin = LED1_PIN; HAL_GPIO_Init(LED1_PORT, &gpio); /* LED2 - PC14 */ gpio.Pin = LED2_PIN; HAL_GPIO_Init(LED2_PORT, &gpio); /* Buzzer - PB2 (inverted: HIGH = off) */ gpio.Pin = BEEPER_PIN; HAL_GPIO_Init(BEEPER_PORT, &gpio); /* Start with both LEDs ON (active low) */ HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED2_PORT, LED2_PIN, GPIO_PIN_RESET); /* Buzzer off */ HAL_GPIO_WritePin(BEEPER_PORT, BEEPER_PIN, GPIO_PIN_RESET); } void status_boot_beep(void) { /* Two quick beeps */ HAL_GPIO_WritePin(BEEPER_PORT, BEEPER_PIN, GPIO_PIN_SET); HAL_Delay(80); HAL_GPIO_WritePin(BEEPER_PORT, BEEPER_PIN, GPIO_PIN_RESET); HAL_Delay(80); HAL_GPIO_WritePin(BEEPER_PORT, BEEPER_PIN, GPIO_PIN_SET); HAL_Delay(80); HAL_GPIO_WritePin(BEEPER_PORT, BEEPER_PIN, GPIO_PIN_RESET); } void status_update(uint32_t tick, int imu_ok, int armed, int tilt_fault, int remote_estop) { GPIO_PinState fast_blink = ((tick / 200) % 2) ? GPIO_PIN_RESET : GPIO_PIN_SET; GPIO_PinState blink = ((tick / 500) % 2) ? GPIO_PIN_RESET /* ON half */ : GPIO_PIN_SET; /* OFF half */ if (remote_estop) { HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, fast_blink); HAL_GPIO_WritePin(LED2_PORT, LED2_PIN, fast_blink); } else if (!imu_ok) { /* IMU error: LED1 blinking (attention), LED2 solid ON */ HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, blink); HAL_GPIO_WritePin(LED2_PORT, LED2_PIN, GPIO_PIN_RESET); } else if (tilt_fault) { /* Tilt fault: both LEDs slow blink */ HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, blink); HAL_GPIO_WritePin(LED2_PORT, LED2_PIN, blink); } else if (armed) { /* Armed: both LEDs solid ON */ HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED2_PORT, LED2_PIN, GPIO_PIN_RESET); } else { /* Normal disarmed: LED1 solid ON, LED2 off */ HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED2_PORT, LED2_PIN, GPIO_PIN_SET); } }