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

📄 1394.c

📁 winddk src目录下的WDM源码压缩!
💻 C
📖 第 1 页 / 共 3 页
字号:
/*++

Copyright (c) 1998  Microsoft Corporation

Module Name:

    1394.c

Abstract

    1394 api wrappers

Author:

    Peter Binder (pbinder) 5/13/98

Revision History:
Date     Who       What
-------- --------- ------------------------------------------------------------
05/13/98 pbinder   birth
08/18/98 pbinder   changed for new dialogs
--*/

#define _1394_C
#include "pch.h"
#undef _1394_C

INT_PTR CALLBACK
BusResetDlgProc(
    HWND        hDlg,
    UINT        uMsg,
    WPARAM      wParam,
    LPARAM      lParam
    )
{
    static PULONG   pFlags;
    static CHAR     tmpBuff[STRING_SIZE];

    switch (uMsg) {

        case WM_INITDIALOG:

            pFlags = (PULONG)lParam;

            if (*pFlags == BUS_RESET_FLAGS_FORCE_ROOT)
                CheckDlgButton( hDlg, IDC_BUS_RESET_FORCE_ROOT, BST_CHECKED);

            return(TRUE); // WM_INITDIALOG

        case WM_COMMAND:

            switch (LOWORD(wParam)) {

                case IDOK:

                    *pFlags = 0;
                    if (IsDlgButtonChecked(hDlg, IDC_BUS_RESET_FORCE_ROOT))
                        *pFlags = BUS_RESET_FLAGS_FORCE_ROOT;

                    EndDialog(hDlg, TRUE);
                    return(TRUE); // IDOK

                case IDCANCEL:
                    EndDialog(hDlg, FALSE);
                    return(TRUE); // IDCANCEL

                default:
                    return(TRUE); // default

            } // switch

            break; // WM_COMMAND

        default:
            break; // default

    } // switch

    return(FALSE);
} // BusResetDlgProc

void
w1394_BusReset(
    HWND    hWnd,
    PSTR    szDeviceName
    )
{
    ULONG   fulFlags;
    DWORD   dwRet;

    TRACE(TL_TRACE, (hWnd, "Enter w1394_BusReset\r\n"));

    fulFlags = 0;

    if (DialogBoxParam( (HINSTANCE) GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
                        "BusReset",
                        hWnd,
                        BusResetDlgProc,
                        (LPARAM)&fulFlags
                        )) {

        dwRet = BusReset( hWnd,
                          szDeviceName,
                          fulFlags
                          );
    }

    TRACE(TL_TRACE, (hWnd, "Exit w1394_BusReset\r\n"));
    return;
} // w1394_BusReset

void
w1394_GetGenerationCount(
    HWND    hWnd,
    PSTR    szDeviceName
    )
{
    ULONG       generationCount;
    DWORD       dwRet;

    TRACE(TL_TRACE, (hWnd, "Enter w1394_GetGenerationCount\r\n"));

    dwRet = GetGenerationCount( hWnd,
                                szDeviceName,
                                &generationCount
                                );

    TRACE(TL_TRACE, (hWnd, "Exit w1394_GetGenerationCount\r\n"));
    return;
} // w1394_GetGenerationCount

