コード例 #1
0
ファイル: timer.c プロジェクト: BigHNF/tcpmp-revive
static int Set(systimer* p, int No, const void* Data, int Size)
{
	int Result = ERR_INVALID_PARAM;
	switch (No)
	{
	case TIMER_TIME:
		assert(Size == sizeof(tick_t));
		LockEnter(p->Section);
		p->TickStart = *(tick_t*)Data;
		p->TimeRef = GetTimeTick();
		LockLeave(p->Section);
		Result = ERR_NONE;
		break;

	case TIMER_SPEED:
		assert(Size == sizeof(fraction));
		if (!EqFrac(&p->Speed, (const fraction*)Data))
		{
			LockEnter(p->Section);
			if (p->Play)
			{
				int t = GetTimeTick();
				p->TickStart += Scale(t-p->TimeRef,p->SpeedTime.Num,p->SpeedTime.Den);
				p->TimeRef = t;
			}
			p->Speed = *(fraction*)Data;
			p->SpeedTime = p->Speed;
			p->SpeedTime.Num *= TICKSPERSEC;
			p->SpeedTime.Den *= GetTimeFreq();
			LockLeave(p->Section);
		}
		Result = ERR_NONE;
		break;
			
	case TIMER_PLAY:
		assert(Size == sizeof(bool_t));
		if (p->Play != *(bool_t*)Data)
		{
			int t;
			LockEnter(p->Section);
			t = GetTimeTick();
			p->Play = *(bool_t*)Data;
			if (!p->Play) // save time
				p->TickStart += Scale(t-p->TimeRef,p->SpeedTime.Num,p->SpeedTime.Den);
			p->TimeRef = t;
			LockLeave(p->Section);
		}
		Result = ERR_NONE;
		break;
	}
	return Result;
}
コード例 #2
0
ファイル: dot_matrix_16_16.c プロジェクト: bluesky22c/stm32f1
void TestDotMatrix(void)
{
	if(GetTimeTick() - g_TestTimer >= 62)
	{
		SetPixel(g_X, g_Y, g_Color);
			
		if(++g_X >= MATRIX_WIDTH)
		{
			g_X = 0;
			
			if(++g_Y >= MATRIX_HEIGHT)
			{
				g_Y = 0;
					
				if(g_Color == RED_COLOR)
					g_Color = GREEN_COLOR;
				else if(g_Color == GREEN_COLOR)
					g_Color = RED_COLOR;		
			}
		}
		g_TestTimer = GetTimeTick();	
	}
}
コード例 #3
0
ファイル: BypassQueue.cpp プロジェクト: bearxiong99/new_swamm
BOOL CBypassQueue::SingleJob(CZigbeeWorker * pWorker, BITEM *pItem)
{
	TIMETICK  tmNow;
	int		nElapse, nError;
	BYTE	nAttr;

    GetTimeTick(&tmNow);
	nElapse = GetTimeInterval(&pItem->invokeTime, &tmNow);

    // IF4 Forwarding을 한다
	CIF4Invoke  invoke(m_szFepServer, m_nFepPort, DEFAULT_TIMEOUT);
    invoke.AddParamFormat("1.14", VARSMI_EUI64, &pItem->id, sizeof(EUI64));    // Source ID
    invoke.AddParam("1.6", pItem->trSeq);    // Transaction Sequence
    invoke.AddParam("1.4", pItem->nSeq);     // Message Sequence
    invoke.AddParam("1.5", pItem->nLength);  // Message Length
    invoke.AddParamFormat("1.12", VARSMI_STREAM, pItem->szData, pItem->nLength); // Message
#ifdef _WIN32
    invoke.AddParam("1.6", (UINT)pItem->invokeTime.t);    // Invoke Time
#else
    invoke.AddParam("1.6", (UINT)pItem->invokeTime.t.tv_sec);    // Invoke Time
#endif
    invoke.AddParam("1.6", (UINT)nElapse);               // Waiting Delay

	nAttr  = IF4_CMDATTR_REQUEST | IF4_CMDATTR_RESPONSE;
	nError = IF4API_Command(invoke.GetHandle(), "111.1", nAttr);

    if(nError == IF4ERR_NOERROR)
    {
        pItem->bSent = TRUE;
    }
    else
    {
        char szGUID[17];
        EUI64ToStr(&pItem->id,szGUID);
        XDEBUG("Bypass Fail %s : %s(%d)\r\n", szGUID, IF4API_GetErrorMessage(nError), nError);
    }

    return TRUE;
}
コード例 #4
0
ファイル: timer.c プロジェクト: BigHNF/tcpmp-revive
static int Get(systimer* p, int No, void* Data, int Size)
{
	int Result = ERR_INVALID_PARAM;
	switch (No)
	{
	case TIMER_PLAY: GETVALUE(p->Play,bool_t); break;
	case TIMER_SPEED: GETVALUE(p->Speed,fraction); break;
	case TIMER_TIME:
		assert(Size == sizeof(tick_t));
		LockEnter(p->Section);
		if (p->Speed.Num==0) // benchmark mode
			*(tick_t*)Data = TIME_BENCH;
		else
		if (p->Play)
			*(tick_t*)Data = p->TickStart + Scale(GetTimeTick()-p->TimeRef,p->SpeedTime.Num,p->SpeedTime.Den);
		else
			*(tick_t*)Data = p->TickStart;
		LockLeave(p->Section);
		Result = ERR_NONE;
		break;
	}
	return Result;
}
コード例 #5
0
ファイル: libsocket.c プロジェクト: austinweitao/total
/******************************************************************************************************
*
* 函数介绍:    GetValue,从服务端获取值
* 输入参数说明:
* 输出参数说明:无
* 返回值:      执行结果
*******************************************************************************************************
*/
int GetValue(int DstModule,int MsgID,int SrcModule,int MsgType,int *Param1,int *Param2,
			     char **str, int buf_size)
{
	DEBUG("DstModule=%d type=%d, SrcModule=%d, cmd=%d\n", DstModule, MsgID, SrcModule,MsgType);
	
	struct sockaddr_un address; 
	char szbuffer[RECV_BUF_LEN];
	int 	iret = 0;
	memset(szbuffer,0,sizeof(szbuffer));
	MSG_HEAD	*MsgHead = (MSG_HEAD *)szbuffer;
	MSG_BODY	*MsgBody = (MSG_BODY *)(szbuffer+HEAD_LEN);
	MsgHead->magic = MSG_MAGIC;
	MsgHead->srcmodule = sg_moduleid;
	MsgHead->msgid = ++sg_msgid;
	MsgHead->appid = MsgID;
	MsgHead->len = 0;
	
	MsgBody->iParam[0] = SrcModule;
	MsgBody->iParam[1] = MsgType;
	MsgBody->iParam[2] = 0;
	MsgBody->iParam[3] = 0;
	MsgBody->iParam[4] = 0;
	 
	//printf("send msg id:%d\n",MsgHead->msgid);
	MsgHead->len += BODY_INT_LEN ;
	pthread_mutex_lock(&sg_sendermutex);
	sg_sendermsgid[0] = MsgHead->msgid;
	//sktDebugMsg("send to %d app:%d len:%d\n",ToModule,Appid,len);
	iret = UnSendTo(sg_hSendFd,szbuffer,MsgHead->len+HEAD_LEN, DstModule);
	if(iret > 0)
	{
		unsigned long iEndClock =0,iCurClock = 0;
		iEndClock= GetTimeTick() + ONE_SECOND*2;
        
		if (MsgType == MSG_SBS_FTP_TEST)
		{
			iEndClock= GetTimeTick() + ONE_SECOND*10;
		}

        if (MsgType == MSG_SBS_METER_STATUS)
		{
			iEndClock= GetTimeTick() + ONE_SECOND*5;
		}
		
		iCurClock = GetTimeTick();
		while (!sg_quit && TimeAfterEq(iEndClock,iCurClock))
		{
			if(MsgHead->msgid != sg_sendermsgid[0])
			{
				DEBUG("get response\n");
				break;
			}
			usleep(1000);
			iCurClock = GetTimeTick();
		}
		iret = sg_sendermsgid[1];
		
#if 1	//debug
	DEBUG("g_iSendResult[0]=%d g_iSendResult[1]=%d g_sSendResult = %s \n",g_iSendResult[0],g_iSendResult[1], g_sSendResult);
#endif

		//返回参数值
		if (Param1 != NULL){
			*Param1 = g_iSendResult[0];
		}
		if (Param2 != NULL){
			*Param2 = g_iSendResult[1];
		}
		if (str != NULL){
			DEBUG("user buf size = %d, result size = %d\n",buf_size, g_iSendResultLen);
			if (buf_size >= strlen(g_sSendResult))
			{
				memcpy(str, g_sSendResult, g_iSendResultLen);
				iret = g_iSendResultLen;//如果是获取字符串的函数,返回字符串长度
			}
			else
			{
				iret = -1;
			}
		}
	}
	pthread_mutex_unlock(&sg_sendermutex);

	//clear
	sg_sendermsgid[0] = -1;
	sg_sendermsgid[1] = -1;
	g_iSendResult[0] = -1;
	g_iSendResult[1] = -1;
	if (g_sSendResult != NULL)
		memset(g_sSendResult, 0, MAX_LENGTH);
	
	return iret;
}
コード例 #6
0
ファイル: libsocket.c プロジェクト: austinweitao/total
/******************************************************************************************************
*
* 函数介绍:    SendMessage 发送数据包,并等待返回值,2秒超时。
* 输入参数说明:
* 输出参数说明:无
* 返回值:      执行结果
*******************************************************************************************************
*/
int SendMessage(int ToModule,int Appid,int Param1,int Param2,int Param3,int Param4,int Param5,
					char *Param6,int len)
{
	if (Param6 != NULL)
		DEBUG("dst=%d type=%d, src=%d, cmd=%d, %d, %d, %d, %s\n", ToModule, Appid, Param1,Param2,Param3,Param4,Param5,Param6);
	else
		DEBUG("dst=%d type=%d, src=%d, cmd=%d, %d, %d, %d\n", ToModule, Appid, Param1,Param2,Param3,Param4,Param5);

	struct sockaddr_un address; 
	char szbuffer[RECV_BUF_LEN];
	int		iret = 0;
	memset(szbuffer,0,sizeof(szbuffer));
	MSG_HEAD	*MsgHead = (MSG_HEAD *)szbuffer;
	MSG_BODY	*MsgBody = (MSG_BODY *)(szbuffer+HEAD_LEN);
	MsgHead->magic = MSG_MAGIC;
	MsgHead->srcmodule = sg_moduleid;
	MsgHead->msgid = ++sg_msgid;
	MsgHead->appid = Appid;
	MsgHead->len = 0;
	
	MsgBody->iParam[0] = Param1;
	MsgBody->iParam[1] = Param2;
	MsgBody->iParam[2] = Param3;
	MsgBody->iParam[3] = Param4;
	MsgBody->iParam[4] = Param5;
	if(Param6 != NULL)
	{
		//char str[128];
		if(len==0)
			len = strlen(Param6);
		if(len > MSG_STRING_LEN)
			len = MSG_STRING_LEN;
		memcpy(MsgBody->sParam,Param6,len);
		MsgHead->len += len;
		/*strcpy(str,MsgBody->sParam);
		printf("PostMessage 0x %x,%x,%x,%x,%x,%x,%x\n",str[0],str[1],str[2],str[3],str[4],str[5],str[6]);*/
	}
	//printf("send msg id:%d\n",MsgHead->msgid);
	MsgHead->len += BODY_INT_LEN ;
	pthread_mutex_lock(&sg_sendermutex);
	sg_sendermsgid[0] = MsgHead->msgid;
	//sktDebugMsg("send to %d app:%d len:%d\n",ToModule,Appid,len);
	iret = UnSendTo(sg_hSendFd,szbuffer,MsgHead->len+HEAD_LEN, ToModule);
	if(iret > 0)
	{
		unsigned long iEndClock =0,iCurClock = 0;
		iEndClock= GetTimeTick() + ONE_SECOND*2;
		iCurClock = GetTimeTick();
		while (!sg_quit && TimeAfterEq(iEndClock,iCurClock))
		{
			if(MsgHead->msgid != sg_sendermsgid[0])
				break;
			usleep(1000);
			iCurClock = GetTimeTick();
		}
		iret = sg_sendermsgid[1];
		sg_sendermsgid[0] = -1;
		sg_sendermsgid[1] = -1;
	}
	pthread_mutex_unlock(&sg_sendermutex);
	return iret;
}
コード例 #7
0
ファイル: bypass.cpp プロジェクト: bearxiong99/new_swamm
int main(int argc, char **argv)
{
#ifndef _WIN32
    struct  sigaction   handler;
#endif
	HANDLE	codi;
	int		nError;
    int     nDebugMode = 1;
    int     nPermit=-1, nPowerMode=-1;
    int     nListSerial = 0;
    signed char    nRfPower=254;
    int    opt;
    char    *pDevicePath = NULL;

#ifndef _WIN32
	// 보편적인 시그널 핸들러를 설치한다.
	handler.sa_handler = signal_handler;
    sigfillset(&handler.sa_mask);
    sigaction(SIGINT, &handler, 0);
    sigaction(SIGTERM, &handler, 0);
    sigaction(SIGCHLD, &handler, 0);
#endif

#ifndef _WIN32
    while((opt=getopt(argc, argv, "dp:q:G:")) != -1) {
#else
    while((opt=getopt(argc, argv, "d")) != -1) {
#endif
        switch(opt) {
            case 'd': 
                nDebugMode = 0;
                break;
            case 'l': 
                nListSerial = 1;
                break;
            case 'q': 
                nPermit = (int)strtol(optarg,(char **)NULL,10) == 0 ? 0 : 255;
                break;
            case 'G': 
                nPowerMode = (int)strtol(optarg,(char **)NULL,10);
                break;
            case 'p': 
                nRfPower = (signed char)strtol(optarg,(char **)NULL,10);
                break;
            case 'h':
            default :
                Usage(argv[0]);
                return (1);
        }
    }

    if((argc - optind) < 1) {
        Usage(argv[0]);
        return (2);
    }

	// 디버깅 화면 출력(0), 해제(1)	
    SET_DEBUG_FILE(stderr);
	SET_DEBUG_MODE(nDebugMode);

    pDevicePath = strdup(argv[optind]);
    memset(g_szCodiId, 0, sizeof(g_szCodiId));

    memset(codiDevice.szDevice, 0, sizeof(codiDevice.szDevice));
    strncpy(codiDevice.szDevice, pDevicePath, MIN(strlen(pDevicePath), sizeof(codiDevice.szDevice)-1));

	// CODIAPI를 초기화 한다.
	nError = codiInit();
	if (nError != CODIERR_NOERROR)
	{
		ReportError(NULL, nError);
		return (3);
	}

	// 새로운 Coordinator 장치를 등록한다.
	nError = codiRegister(&codi, &codiDevice);
	if (nError != CODIERR_NOERROR)
	{
		ReportError(NULL, nError);
		codiExit();
		return (3);
	}

	// Coordinator 서비스를 시작 시킨다.
	nError = codiStartup(codi);
	if (nError != CODIERR_NOERROR)
	{
		ReportError(NULL, nError);
		codiUnregister(codi);
		codiExit();
		return (3);
	}

	// 사용자 프로그램을 여기에 코딩한다.
	MainProcedure(codi, nPermit, nRfPower, nPowerMode);

	// Coordinator 서비스를 종료한다.
	nError = codiShutdown(codi);
	if (nError != CODIERR_NOERROR)
		ReportError(NULL, nError);

	// 등록된 디바이스를 해제한다.
	nError = codiUnregister(codi);
	if (nError != CODIERR_NOERROR)
		ReportError(NULL, nError);

	// API를 종료한다.
	codiExit();
	return (0);
}

const char *GetStateMessage(int nState)
{
	switch(nState) {
	  case CODISTATE_NORMAL :			return "Normal";
	  case CODISTATE_NOT_STARTED :		return "Coordinator not started";
	  case CODISTATE_NOT_CONNECTED :	return "Coordinator not connected";
	  case CODISTATE_STACK_NOT_READY :	return "Coordinator Stack not ready";
	  case CODISTATE_STACK_DOWN :		return "Coordinator Stack down";
	  case CODISTATE_JOIN_FAIL :		return "Coordinator Join Fail";
	  case CODISTATE_NO_RESPONSE :		return "Coordinator No Response";
	  case CODISTATE_ERROR :			return "Coordinator Error";
	}
	return "Unknown State";
}

#define STATE_INIT					0
#define STATE_READY					1
#define STATE_PERMIT				17
#define STATE_SET_PERMIT			40
#define STATE_RF_POWER				41
#define STATE_POWER_MODE			42
#define STATE_RESET					55
#define STATE_WAIT					100

void MainProcedure(HANDLE codi, int nPermit, signed char nRfPower, int nPowerMode)
{
	TIMETICK	start, prev, cur;
	//BYTE	szBuffer[1024];
	int		nError = CODIERR_NOERROR, nLength;
	int		nState, nElapse;
    BOOL    bSet;
    CODI_PERMIT_PAYLOAD     permit;
    CODI_NETWORK_PAYLOAD    network;

    GetTimeTick(&start);
	for(nState=STATE_INIT; !m_bCodiExitPending;)
	{
        GetTimeTick(&prev);
        //nError = codiGetState(codi);
        //XDEBUG("CODINATOR STATE(%d) = %s\r\n", nError, GetStateMessage(nError));

        //XDEBUG("m_bCodiExitPending %d\r\n", m_bCodiExitPending);
		switch(nState) {
		  case STATE_INIT :
               nState = STATE_READY;
               break;

          case STATE_READY :        
               nError = codiGetState(codi);
               XDEBUG("CODINATOR STATE(%d) = %s\r\n", nError, GetStateMessage(nError));

               if (nError != CODISTATE_NORMAL)
               {
                   nState = STATE_RESET;
                   break;           
               }
               nState = STATE_SET_PERMIT;
               break;               

		  case STATE_RESET :
			   nError = codiReset(codi);
			   if (nError != CODIERR_NOERROR) ReportError(NULL, nError);
               USLEEP(10000000); 
			   nState = STATE_READY;
			   break;

          case STATE_SET_PERMIT:
#ifdef __FN_RFSET__
               if(nPermit >=0 && nPermit <= 255)
               {
                    memset(&permit, 0, sizeof(CODI_CMD_PERMIT));
                    permit.permit_time = (BYTE)(nPermit & 0xFF);
                    nError = codiSetProperty(codi, CODI_CMD_PERMIT, (BYTE *)&permit, 
                        sizeof(CODI_PERMIT_PAYLOAD), 3000);
			        if (nError != CODIERR_NOERROR) ReportError(NULL, nError);
               }
#endif
               nState = STATE_PERMIT;
               break;

		  case STATE_PERMIT :
               memset(&permit, 0, sizeof(CODI_PERMIT_PAYLOAD));
			   nError = codiGetProperty(codi, CODI_CMD_PERMIT, (BYTE *)&permit, &nLength, 5000);
			   if (nError != CODIERR_NOERROR) 
               {
                   ReportError(NULL, nError);
               }
#ifdef __FN_RFSET__
               else 
               {
                    PRINT("OUT:PERMIT:%d\n", permit.permit_time);
               }
#endif
			   nState = STATE_RF_POWER;
			   break;

		  case STATE_RF_POWER :
               bSet = FALSE;
               memset(&network, 0, sizeof(CODI_NETWORK_PAYLOAD));
			   nError = codiGetProperty(codi, CODI_CMD_NETWORK_PARAM, (BYTE *)&network, &nLength, 5000);
			   if (nError != CODIERR_NOERROR) 
               {
                   ReportError(NULL, nError);
               }
#ifdef __FN_RFSET__
               else 
               {
                    if(nRfPower != 254)
                    {
                        network.power = nRfPower;
                        bSet = TRUE;
                    }
                    if(nPowerMode >= 0)
                    {
                        network.txpowermode = (BYTE)nPowerMode;
                        bSet = TRUE;
                    }
                    if(bSet) 
                    {
                        nError = codiSetProperty(codi, CODI_CMD_NETWORK_PARAM, (BYTE *)&network, nLength, 3000);
                    }
                    PRINT("OUT:CINFO:%d,%d,%d\n", network.channel, network.panid, network.power);
               }
#endif
			   nState = STATE_WAIT;
			   break;
		
		  case STATE_WAIT :
               GetTimeTick(&cur);
			   nElapse = GetTimeInterval(&start, &cur);

			   USLEEP(30000000);
			   nState = STATE_WAIT;
			   break;
		}

        GetTimeTick(&cur);
	    nElapse = GetTimeInterval(&prev, &cur);
	    //XDEBUG("Elapse=%d ms\r\n", nElapse);
	}
}
コード例 #8
0
ファイル: update.cpp プロジェクト: bearxiong99/new_swamm
void MainProcedure(HANDLE codi)
{
	TIMETICK start, prev, cur;
	char	szFileName[256] = "";
	BYTE	szBuffer[1024];
	int		nError, nLength;
	int		nState, nElapse;

	strcpy(szFileName, "/app/sw/ZNet3_Coordinator_v10_B16.ebl");
    GetTimeTick(&start);
	for(nState=STATE_INIT; !m_bCodiExitPending && (nState!=STATE_DONE);)
	{
        GetTimeTick(&prev);
        nError = codiGetState(codi);
        printf("CODINATOR STATE(%d) = %s\r\n", nError, GetStateMessage(nError));

		switch(nState) {
		  case STATE_INIT :
               nState = STATE_READY;
               break;

          case STATE_READY :        
               nError = codiGetState(codi);
               printf("CODINATOR STATE(%d) = %s\r\n", nError, GetStateMessage(nError));

               if (nError != CODISTATE_NORMAL)
               {
                   USLEEP(1000000); 
                   break;           
               }
               nState = STATE_MODULE_PARAM;
               break;               

		  case STATE_MODULE_PARAM :
			   codiSync(codi, 3);
               GetTimeTick(&start);
			   nError = codiGetProperty(codi, CODI_CMD_MODULE_PARAM, (BYTE *)szBuffer, &nLength, 5000);
			   if (nError != CODIERR_NOERROR) ReportError(NULL, nError);
			   nState = STATE_NETWORK_PARAM;
			   break;

		  case STATE_NETWORK_PARAM :
			   nError = codiGetProperty(codi, CODI_CMD_NETWORK_PARAM, (BYTE *)szBuffer, &nLength, 5000);
			   if (nError != CODIERR_NOERROR) ReportError(NULL, nError);
			   nState = STATE_SECURITY_PARAM;
			   break;

		  case STATE_SECURITY_PARAM :
			   nError = codiGetProperty(codi, CODI_CMD_SECURITY_PARAM, (BYTE *)szBuffer, &nLength, 5000);
			   if (nError != CODIERR_NOERROR) ReportError(NULL, nError);
			   nState = STATE_PERMIT;
			   break;

		  case STATE_PERMIT :
			   nError = codiGetProperty(codi, CODI_CMD_PERMIT, (BYTE *)szBuffer, &nLength, 5000);
			   if (nError != CODIERR_NOERROR) ReportError(NULL, nError);
			   nState = STATE_DOWNLOAD;
			   break;
		
		  case STATE_DOWNLOAD :
			   nError = codiDownload(codi, CODI_MODEMTYPE_XMODEM, szFileName, "ebl");
			   if (nError != CODIERR_NOERROR) ReportError(NULL, nError);
			   USLEEP(3000000);
			   nState = STATE_WAIT;
			   break;

		  case STATE_WAIT :
               GetTimeTick(&cur);
			   nElapse = GetTimeInterval(&start, &cur);
			   printf("\r\n");
			   printf("-----------------------------------------------------\r\n");
			   printf(" TOTAL Elapse Time = %d ms\r\n", nElapse);
			   printf("-----------------------------------------------------\r\n");
			   nState = STATE_DONE;
			   break;
		}

        GetTimeTick(&cur);
	    nElapse = GetTimeInterval(&prev, &cur);
		printf("Elapse=%d ms\r\n", nElapse);
	}
}