⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zdshared.c

📁 zd1211b芯片的无线网卡的驱动,移植到s3c2410平台
💻 C
📖 第 1 页 / 共 2 页
字号:
    body[3] = (Seq & 0xff00) >> 8;
    body[4] = Status & 0xff;		//Status
    body[5] = (Status & 0xff00) >> 8;
    len = 6;

    if ((Alg == SHARE_KEY) && ((Seq == 2)|| (Seq == 3)) && (pChalng)) {
        body[len] = EID_CTEXT;
        body[len+1] = CHAL_TEXT_LEN;
        memcpy(&body[len+2], pChalng, CHAL_TEXT_LEN);
        len += (2+CHAL_TEXT_LEN);
    }

    pf->bodyLen = len;
}	

void mkRe_AsocRspFrm(FrmDesc_t* pfrmDesc, TypeSubtype subType, MacAddr_t *addr1, 
        U16 Cap, U16 Status, U16 Aid, Element *pSupRates, Element *pExtRates, U8 vapId)
{
    U8 *body;
    U8 elemLen;
    U16 len;
    Frame_t *pf = pfrmDesc->mpdu;

    setFrameType(pf, subType);
    pf->body = pfrmDesc->buffer;
    body = pf->body;
    setAddr1(pf, addr1);
    setAddr2(pf, &dot11MacAddress);
    setAddr3(pf, &mBssId);
    pf->HdrLen = MAC_HDR_LNG;		

    body[0] = Cap & 0xff;			//Cap
    body[1] = (Cap & 0xff00) >> 8;
    body[2] = Status & 0xff;		//Status
    body[3] = (Status & 0xff00) >> 8;
    body[4] = Aid & 0xff;			//AID
    body[5] = (Aid & 0xff00) >> 8;
    len = 6;

    elemLen = pSupRates->buf[1]+2;
    memcpy(&body[len], (U8 *)pSupRates, elemLen); //Support Rates
    len += elemLen;

    if ((mMacMode != PURE_B_MODE) && (PURE_A_MODE != mMacMode) && (pExtRates)){
        elemLen = pExtRates->buf[1]+2;
        memcpy(&body[len], (U8 *)pExtRates, elemLen); //Extended rates
        len += elemLen;
    }	

    pf->bodyLen = len;		

}	


void mkProbeRspFrm(FrmDesc_t* pfrmDesc, MacAddr_t *addr1, U16 BcnInterval, 
        U16 Cap, Element *pSsid, Element *pSupRates, Element *pDsParms, 
        Element *pExtRates, Element *pWpa, U8 vapId)

{
    struct zd1205_private *macp=g_dev->priv;

    U8 *body;
    U8 elemLen;
    U16 len;
    Frame_t *pf = pfrmDesc->mpdu;

    setFrameType(pf, ST_PROBE_RSP);
    pf->body = pfrmDesc->buffer;
    body = pf->body;
    setAddr1(pf, addr1);
    setAddr2(pf, &dot11MacAddress);
    setAddr3(pf, &mBssId);
    pf->HdrLen = MAC_HDR_LNG;	

    body[8] = BcnInterval & 0xff;	//BcnPeriod
    body[9] = (BcnInterval & 0xff00) >> 8;
    body[10] = Cap & 0xff;			//Cap
    body[11] = (Cap & 0xff00) >> 8;

    len = 12;
    elemLen = pSsid->buf[1]+2;
    memcpy(&body[len], (U8 *)pSsid, elemLen); //SSID
    len += elemLen;

    elemLen = pSupRates->buf[1]+2;

    memcpy(&body[len], (U8 *)pSupRates, elemLen); //Suported rates
    len += elemLen;

    elemLen = pDsParms->buf[1]+2;
    memcpy(&body[len], (U8 *)pDsParms, elemLen); //Extended rates
	len += elemLen;
	
	if ((mMacMode != PURE_B_MODE)&& (mMacMode != PURE_A_MODE) && (pExtRates)){
		elemLen = pExtRates->buf[1]+2;
		memcpy(&body[len], (U8 *)pExtRates, elemLen); //Extended rates
		len += elemLen;
	}	
#if 0
	if (((mDynKeyMode == DYN_KEY_TKIP) || (mDynKeyMode == DYN_KEY_AES))  && (pWpa)){
		elemLen = pWpa->buf[1]+2;
		memcpy(&body[len], (U8 *)pWpa, elemLen); //WPA IE
		len += elemLen;
	}
#endif
	//if (((mDynKeyMode == DYN_KEY_TKIP) || (mDynKeyMode == DYN_KEY_AES))  && (pWpa)){
	if (macp->cardSetting.WPAIeLen)
	{
		//elemLen = pWpa->buf[1]+2;
		//memcpy(&body[len], (U8 *)pWpa, elemLen); //WPA IE
		memcpy(&body[len], macp->cardSetting.WPAIe, macp->cardSetting.WPAIeLen);
		len += macp->cardSetting.WPAIeLen;
	}
	
	pf->bodyLen = len;			
}	


