Exemplo n.º 1
0
UINT32 OSW_EventWait
	(
	Event*		pEvent,
	UINT32		timeout
	)
	{
#if 0 // peter	
	DWORD		rc;

	SMS_ASSERT (pEvent);

	timeout = (timeout == OSW_WAIT_FOREVER) ? INFINITE : timeout;

	rc = WaitForSingleObject (*pEvent, timeout);

	if (rc == WAIT_FAILED)
		{
		return OSW_ERROR;
		}

	else if (rc == WAIT_TIMEOUT)
		{
		return OSW_TIMEOUT;
		}
	
	return OSW_OK;
#else
	return OSW_OK;
#endif
	} /* OSW_EventWait */
//*******************************************************************************
// Get grade according to value ranges table
static INT32 SmsHostVal2Grade( const QUALITY_CALC_ENTRY_ST Table[], INT32 Val )
{
	UINT32 i=0 ;
	for ( i=0 ; Table[i].RangeEnd != -1 ; i++ )
	{
		if ( Val <= Table[i].RangeEnd )
		{
			SMS_ASSERT( Table[i].Grade <= 100 && Table[i].Grade >= 0 ) ;
			return Table[i].Grade ;
		}
	}
	return 0 ;
}
Exemplo n.º 3
0
UINT32 OSW_EventClear
	(
	Event*		pEvent
	)
	{
#if 0 // peter	
	BOOL	rc;

	SMS_ASSERT (pEvent);

	rc = ResetEvent (*pEvent);
	return (rc == 0) ? OSW_ERROR : OSW_OK;
#else
	return OSW_OK;
#endif
	} /* OSW_EventClear */
Exemplo n.º 4
0
UINT32 OSW_EventSet
	(
	Event*		pEvent
	)
	{
#if 0 // Peter	
	BOOL	rc;

	SMS_ASSERT (pEvent);

	rc = SetEvent (*pEvent);
	return (rc == 0) ? OSW_ERROR : OSW_OK;
#else
	return OSW_OK;
#endif
	} /* OSW_EventSet */
Exemplo n.º 5
0
UINT32 OSW_EventDelete
	(
	Event*		pEvent
	)
	{
#if 0 // peter	
	BOOL	rc;

	SMS_ASSERT (pEvent);

	rc = CloseHandle (*pEvent);
	return (rc == 0) ? OSW_ERROR : OSW_OK;
#else
	return OSW_OK;
#endif

	} /* OSW_EventDelete */
void SmsHwPnpCallback(char* DeviceName, BOOL fArrival)
{
	if (fArrival)
	{	
		if (g_devData.IsFound)
		{
			// Already have a device - ignore
			return;
		}

		SMS_ASSERT((strlen(DeviceName) + 1) < SMS_ADR_LITE_MAX_DEVICE_NAME_LEN );
		strncpy(g_devData.DeviceName, DeviceName, SMS_ADR_LITE_MAX_DEVICE_NAME_LEN);

		if (ADR_DeviceInit(g_devData.DeviceMode) != SMSHOSTLIB_ERR_OK)
		{
			g_devData.IsFound = FALSE;
			return;
		}
		
		g_devData.IsFound = TRUE;
	}
	else
	{
		BOOL IsSameName = (strncmp( g_devData.DeviceName, DeviceName, SMS_ADR_LITE_MAX_DEVICE_NAME_LEN ) == 0 );
	
		if (!g_devData.IsFound)
		{
			return;
		}

		if (!IsSameName)
		{
			return;
		}

		ADR_DeviceTerminate();
		g_devData.IsFound = FALSE;
	}
}
Exemplo n.º 7
0
UINT32 OSW_EventCreate
	(
	Event*		pEvent			// where to store the event 
    )
    {

#if 0 // Peter
	SMS_ASSERT (pEvent);

	*pEvent = CreateEvent
		(
		NULL,			// Security settings
		0,				// ManualReset - false - system resets the state after a single waiter was signaled
		0,				// InitialState (signaled or not)
		(LPCTSTR)NULL	// Event name
		);

	return (*pEvent == NULL) ? OSW_ERROR : OSW_OK;
#else
	return OSW_OK;
#endif
    } /* OSW_EventCreate */
