コード例 #1
0
void WifiCreds::connect(int indicator_pin) {
  if (!_is_eeprom_init){
    EEPROM.begin(512);
    _is_eeprom_init = true;
  }
  read_ssid(_ssid);
  read_password(_password);
  if (_verbose) {
    Serial.println("");
    Serial.print("Initializing connection to "); Serial.println(_ssid);
    Serial.println("Send \"ssid password\" to update credentials"); 
    Serial.println("");
  }
  
  WiFi.begin(_ssid, _password);
  
  while (_is_wifi_enabled && WiFi.status() != WL_CONNECTED) {
    if(indicator_pin >= 0) digitalWrite(indicator_pin, LOW);
    delay(5);
    if(indicator_pin >= 0) digitalWrite(indicator_pin, HIGH);
    if (Serial.available() > 0){
      read_from_serial(_ssid, WifiCreds::ssid_max_length);
      read_from_serial(_password, WifiCreds::password_max_length);
      if (_verbose) {
        Serial.println("");
        Serial.println("Got new wifi credentials.");
        Serial.print(" - SSID: "); Serial.println(_ssid);
        Serial.print(" - Password: "******".");
  }
  if (_verbose) {
    Serial.println(""); 
    if (_is_wifi_enabled) {
      Serial.println("WiFi connected");
      Serial.print("IP address: "); Serial.println(WiFi.localIP());
      WiFi.macAddress(mac);
      writeHex(mac[5], id, 1, 2);
      writeHex(mac[4], id, 4, 5);
      writeHex(mac[3], id, 7, 8);
      writeHex(mac[2], id, 10, 11);
      writeHex(mac[1], id, 13, 14);
      writeHex(mac[0], id, 16, 17);
      Serial.print("MAC address: "); Serial.println(id);
    } else {
      Serial.println("Skipping wifi setup");
    }
  }
  if (_is_wifi_enabled) _is_connected = true;;
}
コード例 #2
0
ファイル: main.c プロジェクト: 12019/smews
int main(int argc, char **argv) {
	/* misc. locals... */
	int nfds;
	fd_set fdset;
	char tmpstr[64];
	
	if(argc != 2) {
	        fprintf(stderr,"Usage: %s <IPv6/mask>\n",argv[0]);
	        return;
	}
	
	/* open the serial port */
	serial_fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);
	check(serial_fd != -1,"serial open() error");
	ret = configure_port(serial_fd);
	check(ret != -1,"serial configure_port() error");

	/* TUN interface creation */
	struct ifreq ifr;
	tun_fd = open(DEVTUN, O_RDWR);
	check(tun_fd != -1,"tun open() error");
	memset(&ifr, 0, sizeof(ifr));
	ifr.ifr_flags = IFF_TUN;
	ret = ioctl(tun_fd, TUNSETIFF, (void *) &ifr);
	check(ret >= 0,"tun ioctl error");
	/* TUN attachement to an IP address */
	snprintf((char*)tmpstr, 64, "ifconfig %s inet6 add %s",ifr.ifr_name,argv[1]);
	ret = system((char*)tmpstr);
	check(ret != -1,"system() ifocnfig add error");
	snprintf((char*)tmpstr, 64, "ifconfig %s up",ifr.ifr_name);
	ret = system((char*)tmpstr);
	check(ret != -1,"system() ifconfig up error");
	
	/* main loop */
	nfds = MAX(tun_fd, serial_fd) + 1;
	FD_ZERO(&fdset);
	printf("Started\n");
	while(1) {
		FD_SET(tun_fd, &fdset);
		FD_SET(serial_fd, &fdset);
		
		ret = select(nfds, &fdset, NULL, NULL, NULL);
		check(ret != -1,"select() error");
		
		/* wait for something to read on tun_fd or socket_fd */
		if(ret) {
			if(FD_ISSET(tun_fd, &fdset)) {
			        read_from_tun();
			}
 			if(FD_ISSET(serial_fd, &fdset)) {
			        read_from_serial();
 			}
		}
	}
	return 0;
}
コード例 #3
0
ファイル: serial_link.c プロジェクト: 82times/qmk_firmware
static THD_FUNCTION(serialThread, arg) {
    (void)arg;
    event_listener_t new_data_listener;
    event_listener_t sd1_listener;
    event_listener_t sd2_listener;
    chEvtRegister(&new_data_event, &new_data_listener, 0);
    eventflags_t events = CHN_INPUT_AVAILABLE
            | SD_PARITY_ERROR | SD_FRAMING_ERROR | SD_OVERRUN_ERROR | SD_NOISE_ERROR | SD_BREAK_DETECTED;
    chEvtRegisterMaskWithFlags(chnGetEventSource(&SD1),
        &sd1_listener,
        EVENT_MASK(1),
        events);
    chEvtRegisterMaskWithFlags(chnGetEventSource(&SD2),
        &sd2_listener,
        EVENT_MASK(2),
        events);
    bool need_wait = false;
    while(true) {
        eventflags_t flags1 = 0;
        eventflags_t flags2 = 0;
        if (need_wait) {
            eventmask_t mask = chEvtWaitAnyTimeout(ALL_EVENTS, MS2ST(1000));
            if (mask & EVENT_MASK(1)) {
                flags1 = chEvtGetAndClearFlags(&sd1_listener);
                print_error("DOWNLINK", flags1, &SD1);
            }
            if (mask & EVENT_MASK(2)) {
                flags2 = chEvtGetAndClearFlags(&sd2_listener);
                print_error("UPLINK", flags2, &SD2);
            }
        }

        // Always stay as master, even if the USB goes into sleep mode
        is_master |= usbGetDriverStateI(&USBD1) == USB_ACTIVE;
        router_set_master(is_master);

        need_wait = true;
        need_wait &= read_from_serial(&SD2, UP_LINK) == 0;
        need_wait &= read_from_serial(&SD1, DOWN_LINK) == 0;
        update_transport();
    }
}