void mkDisAssoc_DeAuthFrm(FrmDesc_t* pfrmDesc, TypeSubtype subType, MacAddr_t *addr1, 
	U16 Reason, U8 vapId)
{
	U8 *body;
	Frame_t *pf = pfrmDesc->mpdu;
	
	setFrameType(pf, subType);
	pf->body = pfrmDesc->buffer;
	body = pf->body;
	setAddr1(pf, addr1);
	setAddr2(pf, &dot11MacAddress);
	setAddr3(pf, &mBssId);
	pf->HdrLen = MAC_HDR_LNG;	
	
	body[0] = Reason & 0xff;	//Reason Code
	body[1] = (Reason & 0xff00) >> 8;	
	
	pf->bodyLen = 2;	
}	 	


void sendProbeRspFrm(MacAddr_t *addr1, U16 BcnInterval, U16 Cap, 
	Element *pSsid, Element *pSupRates, Element *pDsParms, 
	Element *pExtRates, Element *pWpa, U8 vapId)
{
	Signal_t *signal;
	FrmDesc_t *pfrmDesc;
	
	if ((signal = allocSignal()) == NULL)  
		return;
		
	if ((pfrmDesc = allocFdesc()) == NULL){
		freeSignal(signal);
		return;
	}	
	
	mkProbeRspFrm(pfrmDesc, addr1, BcnInterval, Cap, pSsid, pSupRates, pDsParms, 
		pExtRates, pWpa, vapId);		
	sendMgtFrame(signal, pfrmDesc);
}	
	
	
void mkProbeReqFrm(FrmDesc_t* pfrmDesc, MacAddr_t *addr1, Element *pSsid, Element *pSupRates, 
	Element *pExtRates, Element *pWpa, U8 vapId)
{
	U8 *body;
	U8 elemLen;
	U16 len;
	Frame_t *pf = pfrmDesc->mpdu;
	
	setFrameType(pf, ST_PROBE_REQ);
	pf->body = pfrmDesc->buffer;
	body = pf->body;
	setAddr1(pf, addr1);
	setAddr2(pf, &dot11MacAddress);
	setAddr3(pf, &dot11BCAddress);
	pf->HdrLen = MAC_HDR_LNG;	
	
	len = 0;
	if (pSsid->buf[1] > 0){
		elemLen = pSsid->buf[1]+2;

		memcpy(&body[len], (U8 *)pSsid, elemLen); //Extended rates
		len += elemLen;
	} else {
		body[0] = pSsid->buf[0];
		body[1] = 0; //broadcast SSID
		len += 2;
	}		
	
	elemLen = pSupRates->buf[1]+2;
	memcpy(&body[len], (U8 *)pSupRates, elemLen); //Extended rates
	len += elemLen;
	
	if ((mMacMode != PURE_A_MODE) && (mMacMode != PURE_B_MODE) && (pExtRates)){
		elemLen = pExtRates->buf[1]+2;
		memcpy(&body[len], (U8 *)pExtRates, elemLen); //Extended rates
		len += elemLen;
	}	

	if ((mDynKeyMode == DYN_KEY_TKIP)  && (pWpa)){
		elemLen = pWpa->buf[1]+2;
		memcpy(&body[len], (U8 *)pWpa, elemLen); //WPA IE
		len += elemLen;
	}
	
	pf->bodyLen = len;			
}		


