summaryrefslogtreecommitdiff
path: root/general/PLX9x5x/test/plx.hpp
blob: 10147df7c6bf8fff5c050731367162b1330d219b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*++

Copyright (c) 2003  Microsoft Corporation

Module Name:

    plx.hpp

Abstract:

    This module defines the PLX class and the
    values neccessary for Window operation and IOCTL control.

Environment:

    User Mode Win2k or Later

--*/

#pragma once

#include <windows.h>
#include <winioctl.h>
#include <setupapi.h>

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "public.h"

//
// scanf_s is not available in the DDK build environment.
// So redefining it to use scanf
//
#if defined(DDKBUILD)

#define scanf_s scanf

#endif


#define DEFAULT_READ_BUFFER_SIZE 1024
#define DEFAULT_WRITE_BUFFER_SIZE 1024

#define DEFAULT_THREAD_COUNT 2

typedef struct _THREAD_CONTEXT
{
    HANDLE  hDevice;
    BOOL    quite;
    ULONG   BufferSize;
    PUCHAR  Buffer;

} THREAD_CONTEXT, *PTHREAD_CONTEXT;

enum {

    MENU_TEST,
    READ_TEST,
    WRITE_TEST,
    READ_WRITE_TEST,
    THREAD_TEST,
    DEVICE_PATH,
    SET_SIZE,
    COMPARE_BUFFERS,
    DISPLAY_BUFFERS,
    THREAD_TIME,
    SINGLE_TRANSFER_TOGGLE,
    COMMAND_LINE,
    MENU_MAX

} COMMAND;

class PLX
{

public:
    PLX();
    ~PLX();

    BOOL
    Initialize();

    void
    Menu();

    BOOL
    GetDevicePath();

    BOOL
    ReadTest();

    BOOL
    WriteTest();

    BOOL
    ReadWriteTest();

    BOOL
    CompareReadWriteBuffers();

    BOOL
    SetReadBufferSize(ULONG size);

    BOOL
    SetWriteBufferSize(ULONG size);

    BOOL
    SetBufferSizes(ULONG size);

    BOOL
    SendSingleTransferIoctl(BOOL* Toggle);

    void
    DisplayReadWriteBuffers();

    BOOL
    ThreadedReadWriteTest();

    void
    SetThreadLifeTime(ULONG time);

    BOOL  Quite;
    ULONG Status;

private:

    BOOL
    GetDeviceHandle();

    HDEVINFO hDevInfo;
    PSP_DEVICE_INTERFACE_DETAIL_DATA pDeviceInterfaceDetail;
    HANDLE hDevice;

    ULONG ReadBufferSize;
    ULONG WriteBufferSize;
    _Field_size_bytes_(ReadBufferSize) PUCHAR ReadBuffer;
    _Field_size_bytes_(WriteBufferSize) PUCHAR WriteBuffer;

    _Field_size_(ThreadCount) HANDLE *Threads;
    _Field_size_(ThreadCount) PTHREAD_CONTEXT Contexts;
    int ProcessorCount;
    int ThreadCount;

    CRITICAL_SECTION CriticalSection;
    BOOL CSInitialized;

    ULONG ThreadTimer;

    BOOL console;
};