27,375
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include "stdio.h"
#include "windows.h"
#include "SiUSBXp.h"
using namespace std;
typedef SI_STATUS (*GetNumDevices)(LPDWORD); //获取USP设置数
typedef SI_STATUS (*GetProductString)(DWORD, LPVOID, DWORD); //获取描述
typedef SI_STATUS (*Open)(DWORD,HANDLE*);
typedef SI_STATUS (*Read)(HANDLE,LPVOID,DWORD,LPDWORD);
typedef SI_STATUS (*SetTimeouts)(DWORD,DWORD);
typedef SI_STATUS (*Write)(HANDLE,LPVOID,DWORD,LPDWORD);
int main() {
HINSTANCE hinstance = LoadLibrary("SiUSBXp.dll"); //加载
if (hinstance == NULL) {
cout << "SiUSBXp.dll加载失败!" << endl;
return 0;
}
GetNumDevices getNumDevices = (GetNumDevices) GetProcAddress(hinstance,"SI_GetNumDevices");
if (getNumDevices == NULL) {
cout << "SI_GetNumDevices失败!" << endl;
return 0;
}
DWORD dwNumDevices = 0;//连接usb个数
SI_DEVICE_STRING devStr;
//cout << sizeof(devStr) << endl;
SI_STATUS status = getNumDevices(&dwNumDevices);
if(status==SI_DEVICE_NOT_FOUND)
{
cout << "没有找到连接的usb设备!" << endl;
return 0;
}
if (status == SI_SUCCESS) {
for (DWORD d = 0; d < dwNumDevices; d++) {
GetProductString getProductString =
(GetProductString) GetProcAddress(hinstance,"SI_GetProductString");
status = getProductString(d, devStr, SI_RETURN_SERIAL_NUMBER);
if (status == SI_SUCCESS) {
//cout << "设备序列号:" << devStr << endl;
//设置超时
SetTimeouts setTimeouts =(SetTimeouts) GetProcAddress(hinstance,"SI_SetTimeouts");
setTimeouts(2000,2000);
//cout <<status << endl;
HANDLE handle;
Open open =(Open) GetProcAddress(hinstance,"SI_Open");
status = open(d,&handle);
if (status == SI_SUCCESS)
{
//读取内容
Read read =(Read) GetProcAddress(hinstance,"SI_Read");
Write write =(Write) GetProcAddress(hinstance,"SI_Write");
char lpBuffer[4096];
//lpBuffer[0]='a';
//lpBuffer[1]='a';
//lpBuffer[2]='a';
//lpBuffer[3]='a';
//cout <<lpBuffer<< endl;
DWORD dwBytesToRead=32;
//DWORD dwBytesReturned[4096];
DWORD dwBytesReturned=0;
SI_STATUS status2 = read(handle, lpBuffer, dwBytesToRead, &dwBytesReturned);
cout <<status2<< endl;
//cout <<dwBytesReturned<< endl;
cout <<lpBuffer[0]<< endl;
}
//cout <<0x0d << endl;
}
}
}
FreeLibrary(hinstance);
return 0;
}
#ifdef SI_USB_XP_EXPORTS
#define SI_USB_XP_API __declspec(dllexport)
#else
#define SI_USB_XP_API __declspec(dllimport)
#endif
// GetProductString() function flags
#define SI_RETURN_SERIAL_NUMBER 0x00
#define SI_RETURN_DESCRIPTION 0x01
// Return codes
#define SI_SUCCESS 0x00
#define SI_DEVICE_NOT_FOUND 0xFF
#define SI_INVALID_HANDLE 0x01
#define SI_READ_ERROR 0x02
#define SI_RX_QUEUE_NOT_READY 0x03
#define SI_WRITE_ERROR 0x04
#define SI_RESET_ERROR 0x05
#define SI_INVALID_PARAMETER 0x06
#define SI_INVALID_REQUEST_LENGTH 0x07
#define SI_DEVICE_IO_FAILED 0x08
#define SI_INVALID_BAUDRATE 0x09
// RX Queue status flags
#define SI_RX_NO_OVERRUN 0x00
#define SI_RX_OVERRUN 0x01
#define SI_RX_READY 0x02
// Buffer size limits
#define SI_MAX_DEVICE_STRLEN 256
#define SI_MAX_READ_SIZE 4096*16
#define SI_MAX_WRITE_SIZE 4096
// Type definitions
typedef int SI_STATUS;
typedef char SI_DEVICE_STRING[SI_MAX_DEVICE_STRLEN];
// Input and Output pin Characteristics
#define SI_HELD_INACTIVE 0x00
#define SI_HELD_ACTIVE 0x01
#define SI_FIRMWARE_CONTROLLED 0x02
#define SI_RECEIVE_FLOW_CONTROL 0x02
#define SI_TRANSMIT_ACTIVE_SIGNAL 0x03
#define SI_STATUS_INPUT 0x00
#define SI_HANDSHAKE_LINE 0x01 // 01
#ifdef __cplusplus
extern "C" {
#endif
SI_USB_XP_API
SI_STATUS WINAPI SI_GetNumDevices(
LPDWORD lpdwNumDevices
);
SI_USB_XP_API
SI_STATUS WINAPI SI_GetProductString(
DWORD dwDeviceNum,
LPVOID lpvDeviceString,
DWORD dwFlags
);
SI_USB_XP_API
SI_STATUS WINAPI SI_Open(
DWORD dwDevice,
HANDLE* cyHandle
);
SI_USB_XP_API
SI_STATUS WINAPI SI_Close(
HANDLE cyHandle
);
SI_USB_XP_API
SI_STATUS WINAPI SI_Read(
HANDLE cyHandle,
LPVOID lpBuffer,
DWORD dwBytesToRead,
LPDWORD lpdwBytesReturned
);
SI_USB_XP_API
SI_STATUS WINAPI SI_Write(
HANDLE cyHandle,
LPVOID lpBuffer,
DWORD dwBytesToWrite,
LPDWORD lpdwBytesWritten
);
SI_USB_XP_API
SI_STATUS WINAPI SI_DeviceIOControl(
HANDLE cyHandle,
DWORD dwIoControlCode,
LPVOID lpInBuffer,
DWORD dwBytesToRead,
LPVOID lpOutBuffer,
DWORD dwBytesToWrite,
LPDWORD lpdwBytesSucceeded
);
SI_USB_XP_API
SI_STATUS WINAPI SI_FlushBuffers(
HANDLE cyHandle,
BYTE FlushTransmit,
BYTE FlushReceive
);
SI_USB_XP_API
SI_STATUS WINAPI SI_SetTimeouts(
DWORD dwReadTimeout,
DWORD dwWriteTimeout
);
SI_USB_XP_API
SI_STATUS WINAPI SI_GetTimeouts(
LPDWORD lpdwReadTimeout,
LPDWORD lpdwWriteTimeout
);
SI_USB_XP_API
SI_STATUS WINAPI SI_CheckRXQueue(
HANDLE cyHandle,
LPDWORD lpdwNumBytesInQueue,
LPDWORD lpdwQueueStatus
);
SI_USB_XP_API
SI_STATUS WINAPI SI_SetBaudRate(
HANDLE cyHandle,
DWORD dwBaudRate
);
SI_USB_XP_API
SI_STATUS WINAPI SI_SetBaudDivisor(
HANDLE cyHandle,
WORD wBaudDivisor
);
SI_USB_XP_API
SI_STATUS WINAPI SI_SetLineControl(
HANDLE cyHandle,
WORD wLineControl
);
SI_USB_XP_API
SI_STATUS WINAPI SI_SetFlowControl(
HANDLE cyHandle,
BYTE bCTS_MaskCode,
BYTE bRTS_MaskCode,
BYTE bDTR_MaskCode,
BYTE bDSR_MaskCode,
BYTE bDCD_MaskCode,
BOOL bFlowXonXoff
);
SI_USB_XP_API
SI_STATUS WINAPI SI_GetModemStatus (
HANDLE cyHandle,
PBYTE ModemStatus
);
#ifdef __cplusplus
}
#endif