4223|5

468

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

关于wince “系统属性”下处理器名称的修改和驱动绑定方法 [复制链接]

本帖最后由 gooogleman 于 2014-2-18 22:09 编辑

Sate210 wince BSP下有
  I:\WINCE600\PLATFORM\VIP_Sate210\SRC\INC\ioctl_cfg.h(49):#define IOCTL_PROCESSOR_CORE        (L"Cortex A-8")


//------------------------------------------------------------------------------
//  Define:  IOCTL_PROCESSOR_VENDOR/NAME/CORE
//
//  Defines the processor information
//

#define IOCTL_PROCESSOR_VENDOR    (L"Samsung Electronics")
#define IOCTL_PROCESSOR_NAME        (L"S5PV210")
#define IOCTL_PROCESSOR_CORE        (L"Cortex A-8")

//------------------------------------------------------------------------------


  I:\WINCE600\PLATFORM\VIP_Sate210\SRC\OAL\OALLIB\ioctl.c(55):LPCWSTR g_oalIoCtlProcessorVendor = IOCTL_PROCESSOR_VENDOR;
//------------------------------------------------------------------------------
//
//  Global: g_oalIoctlPlatformType/OEM
//
//  Platform Type/OEM
//
LPCWSTR g_oalIoCtlPlatformType = L"";
LPCWSTR g_oalIoCtlPlatformOEM  = IOCTL_PLATFORM_OEM;

LPCWSTR g_oalIoCtlPlatformName  = IOCTL_PLATFORM_NAME;
LPCWSTR g_oalIoCtlPlatformManufacturer  = IOCTL_PLATFORM_MANUFACTURER;
//------------------------------------------------------------------------------
//
//  Global: g_oalIoctlProcessorVendor/Name/Core
//
//  Processor information
//
LPCWSTR g_oalIoCtlProcessorVendor = IOCTL_PROCESSOR_VENDOR;
LPCWSTR g_oalIoCtlProcessorName   = IOCTL_PROCESSOR_NAME;
LPCWSTR g_oalIoCtlProcessorCore   = IOCTL_PROCESSOR_CORE;

  I:\WINCE600\PLATFORM\COMMON\SRC\COMMON\IOCTL\procinfo.c
//------------------------------------------------------------------------------
//
//  Function:  OALIoCtlProcessorInformation
//
//  Implements the IOCTL_PROCESSOR_INFORMATION handler.
//
BOOL OALIoCtlProcessorInfo(
    UINT32 code, VOID *pInpBuffer, UINT32 inpSize, VOID *pOutBuffer,
    UINT32 outSize, UINT32 *pOutSize
) {
    BOOL rc = FALSE;
    PROCESSOR_INFO *pInfo = (PROCESSOR_INFO*)pOutBuffer;
    UINT32 length1, length2, length3;

    OALMSG(OAL_FUNC, (L"+OALIoCtlProcessorInfo(...)\r\n"));

    // Set required/returned size if pointer isn't NULL
    if (pOutSize != NULL) {
        *pOutSize = sizeof(PROCESSOR_INFO);
    }

    // Validate inputs
    if (pOutBuffer == NULL && outSize > 0) {
        NKSetLastError(ERROR_INVALID_PARAMETER);
        OALMSG(OAL_WARN, (
            L"WARN: OALIoCtlProcessorInfo: Invalid output buffer\r\n"
        ));
        goto cleanUp;
    }

    if (pOutBuffer == NULL || outSize < sizeof(PROCESSOR_INFO)) {
        NKSetLastError(ERROR_INSUFFICIENT_BUFFER);
        OALMSG(OAL_WARN, (
            L"WARN: OALIoCtlProcessorInfo: Buffer too small\r\n"
        ));
        goto cleanUp;
    }

    // Verify OAL lengths
    length1 = (NKwcslen(g_oalIoCtlProcessorCore) + 1) * sizeof(WCHAR);
    if (length1 > sizeof(pInfo->szProcessCore)) {
        OALMSG(OAL_ERROR, (
            L"ERROR:OALIoCtlProcessorInfo: Core value too big\r\n"
        ));
        goto cleanUp;
    }

    length2 = (NKwcslen(g_oalIoCtlProcessorName) + 1) * sizeof(WCHAR);
    if (length2 > sizeof(pInfo->szProcessorName)) {
        OALMSG(OAL_ERROR, (
            L"ERROR:OALIoCtlProcessorInfo: Name value too big\r\n"
        ));
        goto cleanUp;
    }

    length3 = (NKwcslen(g_oalIoCtlProcessorVendor) + 1) * sizeof(WCHAR);
    if (length3 > sizeof(pInfo->szVendor)) {
        OALMSG(OAL_ERROR, (
            L"ERROR:OALIoCtlProcessorInfo: Vendor value too big\r\n"
        ));
        goto cleanUp;
    }

    // Copy in processor information   
    memset(pInfo, 0, sizeof(PROCESSOR_INFO));
    pInfo->wVersion = 1;
    memcpy(pInfo->szProcessCore, g_oalIoCtlProcessorCore, length1);
    memcpy(pInfo->szProcessorName, g_oalIoCtlProcessorName, length2);
    memcpy(pInfo->szVendor, g_oalIoCtlProcessorVendor, length3);
    pInfo->dwInstructionSet = g_oalIoCtlInstructionSet;
    pInfo->dwClockSpeed  = g_oalIoCtlClockSpeed;

    // Indicate success
    rc = TRUE;

cleanUp:
    OALMSG(OAL_FUNC, (L"-OALIoCtlProcessorInfo(rc = %d)\r\n", rc));
    return rc;
}

