blob: 57bd4738c02d1bb479a2750d2c06288b9c53fe6a [file] [log] [blame]
/*
*******************************************************************************
*
* @file rc_mmi.c
*
* @brief MMI of Atmosic remote controller reference design.
*
* Copyright (C) Atmosic 2020-2021
*
*******************************************************************************
*/
#pragma once
/// MMI states
typedef enum {
/// System booted.
MMI_S_BOOTED,
/// Initialing.
MMI_S_INITING,
/// Initialized.
MMI_S_IDLE,
/// Pairing.
MMI_S_PAIRING,
/// Reconnecting.
MMI_S_RECONNING,
/// Connected but no profile ready.
MMI_S_CONNECTED,
#ifdef CFG_VOHID
/// HID is ready
MMI_S_HID_READY,
/// Audio streaming
MMI_S_HID_STREAMING,
#else
/// ATVV is ready but HID isn't.
MMI_S_ATVV_ONLY,
/// HID is ready but ATVV isn't.
MMI_S_HID_ONLY,
/// HID and ATVV are ready.
MMI_S_HID_ATVV,
/// ATVV is transferring audio.
MMI_S_ATVVING,
#endif
/// Disconnecting.
MMI_S_DISCONNING,
/// Under RF testing mode.
MMI_S_RF_TEST,
/// Under PDM local test
MMI_S_PDM_TEST,
/// Dummy state for marking.
MMI_S_END
} mmi_state_t;
/// MMI operations for MMI state transition
typedef enum {
/// Started initialing.
MMI_OP_INITING,
/// Initialized.
MMI_OP_INIT_DONE,
/// Started reconnecting.
MMI_OP_RECONNING,
/// Started pairing.
MMI_OP_PAIRING,
/// Pairing failed.
MMI_OP_PAIR_FAIL,
/// Reconnection timeout.
MMI_OP_RECONN_TOUT,
/// Pairing timeout.
MMI_OP_PAIR_TOUT,
/// Pairing success.
MMI_OP_PAIR_SUCCESS,
/// Connected.
MMI_OP_CONNECTED,
/// Disconnected.
MMI_OP_DISCONNED,
/// HOGP became ready.
MMI_OP_HID_READY,
#ifndef CFG_VOHID
/// ATVV became ready.
MMI_OP_ATVV_READY,
#endif
/// HOGP became unready.
MMI_OP_HID_UNREADY,
#ifndef CFG_VOHID
/// ATVV became unready.
MMI_OP_ATVV_UNREADY,
#endif
/// Started transferring audio.
MMI_OP_OPEN_MIC,
/// Stopped transferring audio.
MMI_OP_CLOSE_MIC,
/// Started disconnecting.
MMI_OP_DISCONNING,
/// ADV became stopped.
MMI_OP_ADV_STOPPED,
/// Number of MMI operations
MMI_OP_NUM
} mmi_op_t;
/// MMI timeout setting for @ref rc_mmi_idle_timer API
typedef enum mmi_tout_s {
/// Enable and reset MMI timeout timer.
MMI_TOUT_START,
/// Disable and clear MMI timeout timer.
MMI_TOUT_STOP,
/// Force MMI timeout in a short time.
MMI_TOUT_FORCE,
} mmi_tout_t;
/// MMI test mode type for @ref rc_mmi_enter_test API
typedef enum mmi_test_s {
#ifndef CFG_VOHID
/// ATVV auto test.
MMI_TEST_ATVV,
#endif
/// RF test.
MMI_TEST_RF,
/// KEY auto test.
MMI_TEST_KEY,
#ifdef CFG_PDM_LOCAL_TEST
/// PDM local test.
MMI_TEST_PDM,
#endif
} mmi_test_t;
/**
* @brief MMI state machine initialization.
*/
void rc_mmi_init(void);
/**
* @brief MMI state transition.
* @param[in] op Current operation.
*/
void rc_mmi_transition(mmi_op_t op);
/**
* @brief MMI idle timer setting.
* @param[in] op Operation.
*/
void rc_mmi_idle_timer(mmi_tout_t op);
/**
* @brief Enter test mode.
* @param[in] op Test mode.
*/
void rc_mmi_enter_test(mmi_test_t op);