Esempio n. 1
0
/*test case:test the reaction of the system called with 
 an activation of a task*/
static void test_t1_instance(void)
{
	StatusType result_inst_1, result_inst_2;
		
	SCHEDULING_CHECK_INIT(1);
	result_inst_1 = WaitEvent(Event1);	
	SCHEDULING_CHECK_AND_EQUAL_INT(18,E_OK, result_inst_1);

	SCHEDULING_CHECK_INIT(19);
	result_inst_2 = TerminateTask();	
	SCHEDULING_CHECK_AND_EQUAL_INT(19,E_OK, result_inst_2);


}
Esempio n. 2
0
void SetupMenu() // Set up menu
{
	uint8 i;

	while(1)
	{
	  i = GetMenuItem("TERMINAL SETUP","WiFi Setup","ESPUSB Fudge","Scan WiFi","Test Wifi","Exit");

  	if(i==1) SetupWIFI();

		if(i==2) // Open USB in CDC Mode passthough to ESP-01
    {
      SerialPurge(WIFI_UART);
      CLS();
      LCDWriteStrAt(0,4, "  USB <-> ESP01 ");
      LCDWriteStrAt(0,6, "   PROGRAMMIING   ");
      LCDWriteStrAt(0,10,"  PRESS KEY TO ");
      LCDWriteStrAt(0,12,"    CONTINUE    ");
      
      PORTSetPinsDigitalIn(IOPORT_C,  BIT_2 );
      PPSUnLock;					// Unlock PPS (Peripheral Pin Select) to allow PIN Mapping
      PPSOutput(4,RPC2,NULL); 
      PPSLock;						// lock PPS
      ESP_PGM(0);
      WIFI_PWR(1);
      i = WaitEvent(9999);
      CLS();
      WIFI_PWR(0);
      ESP_PGM(1);
  		DelayMs(500);
      WIFI_PWR(1);
      LCDWriteStrAt(0,4, "  USB <-> ESP01 ");
      LCDWriteStrAt(0,6, "   PASSTHROUGH   ");
      LCDWriteStrAt(0,10,"  POWER OFF TO ");
      LCDWriteStrAt(0,12,"     RESUME     ");
      while(1);
    }

		if(i==4) 
    {		
      if(CheckWIFI()) LCDInform("SUCCESS","Connection OK");
    }

		if(i==3) {	LCDInform("WARNING","Not Implemented");	}

		if(i==0 ||i==5) return;
	}
}
Esempio n. 3
0
/*test case:test the reaction of the system called with 
an activation of a task*/
static void test_t2_instance(void)
{
	StatusType result_inst_1,result_inst_2, result_inst_3;
	
	SCHEDULING_CHECK_INIT(1);
	result_inst_1 = ActivateTask(t1);
	SCHEDULING_CHECK_AND_EQUAL_INT(1,E_OK , result_inst_1);
	
	SCHEDULING_CHECK_INIT(2);
	result_inst_2 = WaitEvent(Event2);
	SCHEDULING_CHECK_AND_EQUAL_INT(9,E_OK , result_inst_2);
	
	SCHEDULING_CHECK_INIT(10);
	result_inst_3 = TerminateTask();
	SCHEDULING_CHECK_AND_EQUAL_INT(10,E_OK , result_inst_3);
}
Esempio n. 4
0
/*test case:test the reaction of the system called with 
 an activation of a task*/
