#ifndef __SLAVE_DRIVER_UHK_MODULE_H__ #define __SLAVE_DRIVER_UHK_MODULE_H__ // Includes: #include "fsl_common.h" #include "crc16.h" // Macros: #define UHK_MODULE_MAX_COUNT 3 #define KEY_STATE_SIZE (LEFT_KEYBOARD_HALF_KEY_COUNT/8 + (LEFT_KEYBOARD_HALF_KEY_COUNT % 8 ? 1 : 0)) #define MAX_PWM_BRIGHTNESS 0x64 // Typedefs: typedef enum { UhkModuleDriverId_LeftKeyboardHalf, UhkModuleDriverId_LeftAddon, UhkModuleDriverId_RightAddon, } uhk_module_id_t; typedef enum { UhkModulePhase_RequestModuleFeatures, UhkModulePhase_ReceiveModuleFeatures, UhkModulePhase_ProcessModuleFeatures, UhkModulePhase_RequestKeyStates, UhkModulePhase_ReceiveKeystates, UhkModulePhase_ProcessKeystates, UhkModulePhase_SetLedPwmBrightness, UhkModulePhase_SetTestLed, } uhk_module_phase_t; typedef struct { uint8_t ledPwmBrightness; bool isTestLedOn; } uhk_module_vars_t; typedef struct { uhk_module_phase_t phase; uhk_module_vars_t targetVars; i2c_message_t rxMessage; uint8_t firmwareI2cAddress; uint8_t bootloaderI2cAddress; uhk_module_features_t features; } uhk_module_state_t; typedef struct { uint8_t firmwareI2cAddress; uint8_t bootloaderI2cAddress; } uhk_module_i2c_addresses_t; // Variables: extern uhk_module_vars_t UhkModuleVars[UHK_MODULE_MAX_COUNT]; // Functions: void UhkModuleSlaveDriver_Init(uint8_t uhkModuleId); status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleId); #endif