ADVERTISEMENT

26484 26483 USBRelayExtLib.rar

Czy Windows wykryje przekaźnik USB Smart Electronics 5V z Aliexpress?

Ok, kupiłem. Zobaczymy. Ten temat na stackoverflow prowadzi do dwóch bibliotek, które powinny pomóc. Jest tam też link do aukcji ebay na której umieszczony jest testowy program i biblioteki, dla podobnej płytki. Załączę ten program tutaj, może komuś się kiedyś przyda. Aukcja: 794976 Program: 794975 Jak mi się uda doprowadzić to do działania, to też dopiszę co i jak.


Download file - link to post
  • 26484 26483 USBRelayExtLib.rar
    • ??.txt
    • GuiApp_English.exe
    • CommandApp_USBRelay.exe
    • usb_relay_device.dll
    • Readme.txt
    • XCGUI.dll
    • GuiApp_Chinese.exe


26484 26483 USBRelayExtLib.rar > stdafx.h

// stdafx.h : ±ê׼ϵͳ°üº¬ÎļþµÄ°üº¬Îļþ£¬
// »òÊǾ­³£Ê¹Óõ«²»³£¸ü¸ÄµÄ
// ÌØ¶¨ÓÚÏîÄ¿µÄ°üº¬Îļþ
//

#pragma once

#include " targetver.h "

#define WIN32_LEAN_AND_MEAN // ´Ó Windows Í·ÖÐÅųý¼«ÉÙʹÓõÄ×ÊÁÏ
// Windows Í·Îļþ:
#include & lt; windows.h & gt;

// C ÔËÐÐʱͷÎļþ
#include & lt; stdlib.h & gt;
#include & lt; malloc.h & gt;
#include & lt; memory.h & gt;
#include & lt; tchar.h & gt;


// TODO: ÔÚ´Ë´¦ÒýÓóÌÐòÐèÒªµÄÆäËûÍ·Îļþ
#ifdef _DEBUG
#pragma comment(lib, " ../../xcgui/XCGUId.lib " )
#pragma comment(lib, " ../../usb_relay_dll/usb_relay_device.lib " )
#else
#pragma comment(lib, " ../../xcgui/XCGUI.lib " )
#pragma comment(lib, " ../../usb_relay_dll/usb_relay_device.lib " )
#endif

#include " ../../xcgui/xcgui.h "
#include " ../../usb_relay_dll/usb_relay_device.h "

#include " str_tools.h "

#include & lt; map & gt;
using namespace std;


26484 26483 USBRelayExtLib.rar > GuiApp_English.cpp

// GuiApp.cpp : ¶¨ÒåÓ¦ÓóÌÐòµÄÈë¿Úµã¡£
//

#include " stdafx.h "
#include " GuiApp_English.h "

int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)
{
XInitXCGUI(); //initial

CUSBRelayWnd MyWnd;
if(MyWnd.Create())
{
XRunXCGUI(); //run gui
}
return 0;
}

