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

📄 dongle.c

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 C
📖 第 1 页 / 共 3 页
字号:
        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 + -