Further updates to Captive AP Mode
This commit is contained in:
		
							parent
							
								
									705a0922e1
								
							
						
					
					
						commit
						cd5b3115f5
					
				|  | @ -217,11 +217,11 @@ void Span::initWifi(){ | ||||||
|   memcpy(id,HAPClient::accessory.ID,17);    // copy ID bytes
 |   memcpy(id,HAPClient::accessory.ID,17);    // copy ID bytes
 | ||||||
|   id[17]='\0';                              // add terminating null
 |   id[17]='\0';                              // add terminating null
 | ||||||
| 
 | 
 | ||||||
|   // create broadcaset name from server base name plus accessory ID (with ':' replaced by '_')
 |   // create broadcaset name from server base name plus accessory ID (without ':')
 | ||||||
|    |    | ||||||
|   int nChars=snprintf(NULL,0,"%s-%.2s_%.2s_%.2s_%.2s_%.2s_%.2s",hostNameBase,id,id+3,id+6,id+9,id+12,id+15);        |   int nChars=snprintf(NULL,0,"%s-%.2s%.2s%.2s%.2s%.2s%.2s",hostNameBase,id,id+3,id+6,id+9,id+12,id+15);        | ||||||
|   char hostName[nChars+1]; |   char hostName[nChars+1]; | ||||||
|   sprintf(hostName,"%s-%.2s_%.2s_%.2s_%.2s_%.2s_%.2s",hostNameBase,id,id+3,id+6,id+9,id+12,id+15); |   sprintf(hostName,"%s-%.2s%.2s%.2s%.2s%.2s%.2s",hostNameBase,id,id+3,id+6,id+9,id+12,id+15); | ||||||
| 
 | 
 | ||||||
|   nvs_handle wifiHandle; |   nvs_handle wifiHandle; | ||||||
|   size_t len;             // not used but required to read blobs from NVS
 |   size_t len;             // not used but required to read blobs from NVS
 | ||||||
|  | @ -349,17 +349,52 @@ void Span::configure(char *apName){ | ||||||
|   IPAddress apIP(192, 168, 4, 1); |   IPAddress apIP(192, 168, 4, 1); | ||||||
| 
 | 
 | ||||||
|   WiFi.mode(WIFI_AP); |   WiFi.mode(WIFI_AP); | ||||||
|   WiFi.softAP(apName,"homespan2020"); |   WiFi.softAP(apName,"homespan"); | ||||||
|   dnsServer.start(DNS_PORT, "*", apIP); |   dnsServer.start(DNS_PORT, "*", apIP); | ||||||
|   apServer.begin(); |   apServer.begin(); | ||||||
| 
 | 
 | ||||||
|   String responseHTML = "" |  | ||||||
|   "<!DOCTYPE html><html><head><title>CaptivePortal</title></head><body>" |  | ||||||
|   "<h1>Hello World!</h1><p>This is a captive portal example. All requests will " |  | ||||||
|   "be redirected here.</p></body></html>"; |  | ||||||
| 
 |  | ||||||
|   boolean configured=false; |   boolean configured=false; | ||||||
| 
 | 
 | ||||||
|  |   TODO:  Eliminate these two lines and replace with a new generic CaptiveAP flag to trackAP mode | ||||||
|  |   ALSO CHANGE HAP[0] to POINTER REFERENCES | ||||||
|  | 
 | ||||||
|  |   hap[0].cPair=NULL;                          // reset pointer to verified ID
 | ||||||
|  |   HAPClient::pairStatus=pairState_M1;         // reset starting PAIR STATE (which may be needed if Accessory failed in middle of pair-setup)
 | ||||||
|  | 
 | ||||||
|  |   while(!configured){ | ||||||
|  | 
 | ||||||
|  |     dnsServer.processNextRequest(); | ||||||
|  | 
 | ||||||
|  |     if(hap[0].client=apServer.available()){         // found a new HTTP client
 | ||||||
|  |       LOG2("=======================================\n"); | ||||||
|  |       LOG1("** Access Point Client Connected: ("); | ||||||
|  |       LOG1(millis()/1000); | ||||||
|  |       LOG1(" sec) "); | ||||||
|  |       LOG1(hap[0].client.remoteIP()); | ||||||
|  |       LOG1("\n"); | ||||||
|  |       LOG2("\n"); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     if(hap[0].client && hap[0].client.available()){       // if connection exists and data is available
 | ||||||
|  | 
 | ||||||
|  |       HAPClient::conNum=0;                                // set connection number
 | ||||||
|  |       hap[0].processRequest();                            // process HAP request
 | ||||||
|  |        | ||||||
|  |       if(!hap[0].client){                                 // client disconnected by server
 | ||||||
|  |         LOG1("** Disconnecting AP Client ("); | ||||||
|  |         LOG1(millis()/1000); | ||||||
|  |         LOG1(" sec)\n"); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       LOG2("\n"); | ||||||
|  | 
 | ||||||
|  |     } // process HAP Client
 | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   while(1); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|   while(!configured){ |   while(!configured){ | ||||||
|     dnsServer.processNextRequest(); |     dnsServer.processNextRequest(); | ||||||
|     WiFiClient apClient=apServer.available(); |     WiFiClient apClient=apServer.available(); | ||||||
|  |  | ||||||
|  | @ -64,7 +64,7 @@ struct Span{ | ||||||
|    |    | ||||||
|   void begin(Category catID, |   void begin(Category catID, | ||||||
|              char *displayName="HomeSpan Server", |              char *displayName="HomeSpan Server", | ||||||
|              char *hostNameBase="homespan", |              char *hostNameBase="HomeSpan", | ||||||
|              char *modelName="HS-ESP32");         |              char *modelName="HS-ESP32");         | ||||||
|               |               | ||||||
|   void poll();                                  // poll HAP Clients and process any new HAP requests
 |   void poll();                                  // poll HAP Clients and process any new HAP requests
 | ||||||
|  |  | ||||||
|  | @ -18,7 +18,7 @@ const int MAX_CONNECTIONS=8; | ||||||
| //    Verbosity -- controls message output       //
 | //    Verbosity -- controls message output       //
 | ||||||
| //       0=Minimal, 1=Informative, 2=All           //
 | //       0=Minimal, 1=Informative, 2=All           //
 | ||||||
| 
 | 
 | ||||||
| #define VERBOSITY   1 | #define VERBOSITY   2 | ||||||
| 
 | 
 | ||||||
| //-------------------------------------------------//
 | //-------------------------------------------------//
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										41
									
								
								src/src.ino
								
								
								
								
							
							
						
						
									
										41
									
								
								src/src.ino
								
								
								
								
							|  | @ -1,6 +1,39 @@ | ||||||
| 
 | 
 | ||||||
| // This is a dummy .ino file that allows you to easily edit the contents of this library using the Arduino IDE.
 | // This is a placeholder .ino file that allows you to easily edit the contents of this library using the Arduino IDE,
 | ||||||
| // The code is NOT designed to be compiled from this point.  Compile and test the library using one of the examples.
 | // as well as compile and test from this point.  This file is ignored when the library is included in other sketchges.
 | ||||||
| 
 | 
 | ||||||
| void setup(){} | #include "HomeSpan.h" | ||||||
| void loop(){} | 
 | ||||||
|  | void setup() { | ||||||
|  |   | ||||||
|  |   Serial.begin(115200); | ||||||
|  |    | ||||||
|  |   homeSpan.begin(Category::Lighting,"HomeSpan Benchmark"); | ||||||
|  | 
 | ||||||
|  |   char *version=(char *)HOMESPAN_VERSION; | ||||||
|  | 
 | ||||||
|  |   new SpanAccessory();                                  // Begin by creating a new Accessory using SpanAccessory(), which takes no arguments
 | ||||||
|  |    | ||||||
|  |     new Service::AccessoryInformation();                // HAP requires every Accessory to implement an AccessoryInformation Service, which has 6 required Characteristics
 | ||||||
|  |       new Characteristic::Name("HomeSpan Test");        // Name of the Accessory, which shows up on the HomeKit "tiles", and should be unique across Accessories                                                            
 | ||||||
|  |       new Characteristic::Manufacturer("HomeSpan");     // Manufacturer of the Accessory (arbitrary text string, and can be the same for every Accessory)
 | ||||||
|  |       new Characteristic::SerialNumber("HSL-123");      // Serial Number of the Accessory (arbitrary text string, and can be the same for every Accessory)
 | ||||||
|  |       new Characteristic::Model("HSL Test");            // Model of the Accessory (arbitrary text string, and can be the same for every Accessory)
 | ||||||
|  |       new Characteristic::FirmwareRevision(version);    // Firmware of the Accessory (arbitrary text string, and can be the same for every Accessory)  
 | ||||||
|  |       new Characteristic::Identify();                   // Create the required Identify
 | ||||||
|  |    | ||||||
|  |     new Service::HAPProtocolInformation();              // Create the HAP Protcol Information Service  
 | ||||||
|  |       new Characteristic::Version("1.1.0");             // Set the Version Characteristicto "1.1.0" as required by HAP
 | ||||||
|  | 
 | ||||||
|  |     new Service::LightBulb();                           // Create the Light Bulb Service
 | ||||||
|  |       new Characteristic::On();                         // This Service requires the "On" Characterstic to turn the light on and off
 | ||||||
|  | 
 | ||||||
|  | } // end of setup()
 | ||||||
|  | 
 | ||||||
|  | //////////////////////////////////////
 | ||||||
|  | 
 | ||||||
|  | void loop(){ | ||||||
|  | 
 | ||||||
|  |   homeSpan.poll(); | ||||||
|  |    | ||||||
|  | } // end of loop()
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Gregg
						Gregg