//create main window
BOOL CUSBRelayWnd::Create()
{
m_hWindow = XWnd_CreateWindow(0, 0, 290, 430, L " USB Relay Manager " ); //main window
if(m_hWindow)
{
XWnd_EnableDragBorder(m_hWindow, FALSE);
XWnd_EnableMaxButton(m_hWindow, FALSE);

//1. create find device button
m_hFindDeviceBtn = XBtn_Create(10, 10, 90, 25, L " Find device " , m_hWindow);
//register the button click event
XCGUI_RegEleEvent(m_hFindDeviceBtn, XE_BNCLICK, & CUSBRelayWnd::OnFindDeviceBtnClick);

//2. create the device list combobox
m_hDeviceListBox = XComboBox_Create(110, 10, 150, 25, m_hWindow);

//3. create open device button
m_hOpenDeviceBtn = XBtn_Create(10, 45, 90, 25, L " open device " , m_hWindow);
//register the button click event
XCGUI_RegEleEvent(m_hOpenDeviceBtn, XE_BNCLICK, & CUSBRelayWnd::OnOpenDeviceBtnClick);

//4. create open status label
m_hOpenStatus = XEle_Create(110, 45, 50, 25, m_hWindow);
XEle_SetBkColor(m_hOpenStatus, RGB(255, 0, 0));

//5. create close device button
m_hOpenDeviceBtn = XBtn_Create(170, 45, 90, 25, L " close device " , m_hWindow);
//disable before open a device

//register the button click event
XCGUI_RegEleEvent(m_hOpenDeviceBtn, XE_BNCLICK, & CUSBRelayWnd::OnCloseDeviceBtnClick);

int pos_text_x = 10;
int pos_open_btn_x = 105;
int pos_status_label_x = 170;
int pos_close_btn_x = 200;

int pos_y = 80;

//6. create the buttons and lables for all relay
for (int i = 0; i & lt; 8; i++)
{
wchar_t relayName[20] = {0};
wsprintf(relayName, L " Realy %d " , i+1);

m_hRelayText[i] = XEdit_Create(pos_text_x, pos_y, 90, 25, m_hWindow);
XEdit_SetText(m_hRelayText[i], relayName);

m_hRelayOpenBtn[i] = XBtn_Create(pos_open_btn_x, pos_y, 60, 25, L " open " , m_hWindow);
XCGUI_RegEleEvent(m_hRelayOpenBtn[i], XE_BNCLICK, & CUSBRelayWnd::OnOpenRelayBtnClick);

m_hRelayStatusLabel[i] = XEle_Create(pos_status_label_x, pos_y, 25, 25, m_hWindow);
XEle_SetBkColor(m_hRelayStatusLabel[i], RGB(255, 0, 0));

m_hRelayCloseBtn[i] = XBtn_Create(pos_close_btn_x, pos_y, 60, 25, L " close " , m_hWindow);
XCGUI_RegEleEvent(m_hRelayCloseBtn[i], XE_BNCLICK, & CUSBRelayWnd::OnCloseRelayBtnClick);

pos_y += 30;
}

//7. create open-all relay button
m_hOpenAllRelayBtn = XBtn_Create(10, pos_y+10, 120, 50, L " Open All " , m_hWindow);
XCGUI_RegEleEvent(m_hOpenAllRelayBtn, XE_BNCLICK, & CUSBRelayWnd::OnOpenAllRelayBtnClick);

//8. create close-all relay button
m_hCloseAllRelayBtn = XBtn_Create(140, pos_y+10, 120, 50, L " Close All " , m_hWindow);
XCGUI_RegEleEvent(m_hCloseAllRelayBtn, XE_BNCLICK, & CUSBRelayWnd::OnCloseAllRelayBtnClick);

//initial usb_relay_device lib
usb_relay_init();

XWnd_ShowWindow(m_hWindow, SW_SHOW); //ÏÔʾ´°¿Ú
return true;
}
return false;
}

BOOL CUSBRelayWnd::OnFindDeviceBtnClick( HELE hEle,HELE hEleEvent )
{
if (m_bOpened)
{
XMessageBox(XEle_GetHWindow(hEle), L " Close Current Device First " , L " Attention " , XMB_OK);
return TRUE;
}

if (m_pDeviceList)
{
usb_relay_device_free_enumerate(m_pDeviceList);
m_pDeviceList = NULL;
}

m_pDeviceList = usb_relay_device_enumerate();
if (m_pDeviceList)
{
struct usb_relay_device_info *cur_device = m_pDeviceList;
while (cur_device)
{
XComboBox_AddString( m_hDeviceListBox, (wchar_t*)(Ansi2WChar((char*)(cur_device- & gt; serial_number)).c_str()) );
m_mapIndexToDevice[Ansi2WChar((char*)(cur_device- & gt; serial_number))] = cur_device;

cur_device = cur_device- & gt; next;
}
}

return TRUE;
}

