亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? prism2.c

?? avr庫函數(shù),方便你加到你的系統(tǒng)里!!! !!
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*! \file prism2.c \brief Prism2 802.11b Wireless-LAN Interface Driver. */
//*****************************************************************************
//
// File Name	: 'prism2.c'
// Title		: Prism2 802.11b Wireless-LAN Interface Driver
// Author		: Pascal Stang
// Created		: 12/27/2004
// Revised		: 1/7/2005
// Version		: 0.1
// Target MCU	: Atmel AVR series
// Editor Tabs	: 4
//
// Description	: This driver provides initialization and transmit/receive
//		functions for the Prism2 802.11b Wireless-LAN Controller.
//
//*****************************************************************************

#include <avr/io.h>
#include <avr/interrupt.h>
#include <string.h>

#include "global.h"
#include "timer.h"
#include "rprintf.h"
#include "debug.h"

#include "net.h"
#include "prism2.h"

// include configuration
#include "prism2conf.h"

u16 TxHeader[34];
void nicInit(void)
{
	prism2Init();
}

void nicSend(unsigned int len, unsigned char* packet)
{
	u16 i;
	u16 txfid;
	u08 stat;
	// request free buffer space to store outgoing frame
	prism2Command(PRISM2_CMD_ALLOC, len+44+14+6);
	// wait for buffer to be allocated
	while( !(prism2Read16(PRISM2_REG_EVSTAT) & PRISM2_EVENT_ALLOC) );
	// get the buffer FID
	txfid = prism2Read16(PRISM2_REG_ALLOCFID);
	// ACK the alloc event
	prism2Write16(PRISM2_REG_EVACK, PRISM2_EVENT_ALLOC);

//	rprintf("PRISM2: TxFID=0x");
//	rprintfu16(txfid);
//	rprintfCRLF();

	// adjust packet length because MAC addresses and type
	// will be written seperately from packet payload
	len-=14;

	// write the outgoing frame to BAP
	// begin with control structure
	prism2SetupTxHeader(TxHeader);
	
	// write dest and src MAC addresses
	for(i=0;i<6;++i)
		TxHeader[23+i] = packet[i*2+1]<<8 | packet[i*2];
	// write length
	TxHeader[29] = htons(len+8);
	// write type
	TxHeader[33] = packet[13]<<8 | packet[12];

//	debugPrintHexTable(34*2, (u08*)TxHeader);
//	rprintfCRLF();
//	debugPrintHexTable(len, &packet[14]);

	// write Tx header out to BAP
	prism2WriteBAP0(txfid, 0, TxHeader, 34);
	// write packet out to BAP
	prism2WriteBAP0(txfid, 68, (u16*)&packet[14], (len+1)>>1);
	// issue transmit command	
	stat = prism2Command(PRISM2_CMD_TX, txfid);
	if(stat)
		rprintf("Transmit failed: 0x%x\r\n", stat);
	// do cleanup
	prism2EventCheck();
}

void nicGetMacAddress(u08* macaddr)
{
	prism2GetMacAddress(macaddr);
}

void nicSetMacAddress(u08* macaddr)
{
	// not yet supported
}

void nicRegDump(void)
{
	prism2CardRegDump();
	prism2RegDump();
}

void prism2SetupTxHeader(u16* header)
{
	u16 i;
    
	// clear out header
	for(i=0;i<22;i++)
		header[i] = 0x00;

	// set TxRate and retry count
	header[5] = (0<<8) | 0;
	// 0x00 = automatic selection
	// 0x0A = 10  = 1.0Mbit/s
	// 0x14 = 20  = 2.0Mbit/s
	// 0x37 = 55  = 5.5Mbit/s
	// 0x6E = 110 = 11 Mbit/s

	// set TxControl
	header[6] = 0x0004;

	// write length
	// (not really needed since card will pull info from 802.3 header)
	//TxHeader[22] = len+8;

	// fill in 802.3 header fields
	TxHeader[30] = 0xAAAA;
	TxHeader[31] = 0x0003;
	TxHeader[32] = 0x0000;

	// src mac address @ byte offset 52
}

void prism2EventCheck(void)
{
	unsigned int evstat_data;

	evstat_data = prism2Read16(PRISM2_REG_EVSTAT);
	
	if(evstat_data & PRISM2_EVENT_TX)
	{
		prism2Write16(PRISM2_REG_EVACK,PRISM2_EVENT_TX);
	}

	if(evstat_data & PRISM2_EVENT_TXEXEC)
	{
		prism2Write16(PRISM2_REG_EVACK,PRISM2_EVENT_TXEXEC);
	}

	if(evstat_data & PRISM2_EVENT_ALLOC)
	{
		prism2Write16(PRISM2_REG_EVACK, 0x0002);
	}

	if(evstat_data & PRISM2_EVENT_CMD)
	{
		prism2Write16(PRISM2_REG_EVACK, PRISM2_EVENT_CMD);
	}

	if(evstat_data & PRISM2_EVENT_INFO)
	{
		prism2Read16(PRISM2_REG_INFOFID);
		prism2Write16(PRISM2_REG_EVACK, PRISM2_EVENT_INFO);
	}

	if(evstat_data & PRISM2_EVENT_INFDROP)
	{
		prism2Write16(PRISM2_REG_EVACK, PRISM2_EVENT_INFDROP);
	}

	if(evstat_data & PRISM2_EVENT_WTERR)
	{
		prism2Write16(PRISM2_REG_EVACK, PRISM2_EVENT_WTERR);
	}
}


unsigned int nicPoll(unsigned int maxlen, unsigned char* packet)
{
	u16 rxfid=0;
	u16 packetLength=0;

	// check if packets have been received
	if(prism2Read16(PRISM2_REG_EVSTAT) & PRISM2_EVENT_RX)
	{
		// we have a receive event
		// get RxFID
		rxfid = prism2Read16(PRISM2_REG_RXFID);
		// read the packet length
		prism2ReadBAP0(rxfid, 44, &packetLength, 1);
	}

	// if there's no packet or an error - exit
	if( !packetLength )
		return 0;
	
	// drop anything too big for the buffer
	if( packetLength > maxlen )
	{
		// ACK the receive event to finish up
		prism2Write16(PRISM2_REG_EVACK, PRISM2_EVENT_RX);
		return 0;
	}

	// packet is available, retrieve data
	// this is a hack: while reading in data,
	// convert 802.2/3 header to ethernet header
	// first get dest and src MAC addresses
	prism2ReadBAP0(rxfid, 46, (u16*)&packet[0], 6);
	// skip length, snap, and ctrl fields
	// begin data copy again at type field
	prism2ReadBAP0(rxfid, 46+12+8, (u16*)&packet[12], packetLength-6);
	// ACK the receive event to finish up
	prism2Write16(PRISM2_REG_EVACK, PRISM2_EVENT_RX);

	return packetLength;
}

void prism2InitPorts(void)
{
#if NIC_CONNECTION == MEMORY_MAPPED
  	// enable external SRAM interface - no wait states
  	sbi(MCUSR, SRE);
#else
	// set address port to output
	outb(PRISM2_ADDRESS_DDR, PRISM2_ADDRESS_MASK);
	outb(PRISM2_HADDRESS_DDR, PRISM2_HADDRESS_MASK);
    
	// set data port to input with pull-ups
	outb(PRISM2_DATA_DDR, 0x00);
	outb(PRISM2_DATA_PORT, 0xFF);

	// initialize the control port read and write pins to de-asserted
	sbi( PRISM2_CONTROL_PORT, PRISM2_CONTROL_IORD );
	sbi( PRISM2_CONTROL_PORT, PRISM2_CONTROL_IOWR );
	sbi( PRISM2_CONTROL_PORT, PRISM2_CONTROL_MEMRD );
	sbi( PRISM2_CONTROL_PORT, PRISM2_CONTROL_MEMWR );
	// set the read and write pins to output
	sbi( PRISM2_CONTROL_DDR, PRISM2_CONTROL_IORD );
	sbi( PRISM2_CONTROL_DDR, PRISM2_CONTROL_IOWR );
	sbi( PRISM2_CONTROL_DDR, PRISM2_CONTROL_MEMRD );
	sbi( PRISM2_CONTROL_DDR, PRISM2_CONTROL_MEMWR );
#endif
	// set reset pin to output
	sbi( PRISM2_RESET_DDR, PRISM2_RESET_PIN );

	// clear -REG pin
	sbi(DDRB, 6);
	cbi(PORTB, 6);
	// setup IREQ pin
	cbi(DDRB, 7);
	sbi(PORTB, 7);
}
void prism2Init(void){
	u08 result;
	u16 buffer[20];

//	rprintf("Init ports\r\n");
	prism2InitPorts();

	// assert hardware reset
	sbi( PRISM2_RESET_PORT, PRISM2_RESET_PIN );
	// wait
	delay_ms(10);
	// release hardware reset
	cbi( PRISM2_RESET_PORT, PRISM2_RESET_PIN );
	delay_ms(100);

/*
	// soft-reset card
	prism2WriteMem(0x3E0+PCMCIA_ATTR_COR, 0x80);
	delay_ms(10);
	prism2WriteMem(0x3E0+PCMCIA_ATTR_COR, 0x00);
	// wait until soft-reset is done
	delay_ms(500);

	// set 8-bit PCMCIA I/O mode
	prism2WriteMem(0x3E0+PCMCIA_ATTR_CSR, 0x20);

	prism2WriteMem(0x3E0+PCMCIA_ATTR_CSR, 0x04);
	timerPause(1000);
	prism2WriteMem(0x3E0+PCMCIA_ATTR_CSR, 0x00);
*/
	// enable PCMCIA I/O mode
	prism2WriteMem(0x3E0+PCMCIA_ATTR_COR, prism2ReadMem(0x3E0+PCMCIA_ATTR_COR) | 0x01);
//	prism2CardRegDump();

	rprintf("Prism2 Initializing...\r\n");
	if( (result = prism2Command(PRISM2_CMD_INIT,0)) )
	{
		rprintf("Prism2 Initialization Failure\r\n");
		rprintf("Result Code = %x\r\n",result);
	}
	
	rprintf("Prism2 Initialized\r\n");

	// set SSID
	prism2SetSSID("airdrop");

	// set max packet size
	buffer[0] = 0x0002;
	buffer[1] = PRISM2_RID_CNFMAXDATALEN;
	buffer[2] = 0x05DC;
	prism2WriteRID(PRISM2_RID_CNFMAXDATALEN, 0, buffer, 3);

	// set operating mode / port type
	buffer[0] = 0x0002;
	buffer[1] = PRISM2_RID_CNFPORTTYPE;
	//buffer[2] = 0x0000; // IBSS
	buffer[2] = 0x0001; // BSS
	prism2WriteRID(PRISM2_RID_CNFPORTTYPE, 0, buffer, 3);

	// set channel
//	buffer[0] = 0x0002;
//	buffer[1] = 0xFC03;
//	buffer[2] = 0x0001;
//	prism2WriteRID(0xFC00, 0, buffer, 3);

	// enable the interface
	prism2Command(PRISM2_CMD_ENABLE_MAC0,0);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级一区在线视频先锋| 另类综合日韩欧美亚洲| 91精品国产一区二区三区香蕉| 毛片一区二区三区| 亚洲视频精选在线| 日韩视频在线观看一区二区| 色综合天天综合给合国产| 麻豆91免费看| 综合婷婷亚洲小说| 久久久久国产精品人| 欧美揉bbbbb揉bbbbb| 波多野结衣亚洲| 青草国产精品久久久久久| 亚洲乱码中文字幕综合| 久久久久久久久久久久久久久99| 欧美视频第二页| 不卡的电视剧免费网站有什么| 免费成人小视频| 亚洲成av人综合在线观看| 中文字幕亚洲一区二区av在线| 欧美麻豆精品久久久久久| 99久久国产综合色|国产精品| 欧美视频在线一区| 国产1区2区3区精品美女| 天天爽夜夜爽夜夜爽精品视频| 中文字幕亚洲不卡| 欧美激情一区二区三区全黄| 精品国产成人在线影院| 91精品欧美综合在线观看最新 | 欧美一区二区三区视频免费播放| 成人黄色小视频在线观看| 激情图片小说一区| 日韩精品电影一区亚洲| 亚洲午夜av在线| 亚洲综合男人的天堂| 中文字幕在线视频一区| 中文av字幕一区| 中文字幕乱码亚洲精品一区| 国产性天天综合网| 久久久亚洲国产美女国产盗摄| 日韩欧美亚洲国产另类| 9191精品国产综合久久久久久 | 久久蜜桃一区二区| 日韩一区二区免费高清| 在线不卡一区二区| 欧美精品在线观看一区二区| 在线成人高清不卡| 91精品国产色综合久久ai换脸| 欧美色综合久久| 欧美日韩精品一区二区天天拍小说 | 国产三区在线成人av| 久久亚洲一级片| 久久综合久久鬼色| 久久久99久久精品欧美| 国产日韩v精品一区二区| 久久久久久久一区| 久久亚洲精华国产精华液| 国产午夜精品一区二区三区嫩草| 国产偷国产偷亚洲高清人白洁| 国产亚洲欧美中文| 亚洲欧洲av色图| 一区二区三区日韩欧美| 五月激情六月综合| 麻豆高清免费国产一区| 国产精品一区二区x88av| 成人免费观看av| 99在线精品免费| 在线亚洲免费视频| 91精品国产综合久久久久久| 精品欧美一区二区在线观看| 日本一区二区免费在线| 亚洲免费在线观看| 午夜精品123| 国产精品一级在线| 91亚洲精华国产精华精华液| 欧美视频完全免费看| 久久丝袜美腿综合| 亚洲乱码国产乱码精品精的特点 | 亚洲成人在线网站| 黑人精品欧美一区二区蜜桃 | 日本成人在线视频网站| 国产一级精品在线| 一本到一区二区三区| 3atv一区二区三区| 欧美激情一区二区三区在线| 亚洲高清久久久| 国产九色精品成人porny| 91视视频在线观看入口直接观看www| 欧美日韩在线免费视频| 国产午夜精品一区二区三区四区| 夜夜嗨av一区二区三区网页 | 在线观看欧美日本| 亚洲精品一区二区三区蜜桃下载| 国产精品久久一卡二卡| 日本不卡中文字幕| 波多野洁衣一区| 精品少妇一区二区三区在线播放| 中文字幕一区二区三区四区不卡| 青青草一区二区三区| 99国产精品99久久久久久| 欧美一区二区视频网站| 亚洲欧美一区二区久久 | 91一区二区在线观看| 日韩欧美一区在线观看| 亚洲免费av高清| 国产福利视频一区二区三区| 91精品国产综合久久香蕉麻豆| 综合久久久久综合| 国产在线精品不卡| 日韩一区二区三区免费看| 亚洲免费在线观看| 粉嫩在线一区二区三区视频| 一级精品视频在线观看宜春院| 精品一二线国产| 欧美性一二三区| 国产精品成人免费精品自在线观看 | 欧美一区二区女人| 亚洲综合成人在线视频| 粉嫩高潮美女一区二区三区| 欧美mv和日韩mv国产网站| 亚洲v日本v欧美v久久精品| 99久久精品国产导航| 中文字幕乱码久久午夜不卡 | 欧美大片在线观看一区二区| 亚洲一区二区三区四区中文字幕| 成人精品视频一区二区三区 | 亚洲精品国产精华液| 成人听书哪个软件好| 精品久久久久一区二区国产| 日韩成人精品在线观看| 欧美精品粉嫩高潮一区二区| 一区二区久久久久久| 色香蕉久久蜜桃| 亚洲精品国产一区二区精华液| 91丨国产丨九色丨pron| 国产精品福利电影一区二区三区四区| 成人自拍视频在线| 欧美激情一区在线| 不卡免费追剧大全电视剧网站| 国产精品久久久久一区| 成人性生交大片| 国产精品乱码一区二区三区软件 | 国产精品久久综合| 91亚洲永久精品| 亚洲一区二区精品3399| 欧美亚洲精品一区| 午夜在线成人av| 91麻豆精品国产91久久久久| 日本 国产 欧美色综合| 日韩欧美国产不卡| 激情亚洲综合在线| 国产日产欧美一区| 99久久伊人精品| 国产成a人亚洲精品| 国产网站一区二区三区| 成人国产一区二区三区精品| 成人欧美一区二区三区白人| 91老师片黄在线观看| 一区二区三区日韩欧美| 欧美精品亚洲二区| 免费高清在线一区| 久久精品一区八戒影视| 91免费精品国自产拍在线不卡| 亚洲欧美日韩国产综合在线| 欧美日韩一区二区在线观看| 免费在线一区观看| 久久久国产综合精品女国产盗摄| 丁香五精品蜜臀久久久久99网站| 亚洲欧洲日产国产综合网| 欧美在线视频不卡| 久久精品国产精品青草| 国产精品第13页| 51精品国自产在线| 国产乱人伦偷精品视频不卡| 亚洲美女屁股眼交| 日韩欧美二区三区| av爱爱亚洲一区| 日韩精品乱码av一区二区| 久久一夜天堂av一区二区三区| av一区二区三区四区| 五月综合激情婷婷六月色窝| 337p粉嫩大胆色噜噜噜噜亚洲| 91视频91自| 蜜桃精品在线观看| 亚洲欧美国产毛片在线| 日韩欧美国产精品| 色88888久久久久久影院野外| 蜜臀av一级做a爰片久久| 国产亚洲一区字幕| 欧美日韩中文字幕精品| 国产永久精品大片wwwapp| 一区二区三区丝袜| 久久久五月婷婷| 欧美日韩电影在线| 成人激情av网| 精品在线一区二区| 亚洲国产综合色| 国产精品色一区二区三区| 日韩欧美中文字幕制服| 国产精品免费久久|