亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? 三星2410的BOOTLOADER,WINDOESCE5.0版本
?? C
?? 第 1 頁 / 共 3 頁
字號:
                }
            }
            // If it's a backspace, back up.
            //
            else if (InChar == 8) 
            {
                if (cwNumChars > 0) 
                {
                    cwNumChars--;
                    OEMWriteDebugByte((BYTE)InChar);
                }
            }
        }
    }

    // If it's a carriage return with an empty string, don't change anything.
    //
    if (cwNumChars) 
    {
        szCount[cwNumChars] = '\0';
        pBootCfg->BootDelay = atoi(szCount);
        if (pBootCfg->BootDelay > 255)
        {
            pBootCfg->BootDelay = 255;
        } 
        else if (pBootCfg->BootDelay < 1)
        {
            pBootCfg->BootDelay = 1;
        }
    }
}


static ULONG mystrtoul(PUCHAR pStr, UCHAR nBase)
{
    UCHAR nPos=0;
    BYTE c;
    ULONG nVal = 0;
    UCHAR nCnt=0;
    ULONG n=0;

    // fulllibc doesn't implement isctype or iswctype, which are needed by
    // strtoul, rather than including coredll code, here's our own simple strtoul.

    if (pStr == NULL)
        return(0);

    for (nPos=0 ; nPos < strlen(pStr) ; nPos++)
    {
        c = tolower(*(pStr + strlen(pStr) - 1 - nPos));
        if (c >= '0' && c <= '9')
            c -= '0';
        else if (c >= 'a' && c <= 'f')
        {
            c -= 'a';
            c  = (0xa + c);
        }

        for (nCnt = 0, n = 1 ; nCnt < nPos ; nCnt++)
        {
            n *= nBase;
        }
        nVal += (n * c);
    }

    return(nVal);
}


static void CvtMAC(USHORT MacAddr[3], char *pszDottedD ) 
{
    DWORD cBytes;
    char *pszLastNum;
    int atoi (const char *s);
    int i=0;    
    BYTE *p = (BYTE *)MacAddr;

    // Replace the dots with NULL terminators
    pszLastNum = pszDottedD;
    for(cBytes = 0 ; cBytes < 6 ; cBytes++)
    {
        while(*pszDottedD != '.' && *pszDottedD != '\0')
        {
            pszDottedD++;
        }
        if (pszDottedD == '\0' && cBytes != 5)
        {
            // zero out the rest of MAC address
            while(i++ < 6)
            {
                *p++ = 0;
            }
            break;
        }
        *pszDottedD = '\0';
        *p++ = (BYTE)(mystrtoul(pszLastNum, 16) & 0xFF);
        i++;
        pszLastNum = ++pszDottedD;
    }
}


static void SetCS8900MACAddress(PBOOT_CFG pBootCfg)
{
    CHAR szDottedD[24];
    USHORT cwNumChars = 0;
    USHORT InChar = 0;

    memset(szDottedD, '0', 24);

    EdbgOutputDebugString ( "\r\nEnter new MAC address in hexadecimal (hh.hh.hh.hh.hh.hh): ");

    while(!((InChar == 0x0d) || (InChar == 0x0a)))
    {
        InChar = OEMReadDebugByte();
        InChar = tolower(InChar);
        if (InChar != OEM_DEBUG_COM_ERROR && InChar != OEM_DEBUG_READ_NODATA) 
        {
            // If it's a hex number or a period, add it to the string.
            //
            if (InChar == '.' || (InChar >= '0' && InChar <= '9') || (InChar >= 'a' && InChar <= 'f')) 
            {
                if (cwNumChars < 17) 
                {
                    szDottedD[cwNumChars++] = (char)InChar;
                    OEMWriteDebugByte((BYTE)InChar);
                }
            }
            else if (InChar == 8)       // If it's a backspace, back up.
            {
                if (cwNumChars > 0) 
                {
                    cwNumChars--;
                    OEMWriteDebugByte((BYTE)InChar);
                }
            }
        }
    }

    EdbgOutputDebugString ( "\r\n");

    // If it's a carriage return with an empty string, don't change anything.
    //
    if (cwNumChars) 
    {
        szDottedD[cwNumChars] = '\0';
        CvtMAC(pBootCfg->CS8900MAC, szDottedD);

        EdbgOutputDebugString("INFO: MAC address set to: %x:%x:%x:%x:%x:%x\r\n",
                  pBootCfg->CS8900MAC[0] & 0x00FF, pBootCfg->CS8900MAC[0] >> 8,
                  pBootCfg->CS8900MAC[1] & 0x00FF, pBootCfg->CS8900MAC[1] >> 8,
                  pBootCfg->CS8900MAC[2] & 0x00FF, pBootCfg->CS8900MAC[2] >> 8);
    }
    else
    {
        EdbgOutputDebugString("WARNING: SetCS8900MACAddress: Invalid MAC address.\r\n");
    }
}


/*
    @func   BOOL | MainMenu | Manages the Samsung bootloader main menu.
    @rdesc  TRUE == Success and FALSE == Failure.
    @comm    
    @xref   
*/

static BOOL MainMenu(PBOOT_CFG pBootCfg)
{
    BYTE KeySelect = 0;
    BOOL bConfigChanged = FALSE;

    while(TRUE)
    {
        KeySelect = 0;

        EdbgOutputDebugString ( "\r\nEthernet Boot Loader Configuration:\r\n\r\n");
        EdbgOutputDebugString ( "0) IP address: %s\r\n",inet_ntoa(pBootCfg->IPAddr));
        EdbgOutputDebugString ( "1) Subnet mask: %s\r\n", inet_ntoa(pBootCfg->SubnetMask));
        EdbgOutputDebugString ( "2) DHCP: %s\r\n", (pBootCfg->ConfigFlags & CONFIG_FLAGS_DHCP)?"Enabled":"Disabled");
        EdbgOutputDebugString ( "3) Boot delay: %d seconds\r\n", pBootCfg->BootDelay);
        EdbgOutputDebugString ( "4) Reset to factory default configuration\r\n");
        EdbgOutputDebugString ( "5) Program disk image into SmartMedia card: %s\r\n", (pBootCfg->ConfigFlags & CONFIG_FLAGS_SAVETOFLASH)?"Enabled":"Disabled");
        EdbgOutputDebugString ( "6) Program CS8900 MAC address\r\n");
        EdbgOutputDebugString ( "7) Low-level format the Smart Media card\r\n");
        EdbgOutputDebugString ( "D) Download image now\r\n");
        EdbgOutputDebugString ( "\r\nEnter your selection: ");

        while (! ( ( (KeySelect >= '0') && (KeySelect <= '7') ) ||
                   ( (KeySelect == 'D') || (KeySelect == 'd') ) ))
        {
            KeySelect = OEMReadDebugByte();
        }

        EdbgOutputDebugString ( "%c\r\n", KeySelect);

        switch(KeySelect)
        {
        case '0':           // Change IP address.
            SetIP(pBootCfg);
            bConfigChanged = TRUE;
            break;
        case '1':           // Change subnet mask.
            SetMask(pBootCfg);
            bConfigChanged = TRUE;
            break;
        case '2':           // Toggle static/DHCP mode.
            pBootCfg->ConfigFlags = (pBootCfg->ConfigFlags ^ CONFIG_FLAGS_DHCP);
            bConfigChanged = TRUE;
            break;
        case '3':           // Change autoboot delay.
            SetDelay(pBootCfg);
            bConfigChanged = TRUE;
            break;
        case '4':           // Reset the bootloader configuration to defaults.
            ResetBootConfig(pBootCfg);
            bConfigChanged = TRUE;
            break;
        case '5':           // Toggle image storage to Smart Media.
            pBootCfg->ConfigFlags = (pBootCfg->ConfigFlags ^ CONFIG_FLAGS_SAVETOFLASH);
            bConfigChanged = TRUE;
            break;
        case '6':           // Configure Crystal CS8900 MAC address.
            SetCS8900MACAddress(pBootCfg);
            bConfigChanged = TRUE;
            break;
        case '7':           // Format the Smart Media card.
            if (g_bSmartMediaExist && !FormatSmartMedia())
            {
                RETAILMSG(1, (TEXT("ERROR: Failed to perform low-level format of SmartMedia card.\r\n")));
            }
            break;
        case 'D':           // Download? Yes.
        case 'd':
            goto MENU_DONE;
            break;
        default:
            break;
        }
    }

MENU_DONE:

    // If eboot settings were changed by user, save them to flash.
    //
    if (bConfigChanged && !WriteBootConfig(pBootCfg))
    {
        OALMSG(OAL_WARN, (TEXT("WARNING: MainMenu: Failed to store updated bootloader configuration to flash.\r\n")));
    }

    return(TRUE);
}


/*
    @func   BOOL | OEMPlatformInit | Initialize the Samsung SMD2410 platform hardware.
    @rdesc  TRUE = Success, FALSE = Failure.
    @comm    
    @xref   
*/
BOOL OEMPlatformInit(void)
{
    UINT8 BootDelay;
    UINT8 KeySelect;
    UINT32 dwStartTime, dwPrevTime, dwCurrTime;
    PCI_REG_INFO NANDInfo;
    BOOLEAN bResult = FALSE;

    OALMSG(OAL_FUNC, (TEXT("+OEMPlatformInit.\r\n")));

    EdbgOutputDebugString("Microsoft Windows CE Bootloader for the Samsung SMDK2410 Version %d.%d Built %s\r\n\r\n", 
                          EBOOT_VERSION_MAJOR, EBOOT_VERSION_MINOR, __DATE__);

    // Initialize the display.
    //
    InitDisplay();

    // Initialize the RealTimeClock
    InitRealTimeClock();

    // Initialize the BSP args structure.
    //
    memset(pBSPArgs, 0, sizeof(BSP_ARGS));
    pBSPArgs->header.signature       = OAL_ARGS_SIGNATURE;
    pBSPArgs->header.oalVersion      = OAL_ARGS_VERSION;
    pBSPArgs->header.bspVersion      = BSP_ARGS_VERSION;
    pBSPArgs->kitl.flags             = OAL_KITL_FLAGS_ENABLED | OAL_KITL_FLAGS_VMINI;
    pBSPArgs->kitl.devLoc.IfcType    = Internal;
    pBSPArgs->kitl.devLoc.BusNumber  = 0;
    pBSPArgs->kitl.devLoc.LogicalLoc = BSP_BASE_REG_PA_CS8900A_IOBASE;

    // Initialize the AMD AM29LV800 flash code.
    //
    if (!AM29LV800_Init((UINT32)AMD_FLASH_START))
    {
        OALMSG(OAL_ERROR, (TEXT("ERROR: OEMPlatformInit: Flash initialization failed.\r\n")));
        goto CleanUp;
    }

    // Initialize the Smart Media flash driver (and partitioning code).
    //
    memset(&NANDInfo, 0, sizeof(PCI_REG_INFO));
    NANDInfo.MemBase.Num    = 1;
    NANDInfo.MemBase.Reg[0] = (DWORD)OALPAtoVA(S3C2410X_BASE_REG_PA_NAND, FALSE);
    if (!FMD_Init(NULL, &NANDInfo, NULL))
    {
        OALMSG(OAL_WARN, (TEXT("WARNING: OEMPlatformInit: Failed to initialize Smart Media.\r\n")));
        g_bSmartMediaExist = FALSE;
    }
    else
    {
        g_bSmartMediaExist = TRUE;
    }

    // Retrieve eboot settings from AMD flash.
    //
    if (!ReadBootConfig(&g_BootConfig))
    {
        OALMSG(OAL_ERROR, (TEXT("ERROR: OEMPlatformInit: Failed to retrieve bootloader settings from flash.\r\n")));
        goto CleanUp;
    }

    // Display boot message - user can halt the autoboot by pressing any key on the serial terminal emulator.
    //
    BootDelay = g_BootConfig.BootDelay;

    EdbgOutputDebugString ( "Press [ENTER] to download now or [SPACE] to cancel.\r\n");
    EdbgOutputDebugString ( "\r\nInitiating image download in %d seconds. ", BootDelay--);

    dwStartTime = OEMEthGetSecs();
    dwPrevTime  = dwStartTime;
    dwCurrTime  = dwStartTime;
    KeySelect   = 0;

    // Allow the user to break into the bootloader menu.
    //
    while((dwCurrTime - dwStartTime) < g_BootConfig.BootDelay)
    {
        KeySelect = OEMReadDebugByte();
        if ((KeySelect == 0x20) || (KeySelect == 0x0d))
            break;
        dwCurrTime = OEMEthGetSecs();

        if (dwCurrTime > dwPrevTime)
        {
            int i, j;

            // 1 Second has elapsed - update the countdown timer.
            dwPrevTime = dwCurrTime;
            if (BootDelay < 9)
                i = 11;
            else if (BootDelay < 99)
                i = 12;
            else if (BootDelay < 999)
                i = 13;

            for(j = 0; j < i; j++)
                OEMWriteDebugByte((BYTE)0x08); // print back space
            EdbgOutputDebugString ( "%d seconds. ", BootDelay--);
        }
    }
    EdbgOutputDebugString ( "\r\n");

    // Boot or enter bootloader menu.
    //
    switch(KeySelect)
    {
    case 0x20: // Boot menu.
        MainMenu(&g_BootConfig);
        break;
    case 0x00: // Fall through if no keys were pressed -or-
    case 0x0d: // the user cancelled the countdown.
    default:
        EdbgOutputDebugString ( "\r\nStarting auto-download ... \r\n");
        break;
    }

    // Configure Ethernet controller.
    //
    if (!InitEthDevice(&g_BootConfig))
    {
        OALMSG(OAL_ERROR, (TEXT("ERROR: OEMPlatformInit: Failed to initialize Ethernet controller.\r\n")));
        goto CleanUp;
    }

    bResult = TRUE;

CleanUp:

    OALMSG(OAL_FUNC, (TEXT("_OEMPlatformInit.\r\n")));
    return(bResult);
}


/*
    @func   DWORD | OEMPreDownload | Complete pre-download tasks - get IP address, initialize TFTP, etc.
    @rdesc  BL_DOWNLOAD = Platform Builder is asking us to download an image, BL_JUMP = Platform Builder is requesting we jump to an existing image, BL_ERROR = Failure.
    @comm    
    @xref   
*/
DWORD OEMPreDownload(void)
{
    BOOL  bGotJump = FALSE;
    DWORD dwDHCPLeaseTime = 0;
    PDWORD pdwDHCPLeaseTime = &dwDHCPLeaseTime;
    DWORD dwBootFlags = 0;


    // Create device name based on Ethernet address (this is how Platform Builder identifies this device).
    //
    OALKitlCreateName(BSP_DEVICE_PREFIX, pBSPArgs->kitl.mac, pBSPArgs->deviceId);
    OALMSG(TRUE, (L"INFO: *** Device Name '%hs' ***\r\n", pBSPArgs->deviceId));

    // If the user wants to use a static IP address, don't request an address 
    // from a DHCP server.  This is done by passing in a NULL for the DHCP 
    // lease time variable.  If user specified a static IP address, use it (don't use DHCP).

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合久久鬼色中文字| 美女网站色91| 麻豆视频观看网址久久| av在线播放成人| 欧美不卡在线视频| 一区2区3区在线看| 成人黄色av电影| 久久亚洲捆绑美女| 麻豆精品久久久| 久久精品免费在线观看| 亚洲在线视频一区| 国产99久久久国产精品| 日韩欧美黄色影院| 亚洲图片欧美视频| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美不卡视频一区| 蜜桃av一区二区| 在线不卡一区二区| 亚洲h在线观看| 91福利小视频| 中文字幕中文字幕一区| 国内外成人在线| 精品久久久久久久久久久久久久久 | 日韩美一区二区三区| 丝袜亚洲精品中文字幕一区| 欧美吞精做爰啪啪高潮| 国产精品麻豆久久久| 国产一区二区三区四| 久久综合狠狠综合久久激情| 久久精品国产一区二区| 欧美一区二区三区系列电影| 亚洲一区二区av电影| 日本电影欧美片| 一区二区在线观看免费| 色老头久久综合| 一区二区三区91| 欧美色国产精品| 视频一区视频二区在线观看| 欧美一级黄色片| 激情久久久久久久久久久久久久久久| 欧美一区二区在线免费播放| 麻豆一区二区三| 久久精品在线免费观看| 91婷婷韩国欧美一区二区| 一区二区在线看| 91麻豆精品91久久久久久清纯| 青娱乐精品视频| 国产视频一区二区三区在线观看 | 欧美国产国产综合| 99久久精品免费看国产免费软件| 自拍偷自拍亚洲精品播放| 欧美天堂一区二区三区| 久久精品国产色蜜蜜麻豆| 国产欧美日韩综合精品一区二区 | 91精品免费观看| 国产在线播放一区二区三区| 国产精品视频观看| 精品污污网站免费看| 精品一区二区三区免费视频| 国产精品视频第一区| 欧美精品乱码久久久久久| 国产精品一区二区久久精品爱涩| 亚洲人123区| 日韩三级av在线播放| 粉嫩嫩av羞羞动漫久久久 | 日韩女优毛片在线| 国产成人精品1024| 一区二区免费在线| 日韩精品一区二区三区蜜臀| 波波电影院一区二区三区| 日韩国产在线观看一区| 国产欧美综合在线| 欧美性一级生活| 高清国产一区二区| 天天亚洲美女在线视频| 中文字幕在线观看不卡视频| 日韩一级精品视频在线观看| 不卡一区二区中文字幕| 久久99九九99精品| 性做久久久久久久久| 国产精品乱码妇女bbbb| 日韩欧美一区中文| 在线免费观看视频一区| 国产精品系列在线播放| 青青青伊人色综合久久| 亚洲图片一区二区| 亚洲视频每日更新| 国产免费成人在线视频| 日韩欧美激情四射| 欧美肥胖老妇做爰| 在线中文字幕一区二区| 成人动漫精品一区二区| 精品一区二区三区av| 免费国产亚洲视频| 丝袜美腿亚洲色图| 亚洲五月六月丁香激情| 亚洲人精品一区| 亚洲丝袜精品丝袜在线| 久久久亚洲综合| 久久久久久久综合| 日韩三区在线观看| 欧美mv日韩mv| 精品99一区二区| 久久久午夜精品| 久久久无码精品亚洲日韩按摩| 精品国产一区久久| 日韩久久久精品| 久久这里只有精品视频网| 欧美v国产在线一区二区三区| 欧美美女bb生活片| 欧美精品第一页| 欧美一区二区三区小说| 欧美一区二区三区在| 欧美一区二区三区白人| 欧美一区二区精美| 欧美www视频| 久久色视频免费观看| 久久综合给合久久狠狠狠97色69| 精品国产污污免费网站入口| 久久综合网色—综合色88| 久久综合给合久久狠狠狠97色69| 久久婷婷成人综合色| 久久久久久久久99精品| 国产精品你懂的| 亚洲三级理论片| 亚洲国产日产av| 久久99精品一区二区三区三区| 国产一区视频在线看| 粉嫩aⅴ一区二区三区四区五区| 99天天综合性| 欧美性生活一区| 欧美一区二区三区爱爱| 久久久久国产一区二区三区四区| 国产精品日产欧美久久久久| 亚洲欧美国产高清| 天天做天天摸天天爽国产一区 | 91丨九色丨蝌蚪富婆spa| 欧洲精品中文字幕| 日韩一区二区免费高清| 欧美激情一区二区三区不卡| 亚洲男人天堂av| 日韩成人av影视| 国产电影一区二区三区| 色婷婷亚洲婷婷| 日韩一区二区在线免费观看| 欧美国产综合一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 日本最新不卡在线| 99久久99久久久精品齐齐| 在线播放中文一区| 日本一区二区三区电影| 午夜私人影院久久久久| 粉嫩嫩av羞羞动漫久久久| 欧美二区三区91| 国产精品色哟哟| 蜜臀av一区二区在线免费观看| 岛国av在线一区| 91精品国产综合久久久蜜臀图片| 国产精品国模大尺度视频| 美女在线一区二区| 在线一区二区三区四区五区| 日韩精品中午字幕| 亚洲午夜羞羞片| 粉嫩av亚洲一区二区图片| 日韩无一区二区| 夜夜爽夜夜爽精品视频| 国产91在线观看丝袜| 日韩欧美高清一区| 亚洲在线观看免费| 成人av集中营| 久久亚洲私人国产精品va媚药| 石原莉奈一区二区三区在线观看| 成人免费av网站| 久久综合九色欧美综合狠狠| 日韩黄色片在线观看| 欧美最猛黑人xxxxx猛交| 国产精品国产三级国产a| 国产在线精品一区二区夜色| 欧美喷水一区二区| 一区二区三区丝袜| 99久久综合精品| 国产欧美精品日韩区二区麻豆天美| 视频一区国产视频| 欧美情侣在线播放| 香蕉久久一区二区不卡无毒影院| 色偷偷久久人人79超碰人人澡| 欧美激情一区在线| 国产精品一区二区在线观看不卡| 精品国产1区2区3区| 免费观看一级特黄欧美大片| 欧美精品777| 婷婷久久综合九色综合伊人色| 在线影院国内精品| 亚洲小说欧美激情另类| 91福利在线免费观看| 亚洲一区二区三区免费视频| 欧美熟乱第一页| 日韩成人精品在线观看| 欧美一级欧美一级在线播放| 免费看精品久久片|