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

📄 wlan_phoenix.c

📁 利用PIC单片机来驱动WLAN卡
💻 C
📖 第 1 页 / 共 5 页
字号:
			mins = 0;
			++hours;
		}
		if(hours == 24)
		{
			hours = 0;
		}
	}

  if(RC1IF)
 {
   data = RCREG1;                   // read the received data 
                                // calculate buffer index 
   tmphead = ( USART_RxHead + 1 ) & USART_RX_BUFFER_MASK;
   USART_RxHead = tmphead;        // store new index 

   if ( tmphead == USART_RxTail )
   {
     // ERROR! Receive buffer overflow 
   }
                                
   USART_RxBuf[tmphead] = data;   // store received data in buffer 
  }

  
  if(TRMT)
  {
                                // check if all data is transmitted  
   if ( USART_TxHead != USART_TxTail )
   {
                                // calculate buffer index  
     tmptail = ( USART_TxTail + 1 ) & USART_TX_BUFFER_MASK;
     USART_TxTail = tmptail;      // store new index  

    TXREG1 = USART_TxBuf[tmptail];  // start transmition  
   }
   else
   {
     TX1IE = 0;         // disable TX interrupt  
   }
  }
}

int recvchar(void)
{
  unsigned char tmptail;
                                // wait for incomming data  
  while ( USART_RxHead == USART_RxTail );
                                // calculate buffer index  
  tmptail = ( USART_RxTail + 1 ) & USART_RX_BUFFER_MASK;
  USART_RxTail = tmptail;        // store new index  

  return USART_RxBuf[tmptail];   // return data  
}

int sendchar(int data)
{
  unsigned char tmphead;
                                /* calculate buffer index */
  tmphead = ( USART_TxHead + 1 ) & USART_TX_BUFFER_MASK;
                                /* wait for free space in buffer */
  while ( tmphead == USART_TxTail );
                                /* store data in buffer */
  USART_TxBuf[tmphead] = (unsigned char)data;
  USART_TxHead = tmphead;        /* store new index */

  TX1IE = 1;            /* enable TX interrupt */

  return data;
}

unsigned char CharInQueue(void)
{
  return(USART_RxHead != USART_RxTail);
}
//*******************************************************************************************************
//* Get Free BAP
//*******************************************************************************************************
char get_free_bap(void)
{
 	 unsigned int temp;
	 char rc;
	 
	 rc = 2;	 	  
     temp = rd_cf_io16(Offset1_Register);
	 if(!(temp & BAP1Busy_Bit_Mask))
	  rc = 1;
	 temp = rd_cf_io16(Offset0_Register);
	 if(!(temp & BAP0Busy_Bit_Mask))
	  rc = 0;
	 return(rc);
}	 
//*******************************************************************************************************
//* PHOENIX CONFIGURATION
//*******************************************************************************************************
char phoenix_cfg(unsigned int cmd) 
{
	char rc;
	unsigned int i,j,k;

	switch(cmd)
	{
		case BSS:
			fidrid_buffer[0] = RID_cfgPortType_Length;
			fidrid_buffer[1] = RID_cfgPortType;
			fidrid_buffer[2] = RID_cfgPortType_Infrastructure;
			rc = rid_write(RID_cfgPortType, fidrid_buffer, RID_cfgPortType_Length);
			//if(rc)
	  		 //printf("\r\nrid_write failed with return code %02X",rc);
         	break;
		case IBSS:		
			fidrid_buffer[0] = RID_cfgPortType_Length;
			fidrid_buffer[1] = RID_cfgPortType;
			fidrid_buffer[2] = RID_cfgPortType_IBSS;
			rc = rid_write(RID_cfgPortType, fidrid_buffer, RID_cfgPortType_Length);
			//if(rc)
	  		 //printf("\r\nrid_write failed with return code %02X",rc);
         	break;
			
	    case SSID:
			fidrid_buffer[0] = RID_DesiredSSID_Length;
			fidrid_buffer[1] = RID_cfgDesiredSSID;
			fidrid_buffer[2] = strlen(ssid);
    		j = strlen(ssid);
			i=0;
			k=3;
			while(j > 1)
			{
	 		 fidrid_buffer[k] = (ssid[i+1] << 8) | ssid[i];
	 		 i+=2;
	 		 ++k;
	   		 j-=2; 	
			}
	   		while(j > 0)
			{
	 		 fidrid_buffer[k] = ssid[i];
	 		 --j;	
			}

			rc = rid_write(RID_cfgDesiredSSID,fidrid_buffer,RID_DesiredSSID_Length);
			break;

		case MAX_DATALEN:
			fidrid_buffer[0] = RID_cfgMaxDataLength_Length;
			fidrid_buffer[1] = RID_cfgMaxDataLength;
			fidrid_buffer[2] = RID_cfgMaxDataLength_Value;  //0x05DC - 1500 decimal
			rc = rid_write(RID_cfgMaxDataLength, fidrid_buffer, RID_cfgMaxDataLength_Length);
			break;

		case NIC_RATE:
			fidrid_buffer[0] = RID_TxRateControl_Length;
			fidrid_buffer[1] = RID_TxRateControl;
			fidrid_buffer[2] = RID_TxRateControl_Value_ALL;
			rc = rid_write(RID_TxRateControl, fidrid_buffer, RID_TxRateControl_Length);
			break;

		case WEP_KEYID:
			fidrid_buffer[0] = RID_cfgWEPDefaultKeyID_Length;
			fidrid_buffer[1] = RID_cfgWEPDefaultKeyID;
			fidrid_buffer[2] = RID_cfgWEPDefaultKeyID_Value0;
			rc = rid_write(RID_cfgWEPDefaultKeyID, fidrid_buffer, RID_cfgWEPDefaultKeyID_Length);
			break;

	    case WEP_KEY_64:
			fidrid_buffer[0] = RID_Default64Key_Length;
			fidrid_buffer[1] = RID_cfgDefaultKey0;
    		j = strlen(wepkey);
			i=0;
			k=2;
			while(j > 1)
			{
	 		 fidrid_buffer[k] = (wepkey[i+1] << 8) | wepkey[i];
	 		 i+=2;
	 		 ++k;
	   		 j-=2; 	
			}
	   		while(j > 0)
			{
	 		 fidrid_buffer[k] = wepkey[i];
	 		 --j;	
			}

			rc = rid_write(RID_cfgDefaultKey0,fidrid_buffer,RID_Default128Key_Length);
			break;

	    case WEP_KEY_128:
			fidrid_buffer[0] = RID_Default128Key_Length;
			fidrid_buffer[1] = RID_cfgDefaultKey0;
    		j = strlen(wepkey);
			i=0;
			k=2;
			while(j > 1)
			{
	 		 fidrid_buffer[k] = (wepkey[i+1] << 8) | wepkey[i];
	 		 i+=2;
	 		 ++k;
	   		 j-=2; 	
			}
	   		while(j > 0)
			{
	 		 fidrid_buffer[k] = wepkey[i];
	 		 --j;	
			}

			rc = rid_write(RID_cfgDefaultKey0,fidrid_buffer,RID_Default128Key_Length);
			break;
		
		case WEP_ON:
			fidrid_buffer[0] = RID_cfgWEPFlags_Length;
			fidrid_buffer[1] = RID_cfgWEPFlags;
			fidrid_buffer[2] = RID_cfgWEPFlags_Value_ON;
			rc = rid_write(RID_cfgWEPFlags, fidrid_buffer, RID_cfgWEPFlags_Length);
			break;

		case WEP_OFF:
			fidrid_buffer[0] = RID_cfgWEPFlags_Length;
			fidrid_buffer[1] = RID_cfgWEPFlags;
			fidrid_buffer[2] = RID_cfgWEPFlags_Value_OFF;
			rc = rid_write(RID_cfgWEPFlags, fidrid_buffer, RID_cfgWEPFlags_Length);
			break;

		case WEP_AUTH_SK:
			fidrid_buffer[0] = RID_cfgAuthentication_Length;
			fidrid_buffer[1] = RID_cfgAuthentication;
			fidrid_buffer[2] = RID_cfgAuthentication_Value_SK;
			rc = rid_write(RID_cfgAuthentication, fidrid_buffer, RID_cfgAuthentication_Length);
			break;

		case WEP_AUTH_OS:
			fidrid_buffer[0] = RID_cfgAuthentication_Length;
			fidrid_buffer[1] = RID_cfgAuthentication;
			fidrid_buffer[2] = RID_cfgAuthentication_Value_OS;
			rc = rid_write(RID_cfgAuthentication, fidrid_buffer, RID_cfgAuthentication_Length);
			break;

		case WEP_AUTH_ALL:
			fidrid_buffer[0] = RID_cfgAuthentication_Length;
			fidrid_buffer[1] = RID_cfgAuthentication;
			fidrid_buffer[2] = RID_cfgAuthentication_Value_OK;
			rc = rid_write(RID_cfgAuthentication, fidrid_buffer, RID_cfgAuthentication_Length);
			break;

		default:		
			rc = 1;
			break;
	}
	return(rc);
}
//*******************************************************************************************************
//* rid_write
//*******************************************************************************************************
char rid_write(unsigned int fidrid, unsigned int* buffer, unsigned int count)
{
	char rc;
	
	rc = bap_write(fidrid, 0x0000, (char*) buffer, (count+1)<<1);
	rc = send_command(Access_Cmd | AccessWrite_Mask, fidrid);
	return(rc);
}

