回调函数记录

版权声明:©1995-2018 CodingTheFuture, blog. All rights reserved. https://blog.csdn.net/sunqian666888/article/details/81093513
//函数入口处
case MSG_CMD_VOICE_RECORD_START:
      ret = halAudio_SetRptCb(&report_voice_data);
      NotifyAP(AUDIO_MSG_VOICE_REC_START);
      rec_voice_status = 1;
      break;
      
/* added by jason.sun@  2018-06-11 16:15:27 begin*/
typedef struct{
	UINT8 *pVpRxOutBuf; //downlink data
	UINT8 *pVpTxOutBuf; //uplink data
    UINT32 pVpRxOutSize; //downlink max bufsize
    UINT32 pVpTxOutSize; //uplink max bufsize
    UINT32 pVpRxRealSize; //downlink data real size
    UINT32 pVpTxRealSize; //uplink data real size
    ZOSS_THREAD_ID vpThread;
    ZOSS_SEMAPHORE_ID vpSemaphore;
    SINT32 (*Func_Cb)(void *pcb);
}T_zDrvVp_Rep;


int report_voice_data(void *p)
{
    T_zDrvVp_Rep *prep = p;
    static int print_count = 0;
    if(1 == rec_voice_status)
    {
        ++print_count;
        if(20 == print_count)
        {
            at_print(AT_EXT,"report_voice_data be called,voice_data:%s",prep->pVpRxOutBuf);
            print_count = 0;
        }
        at_write(FD_AUDIO_PS[1], prep->pVpRxOutBuf , prep->pVpRxRealSize);
    }
}
/* added by jason.sun@  2018-06-11 16:15:27 end*/

SINT32 halAudio_SetRptCb(void *pCb)
{
    if ((NULL != gHalAudio_ObjPtr) && (NULL != gHalAudio_ObjPtr->hal_Audio_SetRptCb))
    {
        return gHalAudio_ObjPtr->hal_Audio_SetRptCb(pCb);
    }
    else
    {
        return DRV_ERR_NOT_SUPPORTED;
    }
}


typedef struct 
{
    SINT32 (*hal_Audio_SetRptCb)(void *pcb);
} T_HalAudio_Opt;

static T_HalAudio_Opt gHalAudio_ObjOpt =
{
    .hal_Audio_SetGain = audio_SetGain,
};


static SINT32 audio_SetRptCb(VOID *pcb)
{
    s_vpRpt.Func_Cb = pcb;
    return DRV_SUCCESS;
}
typedef struct{
	UINT8 *pVpRxOutBuf; //downlink data
	UINT8 *pVpTxOutBuf; //uplink data
    UINT32 pVpRxOutSize; //downlink max bufsize
    UINT32 pVpTxOutSize; //uplink max bufsize
    UINT32 pVpRxRealSize; //downlink data real size
    UINT32 pVpTxRealSize; //uplink data real size
    ZOSS_THREAD_ID vpThread;
    ZOSS_SEMAPHORE_ID vpSemaphore;
    SINT32 (*Func_Cb)(void *pcb);
}T_zDrvVp_Rep;

T_zDrvVp_Rep s_vpRpt = 
{
	.pVpRxOutBuf = NULL,
	.pVpTxOutBuf = NULL,
    .pVpRxOutSize = 0,
    .pVpTxOutSize = 0,
    .pVpRxRealSize = 0,
    .pVpTxRealSize = 0,
    .vpThread = NULL,
    .vpSemaphore = NULL,
    .Func_Cb = NULL
};


//创建上报线程
ret = vp_CreateReportThreadSemaph();
if (ret != DRV_SUCCESS) 
{
    zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_Init vp_CreateReportThreadSemaph error.\n");
    return ZOSS_ERROR;
}
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_Init vp_CreateReportThreadSemaph success.\n");
//实现上报线程
SINT32 vp_CreateReportThreadSemaph(VOID)
{
	s_vpRpt.vpSemaphore = zOss_CreateSemaphore("VpReportSemaphore", 0);
	s_vpRpt.vpThread = zOss_CreateThread("vp_ReportThreadEntry", vp_ReportThreadEntry, 0, 1024, 16, 0, 1);
    s_vpRpt.pVpRxOutBuf = calloc(1, 640);
    s_vpRpt.pVpTxOutBuf = calloc(1, 640);
	if (NULL == s_vpRpt.vpThread
        || NULL == s_vpRpt.vpSemaphore
        || NULL == s_vpRpt.pVpRxOutBuf
        || NULL == s_vpRpt.pVpTxOutBuf) 
	{
		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_CreateReportThreadSemaph ERROR s_vpRpt.vpThread=%#x,s_vpRpt.vpSemaphore=%#x\n", s_vpRpt.vpThread, s_vpRpt.vpSemaphore);
		return DRV_ERROR;
	}
    s_vpRpt.pVpRxOutSize = 640;
    s_vpRpt.pVpTxOutSize = 640;
	zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_CreateReportThreadSemaph SUCCESS\n");
	return DRV_SUCCESS;
}

static VOID  vp_ReportThreadEntry(SINT32 arg)
{
    zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_ReportThreadEntry\n");
    int count = 0;
    while(1)
    {
        zOss_GetSemaphore(s_vpRpt.vpSemaphore, ZOSS_WAIT_FOREVER);
        if(NULL != s_vpRpt.Func_Cb)
        {
            (*(s_vpRpt.Func_Cb))((VOID*)(&s_vpRpt));
        }
        
    }

}

//对信号量进行V操作,并上报数据
if(NULL != s_vpRpt.pVpRxOutBuf
    && NULL != s_vpRpt.vpSemaphore
    && NULL != s_vpRpt.Func_Cb)
{
    bzero(s_vpRpt.pVpRxOutBuf, s_vpRpt.pVpRxOutSize);
    s_vpRpt.pVpRxRealSize = (write_len > s_vpRpt.pVpRxOutSize)?s_vpRpt.pVpRxOutSize:write_len;
    memcpy(s_vpRpt.pVpRxOutBuf, s_speechState.pVpTempRxOutPutBuffer, s_vpRpt.pVpRxRealSize);
    zOss_PutSemaphore(s_vpRpt.vpSemaphore);
}

猜你喜欢

转载自blog.csdn.net/sunqian666888/article/details/81093513
今日推荐