Updated Access Point code
This commit is contained in:
parent
206d194cc1
commit
5cb09b6ad8
|
|
@ -76,6 +76,12 @@ void HAPClient::init(){
|
||||||
|
|
||||||
printControllers();
|
printControllers();
|
||||||
|
|
||||||
|
// create broadcaset name from server base name plus accessory ID (without ':')
|
||||||
|
|
||||||
|
int nChars=snprintf(NULL,0,"%s-%2.2s%2.2s%2.2s%2.2s%2.2s%2.2s",homeSpan.hostNameBase,accessory.ID,accessory.ID+3,accessory.ID+6,accessory.ID+9,accessory.ID+12,accessory.ID+15);
|
||||||
|
homeSpan.hostName=(char *)malloc(nChars+1);
|
||||||
|
sprintf(homeSpan.hostName,"%s-%2.2s%2.2s%2.2s%2.2s%2.2s%2.2s",homeSpan.hostNameBase,accessory.ID,accessory.ID+3,accessory.ID+6,accessory.ID+9,accessory.ID+12,accessory.ID+15);
|
||||||
|
|
||||||
tlv8.create(kTLVType_State,1,"STATE"); // define the actual TLV records needed for the implementation of HAP; one for each kTLVType needed (HAP Table 5-6)
|
tlv8.create(kTLVType_State,1,"STATE"); // define the actual TLV records needed for the implementation of HAP; one for each kTLVType needed (HAP Table 5-6)
|
||||||
tlv8.create(kTLVType_PublicKey,384,"PUBKEY");
|
tlv8.create(kTLVType_PublicKey,384,"PUBKEY");
|
||||||
tlv8.create(kTLVType_Method,1,"METHOD");
|
tlv8.create(kTLVType_Method,1,"METHOD");
|
||||||
|
|
|
||||||
127
src/HomeSpan.cpp
127
src/HomeSpan.cpp
|
|
@ -254,7 +254,7 @@ void Span::commandMode(){
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
processSerialCommand("X");
|
processSerialCommand("A");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
|
@ -358,92 +358,6 @@ void Span::initWifi(){
|
||||||
statusLED.on();
|
statusLED.on();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
size_t len; // not used but required to read blobs from NVS
|
|
||||||
|
|
||||||
if(nvs_get_blob(HAPClient::wifiNVS,"WIFIDATA",NULL,&len)){ // WiFi data not stored
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(!nvs_get_blob(HAPClient::wifiNVS,"WIFIDATA",NULL,&len)){ // if found WiFi data in NVS
|
|
||||||
nvs_get_blob(HAPClient::wifiNVS,"WIFIDATA",&network.wifiData,&len); // retrieve data
|
|
||||||
|
|
||||||
} else { // configure network and setup code
|
|
||||||
|
|
||||||
network.scan(); // scan for networks
|
|
||||||
|
|
||||||
int status=-1;
|
|
||||||
char key[2];
|
|
||||||
|
|
||||||
controlButton.reset();
|
|
||||||
|
|
||||||
while(status<1){ // loop until a configuration method is chosen and completed
|
|
||||||
|
|
||||||
if(status==-1){
|
|
||||||
if(WiFi.status()==WL_CONNECTED)
|
|
||||||
WiFi.disconnect();
|
|
||||||
|
|
||||||
Serial.print("Network configuration required! Found the following SSIDs:\n\n");
|
|
||||||
statusLED.start(LED_INPUT_NEEDED); // rapidly blink Status LED
|
|
||||||
|
|
||||||
for(int i=0;i<network.numSSID;i++){
|
|
||||||
Serial.print(" ");
|
|
||||||
Serial.print(i+1);
|
|
||||||
Serial.print(") ");
|
|
||||||
Serial.print(network.ssidList[i]);
|
|
||||||
Serial.print("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
Serial.print("\nType 'W <return>' to set WiFi credentials or press Control Button for 3 seconds to start Access Point...\n\n");
|
|
||||||
status=0;
|
|
||||||
sprintf(key,"");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(controlButton.triggered(9999,3000)){
|
|
||||||
network.apConfigure(hostName);
|
|
||||||
status=1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(Serial.available() && *readSerial(key,1)=='W'){
|
|
||||||
status=network.serialConfigure()?1:-1;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // while loop
|
|
||||||
|
|
||||||
Serial.print("Saving WiFi credentials for: ");
|
|
||||||
Serial.print(network.wifiData.ssid);
|
|
||||||
Serial.print("...\n");
|
|
||||||
|
|
||||||
nvs_set_blob(HAPClient::wifiNVS,"WIFIDATA",&network.wifiData,sizeof(network.wifiData)); // update data
|
|
||||||
nvs_commit(HAPClient::wifiNVS); // commit to NVS
|
|
||||||
|
|
||||||
if(strlen(network.setupCode)){
|
|
||||||
|
|
||||||
char buf[128];
|
|
||||||
|
|
||||||
struct { // temporary structure to hold SRP verification code and salt stored in NVS
|
|
||||||
uint8_t salt[16];
|
|
||||||
uint8_t verifyCode[384];
|
|
||||||
} verifyData;
|
|
||||||
|
|
||||||
sprintf(buf,"\nGenerating SRP verification data for new Setup Code: %.3s-%.2s-%.3s ... ",network.setupCode,network.setupCode+3,network.setupCode+5);
|
|
||||||
Serial.print(buf);
|
|
||||||
HAPClient::srp.createVerifyCode(network.setupCode,verifyData.verifyCode,verifyData.salt); // create verification code from default Setup Code and random salt
|
|
||||||
nvs_set_blob(HAPClient::srpNVS,"VERIFYDATA",&verifyData,sizeof(verifyData)); // update data
|
|
||||||
nvs_commit(HAPClient::srpNVS); // commit to NVS
|
|
||||||
Serial.print("New Code Saved!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
Serial.print("\n*** Re-starting ***\n\n");
|
|
||||||
delay(500);
|
|
||||||
ESP.restart(); // re-start device
|
|
||||||
|
|
||||||
} // configure network
|
|
||||||
*/
|
|
||||||
|
|
||||||
} // initWiFi
|
} // initWiFi
|
||||||
|
|
||||||
///////////////////////////////
|
///////////////////////////////
|
||||||
|
|
@ -568,18 +482,44 @@ void Span::processSerialCommand(char *c){
|
||||||
network.serialConfigure();
|
network.serialConfigure();
|
||||||
nvs_set_blob(HAPClient::wifiNVS,"WIFIDATA",&network.wifiData,sizeof(network.wifiData)); // update data
|
nvs_set_blob(HAPClient::wifiNVS,"WIFIDATA",&network.wifiData,sizeof(network.wifiData)); // update data
|
||||||
nvs_commit(HAPClient::wifiNVS); // commit to NVS
|
nvs_commit(HAPClient::wifiNVS); // commit to NVS
|
||||||
Serial.print("\n*** Credentials saved!\n\n");
|
Serial.print("\n*** WiFi Credentials saved!\n\n");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'A': {
|
||||||
|
|
||||||
|
if(strlen(network.wifiData.ssid)>0){
|
||||||
|
processSerialCommand("X");
|
||||||
|
ESP.restart();
|
||||||
|
}
|
||||||
|
network.apConfigure(hostName);
|
||||||
|
nvs_set_blob(HAPClient::wifiNVS,"WIFIDATA",&network.wifiData,sizeof(network.wifiData)); // update data
|
||||||
|
nvs_commit(HAPClient::wifiNVS); // commit to NVS
|
||||||
|
Serial.print("\n*** Credentials saved!\n\n");
|
||||||
|
if(strlen(network.setupCode)){
|
||||||
|
char s[10];
|
||||||
|
sprintf(s,"S%s",network.setupCode);
|
||||||
|
processSerialCommand(s);
|
||||||
|
} else {
|
||||||
|
Serial.print("*** Setup Code Unchanged\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.print("\n*** Re-starting ***\n\n");
|
||||||
|
delay(500);
|
||||||
|
statusLED.off();
|
||||||
|
ESP.restart(); // re-start device
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
case 'X': {
|
case 'X': {
|
||||||
|
|
||||||
nvs_erase_all(HAPClient::wifiNVS);
|
nvs_erase_all(HAPClient::wifiNVS);
|
||||||
nvs_commit(HAPClient::wifiNVS);
|
nvs_commit(HAPClient::wifiNVS);
|
||||||
sprintf(network.wifiData.ssid,"");
|
Serial.print("\n*** WiFi Credentials erased! Re-starting ***\n\n");
|
||||||
WiFi.disconnect();
|
delay(500);
|
||||||
Serial.print("\n*** WIFI CREDENTIALS DATA NOT FOUND -- PLEASE CONFIGURE BY TYPING 'W <RETURN>' OR PRESS CONTROL BUTTON FOR 3 SECONDS TO START ACCESS POINT.\n\n");
|
statusLED.off();
|
||||||
statusLED.start(LED_WIFI_NEEDED);
|
ESP.restart(); // re-start device
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -589,6 +529,7 @@ void Span::processSerialCommand(char *c){
|
||||||
nvs_commit(HAPClient::hapNVS);
|
nvs_commit(HAPClient::hapNVS);
|
||||||
Serial.print("\n** HomeSpan Device ID and Pairing Data DELETED **\n** Restarting...\n\n");
|
Serial.print("\n** HomeSpan Device ID and Pairing Data DELETED **\n** Restarting...\n\n");
|
||||||
delay(1000);
|
delay(1000);
|
||||||
|
statusLED.off();
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -601,6 +542,7 @@ void Span::processSerialCommand(char *c){
|
||||||
nvs_commit(HAPClient::wifiNVS);
|
nvs_commit(HAPClient::wifiNVS);
|
||||||
Serial.print("\n** FACTORY RESET **\n** Restarting...\n\n");
|
Serial.print("\n** FACTORY RESET **\n** Restarting...\n\n");
|
||||||
delay(1000);
|
delay(1000);
|
||||||
|
statusLED.off();
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -610,6 +552,7 @@ void Span::processSerialCommand(char *c){
|
||||||
nvs_flash_erase();
|
nvs_flash_erase();
|
||||||
Serial.print("\n** ALL DATA ERASED **\n** Restarting...\n\n");
|
Serial.print("\n** ALL DATA ERASED **\n** Restarting...\n\n");
|
||||||
delay(1000);
|
delay(1000);
|
||||||
|
statusLED.off();
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ struct Span{
|
||||||
|
|
||||||
char *displayName; // display name for this device - broadcast as part of Bonjour MDNS
|
char *displayName; // display name for this device - broadcast as part of Bonjour MDNS
|
||||||
char *hostNameBase; // base of host name of this device - full host name broadcast by Bonjour MDNS will have 6-byte accessoryID as well as '.local' automatically appended
|
char *hostNameBase; // base of host name of this device - full host name broadcast by Bonjour MDNS will have 6-byte accessoryID as well as '.local' automatically appended
|
||||||
|
char *hostName; // full host name of this device - constructed from hostNameBase and 6-byte AccessoryID
|
||||||
char *modelName; // model name of this device - broadcast as Bonjour field "md"
|
char *modelName; // model name of this device - broadcast as Bonjour field "md"
|
||||||
char category[3]=""; // category ID of primary accessory - broadcast as Bonjour field "ci" (HAP Section 13)
|
char category[3]=""; // category ID of primary accessory - broadcast as Bonjour field "ci" (HAP Section 13)
|
||||||
unsigned long snapTime; // current time (in millis) snapped before entering Service loops() or updates()
|
unsigned long snapTime; // current time (in millis) snapped before entering Service loops() or updates()
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ boolean Network::allowedCode(char *s){
|
||||||
|
|
||||||
void Network::apConfigure(char *apName){
|
void Network::apConfigure(char *apName){
|
||||||
|
|
||||||
Serial.print("Starting Access Point: ");
|
Serial.print("*** Starting Access Point: ");
|
||||||
Serial.print(apName);
|
Serial.print(apName);
|
||||||
Serial.print(" / ");
|
Serial.print(" / ");
|
||||||
Serial.print(apPassword);
|
Serial.print(apPassword);
|
||||||
|
|
@ -92,6 +92,18 @@ void Network::apConfigure(char *apName){
|
||||||
|
|
||||||
homeSpan.statusLED.start(LED_AP_STARTED);
|
homeSpan.statusLED.start(LED_AP_STARTED);
|
||||||
|
|
||||||
|
Serial.print("\nScanning for Networks...\n\n");
|
||||||
|
|
||||||
|
scan(); // scan for networks
|
||||||
|
|
||||||
|
for(int i=0;i<numSSID;i++){
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(i+1);
|
||||||
|
Serial.print(") ");
|
||||||
|
Serial.print(ssidList[i]);
|
||||||
|
Serial.print("\n");
|
||||||
|
}
|
||||||
|
|
||||||
WiFiServer apServer(80);
|
WiFiServer apServer(80);
|
||||||
|
|
||||||
TempBuffer <uint8_t> tempBuffer(MAX_HTTP+1);
|
TempBuffer <uint8_t> tempBuffer(MAX_HTTP+1);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue