/*******************************************************************************
 * @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 <stdbool.h>
#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
