bool wifi_manager::connectWifi(const char* ssid) {
	list<wifi_list*> _configList;
	bool ret = false;
	wifi_list* _wifi = NULL;
	do {
		if(listConfigedWifi(&_configList) == false)
			break;
		
		for(list<wifi_list*>::node* _p_wifi = _configList.begin(); _p_wifi != _configList.end();
					_p_wifi = _p_wifi->next) {
			if(strcmp(_p_wifi->element->ssid,ssid) == 0) {
				_wifi = _p_wifi->element;
				break;
			}			
		}
		
		if(_wifi) {
			if(_wifi->flag == 1)
				ret = true;
			else
				ret = connectWifi(_wifi->id);
		}

		clearWifiList(&_configList);
	}while(0);
	
	return ret;
}
Beispiel #2
0
void wifiSetup() {
  ESP.wdtFeed();
  if (connectWifi() == 0) return;

  // if couldn't connect the cached WiFi
  setupAP();
  setupAPServer();
  while (1) {
    ESP.wdtFeed();
    server.handleClient();
  }
}
Beispiel #3
0
void setup()
{
    Serial.begin(115200);
    //while (!Serial)   { ; }

    ESPserial.begin(115200);

    while (1) {
        resetWifi();
        if(connectWifi()) {
            break;
        }
        delay(5000);
    }
    clearWifi();
}
int MainWindowImpl::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QMainWindow::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: connectWifi(); break;
        case 1: disconnectWifi(); break;
        case 2: cmbWifiRefresh(); break;
        case 3: getSVEQValue((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 4: getSBassValue((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 5: getSMidValue((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 6: getSTrebleValue((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 7: chkTransReceive((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 8: chkTransSend((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 9: setButtons((*reinterpret_cast< int(*)>(_a[1]))); break;
        default: ;
        }
        _id -= 10;
    }
    return _id;
}
Beispiel #5
0
/**
 * Работа канала связи с Сервером Роботов, запускать в loop. 
 * При получении команды, вызывает handleInput.
 */
void rraptorRobotServerTasks() {
    DNETcK::STATUS networkStatus;
    int readSize;
    int writeSize;
    
    // Держим Tcp-стек в живом состоянии
    DNETcK::periodicTasks();
        
    if(!DWIFIcK::isConnected(conectionId)) {
        // Не подключены к WiFi - выключим лампочку
        digitalWrite(WIFI_STATUS_PIN, LOW);
        
        // Подключимся к сети WiFi
        bool connectedToWifi = false;
        
        #ifdef DEBUG_SERIAL
            Serial.println("Connecting wifi...");
        #endif // DEBUG_SERIAL
        conectionId = connectWifi(&networkStatus);
  
        if(conectionId != DWIFIcK::INVALID_CONNECTION_ID) {
            // На этом этапе подключение будет создано, даже если указанная 
            // сеть Wifi недоступна или для нее задан неправильный пароль
            #ifdef DEBUG_SERIAL
                Serial.print("Connection created, connection id=");
                Serial.println(conectionId, DEC);

                Serial.print("Initializing IP stack...");
            #endif // DEBUG_SERIAL
            
            // Получим IP и сетевые адреса по DHCP
            DNETcK::begin();
            
            // К открытой сети может подключиться с первой попытки, к сети с паролем
            // может потребоваться несколько циклов (если пароль для сети неправильный,
            // то ошибка вылезет тоже на этом этапе).
            bool initializing = true;
            while(initializing) {
                #ifdef DEBUG_SERIAL 
                    Serial.print(".");
                #endif // DEBUG_SERIAL
                
                // Вызов isInitialized заблокируется до тех пор, пока стек не будет 
                // инициализирован или не истечет время ожидания (по умолчанию 15 секунд). 
                // Если сеть не подключится до истечения таймаута и при этом не произойдет
                // ошибка, isInitialized просто вернет FALSE без кода ошибки, при необходимости
                // можно вызвать его повторно до успеха или ошибки.
                if(DNETcK::isInitialized(&networkStatus)) {
                    // Стек IP инициализирован
                    connectedToWifi = true;
                    
                    initializing = false;
                } else if(DNETcK::isStatusAnError(networkStatus)) {
                    // Стек IP не инициализирован из-за ошибки,
                    // в этом месте больше не пробуем
                    initializing = false;
                }
            }
            #ifdef DEBUG_SERIAL 
                Serial.println();
            #endif // DEBUG_SERIAL
        }
        
        if(connectedToWifi) {
            // Подключились к Wifi
            #ifdef DEBUG_SERIAL 
                Serial.println("Connected to wifi");
                printNetworkStatus();
            #endif // DEBUG_SERIAL
                        
            // включим лампочку
            digitalWrite(WIFI_STATUS_PIN, HIGH);
        } else {
            // Так и не получилось подключиться
            #ifdef DEBUG_SERIAL 
                Serial.println("Retry after 4 seconds...");
                Serial.print("Failed to connect wifi, status: ");
                //Serial.print(networkStatus, DEC);
                printDNETcKStatus(networkStatus);
                Serial.println();
            #endif // DEBUG_SERIAL
            
            // Нужно корректно завершить весь стек IP и Wifi, чтобы
            // иметь возможность переподключиться на следующей итерации
            DNETcK::end();
            DWIFIcK::disconnect(conectionId);
            conectionId = DWIFIcK::INVALID_CONNECTION_ID;
            
            // Немного подождем и попробуем переподключиться на следующей итерации
            #ifdef DEBUG_SERIAL 
                Serial.println("Retry after 4 seconds...");
            #endif // DEBUG_SERIAL
            
            delay(4000);
        }
    } else if(!tcpClient.isConnected()) {
        // Подключимся к Серверу Роботов
        
        bool connectedToServer = false;
        
        #ifdef DEBUG_SERIAL 
                Serial.print("Connecting to Robot Server...");
        #endif // DEBUG_SERIAL
        
        tcpClient.connect(robot_server_host, robot_server_port);
        // Сокет для подключения назначен, подождем, чем завершится процесс подключения
        bool connecting = true;
        while(connecting) {
            #ifdef DEBUG_SERIAL 
                Serial.print(".");
            #endif // DEBUG_SERIAL
            
            if(tcpClient.isConnected(&networkStatus)) {
                // Подключились к сереверу
                connectedToServer = true;
                                    
                connecting = false;
            } else if(DNETcK::isStatusAnError(networkStatus)) {
                // Не смогли подключиться к серверу из-за ошибки,
                // в этом месте больше не пробуем
                connecting = false;                    
            }
        }
        Serial.println();
        
        if(connectedToServer) {
            // Подключились к Серверу Роботов
            #ifdef DEBUG_SERIAL 
                Serial.println("Connected to Robot Server");
            
                printTcpClientStatus(&tcpClient);
            #endif // DEBUG_SERIAL
        } else {
            // Так и не получилось подключиться
            #ifdef DEBUG_SERIAL
                Serial.print("Failed to connect Robot Server, status: ");
                //Serial.print(networkStatus, DEC);
                printDNETcKStatus(networkStatus);
                Serial.println();
            #endif // DEBUG_SERIAL
            
            // Вернем TCP-клиента в исходное состояние
            tcpClient.close();
            
            // Немного подождем и попробуем переподключиться на следующей итерации
            #ifdef DEBUG_SERIAL
                Serial.println("Retry after 4 seconds...");
            #endif // DEBUG_SERIAL
            delay(4000);
        }
    } else {
        // Подключены к серверу - читаем команды, отправляем ответы
        
        // есть чо почитать?
        if((readSize = tcpClient.available()) > 0) {
            readSize = readSize < sizeof(read_buffer) ? readSize : sizeof(read_buffer);
            readSize = tcpClient.readStream((byte*)read_buffer, readSize);
            
            #ifdef DEBUG_SERIAL
                // Считали порцию данных
                read_buffer[readSize] = 0; // строка должна оканчиваться нулем
                Serial.print("Read: ");
                Serial.println(read_buffer);
            #endif // DEBUG_SERIAL
 
            // и можно выполнить команду, ответ попадет в write_buffer
            writeSize = handleInput(read_buffer, readSize, write_buffer);
            write_size = writeSize;
        }
            
        if(write_size > 0) {
            #ifdef DEBUG_SERIAL
                Serial.print("Write: ");
                Serial.print(write_buffer);
                Serial.print(" (size=");
                Serial.print(write_size);
                Serial.println(")");
            #endif // DEBUG_SERIAL
                        
            tcpClient.writeStream((const byte*)write_buffer, write_size);
            write_size = 0;
        }
    }
}
Beispiel #6
0
/***********************************************************************
		module		:	[WIFI]
		function		:	[wifi上传菜单]
  		return		:	[无]
		comment	:	[全局普通函数]
		machine		:	[EH-0818]
		language	:	[CHN]
 		keyword		:	[WIFI]
		date			:	[11/07/25]
 		author		:	[chen-zhengkai]
************************************************************************/
void wifi_upload_menu()
{
	int select = -1;
	//int conStatus = 0;		//连接状态,0:连接正常
	char db_menu_str[] =	"1. 启动连接"
							"2. 上传数据"
							"3. 网络设置"
							"4. 断开连接"
							"5. 重启模块";

	BROWINFO	info;
	info.iStr = db_menu_str;		//浏览内容指针
	info.lPtr = 0;					//显示内容iStr的起始显示行
	info.cPtr = 0;					//当前选择行

	while (1) {
		//以下BROWINFO结构成员变量必须参与循环,有可能会被EXT_Brow_Select函数改变
//		 conStatus = CWiFi_GetRepStatus(g_pHandle[0]);
//		 if (!conStatus) {
//		 	strncpy(db_menu_str, "1. 断开连接(已连接)", 21);
//		}
//		else {
//			strncpy(db_menu_str, "1. 启动连接(未连接)", 21);
//		}
		info.startLine = 2;				//在LCD上的显示起始行
		info.dispLines = 5;				//在LCD上的显示行数
		info.mInt = 5;					//显示内容的总行数
		info.lineMax = 11;				//每行最大字符数
		info.sFont = 0;					//7x9大字体显示
		info.numEnable = 0;				//是否允许数字键代替方向控制
		info.qEvent = EXIT_KEY_F1|EXIT_AUTO_QUIT|EXIT_KEY_POWER|EXIT_KEY_CANCEL;    //可导致函数退出的事件标志
		info.autoexit = 1200;			//自动退出的时间
		//菜单
		Disp_Clear();
		DispStr_CE(0, 0, "wifi传输菜单", DISP_CENTER);
		select = EXT_Brow_Select(&info);

		switch (select) {
			case 0:		//启动连接,断开连接
				connectWifi();	//启动连接
				break;
			case 1:		//上传数据
				sendRecords();
				break;
			case 2:		//网络设置
				wifinet_set();
				break;
			case 3:		//断开连接
				disConnect();
				break;
			case 4:		//重启模块
				resetWifi();
				break;
			default:	//降低CPU占用率,降低能耗
				if (info.qEvent == EXIT_KEY_F1  || EXIT_AUTO_QUIT 
                                || EXIT_KEY_POWER || EXIT_KEY_CANCEL) { //返回上级菜单 
					return;
				}
				Sys_Power_Sleep(3);
				break;
		}
	}
}