123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- // IRControl.cpp : 定义 DLL 应用程序的导出函数。
- //
- #include "stdafx.h"
- #include "IRControl.h"
- #include "RedRatProcess.h"
- #ifdef __MAKE_PYD__
- #include "Python.h"
- #endif
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- #ifdef __DEFUALT__
- // 唯一的应用程序对象
- CWinApp theApp;
- using namespace std;
- int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
- {
- int nRetCode = 0;
- // 初始化 MFC 并在失败时显示错误
- if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
- {
- // TODO: 更改错误代码以符合您的需要
- _tprintf(_T("错误: MFC 初始化失败\n"));
- nRetCode = 1;
- }
- else
- {
- // TODO: 在此处为应用程序的行为编写代码。
- }
- return nRetCode;
- }
- #endif
- static CRedRatProcess g_IRControl;
- #ifndef __MAKE_PYD__
- // 定义 DLL 的导出函数和变量。
- int nIRControl = 100;
- IRCONTROL_API DWORD IsAppRunning(LPCTSTR lpszAppDir)
- {
- return CRedRatProcess::IsAppRunning(lpszAppDir);
- }
- IRCONTROL_API bool StartIRApp(LPCTSTR lpszAppDir, LPCTSTR lpSignalXml, DWORD dwPort)
- {
- if (!CRedRatProcess::StartApp(lpszAppDir, lpSignalXml, dwPort))
- return false;
- return true;
- }
- IRCONTROL_API bool CloseApp()
- {
- return CRedRatProcess::CloseApp();
- }
- IRCONTROL_API bool Connect(LPCTSTR lpServer, int port)
- {
- // 创建连接;
- if (!g_IRControl.InitSocket())
- {
- Global::WriteTextLog(_T("创建TCP连接失败"));
- //g_IRControl.CloseApp();
- return false;
- }
- if (!lpServer || lpServer[0] == '\0' || port < 0)
- return false;
- //if (!g_IRControl.SelectConnect(lpServer, port, 5000))
- if (!g_IRControl.Connect(lpServer, port))
- {
- Global::WriteTextLog(_T("连接服务器失败"));
- //g_IRControl.CloseApp();
- return false;
- }
- return true;
- }
- IRCONTROL_API void DisConnect()
- {
- g_IRControl.DisConnect();
- }
- IRCONTROL_API LPCTSTR getDeviceNames()
- {
- static std::string devices;
- std::vector<std::string> vtDevices;
- if ( g_IRControl.getDeviceNameList(vtDevices) )
- {
- devices.clear();
- for ( std::vector<std::string>::iterator dv = vtDevices.begin(); dv != vtDevices.end(); dv++)
- {
- devices.append(*dv + _T(";"));
- }
- return devices.c_str();
- }
- return _T("");
- }
- IRCONTROL_API LPCTSTR getSignalsName()
- {
- static std::string signals;
- signals = g_IRControl.getSignalsName();
- return signals.c_str();
- }
- IRCONTROL_API bool loadSignalDataSet(LPCTSTR lpDatasetXml)
- {
- if (!lpDatasetXml || lpDatasetXml[0] == '\0')
- return false;
- return g_IRControl.loadSignalDataSet(lpDatasetXml);
- }
- IRCONTROL_API bool sendSignal(LPCTSTR lpSignal, int send_times, int sleep_time)
- {
- if (!lpSignal || lpSignal[0] == '\0')
- return false;
- return g_IRControl.sendSignal(lpSignal, send_times, sleep_time);
- }
- IRCONTROL_API bool sendSignals(LPCTSTR lpSignals, int sleep_time)
- {
- if (!lpSignals || lpSignals[0] == '\0')
- return false;
- std::string signals = lpSignals;
- std::vector<std::string> vtSignals;
- int npos = -1;
- while (true)
- {
- npos = signals.find_first_of(';');
- if (npos == std::string::npos)
- break;
- vtSignals.push_back(signals.substr(0, npos));
- signals = signals.substr(npos + 1);
- }
- vtSignals.push_back(signals);
- return g_IRControl.sendSignals(vtSignals, sleep_time);
- }
- IRCONTROL_API bool sendRepeatsSignal(LPCTSTR lpSignal, int repeat_time)
- {
- if (!lpSignal || lpSignal[0] == '\0')
- return false;
- return g_IRControl.sendRepeatsSignal(lpSignal, repeat_time);
- }
- #else
- static PyObject* IsAppRunning(PyObject* self, PyObject* args)
- {
- // 应用程序路径;
- const char* pszExePath = NULL;
- if (!PyArg_ParseTuple(args, "s", &pszExePath))
- return NULL;
- // 返回进程Id;
- return Py_BuildValue("i", CRedRatProcess::IsAppRunning(pszExePath));
- }
- static PyObject* StartApp(PyObject* self, PyObject* args)
- {
- // 应用程序路径;
- const char* pszExePath = NULL;
- const char* pszDataset = NULL;
- unsigned int port = 0;
- if (!PyArg_ParseTuple(args, "ssI", &pszExePath, &pszDataset, &port))
- return NULL;
- return Py_BuildValue("b", CRedRatProcess::StartApp(pszExePath, pszDataset, port));
- }
- static PyObject* StopApp(PyObject* self, PyObject* args)
- {
- return Py_BuildValue("b", CRedRatProcess::CloseApp()); // 返回None;
- }
- //描述:连接设备,默认连接索引为0的设备;
- static PyObject* ConnectDevice(PyObject* self, PyObject* args)
- {
- unsigned int port = 0;
- const char* pszServer = NULL;
- if (!PyArg_ParseTuple(args, "sI", &pszServer, &port))
- return NULL;
- // 创建连接;
- if (!g_IRControl.InitSocket())
- {
- Global::WriteTextLog(_T("创建TCP连接失败"));
- g_IRControl.CloseApp();
- return Py_BuildValue("b", false);
- }
- if (!pszServer || pszServer[0] == '\0' || port < 0)
- return Py_BuildValue("b", false);
- if (!g_IRControl.SelectConnect(pszServer, port, 5000))
- {
- Global::WriteTextLog(_T("连接服务器失败"));
- g_IRControl.CloseApp();
- return Py_BuildValue("b", false);
- }
- return Py_BuildValue("b", true);
- }
- static PyObject* DisconnectDevice(PyObject* self, PyObject* args)
- {
- g_IRControl.DisConnect();
- return Py_BuildValue("");
- }
- static PyObject* getDeviceNames(PyObject* self, PyObject* args)
- {
- std::string devices;
- std::vector<std::string> vtDevices;
- if (g_IRControl.getDeviceNameList(vtDevices))
- {
- for (std::vector<std::string>::iterator dv = vtDevices.begin(); dv != vtDevices.end(); dv++ )
- {
- devices.append(*dv + _T(";"));
- }
- return Py_BuildValue("s", devices.c_str());
- }
- return Py_BuildValue("s", "");
- }
- static PyObject* loadSignalDataSet(PyObject* self, PyObject* args)
- {
- const char* pszDatasetXml = NULL;
- if (!PyArg_ParseTuple(args, "s", &pszDatasetXml))
- return NULL;
- if ( !pszDatasetXml || pszDatasetXml[0] == '\0')
- return Py_BuildValue("b", false);
- if (!g_IRControl.loadSignalDataSet(std::string(pszDatasetXml)) )
- {
- Global::WriteTextLog(_T("加载信号数据集失败"));
- g_IRControl.CloseApp();
- return Py_BuildValue("b", false);
- }
- return Py_BuildValue("b", true);
- }
- static PyObject* getSignalsName(PyObject* self, PyObject* args)
- {
- std::string data = g_IRControl.getSignalsName();
- return Py_BuildValue("s", data.c_str());
- }
- static PyObject* sendSignal(PyObject* self, PyObject* args)
- {
- const char* pszSignal = NULL;
- int send_times = 1, sleep_time = 1000;
- if (!PyArg_ParseTuple(args, "sii", &pszSignal, &send_times, &sleep_time))
- return NULL;
- if (!pszSignal || pszSignal[0] == '\0')
- return Py_BuildValue("b", false);
- return Py_BuildValue("b", g_IRControl.sendSignal(pszSignal, send_times, sleep_time));
- }
- static PyObject* sendSignals(PyObject* self, PyObject* args)
- {
- const char* pszSignal = NULL;
- int sleep_time = 1000;
- if (!PyArg_ParseTuple(args, "si", &pszSignal, &sleep_time))
- return NULL;
- if (!pszSignal || pszSignal[0] == '\0')
- return Py_BuildValue("b", false);
- std::string signals = pszSignal;
- std::vector<std::string> vtSignals;
- int npos = -1;
- while (true)
- {
- npos = signals.find_first_of(';');
- if (npos == std::string::npos)
- break;
- vtSignals.push_back(signals.substr(0, npos));
- signals = signals.substr(npos + 1);
- }
- vtSignals.push_back(signals);
- return Py_BuildValue("b", g_IRControl.sendSignals(vtSignals, sleep_time));
- }
- static PyObject* sendRepeatsSignal(PyObject* self, PyObject* args)
- {
- const char* pszSignal = NULL;
- int repeat_time = 2;
- if (!PyArg_ParseTuple(args, "si", &pszSignal, &repeat_time))
- return NULL;
- if (!pszSignal || pszSignal[0] == '\0')
- return Py_BuildValue("b", false);
- return Py_BuildValue("b", g_IRControl.sendRepeatsSignal(pszSignal, repeat_time));
- }
- static PyObject* sendDurationSignal(PyObject* self, PyObject* args)
- {
- const char* pszSignal = NULL;
- int duration_time = 2;
- if (!PyArg_ParseTuple(args, "si", &pszSignal, &duration_time))
- return NULL;
- if (!pszSignal || pszSignal[0] == '\0')
- return Py_BuildValue("b", false);
- return Py_BuildValue("b", g_IRControl.sendDurationSignal(pszSignal, duration_time));
- }
- // 描述方法,暴露给python的函数;
- static PyMethodDef IRControl_Methods[] = {
- {"IsAppRunning",IsAppRunning,METH_VARARGS,"程序是否在运行"},
- {"StartApp", StartApp, METH_VARARGS, "启动进程"},
- {"StopApp", StopApp, METH_VARARGS, "关闭进程"},
- {"ConnectDevice", ConnectDevice, METH_VARARGS, "连接设备"},
- {"DisconnectDevice", DisconnectDevice, METH_VARARGS, "断开设备"},
- {"getDeviceNames", getDeviceNames, METH_VARARGS, "获取设备列表,逗号分隔"},
- {"loadSignalDataSet", loadSignalDataSet, METH_VARARGS, "加载指定目录的信号数据集XML文件"},
- {"getSignalsName", getSignalsName, METH_VARARGS, "获取默认信号数据集信号列表"},
- {"sendSignal", sendSignal, METH_VARARGS, "发送单个信号"},
- {"sendSignals", sendSignals, METH_VARARGS, "发送多个信号,以分号为分隔符"},
- {"sendRepeatsSignal", sendRepeatsSignal, METH_VARARGS, "发送重复信号"},
- {"sendDurationSignal", sendDurationSignal, METH_VARARGS, "发送时叠信号"},
- {NULL,NULL}
- };
- // 初始模块;//格式:init<模块名称>
- PyMODINIT_FUNC initIRControl()
- {
- // 初始化pyd函数列表;
- PyObject* m, * d;
- m = Py_InitModule("IRControl", IRControl_Methods);
- d = PyModule_GetDict(m);
- }
- #endif
|