void mkRe_AsocReqFrm(FrmDesc_t* pfrmDesc, TypeSubtype subType, MacAddr_t *addr1, 
	U16 Cap, U16 LisInterval, MacAddr_t *oldAP, Element *pSsid, Element *pSupRates, 
	Element *pExtRates, Element *pWpa, U8 vapId)

{
	U8 *body;
	U8 elemLen;
	U16 len;
	Frame_t *pf = pfrmDesc->mpdu;
	
	setFrameType(pf, subType);
	pf->body = pfrmDesc->buffer;
	body = pf->body;
	setAddr1(pf, addr1);
	setAddr2(pf, &dot11MacAddress);
	setAddr3(pf, &mBssId);
	pf->HdrLen = MAC_HDR_LNG;		
	
	body[0] = Cap & 0xff;			//Cap
	body[1] = (Cap & 0xff00) >> 8;
	body[2] = LisInterval & 0xff;	//LisInterval
	body[3] = (LisInterval & 0xff00) >> 8;
	len = 4;
	
	if (subType == ST_REASOC_REQ){
		memcpy(&body[4], oldAP, 6);
		len = 10;
	}
	
	elemLen = pSsid->buf[1]+2;
	memcpy(&body[len], (U8 *)pSsid, elemLen); 	//SSID
	len += elemLen;		
#if ZDCONF_LP_SUPPORT == 1
    if(pdot11Obj->LP_MODE || pdot11Obj->BURST_MODE)
    {
        BssInfo_t *bs=NULL;
        bs=zd1212_bssid_to_BssInfo(mBssId.mac);
        if(bs != NULL)
        {
            body[len++] = EID_ZYDAS;
            body[len++] = 7;
            body[len++] = (U8)(ZDOUI_TURBO);
            body[len++] = (U8)(ZDOUI_TURBO >> 8);
            body[len++] = (U8)(ZDOUI_TURBO >> 16);
            body[len++] = 0; //OUI Type
            body[len++] = 0; //OUI SubType
            body[len++] = 1; //Version
            body[len] = 0;
            if(bs->zdIE_BURST.buf[0] == EID_ZYDAS)
            {
                if(bs->zdIE_BURST.buf[8] & BIT_7)
                    body[len] |= pdot11Obj->BURST_MODE;
            }

            if(bs->zdIE_AMSDU.buf[0] == EID_ZYDAS)
            {
                if(bs->zdIE_AMSDU.buf[8] & BIT_0)
                    body[len] |= (pdot11Obj->LP_MODE?BIT_1:0);
            }
            len++;
        }
    }


#endif


#ifdef DEBUG_DUMP_ASSOC_REQ
        zd1205_dump_data("SSID element:", (U8*) &body[len-elemLen], elemLen);
#endif
	
	elemLen = pSupRates->buf[1]+2;
	memcpy(&body[len], (U8 *)pSupRates, elemLen); //Support Rates
	len += elemLen;
#ifdef DEBUG_DUMP_ASSOC_REQ
        zd1205_dump_data("SupportedRate element:", (U8*) &body[len-elemLen], elemLen);
#endif

	if ((mMacMode != PURE_B_MODE) && (mMacMode != PURE_A_MODE)&& (pExtRates)){
		elemLen = pExtRates->buf[1]+2;
		memcpy(&body[len], (U8 *)pExtRates, elemLen); //Extended rates
		len += elemLen;
	}

	// WPA IE
	if (pWpa->buf[1] != 0) {
		elemLen = pWpa->buf[1]+2;
		memcpy(&body[len], (U8 *)pWpa, elemLen); // WPA IE
		len += elemLen;
	}
	
	pf->bodyLen = len;		
}		

