Lab_interaccio/2012/Edgard/Vdossier01/WiFly/WiFlyDevice.h
2025-02-25 21:29:42 +01:00

79 lines
2.8 KiB
C++

#ifndef __WIFLY_DEVICE_H__
#define __WIFLY_DEVICE_H__
#include "Configuration.h"
#define DEFAULT_SERVER_PORT 80
class WiFlyDevice {
public:
WiFlyDevice(SpiUartDevice& theUart);
void setUart(Stream* newUart);
void begin();
void begin(boolean adhocMode);
boolean createAdHocNetwork(const char *ssid);
boolean join(const char *ssid);
boolean join(const char *ssid, const char *passphrase,
boolean isWPA = true);
boolean configure(byte option, unsigned long value);
long getTime();
const char * ip();
private:
SpiUartDevice& SPIuart;
Stream* uart;
boolean bDifferentUart;
// Okay, this really sucks, but at the moment it works.
// The problem is that we have to keep track of an active server connection
// but AFAICT due to the way the WebClient example is written
// we can't store a useful reference in the server instance
// to an active client instance because the client object gets copied
// when it's returned from Server.available(). This means that
// the state changes in the client object's Client.stop() method
// never get propagated to the Server's stored active client.
// Blah, blah, hand-wavy singleton mention. Trying to store the reference
// to the active client connection here runs into apparent circular
// reference issues with header includes. So in an effort to get this out
// the door we just share whether or not the current "active client"
// that the server has a stored reference is actually active or not.
// (Yeah, nice.)
// TODO: Handle this better.
boolean serverConnectionActive;
uint16_t serverPort;
// TODO: Should these be part of a different class?
// TODO: Should all methods that need to be in command mode ensure
// they are first?
void attemptSwitchToCommandMode();
void switchToCommandMode();
void reboot();
void requireFlowControl();
void setConfiguration(boolean adhocMode);
void setAdhocParams();
boolean sendCommand(const char *command,
boolean isMultipartCommand, // Has default value
const char *expectedResponse); // Has default value
boolean sendCommand(const __FlashStringHelper *command,
boolean isMultipartCommand, // Has default value
const char *expectedResponse); // Has default value
void waitForResponse(const char *toMatch);
void skipRemainderOfResponse();
boolean responseMatched(const char *toMatch);
boolean findInResponse(const char *toMatch, unsigned int timeOut);
boolean enterCommandMode(boolean isAfterBoot = false);
boolean softwareReboot(boolean isAfterBoot);
boolean hardwareReboot();
friend class WiFlyClient;
friend class WiFlyServer;
};
#endif