Example #1
0
File: xxp.hpp Project: mahrz/xxp
    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);
    }
Example #2
0
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);
}
Example #3
0
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);
}
Example #4
0
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;
    }
}
Example #5
0
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");
    }
}
Example #6
0
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;
    }
}
Example #7
0
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;
}
Example #8
0
int CDeviceClass::StartDevice(COORDINATOR *codi, CODIDEVICE *pDevice)
{
	XDEBUG("CDeviceClass: StartDevice\r\n");
	m_selfCoordinator = codi;
	codi->pInterface = (void *)this;
	return CODIERR_NOERROR;	
}
Example #9
0
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;
    }
}
Example #10
0
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;
}
Example #11
0
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;
}
Example #12
0
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;
}
Example #13
0
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;
    }
}
Example #14
0
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);
}
Example #17
0
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);
}
Example #18
0
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, &region, 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;
}
Example #20
0
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);
}
Example #21
0
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;
    }
}
Example #23
0
//////////////////////////////////////////////////////////////////////////
//  [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);
}
Example #24
0
//////////////////////////////////////////////////////////////////////////
//  [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);
}
Example #25
0
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;
}
Example #27
0
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;
}
Example #28
0
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;
}
Example #30
0
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;
}