| /** | 
 | * @File: codec_res_request_api.c | 
 | * @Brief: Implementation of Device Manager in Sanechips | 
 | * | 
 | * Copyright (C) 2017 Sanechips Technology Co., Ltd. | 
 | * @Author: chen.tianming@zte.com.cn | 
 | * | 
 | * This program is free software; you can redistribute it and/or modify | 
 | * it under the terms of the GNU General Public License version 2 as | 
 | * published by the Free Software Foundation. | 
 | * */ | 
 |  | 
 | /******************************************************************************* | 
 |  *						    Í·Îļþ   	          					        * | 
 | ******************************************************************************/ | 
 | #include<stdio.h> | 
 | #include<stdlib.h> | 
 | #include<sys/msg.h> | 
 | #include<errno.h> | 
 | #include<pthread.h> | 
 | #include<string.h> | 
 | #include"softap_api.h" | 
 | 	 | 
 | /******************************************************************************* | 
 |  *							   ºê¶¨Òå								   * | 
 |  ******************************************************************************/ | 
 |  | 
 | /******************************************************************************* | 
 |  *							   Êý¾ÝÀàÐͶ¨Òå 							   * | 
 |  ******************************************************************************/ | 
 |   | 
 | /******************************************************************************* | 
 |  *							   ½Ó¿Ú¶¨Òå 								   * | 
 |  ******************************************************************************/ | 
 |  | 
 | /** | 
 |  *º¯Êý˵Ã÷£ºÇëÇóʹÓÃaudio×ÊÔ´½Ó¿Ú | 
 |  *²ÎÊý˵Ã÷: @	reqParam Èë²ÎÊý£¬°üÀ¨ÇëÇóµÄÒµÎñ£¬Ä£¿éºÅ£» | 
 |  		   @spData ³ö²Î,·´Ó³µ±Ç°µÄÖ÷¿ØµÄ״̬¡£ | 
 |  *·µ»ØÖµ£º  true ÉêÇë³É¹¦£» | 
 |  		   false ÉêÇëʧ°Ü(¶ÔÓÚ»ìÒôµÈÏà¹Ø²Ù×÷£¬ÅäºÏ³ö²Î)	   | 
 |  *±¸×¢£º     | 
 |  */ | 
 | BOOL audio_resource_request(T_audio_Res_Request *reqParam, T_audio_UseRsp *RspData) | 
 | { | 
 | 	int tempQueueId = -1; | 
 | 	MSG_BUF msg = {0}; | 
 | 	long msgSize = 0; | 
 | 	T_audio_UseReq useReqData = {0};  | 
 | 	int moduleIdTmp = MODULE_ID_AP_AUDIODYNAMIC_BASE;//ÄÚ²¿¶¯Ì¬»ñȡԴģ¿éID£¬³õʼֵΪMODULE_ID_AP_AUDIODYNAMIC_BASE | 
 | 	 | 
 | 	if(!reqParam || !RspData) { | 
 | 		softap_assert("audio_resource_request function: input param is null \n"); | 
 | 		return FALSE; | 
 | 	} | 
 | 	/* ´´½¨ÏûÏ¢¶ÓÁУ¬´ËÏûÏ¢¶ÓÁÐÁÙʱÐÔ£¬Ê¹ÓÃÍêºóɾ³ý */ | 
 | //	if(-1 == (tempQueueId = msgget(reqParam->tempMouduleId, IPC_CREAT | IPC_EXCL)))  | 
 | //		softap_assert("audio_resource_request function: create Message queue Error£º%s", strerror(errno)); | 
 |  | 
 | 	/* ´´½¨ÏûÏ¢¶ÓÁУ¬´ËÏûÏ¢¶ÓÁÐÁÙʱÐÔ£¬Ê¹ÓÃÍêºóɾ³ý */ | 
 | 	while((tempQueueId = msgget(moduleIdTmp,IPC_CREAT | IPC_EXCL| 0600)) < 0) | 
 | 	{ | 
 | 	    moduleIdTmp++; | 
 | 		if (moduleIdTmp > MODULE_ID_AP_AUDIODYNAMIC_END) { | 
 | 			//µ±module_id´óÓÚMODULE_ID_AP_AUDIODYNAMIC_ENDֵʱ£¬Ö÷¶¯¶ÏÑÔ | 
 | 			softap_assert("audio dynamatic msg queue too many now !!!!!!!!"); | 
 | 		} | 
 | 	} | 
 |  | 
 | 	/* ×é×°ÏûÏ¢·¢Ë͸øaudio Ö÷¿Ø, ²¢µÈ´ýÖ÷¿Ø¸ø³öÃ÷È·´ð¸´ */ | 
 | 	useReqData.type = reqParam->audioType; | 
 | 	useReqData.moduleId = reqParam->moduleId; | 
 | 	useReqData.tempModuleId = moduleIdTmp; | 
 | 	if(0 > platform_send_msg(moduleIdTmp, MODULE_ID_CODEC, USE_AUDIO_REQ, sizeof(T_audio_UseReq), (unsigned char *)&useReqData)) 	 | 
 | 		softap_assert("audio_resource_request function: Send USE_AUDIO_REQ msg Error: %s", strerror(errno)); | 
 |   | 
 | 	/*µÈ´ýaudioÖ÷¿Ø»Ø¸´ */ | 
 | 	while(1) | 
 | 	{ | 
 | 		/*»ñÈ¡ÏûÏ¢½øÐд¦Àí*/ | 
 | 		memset(&msg,0, sizeof(MSG_BUF)); | 
 | 		msgSize = sizeof(MSG_BUF) - sizeof(long); | 
 | 		if(0 > msgrcv(tempQueueId, &msg, msgSize, 0, 0)) | 
 | 			softap_assert("audio_resource_request function: Rec msg Error %s\n", strerror(errno)); | 
 |  | 
 | 		slog(RTC_PRINT, SLOG_NORMAL, "audio_resource_request function: Rec msg now:tempModuleId(%x), srcId(%x), dstId(%x), msgCmd(%d)\n", moduleIdTmp,msg.src_id, msg.dst_id, msg.usMsgCmd); | 
 | 		/*ÏûÏ¢´¦Àí */ | 
 | 		if(USE_AUDIO_RSP == msg.usMsgCmd) | 
 | 		{ | 
 | 			T_audio_UseRsp *serverResData =(T_audio_UseRsp *) msg.aucDataBuf; | 
 | 			RspData->result = serverResData->result; | 
 | 			RspData->type = serverResData->type; | 
 | 			RspData->using_type = serverResData->using_type; | 
 | 			slog(RTC_PRINT, SLOG_NORMAL, "audio_resource_request function: get debug info:  RspData->resul(%d), using_type(%d)\n ", RspData->result, serverResData->using_type); | 
 |  | 
 | 			/* ɾ³ýÏûÏ¢¶ÓÁÐ */ | 
 | 			if(0 > msgctl(tempQueueId, IPC_RMID, 0)) | 
 | 			{ | 
 | 				slog(RTC_PRINT, SLOG_NORMAL,"error num(%d): error case:%s",errno,strerror(errno)); | 
 | 			} | 
 | 			if(0 == serverResData->result)	// success	 | 
 | 			{					 | 
 | 				return TRUE; | 
 | 			}  | 
 | 			else   | 
 | 			{   | 
 | 				slog(RTC_PRINT, SLOG_NORMAL, "audio res request fail now:  using_type(%d)\n",serverResData->using_type); | 
 | 				return FALSE; | 
 | 			} | 
 |  | 
 | 		} | 
 | 		 | 
 | 	} | 
 |  | 
 | } |