BOOL CUSBRelayWnd::OnOpenDeviceBtnClick( HELE hEle,HELE hEleEvent )
{
if (m_bOpened)
{
XMessageBox(XEle_GetHWindow(hEle), L " Close Current Device First " , L " Attention " , XMB_OK);
return TRUE;
}

int index = XComboBox_GetSelectItem(m_hDeviceListBox);
if (index & gt; -1)
{
wchar_t *serial = XComboBox_GetItemText(m_hDeviceListBox, index);
std::map & lt; wstring ,struct usb_relay_device_info* & gt; ::const_iterator fd = m_mapIndexToDevice.find(wstring(serial));
if (fd != m_mapIndexToDevice.end())
{
//1. open usb relay device
m_hCurDevice = usb_relay_device_open(fd- & gt; second);
if (m_hCurDevice)
{
//2. Get status
unsigned int status = 0;
if (0 == usb_relay_device_get_status(m_hCurDevice, & status))
{
for (int i = 0; i & lt; fd- & gt; second- & gt; type; i++)
{
if ((1 & lt; & lt; i) & status)
{
XEle_SetBkColor(m_hRelayStatusLabel[i], RGB(0, 255, 0));
XEle_RedrawEle(m_hRelayStatusLabel[i], TRUE);
}
}
XEle_SetBkColor(m_hOpenStatus, RGB(0, 255, 0));
XEle_RedrawEle(m_hOpenStatus, TRUE);
m_bOpened = TRUE;
m_hCureDeviceIndex = fd- & gt; second- & gt; type;
}
else
{
usb_relay_device_close(m_hCurDevice);
m_hCurDevice = 0;
XMessageBox(XEle_GetHWindow(hEle), L " Open Device Error!! " , L " Error " , XMB_OK);
}

}
else
{
XMessageBox(XEle_GetHWindow(hEle), L " Open Device Error!! " , L " Error " , XMB_OK);
}
}
else
{
XMessageBox(XEle_GetHWindow(hEle), L " The Device is not valid " , L " Error " , XMB_OK);
}
}
else
{
XMessageBox(XEle_GetHWindow(hEle), L " Select the device first " , L " Error " , XMB_OK);
}

return TRUE;
}

BOOL CUSBRelayWnd::OnCloseDeviceBtnClick( HELE hEle,HELE hEleEvent )
{
if (!m_bOpened)
{
XMessageBox(XEle_GetHWindow(hEle), L " Open Device First " , L " Error " , XMB_OK);
return TRUE;
}

usb_relay_device_close(m_hCurDevice);
m_hCurDevice = 0;
m_bOpened = FALSE;
XEle_SetBkColor(m_hOpenStatus, RGB(255, 0, 0));
XEle_RedrawEle(m_hOpenStatus, TRUE);

for (int i = 0; i & lt; m_hCureDeviceIndex; i++)
{
XEle_SetBkColor(m_hRelayStatusLabel[i], RGB(255, 0, 0));
XEle_RedrawEle(m_hRelayStatusLabel[i], TRUE);
}

return TRUE;
}

BOOL CUSBRelayWnd::OnOpenRelayBtnClick( HELE hEle, HELE hEleEvent )
{
if (!m_bOpened)
{
XMessageBox(XEle_GetHWindow(hEle), L " Open Device First " , L " Error " , XMB_OK);
return TRUE;
}
for (int i = 0; i & lt; 8; i++)
{
if (hEle == m_hRelayOpenBtn[i])
{
int ret = usb_relay_device_open_one_relay_channel(m_hCurDevice, i+1);
if (ret == 0)
{
XEle_SetBkColor(m_hRelayStatusLabel[i], RGB(0, 255, 0));
XEle_RedrawEle(m_hRelayStatusLabel[i],TRUE);
}
}
}
return TRUE;
}

