| /** |
| * @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; |
| } |
| |
| } |
| |
| } |
| |
| } |