BOOLEAN sendPsPollFrame(Signal_t *signal, FrmDesc_t *pfrmDesc, MacAddr_t *addr1, U16 aid)
{
	FrmInfo_t *pfrmInfo;
	Frame_t *pf = pfrmDesc->mpdu;
	
	setFrameType(pf, ST_PS_POLL);
	setAid(pf, aid);
	setAddr1(pf, addr1);
	setAddr2(pf, &dot11MacAddress);
	pf->HdrLen = 16;	
	pf->bodyLen = 0;
    
	pfrmDesc->ConfigSet |= PS_POLL_SET;
	pfrmDesc->ConfigSet &= ~INTRA_BSS_SET;
	pfrmDesc->ConfigSet &= ~EAPOL_FRAME_SET;
	pfrmDesc->pHash = NULL;
	signal->buf = NULL;
	signal->bDataFrm = 0;
	//pfrmDesc->bDataFrm = 0;
    
	pfrmInfo = &signal->frmInfo;
	pfrmInfo->frmDesc = pfrmDesc; //make connection for signal and frmDesc
	return SendPkt(signal, pfrmDesc, TRUE);
}	 


BOOLEAN sendNullDataFrame(Signal_t *signal, FrmDesc_t *pfrmDesc, MacAddr_t *addr1)
{
	Frame_t *pf = pfrmDesc->mpdu;
	
	setFrameType(pf, ST_NULL_FRAME);
	pf->header[1] = TO_DS_BIT;

	if (mPwrState){
		pf->header[1] |= PW_SAVE_BIT;
	}	
	else
		pf->header[1] &= ~PW_SAVE_BIT;	

	setAddr1(pf, addr1);
	setAddr2(pf, &dot11MacAddress);
	setAddr3(pf, &mBssId);
	pf->HdrLen = MAC_HDR_LNG;	
	pf->bodyLen = 0;
	
	pfrmDesc->ConfigSet &= ~INTRA_BSS_SET;
	pfrmDesc->ConfigSet &= ~EAPOL_FRAME_SET;
	pfrmDesc->pHash = NULL;
	signal->buf = NULL;
	signal->bDataFrm = 1;

	//pfrmDesc->bDataFrm = 0;
	mkFragment(signal, pfrmDesc, NULL);
	return SendPkt(signal, pfrmDesc, TRUE);
}	 


U8 RateConvert(U8 rate)
{
#if defined(OFDM)
	switch (rate)
	{ 
		case 2  :	return 0;  // 1M
		case 4  :	return 1;  // 2M
		case 11 :	return 2;  // 5.5M
		case 22 :	return 3;  // 11M
		case 12 :	return 4;  // 6M
		case 18 :	return 5;  // 9M
		case 24 :	return 6;  // 12M
		case 36 :	return 7;	// 18M
		case 48 :	return 8;	// 24M
		case 72 :	return 9;	// 36M
		case 96 :	return 0xa;	// 48M
		case 108:	return 0xb;	// 54M
	}
#else	
	switch (rate)
	{ 
		case 2  :  return 0;  // 1M
		case 4  :  return 1;  // 2M
		case 11 :  return 2;  // 5.5M
		case 22 :  return 3;  // 11M
		case 33 :  return 4;  // 16.5M
		case 44 :  return 5;  // 22M
		case 55 :  return 6;  // 27.5M
#if defined(ECCK_60_5)
		case 66 :  return 7;  // 33M
		case 77 :  return 8;  // 38.5M
		case 88 :  return 9;  // 44M
		case 99 :  return 10; // 49.5M
		case 110:  return 11; // 55M
		case 121:  return 12; // 60.5M
#endif
	}
#endif

	return 3;	// 11M
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -