| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- #include "upsimpl.h"
- #include "log4vendor.h"
- UpsClassImpl::UpsClassImpl()
- {
- m_pDevice = new DeviceConnect();
- }
- UpsClassImpl::~UpsClassImpl()
- {
- delete m_pDevice;
- }
- ErrorCodeEnum UpsClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
- {
- LOG4VTM_FUNCTION();
- char sPort[16],sGet[32];
- sprintf(sPort, "COM%d", dwPort);
- SIni ini;
- if (ini.GetValueFromIniFile("/cashway/setting/cashway.ini", "Serial", sPort, sGet, 30))
- strcpy(sPort, sGet);
- int iRet = m_pDevice->Open(sPort, dwBaudRate);
- if (iRet != 0)
- return GetErrorInfo(iRet, "DevOpen");
- bool bUps, bLow;
- iRet = m_pDevice->GetStatus(bUps, bLow);
- return GetErrorInfo(iRet, "DevOpen");
- }
- int getFileVer(char* sFile, short& ch1, short& ch2)
- {
- ch1 = 0;
- ch2 = 0;
- char* pFind = strstr(sFile, ".so");
- char* pTemp = pFind;
- while (pTemp)
- {
- pFind = pTemp;
- pTemp = strstr(pFind + 3, ".so");
- }
- if (pFind == NULL) return 0;
- pTemp = pFind - 1;
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
- if (*pTemp == '.')
- ch2 = atoi(pTemp+1);
- pTemp--;
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
- if (*pTemp == '.')
- ch1 = atoi(pTemp+1);
- return 1;
- }
- ErrorCodeEnum UpsClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
- {
- LOG4VTM_FUNCTION();
- if (!m_pDevice->IsOpen())
- return GetErrorInfo(UPS_NOT_OPEN, "GetDevCategory");
- ErrorCodeEnum err = Error_Succeed;
- // int iRet = _fingerDev->GetVersion(sInfo);
- // ErrorCodeEnum errcode = HandleDevError(iRet, "Reset");
- char szType[] = {"PVER=goldpower#MID=GPAD301"};
- char szModel[] = "FWID=%s";
- strcpy(devCategory.szType, szType);
- char sSer[256]="11111111";
- if (m_pDevice->GetVersion(sSer) == 0)
- {
- sSer[32] = 0;
- sprintf(devCategory.szModel, szModel, sSer);
- }
- else
- return GetErrorInfo(UPS_NOT_OPEN, "GetDevCategory GetVersion error");
- // sprintf(devCategory.szModel, szModel, "00000000");
- strcpy(devCategory.szVendor, "cw");
- char sPath[256], sFile[128] = {0};
- GetCurLibsPath(sPath, sFile);
- short v1,v2;
- getFileVer(sFile, v1, v2);
- devCategory.version.wMajor = v1;
- devCategory.version.wMinor = v2;
- devCategory.version.wRevision = 0xffff;
- devCategory.version.wBuild = FILE_VERSION;
- char szRet[512] = {0};
- sprintf(szRet, "szType:%s,szModel:%s,szVendor:%s,version.wMajor:%d,version.wMinor:%d,version.wBuild:%d,version.wRevision:%d,eState:%d(0:故障1:正常)",
- devCategory.szType,devCategory.szModel,devCategory.szVendor,devCategory.version.wMajor,devCategory.version.wMinor,devCategory.version.wBuild,devCategory.version.wRevision,devCategory.eState);
- LOG4VTM(INFO, szRet);
- return err;
- }
- ErrorCodeEnum UpsClassImpl::GetDevStatus(UpsStatusEnum& eStatus)
- {
- LOG4VTM_FUNCTION();
- if (!m_pDevice->IsOpen())
- return GetErrorInfo(UPS_NOT_OPEN, "GetDevStatus");
- bool bUps, bLow;
- int iRet = m_pDevice->GetStatus(bUps, bLow);
- if (iRet == 0)
- eStatus = bUps ? UPS_STATUS_NO_ELECTOR : UPS_STATUS_NORMAL;
- else
- eStatus = UPS_STATUS_ERROR_TO_GET_STATUS;
- int i1,i2;
- iRet = m_pDevice->GetVoltage(i1, i2);
- if (iRet == 0)
- {
- char sVOut[128];
- sprintf(sVOut, "GetDevStatus GetVoltage UPS供电 %s 电压 %d 电量 %d%%",
- bUps ? "是" : "否", i1, i2);
- LOG4VTM(INFO, sVOut);
- }
- return GetErrorInfo(iRet, "GetDevStatus");
- }
- ErrorCodeEnum UpsClassImpl::Reset()
- {
- LOG4VTM_FUNCTION();
- if (!m_pDevice->IsOpen())
- return GetErrorInfo(UPS_NOT_OPEN, "Reset");
- int iRet = m_pDevice->ShutDown(0xffff);
- return GetErrorInfo(iRet, "Reset");;
- }
- ErrorCodeEnum UpsClassImpl::DevClose()
- {
- LOG4VTM_FUNCTION();
- m_pDevice->Close();
- return Error_Succeed;
- }
- // Shutdown ups and restart it in minutes.
- // Arguments:
- // - dwShutTime:time to shutdown (in minutes)
- // - dwRestartTime:time to restart (in minutes)
- //
- ErrorCodeEnum UpsClassImpl::Shutdown(DWORD dwShutTime, DWORD dwRestartTime)
- {
- LOG4VTM_FUNCTION();
- if (!m_pDevice->IsOpen())
- return GetErrorInfo(UPS_NOT_OPEN, "Shutdown");
- if (dwShutTime < 1)
- {
- dwShutTime = 1;
- }
- int iRet = m_pDevice->ShutDown(dwShutTime);
- if (iRet != 0)
- return GetErrorInfo(iRet, "Shutdown");
- iRet = m_pDevice->ReStart(dwShutTime + dwRestartTime);
- return GetErrorInfo(iRet, "Shutdown ReStart");
- }
- ErrorCodeEnum UpsClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
- {
- memcpy(&devErrInfo, &m_DevErrInfo, sizeof(DevErrorInfo));
- return Error_Succeed;
- }
- // DEC_SUCCESS DEC_HARDWARE DEC_TIMEOUT DEC_INVALID_PARAMETER DEC_INVALID_MASTER_KEY
- const static CmbErrorDef UpsErrorDat[] = {
- {0, "成功", Error_Succeed, DEC_SUCCESS},
- {UPS_NOT_OPEN, "设备没有打开", Error_Hardware, DEC_DEV_NOT_OPENED},
- {UPS_HARDWARE_ERROR, "设备硬件故障", Error_Hardware, DEC_HARDWARE},
- {UPS_TIMEOUT, "设备响应超时", Error_DevCommFailed, DEC_TIMEOUT},
- {UPS_PARA_ERR, "传入参数错误", Error_Param, DEC_INVALID_PARAMETER},
- };
- ErrorCodeEnum UpsClassImpl::GetErrorInfo(int iCode, char* sErr, ...)
- {
- size_t iLenOne = sizeof(CmbErrorDef);
- size_t iLenAll = sizeof(UpsErrorDat);
- int iCount = iLenAll / iLenOne;
- char sErrInfo[256]="";
- DWORD dSta = 0;
- int iErr = -1;
- for (int ia = 0; ia < iCount; ia++)
- {
- if (UpsErrorDat[ia].iCode == iCode)
- {
- dSta = UpsErrorDat[ia].iInf;
- strcpy(sErrInfo, UpsErrorDat[ia].sInf);
- iErr = UpsErrorDat[ia].iRet;
- break;
- }
- }
- char sErrAll[300];
- va_list arglist;
- va_start(arglist, sErr);
- _vsnprintf(sErrAll, 128, sErr, arglist);
- va_end(arglist);
- if (sErrInfo[0])
- {
- strcat(sErrAll, " ");
- strcat(sErrAll, sErrInfo);
- }
- sErrAll[200] = 0;
- iLenOne = strlen(sErrAll);
- sprintf(m_DevErrInfo.szErrMsg, "{\"ErrCode\":\"%04x\",\"Description\":\"%s\"}", iErr, sErrAll);
- // strcpy(m_DevErrInfo.szErrMsg, sErrAll);
- m_DevErrInfo.dwErrMsgLen = ((dSta << 16) & 0xffff0000) + iLenOne;
- if (iErr != Error_Succeed)
- LOG4VTM(WARN, m_DevErrInfo.szErrMsg);
- else
- LOG4VTM(INFO, m_DevErrInfo.szErrMsg);
- return (ErrorCodeEnum)iErr;
- }
|