📄 data.cpp
字号:
// Add ","
(void)strncpyz(szWalk, ",", MAX_PATH - (szWalk - szCmd));
szWalk = strchr(szWalk, '\0'); // NO_TYPO: 27
DEBUGCHK(NULL != szWalk);
// Add "<top_rx_timeslots>"
if (lpHscsdInfo->dwParams & RIL_PARAM_HSCSDI_RXTIMESLOTSLIMIT)
{
if (RIL_HSCSDTIMESLOTSLIMIT_NONE == lpHscsdInfo->dwRxTimeslotsLimit)
{
nValue = 0;
}
else
{
nValue = lpHscsdInfo->dwRxTimeslotsLimit;
}
(void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), "%u", nValue);
szWalk = strchr(szWalk, '\0'); // NO_TYPO: 27
DEBUGCHK(NULL != szWalk);
}
// Add ","
(void)strncpyz(szWalk, ",", MAX_PATH - (szWalk - szCmd));
szWalk = strchr(szWalk, '\0'); // NO_TYPO: 27
DEBUGCHK(NULL != szWalk);
// Add "<codings>"
if (lpHscsdInfo->dwParams & RIL_PARAM_HSCSDI_NONTRANSPCHANNELCODINGS)
{
nValue = 0;
if (RIL_HSCSDCODING_ALL != lpHscsdInfo->dwNonTranspChannelCodings)
{
for (i = 0 ; i < NUM_HSCSDCODINGS; i++)
{
if (lpHscsdInfo->dwNonTranspChannelCodings & g_rgdwHSCSDCodings[i])
{
nValue += (0x01 << i);
}
}
if (!nValue)
{
hr = E_INVALIDARG;
goto Error;
}
}
(void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), "%u", nValue);
szWalk = strchr(szWalk, '\0'); // NO_TYPO: 27
DEBUGCHK(NULL != szWalk);
}
if (lpHscsdInfo->dwParams & RIL_PARAM_HSCSDI_AUTOSVCLEVELUPGRADING)
{
// Add ";+CHSU=<mode>"
(void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), ";+CHSU=%u",
(lpHscsdInfo->fAutoSvcLevelUpgrading ? 1 : 0));
szWalk = strchr(szWalk, '\0'); // NO_TYPO: 27
DEBUGCHK(NULL != szWalk);
}
// Add "<CR>"
(void)strncpyz(szWalk, "\r", MAX_PATH - (szWalk - szCmd));
if (!QueueCmd(pHandle, szCmd, CMDOPT_NONE, APIID_SETHSCSDOPTIONS, NULL, NULL, hr))
{
hr = E_FAIL;
goto Error;
}
Error:
#else // WAVECOM_DRIVER
HRESULT hr = E_NOTIMPL;
#endif // WAVECOM_DRIVER
return hr;
}
//
//
//
static HRESULT ParseGetHSCSDCallSettings(LPCSTR szRsp, void*& pBlob, UINT& cbBlob)
{
FUNCTION_TRACE(ParseGetHSCSDCallSettings);
UINT nValue;
UINT i;
RILCALLHSCSDINFO* prchscsdi = NULL;
HRESULT hr = S_OK;
pBlob = NULL;
cbBlob = 0;
prchscsdi = (RILCALLHSCSDINFO*)AllocBlob(sizeof(RILCALLHSCSDINFO));
if (!prchscsdi)
{
hr = E_OUTOFMEMORY;
goto Error;
}
memset(prchscsdi, 0x00, sizeof(RILCALLHSCSDINFO));
prchscsdi->cbSize = sizeof(RILCALLHSCSDINFO);
// Parse "<prefix>+CHSC: <rx_timeslots>"
if (!ParseRspPrefix(szRsp, szRsp) ||
!MatchStringBeginning(szRsp, "+CHSC: ", szRsp) ||
!ParseUInt(szRsp, TRUE, nValue, szRsp))
{
hr = E_FAIL;
goto Error;
}
prchscsdi->dwRxTimeslots = nValue;
prchscsdi->dwParams |= RIL_PARAM_CHSCSDI_RXTIMESLOTS;
// Parse ",<tx_timeslots>"
if (!MatchStringBeginning(szRsp, ",", szRsp) ||
!ParseUInt(szRsp, TRUE, nValue, szRsp))
{
hr = E_FAIL;
goto Error;
}
prchscsdi->dwTxTimeslots = nValue;
prchscsdi->dwParams |= RIL_PARAM_CHSCSDI_TXTIMESLOTS;
// Parse ",<aiur>"
if (!MatchStringBeginning(szRsp, ",", szRsp) ||
!ParseUInt(szRsp, TRUE, nValue, szRsp))
{
hr = E_FAIL;
goto Error;
}
for (i = 0; i < NUM_HSCSDAIRRATES; i++)
{
if (nValue == g_rgdwHSCSDAirRates[i])
{
prchscsdi->dwAirInterfaceUserRate = i;
break;
}
}
if (NUM_HSCSDAIRRATES == i)
{
// We couldn't match the response with anything
prchscsdi->dwAirInterfaceUserRate = RIL_HSCSDAIURATE_UNKNOWN;
}
prchscsdi->dwParams |= RIL_PARAM_CHSCSDI_AIRINTERFACEUSERRATE;
// Parse ",<coding><postfix>"
if (!MatchStringBeginning(szRsp, ",", szRsp) ||
!ParseUInt(szRsp, TRUE, nValue, szRsp) ||
!ParseRspPostfix(szRsp, szRsp))
{
hr = E_FAIL;
goto Error;
}
for (i = 0 ; i < NUM_HSCSDCODINGS; i++)
{
if ((0x01 << i) == (int)nValue)
{
prchscsdi->dwChannelCoding = g_rgdwHSCSDCodings[i];
}
}
if (NUM_HSCSDCODINGS == i)
{
prchscsdi->dwChannelCoding = RIL_HSCSDCODING_UNKNOWN;
}
prchscsdi->dwParams |= RIL_PARAM_CHSCSDI_CHANNELCODING;
pBlob = (void*)prchscsdi;
cbBlob = sizeof(RILCALLHSCSDINFO);
Error:
if (FAILED(hr))
{
FreeBlob(prchscsdi);
}
return hr;
}
//
//
//
HRESULT RILDrv_GetHSCSDCallSettings(DWORD dwParam)
{
FUNCTION_TRACE(RILDrv_GetHSCSDCallSettings);
#if !defined(WAVECOM_DRIVER) || defined(GSM_ATTEST)
// HW-SPECIFIC: WaveCom hardware doesn't support AT+CHSC
HRESULT hr = S_OK;
CRilInstanceHandle* pHandle = ExtractHandle(dwParam);
if (!pHandle)
{
hr = E_FAIL;
goto Error;
}
if (!QueueCmd(pHandle, "AT+CHSC\r", CMDOPT_NONE, APIID_GETHSCSDCALLSETTINGS, ParseGetHSCSDCallSettings, NULL, hr))
{
hr = E_FAIL;
goto Error;
}
Error:
#else // WAVECOM_DRIVER
HRESULT hr = E_NOTIMPL;
#endif // WAVECOM_DRIVER
return hr;
}
//
//
//
static HRESULT ParseGetBearerServiceOptions(LPCSTR szRsp, void*& pBlob, UINT& cbBlob)
{
FUNCTION_TRACE(ParseGetBearerServiceOptions);
UINT nValue;
UINT i;
RILBEARERSVCINFO* prbsi = NULL;
HRESULT hr = S_OK;
pBlob = NULL;
cbBlob = 0;
prbsi = (RILBEARERSVCINFO*)AllocBlob(sizeof(RILBEARERSVCINFO));
if (!prbsi)
{
hr = E_OUTOFMEMORY;
goto Error;
}
memset(prbsi, 0x00, sizeof(RILBEARERSVCINFO));
prbsi->cbSize = sizeof(RILBEARERSVCINFO);
// Parse "<prefix>+CBST: <speed>"
if (!ParseRspPrefix(szRsp, szRsp) ||
!MatchStringBeginning(szRsp, "+CBST: ", szRsp) ||
!ParseUInt(szRsp, TRUE, nValue, szRsp))
{
hr = E_FAIL;
goto Error;
}
for (i = 0; i < NUM_CONNSPEEDS; i++)
{
if (nValue == g_rgdwConnSpeeds[i])
{
prbsi->dwSpeed = i;
break;
}
}
if (NUM_CONNSPEEDS == i)
{
// We couldn't match the response with anything
prbsi->dwSpeed = RIL_SPEED_UNKNOWN;
}
prbsi->dwParams |= RIL_PARAM_BSI_SPEED;
// Parse ",<svc_name>"
if (!MatchStringBeginning(szRsp, ",", szRsp) ||
!ParseUInt(szRsp, TRUE, nValue, szRsp))
{
hr = E_FAIL;
goto Error;
}
for (i = 0; i < NUM_BEARERSVCNAMES; i++)
{
if (nValue == g_rgdwBearerSvcNames[i])
{
prbsi->dwServiceName = i;
break;
}
}
if (NUM_BEARERSVCNAMES == i)
{
// We couldn't match the response with anything
prbsi->dwServiceName = RIL_BSVCNAME_UNKNOWN;
}
prbsi->dwParams |= RIL_PARAM_BSI_SERVICENAME;
// Parse ",<conn_element><postfix>"
if (!MatchStringBeginning(szRsp, ",", szRsp) ||
!ParseUInt(szRsp, TRUE, nValue, szRsp) ||
!ParseRspPostfix(szRsp, szRsp))
{
hr = E_FAIL;
goto Error;
}
for (i = 0; i < NUM_BEARERSVCCONNELEMS; i++)
{
if (nValue == g_rgdwBearerSvcConnElems[i])
{
prbsi->dwConnectionElement = i;
break;
}
}
if (NUM_BEARERSVCCONNELEMS == i)
{
// We couldn't match the response with anything
prbsi->dwConnectionElement = RIL_BSVCCE_UNKNOWN;
}
prbsi->dwParams |= RIL_PARAM_BSI_CONNECTIONELEMENT;
pBlob = (void*)prbsi;
cbBlob = sizeof(RILBEARERSVCINFO);
Error:
if (FAILED(hr))
{
FreeBlob(prbsi);
}
return hr;
}
//
//
//
HRESULT RILDrv_GetBearerServiceOptions(DWORD dwParam)
{
FUNCTION_TRACE(RILDrv_GetBearerServiceOptions);
HRESULT hr = S_OK;
CRilInstanceHandle* pHandle = ExtractHandle(dwParam);
if (!pHandle)
{
hr = E_FAIL;
goto Error;
}
if (!QueueCmd(pHandle, "AT+CBST?\r", CMDOPT_NONE, APIID_GETBEARERSERVICEOPTIONS, ParseGetBearerServiceOptions,
NULL, hr))
{
hr = E_FAIL;
goto Error;
}
Error:
return hr;
}
//
//
//
HRESULT RILDrv_SetBearerServiceOptions(DWORD dwParam, const RILBEARERSVCINFO* lpBearerServiceInfo)
{
FUNCTION_TRACE(RILDrv_SetBearerServiceOptions);
char szCmd[MAX_PATH];
LPSTR szWalk = szCmd;
HRESULT hr = S_OK;
CRilInstanceHandle* pHandle = ExtractHandle(dwParam);
if (!pHandle || !lpBearerServiceInfo)
{
hr = E_FAIL;
goto Error;
}
//zhaozipeng 20070718, disconnect GPRS before CSD connection.
#if 0
if(0 != g_dwActiveGPRSContextID)
{
RETAILMSG(1, (TEXT("[GSM] find active GPRS connection.\r\n")));
CRilHandle *pDevice = pHandle->GetDevice();
RILGPRSCONTEXTACTIVATED rGPRSca;
memset(&rGPRSca, 0x00, sizeof(RILGPRSCONTEXTACTIVATED));
rGPRSca.cbSize = sizeof(rGPRSca);
rGPRSca.fActivated = FALSE;
if(0 == g_dwActiveGPRSContextID)
rGPRSca.dwContextID = 1;
else
rGPRSca.dwContextID = g_dwActiveGPRSContextID;
RETAILMSG(1, (TEXT("[GSM] g_dwActiveGPRSContextID=[%d]\r\n"), g_dwActiveGPRSContextID));
rGPRSca.dwEvent = RIL_RILGPRSCONTEXTACTIVATED_MEDEACT;
if( pDevice->BroadcastRealBlobNotification(RIL_NOTIFY_GPRS_DISCONNECT, &rGPRSca, sizeof(rGPRSca)) )
{
RETAILMSG(1, (TEXT("[GSM] Broadcast ME DEACT first, OK\r\n")));
}
else
{
RETAILMSG(1, (TEXT("[GSM] Broadcast ME DEACT first, Failed\r\n")));
goto Error;
}
}
//Sleep(1000*3);
//disconnect first CSD before new CSD come
{
UINT8 nFirstCSDCallID = 0;
if( RILDrv_CC_GetCallIDFromType(CALL_TYPE_CSD, nFirstCSDCallID) )
{
RETAILMSG(1, (TEXT("[GSM] RILDrv_SetBearerServiceOptions:find CSD Call exsit and CallID=[%d]\r\n"),nFirstCSDCallID));
char szCmd_ath[MAX_PATH];
(void)_snprintfz(szCmd_ath, MAX_PATH, "AT%%CHLD=7%u\r", nFirstCSDCallID);
QueueCmdIgnoreRsp(APIID_NONE, szCmd_ath, CMDOPT_NONE, g_TimeoutAPIDefault, NULL, NULL, 0, 0, 0);
Sleep( 500 );
}
}
#endif
//end zhaozipeng 20070718
// Add "AT+CBST="
(void)strncpyz(szWalk, "AT+CBST=", MAX_PATH - (szWalk - szCmd));
szWalk = strchr(szWalk, '\0'); // NO_TYPO: 27
DEBUGCHK(NULL != szWalk);
// Add "<speed>"
if (lpBearerServiceInfo->dwParams & RIL_PARAM_BSI_SPEED)
{
DEBUGCHK(RIL_SPEED_64000_TRANSP >= lpBearerServiceInfo->dwSpeed);
if (RIL_SPEED_UNKNOWN == lpBearerServiceInfo->dwSpeed)
{
hr = E_INVALIDARG;
goto Error;
}
(void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), "%u", g_rgdwConnSpeeds[lpBearerServiceInfo->dwSpeed]);
szWalk = strchr(szWalk, '\0'); // NO_TYPO: 27
DEBUGCHK(NULL != szWalk);
}
// Add ","
(void)strncpyz(szWalk, ",", MAX_PATH - (szWalk - szCmd));
szWalk = strchr(szWalk, '\0'); // NO_TYPO: 27
DEBUGCHK(NULL != szWalk);
// Add "<svc_name>"
if (lpBearerServiceInfo->dwParams & RIL_PARAM_BSI_SERVICENAME)
{
DEBUGCHK(RIL_BSVCNAME_PACKETACCESS_SYNC_RDI >= lpBearerServiceInfo->dwServiceName);
if (RIL_BSVCNAME_UNKNOWN == lpBearerServiceInfo->dwServiceName)
{
hr = E_INVALIDARG;
goto Error;
}
(void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), "%u", g_rgdwBearerSvcNames[lpBearerServiceInfo->dwServiceName]);
szWalk = strchr(szWalk, '\0'); // NO_TYPO: 27
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -