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

📄 dongle.c

📁 网络驱动开发
💻 C
📖 第 1 页 / 共 2 页
字号:
		if(Dingle[Com->XcvrNum].WORD0.bits.TrcvrCode == Hp2300)
		{
		    SetHpMuxDongle(Com->ComPort,0);
		    return(TRUE);
		}
		if(Dingle[Com->XcvrNum].WORD0.bits.TrcvrCode == Temic6000) {
		    SetTemicDongle(Com->ComPort, 0);
		    return(TRUE);
		}
		if(Dingle[Com->XcvrNum].WORD0.bits.TrcvrCode == Temic6500) {
		    SetTemicDongle(Com->ComPort, 0);
		    return(TRUE);
		}
		if(Dingle[Com->XcvrNum].WORD0.bits.TrcvrCode == SharpRY5HD01) {
		    return(TRUE);
		}
		if(Dingle[Com->XcvrNum].WORD0.bits.TrcvrCode == Dell1997) {
		    SetDellDongle(Com->ComPort, 0);
		    return(TRUE);
		}
		if(Dingle[Com->XcvrNum].WORD0.bits.TrcvrCode == Ibm20H2987) {
		    SetIbmDongle(Com->ComPort, 0);
		    return(TRUE);
		}
		break;

	    case   1:	/* Setup MIR mode */
		if(!Dingle[Com->XcvrNum].WORD7.bits.MIR)
		    return(UNSUPPORTED);
		// Set the current mode to the mode requested
		Dingle[Com->XcvrNum].WORD1.bits.CurSelMode = Com->ModeReq;
		Dingle[Com->XcvrNum].WORD0.bits.MVFLAG = 1;
		switch(Dingle[Com->XcvrNum].WORD0.bits.TrcvrCode) {
		    case Hp1100:
			SetHpDongle(Com->ComPort, 1);
			return(TRUE);
		    case Hp2300:
			SetHpMuxDongle(Com->ComPort,1);
			return(TRUE);
		    case Temic6000:
			SetTemicDongle(Com->ComPort, 0);
			return(TRUE);
		    case Temic6500:
			SetTemicDongle(Com->ComPort, 1);
			return(TRUE);
		    case SharpRY5HD01:
			return(TRUE);
		    case Dell1997:
			SetDellDongle(Com->ComPort, 1);
			return(TRUE);
		    case Ibm20H2987:
			SetIbmDongle(Com->ComPort, 1);
			return(TRUE);
		}
		break;

	    case   2:	// Setup FIR mode
		if(!Dingle[Com->XcvrNum].WORD7.bits.FIR)
		    return(UNSUPPORTED);

		// Set the current mode to the mode requested
		Dingle[Com->XcvrNum].WORD1.bits.CurSelMode = Com->ModeReq;
		Dingle[Com->XcvrNum].WORD0.bits.MVFLAG = 1;
		switch(Dingle[Com->XcvrNum].WORD0.bits.TrcvrCode) {
		    case Hp1100:
			SetHpDongle(Com->ComPort, 1);
			return(TRUE);
		    case Hp2300:
			SetHpMuxDongle(Com->ComPort,1);
			return(TRUE);
		    case Temic6000:
		    case Temic6500:
			SetTemicDongle(Com->ComPort, 1);
			return(TRUE);
		    case SharpRY5HD01:
			return(TRUE);
		    case Dell1997:
			SetDellDongle(Com->ComPort, 1);
			return(TRUE);
		    case Ibm20H2987:
			SetIbmDongle(Com->ComPort, 1);
			return(TRUE);
		}
		break;

	    case   3:	// Setup Sharp-IR mode
		if(!Dingle[Com->XcvrNum].WORD7.bits.Sharp_IR)
		    return(UNSUPPORTED);

		// Set the current mode to the mode requested
		Dingle[Com->XcvrNum].WORD1.bits.CurSelMode = Com->ModeReq;
		Dingle[Com->XcvrNum].WORD0.bits.MVFLAG = 1;
		switch(Dingle[Com->XcvrNum].WORD0.bits.TrcvrCode) {
		    case Hp1100:
			SetHpDongle(Com->ComPort, 0);
			return(TRUE);
		    case Hp2300:
			SetHpMuxDongle(Com->ComPort, 1);
			return(TRUE);
		    case Temic6000:
			SetTemicDongle(Com->ComPort, 0);
			return(TRUE);
		    case Temic6500:
			SetTemicDongle(Com->ComPort, 1);
			return(TRUE);
		    case SharpRY5HD01:
			return(TRUE);
		    case Dell1997:
			SetDellDongle(Com->ComPort, 1);
			return(TRUE);
		    case Ibm20H2987:
			SetIbmDongle(Com->ComPort, 1);
			return(TRUE);
		}
		break;

	    default:
		return(UNSUPPORTED);
	}

	return(UNSUPPORTED);
}

//////////////////////////////////////////////////////////////////////////
//									//
// Function:	SetHpMuxDongle						//
//									//
// Description: 							//
//									//
// Input :  Mode = 1 for FIR,MIR and SIR .				//
//	    Mode = 0 for SIR						//
//									//
//////////////////////////////////////////////////////////////////////////

void SetHpMuxDongle(PUCHAR UirPort,int Mode)
{
  if (Mode == 1)
    NSC_WriteBankReg(UirPort,BANK7,4,0x1); //select MIR or FIR
}


//////////////////////////////////////////////////////////////////////////
//									//
// Function:	SetHpDongle						//
//									//
// Description: 							//
//									//
// Input :  Mode = 1 for FIR,MIR and SIR .				//
//	    Mode = 0 for Sharp, CIR_OS					//
//									//
//////////////////////////////////////////////////////////////////////////


void SetHpDongle(PUCHAR UirPort,int Mode)
{
    UCHAR  val;

    if(Mode) {
	//  MIR , FIR and SIR Mode . And Oversampling Low speed
	// Bank 5/offset 4/Bit 4 (AUX_IRRX) = 0
	val = (UCHAR) (NSC_ReadBankReg(UirPort,BANK5,4) & 0xef);
	NSC_WriteBankReg(UirPort,BANK5,4,val);
	NSC_WriteBankReg(UirPort,BANK7,7,0x48);
    }
    else {
	//  Sharp IR , Oversampling Med and hi speed cir
	val =(UCHAR)  NSC_ReadBankReg(UirPort,BANK5,4) | 0x10;
	NSC_WriteBankReg(UirPort,BANK5,4,val);
    }

}



//////////////////////////////////////////////////////////////////////////
//									//
// Function:	Sleep							//
//									//
// Description: 							//
//									//
//  Pauses for a specified number of microseconds.			//
//									//
//////////////////////////////////////////////////////////////////////////

void Sleep( ULONG usecToWait )
{
#ifdef NDIS50_MINIPORT
    do {
	UINT usec = (usecToWait > 8000) ? 8000 : usecToWait;
	NdisStallExecution(usec);
	usecToWait -= usec;
    } while (usecToWait > 0);
#else
    clock_t goal;
    goal = usecToWait + clock();
    while( goal >= clock() ) ;
#endif
}


//////////////////////////////////////////////////////////////////////////
//									//
// Function:	Delay							//
//									//
// Description: 							//
//									//
//  Simple delay loop.							//
//									//
//////////////////////////////////////////////////////////////////////////

void delay(unsigned int usecToWait)
{
#ifdef NDIS50_MINIPORT
    do {
	UINT usec = (usecToWait > 8000) ? 8000 : usecToWait;
	NdisStallExecution(usec);
	usecToWait -= usec;
    } while (usecToWait > 0);
#else
    while(usecToWait--);
#endif
}




//////////////////////////////////////////////////////////////////////////
//									//
// Function:	SetTemicDongle						//
// Transceivers: Temic TFDS-6000/6500, IBM31T1100			//
//									//
// Description: 							//
//  Set the IBM Transceiver mode					//
//  Mode = 0 - SIR, MIR      						//
//  Mode = 1 - MIR, FIR, Sharp-IR					//
//  Mode = 2 - Low Power Mode						//
//									//
//////////////////////////////////////////////////////////////////////////