BOOL CUSBRelayWnd::OnCloseRelayBtnClick( HELE hEle, HELE hEleEvent )
{
if (!m_bOpened)
{
XMessageBox(XEle_GetHWindow(hEle), L " Open Device First " , L " Error " , XMB_OK);
return TRUE;
}
for (int i = 0; i & lt; 8; i++)
{
if (hEle == m_hRelayCloseBtn[i])
{
int ret = usb_relay_device_close_one_relay_channel(m_hCurDevice, i+1);
if (ret == 0)
{
XEle_SetBkColor(m_hRelayStatusLabel[i], RGB(255, 0, 0));
XEle_RedrawEle(m_hRelayStatusLabel[i],TRUE);
}
}
}
return TRUE;
}

BOOL CUSBRelayWnd::OnOpenAllRelayBtnClick( HELE hEle, HELE hEleEvent )
{
if (!m_bOpened)
{
XMessageBox(XEle_GetHWindow(hEle), L " Open Device First " , L " Error " , XMB_OK);
return TRUE;
}
int ret = usb_relay_device_open_all_relay_channel(m_hCurDevice);
if (ret == 0)
{
for(int i = 0; i & lt; m_hCureDeviceIndex; i++)
{
XEle_SetBkColor(m_hRelayStatusLabel[i], RGB(0, 255, 0));
XEle_RedrawEle(m_hRelayStatusLabel[i], TRUE);
}
}
return TRUE;
}

BOOL CUSBRelayWnd::OnCloseAllRelayBtnClick( HELE hEle, HELE hEleEvent )
{
if (!m_bOpened)
{
XMessageBox(XEle_GetHWindow(hEle), L " Open Device First " , L " Error " , XMB_OK);
return TRUE;
}
int ret = usb_relay_device_close_all_relay_channel(m_hCurDevice);
if (ret == 0)
{
for(int i = 0; i & lt; m_hCureDeviceIndex; i++)
{
XEle_SetBkColor(m_hRelayStatusLabel[i], RGB(255, 0, 0));
XEle_RedrawEle(m_hRelayStatusLabel[i], TRUE);
}
}
return TRUE;
}


26484 26483 USBRelayExtLib.rar > ReadMe.txt

========================================================================
WIN32 应用程序:GuiApp_English 项目概述
========================================================================

应用程序向导已为您创建了此 GuiApp_English 应用程序。

本文件概要介绍组成 GuiApp_English 应用程序的
的每个文件的内容。


GuiApp_English.vcproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件,
其中包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。

GuiApp_English.cpp
这是主应用程序源文件。

/////////////////////////////////////////////////////////////////////////////
应用程序向导创建了下列资源:

GuiApp_English.rc
这是程序使用的所有 Microsoft Windows 资源的列表。它包括 RES 子目录中存储的图标、位图和光标。
此文件可以直接在 Microsoft Visual C++ 中进行编辑。

Resource.h
这是标准头文件,可用于定义新的资源 ID。
Microsoft Visual C++ 将读取并更新此文件。

GuiApp_English.ico
这是一个图标文件,可用作应用程序的图标 (32x32)。
此图标包括在主资源文件 GuiApp_English.rc 中。

small.ico
这是一个图标文件,其中包含应用程序的图标的较小版本 (16x16)。此图标包括在主资源文件 GuiApp_English.rc 中。

/////////////////////////////////////////////////////////////////////////////
其他标准文件:

StdAfx.h, StdAfx.cpp
这些文件用于生成名为 GuiApp_English.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。

/////////////////////////////////////////////////////////////////////////////
其他注释:

应用程序向导使用“TODO:”注释来指示应添加或自定义的源代码部分。

/////////////////////////////////////////////////////////////////////////////


26484 26483 USBRelayExtLib.rar > targetver.h

#pragma once

// ÒÔϺ궨ÒåÒªÇóµÄ×îµÍƽ̨¡£ÒªÇóµÄ×îµÍƽ̨
// ÊǾßÓÐÔËÐÐÓ¦ÓóÌÐòËùÐ蹦ÄÜµÄ Windows¡¢Internet Explorer µÈ²úÆ·µÄ
// ×îÔç°æ±¾¡£Í¨¹ýÔÚÖ¸¶¨°æ±¾¼°¸üµÍ°æ±¾µÄƽ̨ÉÏÆôÓÃËùÓпÉÓõŦÄÜ£¬ºê¿ÉÒÔ
// Õý³£¹¤×÷¡£

// Èç¹û±ØÐëÒªÕë¶ÔµÍÓÚÒÔÏÂÖ¸¶¨°æ±¾µÄƽ̨£¬ÇëÐÞ¸ÄÏÂÁж¨Òå¡£
// Óйز»Í¬Æ½Ì¨¶ÔÓ¦ÖµµÄ×îÐÂÐÅÏ¢£¬Çë²Î¿¼ MSDN¡£
#ifndef WINVER // Ö¸¶¨ÒªÇóµÄ×îµÍƽ̨ÊÇ Windows Vista¡£
#define WINVER 0x0600 // ½«´ËÖµ¸ü¸ÄΪÏàÓ¦µÄÖµ£¬ÒÔÊÊÓÃÓÚ Windows µÄÆäËû°æ±¾¡£
#endif

#ifndef _WIN32_WINNT // Ö¸¶¨ÒªÇóµÄ×îµÍƽ̨ÊÇ Windows Vista¡£
#define _WIN32_WINNT 0x0600 // ½«´ËÖµ¸ü¸ÄΪÏàÓ¦µÄÖµ£¬ÒÔÊÊÓÃÓÚ Windows µÄÆäËû°æ±¾¡£
#endif

#ifndef _WIN32_WINDOWS // Ö¸¶¨ÒªÇóµÄ×îµÍƽ̨ÊÇ Windows 98¡£
#define _WIN32_WINDOWS 0x0410 // ½«´ËÖµ¸ü¸ÄΪÊʵ±µÄÖµ£¬ÒÔÊÊÓÃÓÚ Windows Me »ò¸ü¸ß°æ±¾¡£
#endif

#ifndef _WIN32_IE // Ö¸¶¨ÒªÇóµÄ×îµÍƽ̨ÊÇ Internet Explorer 7.0¡£
#define _WIN32_IE 0x0700 // ½«´ËÖµ¸ü¸ÄΪÏàÓ¦µÄÖµ£¬ÒÔÊÊÓÃÓÚ IE µÄÆäËû°æ±¾¡£
#endif


26484 26483 USBRelayExtLib.rar > str_tools.h

#pragma once

#include & lt; string & gt;

std::string WChar2Ansi(LPCWSTR pwszSrc);

std::wstring Ansi2WChar(LPCSTR pszSrc);


26484 26483 USBRelayExtLib.rar > stdafx.cpp

// stdafx.cpp : Ö»°üÀ¨±ê×¼°üº¬ÎļþµÄÔ´Îļþ
// CommandApp_USBRelay.pch ½«×÷ΪԤ±àÒëÍ·
// stdafx.obj ½«°üº¬Ô¤±àÒëÀàÐÍÐÅÏ¢

#include " stdafx.h "

// TODO: ÔÚ STDAFX.H ÖÐ
// ÒýÓÃÈκÎËùÐèµÄ¸½¼ÓÍ·Îļþ£¬¶ø²»ÊÇÔÚ´ËÎļþÖÐÒýÓÃ


26484 26483 USBRelayExtLib.rar > str_tools.cpp

#include " stdafx.h "
#include " str_tools.h "

using namespace std;

std::string WChar2Ansi( LPCWSTR pwszSrc )
{
int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
if (nLen & lt; = 0) return std::string( " " );
char* pszDst = new char[nLen];
if (NULL == pszDst) return std::string( " " );
WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
pszDst[nLen -1] = 0;
std::string strTemp(pszDst);
delete [] pszDst;
return strTemp;
}

