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

📄 async.c

📁 winddk src目录下的WDM源码压缩!
💻 C
📖 第 1 页 / 共 4 页
字号:
            SetDlgItemText(hDlg, IDC_ASYNC_LOCK_GENERATION_COUNT, tmpBuff);

            CheckRadioButton( hDlg,
                              IDC_ASYNC_LOCK_MASK_SWAP,
                              IDC_ASYNC_LOCK_WRAP_ADD,
                              pAsyncLock->fulTransactionType + (IDC_ASYNC_LOCK_MASK_SWAP-1)
                              );

            return(TRUE); // WM_INITDIALOG

        case WM_COMMAND:

            switch (LOWORD(wParam)) {

               case IDOK:

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_LOCK_USE_BUS_NODE_NUMBER))
                        pAsyncLock->bRawMode = TRUE;
                    else
                        pAsyncLock->bRawMode = FALSE;

                    GetDlgItemText(hDlg, IDC_ASYNC_LOCK_BUS_NUMBER, tmpBuff, STRING_SIZE);
                    pAsyncLock->DestinationAddress.IA_Destination_ID.NA_Bus_Number = (USHORT)strtoul(tmpBuff, NULL, 16);

                    GetDlgItemText(hDlg, IDC_ASYNC_LOCK_NODE_NUMBER, tmpBuff, STRING_SIZE);
                    pAsyncLock->DestinationAddress.IA_Destination_ID.NA_Node_Number = (USHORT)strtoul(tmpBuff, NULL, 16);

                    GetDlgItemText(hDlg, IDC_ASYNC_LOCK_OFFSET_HIGH, tmpBuff, STRING_SIZE);
                    pAsyncLock->DestinationAddress.IA_Destination_Offset.Off_High = (USHORT)strtoul(tmpBuff, NULL, 16);

                    GetDlgItemText(hDlg, IDC_ASYNC_LOCK_OFFSET_LOW, tmpBuff, STRING_SIZE);
                    pAsyncLock->DestinationAddress.IA_Destination_Offset.Off_Low = strtoul(tmpBuff, NULL, 16);

                    pAsyncLock->fulTransactionType = 0;
                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_LOCK_MASK_SWAP))
                        pAsyncLock->fulTransactionType = LOCK_TRANSACTION_MASK_SWAP;

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_LOCK_COMPARE_SWAP))
                        pAsyncLock->fulTransactionType = LOCK_TRANSACTION_COMPARE_SWAP;

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_LOCK_LITTLE_ADD))
                        pAsyncLock->fulTransactionType = LOCK_TRANSACTION_LITTLE_ADD;

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_LOCK_FETCH_ADD))
                        pAsyncLock->fulTransactionType = LOCK_TRANSACTION_FETCH_ADD;

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_LOCK_BOUNDED_ADD))
                        pAsyncLock->fulTransactionType = LOCK_TRANSACTION_BOUNDED_ADD;

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_LOCK_WRAP_ADD))
                        pAsyncLock->fulTransactionType = LOCK_TRANSACTION_WRAP_ADD;

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_LOCK_32BIT)) {

                        if ((pAsyncLock->fulTransactionType == LOCK_TRANSACTION_FETCH_ADD) ||
                            (pAsyncLock->fulTransactionType == LOCK_TRANSACTION_LITTLE_ADD)) {

                            pAsyncLock->nNumberOfArgBytes = 0;
                        }
                        else
                            pAsyncLock->nNumberOfArgBytes = sizeof(ULONG);

                        pAsyncLock->nNumberOfDataBytes = sizeof(ULONG);
                    }

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_LOCK_64BIT)) {

                        if ((pAsyncLock->fulTransactionType == LOCK_TRANSACTION_FETCH_ADD) ||
                            (pAsyncLock->fulTransactionType == LOCK_TRANSACTION_LITTLE_ADD)) {

                            pAsyncLock->nNumberOfArgBytes = 0;
                        }
                        else
                            pAsyncLock->nNumberOfArgBytes = sizeof(ULONG)*2;

                        pAsyncLock->nNumberOfDataBytes = sizeof(ULONG)*2;
                    }

                    GetDlgItemText(hDlg, IDC_ASYNC_LOCK_ARGUMENT1, tmpBuff, STRING_SIZE);
                    pAsyncLock->Arguments[0] = strtoul(tmpBuff, NULL, 16);

                    GetDlgItemText(hDlg, IDC_ASYNC_LOCK_ARGUMENT2, tmpBuff, STRING_SIZE);
                    pAsyncLock->Arguments[1] = strtoul(tmpBuff, NULL, 16);

                    GetDlgItemText(hDlg, IDC_ASYNC_LOCK_DATA1, tmpBuff, STRING_SIZE);
                    pAsyncLock->DataValues[0] = strtoul(tmpBuff, NULL, 16);

                    GetDlgItemText(hDlg, IDC_ASYNC_LOCK_DATA2, tmpBuff, STRING_SIZE);
                    pAsyncLock->DataValues[1] = strtoul(tmpBuff, NULL, 16);

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_LOCK_GET_GENERATION))
                        pAsyncLock->bGetGeneration = TRUE;
                    else
                        pAsyncLock->bGetGeneration = FALSE;

                    GetDlgItemText(hDlg, IDC_ASYNC_LOCK_GENERATION_COUNT, tmpBuff, STRING_SIZE);
                    pAsyncLock->ulGeneration = strtoul(tmpBuff, NULL, 16);

                    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);
} // AsyncLockDlgProc

