示例#1
0
/*
** @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));
}
示例#2
0
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;
        }
    }
}
示例#4
0
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();
	}
	
}
示例#5
0
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;
        }
    }
}
示例#6
0
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;
}