Пример #1
0
/*
 * timeout_queries() -- give up on unrequited NTP queries
 */
void
timeout_queries(void)
{
	struct timeval	start_cb;
	u_int		idx;
	sent_pkt *	head;
	sent_pkt *	spkt;
	sent_pkt *	spkt_next;
	long		age;
	int didsomething = 0;

	TRACE(3, ("timeout_queries: called to check %u items\n",
		  (unsigned)COUNTOF(fam_listheads)));

	gettimeofday_cached(base, &start_cb);
	for (idx = 0; idx < COUNTOF(fam_listheads); idx++) {
		head = fam_listheads[idx];
		for (spkt = head; spkt != NULL; spkt = spkt_next) {
			char xcst;

			didsomething = 1;
			switch (spkt->dctx->flags & CTX_xCST) {
			    case CTX_BCST:
				xcst = 'B';
				break;

			    case CTX_UCST:
				xcst = 'U';
				break;

			    default:
				INSIST(!"spkt->dctx->flags neither UCST nor BCST");
				break;
			}

			spkt_next = spkt->link;
			if (0 == spkt->stime || spkt->done)
				continue;
			age = start_cb.tv_sec - spkt->stime;
			TRACE(3, ("%s %s %cCST age %ld\n",
				  stoa(&spkt->addr),
				  spkt->dctx->name, xcst, age));
			if (age > response_timeout)
				timeout_query(spkt);
		}
	}
	// Do we care about didsomething?
	TRACE(3, ("timeout_queries: didsomething is %d, age is %ld\n",
		  didsomething, (long) (start_cb.tv_sec - start_tv.tv_sec)));
	if (start_cb.tv_sec - start_tv.tv_sec > response_timeout) {
		TRACE(3, ("timeout_queries: bail!\n"));
		event_base_loopexit(base, NULL);
		shutting_down = TRUE;
	}
}
Пример #2
0
/*******************************************************************************
* Function Name  : putin_value
* Description    : 从键盘输入字符存储到pData(注:存储时按照输入字符个数存储,显示时按照文本框的长度显示,两个数据不一定相同)
* Input            enable_putin:	允许输入位:		RESET-不允许; SET-允许
*				   enable_shift:	允许切换输入法
*                  x:				x轴坐标
*				   y:				y轴坐标
*				   allow_putin_num:	允许输入字符个数
*				   len_fill:		数据区填充长度				   
*				   str_count:		输入字符个数
*				   save_type:		数据保存类型:
*			       pType_int:		数据保存方式:整型数据缓存 
*				   pType_float:	数据保存方式:浮点型数据缓存
*				   pType_char:		数据保存方式: 字符型数据缓存
* Return         : 输入状态
*ReadMe:思路:无论保存方式如何,首先把数据存储为字符型数据,最后进行相应的转换,得到整型或者浮点型数据 
*******************************************************************************/
STATUS_PUTIN_TypeDef KeyPutinChars( FlagStatus enable_putin, STATUS_SHIFT_TypeDef enable_shift, 
		uint16_t x, uint16_t y, uint8_t allow_putin_num, uint8_t len_fill, uint8_t *cnt, 
		TYPE_SAVE_TypeDef save_type,int32_t *pint, float *pfloat, char *pchar )
{
	STATUS_PUTIN_TypeDef cur_status = STATUS_DISABLE_PUTIN;	
	const uint8_t MAX_ALLOW_PUTIN_CNT = 20;		//最大允许输入字符个数
	char putin_buff[MAX_ALLOW_PUTIN_CNT+1];		//输入字符缓存
	uint8_t putin_cnt = 0;						//当前输入字符个数
	FlagStatus putin_chars = RESET;				//正在输入字母
	uint8_t last_key = VAL_KEY_NO_PRESS;
	uint8_t index_cycle = 0;					//同一个按键对应的不同的字母索引值
	uint8_t key_chg = 0;
		
	ShowTypewrite(enable_putin);						//加载输入法GUI
	
	if (RESET == enable_putin)
	{
		return STATUS_DISABLE_PUTIN;
	}
	
	while ( TRUE )
	{				
		switch ( cur_status )
		{
			case STATUS_DISABLE_PUTIN:
				if (SET == pKey->putin_data_avail)	
				{				
					dynamic_load_shortcut_menu(PAGE_DEFAULT_NULL);
					last_key = pKey->key_value;	
					cur_status = STATUS_TEXT_EDIT;
				}
				else
				{
					return STATUS_DISABLE_PUTIN;
				}
				break;
				
			case STATUS_TEXT_EDIT:
				pKey->key_sta = judge_key_sta(enable_shift);		//检测按键输入
		
				ShowTypewrite(enable_putin);						//加载输入法GUI
				
				//由于键值已被覆盖,因此模拟第一次输入按键的键值
				if ( VAL_KEY_NO_PRESS != last_key )
				{
					AnalogKeyValue(last_key);
					last_key = VAL_KEY_NO_PRESS;
				}
			
				if (KEY_PRESS_OK == pKey->key_sta)
				{
					if (pKey->key_value != key_chg)
					{
						key_chg = pKey->key_value;
						index_cycle = 0;
					}
					
					switch ( pKey->key_value )
					{
						case KEY_SHIFT:		//切换输入法
							if (SET == putin_chars)
							{
								putin_chars = RESET;
								
								if (putin_cnt < allow_putin_num)
								{
									putin_cnt++;
								}
							}								
							break;
						
						case KEY_BACK:			//删除键
							if (RESET == putin_chars)
							{
								DeletePutinChars(&putin_cnt);
							}
							break;
						
						case KEY_ENTER:			//确认键
							if (SET == putin_chars)
							{
								putin_chars = RESET;
								
								if (putin_cnt < allow_putin_num)
								{
									putin_cnt++;
								}
							}
							SetShortcutMenuRefresh();
							cur_status = STATUS_EDIT_COMP;
							break;
						
						case KEY_ESC:			//退出输入键
							if (SET == putin_chars)
							{
								putin_chars = RESET;
								
								if (putin_cnt < allow_putin_num)
								{
									putin_cnt++;
								}
							}
							SetShortcutMenuRefresh();
							cur_status = STATUS_CANCEL_PUTIN;						
							break;
						
						default:				
							if (SET == pKey->putin_data_avail)
							{	
								if (ERROR == PutinChar(putin_buff,putin_cnt,allow_putin_num,&index_cycle) )
								{
									break;
								}
								
								if (STA_NUM == pKey->putin_method)
								{
									if (putin_cnt < allow_putin_num)
									{
										putin_cnt++;
									}		
								}
								else
								{
									putin_chars = SET;	
								}
							}	
							break;
					}					
					
					//实时显示字符
					if ( (SET == putin_chars) && (putin_cnt != allow_putin_num) )
					{
						ShowPutinChars(x,y,putin_buff,putin_cnt+1,len_fill);		
					}
					else
					{
						ShowPutinChars(x,y,putin_buff,putin_cnt,len_fill);
					}
				}

				//确认输入字符
				if (SET == putin_chars)
				{
					if (TIMEOUT == timeout_query() )	
					{
						putin_chars = RESET;
						index_cycle = 0;
						
						if (putin_cnt < allow_putin_num)
						{
							putin_cnt++;
						}
					}
				}
				
//				debug_interface1(INT_TYPE,2,putin_cnt,0,0); 	//显示输入字符个数
				break;
				
			case STATUS_EDIT_COMP:
				if (SUCCESS == SavePutinChars(save_type,putin_buff,pint,pfloat,pchar,putin_cnt,cnt) )
				{
					return STATUS_EDIT_COMP;
				}
				else
				{
					return STATUS_CANCEL_PUTIN;
				}
			
			case STATUS_CANCEL_PUTIN:
				(*cnt) = 0;
					
				return STATUS_CANCEL_PUTIN;
			
			default:
				
				break;
		}
	}

}