/******************************************************************************* * @file i2c_manager.h * @brief Common header for HW/SW I2C mutex control ******************************************************************************* * * [헤더 개요] * I2C 버스 HW/SW 모드 전환 관리자의 공용 인터페이스 헤더. * * - HW_I2C_FRQ: HW TWI 모드 활성 여부 (true = HW I2C 사용 중) * - SW_I2C_FRQ: SW 비트뱅 모드 활성 여부 (true = SW I2C 사용 중) * * 두 플래그는 상호 배제적으로 동작하며, 동시에 true가 되지 않도록 관리된다. * ******************************************************************************/ #ifndef __I2C_MANAGER_H__ #define __I2C_MANAGER_H__ #include #include "app_error.h" /* I2C 모드 상태 플래그 (외부 참조용) */ extern bool HW_I2C_FRQ; /* HW TWI 모드 활성 여부 */ extern bool SW_I2C_FRQ; /* SW 비트뱅 모드 활성 여부 */ /** * @brief HW I2C(TWI) 모드 초기화 (중복 초기화 방지) * * SW 모드가 활성화되어 있으면 해제 후 HW로 전환한다. * 이미 HW 모드이면 아무 동작 없이 리턴한다. * ICM42670P IMU 센서 통신 전에 호출하여 HW I2C를 준비한다. */ void hw_i2c_init_once(void); /** * @brief SW I2C(비트뱅) 모드 초기화 (레거시, 현재 미사용) * * HW 모드가 활성화되어 있으면 TWI를 해제한 후 SW로 전환한다. * 이미 SW 모드이면 아무 동작 없이 리턴한다. */ void sw_i2c_init_once(void); /** * @brief I2C 모드 플래그 전체 초기화 * * HW_I2C_FRQ, SW_I2C_FRQ를 모두 false로 리셋한다. * 다음 init 호출 시 강제로 재초기화가 수행된다. */ void i2c_reset_state(void); #endif