📄 dongle.c
字号:
NSC_WriteBankReg(Com.ComPort,BANK7,7,0x28);
*/
if (Com.ModeReq < 15) {
switch (Com.ModeReq) {
case 0x0: // Setup SIR mode
if (!Dingle[Com.XcvrNum].WORD7.bits.SIR)
return (UNSUPPORTED);
// NSC_WriteBankReg(Com.ComPort,BANK7,4,0);
Dingle[Com.XcvrNum].WORD1.bits.CurSelMode = Com.ModeReq;
Dingle[Com.XcvrNum].WORD0.bits.MVFLAG = 1;
if (Dingle[Com.XcvrNum].WORD0.bits.TrcvrCode == HPMUX)
{
SetHpMuxDongle(Com.ComPort,0);
return (TRUE);
}
if (Dingle[Com.XcvrNum].WORD0.bits.TrcvrCode == HP) {
SetHpDongle(Com.ComPort,1);
return (TRUE);
}
if (Dingle[Com.XcvrNum].WORD0.bits.TrcvrCode == TEMIC) {
// SetTemicDongle(Com.ComPort,0);
return (TRUE);
}
if (Dingle[Com.XcvrNum].WORD0.bits.TrcvrCode == SHARP) {
SetSharpDongle(Com.ComPort,0);
return (TRUE);
}
if (Dingle[Com.XcvrNum].WORD0.bits.TrcvrCode == DELL) {
SetDellDongle(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;
// NSC_WriteBankReg(Com.ComPort,BANK7,4,0);
switch (Dingle[Com.XcvrNum].WORD0.bits.TrcvrCode) {
case HP:
SetHpDongle(Com.ComPort,1);
return (TRUE);
case HPMUX:
SetHpMuxDongle(Com.ComPort,1);
return (TRUE);
case TEMIC:
SetTemicDongle(Com.ComPort,0);
return (TRUE);
case SHARP:
SetSharpDongle(Com.ComPort,0);
return (TRUE);
case DELL:
SetDellDongle(Com.ComPort,0);
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;
// NSC_WriteBankReg(Com.ComPort,BANK7,4,0);
switch (Dingle[Com.XcvrNum].WORD0.bits.TrcvrCode) {
case HP:
SetHpDongle(Com.ComPort,1);
return (TRUE);
case HPMUX:
SetHpMuxDongle(Com.ComPort,1);
return (TRUE);
case TEMIC:
SetTemicDongle(Com.ComPort,1);
return (TRUE);
case SHARP:
SetSharpDongle(Com.ComPort,0);
return (TRUE);
case DELL:
SetDellDongle(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;
// NSC_WriteBankReg(Com.ComPort,BANK7,4,0);
switch (Dingle[Com.XcvrNum].WORD0.bits.TrcvrCode) {
case HP:
SetHpDongle(Com.ComPort,1);
return (TRUE);
case HPMUX:
SetHpMuxDongle(Com.ComPort,0);
return (TRUE);
case TEMIC:
SetTemicDongle(Com.ComPort,0);
return (TRUE);
case DELL:
SetDellDongle(Com.ComPort,0);
return (TRUE);
case SHARP:
SetSharpDongle(Com.ComPort,0);
return (TRUE);
}
break;
case 12:
// Check here for CIR support
// Set the current mode to the mode requested
Dingle[Com.XcvrNum].WORD1.bits.CurSelMode = Com.ModeReq;
Dingle[Com.XcvrNum].WORD0.bits.MVFLAG = 1;
// NSC_WriteBankReg(Com.ComPort,BANK7,4,0);
switch (Dingle[Com.XcvrNum].WORD0.bits.TrcvrCode) {
case HP:
SetHpDongle(Com.ComPort,1);
return (TRUE);
case HPMUX:
SetHpMuxDongle(Com.ComPort,1);
return (TRUE);
case TEMIC:
SetTemicDongle(Com.ComPort,0);
return (TRUE);
case DELL:
SetDellDongle(Com.ComPort,0);
return (TRUE);
case SHARP:
SetSharpDongle(Com.ComPort,0);
return (TRUE);
}
break;
case 13:
case 14:
// Check here for CIR support
// Set the current mode to the mode requested
Dingle[Com.XcvrNum].WORD1.bits.CurSelMode = Com.ModeReq;
Dingle[Com.XcvrNum].WORD0.bits.MVFLAG = 1;
// NSC_WriteBankReg(Com.ComPort,BANK7,4,0);
switch (Dingle[Com.XcvrNum].WORD0.bits.TrcvrCode) {
case HP:
SetHpDongle(Com.ComPort,1);
return (TRUE);
case HPMUX:
SetHpMuxDongle(Com.ComPort,1);
return (TRUE);
case TEMIC:
SetTemicDongle(Com.ComPort,0);
return (TRUE);
case DELL:
SetDellDongle(Com.ComPort,0);
return (TRUE);
case SHARP:
SetSharpDongle(Com.ComPort,0);
return (TRUE);
}
break;
default:
return (UNSUPPORTED);
}
}
switch (Com.ModeReq) {
// 36K support
case 0x18:
if (!Dingle[Com.XcvrNum].WORD8.bits.Cir36k)
return (UNSUPPORTED);
NSC_WriteBankReg(Com.ComPort,BANK7,4,2);
return (TRUE);
break;
// 38K support
case 0x1a:
if (!Dingle[Com.XcvrNum].WORD8.bits.Cir38k)
return (UNSUPPORTED);
NSC_WriteBankReg(Com.ComPort,BANK7,4,4);
// Disable receiver Demod
NSC_WriteBankReg(Com.ComPort,BANK7,2,0x10);
return (TRUE);
break;
// 40K support
case 0x1c:
if (!Dingle[Com.XcvrNum].WORD8.bits.Cir40k)
return (UNSUPPORTED);
NSC_WriteBankReg(Com.ComPort,BANK7,4,5);
return (TRUE);
break;
// 56.9K support
case 0x2d:
if (!Dingle[Com.XcvrNum].WORD9.bits.Cir57k)
return (UNSUPPORTED);
NSC_WriteBankReg(Com.ComPort,BANK7,4,6);
return (TRUE);
break;
}
DEBUGMSG(ZONE_FIRMODE, (TEXT("SetRegMode <--\r\n")));
// If it doesn't cut thru the sieve it's FALSE
return (UNSUPPORTED);
}
//////////////////////////////////////////////////////////////////////////
// //
// Function: SetHpMuxDongle //
// //
// Description: //
// //
// Input : Mode = 1 for FIR,MIR and SIR . //
// Mode = 0 for SIR //
// //
//////////////////////////////////////////////////////////////////////////
void SetHpMuxDongle(UINT UirPort,int Mode)
{
DEBUGMSG(ZONE_FIRMODE, (TEXT("SetHpMuxDongle <--\r\n")));
switch (Mode)
{
case 1:
// Set up the IRSL pins
NSC_WriteBankReg(UirPort,BANK7,7,0x28);
// Mode select
NSC_WriteBankReg(UirPort,BANK7,4,0x1);
break;
case 0:
NSC_WriteBankReg(UirPort,BANK7,7,0x28);
NSC_WriteBankReg(UirPort,BANK7,4,0x00);
break;
}
DEBUGMSG(ZONE_FIRMODE, (TEXT("SetHpMuxDongle -->\r\n")));
}
//////////////////////////////////////////////////////////////////////////
// //
// Function: SetHpDongle //
// //
// Description: //
// //
// Input : Mode = 1 for FIR,MIR and SIR . //
// Mode = 0 for Sharp, CIR_OS //
// //
//////////////////////////////////////////////////////////////////////////
void SetHpDongle(UINT UirPort,int Mode)
{
UCHAR val;
DBGOUT((TEXT("==>SetHpHpDongle")));
DEBUGMSG(ZONE_FIRMODE, (TEXT("SetHpDongle -->\r\n")));
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);
NSC_WriteBankReg(UirPort,BANK7,7,0x08);
}
DEBUGMSG(ZONE_FIRMODE, (TEXT("SetHpDongle <--\r\n")));
}
#ifndef UNDER_CE
//////////////////////////////////////////////////////////////////////////
// //
// Function: Sleep //
// //
// Description: //
// //
// Pauses for a specified number of microseconds. //
// //
//////////////////////////////////////////////////////////////////////////
void Sleep( clock_t usecToWait )
{
#ifdef NDIS40_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
#ifdef OUTMSG
RETAILMSG(1,(TEXT("Sleep\r\n")));
#endif
}
#endif // !UNDER_CE
//////////////////////////////////////////////////////////////////////////
// //
// Function: Delay //
// //
// Description: //
// //
// Simple delay loop. //
// //
//////////////////////////////////////////////////////////////////////////
void delay(unsigned int usecToWait)
{
#ifdef NDIS40_MINIPORT
do {
UINT usec = (usecToWait > 8000) ? 8000 : usecToWait;
NdisStallExecution(usec);
usecToWait -= usec;
} while (usecToWait > 0);
#else
while (usecToWait--);
#endif
#ifdef OUTMSG
RETAILMSG(1,(TEXT("delay\r\n")));
#endif
}
#ifdef DPRINT
void PrintDongleParam(DongleParam *Dongle)
{
printf(" Dongle Structure: \n");
printf(" Word0 : %x \n",Dongle->WORD0.Data);
printf(" Word1 : %x \n",Dongle->WORD1.Data);
printf(" Word2 : %x \n",Dongle->WORD2.Data);
printf(" Word3 : %x \n",Dongle->WORD3.Data);
printf(" Word4 : %x \n",Dongle->WORD4.Data);
printf(" Word5 : %x \n",Dongle->WORD5.Data);
printf(" Word6 : %x \n",Dongle->WORD6.Data);
printf(" Word7 : %x \n",Dongle->WORD7.Data);
printf(" Word8 : %x \n",Dongle->WORD8.Data);
printf(" Word9 : %x \n",Dongle->WORD9.Data);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -