diff --git a/FollowMe_old.cfg b/FollowMe_old.cfg index 8d5b252..204d91e 100644 --- a/FollowMe_old.cfg +++ b/FollowMe_old.cfg @@ -24,6 +24,7 @@ #define WITH_RFM95 // RF chip selection: both HELTEC and TTGO use sx1276 which is same as RFM95 +#define WITH_LORAWAN // #define WITH_SLEEP // with software sleep mode controlled by the long-press on the button // #define WITH_AXP // with AXP192 power controller (T-BEAM V1.0) @@ -52,7 +53,7 @@ // #define WITH_BMX055 // BMX055 magnetic and IMU sensor -#define WITH_FANET +// #define WITH_FANET #define WITH_PFLAA // PFLAU and PFLAA for compatibility with XCsoar and LK8000 // #define WITH_POGNT // #define WITH_GDL90 @@ -69,13 +70,19 @@ #define WITH_SD // use the SD card in SPI mode and FAT file system #define WITH_SPIFFS // use SPIFFS file system in Flash -#define WITH_SPIFFS_FAT +#define WITH_SPIFFS_FAT // FAT system in internal flash #define WITH_LOG // log own positions and other received to SPIFFS #define WITH_SDLOG // log own position and other data to uSD card -// #define WITH_STRATUX -#define WITH_BT_SPP // Bluetooth serial port for smartphone/tablet link -// #define WITH_WIFI // attempt to connect to the wifi router for uploading the log files +// #define WITH_BT_SPP // Bluetooth serial port for smartphone/tablet link + +// #define WITH_STRATUX // connect to Stratux as a client to send GPS and Pressure data +#define WITH_AP // WiFi AcessPoint and TCP decoder port +// #define WITH_APRS // attempt to connect to the wifi router and then APRS + +#if defined(WITH_STRATUX) || defined(WITH_APRS) || defined(WITH_AP) +#define WITH_WIFI +#endif // #define WITH_ENCRYPT // Encrypt (optionally) the position diff --git a/main/ap.cpp b/main/ap.cpp index e4c054b..4fd0b44 100644 --- a/main/ap.cpp +++ b/main/ap.cpp @@ -36,56 +36,127 @@ static void SelectList(httpd_req_t *Req, const char *Name, const char **List, in } httpd_resp_sendstr_chunk(Req, "\n"); } +static void ParmForm_Info(httpd_req_t *Req) // produce HTML form for aircraft parameters +{ + httpd_resp_sendstr_chunk(Req, "
\n"); + httpd_resp_sendstr_chunk(Req, ""); + + httpd_resp_sendstr_chunk(Req, "\n"); + + httpd_resp_sendstr_chunk(Req, "\n"); + + httpd_resp_sendstr_chunk(Req, "\n"); + + httpd_resp_sendstr_chunk(Req, "\n"); + + httpd_resp_sendstr_chunk(Req, "\n"); + + httpd_resp_sendstr_chunk(Req, "\n"); + + httpd_resp_sendstr_chunk(Req, "\n"); + + httpd_resp_sendstr_chunk(Req, "
Info
Pilot
Crew
Base airfield
Registration
Manufacturer
Model
Type
\n"); } + static void ParmForm_Acft(httpd_req_t *Req) // produce HTML form for aircraft parameters { char Line[16]; httpd_resp_sendstr_chunk(Req, "
\n"); - httpd_resp_sendstr_chunk(Req, ""); + httpd_resp_sendstr_chunk(Req, ""); - httpd_resp_sendstr_chunk(Req, "\n"); const char *AddrTypeTable[4] = { "Random", "ICAO", "FLARM", "OGN" } ; - httpd_resp_sendstr_chunk(Req, "\n"); + httpd_resp_sendstr_chunk(Req, "\n"); const char *AcftTypeTable[16] = { "Unknown", "(moto)Glider", "Tow-plane", "Helicopter", "Parachute", "Drop-plane", "Hang-glider", "Para-glider", "Powered-aircraft", "Jet-aircraft", "UFO", "Balloon", "Airship", "UAV", "Ground support", "Static object" } ; - httpd_resp_sendstr_chunk(Req, "\n"); + httpd_resp_sendstr_chunk(Req, "\n"); - httpd_resp_sendstr_chunk(Req, "
Aircraft
Aircraft
AddressAddress>16)); Format_Hex(Line+2, (uint16_t)Parameters.Address); httpd_resp_send_chunk(Req, Line, 6); httpd_resp_sendstr_chunk(Req, "\">
Addr-Type\n"); + httpd_resp_sendstr_chunk(Req, "
Addr-Type\n"); SelectList(Req, "AddrType", AddrTypeTable, 4, Parameters.AddrType); - httpd_resp_sendstr_chunk(Req, "
Acft-Type\n"); + httpd_resp_sendstr_chunk(Req, "
Acft-Type\n"); SelectList(Req, "AcftType", AcftTypeTable, 16, Parameters.AcftType); - httpd_resp_sendstr_chunk(Req, "
Pilot\n"); } + +static void ParmForm_Other(httpd_req_t *Req) // produce HTML form for aircraft parameters +{ char Line[16]; int Len; + + httpd_resp_sendstr_chunk(Req, "
\n"); + httpd_resp_sendstr_chunk(Req, ""); + + const char *FreqPlanTable[16] = { "Auto", "Europe/Africa", "USA/Canada", "Australia/Chile", "New Zeeland", "Izrael" }; + httpd_resp_sendstr_chunk(Req, "\n"); + + httpd_resp_sendstr_chunk(Req, "\n"); - httpd_resp_sendstr_chunk(Req, "\n"); + + httpd_resp_sendstr_chunk(Req, "\n"); + + httpd_resp_sendstr_chunk(Req, "\n"); + + httpd_resp_sendstr_chunk(Req, "\n"); httpd_resp_sendstr_chunk(Req, "
Other
Freq. plan\n"); + SelectList(Req, "FreqPlan", FreqPlanTable, 6, Parameters.FreqPlan); + httpd_resp_sendstr_chunk(Req, "
Tx power [dBm]
CrewFreq.corr. [ppm]
Console baud
Verbose
OLED page sel.
\n"); } -static void ParmForm_AP(httpd_req_t *Req) +static void ParmForm_AP(httpd_req_t *Req) // Wi-Fi access point parameters { char Line[16]; int Len; { char Line[16]; int Len; - httpd_resp_sendstr_chunk(Req, "
\n"); - httpd_resp_sendstr_chunk(Req, ""); - httpd_resp_sendstr_chunk(Req, "
Aceess Point
SSID:\n"); + httpd_resp_sendstr_chunk(Req, ""); + + httpd_resp_sendstr_chunk(Req, "\n"); - httpd_resp_sendstr_chunk(Req, "\n"); - httpd_resp_sendstr_chunk(Req, "\n"); + httpd_resp_sendstr_chunk(Req, "\n"); + httpd_resp_sendstr_chunk(Req, "
Wi-Fi AP
SSID
Password:Password
Data port
Tx [dBm]
\n"); } static esp_err_t parm_get_handler(httpd_req_t *Req) @@ -108,35 +179,52 @@ static esp_err_t parm_get_handler(httpd_req_t *Req) { Parameters.ReadLine(Line); Line = strchr(Line, '&'); if(Line==0) break; Line++; } - free(URL); } + free(URL); + Parameters.WriteToNVS(); } + httpd_resp_sendstr_chunk(Req, "\ +\n\ +\n\ +OGN-Tracker config\n\ +"); + httpd_resp_sendstr_chunk(Req, "

OGN-Tracker configuration

\n"); + httpd_resp_sendstr_chunk(Req, "\n\n\n\n\n\n\n\n\n
\n"); + ParmForm_Acft(Req); + httpd_resp_sendstr_chunk(Req, "\n"); + ParmForm_AP(Req); + httpd_resp_sendstr_chunk(Req, "
\n"); + ParmForm_Info(Req); + httpd_resp_sendstr_chunk(Req, "\n"); + ParmForm_Other(Req); + httpd_resp_sendstr_chunk(Req, "
\n"); + httpd_resp_sendstr_chunk(Req, "\n"); + httpd_resp_sendstr_chunk(Req, 0); + return ESP_OK; } + +static esp_err_t top_get_handler(httpd_req_t *Req) +{ + httpd_resp_set_status(Req, "307 Temporary Redirect"); + httpd_resp_set_hdr(Req, "Location", "/parm.html"); + httpd_resp_send(Req, 0, 0); +/* httpd_resp_sendstr_chunk(Req, "\ \n\ \n\ OGN-Tracker status\n\ "); - // int Len=Parameters.Print(Line); - // httpd_resp_send_chunk(Req, Line, Len); - ParmForm_Acft(Req); - ParmForm_AP(Req); + + httpd_resp_sendstr_chunk(Req, "

OGN-Tracker

\n"); + httpd_resp_sendstr_chunk(Req, "Configuration page\n"); + httpd_resp_sendstr_chunk(Req, "\n"); httpd_resp_sendstr_chunk(Req, 0); +*/ return ESP_OK; } -/* -static esp_err_t parm_get_handler(httpd_req_t *Req) -{ char Line[32]; - // int ContLen=Req->content_len; - xSemaphoreTake(CONS_Mutex, portMAX_DELAY); - Format_String(CONS_UART_Write, "parm_get_handler() => ["); - // Format_SignDec(CONS_UART_Write, ContLen, 1, 0, 1); - Format_String(CONS_UART_Write, "] "); - // for( ; ; ) - // { int Ret = httpd_req_recv(Req, Line, 31); if(Len<=0) break; - // } - Format_String(CONS_UART_Write, "\n"); - xSemaphoreGive(CONS_Mutex); - return ESP_OK; } -*/ +static const httpd_uri_t HTTPtop = +{ .uri = "/", + .method = HTTP_GET, + .handler = top_get_handler, + .user_ctx = 0 }; static const httpd_uri_t HTTPparm = { .uri = "/parm.html", @@ -144,14 +232,6 @@ static const httpd_uri_t HTTPparm = .handler = parm_get_handler, .user_ctx = 0 }; -/* -static const httpd_uri_t HTTPsave = -{ .uri = "/parm.html", - .method = HTTP_GET, - .handler = parm_get_handler, - .user_ctx = 0 }; -*/ - static httpd_handle_t HTTPserver = 0; static esp_err_t HTTP_Start(int MaxSockets=4, int Port=80) @@ -160,8 +240,8 @@ static esp_err_t HTTP_Start(int MaxSockets=4, int Port=80) Config.task_priority = tskIDLE_PRIORITY+3; Config.max_open_sockets = MaxSockets; esp_err_t Err=httpd_start(&HTTPserver, &Config); if(Err!=ESP_OK) return Err; + httpd_register_uri_handler(HTTPserver, &HTTPtop); httpd_register_uri_handler(HTTPserver, &HTTPparm); - // httpd_register_uri_handler(HTTPserver, &HTTPsave); return Err; } static void HTTP_Stop(void)