void
w1394_AsyncLock(
    HWND    hWnd,
    PSTR    szDeviceName
    )
{
    ASYNC_LOCK      asyncLock;
    DWORD           dwRet;

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

    asyncLock.bRawMode = FALSE;
    asyncLock.bGetGeneration = TRUE;
    asyncLock.DestinationAddress.IA_Destination_ID.NA_Bus_Number = 0x3FF;
    asyncLock.DestinationAddress.IA_Destination_ID.NA_Node_Number = 0;
    asyncLock.DestinationAddress.IA_Destination_Offset.Off_High = 0;
    asyncLock.DestinationAddress.IA_Destination_Offset.Off_Low = 0;
    asyncLock.nNumberOfArgBytes = sizeof(ULONG);
    asyncLock.nNumberOfDataBytes = sizeof(ULONG);
    asyncLock.fulTransactionType = LOCK_TRANSACTION_MASK_SWAP;
    asyncLock.fulFlags = 0;
    asyncLock.Arguments[0] = 0;
    asyncLock.Arguments[1] = 0;
    asyncLock.DataValues[0] = 0;
    asyncLock.DataValues[1] = 0;
    asyncLock.ulGeneration = 0;

    if (DialogBoxParam( (HINSTANCE) GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
                        "AsyncLock",
                        hWnd,
                        AsyncLockDlgProc,
                        (LPARAM)&asyncLock
                        )) {

        dwRet = AsyncLock( hWnd,
                           szDeviceName,
                           &asyncLock
                           );
    }

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

INT_PTR CALLBACK
AsyncStreamDlgProc(
    HWND        hDlg,
    UINT        uMsg,
    WPARAM      wParam,
    LPARAM      lParam
    )
{
    static PASYNC_STREAM    pAsyncStream;
    static CHAR             tmpBuff[STRING_SIZE];

    switch (uMsg) {

        case WM_INITDIALOG:

            pAsyncStream = (PASYNC_STREAM)lParam;

            _ultoa(pAsyncStream->nNumberOfBytesToStream, tmpBuff, 16);
            SetDlgItemText(hDlg, IDC_ASYNC_STREAM_BYTES_TO_STREAM, tmpBuff);

            _ultoa(pAsyncStream->ulTag, tmpBuff, 16);
            SetDlgItemText(hDlg, IDC_ASYNC_STREAM_TAG, tmpBuff);

            _ultoa(pAsyncStream->nChannel, tmpBuff, 16);
            SetDlgItemText(hDlg, IDC_ASYNC_STREAM_CHANNEL, tmpBuff);

            _ultoa(pAsyncStream->ulSynch, tmpBuff, 16);
            SetDlgItemText(hDlg, IDC_ASYNC_STREAM_SYNCH, tmpBuff);

            if (pAsyncStream->nSpeed == SPEED_FLAGS_FASTEST) {

                CheckRadioButton( hDlg,
                                  IDC_ASYNC_STREAM_100MBPS,
                                  IDC_ASYNC_STREAM_FASTEST,
                                  IDC_ASYNC_STREAM_FASTEST
                                  );
            }
            else {

                CheckRadioButton( hDlg,
                                  IDC_ASYNC_STREAM_100MBPS,
                                  IDC_ASYNC_STREAM_FASTEST,
                                  pAsyncStream->nSpeed + (IDC_ASYNC_STREAM_100MBPS-1)
                                  );
            }

            return(TRUE); // WM_INITDIALOG

        case WM_COMMAND:

            switch (LOWORD(wParam)) {

               case IDOK:

                    GetDlgItemText(hDlg, IDC_ASYNC_STREAM_BYTES_TO_STREAM, tmpBuff, STRING_SIZE);
                    pAsyncStream->nNumberOfBytesToStream = strtoul(tmpBuff, NULL, 16);

                    GetDlgItemText(hDlg, IDC_ASYNC_STREAM_TAG, tmpBuff, STRING_SIZE);
                    pAsyncStream->ulTag = strtoul(tmpBuff, NULL, 16);

                    GetDlgItemText(hDlg, IDC_ASYNC_STREAM_CHANNEL, tmpBuff, STRING_SIZE);
                    pAsyncStream->nChannel = strtoul(tmpBuff, NULL, 16);

                    GetDlgItemText(hDlg, IDC_ASYNC_STREAM_SYNCH, tmpBuff, STRING_SIZE);
                    pAsyncStream->ulSynch = strtoul(tmpBuff, NULL, 16);

                    pAsyncStream->nSpeed = 0;
                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_STREAM_100MBPS))
                        pAsyncStream->nSpeed = SPEED_FLAGS_100;

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_STREAM_200MBPS))
                        pAsyncStream->nSpeed = SPEED_FLAGS_200;

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_STREAM_400MBPS))
                        pAsyncStream->nSpeed = SPEED_FLAGS_400;

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_STREAM_1600MBPS))
                        pAsyncStream->nSpeed = SPEED_FLAGS_1600;

                    if (IsDlgButtonChecked(hDlg, IDC_ASYNC_STREAM_FASTEST))
                        pAsyncStream->nSpeed = SPEED_FLAGS_FASTEST;

                    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);
} // AsyncStreamDlgProc

void
w1394_AsyncStream(
    HWND    hWnd,
    PSTR    szDeviceName
    )
{
    ASYNC_STREAM    asyncStream;
    DWORD           dwRet;

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

    asyncStream.nNumberOfBytesToStream = 8;
    asyncStream.fulFlags = 0;
    asyncStream.ulTag = 0;
    asyncStream.nChannel = 0;
    asyncStream.ulSynch = 0;
    asyncStream.nSpeed = SPEED_FLAGS_FASTEST;

    if (DialogBoxParam( (HINSTANCE) GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
                        "AsyncStream",
                        hWnd,
                        AsyncStreamDlgProc,
                        (LPARAM)&asyncStream
                        )) {

        dwRet = AsyncStream( hWnd,
                             szDeviceName,
                             &asyncStream,
                             TRUE
                             );
    }

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

INT_PTR CALLBACK
AsyncLoopbackDlgProc(
    HWND        hDlg,
    UINT        uMsg,
    WPARAM      wParam,
    LPARAM      lParam
    )
{
    static PASYNC_LOOPBACK_PARAMS   pLoopbackParams;
    static CHAR                     tmpBuff[STRING_SIZE];

    switch (uMsg) {

        case WM_INITDIALOG:

            pLoopbackParams = (PASYNC_LOOPBACK_PARAMS)lParam;

            _ultoa(pLoopbackParams->AddressOffset.Off_High, tmpBuff, 16);
            SetDlgItemText(hDlg, IDC_ASYNC_LOOP_OFFSET_HIGH, tmpBuff);

            _ultoa(pLoopbackParams->AddressOffset.Off_Low, tmpBuff, 16);
            SetDlgItemText(hDlg, IDC_ASYNC_LOOP_OFFSET_LOW, tmpBuff);

            _ultoa(pLoopbackParams->nMaxBytes, tmpBuff, 16);
            SetDlgItemText(hDlg, IDC_ASYNC_LOOP_MAX_BYTES, tmpBuff);

            _ultoa(pLoopbackParams->nIterations, tmpBuff, 16);

⌨️ 快捷键说明

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