📄 dongle.c
字号:
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 + -