/* * 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; } }
/******************************************************************************* * 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; } } }