std::wstring Ansi2WChar(LPCSTR pszSrc)
{
int nLen = strlen(pszSrc);
int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0);
if(nSize & lt; = 0) return NULL;
WCHAR *pwszDst = new WCHAR[nSize+1];
if( NULL == pwszDst) return NULL;
MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);
pwszDst[nSize] = 0;
if( pwszDst[0] == 0xFEFF) // skip Oxfeff
for(int i = 0; i & lt; nSize; i ++)
pwszDst[i] = pwszDst[i+1];
wstring wcharString(pwszDst);
delete pwszDst;
return wcharString;
}


26484 26483 USBRelayExtLib.rar > stdafx.h

// stdafx.h : ±ê׼ϵͳ°üº¬ÎļþµÄ°üº¬Îļþ£¬
// »òÊǾ­³£Ê¹Óõ«²»³£¸ü¸ÄµÄ
// ÌØ¶¨ÓÚÏîÄ¿µÄ°üº¬Îļþ
//

#pragma once

#include " targetver.h "

#include & lt; stdio.h & gt;
#include & lt; tchar.h & gt;



// TODO: ÔÚ´Ë´¦ÒýÓóÌÐòÐèÒªµÄÆäËûÍ·Îļþ
#ifdef _DEBUG
#pragma comment(lib, " ../../usb_relay_dll/usb_relay_device.lib " )
#else
#pragma comment(lib, " ../../usb_relay_dll/usb_relay_device.lib " )
#endif

#include " ../../usb_relay_dll/usb_relay_device.h "


26484 26483 USBRelayExtLib.rar > stdafx.cpp

// stdafx.cpp : Ö»°üÀ¨±ê×¼°üº¬ÎļþµÄÔ´Îļþ
// GuiApp.pch ½«×÷ΪԤ±àÒëÍ·
// stdafx.obj ½«°üº¬Ô¤±àÒëÀàÐÍÐÅÏ¢

#include " stdafx.h "

// TODO: ÔÚ STDAFX.H ÖÐ
// ÒýÓÃÈκÎËùÐèµÄ¸½¼ÓÍ·Îļþ£¬¶ø²»ÊÇÔÚ´ËÎļþÖÐÒýÓÃ


26484 26483 USBRelayExtLib.rar > str_tools.h

#pragma once

#include & lt; string & gt;

std::string WChar2Ansi(LPCWSTR pwszSrc);

std::wstring Ansi2WChar(LPCSTR pszSrc);


26484 26483 USBRelayExtLib.rar > stdafx.h

// stdafx.h : ±ê׼ϵͳ°üº¬ÎļþµÄ°üº¬Îļþ£¬
// »òÊǾ­³£Ê¹Óõ«²»³£¸ü¸ÄµÄ
// ÌØ¶¨ÓÚÏîÄ¿µÄ°üº¬Îļþ
//

#pragma once

#include " targetver.h "

#define WIN32_LEAN_AND_MEAN // ´Ó Windows Í·ÖÐÅųý¼«ÉÙʹÓõÄ×ÊÁÏ
// Windows Í·Îļþ:
#include & lt; windows.h & gt;

// C ÔËÐÐʱͷÎļþ
#include & lt; stdlib.h & gt;
#include & lt; malloc.h & gt;
#include & lt; memory.h & gt;
#include & lt; tchar.h & gt;


// TODO: ÔÚ´Ë´¦ÒýÓóÌÐòÐèÒªµÄÆäËûÍ·Îļþ
#ifdef _DEBUG
#pragma comment(lib, " ../../xcgui/XCGUId.lib " )
#pragma comment(lib, " ../../usb_relay_dll/usb_relay_device.lib " )
#else
#pragma comment(lib, " ../../xcgui/XCGUI.lib " )
#pragma comment(lib, " ../../usb_relay_dll/usb_relay_device.lib " )
#endif

#include " ../../xcgui/xcgui.h "
#include " ../../usb_relay_dll/usb_relay_device.h "

#include " str_tools.h "

#include & lt; map & gt;
using namespace std;