static void test_t1_instance(void)
{
	StatusType result_inst_1, result_inst_2, result_inst_3;
	
	SCHEDULING_CHECK_INIT(1);
	result_inst_1 = SetAbsAlarm(Alarm1, 16, 16);
	SCHEDULING_CHECK_AND_EQUAL_INT(1,E_OK , result_inst_1); 
	
	SCHEDULING_CHECK_INIT(2);
	result_inst_2 = WaitEvent(Event1);
	SCHEDULING_CHECK_AND_EQUAL_INT(2,E_OK , result_inst_2); 
	
	SCHEDULING_CHECK_INIT(3);
	result_inst_3 = SetAbsAlarm(Alarm1, 2, 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(9,E_OS_STATE , result_inst_3);
	
}
Esempio n. 5
0
/*test case:test the reaction of the system called with
 an activation of a task*/
static void test_t3_instance(void)
{
    StatusType result_inst_1, result_inst_2, result_inst_3;
    StatusType received_char;

    SCHEDULING_CHECK_INIT(2);
    result_inst_1 = WaitEvent(Event1);
    SCHEDULING_CHECK_AND_EQUAL_INT(6,E_OK, result_inst_1);

    SCHEDULING_CHECK_INIT(7);
    result_inst_2 = ReceiveMessage(rm_setevent, &received_char);
    SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(7,E_OK, result_inst_2);
    SCHEDULING_CHECK_AND_EQUAL_INT(7,(int)('2'), (int)received_char);

    SCHEDULING_CHECK_INIT(8);
    result_inst_3 = TerminateTask();
    SCHEDULING_CHECK_AND_EQUAL_INT(8,E_OK, result_inst_3);
}
Esempio n. 6
0
File: main.c Progetto: idmond/moped
void CanFunctionTask(void) {

    printf("CanFunctionTask\r\n");

	for(;;){

		WaitEvent(EVENT_MASK_CanFunctionEvent);
		ClearEvent(EVENT_MASK_CanFunctionEvent);
#if !CAN_INTERRUPT
		Can_MainFunction_Read();
#endif
		Com_MainFunctionRx();

		if (ComWrite == true) {
		  Com_MainFunctionTx();
		  ComWrite = false;
		}
	}
}
Esempio n. 7
0
void StepTask() {
	EventMaskType eventMask = 0;
	while (1) {
		WaitEvent(EVENT_MASK_StepEvent);
		GetResource(RES_SCHEDULER);
		GetEvent(TASK_ID_StepTask, &eventMask);
		ClearEvent(EVENT_MASK_StepEvent);
		ReleaseResource(RES_SCHEDULER);
		if (eventMask & EVENT_MASK_StepEvent) {
			Rte_TesterRunnable();
		}
		if (eventMask & EVENT_MASK_StepEvent) {
			Rte_Logger2Runnable();
		}
		if (eventMask & EVENT_MASK_StepEvent) {
			Rte_LoggerRunnable();
		}
	}
}
Esempio n. 8
0
void SleepTask(void)
{
	uint32_t i;
	for(;;) {
		// Alarms every tick
		WaitEvent(EVENT_MASK_SLEEP_ALARM_TASK);
		ClearEvent(EVENT_MASK_SLEEP_ALARM_TASK);

		ticks++;

		for(i=0;i<OS_TASK_CNT;i++)
		{
			if((timeoutlist[i].active == TRUE) && (timeoutlist[i].timeout == ticks))
			{
				timeoutlist[i].active = FALSE;
				SetEvent(i,timeoutlist[i].mask);
			}
		}
	}

}
Esempio n. 9
0
/*test case:test the reaction of the system called with 
an activation of a task*/
static void test_t1_instance(void)
{
	StatusType result_inst_1, result_inst_2, result_inst_3, result_inst_4;
	
	SCHEDULING_CHECK_INIT(8);
	result_inst_1 = SetAbsAlarm(Alarm1, 16, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(8,E_OK , result_inst_1); 

	SCHEDULING_CHECK_INIT(9);
	result_inst_2 = WaitEvent(Event1);
	SCHEDULING_CHECK_AND_EQUAL_INT(30,E_OK , result_inst_2); 

	SCHEDULING_CHECK_INIT(31);
	result_inst_3 = SetEvent(t1, Event1);
	SCHEDULING_CHECK_AND_EQUAL_INT(31,E_OK , result_inst_3); 
	
	SCHEDULING_CHECK_INIT(32);
	result_inst_4 = ChainTask(t2);
	SCHEDULING_CHECK_AND_EQUAL_INT(32,E_OK , result_inst_4); 
	
}
Esempio n. 10
0
/*test case:test the reaction of the system called with 
 an activation of a task*/
static void test_t1_instance(void)
{		
  StatusType result_inst_1, result_inst_2, result_inst_3;
  
  SCHEDULING_CHECK_STEP(1);
  
  /* Wait Time Frame elapsed */
  
  SCHEDULING_CHECK_INIT(2);
	result_inst_1 = SetEvent(t1, t1_event1);
	SCHEDULING_CHECK_AND_EQUAL_INT(2,E_OK, result_inst_1);
  
  SCHEDULING_CHECK_INIT(3);
	result_inst_2 = WaitEvent(t1_event1);
	SCHEDULING_CHECK_AND_EQUAL_INT(3,E_OK, result_inst_2);
  
  SCHEDULING_CHECK_INIT(4);
	result_inst_3 = TerminateTask();
	SCHEDULING_CHECK_AND_EQUAL_INT(4,E_OK, result_inst_3);
  
}
Esempio n. 11
0
void PG_SDLEventSupplier::CombineMouseMotionEvents(SDL_Event* event) {
	if ( event->type == SDL_MOUSEMOTION ) {
		my_position.x = event->motion.x;
		my_position.y = event->motion.y;

		SDL_Event nextEvent;
		if ( PeepEvent ( &nextEvent ) )
			if ( nextEvent.type == SDL_MOUSEMOTION ) {
				int motionxrel = event->motion.xrel;
				int motionyrel = event->motion.yrel;

				// get the event from the queue
				WaitEvent( event );

				// add the motion distances of the last event
				event->motion.xrel += motionxrel;
				event->motion.yrel += motionyrel;
				my_position.x = event->motion.x;
				my_position.y = event->motion.y;
			}
	}
}
Esempio n. 12
0
/*test case:test the reaction of the system called with 
an activation of a task*/
static void test_t2_instance(void)
{
	
	StatusType result_inst_1, result_inst_2, result_inst_3, result_inst_4;
	
	SCHEDULING_CHECK_INIT(1);
	result_inst_1 = WaitEvent(Event2);
	SCHEDULING_CHECK_AND_EQUAL_INT(5,E_OK, result_inst_1);
	
	SCHEDULING_CHECK_INIT(6);
	result_inst_2 = ClearEvent(Event2);
	SCHEDULING_CHECK_AND_EQUAL_INT(6,E_OK, result_inst_2);
		
	SCHEDULING_CHECK_INIT(7);
	result_inst_3 = ActivateTask(t4);
	SCHEDULING_CHECK_AND_EQUAL_INT(10,E_OK, result_inst_3);
	
	SCHEDULING_CHECK_INIT(11);
	result_inst_4 = TerminateTask();
	SCHEDULING_CHECK_AND_EQUAL_INT(11,E_OK, result_inst_4);
	
}
Esempio n. 13
0
/*test case:test the reaction of the system called with 
 an activation of a task*/
static void test_t2_instance(void)
{
	StatusType result_inst_1, result_inst_3, result_inst_4, result_inst_5;
	EventMaskType result_inst_2;
	
	SCHEDULING_CHECK_INIT(1);
	result_inst_1 = ActivateTask(t1);
	SCHEDULING_CHECK_AND_EQUAL_INT(1,E_OK, result_inst_1);
	
	SCHEDULING_CHECK_INIT(2);
	result_inst_3 = GetEvent(t1,&result_inst_2);
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(2, 0 , result_inst_2);
	SCHEDULING_CHECK_AND_EQUAL_INT(2,E_OK, result_inst_3);
	
	SCHEDULING_CHECK_INIT(3);
	result_inst_4 = WaitEvent(Event2);
	SCHEDULING_CHECK_AND_EQUAL_INT(10,E_OK, result_inst_4);
	
	SCHEDULING_CHECK_INIT(11);
	result_inst_5 = TerminateTask();
	SCHEDULING_CHECK_AND_EQUAL_INT(11,E_OK, result_inst_5);

}
Esempio n. 14
0
/*test case:test the reaction of the system called with 
an activation of a task*/
static void test_t2_instance(void)
{
	StatusType result_inst_1,result_inst_2,result_inst_3,result_inst_4,result_inst_5;
	
	SCHEDULING_CHECK_INIT(3);
	result_inst_1 = ActivateTask(t1);
	SCHEDULING_CHECK_AND_EQUAL_INT(3,E_OS_LIMIT , result_inst_1); 
	
	SCHEDULING_CHECK_INIT(4);
	result_inst_2 = ActivateTask(t2);
	SCHEDULING_CHECK_AND_EQUAL_INT(4,E_OS_LIMIT , result_inst_2);
	
	SCHEDULING_CHECK_INIT(5);
	result_inst_3 = WaitEvent(Event2);
	SCHEDULING_CHECK_AND_EQUAL_INT(10,E_OK , result_inst_3);
	
	SCHEDULING_CHECK_INIT(11);
	result_inst_4 = ChainTask(t1);
	SCHEDULING_CHECK_AND_EQUAL_INT(11,E_OS_LIMIT , result_inst_4);
	
	SCHEDULING_CHECK_INIT(12);
	result_inst_5 = TerminateTask();
	SCHEDULING_CHECK_AND_EQUAL_INT(12,E_OK , result_inst_5);
}
Esempio n. 15
0
void wait(U32 delay)
{
	if (ts_timers_count >= TS_MAX_TIMERS)
		return;

	const U32 timestamp = systick_get_ms() + delay;
	U8 index = ts_bin_search(timestamp);
	if (index < ts_timers_count && ts_timers[index].timestamp <= timestamp)
		++index;

	if (ts_timers_count)
		for (U8 i = ts_timers_count - 1; i >= index; --i)
			ts_timers[i + 1] = ts_timers[i];

	ts_timers[index].timestamp = timestamp;
	ts_timers[index].task = runtsk;
	// TODO: This will not probably work if user declares own timers. Events must be taken by name or passed as parameter.
	const EventMaskType timerId = (1UL << runtsk);
	ts_timers[index].timer = timerId;
	++ts_timers_count;

	WaitEvent(timerId);
	ClearEvent(timerId);
}
Esempio n. 16
0
DWORD WINAPI CommMonitor( LPSTR lpData)
{
	CommData
	SYSTEMTIME SystemTime;
	int	 i, nItemCount, nPackType, nTranType, nDataOff,nResultLen;
	BYTE  btCalCheckSum, btRxCheckSum;
	WORD 		wSampleNo;						
	WORD 		wRSampleNo;	
 	BYTE		btResultType;
	LPSTR		lpPointer;

	Init()
	nItemCount =0;
	ResetOpPointer()				
	FillDevName()					
	PurgeComm( hComm, PURGE_RXCLEAR );
	SetCommWaitMask(EV_RXFLAG)
	
	while (TRUE)	
	{

		ResetRxPointer()		
		do
		{
			GetInQueueLength(dwReadLength)
			if(dwReadLength==0 &&dwRxBufferLength==0)
			{
				WaitEvent(EV_RXFLAG)  
				GetInQueueLength(dwReadLength)
			}
 
			ReadCommBlock(dwReadLength)	
			if ( dwRxBufferLength>=2)
			{
				if( (*(lpRxPointer-2)== ETX) )
				break;
			}
				
		}while(TRUE);				
 
		nPackType = lpOpPointer[c_PackTypeOff];
		btResultType =0xff;	
		nItemCount =0;
		switch (nPackType)	
		{
		case	'R':
			break;

		case	'D':
			nTranType =lpOpPointer[c_TranTypeOff];
		
			switch (nTranType)	
			{				  
			case	'B':
				break;
			case	'E':

				if (lpOpPointer[c_TranTypeOff+1]==ETX) 	break;

			default:
 
 				
				GetLocalTime(&SystemTime);
 				switch (*(lpOpPointer+c_SampleIdOff))	
				{
				case	'0':
					wSampleNo =StrToInt(lpOpPointer+c_SampleIdOff, c_SampleIDLen+1);
					btResultType =c_TypeSample;
					break;
				case	'1':
					wSampleNo =StrToInt(lpOpPointer+c_SampleIdOff, c_SampleIDLen+1);
					btResultType =c_TypeSample;
					break;
				case	'2':
					wSampleNo =StrToInt(lpOpPointer+c_SampleIdOff, c_SampleIDLen+1);
					btResultType =c_TypeSample;
					break;
				case	'3':
					wSampleNo =StrToInt(lpOpPointer+c_SampleIdOff, c_SampleIDLen+1);
					btResultType =c_TypeSample;
					break;
				case	'Q':
					wRSampleNo =StrToInt(lpOpPointer+c_SampleNoOff, c_SampleIDLen);
					wSampleNo = wRSampleNo+8100;
					btResultType =c_TypeQC;
					break;
				case	'P':
					wRSampleNo =StrToInt(lpOpPointer+c_SampleNoOff, c_SampleIDLen);
					wSampleNo = wRSampleNo+6000;
					btResultType =c_TypeStat;
					break;
				case	'E':
					wRSampleNo =StrToInt(lpOpPointer+c_SampleNoOff, c_SampleIDLen);
					wSampleNo = wRSampleNo+4000;
					btResultType =c_TypeEmergency;
					break;
				case	'U':
					wRSampleNo =StrToInt(lpOpPointer+c_SampleNoOff, c_SampleIDLen);
					wSampleNo = wRSampleNo+5000;
					btResultType =c_TypeUrine;
					break;

				}

			}
 
			if(btResultType != 0xff)	
				for(nDataOff =c_DataOff; *(lpOpPointer+nDataOff)!=ETX  ;)
				{
				FillSampleID(nItemCount, wSampleNo)	
				FillItemName(nItemCount, lpOpPointer+nDataOff+c_ItemIDOff, c_ItemIDLen)
 

				DeleZero(lpOpPointer, c_ResultLen)
			
				FillResult(nItemCount, lpPointer ,nResultLen )

				FillDate(nItemCount, SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay, SystemTime.wHour)

				FillResultType(nItemCount, btResultType)	

				FillComment(nItemCount, lpOpPointer+nDataOff+c_ErrorCodeOff, c_ErrorCodeLen)	//填状态注解

				FillErrorCode(nItemCount, c_Reliable)	
				nItemCount++;
				nDataOff+=c_OneDataLen;
				}
			break;
		}


		if (nItemCount>0)
		{
			(*lpResultProcessRoutine)(lpDevice->nDevNO, OutResult, nItemCount);
			lpDevice->dwRecordCount+=nItemCount;
		}

		ResetRxPointer()

		PurgeComm( hComm, PURGE_RXCLEAR );
 		WriteCommChar(ACK)
 

  }

	return TRUE;

} 
Esempio n. 17
0
/*test case:test the reaction of the system called with 
an activation of a task*/
static void test_t1_instance(void)
{
	AlarmBaseType AlarmBaseType_inst_1;
	EventMaskType EventMaskType_inst_1;
	StatusType result_inst_2, result_inst_3, result_inst_4, result_inst_5, result_inst_6, result_inst_7, result_inst_8, result_inst_9, result_inst_10, result_inst_11, result_inst_12, result_inst_13, result_inst_14, result_inst_15, result_inst_16, result_inst_17, result_inst_18, result_inst_19;
	TaskStateType TaskStateType_inst_1;
	TaskType TaskType_inst_1;
	TickType TickType_inst_1;
		
	SCHEDULING_CHECK_STEP(1);
	
	SCHEDULING_CHECK_STEP(2);
	SuspendAllInterrupts();
	
	SCHEDULING_CHECK_INIT(3);
	result_inst_2 = ActivateTask(t2);
	SCHEDULING_CHECK_AND_EQUAL_INT(4,E_OS_DISABLEDINT, result_inst_2);
	
	SCHEDULING_CHECK_INIT(5);
	result_inst_3 = TerminateTask();
	SCHEDULING_CHECK_AND_EQUAL_INT(6,E_OS_DISABLEDINT, result_inst_3);
	
	SCHEDULING_CHECK_INIT(7);
	result_inst_4 = ChainTask(t2);
	SCHEDULING_CHECK_AND_EQUAL_INT(8,E_OS_DISABLEDINT, result_inst_4);
	
	SCHEDULING_CHECK_INIT(9);
	result_inst_5 = Schedule();
	SCHEDULING_CHECK_AND_EQUAL_INT(10,E_OS_DISABLEDINT, result_inst_5);
	
	SCHEDULING_CHECK_INIT(11);
	result_inst_6 = GetTaskID(&TaskType_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(12,E_OS_DISABLEDINT, result_inst_6);
	
	SCHEDULING_CHECK_INIT(13);
	result_inst_7 = GetTaskState(t2, &TaskStateType_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(14,E_OS_DISABLEDINT, result_inst_7);
	
	SCHEDULING_CHECK_INIT(15);
	result_inst_8 = GetResource(Resource1);
	SCHEDULING_CHECK_AND_EQUAL_INT(16,E_OS_DISABLEDINT, result_inst_8);
	
	SCHEDULING_CHECK_INIT(17);
	result_inst_9 = ReleaseResource(Resource1);
	SCHEDULING_CHECK_AND_EQUAL_INT(18,E_OS_DISABLEDINT, result_inst_9);
	
	SCHEDULING_CHECK_INIT(19);
	result_inst_10 = SetEvent(t2, Event1);
	SCHEDULING_CHECK_AND_EQUAL_INT(20,E_OS_DISABLEDINT, result_inst_10);
	
	SCHEDULING_CHECK_INIT(21);
	result_inst_11 = ClearEvent(Event1);
	SCHEDULING_CHECK_AND_EQUAL_INT(22,E_OS_DISABLEDINT, result_inst_11);
	
	SCHEDULING_CHECK_INIT(23);
	result_inst_12 = GetEvent(t2, &EventMaskType_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(24,E_OS_DISABLEDINT, result_inst_12);
	
	SCHEDULING_CHECK_INIT(25);
	result_inst_13 = WaitEvent(Event1);
	SCHEDULING_CHECK_AND_EQUAL_INT(26,E_OS_DISABLEDINT, result_inst_13);
	
	SCHEDULING_CHECK_INIT(27);
	result_inst_14 = GetAlarmBase(Alarm1, &AlarmBaseType_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(28,E_OS_DISABLEDINT, result_inst_14);
	
	SCHEDULING_CHECK_INIT(29);
	result_inst_15 = GetAlarm(Alarm1, &TickType_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(30,E_OS_DISABLEDINT, result_inst_15);
	
	SCHEDULING_CHECK_INIT(31);
	result_inst_16 = SetRelAlarm(Alarm1, 1, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(32,E_OS_DISABLEDINT, result_inst_16);
	
	SCHEDULING_CHECK_INIT(33);
	result_inst_17 = SetAbsAlarm(Alarm1, 1, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(34,E_OS_DISABLEDINT, result_inst_17);
	
	SCHEDULING_CHECK_INIT(35);
	result_inst_18 = CancelAlarm(Alarm1);
	SCHEDULING_CHECK_AND_EQUAL_INT(36,E_OS_DISABLEDINT, result_inst_18);
	
	SCHEDULING_CHECK_INIT(37);
	result_inst_19 = GetActiveApplicationMode();
	SCHEDULING_CHECK_AND_EQUAL_INT(38,OSDEFAULTAPPMODE, result_inst_19);
	
	SCHEDULING_CHECK_STEP(39);
	ResumeAllInterrupts();
}
Esempio n. 18
0
DWORD WINAPI CommMonitor( LPSTR lpData)
{
	CommData
	SYSTEMTIME SystemTime;
	int	 i,nItemCount,nPackLen=0;
	BYTE  PackFun ;
	BOOL	OddFlag=FALSE;
	LPSTR lpPointer,lptemp1,lptemp2,hRXBuffer=(LPSTR)RxBuffer;
	char *p_ACK1="\x10\x31";
	char *p_ACK0="\x10\x30";

	Init()
	ResetOpPointer()				

	
	ResetRxPointer()


 	nItemCount =0;
	FillDevName()					
	SetCommWaitMask(EV_RXFLAG)
	PurgeComm( hComm, PURGE_RXCLEAR );	
	while (TRUE)
	{



		WaitEvent(EV_RXFLAG)


		GetInQueueLength(dwReadLength)
		ReadCommBlock(dwReadLength)
 

 

		lptemp1=strbchrnb(lpRxPointer,'[',1,(int)dwReadLength+5);
		PackFun= *(lptemp1+c_FuncNumOff);
		{
			case '0':	
			case 'D':
				ResetRxPointer()		
				ResetOpPointer()
				continue;
			case '1':	
				if (lptemp1!=lpOpPointer)	
				{
					for (i=0;*hRXBuffer!='[';hRXBuffer++,i++); 
					memmove(lpOpPointer ,hRXBuffer , (int)(lpRxPointer-hRXBuffer));
					lpRxPointer=lpRxPointer-i;
					hRXBuffer=(LPSTR)RxBuffer;
				}
				continue;
			case '5':	

				if ((*lpOpPointer)!='[')
				{
					for (i=0;*hRXBuffer!='[';hRXBuffer++,i++); 
					memmove(lpOpPointer ,hRXBuffer , (int)(lpRxPointer-hRXBuffer));
					lpRxPointer=lpRxPointer-i;
					hRXBuffer=(LPSTR)RxBuffer;
				continue;
			case '9':	
				
				break;			

			default :	

				continue;

		}


		wSampleID =(int)StrToInt(lpOpPointer+7,5);
		GetLocalTime(&SystemTime);
				

		lpPointer=strchrnb(lpOpPointer+1,'[',2,70);				
		while(*(lpPointer+2)=='2')	
		{

			FillSampleID(nItemCount, wSampleID)	

			lptemp1=strchrnb(lpPointer,',',1,4)+1;
			lptemp2=strchrnb(lptemp1,',',1,5);
			FillItemName(nItemCount, lptemp1,(lptemp2-lptemp1))	

			lptemp1=strchrnb(lptemp2+1,',',2,20)+1;
			for (;*lptemp1==' ';lptemp1++);
			lptemp2=strchrnb(lptemp1,',',1,10);
			FillResult(nItemCount,lptemp1,(int)(lptemp2-lptemp1))

			FillDate(nItemCount, SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay, SystemTime.wHour)

			lpPointer=strchrnb(lptemp2+1,'[',1,40);				
			nItemCount++;
		}	


		if(nItemCount>0)
		{
			(*lpResultProcessRoutine)(lpDevice->nDevNO, OutResult, nItemCount);
			lpDevice->dwRecordCount+=nItemCount;
		}

		
		nItemCount=0;	
//		nPackLen=0;
		ResetRxPointer()		
		ResetOpPointer()
		hRXBuffer=(LPSTR)RxBuffer;

	}
	return TRUE;
} // end of CommWatchProc()

void WINAPI BeforeSetCommState(DCB *pComDcb)
{
	pComDcb->EvtChar ='[';
}
Esempio n. 19
0
void Dcm_Ex1Receiver(void)
{
    WaitEvent(0x01);
    ClearEvent(0x01);
    ex1SendFC();   
}
Esempio n. 20
0
DWORD WINAPI CommMonitor( LPSTR lpData)
{
    //监控串口接收数据,并完成数据格式分析,将结果放入结果队列
	int		nItemCount,SampleIDLen,nDataOff,nResultLen,iSampleID;
	bool	bLogFile;
	char    TempWorkingID[7];
	LPSTR   lpPointer;
	//应答包
	char * p_Ack="\x2\x6\x3";
	char * p_Nak="\x2\x16\x3";
	char * p_IntSessionTXT="\x2I\x20\x3";
	char * p_ReleaseMaster="\x2M\x20\x20\x20\x20\x20\x3";
	char  PackageType;
	char SampleID[10];
	SYSTEMTIME SystemTime;
	CommData
    //通信类型1'、1''、2、3、4、5
	
	Init()
	ResetOpPointer()				

	FillDevName()					
	SetCommWaitMask(EV_RXFLAG)
	PurgeComm( hComm, PURGE_RXCLEAR );	
	memset(lpOpPointer , 0, c_RxBufferLength );
	if(NewLogFile("AEROSET.txt"))
	{
		bLogFile=TRUE;
	}

	while (TRUE)
	{


		WaitEvent(EV_RXFLAG)//等待接受数据包
		GetInQueueLength(dwReadLength)//分析数据
		ReadCommBlock(dwReadLength)
		PackageType=*(lpOpPointer+1);//数据包的类型
		if(bLogFile)
		{
			WriteLogData(hLogFile,lpOpPointer,dwReadLength);
		}
		//校验接收到的数据,若正确,则处理,否则给否定应答。
		/*
			checksum  calculation
		*/

		/*结果的数据块中可能包含病人信息、ID信息、结果数据等组。*/
		PackageType=*(lpOpPointer+1);
		switch(PackageType)
		{
		case 'Q':
			WriteCommBlock(p_Ack,3)//肯定应答
			//WriteCommChar(ACK)
			break;

		case 'R':
			//结果处理
			WriteCommBlock(p_Ack,3)//肯定应答
			iSampleID=StrToInt(lpOpPointer+c_SampleIDOff,c_SamlpeIDLen);
			itoa(iSampleID,&SampleID[0],10);
			SampleIDLen=strlen(SampleID);
			TempWorkingID[0]=lpDevice->DevItemType;
			if(SampleIDLen>=6)
			{
				strncpy(&TempWorkingID[1],&SampleID[SampleIDLen-5],5);
			}
			else
				strncpy(&TempWorkingID[6-SampleIDLen],SampleID,SampleIDLen);
			TempWorkingID[6]='\0';
			GetLocalTime(&SystemTime);
			nItemCount=0;
			for(nDataOff =c_DataOff; *(lpOpPointer+nDataOff)!=ETB ;)
			{
				strncpy(OutResult[nItemCount].WorkingID,TempWorkingID,7);
				OutResult[nItemCount].ItemNo=nItemCount+1;
				lpPointer=lpOpPointer+nDataOff;
				DeleSpace(4)
				strncpy(OutResult[nItemCount].ItemID,lpPointer,nResultLen);
				OutResult[nItemCount].ItemID[nResultLen]='\0';
				lpPointer=lpOpPointer+nDataOff+c_ResultOff;
				DeleSpace(c_ResultLen )
				FillResult(nItemCount, lpPointer ,nResultLen ) 
				FillDate(nItemCount, SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay, SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond)
				nDataOff = nDataOff + c_OneDataLen;
				nItemCount++;
			}
			if(nItemCount>0)
			{
				(*lpResultProcessRoutine)(lpDevice->nDevNO, OutResult, nItemCount);
				lpDevice->dwRecordCount+=nItemCount;
			}
		
			//WriteCommChar(ACK)
		///	WriteCommBlock(p_Ack,3)//肯定应答
			break;
		case ACK:
		case NAK:
			break;
       
		}
	

		ResetRxPointer()		
	

	}
	if(bLogFile)
	{
		CloseLogFile(hLogFile);
	}
	return TRUE;
} // end of CommWatchProc()
Esempio n. 21
0
/** 走行中の処理 */
SINT Driver::state_driving(void){

    //DEBUG_PRINT1("s", "state_driving()");

    RobotInfo r_info;
    NavInfo  n_info;

    RobotCmd cmd;

    bool ret;

	navigator_.Init();

	//Position prePos;
	//Position now_position;
 //   F32 r = 41.34;    // タイヤの半径 []
 //   F32 d = 82.6;      // 左右のタイヤ間距離 [mm]
 //   S32 angR = nxt_motor_get_count(1);
 //   S32 angL = nxt_motor_get_count(2);
 //   S32 angR_bak;
 //   S32 angL_bak;


	navigator_.Init();
    r_info = robot_.GetInfo();
    //angR = r_info.rot_encoderR_val;
    //angL = r_info.rot_encoderL_val;
	n_info = navigator_.GetInfo(r_info);
    // 最初のミッションを設定&初期化
    cur_mission_iter_ = this->mission_list_.Begin();
    if ( cur_mission_iter_ != this->mission_list_.End() ){
        (*cur_mission_iter_)->Init(r_info, n_info);
    } else {
        this->status_ = STATE_ERROR;
    }

    this->ClearEventFlag();

    SetRelAlarm(Alarm4msec, 1, DRIVE_PERIOD); // ドライブ用Alarmタイマーのセット

    // 走行開始
    // ステータスが運転中ならループを繰り返す
    while(this->status_ == STATE_DRIVING){
        //DEBUG_PRINT1("s", (*cur_mission_iter_)->Name());
        ClearEvent(EventDrive); // ドライブイベントのクリア
		WaitEvent(EventDrive);  // ドライブイベント待ち

        // タッチセンサON,もしくは転倒情報より走行停止
        if ( event_flag_.is_SetEvent(Robot::EVENT_TOUCH_SENSOR_ON) || event_flag_.is_SetEvent(Robot::EVENT_FAIL) ){
            status_ = STATE_WAIT_START;
            break;
        }

        // デバッグ用
        if ( event_flag_.is_SetEvent(Robot::EVENT_GYRO) ){
//            robot_.Beep();
        }
        if ( event_flag_.is_SetEvent(Robot::EVENT_GYRO2) ){
//            robot_.Beep();
        }

        if ( event_flag_.is_SetEvent(Robot::EVENT_SONAR_SENSOR_ON) ){
//            robot_.Beep();
        }

        r_info = robot_.GetInfo();
        n_info = navigator_.GetInfo(r_info);


        //prePos = now_position;
        //angR_bak = angR;
        //angL_bak = angL;
        //angR = r_info.rot_encoderR_val;

        //angL = r_info.rot_encoderL_val;
        //now_position = getPositionEstimation(prePos, angR - angR_bak, angL - angL_bak, r, d);

        while(1){
            ret = (*cur_mission_iter_)->Run(r_info, n_info, this->event_flag_, cmd);
            if ( ret == true ){
                robot_.Drive(cmd);
                break;
            } else if ( ret == false ){
                // 次のミッションに遷移
                ++cur_mission_iter_;
                if ( cur_mission_iter_ == mission_list_.End() ){
                    // ミッションリストがなくなったので終了
                    // ただし、最後のミッションは倒立したまま停止を続けるはずなので、
                    // 基本的にこの処理には入らない
                    this->status_ = STATE_COMPLETE;
                    break;
                } else {
                    (*cur_mission_iter_)->Init(r_info, n_info);
                    continue;
                }
            } else {
                // ここに入ることはないはず
                this->status_ = STATE_WAIT_START;
                break;
            }
        }

#if 1
        // Bluetooth データ送信
        if ( this->is_bt_connect_ ){
            robot_.BTSend(cmd, r_info, n_info);
            //robot_.BTSend(cmd, now_position);
        }
#endif

        this->ClearEventFlag();
    }

    robot_.Stop();
    this->ClearEventFlag();
    CancelAlarm(Alarm4msec);            // ドライブ用Alarmタイマーのキャンセル
    ClearEvent(EventDrive); // ドライブイベントのクリア
    return 0;
}
/** \brief Perform read operation in modbus master
 **
 ** This function start read operation and wait for
 ** end or return if callback not NULL
 **
 ** \param[in] handler handler modbus master
 ** \param[in] startAddress starting address to read
 ** \param[in] quantity of coils/register to read
 ** \param[out] pData pointer to store data reads
 ** \param[in] slaveId slave identification number
 ** \param[in] cbEndComm call back function
 **            if NULL pointer is passed, this function block until
 **            end of communication (using MODBUSE).
 **            if call back is passed, this function return and
 **            call back will be executed at end of communication
 ** \return -1 if master is busy or invalid id passed
 **         0 successful
 **         1 function not supported
 **         2 wrong starting address
 **         3 wrong quantity
 **         4 function error
 **         5 the slave not respond
 **         6 pdu received wrong
 **/
static int8_t ciaaModbus_masterRead(
      int32_t hModbusMaster,
      uint16_t startAddress,
      uint16_t quantity,
      void *pData,
      uint8_t slaveId,
      uint8_t cmd,
      modbusMaster_cbEndOfCommType cbEndComm)
{
   int8_t ret;

   /* check if no command pending and valid slave id */
   if ( (ciaaModbus_masterObj[hModbusMaster].cmd == 0) &&
      (0 != slaveId) )
   {
      /* no exception code */
      ciaaModbus_masterObj[hModbusMaster].exceptioncode = 0;

      /* set start address */
      ciaaModbus_masterObj[hModbusMaster].startAddressR = startAddress;

      /* set quantity of registers */
      ciaaModbus_masterObj[hModbusMaster].quantityR = quantity;

      /* set pointer to store data read */
      ciaaModbus_masterObj[hModbusMaster].pDataR = pData;

      /* set slave id */
      ciaaModbus_masterObj[hModbusMaster].slaveId = slaveId;

      /* set retry count */
      ciaaModbus_masterObj[hModbusMaster].retryCount = ciaaModbus_masterObj[hModbusMaster].retryComm;

      /* set task id to set event if blocking operation */
      GetTaskID(&ciaaModbus_masterObj[hModbusMaster].taskID);

      /* set call back if non-blocking operation */
      ciaaModbus_masterObj[hModbusMaster].cbEndComm = cbEndComm;

      /* set command to execute */
      ciaaModbus_masterObj[hModbusMaster].cmd = cmd;

      /* if no callback wait event... */
      if (NULL == cbEndComm)
      {
         /* wait for event */
         WaitEvent(MODBUSE);

         ClearEvent(MODBUSE);

         /* return exception code */
         ret = ciaaModbus_masterObj[hModbusMaster].exceptioncode;
      }
      else
      {
         /* if non-blocking, return 0 */
         ret = 0;
      }
   }
   else
   {
      /* return -1 if it was not possible execute the function */
      ret = -1;
   }

   return ret;
}
extern int8_t ciaaModbus_masterCmd0x06WriteSingleRegister(
      int32_t hModbusMaster,
      uint16_t startAddress,
      int16_t value,
      uint8_t slaveId,
      modbusMaster_cbEndOfCommType cbEndComm)
{
   int8_t ret;

   /* check if no command pending and valid slave id */
   if ( (ciaaModbus_masterObj[hModbusMaster].cmd == 0) &&
      (0 != slaveId) )
   {
      /* no exception code */
      ciaaModbus_masterObj[hModbusMaster].exceptioncode = 0;

      /* set start address */
      ciaaModbus_masterObj[hModbusMaster].startAddressW = startAddress;

      /* set register value */
      ciaaModbus_masterObj[hModbusMaster].dataW = value;

      /* set slave id */
      ciaaModbus_masterObj[hModbusMaster].slaveId = slaveId;

      /* set retry count */
      ciaaModbus_masterObj[hModbusMaster].retryCount = ciaaModbus_masterObj[hModbusMaster].retryComm;

      /* set task id to set event if blocking operation */
      GetTaskID(&ciaaModbus_masterObj[hModbusMaster].taskID);

      /* set call back if non-blocking operation */
      ciaaModbus_masterObj[hModbusMaster].cbEndComm = cbEndComm;

      /* set command to execute */
      ciaaModbus_masterObj[hModbusMaster].cmd = CIAA_MODBUS_FCN_WRITE_SINGLE_REGISTER;

      /* if no callback wait event... */
      if (NULL == cbEndComm)
      {
         /* wait for event */
         WaitEvent(MODBUSE);

         ClearEvent(MODBUSE);

         /* return exception code */
         ret = ciaaModbus_masterObj[hModbusMaster].exceptioncode;
      }
      else
      {
         /* if non-blocking, return 0 */
         ret = 0;
      }
   }
   else
   {
      /* return -1 if it was not possible execute the function */
      ret = -1;
   }

   return ret;
}
Esempio n. 24
0
	bool SDLApplication::Update () {
		
		SDL_Event event;
		event.type = -1;
		
		#if (!defined (IPHONE) && !defined (EMSCRIPTEN))
		
		if (active && (firstTime || WaitEvent (&event))) {
			
			firstTime = false;
			
			HandleEvent (&event);
			event.type = -1;
			if (!active)
				return active;
			
		#endif
			
			while (SDL_PollEvent (&event)) {
				
				HandleEvent (&event);
				event.type = -1;
				if (!active)
					return active;
				
			}
			
			currentUpdate = SDL_GetTicks ();
			
		#if defined (IPHONE)
			
			if (currentUpdate >= nextUpdate) {
				
				event.type = SDL_USEREVENT;
				HandleEvent (&event);
				event.type = -1;
				
			}
		
		#elif defined (EMSCRIPTEN)
			
			event.type = SDL_USEREVENT;
			HandleEvent (&event);
			event.type = -1;
		
		#else
			
			if (currentUpdate >= nextUpdate) {
				
				SDL_RemoveTimer (timerID);
				OnTimer (0, 0);
				
			} else if (!timerActive) {
				
				timerActive = true;
				timerID = SDL_AddTimer (nextUpdate - currentUpdate, OnTimer, 0);
				
			}
			
		}
		
		#endif
		
		return active;
		
	}
extern int8_t ciaaModbus_masterCmd0x17ReadWriteMultipleRegisters(
      int32_t hModbusMaster,
      uint16_t startAddressR,
      uint16_t quantityR,
      int16_t *hrValueR,
      uint16_t startAddressW,
      uint16_t quantityW,
      int16_t *hrValueW,
      uint8_t slaveId,
      modbusMaster_cbEndOfCommType cbEndComm)
{
   int8_t ret;

   /* check if no command pending and valid slave id */
   if ( (ciaaModbus_masterObj[hModbusMaster].cmd == 0) &&
      (0 != slaveId) )
   {
      /* no exception code */
      ciaaModbus_masterObj[hModbusMaster].exceptioncode = 0;

      /* set start address */
      ciaaModbus_masterObj[hModbusMaster].startAddressR = startAddressR;
      ciaaModbus_masterObj[hModbusMaster].startAddressW = startAddressW;

      /* set quantity of registers */
      ciaaModbus_masterObj[hModbusMaster].quantityR = quantityR;
      ciaaModbus_masterObj[hModbusMaster].quantityW = quantityW;

      /* set pointer to store data read */
      ciaaModbus_masterObj[hModbusMaster].pDataR = hrValueR;
      ciaaModbus_masterObj[hModbusMaster].pDataW = hrValueW;

      /* set slave id */
      ciaaModbus_masterObj[hModbusMaster].slaveId = slaveId;

      /* set retry count */
      ciaaModbus_masterObj[hModbusMaster].retryCount = ciaaModbus_masterObj[hModbusMaster].retryComm;

      /* set task id to set event if blocking operation */
      GetTaskID(&ciaaModbus_masterObj[hModbusMaster].taskID);

      /* set call back if non-blocking operation */
      ciaaModbus_masterObj[hModbusMaster].cbEndComm = cbEndComm;

      /* set command to execute */
      ciaaModbus_masterObj[hModbusMaster].cmd = CIAA_MODBUS_FCN_READ_WRITE_MULTIPLE_REGISTERS;

      /* if no callback wait event... */
      if (NULL == cbEndComm)
      {
         /* wait for event */
         WaitEvent(MODBUSE);

         ClearEvent(MODBUSE);

         /* return exception code */
         ret = ciaaModbus_masterObj[hModbusMaster].exceptioncode;
      }
      else
      {
         /* if non-blocking, return 0 */
         ret = 0;
      }
   }
   else
   {
      /* return -1 if it was not possible execute the function */
      ret = -1;
   }

   return ret;
}
Esempio n. 26
0
int SpiderThread::Run(void *param)
{
	HANDLE		httpNotifyEvent[MAX_SPIDER_THREAD+1];
	int waitR=0;
	CMyAsyncHttp::HTTP_STATE state;
	int idleHttpCount=0;
	bool	exit=false;

	m_InterfaceConfig.Lock();
	for(int i=0;i<m_HttpCount;i++)
	{
		httpNotifyEvent[i]=m_Http[i].m_FinishNotify;
		m_Http[i].SetMark(false);
	}
	httpNotifyEvent[i]=m_EndEvent;
	
	UrlInfo*	url=m_MassMem_UrlInfo.AllocMem();
	url->iUrl	=(char*)param;
	
	m_UrlList.push_back(url);
	
	m_SameRegex=(m_UrlRegex==HTTP_REGEX);

	AddHashMap(CUrl::GetUrlHost(url->iUrl),url->iUrl);
	
	while(1)
	{
		idleHttpCount	=0;
		for(int i=0;i<m_HttpCount;i++)
		{
			//检查退出指令
			if(WaitEvent(m_EndEvent,0)==0)
			{
				exit	=true;
				break;
			}
			//判断当前连接是否空闲
			if(m_Http[i].IsIdle())
			{
				state	=m_Http[i].GetHttpState();
				if(state==CMyAsyncHttp::HTTP_FINISH&&m_Http[i].GetCurrentUrl()!="")
				{
					//http请求正确
					int state=m_Http[i].GetStatusCode();
					if(state<400)
					{
						//服务器返回正常
						if(state<300)
							AnalysisData(&m_Http[i]);
						else
							RelocateUrl(&m_Http[i]);
					}
					else
					{
						ErrorProcess(&m_Http[i]);
					}
					m_Http[i].SetMark(true);
				}
				else if(state==CMyAsyncHttp::HTTP_TIMEOUT||state==CMyAsyncHttp::HTTP_STOP)
				{
					//http请求超时
					ErrorProcess(&m_Http[i]);
					m_Http[i].SetMark(true);
				}
				
				if(GetNextUrl())
				{
					m_Http[i].SetParentUrl(m_CurrentUrl->iParentUrl);
					m_Http[i].Get(m_CurrentUrl->iUrl.GetBuffer());

					m_MassMem_UrlInfo.FreeMem(m_CurrentUrl);
					m_Http[i].SetMark(false);

printf("url count:%d\n",m_MassMem_UrlInfo.GetAllocCount());
				}
				else
				{
					idleHttpCount	=0;
					for(int i=0;i<m_HttpCount;i++)
					{
						if(m_Http[i].GetMark())idleHttpCount++;
					}
					if(idleHttpCount==m_HttpCount)
					{
						exit	=true;
						break;
					}
				}
			}
		}

		if(exit)break;
		
		waitR=::WaitForMultipleObjects(m_HttpCount+1,httpNotifyEvent,false,-1);
		
		if(waitR==m_HttpCount)
			break;
	}
	
	m_InterfaceConfig.m_SpiderFinish->OnFinish();
	ClearUrlList();
	return 1;
}
Esempio n. 27
0
DWORD CSerialEx::ThreadProc (void)
{
	// Use overlapped structure
	LPOVERLAPPED lpOverlapped = 0;

	// Keep looping
	do
	{
#ifndef SERIAL_NO_OVERLAPPED
		// Reset the event handle
		::ResetEvent(m_hevtOverlappedWorkerThread);

		// Initialize the overlapped structure
		OVERLAPPED ovInternal = {0};
		ovInternal.hEvent = m_hevtOverlappedWorkerThread;

		// Start the WaitEvent (use our own overlapped structure)
		if (WaitEvent(&ovInternal) != ERROR_SUCCESS)
			return m_lLastError;

		// Wait for the overlapped operation to complete
		if (::WaitForSingleObject(m_hevtOverlappedWorkerThread,INFINITE) != WAIT_OBJECT_0)
		{
			// Set the internal error code
			m_lLastError = ::GetLastError();

			// Issue an error and quit
			_RPTF0(_CRT_WARN,"CSerialEx::ThreadProc - Unable to wait until COM event has arrived\n");
			return m_lLastError;
		}
#else
		// Start the WaitEvent (don't need to specify an overlapped structure)
		if (WaitEvent() != ERROR_SUCCESS)
			return m_lLastError;
#endif

		// Wait until one of the events happens
		if (!m_fStopping)
		{
			// Determine the event
			EEvent eEvent = GetEventType();

			// Obtain the error status during this event
			DWORD dwErrors = 0;
			if (!::ClearCommError(m_hFile,&dwErrors,0))
			{
				// Set the internal error code
				m_lLastError = ::GetLastError();

				// Issue an error and quit
				_RPTF0(_CRT_WARN, "CSerialEx::ThreadProc - Unable to obtain COM status\n");
			}

			// Convert the error
			EError eError = EError(dwErrors);

			// There was a COMM event, which needs handling. We'll call the
			// event handler. We can receive a "zero" event, when the
			// mask or event character has been set. We won't pass this
			// down to the window.
			if (eEvent)
				OnEvent(eEvent,eError);
		}
	}
	while (!m_fStopping);

	// Bye bye
	return 0;
}
Esempio n. 28
0
//------------------------------------------------------------------------------------------------------------------------------------
//
BOOL SourceCommandLoop( LPRefObj pRefMod, ULONG ulSrcID )
{
	LPRefObj	pRefSrc = NULL;
	char	buf[256];
	ULONG	ulItemID = 0;
	UWORD	wSel;
	BOOL	bRet = true;

	pRefSrc = GetRefChildPtr_ID( pRefMod, ulSrcID );
	if ( pRefSrc == NULL ) {
		// Create Source object and RefSrc structure.
		if ( AddChild( pRefMod, ulSrcID ) == true ) {
			printf("Source object is opened.\n");
		} else {
			printf("Source object can't be opened.\n");
			return false;
		}
		pRefSrc = GetRefChildPtr_ID( pRefMod, ulSrcID );
	}

	// Get CameraType
	Command_CapGet( pRefSrc->pObject, kNkMAIDCapability_CameraType, kNkMAIDDataType_UnsignedPtr, (NKPARAM)&g_ulCameraType, NULL, NULL );

	// command loop
	do {
		printf( "\nSelect (1-10, 0)\n" );
		printf( " 1. Select Item Object       2. Camera settings(1)       3. Camera settings(2)\n" );
		printf( " 4. Shooting Menu            5. Custom Menu              6. Async\n" );
		printf( " 7. Autofocus                8. Capture                  9. TerminateCapture\n" );
		printf( "10. PreCapture\n" );
		printf( " 0. Exit\n>" );
		scanf( "%s", buf );
		wSel = atoi( buf );

		switch( wSel )
		{
			case 1:// Children
				// Select Item  Object
				ulItemID = 0;
				bRet = SelectItem( pRefSrc, &ulItemID );
				if( bRet == true && ulItemID > 0 )
					bRet = ItemCommandLoop( pRefSrc, ulItemID );
				break;
			case 2:// Camera setting 1
				bRet = SetUpCamera1( pRefSrc );
				break;
			case 3:// Camera setting 2
				bRet = SetUpCamera2( pRefSrc );
				break;
			case 4:// Shooting Menu
				bRet = SetShootingMenu( pRefSrc );
				break;
			case 5:// CustomSetting Menu
				bRet = SetCustomSettings( pRefSrc );
				break;
			case 6:// Async
				bRet = Command_Async( pRefMod->pObject );
				break;
			case 7:// AutoFocus
				bRet = IssueProcess( pRefSrc, kNkMAIDCapability_AutoFocus );
				break;
			case 8:// Capture
				bRet = IssueProcess( pRefSrc, kNkMAIDCapability_Capture );
				Command_Async( pRefSrc->pObject );
				break;
			case 9:// TerminateCapture
				bRet = TerminateCaptureCapability( pRefSrc );
				break;
			case 10:// PreCapture
				bRet = IssueProcess( pRefSrc, kNkMAIDCapability_PreCapture );
				break;
			default:
				wSel = 0;
		}
		if ( bRet == false ) {
			printf( "An Error occured. Enter '0' to exit.\n>" );
			scanf( "%s", buf );
			bRet = true;
		}
		WaitEvent();
	} while( wSel > 0 );

// Close Source_Object
	bRet = RemoveChild( pRefMod, ulSrcID );

	return true;
}
Esempio n. 29
0
inline std_return RTE_Manager_Input_GetValue_Event_In(char *a)
{
	WaitEvent(RTE_Manager_Input_GetValue_Event_In_EVENT);
	ClearEvent(RTE_Manager_Input_GetValue_Event_In_EVENT);
	return 0;
}