//*******************************************************************************
// 
void SmsLiteCmmbControlRxCallback( UINT32 handle_num, UINT8* p_buffer, UINT32 buff_size )
{
	SmsMsgData_ST* pSmsMsg = (SmsMsgData_ST*)p_buffer;
	SMSHOSTLIB_ERR_CODES_E RetCode = SMSHOSTLIB_ERR_UNDEFINED_ERR;
	UINT32 ResponseMsgType = SMSHOSTLIB_MSG_INVALID_RESPONSE_VAL;
	UINT8* pPayload = NULL;
	UINT32 PayloadLength = 0;

	// Return code and payload for the messages which have retcode as the first 4 bytes
	UINT8* pPayloadWoRetCode = NULL;
	UINT32 PayloadLengthWoRetCode = 0;
	SMSHOSTLIB_ERR_CODES_E RetCodeFromMsg = SMSHOSTLIB_ERR_UNDEFINED_ERR;

	SMS_ASSERT( handle_num == 0 );
	SMS_ASSERT( p_buffer != NULL );
	SMS_ASSERT( buff_size != 0 );
	SMS_ASSERT( buff_size >= pSmsMsg->xMsgHeader.msgLength );
	SMS_ASSERT( pSmsMsg->xMsgHeader.msgLength >= sizeof( SmsMsgHdr_ST ) );

	pPayload = (UINT8*)&pSmsMsg->msgData[0];
	PayloadLength = pSmsMsg->xMsgHeader.msgLength - sizeof( SmsMsgHdr_ST );

	if ( PayloadLength >= 4 )
	{
		RetCodeFromMsg = pSmsMsg->msgData[0];
		pPayloadWoRetCode = pPayload + 4;
		PayloadLengthWoRetCode = PayloadLength - 4;
	}
	
	SMSHOST_LOG3( SMSLOG_ERROR, "Control RX callback. Type %d, Retcode %#x, Payload Length %d", 
		pSmsMsg->xMsgHeader.msgType,
		RetCodeFromMsg,
		PayloadLength );

	switch( pSmsMsg->xMsgHeader.msgType )
	{
	case MSG_SMS_GET_STATISTICS_EX_RES:
		{
			// This response is unsolicited - i.e. it comes periodically from the chip
			// without being requested.
			// We cache the responses to deliver later to stats requests from the app
			// We also use each response for reception quality calculation
			//
			// Note that the memcpy here is not protected - there is a race between here
			// and the request - when the cache is delivered to the app it could be updated
			// at the same time here. 
			//
			SMSHOSTLIB_STATISTICS_CMMB_ST* pStats = (SMSHOSTLIB_STATISTICS_CMMB_ST*)pPayloadWoRetCode;
			UINT32 i;
			UINT32 RecQualSum = 0;
			if ( pStats == NULL )
			{
				break;
			}
			memcpy( &g_LibCmmbState.StatsCache,
				pStats, 
				SMS_MIN( PayloadLengthWoRetCode, sizeof(SMSHOSTLIB_STATISTICS_CMMB_ST) ) );
			
			i = g_LibCmmbState.ReceptionQualityCounter++ % SMS_CMMB_RECEPTION_QUALITY_HISTORY_SIZE;
			g_LibCmmbState.ReceptionQualityHistory[i] = SmsHostCmmbGetQuality( pStats );
			for ( i = 0 ; i < SMS_CMMB_RECEPTION_QUALITY_HISTORY_SIZE ; i++ )
			{
				RecQualSum += g_LibCmmbState.ReceptionQualityHistory[i];
			}
			g_LibCmmbState.StatsCache.ReceptionQuality = RecQualSum / SMS_CMMB_RECEPTION_QUALITY_HISTORY_SIZE;
		}
		break;
	case MSG_SMS_SCAN_COMPLETE_IND:
		{
			ResponseMsgType = SMSHOSTLIB_MSG_TUNE_RES;
			RetCode = RetCodeFromMsg;
			pPayload = pPayloadWoRetCode;
			PayloadLength = PayloadLengthWoRetCode;
		}
		break;
	case MSG_SMS_CMMB_START_CONTROL_INFO_RES:
		{
			ResponseMsgType = SMSHOSTLIB_MSG_CMMB_START_CONTROL_INFO_RES;
			RetCode = RetCodeFromMsg;
			pPayload = pPayloadWoRetCode;
			PayloadLength = PayloadLengthWoRetCode; 
		}
		break;
	case MSG_SMS_CMMB_STOP_CONTROL_INFO_RES:
		{
			ResponseMsgType = SMSHOSTLIB_MSG_CMMB_STOP_CONTROL_INFO_RES;
			RetCode = RetCodeFromMsg;
			pPayload = pPayloadWoRetCode;
			PayloadLength = PayloadLengthWoRetCode;
		}
		break;
	case MSG_SMS_CMMB_START_SERVICE_RES:
		{
			ResponseMsgType = SMSHOSTLIB_MSG_CMMB_START_SERVICE_RES;
			RetCode = RetCodeFromMsg;
			pPayload = pPayloadWoRetCode;
			PayloadLength = PayloadLengthWoRetCode;
		}
		break;
	case MSG_SMS_CMMB_STOP_SERVICE_RES:
		{
			ResponseMsgType = SMSHOSTLIB_MSG_CMMB_STOP_SERVICE_RES;
			RetCode = RetCodeFromMsg;
			pPayload = pPayloadWoRetCode;
			PayloadLength = PayloadLengthWoRetCode;
		}
		break;
	case MSG_SMS_LOG_ENABLE_CHANGE_RES:
		// NOP
		break;
	case MSG_SMS_INTERFACE_LOCK_IND:
		{
			// Firmware has requested that the host avoid sending messages to it
			SMSHOST_LOG0(SMSLOG_COMM, "Interface lock");
			g_LibCmmbState.IsBlockInterface = TRUE;
		}
		break;
	case MSG_SMS_INTERFACE_UNLOCK_IND:
		{
			// Firmware allows host to resume transmission
			SMSHOST_LOG0(SMSLOG_COMM, "Interface unlock");
			g_LibCmmbState.IsBlockInterface = FALSE;
		}
		break;

	case MSG_SMS_CMMB_GET_CHANNELS_INFO_RES:
	case MSG_SMS_CMMB_GET_SERVICES_RES:
		{
			// "Internal" messages - forward to host as is
			ResponseMsgType = pSmsMsg->xMsgHeader.msgType;
		}
		break;
	default:
		SmsLiteCommonControlRxHandler( handle_num, p_buffer, buff_size );
		break;
	}

	
	// Call the user callback
	if ( ResponseMsgType != SMSHOSTLIB_MSG_INVALID_RESPONSE_VAL )
	{
		SmsLiteCallCtrlCallback( ResponseMsgType, 
								RetCode,
								pPayload,
								PayloadLength );
	}
}