| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- // MostDevice.cpp : 定义 DLL 的初始化例程。
- //
- #include "stdafx.h"
- #include "MostDevice.h"
- #include "CommFactory.h"
- #include ".\mostdevice.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- // CMostDeviceApp
- BEGIN_MESSAGE_MAP(CMostDeviceApp, CWinApp)
- END_MESSAGE_MAP()
- // CMostDeviceApp 构造
- CMostDeviceApp::CMostDeviceApp()
- {
- // TODO: 在此处添加构造代码,
- // 将所有重要的初始化放置在 InitInstance 中
- }
- // 唯一的一个 CMostDeviceApp 对象
- CMostDeviceApp theApp;
- //CCommFactory *g_pObjCommFactory = NULL;
- typedef struct __COMM_FACTORY
- {
- CCommFactory *pObjCommFactory;
- int nCommPort;
- char szIniName[MAX_PATH]; // 配置文件名称
- }CommFactory;
- CommFactory g_tagCommFactory[MAX_DEVICE_NUM];//结构数组;
- // CMostDeviceApp 初始化
- BOOL CMostDeviceApp::InitInstance()
- {
- CWinApp::InitInstance();
- //清空所有的串口句柄 ;
- for( int i = 0; i < MAX_DEVICE_NUM; i++ )
- {
- g_tagCommFactory[i].pObjCommFactory = NULL;
- g_tagCommFactory[i].nCommPort = 0;
- memset( g_tagCommFactory[i].szIniName, 0, sizeof(g_tagCommFactory[i].szIniName) );
- }
- return TRUE;
- }
- int CMostDeviceApp::ExitInstance()
- {
- // TODO: 在此添加专用代码和/或调用基类
- //LOG4C((LOG_NOTICE , "ExitInstance退出"));
- return CWinApp::ExitInstance();
- }
- int GetCommFactoryIndex(int nCommPort, char szIniName[MAX_PATH])
- {
- int nIndex = -1;
- for( int i = 0; i < MAX_DEVICE_NUM; i++ )
- {
- if( strcmp(g_tagCommFactory[i].szIniName, szIniName) == 0 && nCommPort == g_tagCommFactory[i].nCommPort)
- {
- nIndex = i;//查找此串口设备,找到返回当前位置
- //LOG4C((LOG_NOTICE , "返回串口在数组中的位置 : %d",i));
- }
- }
-
- return nIndex;
- }
- int GetCommFactoryMaxIndex()
- {
- int nIndex = -1;
- for( int i = 0; i < MAX_DEVICE_NUM; i++ )
- {
- if( strcmp(g_tagCommFactory[i].szIniName, "") == 0 && g_tagCommFactory[i].nCommPort == 0 )
- {
- nIndex = i;//查找一个空的串口0 设备,并返回当前位置
- break;
- }
- }
-
- return nIndex;
- }
- // 大写转换成小写
- int StrLower(char *pSource, char *pDest)
- {
- int length, i;
- length = (int)strlen(pSource);
- for (i = 0; i < length; i++) {
- if ((pSource[i] >= 'A') && (pSource[i] <= 'Z'))
- {
- pDest[i] = _tolower(pSource[i]);
- }
- else
- pDest[i] = pSource[i];
- }
- return 0;
- }
- BOOL DLL_MostDeviceInit(
- char szPath[MAX_PATH], // 程序所在路径
- char szIniName[MAX_PATH], // 配置文件名称
- int nCommPort, // 串行端口
- int nAddr, // 设备地址
- int nRate, // 波特率
- int nDataBit, // 数据位
- int nStopBit, // 停止位
- int nParity, // 校验位
- int nInterval // 时间间隔
- )
- {
- //LOG4C((LOG_NOTICE,"DLL_MostDeviceInit szIniName = %s, nCommPort = %d ,nAddr = %d, nRate = %d",szIniName,nCommPort,nAddr,nRate));
- BOOL bResult = FALSE;
- int nIndex = GetCommFactoryIndex(nCommPort, szIniName); //获取串口信息,如果返回-1(没有此串口设备)
-
- //返回-1,没有此设备,重新添加到生产类集合中;
- if( nIndex == -1 )
- {
- //返回当前空口串口0 设备位置,将当前的设备打入
- nIndex = GetCommFactoryMaxIndex();
- strcpy(g_tagCommFactory[nIndex].szIniName, szIniName);
- g_tagCommFactory[nIndex].nCommPort = nCommPort;
- if( g_tagCommFactory[nIndex].pObjCommFactory == NULL )
- {
- g_tagCommFactory[nIndex].pObjCommFactory = new CCommFactory(); //新建串口句柄;
- //新建串句柄,打开串口
- //LOG4C((LOG_NOTICE, "新建串句柄,打开串口"));
- bResult = g_tagCommFactory[nIndex].pObjCommFactory->CreateDeviceCommunication(
- szPath,
- szIniName,
- nCommPort,
- nAddr,
- nRate,
- nDataBit,
- nStopBit,
- nParity,
- nInterval
- );
-
- if( FALSE == bResult )//打开串口失败,从队列中删除
- {
- LOG4C((LOG_NOTICE , "打开串口失败,从队列中删除"));
- delete g_tagCommFactory[nIndex].pObjCommFactory;
- g_tagCommFactory[nIndex].pObjCommFactory = NULL;
- g_tagCommFactory[nIndex].nCommPort = 0;
- memset(g_tagCommFactory[nIndex].szIniName, 0, sizeof(g_tagCommFactory[nIndex].szIniName));
- }
- }
- }
- else //该串口句柄存在;
- {
- if( g_tagCommFactory[nIndex].pObjCommFactory )
- {
- bResult = TRUE;
- }
- }
- return bResult;
- }
- //退出线程,销毁串口句柄;
- void DLL_MostDeviceUnInit(
- char szPath[MAX_PATH], // 程序所在路径
- char szIniName[MAX_PATH], // 配置文件名称
- int nCommPort // 串行端口
- )
- {
- //查找(获取)当前串口,获取当前串口位置
- int nIndex = GetCommFactoryIndex(nCommPort, szIniName);
- if( nIndex == -1 ) return;
- //删除串口句柄;
- if( g_tagCommFactory[nIndex].pObjCommFactory != NULL )
- {
- g_tagCommFactory[nIndex].pObjCommFactory->DestroyDeviceCommnication(szPath, szIniName, nCommPort);
- delete g_tagCommFactory[nIndex].pObjCommFactory;
- g_tagCommFactory[nIndex].pObjCommFactory = NULL;
- }
- }
- int DLL_MostDeviceRead(
- char szPath[MAX_PATH], // 程序所在路径
- char szIniName[MAX_PATH], // 配置文件名称
- int nCommPort, // 串行端口
- int nAddr, // 设备地址
- char szCmd[MAX_CMD], // 请求命令
- char szMsg[VAR_MSG], // 响应的值
- int nReversed1, // 预留整形参数1接口
- int nReversed2, // 预留整形参数2接口
- int nReversed3, // 预留整形参数3接口
- int nReversed4, // 预留整形参数4接口
- int nReversed5, // 预留整形参数5接口
- float fReversed1, // 预留float参数1接口
- float fReversed2, // 预留float参数2接口
- float fReversed3, // 预留float参数3接口
- char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
- char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
- char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
- char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
- char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
- )
- {
- //LOG4C((LOG_NOTICE, "DLL_MostDeviceRead szPath = %s,szIniName = %s , nCommPort = %d", szPath, szIniName ,nCommPort));
- char szTmpIniName[MAX_PATH] = {0};
- StrLower(szIniName,szTmpIniName);
- int nRet = -1;
- int nIndex = GetCommFactoryIndex(nCommPort, szIniName);//读取操作时,先判断是哪个串口句柄;
- if( nIndex == -1 )
- {
- LOG4C((LOG_NOTICE,"串口位置为-1"));
- return nRet;
- }
- if( g_tagCommFactory[nIndex].pObjCommFactory )//相应串口句柄;
- {
- //LOG4C((LOG_NOTICE, "读接口!"));
- nRet = g_tagCommFactory[nIndex].pObjCommFactory->SendReadRequest( szPath,
- szIniName,
- nCommPort,
- nAddr,
- szCmd,
- szMsg,
- nReversed1,
- nReversed2,
- nReversed3,
- nReversed4,
- nReversed5,
- fReversed1,
- fReversed2,
- fReversed3,
- szReversed1,
- szReversed2,
- szReversed3,
- szReversed4,
- szReversed5 );
- }
- return nRet;
- }
- int DLL_MostDeviceSet(
- char szPath[MAX_PATH], // 程序所在路径
- char szIniName[MAX_PATH], // 配置文件名称
- int nCommPort, // 串行端口
- int nAddr, // 设备地址
- char szCmd[MAX_CMD], // 请求命令
- char szMsg[VAR_MSG], // 写入设备里的值
- int nReversed1, // 预留整形参数1接口
- int nReversed2, // 预留整形参数2接口
- int nReversed3, // 预留整形参数3接口
- int nReversed4, // 预留整形参数4接口
- int nReversed5, // 预留整形参数5接口
- float fReversed1, // 预留float参数1接口
- float fReversed2, // 预留float参数2接口
- float fReversed3, // 预留float参数3接口
- char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
- char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
- char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
- char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
- char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
- )
- {
- //LOG4C((LOG_NOTICE , "DLL_MostDeviceSet"));
- char szTmpIniName[MAX_PATH] = {0};
- StrLower(szIniName,szTmpIniName);
- int nRet = -1;
- int nIndex = GetCommFactoryIndex(nCommPort, szIniName);//写操作之前,判断串口句柄;
- if( nIndex == -1 ) return nRet;
- if( g_tagCommFactory[nIndex].pObjCommFactory )//相应串口句柄;
- {
- nRet = g_tagCommFactory[nIndex].pObjCommFactory->SendSetReuest( szPath,
- szIniName,
- nCommPort,
- nAddr,
- szCmd,
- szMsg,
- nReversed1,
- nReversed2,
- nReversed3,
- nReversed4,
- nReversed5,
- fReversed1,
- fReversed2,
- fReversed3,
- szReversed1,
- szReversed2,
- szReversed3,
- szReversed4,
- szReversed5 );
- }
- return nRet;
- }
|