/** * @file app_display.h * @brief YF30137 7-segment display driver. * * The YF30137 is a 7-pin Charlieplexed LED module: * - 5 seven-segment digits (DIG1..DIG5, segments A..G) * - DIG6 holds two single indicators: A6 = "deg F", B6 = decimal point * * A dedicated FreeRTOS task (display_task) scans the module continuously. * Every other task updates the display simply by calling display_set(); * the scan task only reads the global state and never blocks callers. */ #ifndef __APP_DISPLAY_H__ #define __APP_DISPLAY_H__ #ifdef __cplusplus extern "C" { #endif #include #include "n32wb03x.h" /* Display type / unit (controls the DIG6 "deg F" indicator A6) */ #define DISP_TYPE_CELSIUS 0u /* degree C: A6 off */ #define DISP_TYPE_FAHRENHEIT 1u /* degree F: A6 on */ /* Number base for the displayed value */ #define DISP_BASE_DECIMAL 10u #define DISP_BASE_HEX 16u /** * @brief Update what the display should show (read by the scan task). * @param value floating value to display * @param type DISP_TYPE_CELSIUS / DISP_TYPE_FAHRENHEIT * @param base DISP_BASE_DECIMAL (1 decimal place) / DISP_BASE_HEX * @note Non-blocking; may be called from any task context. */ void display_set(float value, uint8_t type, uint8_t base); /** * @brief Display driver FreeRTOS task: Charlieplexing scan loop, never returns. */ void display_task(void *pvParameters); /** * @brief Enable (1) / disable (0) the automatic Charlieplexing scan. * When disabled the scan task releases all 7 pins to high-impedance * so another task (e.g. the "dispset" CLI) can drive them manually. */ void display_auto_set(uint8_t on); /** * @brief @return 1 when the automatic scan is enabled. */ uint8_t display_auto_get(void); /** * @brief Map a display pin number (1..7) to its GPIO port + pin mask. * @param pin_no display pin number 1..7 (pin1=PB0 ... pin7=PA6) * @param port out: GPIO port * @param pin out: GPIO pin mask * @return 1 on success, 0 when pin_no is out of range. */ int display_pin_map(uint8_t pin_no, GPIO_Module** port, uint16_t* pin); #ifdef __cplusplus } #endif #endif /* __APP_DISPLAY_H__ */