void init_ipc(std::string& ipc_file) { zmq_requester = zmq_socket(zmq_context, ZMQ_REQ); int rc = zmq_connect(zmq_requester, ("ipc://" + ipc_file).c_str()); XDEBUG(std::cout << "adaptor: ipc setup: " << ipc_file << " " << rc << std::endl); }
BOOL CAidonParser::OnIdentificationFrame(DATASTREAM *pStream, BYTE* manufacturerId, BYTE baud, BYTE *serialSetting, BYTE * identification, int nLength, void *pCallData) { ONDEMANDPARAM *pOndemand = (ONDEMANDPARAM *)pCallData; char manuf[4]; char model[32]; int meterType=0; // Event signal m_Locker.Lock(); pOndemand->bReply = TRUE; pOndemand->nIndex ++; m_Locker.Unlock(); SetEvent(pOndemand->hEvent); /** Aidon Identification Message의 경우 Specification에는 /ADN[SP]55X0 으로 오게 되어 있고 * IEC62056-21 Spec 상에는 /ADN555X0 으로 와야 하지만 실제로는 /ADN55X0 으로 전달되고 있다. */ memset(manuf, 0, sizeof(manuf)); memset(model, 0, sizeof(model)); sscanf((const char *)identification, "%d", &meterType); strncpy(manuf, (const char *)manufacturerId, 3); sprintf(model, "%s%c%d", manuf, baud, meterType); XDEBUG(" METER TYPE : %s\r\n", model); m_pEndDeviceList->UpdateMeterInventory(&pOndemand->id, UNDEFINED_PORT_NUMBER, PARSER_TYPE_AIDON, GetPrefixVendor(), METER_VENDOR_AIDON, model, NULL, 0, 0); return CIec21DataStream::OnIdentificationFrame(pStream, manufacturerId, baud, serialSetting, identification, nLength, pCallData); }
static void recv_message(isc_task_t *task, isc_event_t *ev_in) { isc_socketevent_t *ev = (isc_socketevent_t *)ev_in; isc_event_t *dev; dns_tcpmsg_t *tcpmsg = ev_in->ev_arg; (void)task; INSIST(VALID_TCPMSG(tcpmsg)); dev = &tcpmsg->event; tcpmsg->address = ev->address; if (ev->result != ISC_R_SUCCESS) { tcpmsg->result = ev->result; goto send_and_free; } tcpmsg->result = ISC_R_SUCCESS; isc_buffer_add(&tcpmsg->buffer, ev->n); XDEBUG(("Received %d bytes (of %d)\n", ev->n, tcpmsg->size)); send_and_free: isc_task_send(tcpmsg->task, &dev); tcpmsg->task = NULL; isc_event_free(&ev_in); }
void XFE_ComposeAttachFolderView::processMessageDrop(fe_dnd_Source *source) { XFE_ThreadView *threadView=(XFE_ThreadView*)source->closure; XFE_Outliner *outliner=threadView->getOutliner(); const int *selectedList; int numSelected; if (outliner->getSelection(&selectedList, &numSelected)) { char **items=new char*[numSelected]; int numItems=0; int i; for (i=0; i<numSelected; i++) { MessageKey key=MSG_GetMessageKey(threadView->getPane(),selectedList[i]); URL_Struct *messageURL=MSG_ConstructUrlForMessage(threadView->getPane(),key); if (messageURL && messageURL->address) { XDEBUG(printf(" %d:%s\n",selectedList[i],messageURL->address)); items[numItems++]=XP_STRDUP(messageURL->address); } if (messageURL) NET_FreeURLStruct(messageURL); } if (numItems>0) addAttachments((const char **) items,numItems); for (i=0; i<numItems; i++) XP_FREE(items[i]); delete items; } }
void CMobileServer::FirmwareUpdate(char *pszFileName) { int nError; VAROBJECT *pObject; UINT nPort=0; VARAPI_Initialize(VARCONF_FILENAME, (VAROBJECT *)m_Root_node, FALSE); // Local Port에 대한 설정 값을 얻어온다 pObject = VARAPI_GetObjectByName("sysLocalPort"); if (pObject != NULL) { nPort = pObject->var.stream.u32; } if(nPort == 0) { nPort = 8000; // Default Port } IF4API_Initialize(nPort, NULL); CIF4Invoke invoke("127.0.0.1", nPort, 5*60); invoke.AddParam("1.11", "/dev/mobile"); invoke.AddParam("1.11", pszFileName); invoke.AddParam("1.4", (BYTE)3); nError = invoke.Command("197.1", IF4_CMDATTR_REQUEST | IF4_CMDATTR_MCUIPC | IF4_CMDATTR_RESPONSE); if (nError != IF4ERR_NOERROR) { XDEBUG("ERROR: Cannot install\r\n"); } }
void XFE_ComposeAttachFolderView::processBookmarkDrop(fe_dnd_Source *source) { XFE_BookmarkView* bookmarkView=( XFE_BookmarkView*)source->closure; if (!bookmarkView) return; MWContext *context=bookmarkView->getContext(); XFE_Outliner *outliner=bookmarkView->getOutliner(); const int *selectedList; int numSelected; if (outliner->getSelection(&selectedList, &numSelected)) { char **items=new char*[numSelected]; int numItems=0; int i; for (i=0; i<numSelected; i++) { BM_Entry* entry=BM_AtIndex(context,selectedList[i]+1); if (BM_GetType(entry)==BM_TYPE_URL || BM_GetType(entry)==BM_TYPE_ALIAS) { const char *address=BM_GetAddress(entry); if (address) { XDEBUG(printf(" %d:%s\n",selectedList[i],address)); items[numItems++]=XP_STRDUP(address); } } } if (numItems>0) addAttachments((const char **) items,numItems); for (i=0; i<numItems; i++) XP_FREE(items[i]); delete items; } }
int COndemander::_RomRead(HANDLE endi, EUI64 *id, WORD addr, int len, BYTE *pszBuffer, int *nSize, int nRetryLimit) { int nRetry; int nError = CODIERR_NOERROR; int Limit = MAX_ROM_READ_BYTES; int i,next,nRead; BYTE buffer[Limit]; *nSize = nRead = 0; for(nRetry=0; nRetry<nRetryLimit; nRetry++) { for(i=(*nSize);i<len;i+=Limit) { memset(buffer,0,sizeof(buffer)); next = len - i > Limit ? Limit : len - i; nError = endiReadRom(endi, addr + i, next, buffer, &nRead, sensorCommTimeout(id, DEFAULT_COMM_TIMEOUT)); if (nError != CODIERR_NOERROR) { XDEBUG("ERROR: endiReadRom(%d): %s\r\n", nError, codiErrorMessage(nError)); break; } memcpy(pszBuffer + i, buffer, next); *nSize += nRead; } if(nError == CODIERR_NOERROR) break; // 0.5초 이후에 재시도 한다. usleep(500000); } return nError; }
int CDeviceClass::StartDevice(COORDINATOR *codi, CODIDEVICE *pDevice) { XDEBUG("CDeviceClass: StartDevice\r\n"); m_selfCoordinator = codi; codi->pInterface = (void *)this; return CODIERR_NOERROR; }
void XFE_ComposeAttachFolderView::processHistoryDrop(fe_dnd_Source *source) { XFE_HistoryView *historyView = (XFE_HistoryView*)source->closure; if (!historyView) return; MWContext *context=historyView->getContext(); XFE_Outliner *outliner=historyView->getOutliner(); const int *selectedList; int numSelected; if (outliner->getSelection(&selectedList, &numSelected)) { char **items=new char*[numSelected]; int numItems=0; int i; for (i=0; i<numSelected; i++) { gh_HistEntry *entry=historyView->getEntry(selectedList[i]); if (entry && entry->address) { XDEBUG(printf(" %d:%s\n",selectedList[i],entry->address)); items[numItems++]=XP_STRDUP(entry->address); } } if (numItems>0) addAttachments((const char **) items,numItems); for (i=0; i<numItems; i++) XP_FREE(items[i]); delete items; } }
int if4timestamp(char * ipaddr, int port) { TIMESTAMP tmEvent; IF4Invoke * pInvoke = NULL; int nError,i; SET_DEBUG_MODE(0); CIF4Invoke invoke(ipaddr, port, 3); GETTIMESTAMP(&tmEvent, NULL); invoke.AddParamFormat("1.16", VARSMI_TIMESTAMP, &tmEvent, sizeof(TIMESTAMP)); pInvoke = (IF4Invoke *)invoke.GetHandle(); nError = IF4API_Command(pInvoke, "130.4", IF4_CMDATTR_REQUEST | IF4_CMDATTR_RESPONSE); if(nError != IF4ERR_NOERROR) return -nError; for(i=0;i< pInvoke->nResultCount; i++) { memcpy(&tmEvent, pInvoke->pResult[i]->stream.p, sizeof(TIMESTAMP)); XDEBUG("TIMESTAMP(C): %04d/%02d/%02d %02d:%02d:%02d\n", tmEvent.year, tmEvent.mon, tmEvent.day, tmEvent.hour, tmEvent.min, tmEvent.sec); } return nError; }
int CMeterReader::Metering(EUI64 * id, int nOption, int nOffset, int nCount) { METERITEM * item; char szId[16+1]; if (!m_bInitialized) return IF4ERR_BUSY; item = (METERITEM *)MALLOC(sizeof(METERITEM)); if (item == NULL) return IF4ERR_MEMORY_ERROR; memset(item, 0, sizeof(METERITEM)); memcpy(&item->id, id, sizeof(EUI64)); item->nOption = nOption; item->nOffset = nOffset; item->nCount = nCount; eui64toa(&item->id, szId); XDEBUG("Recovery Metering : ID=%s, Option=%d, Offset=%d, Count=%d\r\n", szId, nOption, nOffset, nCount); m_Locker.Lock(); item->nPosition = m_List.AddTail(item); m_Locker.Unlock(); ActiveThread(); return IF4ERR_NOERROR; }
int CMobileClient::ReadLineFromModem(char *pszBuffer, int nLength, int nTimeout) { int nElapse, c, nBytes = 0; for(nElapse=0; nElapse<nTimeout;) { c = m_pQueue->GetQ(); if (c == -1) { usleep(100000); nElapse += 100; continue; } if ((c == 0xd) || (c == 0xa)) { pszBuffer[nBytes] = 0; nBytes++; break; } pszBuffer[nBytes] = c; nBytes++; if (nBytes >= nLength) break; } if (nBytes > 1) XDEBUG("%s\r\n", pszBuffer); return nBytes; }
int COsakiParser::StateWaitReply(ONDEMANDPARAM *pOndemand, BYTE *szBuffer) { WaitForSingleObject(pOndemand->hEvent, (int)(GetReplyTimeout()/1000)); if(pOndemand->bPartialWait) { pOndemand->bPartialWait = FALSE; return STATE_WAIT_REPLY; } if(pOndemand->bReply) { pOndemand->nRetry = 0; pOndemand->nResult = ONDEMAND_ERROR_OK; return STATE_QUERY; } else { /** Timeout */ pOndemand->nRetry ++; XDEBUG(" FAIL COUNT SUCC %d\r\n", pOndemand->nRetry); if (pOndemand->nRetry >= 3) return STATE_ERROR; else return STATE_QUERY; } }
int CAgentService::SetResetState(int nType) { SetFileValue("/app/conf/reset.mcu", nType); XDEBUG("Set Reset State %d\xd\xa", nType); m_nResetReason=nType; return m_nResetReason; }
void PrintCommandFrameHeader(CODI_COMMAND_FRAME *pFrame, int nLength) { XDEBUG(" COMMAND (ACCESS=%s, FLOW=%s, TYPE=%s[0x%02X], LENGTH=%d)\r\n", (pFrame->hdr.ctrl & CODI_FRAMEFLOW_READ) > 0 ? "Read" : "Write", (pFrame->hdr.ctrl & CODI_FRAMEFLOW_RESPONSE) > 0 ? "Response" : "Request", GetCommandTypeName(pFrame->hdr.type), pFrame->hdr.type, pFrame->hdr.len); }
void PrintInformationFrameHeader(CODI_INFO_FRAME *pFrame, int nLength) { XDEBUG(" INFORMATION (ACCESS=%s, FLOW=%s, TYPE=%s[0x%02X], LENGTH=%d)\r\n", (pFrame->hdr.ctrl & CODI_FRAMEFLOW_READ) > 0 ? "Read" : "Write", (pFrame->hdr.ctrl & CODI_FRAMEFLOW_RESPONSE) > 0 ? "Response" : "Request", GetInformationTypeName(pFrame->hdr.type), pFrame->hdr.type, pFrame->hdr.len); }
BOOL COsakiParser::OnDataFrame(DATASTREAM *pStream, BYTE *pszBuffer, int nLength, void *pCallData) { ONDEMANDPARAM *pOndemand = (ONDEMANDPARAM *)pCallData; OSAKI_OPTION_TBL *pOsakiOptionTbl; int nIndex = pOndemand->nIndex; unsigned long long int value; XDEBUG(" OSAKI response payload : %d\r\n", nLength); XDUMP((const char *)pszBuffer, nLength, TRUE); if(!pOndemand) return TRUE; pOsakiOptionTbl = &((OSAKI_OPTION_TBL *)pOndemand->pOndemandCallData)[nIndex]; if(pOsakiOptionTbl->nStatus == 0 && pOsakiOptionTbl->szDesc == NULL) return TRUE; switch(pOsakiOptionTbl->nStatus) { case IDX_REQ_PULSE: // Current Pulse value = AsciiToInt(pszBuffer + nLength - 7, 7); XDEBUG(" OSAKI Power : %ld KWh\r\n", value); pOndemand->nCurPulse = (UINT) value; break; case IDX_REQ_RELAY_STATUS: // Current Pulse value = AsciiToInt(pszBuffer + 12, 2); XDEBUG(" Relay : %ld\r\n", value); switch((BYTE)value) { case 0x00: pOndemand->nEnergyLevel = ENERGY_LEVEL_MAX; break; case 0x01: pOndemand->nEnergyLevel = ENERGY_LEVEL_MIN; break; default: pOndemand->nEnergyLevel = ENERGY_LEVEL_UNDEFINED; break; } /** Energy Level Update */ m_pEndDeviceList->SetEnergyLevel(&pOndemand->id, pOndemand->nEnergyLevel, 0); XDEBUG(" ENERGY LEVEL : %d\r\n", pOndemand->nEnergyLevel); break; } // Event signal m_Locker.Lock(); pOndemand->bReply = TRUE; pOndemand->nIndex ++; m_Locker.Unlock(); SetEvent(pOndemand->hEvent); return CIec21DataStream::OnDataFrame(pStream, pszBuffer, nLength, pCallData); }
void CWatchdog::Destroy() { CTimeoutThread::ShutdownThread(); RemoveAll(); // Issue #843 : OS Watchdog XDEBUG("delete OS WATCHDOG service\r\n"); DELETE_WATCHDOG }
static void recv_length(isc_task_t *task, isc_event_t *ev_in) { isc_socketevent_t *ev = (isc_socketevent_t *)ev_in; isc_event_t *dev; dns_tcpmsg_t *tcpmsg = ev_in->ev_arg; isc_region_t region; isc_result_t result; INSIST(VALID_TCPMSG(tcpmsg)); dev = &tcpmsg->event; tcpmsg->address = ev->address; if (ev->result != ISC_R_SUCCESS) { tcpmsg->result = ev->result; goto send_and_free; } /* * Success. */ tcpmsg->size = ntohs(tcpmsg->size); if (tcpmsg->size == 0) { tcpmsg->result = ISC_R_UNEXPECTEDEND; goto send_and_free; } if (tcpmsg->size > tcpmsg->maxsize) { tcpmsg->result = ISC_R_RANGE; goto send_and_free; } region.base = isc_mem_get(tcpmsg->mctx, tcpmsg->size); region.length = tcpmsg->size; if (region.base == NULL) { tcpmsg->result = ISC_R_NOMEMORY; goto send_and_free; } XDEBUG(("Allocated %d bytes\n", tcpmsg->size)); isc_buffer_init(&tcpmsg->buffer, region.base, region.length); result = isc_socket_recv(tcpmsg->sock, ®ion, 0, task, recv_message, tcpmsg); if (result != ISC_R_SUCCESS) { tcpmsg->result = result; goto send_and_free; } isc_event_free(&ev_in); return; send_and_free: isc_task_send(tcpmsg->task, &dev); tcpmsg->task = NULL; isc_event_free(&ev_in); return; }
int COndemander::Command(char *pszType, CMDPARAM *pCommand, METER_STAT *pStat) { CMeterParser *pParser; // 파서를 찾지 못하면 GE PARSER가 반환됨. pParser = m_pMeterParserFactory->SelectParser(pszType); XDEBUG("Ondemand PARSER: Parser=%s, %s(%s)\r\n", pszType, pParser->GetName(), pParser->GetDescription()); return pParser->OnCommand(pCommand, pStat); }
int XFE_ComposeAttachDrop::processTargets(Atom *targets,const char **data,int numItems) { XDEBUG(printf("XFE_ComposeAttachDrop::processTargets()\n")); if (!targets || !data || numItems==0) return FALSE; // pass dropped data to attachment panel char **dropInfo=new char*[numItems]; int numDropInfo=0; int i; for (i=0;i<numItems;i++) { if (targets[i]==None || data[i]==NULL || strlen(data[i])==0) continue; XDEBUG(printf(" [%d] %s: \"%s\"\n",i,XmGetAtomName(XtDisplay(_widget),targets[i]),data[i])); if (targets[i]==_XA_FILE_NAME) { dropInfo[numDropInfo++]=XP_STRDUP(data[i]); } if (targets[i]==_XA_NETSCAPE_URL) { XFE_URLDesktopType urlData(data[i]); for (int j=0;j<urlData.numItems();j++) { dropInfo[numDropInfo++]=XP_STRDUP(urlData.url(j)); } } if (targets[i]==XA_STRING) { dropInfo[numDropInfo++]=XP_STRDUP(data[i]); } } int dropStatus=_attachPanel->dropAttachments((const char **)dropInfo,numDropInfo); // free drop info for(i=0;i<numDropInfo; i++) if (dropInfo[i]) XP_FREE(dropInfo[i]); delete dropInfo; return dropStatus; }
void codiOnInformation(HANDLE codi, BYTE ctrl, BYTE type, BYTE *payload, int nLength) { // Information Frame에 대한 User Handler XDEBUG("Information Frame (CTRL=0x%02X, TYPE=0x%02X, LEN=%d)\r\n", ctrl, type, nLength); XDUMP((char *)payload, nLength, TRUE); switch(type) { case INFORMATION_TYPE_SHUTDOWN: { CIF4Invoke invoke("127.0.0.1", m_nLocalAgentPort); BYTE nAttr = IF4_CMDATTR_REQUEST | IF4_CMDATTR_RESPONSE; int nError = IF4API_Command(invoke.GetHandle(), "100.3", nAttr); XDEBUG("\033[1;40;31mPower Down Signal cached : Shutdown Concentrator (%s)\033[0m\r\n", codiErrorMessage(nError)); } break; } }
////////////////////////////////////////////////////////////////////////// // [3/21/2011 DHKim] // M:N관계를 위한 Group와 Member간의 Relation Table // (GroupKey INTEGER - Foreign Key, EUI64ID CHAR(16) - Foreign Key ////////////////////////////////////////////////////////////////////////// int CDbMeter::db_GroupMemberRelation_Create(const char* dbfilename) { sqlite3* db = NULL; if(sqlite3_open(dbfilename, &db) != SQLITE_OK) { XDEBUG("SQLite open failed: %s\r\n", sqlite3_errmsg(db)); return sqlite3_errcode(db); } if(sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS groupmemberrelation(GroupKey INTEGER, EUI64ID CHAR(16), FOREIGN KEY(GroupKey) REFERENCES groups(GroupKey), FOREIGN KEY(EUI64ID) REFERENCES member(EUI64ID)", NULL, NULL, NULL) != SQLITE_OK) { XDEBUG("SQLite create failed: %s\r\n", sqlite3_errmsg(db)); return sqlite3_errcode(db); } sqlite3_close(db); return sqlite3_errcode(db); }
////////////////////////////////////////////////////////////////////////// // [3/21/2011 DHKim] // 멤버 테이블 생성 Table( EUI64ID PrimaryKey, Model TEXT, MeterSerial TEXT, // HWver/SWver char(10), SensorState char(10), NetworkPathInfo TEXT) ////////////////////////////////////////////////////////////////////////// int CDbMeter::db_Member_Create(const char* dbfilename) { sqlite3* db = NULL; if(sqlite3_open(dbfilename, &db) != SQLITE_OK) { XDEBUG("SQLite open failed: %s\r\n", sqlite3_errmsg(db)); return sqlite3_errcode(db); } if(sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS member(EUI64ID CHAR(10) PRIMARY KEY, Model TEXT, MeterSerial TEXT, HWver CHAR(10), SWver CHAR(10), SensorState CHAR(10), NetworkPathInfo TEXT)", NULL, NULL, NULL) != SQLITE_OK) { XDEBUG("SQLite create failed: %s\r\n", sqlite3_errmsg(db)); return sqlite3_errcode(db); } sqlite3_close(db); return sqlite3_errcode(db); }
void CMeterUploader::ReduceDataDirectory() { DIR *dir_fdesc; dirent *dp; time_t now, old; struct tm when; char szPath[128]; char szDate[20]; time(&now); if ((now-m_nLastReduce) <= (60*60)) return; when = *localtime(&now); /** 매 0시에만 파일을 지우던 것을 매시간 지우도록 변경 * if ((when.tm_hour != 0) || (when.tm_min < 50)) */ if (when.tm_min < 50) return; time(&old); old -= m_nDataSaveDay * (24*(60*60)); when = *localtime(&old); sprintf(szDate, "%04d%02d%02d%02d", when.tm_year+1900, when.tm_mon+1, when.tm_mday, when.tm_hour); time(&m_nLastReduce); dir_fdesc = opendir("/app/data"); if (dir_fdesc == NULL) return; for(; (dp=readdir(dir_fdesc));) { #if defined(_DIRENT_HAVE_D_TYPE) if (dp->d_type == DT_DIR) continue; #endif if (dp->d_name[0] == '.') continue; if (strncmp(dp->d_name, szDate, strlen(szDate)) >= 0) continue; XDEBUG("Reduce /app/data/%s (%s)...\xd\xa", dp->d_name, szDate); sprintf(szPath, "/app/data/%s", dp->d_name); unlink(szPath); } closedir(dir_fdesc); SystemExec("sync"); }
void CSerialServer::CheckModemStatus(BOOL bUpdateNow) { if (!GetCommModemStatus(m_hComPort, &m_dwModemStatus)) XDEBUG("GetCommModemStatus Error\r\n"); // Report status if bUpdateNow is true or status has changed if (bUpdateNow || (m_dwModemStatus != m_dwOldModemStatus)) OnUpdateModemStatus(m_dwModemStatus); m_dwOldModemStatus = m_dwModemStatus; }
int CMeterUploader::UploadFileList(char **pList, int nCount) { time_t tmUpload, now; int i,j, nSuccess=0; int retryCount=10; BOOL getPermit; time(&tmUpload); for(i=0; i<nCount; i++) { // 제한 시간이 초과되면 중단. time(&now); if ((int)abs(((now-tmUpload)/60)) > m_nUploadTryTime) break; for(j=0; j<retryCount; j++) { if((getPermit=SetBusyFile(pList[i]))) break; usleep(100000); } if(!getPermit) { XDEBUG("Get File Handle fail : %s\r\n", pList[i]); break; } XDEBUG("Upload try : %s\r\n", pList[i]); if (!UploadFile(pList[i])) { XDEBUG("Upload fail : %s\r\n", pList[i]); ResetBusyFile(pList[i]); break; } XDEBUG("Upload success : %s\r\n", pList[i]); UploadComplete(pList[i]); ResetBusyFile(pList[i]); nSuccess ++; } return nSuccess; }
BOOL COsakiParser::OnAck(DATASTREAM *pStream, void *pCallData) { ONDEMANDPARAM *pOndemand = (ONDEMANDPARAM *)pCallData; OSAKI_OPTION_TBL *pOsakiOptionTbl; int nIndex = pOndemand->nIndex; pOsakiOptionTbl = &((OSAKI_OPTION_TBL *)pOndemand->pOndemandCallData)[nIndex]; if(pOsakiOptionTbl->nStatus != 0 && pOsakiOptionTbl->szDesc != NULL) { /** TODO RelayTimeout * Relay Control 후 Energy Level을 읽었을 때 바로 반영되지 않기 때문에 * 성공했다면 당연하게 변경된 것으로 판단한다. * 이 부분은 추후에 수정이 필요하다. */ switch(pOsakiOptionTbl->nStatus) { case IDX_CMD_RELAY_DISCONNECT: pOndemand->nEnergyLevel = ENERGY_LEVEL_MAX; /** Energy Level Update */ m_pEndDeviceList->SetEnergyLevel(&pOndemand->id, pOndemand->nEnergyLevel, 0); XDEBUG(" ENERGY LEVEL : %d\r\n", pOndemand->nEnergyLevel); break; case IDX_CMD_RELAY_CONNECT: pOndemand->nEnergyLevel = ENERGY_LEVEL_MIN; /** Energy Level Update */ m_pEndDeviceList->SetEnergyLevel(&pOndemand->id, pOndemand->nEnergyLevel, 0); XDEBUG(" ENERGY LEVEL : %d\r\n", pOndemand->nEnergyLevel); break; } } // Event signal m_Locker.Lock(); pOndemand->bReply = TRUE; pOndemand->nIndex ++; m_Locker.Unlock(); SetEvent(pOndemand->hEvent); return CIec21DataStream::OnAck(pStream, pCallData); }
BOOL CSerialServer::Startup(const char *pszDevice, int nMaxSession, int nTimeout, int nSpeed, int nParity, int nOptions) { if (IsStarted()) return FALSE; m_bStarted = FALSE; m_bExitPending = FALSE; m_bWatchExit = FALSE; m_bSendReady = FALSE; m_bRecvReady = FALSE; m_nMaxSession = nMaxSession; m_nTimeout = nTimeout; #ifndef _WIN32 nSpeed = (nSpeed == -1) ? B9600 : nSpeed; #else nSpeed = (nSpeed == -1) ? CBR_9600 : nSpeed; #endif if (!CreateDaemonDevice(pszDevice, nMaxSession, nSpeed, nParity, nOptions)) return FALSE; if (pthread_create(&m_watchThreadID, NULL, WatchThread, (void *)this) != 0) { XDEBUG("DELETEME: thread create fail\n"); return FALSE; } if (pthread_create(&m_sendThreadID, NULL, SendThread, (void *)this) != 0) { XDEBUG("DELETEME: thread create fail\n"); return FALSE; } pthread_detach(m_watchThreadID); while(!m_bSendReady || !m_bRecvReady) USLEEP(10000); m_bStarted = TRUE; return TRUE; }
int CBaseParser::ReadRomMap(WORD addr, int len, ONDEMANDPARAM *pOndemand, BYTE *szBuffer, int nRetryState, int nSuccState) { int readLen=0, nError; pOndemand->stat.nCount ++; pOndemand->stat.nSendCount ++; pOndemand->stat.nSend += sizeof(ENDI_ROMREAD_PAYLOAD) + sizeof(CODI_HEADER) + sizeof(EUI64) + sizeof(CODI_TAIL); gettimeofday((struct timeval *)&pOndemand->tmSend, NULL); nError = endiReadRom(pOndemand->endi, addr, len, (BYTE *)szBuffer, &readLen, GetReplyTimeout()); if (nError != CODIERR_NOERROR) { pOndemand->stat.nError ++; if (pOndemand->nRetry < GetRetryCount()) // 3회 이상 연속 실패시 종료 { pOndemand->nRetry++; return nRetryState; }else { pOndemand->nRetry = 0; return STATE_ERROR; } } if (readLen != len) { XDEBUG(ANSI_COLOR_RED " ****** PARSER: Invalid ROM DATA Length ******\r\n" ANSI_NORMAL); XDEBUG(ANSI_COLOR_RED " Request Size = %d, Read Size = %d\r\n" ANSI_NORMAL, len, readLen); pOndemand->nRetry++; return nRetryState; } pOndemand->nRetry = 0; UpdateStatistics(pOndemand, (BYTE *)szBuffer, readLen); pOndemand->stat.nCount ++; pOndemand->stat.nRecvCount ++; return nSuccState; }