INT_PTR CALLBACK
GetLocalHostInfoDlgProc(
    HWND        hDlg,
    UINT        uMsg,
    WPARAM      wParam,
    LPARAM      lParam
    )
{
    static PGET_LOCAL_HOST_INFORMATION  pGetLocalHostInfo;
    static CHAR                         tmpBuff[STRING_SIZE];

    switch (uMsg) {

        case WM_INITDIALOG:

            pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)lParam;

            CheckRadioButton( hDlg,
                              IDC_GET_HOST_UNIQUE_ID,
                              IDC_GET_TOPOLOGY_MAP,
                              pGetLocalHostInfo->nLevel + (IDC_GET_HOST_UNIQUE_ID-1)
                              );

            return(TRUE); // WM_INITDIALOG

        case WM_COMMAND:

            switch (LOWORD(wParam)) {

                case IDOK:

                    if (IsDlgButtonChecked(hDlg, IDC_GET_HOST_UNIQUE_ID))
                        pGetLocalHostInfo->nLevel = GET_HOST_UNIQUE_ID;

                    if (IsDlgButtonChecked(hDlg, IDC_GET_HOST_HOST_CAPABILITIES))
                        pGetLocalHostInfo->nLevel = GET_HOST_CAPABILITIES;

                    if (IsDlgButtonChecked(hDlg, IDC_GET_HOST_POWER_SUPPLIED))
                        pGetLocalHostInfo->nLevel = GET_POWER_SUPPLIED;

                    if (IsDlgButtonChecked(hDlg, IDC_GET_HOST_PHYS_ADDR_ROUTINE))
                        pGetLocalHostInfo->nLevel = GET_PHYS_ADDR_ROUTINE;

                    if (IsDlgButtonChecked(hDlg, IDC_GET_HOST_CONFIG_ROM))
                        pGetLocalHostInfo->nLevel = GET_HOST_CONFIG_ROM;

                    // i'm going to piggyback on Status...
                    if (IsDlgButtonChecked(hDlg, IDC_GET_SPEED_MAP)) {

                        pGetLocalHostInfo->nLevel = GET_HOST_CSR_CONTENTS;
                        pGetLocalHostInfo->Status = SPEED_MAP_LOCATION;
                    }

                    if (IsDlgButtonChecked(hDlg, IDC_GET_TOPOLOGY_MAP)) {

                        pGetLocalHostInfo->nLevel = GET_HOST_CSR_CONTENTS;
                        pGetLocalHostInfo->Status = TOPOLOGY_MAP_LOCATION;
                    }

                    EndDialog(hDlg, TRUE);
                    return(TRUE); // IDOK

                case IDCANCEL:
                    EndDialog(hDlg, FALSE);
                    return(TRUE); // IDCANCEL

                default:
                    return(TRUE); // default

            } // switch

            break; // WM_COMMAND

        default:
            break; // default

    } // switch

    return(FALSE);
} // GetLocalHostInfoDlgProc

