Skip to content
Snippets Groups Projects
modules.h 3.97 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef MODULES_H
    #define MODULES_H
    
    
    #include "FreeRTOS.h"
    
    #include "gpio.h"
    
    #include "modules/mutex.h"
    
    #include <stdint.h>
    
    #include <stdbool.h>
    
    /* ---------- Panic -------------------------------------------------------- */
    void panic(const char *format, ...)
    	__attribute__((noreturn, format(printf, 1, 2)));
    
    
    /* ---------- Dispatcher --------------------------------------------------- */
    void vApiDispatcher(void *pvParameters);
    
    void dispatcher_mutex_init(void);
    
    extern struct mutex api_mutex;
    
    extern TaskHandle_t dispatcher_task_id;
    
    
    /* ---------- Hardware Init & Reset ---------------------------------------- */
    int hardware_early_init(void);
    int hardware_init(void);
    int hardware_reset(void);
    
    
    /* ---------- Lifecycle ---------------------------------------------------- */
    void vLifecycleTask(void *pvParameters);
    void return_to_menu(void);
    
    
    /* ---------- Serial ------------------------------------------------------- */
    #define SERIAL_READ_BUFFER_SIZE 128
    
    #define SERIAL_WRITE_STREAM_BUFFER_SIZE 512
    void serial_init();
    
    void vSerialTask(void *pvParameters);
    
    void serial_enqueue_char(char chr);
    
    void serial_flush(void);
    
    extern TaskHandle_t serial_task_id;
    
    /* Turn off the print queue and do prints synchroneous from now on. */
    void serial_return_to_synchronous();
    
    // For the eSetBit xTaskNotify task semaphore trigger
    enum serial_notify{
          SERIAL_WRITE_NOTIFY = 0x01,
          SERIAL_READ_NOTIFY  = 0x02,
    };
    
    
    /* ---------- LED Animation / Personal States ------------------------------ */
    #define PERSONAL_STATE_LED 14
    void vLedTask(void *pvParameters);
    int personal_state_enabled();
    
    
    /* ---------- PMIC --------------------------------------------------------- */
    void vPmicTask(void *pvParameters);
    
    
    /* ---------- Watchdog ----------------------------------------------------- */
    
    void watchdog_init();
    
    void watchdog_clearer_init();
    
    
    /* Critical battery voltage */
    #define BATTERY_CRITICAL   3.40f
    
    
    enum pmic_amux_signal {
    
    	PMIC_AMUX_DISABLED    = 0x0,
    
    	PMIC_AMUX_CHGIN_U     = 0x1,
    	PMIC_AMUX_CHGIN_I     = 0x2,
    	PMIC_AMUX_BATT_U      = 0x3,
    	PMIC_AMUX_BATT_CHG_I  = 0x4,
    	PMIC_AMUX_BATT_DIS_I  = 0x5,
    	PMIC_AMUX_BATT_NULL_I = 0x6,
    	PMIC_AMUX_THM_U       = 0x7,
    	PMIC_AMUX_TBIAS_U     = 0x8,
    	PMIC_AMUX_AGND_U      = 0x9,
    	PMIC_AMUX_SYS_U       = 0xA,
    	_PMIC_AMUX_MAX,
    };
    
    /*
     * Read a value from the PMIC's AMUX.  The result is already converted into its
     * proper unit.  See the MAX77650 datasheet for details.
     */
    int pmic_read_amux(enum pmic_amux_signal sig, float *result);
    
    
    
    /* ---------- BLE ---------------------------------------------------------- */
    
    void vBleTask(void *pvParameters);
    
    bool ble_shall_start(void);
    
    void ble_uart_write(uint8_t *pValue, uint8_t len);
    
    
    /* ---------- Hardware (Peripheral) Locks ---------------------------------- */
    void hwlock_init(void);
    
    enum hwlock_periph {
    	HWLOCK_I2C = 0,
    
    	HWLOCK_ADC,
    
    	HWLOCK_LED,
    	HWLOCK_SPI_ECG,
    
    int hwlock_acquire_timeout(enum hwlock_periph p, TickType_t wait);
    
    void hwlock_acquire(enum hwlock_periph p);
    int hwlock_acquire_nonblock(enum hwlock_periph p);
    
    void hwlock_release(enum hwlock_periph p);
    
    /* ---------- Display ------------------------------------------------------ */
    /* Forces an unlock of the display. Only to be used in Epicardium */
    
    Gerd's avatar
    Gerd committed
    void disp_forcelock();
    
    /* ---------- BHI160 ------------------------------------------------------- */
    #define BHI160_FIFO_SIZE             128
    #define BHI160_MUTEX_WAIT_MS          50
    void vBhi160Task(void *pvParameters);
    
    
    /* ---------- MAX86150 ----------------------------------------------------- */
    #define MAX86150_MUTEX_WAIT_MS		50
    void vMAX86150Task(void *pvParameters);
    void max86150_mutex_init(void);
    
    
    
    /* ---------- MAX30001 ----------------------------------------------------- */
    
    void vMAX30001Task(void *pvParameters);
    
    void max30001_mutex_init(void);
    
    /* ---------- GPIO --------------------------------------------------------- */
    extern gpio_cfg_t gpio_configs[];
    
    
    
    /* ---------- Sleep -------------------------------------------------------- */
    void sleep_deepsleep(void);
    
    #endif /* MODULES_H */