void SetTemicDongle(PUCHAR UirPort,int Mode)
{
     switch( Mode ) {
	 case  0:
	     NSC_WriteBankReg(UirPort, BANK7, 4, 0x00);
		 NdisStallExecution(10);
	     // Trigger the Bandwidth line from high to low
	     NSC_WriteBankReg(UirPort, BANK7, 4, 0x01);
	     NdisStallExecution( 20 );
	     NSC_WriteBankReg(UirPort,BANK7,4,0x00);
	     NdisStallExecution( 1000 );
	     break;
	 case  1:
	     NSC_WriteBankReg(UirPort, BANK7, 4, 0x01);
	     NdisStallExecution( 20 );

	     NSC_WriteBankReg(UirPort, BANK7, 4, 0x81);
	     NdisStallExecution(10);
	     NSC_WriteBankReg(UirPort, BANK7, 4, 0x80);

	     NdisStallExecution( 1000 );
	     break;
	 case  2:
	     NSC_WriteBankReg(UirPort, BANK7, 4, 0x1);
	     break;
	 default:
	     break;
    }
}


//////////////////////////////////////////////////////////////////////////
//									//
// Function:	SetDellDongle						//
//									//
// Description: 							//
//  Set the Dell Transceiver mode					//
//  Mode = 0 - SIR, MIR 						//
//  Mode = 1 - FIR							//
//  Mode = 2 - Low Power Mode						//
//									//
//////////////////////////////////////////////////////////////////////////

void SetDellDongle(PUCHAR UirPort,int Mode)
{
    switch( Mode ) {
	case  0:
	    NSC_WriteBankReg(UirPort,BANK7,4,0x02);
	    NdisStallExecution( 20 );
	    NSC_WriteBankReg(UirPort, BANK7, 4, 0x00);
	    NdisStallExecution( 1000 );

	    break;

	case  1:
	    NSC_WriteBankReg(UirPort, BANK7, 4, 0x2);
	    NdisStallExecution( 20 );

	    NSC_WriteBankReg(UirPort, BANK7, 4, 0x82);
	    NdisStallExecution( 10 );

	    NSC_WriteBankReg(UirPort, BANK7, 4, 0x80);

	    NdisStallExecution( 1000 );

	    break;

	case  2:
	    NSC_WriteBankReg(UirPort, BANK7, 4, 0x2);
	    break;

	default:
	    break;
    }
}

//////////////////////////////////////////////////////////////////////////
//									//
// Function:	SetIbmDongle 						//
// Transceivers: two IBM31T1100 with IRSL0 selecting the mode for both	//
//		 transceivers. IRSL1 low selects front transceiver.    	//
//		 IRSL2 low selects rear transceiver.			//
//		 Selection is thru the SouthernCross ASIC 0000020H2987	//
//									//
// Description: 							//
//  Set the Ibm Transceiver mode					//
//  Mode = 0 - SIR      						//
//  Mode = 1 - MIR, FIR, Sharp-IR					//
//  Mode = 2 - Low Power Mode						//
//									//
//////////////////////////////////////////////////////////////////////////

void SetIbmDongle (PUCHAR UirPort, int Mode)
{

    switch( Mode ) {
	case  0:
	    NSC_WriteBankReg(UirPort,BANK7,4,0x00);
	    NdisStallExecution( 10 );

	    NSC_WriteBankReg(UirPort,BANK7,4,0x01);
	    NdisStallExecution( 20 );

	    NSC_WriteBankReg(UirPort, BANK7, 4, 0x06);
	    NdisStallExecution( 1000 );

	    break;

	case  1:
	    NSC_WriteBankReg(UirPort, BANK7, 4, 0x01);
	    NdisStallExecution( 20 );

	    NSC_WriteBankReg(UirPort, BANK7, 4, 0x81);
	    NdisStallExecution( 10 );

	    NSC_WriteBankReg(UirPort, BANK7, 4, 0x86);

	    NdisStallExecution( 1000 );


	    break;

	case  2:
	    NSC_WriteBankReg(UirPort, BANK7, 4, 0x01);
	    break;

	default:
	    break;
    }
}

⌨️ 快捷键说明

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