mirror of
https://github.com/meshtastic/firmware.git
synced 2026-02-01 11:11:11 -05:00
Sample usage: First configure device to use @mc-hamster's new wifi stuff: meshtastic --set wifi_ssid mylanname --set wifi_password mylanpassword Then reboot the device (so wifi starts up). (assuming device was assigned addr 192.168.81.45) meshtastic --info --host 192.168.81.45 (See the usual device info you previously had to get over USB) Caveats: * Currently we are limiting to one active TCP connection open at once, if you open a new session the old one is closed automatically * There are no access controls/authentication needed to open a TCP connection to the device * Currently main.cpp is kinda dumb about how we should schedule work and we rely on too many helper loop() functions. Very soon in my queue (related to all the other cleanup) is to add a basic notion of coroutines, so that we can get away from freertos threads and this old school arduino loop function. Once that cleanup happens we can the a) have much lower battery consumption (always) and b) super fast response for all operations.
65 lines
1.6 KiB
C++
65 lines
1.6 KiB
C++
#include "WiFiServerAPI.h"
|
|
#include "PowerFSM.h"
|
|
#include "configuration.h"
|
|
#include <Arduino.h>
|
|
|
|
WiFiServerAPI::WiFiServerAPI(WiFiClient &_client) : StreamAPI(&client), client(_client)
|
|
{
|
|
DEBUG_MSG("Incoming connection from %s\n", client.remoteIP().toString().c_str());
|
|
}
|
|
|
|
WiFiServerAPI::~WiFiServerAPI()
|
|
{
|
|
client.stop();
|
|
|
|
// FIXME - delete this if the client dropps the connection!
|
|
}
|
|
|
|
/// Hookable to find out when connection changes
|
|
void WiFiServerAPI::onConnectionChanged(bool connected)
|
|
{
|
|
// FIXME - we really should be doing global reference counting to see if anyone is currently using serial or wifi and if so,
|
|
// block sleep
|
|
|
|
if (connected) { // To prevent user confusion, turn off bluetooth while using the serial port api
|
|
powerFSM.trigger(EVENT_SERIAL_CONNECTED);
|
|
} else {
|
|
powerFSM.trigger(EVENT_SERIAL_DISCONNECTED);
|
|
}
|
|
}
|
|
|
|
void WiFiServerAPI::loop()
|
|
{
|
|
if (client.connected()) {
|
|
StreamAPI::loop();
|
|
} else {
|
|
DEBUG_MSG("Client dropped connection, closing UDP server\n");
|
|
delete this;
|
|
}
|
|
}
|
|
|
|
#define MESHTASTIC_PORTNUM 4403
|
|
|
|
WiFiServerPort::WiFiServerPort() : WiFiServer(MESHTASTIC_PORTNUM) {}
|
|
|
|
void WiFiServerPort::init()
|
|
{
|
|
DEBUG_MSG("API server sistening on TCP port %d\n", MESHTASTIC_PORTNUM);
|
|
begin();
|
|
}
|
|
|
|
void WiFiServerPort::loop()
|
|
{
|
|
auto client = available();
|
|
if (client) {
|
|
// Close any previous connection (see FIXME in header file)
|
|
if (openAPI)
|
|
delete openAPI;
|
|
|
|
openAPI = new WiFiServerAPI(client);
|
|
}
|
|
|
|
if (openAPI)
|
|
// Allow idle processing so the API can read from its incoming stream
|
|
openAPI->loop();
|
|
} |