//*******************************************************************************************************
//* bap_write
//*******************************************************************************************************
char bap_write(unsigned int fidrid,unsigned int offset,char* buffer, unsigned int count)
{
	unsigned int temp;
	char rc,bapnum;
	
	bapnum = get_free_bap();
	rc = 0;
	switch(bapnum)
	{
	 case 0:
	  wr_cf_io16(fidrid,Select0_Register);
	  wr_cf_io16(offset,Offset0_Register);
	  do{
		 temp = rd_cf_io16(Offset0_Register);
	    }while(temp & BAP0Busy_Bit_Mask);
	  temp = rd_cf_io16(Offset0_Register);
	  if(temp & BAP0Err_Bit_Mask)
	   rc=1;
	  else
	   wr_cf_data(BAP0,buffer,count);
	  break;
	  
	  case 1:
       wr_cf_io16(fidrid,Select1_Register);
	   wr_cf_io16(offset,Offset1_Register);
	   do{
		  temp = rd_cf_io16(Offset1_Register);
		 }while(temp & BAP1Busy_Bit_Mask);
	   temp = rd_cf_io16(Offset1_Register);
	   if(temp & BAP1Err_Bit_Mask)
	    rc=1;
	   else
		wr_cf_data(BAP1,buffer,count);
       break;	
	}
	
	return(rc);
}

//*******************************************************************************************************
//* rid_read
//*******************************************************************************************************
char rid_read(unsigned int rid)
{
	unsigned int temp;
	char rc;
	
	rc = 0;
	temp = send_command(Access_Cmd,rid);
	//if (temp)
	//	printf("\r\nrid_read: Access read RID: %04X command sent with return code: %02X", rid, temp);
   //else
   	//printf("\r\nrid_read: Access read command sent successfully, try reading RID: %04X", rid);

	temp = fid_read(rid);		
	if (temp)
		rc=1;
  
	return(rc);
}

//*******************************************************************************************************
//* fid_read
//*******************************************************************************************************
char fid_read(unsigned int fid)
{
	unsigned int temp;
	unsigned int fidlen;
	unsigned int fidpointer;
	char rc,bapnum;

	bapnum = get_free_bap();
	rc = 0;
	switch(bapnum)
	{
	 case 0:
	  wr_cf_io16(fid,Select0_Register);
	  wr_cf_io16(0x0000,Offset0_Register);
	  do{
		 temp = rd_cf_io16(Offset0_Register);
	    }while(temp & BAP0Busy_Bit_Mask);
	  temp = rd_cf_io16(Offset0_Register);
	  if(temp & BAP0Err_Bit_Mask)
	   rc = 1;
	  else
	  {
	   fidlen = rd_cf_io16(Data0_Register);
       fidrid_buffer[0] = fidlen;
	    if(fidlen)
		 {
		  for(fidpointer=0;fidpointer<fidlen;fidpointer++)
		   fidrid_buffer[fidpointer+1] = rd_cf_io16(Data0_Register);
	      rc = 0;
	     }
	   }
	 break;
	
	 case 1:
	  wr_cf_io16(fid,Select1_Register);
	  wr_cf_io16(0x0000,Offset1_Register);
	  do{
		 temp = rd_cf_io16(Offset1_Register);
		}while(temp & BAP1Busy_Bit_Mask);
      temp = rd_cf_io16(Offset1_Register);
	  if(temp & BAP1Err_Bit_Mask)
       rc = 1;
	  else
      {
	   fidlen = rd_cf_io16(Data1_Register);
	   fidrid_buffer[0] = fidlen;
	   if(fidlen)
	   {
		for(fidpointer=0;fidpointer<fidlen;fidpointer++)
	    {
		 fidrid_buffer[fidpointer+1] = rd_cf_io16(Data1_Register);
	    }
	   } 
	  }
	  break;
	  default:
	   rc =1 ;
	   break;
	 }  
	return(rc);
}
	
//*******************************************************************************************************
//* rid_string_write
//*******************************************************************************************************
void rid_string_write(unsigned int fidrid, unsigned int ridlen, unsigned int* buffer)
{
	
	unsigned int i,j,k;
	//char tempstring[] = "PHOENIX_NETWORK";
	//char tempstring[] = "";

	fidrid_buffer[0] = ridlen;
	fidrid_buffer[1] = fidrid;
	fidrid_buffer[2] = strlen(ssid);
    j = strlen(ssid);
	i=0;
	k=3;
	while(j > 1)
	{
	 fidrid_buffer[k] = (ssid[i+1] << 8) | ssid[i];
	 i+=2;
	 ++k;
	 j-=2; 	
	}
	while(j > 0)
	{
	 fidrid_buffer[k] = ssid[i];
	 --j;	
	}

	rid_write(fidrid,buffer,ridlen);
	
}

⌨️ 快捷键说明

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