//------------------------------------------------------------------------------



最新回复

谢谢楼主的分享,正好学习一下   详情 回复 发表于 2014-2-19 08:36
点赞 关注
个人签名

回复
举报

468

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
本帖最后由 gooogleman 于 2014-2-18 22:21 编辑

extern "C" BOOL APIENTRY SystemDlgProc (HWND hDlg, UINT message, UINT wParam, LONG lParam)
{
    switch (message)
    {
                case WM_INITDIALOG:
                {
                        // set System Version
                        OSVERSIONINFO osvi;
                    TCHAR szTemp[190];

                        osvi.dwOSVersionInfoSize = sizeof(osvi);
                        GetVersionEx(&osvi);

                        if (osvi.dwBuildNumber > 0) {
                                 StringCbPrintf(szTemp, sizeof(szTemp), CELOADSZ(IDS_SYSTEM_VER_WITH_BUILD),
                                                        osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber);
                        } else {
                                 StringCbPrintf(szTemp, sizeof(szTemp), CELOADSZ(IDS_SYSTEM_VER_WITHOUT_BUILD),
                                                                osvi.dwMajorVersion, osvi.dwMinorVersion);
                        }
                        SetDlgItemText(hDlg, IDC_STATIC_VER_SYS, szTemp);
                       
                        // set Processor type
                        SYSTEM_INFO sys_info;
                        ZEROMEM(&sys_info);
                        GetSystemInfo(&sys_info);

                        PROCESSOR_INFO pro;
                        DWORD count;
                        KernelIoControl(IOCTL_PROCESSOR_INFORMATION, NULL, 0, &pro, sizeof(PROCESSOR_INFO), &count);
                        lstrcpy(szTemp, pro.szVendor);
                        if(pro.szVendor[0] != NULL && (pro.szProcessCore[0] != NULL || pro.szProcessorName[0] != NULL)) {
                                lstrcat(szTemp, TEXT(", "));
                        }
                        lstrcat(szTemp, pro.szProcessCore);
                        if(pro.szProcessCore[0] != NULL && pro.szProcessorName[0] != NULL){
                                lstrcat(szTemp, TEXT("-"));
                        }
                        lstrcat(szTemp, pro.szProcessorName);


                        SetDlgItemText(hDlg, IDC_STATIC_PROCESSOR, szTemp);
                        PostMessage(GetDlgItem(hDlg, IDC_STATIC_PROCESSOR), EM_SETSEL, 0, 0);


                        // set RAM size
                        DWORD PageSize, TotPages, StoreUsed, RamUsed, StorePages;
                        GetMemoryInfo(PageSize, TotPages, StoreUsed, RamUsed, StorePages);
                        StringCbPrintf(szTemp, sizeof(szTemp), CELOADSZ(IDS_SYSTEM_RAMSIZE), TotPages*PageSize);
                        SetDlgItemText(hDlg, IDC_STATIC_RAM, szTemp);

                        // set PNP card info
                        ShowPNPInfo(hDlg);

                        // set User & Company do this on WM_PAINT as it can change
                        OWNER_PROFILE OwnerProfile;
                        GetOwnerInfo(&OwnerProfile, NULL);

                        // Truncate the strings and append ellipses is they are too long
                        SetTextWithEllipsis(DI(IDC_STATIC_USER), OwnerProfile.szName);
                        HWND hUserCompany = DI(IDC_STATIC_USER_COMPANY);
                        if (hUserCompany)
                                SetTextWithEllipsis(hUserCompany, OwnerProfile.szCompany);

                        // Create the tooltip window for long strings
                        g_hToolTip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL,
                                                    WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
                                                    CW_USEDEFAULT, CW_USEDEFAULT,
                                                    CW_USEDEFAULT, CW_USEDEFAULT,
                                                    hDlg, NULL, g_hInst, NULL);

                        if (g_hToolTip)
                        {
                                TOOLINFO ti = {0};
                                ti.cbSize = sizeof(ti);
                                ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS | TTF_TRANSPARENT;
                                ti.hwnd = hDlg;
                                ti.lpszText = LPSTR_TEXTCALLBACK;
                                ti.uId = (UINT) GetDlgItem(hDlg, IDC_STATIC_PROCESSOR);
                                SendMessage(g_hToolTip, TTM_ADDTOOL, NULL, (LPARAM) &ti);

                                g_wndProcTT = (WNDPROC) SetWindowLong(g_hToolTip, GWL_WNDPROC,
                                                                      (LONG) SYS_ToolTipProc);
                                ASSERT(g_wndProcTT);
                                SetWindowLong(g_hToolTip, GWL_USERDATA, (LONG) hDlg);
                        }

            AygInitDialog( hDlg, SHIDIF_SIPDOWN );

                        SetFocus(GetDlgItem(hDlg, IDC_EXPANSION_CMB));
                        return 0;
                }
               
                case WM_DEVICECHANGE:                // PnP device changed
                        // update PNP card info
                        ShowPNPInfo(hDlg);
                        return TRUE;

                case WM_COMMAND:      
                        switch (LOWORD(wParam))
                        {
                                case IDOK:
                                return TRUE;
                        }
                        break;

                case WM_NOTIFY:
                        ASSERT(lParam);
                        switch (((LPNMHDR) lParam)->code)
                        {
                                case TTN_GETDISPINFO:
                                {
                                        ASSERT(TTF_IDISHWND & ((LPNMTTDISPINFO) lParam)->uFlags);

                                        HWND hwndItem = NULL;
                                        RECT rcItem = {0};
                                        HDC hdc = NULL;
                                        int textLen = 0;
                                        TCHAR * pszText = NULL;
                                        SIZE size = {0};

                                        hwndItem = GetDlgItem(hDlg, IDC_STATIC_PROCESSOR);
                                        ASSERT(hwndItem);
                                        GetClientRect(hwndItem, &rcItem);

                                        if (hdc = GetDC(hwndItem))
                                        {
                                                textLen = SendMessage(hwndItem, WM_GETTEXTLENGTH, NULL, NULL);
                                                if (textLen && (pszText = new TCHAR[textLen+1]))
                                                {

                                                        SendMessage(hwndItem, WM_GETTEXT, textLen+1, (LPARAM) pszText);

                                                        if (GetTextExtentPoint(hdc, pszText, textLen, &size) &&
                                                            (size.cx >= rcItem.right))
                                                        {
                                                                LPNMTTDISPINFO lpnmttdi = (LPNMTTDISPINFO) lParam;
                                                                ZeroMemory(lpnmttdi->szText, sizeof(lpnmttdi->szText));
                                                                _tcsncpy(lpnmttdi->szText, pszText, 79); // See NMTTDISPINFO in MSDN
                                                        }
                                                        delete [] pszText;
                                                }
                                                ReleaseDC(hwndItem, hdc);
                                        }
                                        return TRUE;
                                }

                                case TTN_SHOW:
                                {
                                        HWND hwndItem = (HWND) ((LPNMHDR) lParam)->idFrom;
                                        ASSERT(hwndItem);

                                        RECT rcItem = {0};
                                        GetWindowRect(hwndItem, &rcItem);

                                        RECT rcToolTip = {0};
                                        GetWindowRect(g_hToolTip, &rcToolTip);
                                        LONG lToolTipWidth = rcToolTip.right - rcToolTip.left;

                                        HMONITOR hMonitor = MonitorFromWindow(hwndItem, MONITOR_DEFAULTTONEAREST);
                                        ASSERT(hMonitor);
                                        if (hMonitor)
                                        {
                                                MONITORINFO mi = {0};
                                                mi.cbSize = sizeof(mi);
                                                GetMonitorInfo(hMonitor, &mi);

                                                if (mi.rcWork.right < (rcItem.left+lToolTipWidth))
                                                {
                                                        rcItem.left -= (rcItem.left+lToolTipWidth)-mi.rcWork.right;
                                                }
                                        }

                                        // TTM_ADJUSTRECT is not supported on CE so just assume +=2
                                        // SendMessage(g_hToolTip, TTM_ADJUSTRECT, TRUE, (LPARAM) &rc);
                                        rcItem.top += 2;
                                        rcItem.left += 2;

                                        SetWindowPos(g_hToolTip, NULL, rcItem.left, rcItem.top,
                                                     0, 0, SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
                                        SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
                                        return TRUE;
                                }
                        }
                        break;

        }
    return (FALSE);
}

处理器信息就是被绿色部分那里打印上去的。驱动其实也可以这么做的。以前2440的驱动有用到这些。
 
个人签名
 

回复

468

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
  I:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\DRIVERS\WAVEDEV\i2s.cpp
用到的例子
// Determine the CPU clock speed by querying the OAL.
    //
    if (!KernelIoControl(IOCTL_PROCESSOR_INFORMATION, NULL, 0, &procInfo, sizeof(PROCESSOR_INFO), &dwBytesReturned))
    {
        RETAILMSG(TRUE, (TEXT("WARNING: WAVEDEV.DLL: SetI2SClockRate: Failed to obtain processor frequency - using default value(%d).\r\n"), s3c2410_pclk));
    }
    else
    {
        s3c2410_pclk = procInfo.dwClockSpeed;
        RETAILMSG(TRUE, (TEXT("INFO: WAVEDEV.DLL: SetI2SClockRate:  Using processor frequency reported by the OAL (%d).\r\n"), s3c2410_pclk));
    }

 
个人签名
 
 

回复

28

帖子

1

TA的资源

一粒金砂(初级)

4
 
谢谢楼主的分享,正好学习一下

点评

你也是做wince 的吗?  详情 回复 发表于 2014-2-20 22:38
你也是做wince 的吗?  详情 回复 发表于 2014-2-20 22:38
 
 
 

回复

468

帖子

0

TA的资源

纯净的硅(高级)

5
 
bileimaomao 发表于 2014-2-19 08:36
谢谢楼主的分享,正好学习一下

你也是做wince 的吗?
 
个人签名
 
 

回复

468

帖子

0

TA的资源

纯净的硅(高级)

6
 
bileimaomao 发表于 2014-2-19 08:36
谢谢楼主的分享,正好学习一下

你也是做wince 的吗?
 
个人签名
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表