Esempio n. 1
0
INT Set_NfcPasswdToken_Proc(
	IN RTMP_ADAPTER		*pAd,
	IN PSTRING			arg)
{
	POS_COOKIE	pObj = (POS_COOKIE) pAd->OS_Cookie;
	PWSC_CTRL	pWscCtrl = &pAd->ApCfg.MBSSID[pObj->ioctl_if].WscControl;
	PUCHAR pBuf = NULL;
	USHORT BufLen = 0;
	UCHAR action = 1, type = TYPE_PASSWORD;
	UCHAR val=0;
	BOOLEAN		bHandover=FALSE;
	/*
		Action: b¡¦<7:6>: 0x00 ¡V Request, 0x01 ¡V Notify
        		b¡¦<5:0>: 0x00 ¡V Get, 0x01 - Set
	*/
	val = (UCHAR)simple_strtol(arg, 0, 10);
	if (val == 1) /* Password Token */
	{
		bHandover = FALSE;
		type = TYPE_PASSWORD;
	}
	else if (val == 2) /* Handover Select */
	{
		bHandover = TRUE;
		type = TYPE_PASSWDHO_S;
	}	
	else if (val == 3) /* Handover Request */
	{
		bHandover = TRUE;
		type = TYPE_PASSWDHO_R;
	}	

	os_alloc_mem(pAd, (UCHAR **)&pBuf, (NFC_WSC_TLV_SIZE*sizeof(UCHAR)));
	if (pBuf == NULL)
	{
		return FALSE;
	}

	DBGPRINT(RT_DEBUG_TRACE, ("%s: NfcBuildOOBDevPasswdTLV value(=%d) type(=%d)\n", __FUNCTION__,val,  type));
	NfcBuildOOBDevPasswdTLV(pAd, pWscCtrl, type, pBuf, &BufLen);
	if (pBuf && (BufLen != 0))
	{
		pWscCtrl->bTriggerByNFC = TRUE;
		if (type ==TYPE_PASSWORD)
			pWscCtrl->NfcModel = MODEL_PASSWORD_TOKEN;
		else
			pWscCtrl->NfcModel = MODEL_HANDOVER;
		
		DBGPRINT(RT_DEBUG_TRACE, ("%s: NfcBuildOOBDevPasswdTLV NfcModel(=%d)\n", __FUNCTION__,pWscCtrl->NfcModel));
		NfcCommand(pAd, action, type, BufLen, pBuf);
		os_free_mem(NULL, pBuf);
	}
	
	return TRUE;
}
Esempio n. 2
0
INT Get_NfcStatus_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg)
{
 	UCHAR data = 0;
	/*
		Action: b¡¦<7:6>: 0x0 ¡V To NFC, 0x1 ¡V From NFC
        		b¡¦<5:0>: 0x0 ¡V Get, 0x01 - Set
	*/
	UCHAR action = 0, type = TYPE_NFC_STATUS; /* 5 - NFC Status */
	
	NfcCommand(pAd, action, type, 0, NULL);
	
    return TRUE;
}
Esempio n. 3
0
INT Set_NfcConfigurationToken_Proc(
	IN RTMP_ADAPTER		*pAd,
	IN PSTRING			arg)
{
	POS_COOKIE	pObj = (POS_COOKIE) pAd->OS_Cookie;
	PWSC_CTRL	pWscCtrl = &pAd->ApCfg.MBSSID[pObj->ioctl_if].WscControl;
	PUCHAR pBuf = NULL;
	USHORT BufLen = 0;
	/*
		Action: b¡¦<7:6>: 0x00 ¡V Request, 0x01 ¡V Notify
        		b¡¦<5:0>: 0x00 ¡V Get, 0x01 - Set
	*/
	UCHAR action = 1, type = TYPE_CONFIGURATION;

	os_alloc_mem(pAd, (UCHAR **)&pBuf, (NFC_WSC_TLV_SIZE*sizeof(UCHAR)));
	if (pBuf == NULL)
	{
		return FALSE;
	}

	NfcBuildWscProfileTLV(pAd, pWscCtrl, pBuf, &BufLen);
	if (pBuf && (BufLen != 0))
	{
		NfcCommand(pAd, action, type, BufLen, pBuf);
		os_free_mem(NULL, pBuf);
	}

	if ((pAd->OpMode == OPMODE_AP) && (pWscCtrl->WscConfStatus == WSC_SCSTATE_UNCONFIGURED))
	{				
		pWscCtrl->WscConfStatus = WSC_SCSTATE_CONFIGURED;
		WscBuildBeaconIE(pAd, WSC_SCSTATE_CONFIGURED, FALSE, 0, 0, 0, NULL, 0,AP_MODE);
		WscBuildProbeRespIE(pAd, WSC_MSGTYPE_AP_WLAN_MGR, WSC_SCSTATE_CONFIGURED, FALSE, 0, 0, 0, NULL, 0,AP_MODE);
		APUpdateAllBeaconFrame(pAd);
		
	}
	if (pWscCtrl->WscUpdatePortCfgTimerRunning)
	{
		BOOLEAN bCancel;
		RTMPCancelTimer(&pWscCtrl->WscUpdatePortCfgTimer, &bCancel);
	}
	else
		pWscCtrl->WscUpdatePortCfgTimerRunning = TRUE;
	RTMPSetTimer(&pWscCtrl->WscUpdatePortCfgTimer, 1000);
	return TRUE;
}
Esempio n. 4
0
INT Set_NfcStatus_Proc(RTMP_ADAPTER *pAd, RTMP_STRING *arg)
{
	UCHAR data = 0;

	/*
		Action: b¡¦<7:6>: 0x00 ¡V Request, 0x01 ¡V Notify
        		b¡¦<5:0>: 0x00 ¡V Get, 0x01 - Set
	*/
	UCHAR action = 1, type = TYPE_NFC_STATUS; /* 5 - NFC Status */

	if (simple_strtol(arg, 0, 10) != 0)
		data = 1;

	data = (UCHAR)simple_strtol(arg, 0, 10);
	MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_TRACE, ("%s: Set NFC Status(=%d)\n", __FUNCTION__, data));
	NfcCommand(pAd, action, type, 1, &data);
	
	return TRUE;
}
Esempio n. 5
0
VOID	NfcParseRspCommand(
	IN  PRTMP_ADAPTER	pAd,
	IN  PUCHAR pData,
	IN  USHORT DataLen)
{
	NFC_CMD_INFO *pNfcCmdInfo = NULL;
	BOOLEAN bSetFromNfc = FALSE;
	PWSC_CTRL pWscCtrl = &pAd->ApCfg.MBSSID[0].WscControl;
	
	DBGPRINT(RT_DEBUG_TRACE, ("====> %s\n", __FUNCTION__));
	hex_dump("Packet", pData, DataLen);

	os_alloc_mem(pAd, (UCHAR **)&pNfcCmdInfo, (DataLen*sizeof(UCHAR)));
	if (pNfcCmdInfo)
	{
		NdisMoveMemory(pNfcCmdInfo, pData, DataLen);		
		hex_dump("Packet", &pNfcCmdInfo->data[0], pNfcCmdInfo->data_len);
		bSetFromNfc = ((pNfcCmdInfo->action & 0x41) == 0x41);
		DBGPRINT(RT_DEBUG_TRACE, ("==> vendor_id: 0x%04x, action = 0x%0x, type = %d, data_len = %u, bSetFromNfc = %d\n", 
								pNfcCmdInfo->vendor_id, pNfcCmdInfo->action, pNfcCmdInfo->type, pNfcCmdInfo->data_len, bSetFromNfc));
		switch(pNfcCmdInfo->type)
		{
			case TYPE_CMD_RESULT:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_CMD_RESULT(=%d): Command result = %d\n", pNfcCmdInfo->type, pNfcCmdInfo->data[0]));
				break;
			case TYPE_CONFIGURATION:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_CONFIGURATION(=%d)\n", pNfcCmdInfo->type));
				if (bSetFromNfc)
				{
					if (pNfcCmdInfo->data_len != 1)
					{						
						/* 
							Receive Configuration from NFC daemon. 
						*/
						if (WscProcessCredential(pAd, &pNfcCmdInfo->data[0], pNfcCmdInfo->data_len, pWscCtrl) == FALSE)
						{
							DBGPRINT(RT_DEBUG_TRACE, ("ProcessCredential fail..\n"));
						}
						else
						{							
							if ((pAd->OpMode == OPMODE_AP) && (pWscCtrl->WscConfStatus == WSC_SCSTATE_UNCONFIGURED))
							{				
								pWscCtrl->WscConfStatus = WSC_SCSTATE_CONFIGURED;
								WscBuildBeaconIE(pAd, WSC_SCSTATE_CONFIGURED, FALSE, 0, 0, 0, NULL, 0, AP_MODE);
								WscBuildProbeRespIE(pAd, WSC_MSGTYPE_AP_WLAN_MGR, WSC_SCSTATE_CONFIGURED, FALSE, 0, 0, 0, NULL, 0, AP_MODE);
								APUpdateAllBeaconFrame(pAd);
								
							}
							if (pWscCtrl->WscUpdatePortCfgTimerRunning)
							{
								BOOLEAN bCancel;
								RTMPCancelTimer(&pWscCtrl->WscUpdatePortCfgTimer, &bCancel);
							}
							else
								pWscCtrl->WscUpdatePortCfgTimerRunning = TRUE;
							RTMPSetTimer(&pWscCtrl->WscUpdatePortCfgTimer, 1000);
						}
					}
				}
				else
				{
					Set_NfcConfigurationToken_Proc(pAd, "1");
				}
				break;
			case TYPE_PASSWORD:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_PASSWORD(=%d)\n", pNfcCmdInfo->type));
				if (bSetFromNfc)
				{
					if (pNfcCmdInfo->data_len != 1)
					{
						/* 
							Receive Passwd from NFC daemon. 
						*/
						NfcProcessPasswdTV(pAd, &pNfcCmdInfo->data[0], pNfcCmdInfo->data_len, pWscCtrl, FALSE);
						WscGetConfWithoutTrigger(pAd, pWscCtrl, FALSE);
						pWscCtrl->bTriggerByNFC = TRUE;
						pWscCtrl->NfcModel = MODEL_PASSWORD_TOKEN;
					}
				}
				else
				{
					Set_NfcPasswdToken_Proc(pAd, "1");
				}
				break;
	 		/* New type for Handover */				
			case TYPE_PASSWDHO_S:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_PASSWDHO_S(=%d)\n", pNfcCmdInfo->type));
				if (bSetFromNfc)
				{
					if (pNfcCmdInfo->data_len != 1)
					{
						/* 
							Receive Passwd from NFC daemon. "So far" no this case.
							Due to AP always as Registrar in handover procedure, 
							AP only receive "Handover Request Message".
						*/
						NfcProcessPasswdTV(pAd, &pNfcCmdInfo->data[0], pNfcCmdInfo->data_len, pWscCtrl, TRUE);
						WscGetConfWithoutTrigger(pAd, pWscCtrl, FALSE);
						pWscCtrl->bTriggerByNFC = TRUE;
						pWscCtrl->NfcModel = MODEL_HANDOVER; /* 2 */
					}
				}
				else
				{
					Set_NfcPasswdToken_Proc(pAd, "2");
				}
				break;	
			case TYPE_PASSWDHO_R:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_PASSWDHO_R(=%d)\n", pNfcCmdInfo->type));
				if (bSetFromNfc)
				{
					if (pNfcCmdInfo->data_len != 1)
					{
						/* 
							Receive Passwd from NFC daemon. 
						*/
						NfcProcessPasswdTV(pAd, &pNfcCmdInfo->data[0], pNfcCmdInfo->data_len, pWscCtrl, TRUE);
						WscGetConfWithoutTrigger(pAd, pWscCtrl, FALSE);
						pWscCtrl->bTriggerByNFC = TRUE;
						pWscCtrl->NfcModel = MODEL_HANDOVER; /* 2 */
					}
				}
				else
				{
					/*
						"So far" no this case.
						Due to AP always as Registrar in handover procedure, 
						AP only send  "Handover Select Message".
					*/
					Set_NfcPasswdToken_Proc(pAd, "3");
				}
				break;
			case TYPE_NFC_STATUS:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_NFC_STATUS(=%d): NFC Status = %d\n", pNfcCmdInfo->type, pNfcCmdInfo->data[0]));
				pWscCtrl->NfcStatus = pNfcCmdInfo->data[0];
				break;
			case TYPE_WIFI_RADIO_STATUS:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_WIFI_RADIO_STATUS(=%d)\n", pNfcCmdInfo->type));
				if (bSetFromNfc)
				{
					if (pNfcCmdInfo->data[0] == 1)
						MlmeRadioOn(pAd);
					else
						MlmeRadioOff(pAd);
				}
				else
				{
					UCHAR RadioStatus = 0;
					if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF))
						RadioStatus = 0;
					else
						RadioStatus = 1;
					NfcCommand(pAd, 0x01, TYPE_WIFI_RADIO_STATUS, 1, &RadioStatus);
				}
				break;
			default:
				DBGPRINT(RT_DEBUG_TRACE, ("Unknow type(=%d)\n", pNfcCmdInfo->type));
				break;
		}
		os_free_mem(NULL, pNfcCmdInfo);
	}
	DBGPRINT(RT_DEBUG_TRACE, ("<==== %s\n", __FUNCTION__));
	return;
}