/* ** @brief set fd limit, port(s) and init fd area ** ** @param server main structure ** @param port like 42:500 (range port) ** @return 0 if any error, else -1 */ static int _set_server_fd(t_server *server, char *port) { struct rlimit rl; if (getrlimit(RLIMIT_NOFILE, &rl) == -1) { nbr_log("getrlimit error, default value used:", MAX_FD, "_set_server_fd", TYPE_ERROR); server->nb_fd = MAX_FD; } else server->nb_fd = rl.rlim_cur; if (!(server->write_buffer = my_malloc(sizeof(*server->write_buffer) * server->nb_fd)) || !(server->type_fd = my_malloc(sizeof(server->type_fd) * server->nb_fd)) || !(server->fct_read = my_malloc(sizeof(*server->fct_read) * server->nb_fd)) || !(server->fct_write = my_malloc(sizeof(*server->fct_write) * server->nb_fd)) || !(server->client = my_malloc(sizeof(*server->client) * server->nb_fd))) return (-1); memset(server->type_fd, FD_FREE, sizeof(int) * server->nb_fd); server->curr_max = 0; return (set_ports(server, port)); }
void net::filter::install_filter(bool tcp, bool udp, bool src, bool dest, uint16_t first, uint16_t last, bool val) { if ((tcp) && (udp)) { if ((src) && (dest)) { set_ports(first, last, val); } else if (src) { set_src_ports(first, last, val); } else if (dest) { set_dest_ports(first, last, val); } } else if (tcp) { if ((src) && (dest)) { set_tcp_ports(first, last, val); } else if (src) { set_tcp_src_ports(first, last, val); } else if (dest) { set_tcp_dest_ports(first, last, val); } } else if (udp) { if ((src) && (dest)) { set_udp_ports(first, last, val); } else if (src) { set_udp_src_ports(first, last, val); } else if (dest) { set_udp_dest_ports(first, last, val); } } }
int main(int argc,char **argv){ byte com=0; // シリアルCOMポート番号 byte dev[8]; // XBee子機デバイスのアドレス float value; // 受信データの代入用 XBEE_RESULT xbee_result; // 受信データ(詳細) if(argc==2) com=(byte)atoi(argv[1]); // 引数があれば変数comに代入する xbee_init( com ); // XBee用COMポートの初期化 xbee_atnj( 0xFF ); // 子機XBeeデバイスを常に参加受け入れ printf("Waiting for XBee Commissoning\n"); // 待ち受け中の表示 while(1){ /* データ受信(待ち受けて受信する) */ xbee_rx_call( &xbee_result ); // データを受信 switch( xbee_result.MODE ){ // 受信したデータの内容に応じて case MODE_GPIN: // 子機XBeeの自動送信の受信 // 照度測定結果をvalueに代入してprintfで表示する value = (float)xbee_result.ADCIN[1] * 3.55; printf("%.1f Lux\n" , value ); break; case MODE_IDNT: // 新しいデバイスを発見 printf("Found a New Device\n"); xbee_atnj(0); // 子機XBeeデバイスの参加を不許可へ bytecpy(dev, xbee_result.FROM, 8); // 発見したアドレスをdevにコピーする set_ports( dev ); // 子機のGPIOポートの設定 break; } } }
int main(void) { _delay_ms(1000); //Oszillator powerup set_ports();//Ein- und Ausgänge einstellen configureTimerAndInterrupts();//Benötigte Interrupts aktivieren, Timer einstellen lcdInit(); clear_LCD(); print_stdDisplay(); sei(); //globale Interrupts aktivieren while(1) { if(btn_light_pushed == true){ check_light(); } if(rotary!=0){//Drehen soll hier keine Auswirkung haben rotary = 0; } if(check_TimeUpdate() ){ if(!menuOpen) { update_time(); } if((hour == alarm_hour) && (minute == alarm_minute) && (alarm)){ wakeUp_User(); } } if(btn_drehenc_pushed){ //Timer starten zum Zählen start_btnPress(); //warten, solange Taste gedrückt ist while((PINB & (1<<PINB2)) && (btn_press_duration<BTN_PRESS_LONG)){_delay_ms(50);}//KANN DELAY WEGGELASSEN WERDEN? //Zeitmessung beenden stop_btnPress(); //falls länger als BTN_PRESS_LONG gedrückt wurde, Menü öffnen if(btn_press_duration > BTN_PRESS_LONG){ for(int i=0; i<32; i++){ herzSymb[i] = pgm_read_byte(&herz[0][i]); } for(int i=0; i<HERZ_KLEIN_WIDTH; i++){ herzKleinSymb[i] = pgm_read_byte(&herzKlein[0][i]); herzKleinOffenSymb[i] = pgm_read_byte(&herzKleinOffen[0][i]); } for(int i=0; i<HAKEN_WIDTH; i++){//PRÜFEN hakenSymb i<60 hakenSymb[i] = pgm_read_byte(&haken[0][i]); } menuOpen = true; show_mainMenu(STDDISPLAY); } btn_drehenc_pushed = false; menuOpen = false; } goodNight(); } }
int main(int argc,char **argv){ byte com=0; // シリアルCOMポート番号 byte dev[8]; // XBee子機デバイスのアドレス byte id=0; // パケット送信番号 byte trig=0xFF; // データ要求するタイミング調整用 float value; // 受信データの代入用 XBEE_RESULT xbee_result; // 受信データ(詳細) if(argc==2) com=(byte)atoi(argv[1]); // 引数があれば変数comに代入する xbee_init( com ); // XBee用COMポートの初期化 xbee_atnj( 0xFF ); // 親機に子機のジョイン許可を設定 printf("Waiting for XBee Commissoning\n"); // 待ち受け中の表示 while(1){ /* データ送信 */ if( trig == 0){ id = xbee_force( dev ); // 子機へデータ要求を送信 trig = FORCE_INTERVAL; } if( trig != 0xFF ) trig--; // 変数trigが0xFF以外の時に値を1減算 /* データ受信(待ち受けて受信する) */ xbee_rx_call( &xbee_result ); // データを受信 switch( xbee_result.MODE ){ // 受信したデータの内容に応じて case MODE_RESP: // xbee_forceに対する応答の時 if( id == xbee_result.ID ){ // 送信パケットIDが一致 // 照度測定結果をvalueに代入してprintfで表示する value = xbee_sensor_result( &xbee_result, LIGHT); printf("%.1f Lux, " , value ); // 温度測定結果をvalueに代入してprintfで表示する value = xbee_sensor_result( &xbee_result, TEMP); value -= TEMP_OFFSET; printf("%.1f degC\n" , value ); } break; case MODE_IDNT: // 新しいデバイスを発見 printf("Found a New Device\n"); bytecpy(dev, xbee_result.FROM, 8); // 発見したアドレスをdevにコピーする xbee_atnj(0); // 親機XBeeに子機の受け入れ制限 xbee_ratnj(dev,0); // 子機に対して孫機の受け入れを制限 set_ports( dev ); // 子機のGPIOポートの設定 trig = 0; // 子機へデータ要求を開始 break; } } }
bool net::filter::init() { free(); if ((_M_tcp = reinterpret_cast<struct port_pair*>(malloc((USHRT_MAX + 1) * sizeof(struct port_pair)))) == NULL) { return false; } if ((_M_udp = reinterpret_cast<struct port_pair*>(malloc((USHRT_MAX + 1) * sizeof(struct port_pair)))) == NULL) { return false; } _M_filter = false; _M_icmp = false; set_ports(0, USHRT_MAX, false); return true; }