void
w1394_GetLocalHostInfo(
    HWND    hWnd,
    PSTR    szDeviceName
    )
{
    GET_LOCAL_HOST_INFORMATION  getLocalHostInfo;
    DWORD                       dwRet;

    TRACE(TL_TRACE, (hWnd, "Enter w1394_GetLocalHostInformation\r\n"));

    getLocalHostInfo.nLevel = GET_HOST_UNIQUE_ID;
    getLocalHostInfo.ulBufferSize = 0;

    if (DialogBoxParam( (HINSTANCE) GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
                        "GetLocalHostInfo",
                        hWnd,
                        GetLocalHostInfoDlgProc,
                        (LPARAM)&getLocalHostInfo
                        )) {

        if (getLocalHostInfo.nLevel == 6) {

            PGET_LOCAL_HOST_INFORMATION     GetLocalHostInfo;
            PGET_LOCAL_HOST_INFO6           LocalHostInfo6;
            ULONG                           ulBufferSize;
            ULONG                           CsrDataLength;
            ULONG                           CsrDataAddress;

            // let's get the CsrDataAddress from Status. (from the dialog)
            CsrDataAddress = getLocalHostInfo.Status;

            // first thing is to get the buffer size we need...
            ulBufferSize = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO6);

            GetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, ulBufferSize);
            LocalHostInfo6 = (PGET_LOCAL_HOST_INFO6)&GetLocalHostInfo->Information;

            GetLocalHostInfo->nLevel = 6;
            GetLocalHostInfo->ulBufferSize = ulBufferSize;

            LocalHostInfo6->CsrBaseAddress.Off_High = INITIAL_REGISTER_SPACE_HI;
            LocalHostInfo6->CsrBaseAddress.Off_Low = CsrDataAddress;

            dwRet = GetLocalHostInformation( hWnd,
                                             szDeviceName,
                                             GetLocalHostInfo,
                                             FALSE
                                             );

            if (dwRet == ERROR_INSUFFICIENT_BUFFER) {

                // we should have our buffer info.
                TRACE(TL_TRACE, (hWnd, "Insufficient Buffer\r\n"));
                TRACE(TL_TRACE, (hWnd, "CsrDataLength = 0x%x\r\n", LocalHostInfo6->CsrDataLength));

                CsrDataLength = LocalHostInfo6->CsrDataLength;

                LocalFree(GetLocalHostInfo);

                // start over with a big enough buffer
                ulBufferSize = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO6) + CsrDataLength;

                GetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, ulBufferSize);
                LocalHostInfo6 = (PGET_LOCAL_HOST_INFO6)&GetLocalHostInfo->Information;

                GetLocalHostInfo->nLevel = 6;
                GetLocalHostInfo->ulBufferSize = ulBufferSize;

                LocalHostInfo6->CsrBaseAddress.Off_High = INITIAL_REGISTER_SPACE_HI;
                LocalHostInfo6->CsrBaseAddress.Off_Low = CsrDataAddress;
                LocalHostInfo6->CsrDataLength = CsrDataLength;

                dwRet = GetLocalHostInformation( hWnd,
                                                 szDeviceName,
                                                 GetLocalHostInfo,
                                                 FALSE
                                                 );

                if (LocalHostInfo6->CsrBaseAddress.Off_Low == SPEED_MAP_LOCATION) {

                    PSPEED_MAP                      SpeedMap;
                    PGET_LOCAL_HOST_INFORMATION     pGetTopologyMap;
                    PGET_LOCAL_HOST_INFO6           pTopologyInfo;
                    PTOPOLOGY_MAP                   TopologyMap;
                    ULONG                           NodeCount, i, j;

                    SpeedMap = (PSPEED_MAP)&LocalHostInfo6->CsrDataBuffer;

                    // get the node count from the topology map
                    pGetTopologyMap = LocalAlloc(LPTR, sizeof(GET_LOCAL_HOST_INFO6) + 4096);

                    pGetTopologyMap->ulBufferSize = sizeof(GET_LOCAL_HOST_INFO6) + 4096;
                    pGetTopologyMap->nLevel = 6;
                    pTopologyInfo = (PGET_LOCAL_HOST_INFO6)&pGetTopologyMap->Information;

                    pTopologyInfo->CsrDataLength = 4096; //0x400;
                    pTopologyInfo->CsrBaseAddress.Off_High = INITIAL_REGISTER_SPACE_HI;
                    pTopologyInfo->CsrBaseAddress.Off_Low = TOPOLOGY_MAP_LOCATION;

                    dwRet = GetLocalHostInformation( NULL,
                                                     szDeviceName,
                                                     pGetTopologyMap,
                                                     FALSE
                                                     );

                    TopologyMap = (PTOPOLOGY_MAP)&pTopologyInfo->CsrDataBuffer;
                    NodeCount = TopologyMap->TOP_Node_Count;

                    LocalFree(TopologyMap);

                    if (!dwRet) {

                        TRACE(TL_TRACE, (hWnd, "SpeedCodes = \t"));

                        for (i=0; i < NodeCount; i++) {

                            for (j=0; j < NodeCount; j++) {

                                TRACE(TL_TRACE, (hWnd, "%d\t", SpeedMap->SPD_Speed_Code[i*64+j]));
                            }

                            TRACE(TL_TRACE, (hWnd, "\r\n\t\t"));
                        }
                    }
                    else {

                        TRACE(TL_ERROR, (hWnd, "Error getting NodeCount\r\n"));
                    }
                    TRACE(TL_TRACE, (hWnd, "\r\n"));
                }

                LocalFree(GetLocalHostInfo);

            }
            else
                LocalFree(GetLocalHostInfo);
        }
        else {

            dwRet = GetLocalHostInformation( hWnd,
                                             szDeviceName,
                                             &getLocalHostInfo,
                                             TRUE
                                             );
        }
    }

    TRACE(TL_TRACE, (hWnd, "Exit w1394_GetLocalHostInformation\r\n"));
    return;
} // w1394_GetLocalHostInfo

INT_PTR CALLBACK
Get1394AddressFromDeviceObjectDlgProc(
    HWND        hDlg,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -