/*******************************************************************************
|
* File Name : MT571XLBS.c
|
* Description :
|
* Created on : 2018Äê5ÔÂ23ÈÕ
|
* Author : ¶Å¼ü
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Include Files *
|
*******************************************************************************/
|
#include "MT571XAudio.h"
|
|
#include "string.h"
|
#include "stdlib.h"
|
#include "Module.h"
|
#include "Module.h"
|
#include "MT571XDriver.h"
|
#include "MT571XFSM.h"
|
#include "HIDO_Util.h"
|
#include "HIDO_FSM.h"
|
#include "HIDO_Timer.h"
|
#include "HIDO_ATLite.h"
|
#include "HIDO_Debug.h"
|
#include "ATConfig.h"
|
#include "TTS.h"
|
#include "TONE.h"
|
#include "Audio.h"
|
|
/*******************************************************************************
|
* Macro *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Type Definition *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Local Variable *
|
*******************************************************************************/
|
HIDO_FSM_DETACHED_STATE(MT571XAudioTTSPlay)
|
HIDO_FSM_DETACHED_STATE(MT571XAudioTTSStop)
|
HIDO_FSM_DETACHED_STATE(MT571XAudioSetVolume)
|
HIDO_FSM_DETACHED_STATE(MT571XAudioTONEPlay)
|
HIDO_FSM_DETACHED_STATE(MT571XAudioTONEStop)
|
|
static HIDO_BOOL l_bIsTTSBusy = HIDO_FALSE;
|
static HIDO_BOOL l_bIsTTSOver = HIDO_FALSE;
|
static HIDO_BOOL l_bIsTONEBusy = HIDO_FALSE;
|
static HIDO_BOOL l_bIsTONEOver = HIDO_FALSE;
|
|
static HIDO_UINT16 l_u16Volume = 3;
|
static HIDO_VLQMemberStruct *l_pstTTSData = HIDO_NULL;
|
static HIDO_VLQMemberStruct *l_pstTONEData = HIDO_NULL;
|
|
extern int Open_TTS;
|
|
/*******************************************************************************
|
* Local Function Declaration *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Local Function *
|
*******************************************************************************/
|
/*******************************************************************************
|
* State Name : MT571XAudioTTSPlay
|
* Parent State :
|
* Description :
|
* Author : ¶Å¼ü
|
* Modified Date: : 2018-05-01
|
*******************************************************************************/
|
HIDO_FSM_DETACHED_STATE_IMPLEMENT(MT571XAudioTTSPlay, HIDO_NULL, HIDO_NULL)
|
{
|
static const HIDO_StateStruct *l_pstAfterState = HIDO_NULL;
|
HIDO_ATLiteDeviceStruct *_pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData;
|
|
switch (_u32Event)
|
{
|
case HIDO_EVENT_ENTRY:
|
{
|
HIDO_StateArgStruct *pstStateArg = (HIDO_StateArgStruct *)_pArg;
|
|
l_bIsTTSBusy = HIDO_TRUE;
|
l_pstAfterState = pstStateArg->m_pstAfterState;
|
|
HIDO_ATLiteCmdSend(_pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT^TTS=1,\"%.*s\"\r\n", l_pstTTSData->m_u32DataLen, l_pstTTSData->m_pDataAddr);
|
TTS_ReleaseData(l_pstTTSData);
|
break;
|
}
|
case HIDO_EVENT_EXIT:
|
{
|
HIDO_ATLiteCmdSendOver(_pstATDevice);
|
break;
|
}
|
case HIDO_AT_EVENT_OK:
|
case HIDO_AT_EVENT_ERROR:
|
{
|
HIDO_FSMStateChange(_pstFSM, l_pstAfterState, HIDO_NULL);
|
break;
|
}
|
default:
|
{
|
return HIDO_EVENT_NO_PROC;
|
}
|
}
|
|
return HIDO_EVENT_OK;
|
}
|
|
/*******************************************************************************
|
* State Name : MT571XAudioTTSStop
|
* Parent State :
|
* Description :
|
* Author : ¶Å¼ü
|
* Modified Date: : 2018-05-01
|
*******************************************************************************/
|
HIDO_FSM_DETACHED_STATE_IMPLEMENT(MT571XAudioTTSStop, HIDO_NULL, HIDO_NULL)
|
{
|
static const HIDO_StateStruct *l_pstAfterState = HIDO_NULL;
|
HIDO_ATLiteDeviceStruct *_pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData;
|
|
switch (_u32Event)
|
{
|
case HIDO_EVENT_ENTRY:
|
{
|
HIDO_StateArgStruct *pstStateArg = (HIDO_StateArgStruct *)_pArg;
|
|
l_pstAfterState = pstStateArg->m_pstAfterState;
|
|
HIDO_ATLiteCmdSend(_pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT^TTS=0\r\n");
|
|
// GPIOD->BSRR = 0x0004 << 16; //¹Ø±ÕTTSµçÔ´
|
|
break;
|
}
|
case HIDO_EVENT_EXIT:
|
{
|
l_bIsTTSBusy = HIDO_FALSE;
|
l_bIsTTSOver = HIDO_FALSE;
|
HIDO_ATLiteCmdSendOver(_pstATDevice);
|
break;
|
}
|
case HIDO_AT_EVENT_OK:
|
case HIDO_AT_EVENT_ERROR:
|
{
|
HIDO_FSMStateChange(_pstFSM, l_pstAfterState, HIDO_NULL);
|
break;
|
}
|
default:
|
{
|
return HIDO_EVENT_NO_PROC;
|
}
|
}
|
|
return HIDO_EVENT_OK;
|
}
|
|
/*******************************************************************************
|
* State Name : MT571XAudioSetVolume
|
* Parent State :
|
* Description :
|
* Author : ¶Å¼ü
|
* Modified Date: : 2018-05-01
|
*******************************************************************************/
|
HIDO_FSM_DETACHED_STATE_IMPLEMENT(MT571XAudioSetVolume, HIDO_NULL, HIDO_NULL)
|
{
|
static const HIDO_StateStruct *l_pstAfterState = HIDO_NULL;
|
HIDO_ATLiteDeviceStruct *_pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData;
|
|
switch (_u32Event)
|
{
|
case HIDO_EVENT_ENTRY:
|
{
|
HIDO_StateArgStruct *pstStateArg = (HIDO_StateArgStruct *)_pArg;
|
|
l_u16Volume = Audio_GetVolume();
|
l_pstAfterState = pstStateArg->m_pstAfterState;
|
|
HIDO_ATLiteCmdSend(_pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT^TTSCFG=\"volume\",%u\r\n", l_u16Volume);
|
break;
|
}
|
case HIDO_EVENT_EXIT:
|
{
|
HIDO_ATLiteCmdSendOver(_pstATDevice);
|
break;
|
}
|
case HIDO_AT_EVENT_OK:
|
case HIDO_AT_EVENT_ERROR:
|
{
|
HIDO_FSMStateChange(_pstFSM, l_pstAfterState, HIDO_NULL);
|
break;
|
}
|
default:
|
{
|
return HIDO_EVENT_NO_PROC;
|
}
|
}
|
|
return HIDO_EVENT_OK;
|
}
|
|
/*******************************************************************************
|
* State Name : MT571XAudioTONEPlay
|
* Parent State :
|
* Description :
|
* Author : ¶Å¼ü
|
* Modified Date: : 2018-05-01
|
*******************************************************************************/
|
HIDO_FSM_DETACHED_STATE_IMPLEMENT(MT571XAudioTONEPlay, HIDO_NULL, HIDO_NULL)
|
{
|
static const HIDO_StateStruct *l_pstAfterState = HIDO_NULL;
|
HIDO_ATLiteDeviceStruct *_pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData;
|
|
switch (_u32Event)
|
{
|
case HIDO_EVENT_ENTRY:
|
{
|
HIDO_StateArgStruct *pstStateArg = (HIDO_StateArgStruct *)_pArg;
|
|
l_bIsTONEBusy = HIDO_TRUE;
|
l_pstAfterState = pstStateArg->m_pstAfterState;
|
|
HIDO_ATLiteCmdSend(_pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+QLTONE=1,%.*s\r\n", l_pstTONEData->m_u32DataLen, l_pstTONEData->m_pDataAddr);
|
TONE_ReleaseData(l_pstTONEData);
|
break;
|
}
|
case HIDO_EVENT_EXIT:
|
{
|
HIDO_ATLiteCmdSendOver(_pstATDevice);
|
break;
|
}
|
case HIDO_AT_EVENT_OK:
|
case HIDO_AT_EVENT_ERROR:
|
{
|
HIDO_FSMStateChange(_pstFSM, l_pstAfterState, HIDO_NULL);
|
break;
|
}
|
default:
|
{
|
return HIDO_EVENT_NO_PROC;
|
}
|
}
|
|
return HIDO_EVENT_OK;
|
}
|
|
/*******************************************************************************
|
* State Name : MT571XAudioTONEStop
|
* Parent State :
|
* Description :
|
* Author : ¶Å¼ü
|
* Modified Date: : 2018-05-01
|
*******************************************************************************/
|
HIDO_FSM_DETACHED_STATE_IMPLEMENT(MT571XAudioTONEStop, HIDO_NULL, HIDO_NULL)
|
{
|
static const HIDO_StateStruct *l_pstAfterState = HIDO_NULL;
|
HIDO_ATLiteDeviceStruct *_pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData;
|
|
switch (_u32Event)
|
{
|
case HIDO_EVENT_ENTRY:
|
{
|
HIDO_StateArgStruct *pstStateArg = (HIDO_StateArgStruct *)_pArg;
|
|
l_pstAfterState = pstStateArg->m_pstAfterState;
|
HIDO_ATLiteCmdSend(_pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+QLTONE=0\r\n");
|
|
// GPIOD->BSRR = 0x0004 << 16; //¹Ø±ÕTTSµçÔ´
|
|
break;
|
}
|
case HIDO_EVENT_EXIT:
|
{
|
l_bIsTONEBusy = HIDO_FALSE;
|
l_bIsTONEOver = HIDO_FALSE;
|
HIDO_ATLiteCmdSendOver(_pstATDevice);
|
break;
|
}
|
case HIDO_AT_EVENT_OK:
|
case HIDO_AT_EVENT_ERROR:
|
{
|
HIDO_FSMStateChange(_pstFSM, l_pstAfterState, HIDO_NULL);
|
break;
|
}
|
default:
|
{
|
return HIDO_EVENT_NO_PROC;
|
}
|
}
|
|
return HIDO_EVENT_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : MT571XAudio_TTSPlay
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : ¶Å¼ü
|
*******************************************************************************/
|
static HIDO_INT32 MT571XAudio_TTSPlay(HIDO_ATLiteDeviceStruct *_pstATDevice)
|
{
|
HIDO_StateArgStruct stStateArg;
|
|
stStateArg.m_pArg = HIDO_NULL;
|
stStateArg.m_pstAfterState = _pstATDevice->m_pstFSM->m_pstCurrentState;
|
HIDO_FSM_DETACHED_STATE_SETTLE(MT571XAudioTTSPlay, _pstATDevice->m_pstFSM->m_pstCurrentState->m_pstParent, HIDO_NULL);
|
HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(MT571XAudioTTSPlay), &stStateArg);
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : MT571XAudio_TTSStop
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : ¶Å¼ü
|
*******************************************************************************/
|
static HIDO_INT32 MT571XAudio_TTSStop(HIDO_ATLiteDeviceStruct *_pstATDevice)
|
{
|
HIDO_StateArgStruct stStateArg;
|
|
stStateArg.m_pArg = HIDO_NULL;
|
stStateArg.m_pstAfterState = _pstATDevice->m_pstFSM->m_pstCurrentState;
|
HIDO_FSM_DETACHED_STATE_SETTLE(MT571XAudioTTSStop, _pstATDevice->m_pstFSM->m_pstCurrentState->m_pstParent, HIDO_NULL);
|
HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(MT571XAudioTTSStop), &stStateArg);
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : MT571XAudio_TONEPlay
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : ¶Å¼ü
|
*******************************************************************************/
|
static HIDO_INT32 MT571XAudio_TONEPlay(HIDO_ATLiteDeviceStruct *_pstATDevice)
|
{
|
HIDO_StateArgStruct stStateArg;
|
|
stStateArg.m_pArg = HIDO_NULL;
|
stStateArg.m_pstAfterState = _pstATDevice->m_pstFSM->m_pstCurrentState;
|
HIDO_FSM_DETACHED_STATE_SETTLE(MT571XAudioTONEPlay, _pstATDevice->m_pstFSM->m_pstCurrentState->m_pstParent, HIDO_NULL);
|
HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(MT571XAudioTONEPlay), &stStateArg);
|
|
return HIDO_OK;
|
}
|
|
|
/*******************************************************************************
|
* Function Name : MT571XAudio_TONEStop
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : ¶Å¼ü
|
*******************************************************************************/
|
static HIDO_INT32 MT571XAudio_TONEStop(HIDO_ATLiteDeviceStruct *_pstATDevice)
|
{
|
HIDO_StateArgStruct stStateArg;
|
|
stStateArg.m_pArg = HIDO_NULL;
|
stStateArg.m_pstAfterState = _pstATDevice->m_pstFSM->m_pstCurrentState;
|
HIDO_FSM_DETACHED_STATE_SETTLE(MT571XAudioTONEStop, _pstATDevice->m_pstFSM->m_pstCurrentState->m_pstParent, HIDO_NULL);
|
HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(MT571XAudioTONEStop), &stStateArg);
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : MT571XAudio_SetVolume
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : ¶Å¼ü
|
*******************************************************************************/
|
static HIDO_INT32 MT571XAudio_SetVolume(HIDO_ATLiteDeviceStruct *_pstATDevice)
|
{
|
HIDO_StateArgStruct stStateArg;
|
|
stStateArg.m_pArg = HIDO_NULL;
|
stStateArg.m_pstAfterState = _pstATDevice->m_pstFSM->m_pstCurrentState;
|
HIDO_FSM_DETACHED_STATE_SETTLE(MT571XAudioSetVolume, _pstATDevice->m_pstFSM->m_pstCurrentState->m_pstParent, HIDO_NULL);
|
HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(MT571XAudioSetVolume), &stStateArg);
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Global Function *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Function Name : MT571XAudio_Poll
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : ¶Å¼ü
|
* Modified Date: : 2018Äê5ÔÂ22ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 MT571XAudio_Poll(HIDO_ATLiteDeviceStruct *_pstATDevice)
|
{
|
if(l_u16Volume != Audio_GetVolume())
|
{
|
MT571XAudio_SetVolume(_pstATDevice);
|
|
return HIDO_OK;
|
}
|
|
if(HIDO_FALSE == l_bIsTTSBusy)
|
{
|
l_pstTTSData = TTS_GetNextData();
|
|
if(l_pstTTSData != HIDO_NULL)
|
{
|
MT571XAudio_TTSPlay(_pstATDevice);
|
|
|
return HIDO_OK;
|
}
|
}
|
else
|
{
|
if(HIDO_TRUE == l_bIsTTSOver)
|
{
|
MT571XAudio_TTSStop(_pstATDevice);
|
|
return HIDO_OK;
|
}
|
}
|
|
if(HIDO_FALSE == l_bIsTONEBusy)
|
{
|
l_pstTONEData = TONE_GetNextData();
|
if(l_pstTONEData != HIDO_NULL)
|
{
|
MT571XAudio_TONEPlay(_pstATDevice);
|
|
return HIDO_OK;
|
}
|
}
|
else
|
{
|
if(HIDO_TRUE == l_bIsTONEOver)
|
{
|
MT571XAudio_TONEStop(_pstATDevice);
|
|
return HIDO_OK;
|
}
|
}
|
|
return HIDO_ERR;
|
}
|
|
/*******************************************************************************
|
* Function Name : MT571XAudio_TTSOver
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : ¶Å¼ü
|
* Modified Date: : 2018Äê5ÔÂ22ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 MT571XAudio_TTSOver(HIDO_VOID)
|
{
|
l_bIsTTSOver = HIDO_TRUE;
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : MT571XAudio_TONEOver
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : ¶Å¼ü
|
* Modified Date: : 2018Äê5ÔÂ22ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 MT571XAudio_TONEOver(HIDO_VOID)
|
{
|
l_bIsTONEOver = HIDO_TRUE;
|
|
return HIDO_OK;
|
}
|