Host library for controlling a WiConnect enabled Wi-Fi module.

Dependents:   wiconnect-ota_example wiconnect-web_setup_example wiconnect-test-console wiconnect-tcp_server_example ... more

Revision:
0:ea85c4bb5e1f
Child:
1:6ec9998427ad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WiconnectInterface.h	Mon Aug 11 09:58:24 2014 +0000
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2014, ACKme Networks
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of ACKme Networks;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of ACKme Networks.
+ */
+
+#pragma once
+
+#include "WiconnectTypes.h"
+
+
+#include "types/LogFunc.h"
+#include "types/ReaderFunc.h"
+#include "types/Callback.h"
+#include "types/QueuedCommand.h"
+#include "types/CommandQueue.h"
+#include "types/TimeoutTimer.h"
+#include "types/PeriodicTimer.h"
+#include "types/Gpio.h"
+#include "types/WiconnectSerial.h"
+
+#include "NetworkInterface.h"
+#include "SocketInterface.h"
+#include "FileInterface.h"
+
+
+#ifdef WICONNECT_ENABLE_MALLOC
+#define WICONNECT_MALLOC_ARGS , void* (*malloc_)(size_t) = WICONNECT_DEFAULT_MALLOC, void (*free_)(void*) = WICONNECT_DEFAULT_FREE
+#else
+#define WICONNECT_MALLOC_ARGS
+#endif
+
+
+namespace wiconnect {
+
+
+class Wiconnect : public NetworkInterface,
+                  public SocketInterface,
+                  public FileInterface
+{
+public:
+    Wiconnect(const SerialConfig &serialConfig, Pin reset = PIN_NC, Pin wake = PIN_NC, bool nonBlocking = WICONNECT_DEFAULT_NONBLOCKING WICONNECT_MALLOC_ARGS);
+    Wiconnect(const SerialConfig &serialConfig, void *internalBuffer, int internalBufferSize, Pin reset = PIN_NC, Pin wake = PIN_NC, bool nonBlocking = WICONNECT_DEFAULT_NONBLOCKING WICONNECT_MALLOC_ARGS);
+    ~Wiconnect();
+
+    static Wiconnect* getInstance();
+
+    WiconnectResult init(bool bringNetworkUp);
+    void deinit();
+    bool isInitialized();
+    WiconnectResult reset();
+    WiconnectResult wakeup();
+    void flush(int delayMs = 500);
+
+    WiconnectResult getVersion(char *versionBuffer = NULL, int versionBufferSize = 0, const Callback &completeCallback = Callback());
+
+    WiconnectResult sendCommand(const Callback &completeCallback, char *responseBuffer, int responseBufferLen,
+                                int timeoutMs, const ReaderFunc &reader, void *user, const char *cmd, va_list vaList);
+    WiconnectResult sendCommand(char *responseBuffer, int responseBufferLen, int timeoutMs, const ReaderFunc &reader,
+                                void *user, const char *cmd, va_list vaList);
+    WiconnectResult sendCommand(char *responseBuffer, int responseBufferLen, int timeoutMs, const ReaderFunc &reader,
+                                void *user, const char *cmd, ...);
+    WiconnectResult sendCommand( int timeoutMs, const ReaderFunc &reader, void *user, const char *cmd, ...);
+    WiconnectResult sendCommand(const ReaderFunc &reader, void *user, const char *cmd, ...);
+    WiconnectResult sendCommand(char *responseBuffer, int responseBufferLen,  int timeoutMs, const char *cmd, ...);
+    WiconnectResult sendCommand(const Callback &completeCallback, char *responseBuffer, int responseBufferLen, const char *cmd, ...);
+    WiconnectResult sendCommand(char *responseBuffer, int responseBufferLen, const char *cmd, ...);
+    WiconnectResult sendCommand(const Callback &completeCallback, const char *cmd, ...);
+    WiconnectResult sendCommand(const char *cmd, ...);
+    WiconnectResult sendCommand(const Callback &completeCallback, int timeoutMs, const char *cmd, ...);
+    WiconnectResult sendCommand(int timeoutMs, const char *cmd, ...);
+    WiconnectResult sendCommand(const char *cmd, va_list vaList);
+
+    const char* getLastCommandResponseCodeStr();
+    uint16_t getLastCommandResponseLength();
+    char* getResponseBuffer();
+    WiconnectResult responseToUint32(uint32_t *uint32Ptr);
+    WiconnectResult responseToInt32(int32_t *int32Ptr);
+
+    WiconnectResult checkCurrentCommand();
+    void stopCurrentCommand();
+    void setCommandDefaultTimeout(int timeoutMs);
+    int getCommandDefaultTimeout();
+
+    void setPinToGpioMapper(PinToGpioMapper mapper);
+
+    static const char* getWiconnectResultStr(WiconnectResult wiconnectResult);
+    void setDebugLogger(LogFunc logFunc);
+
+#ifdef WICONNECT_ASYNC_TIMER_ENABLED
+    WiconnectResult enqueueCommand(QueuedCommand *command, const Callback &commandCompleteHandler = Callback());
+    void setCommandProcessingPeriod(uint32_t periodMs);
+#endif
+
+protected:
+
+#ifdef WICONNECT_ENABLE_MALLOC
+    void* (*_malloc)(size_t);
+    void (*_free)(void *);
+    friend class QueuedCommand;
+    friend class WiconnectSerial;
+    friend class ScanResult;
+    friend class Socket;
+    friend class File;
+#endif
+
+    wiconnect::WiconnectSerial serial;
+    wiconnect::Gpio resetGpio;
+    wiconnect::Gpio wakeGpio;
+
+    volatile bool commandExecuting;
+    bool initialized;
+    bool nonBlocking;
+
+    PinToGpioMapper pinToGpioMapper;
+
+    char *internalBuffer;
+    int internalBufferSize;
+    bool internalBufferAlloc;
+    uint8_t internalProcessingState;
+    void *currentCommandId;
+
+    wiconnect::TimeoutTimer timeoutTimer;
+    int defaultTimeoutMs;
+
+    uint8_t commandHeaderBuffer[32];
+    char commandFormatBuffer[WICONNECT_MAX_CMD_SIZE];
+    uint8_t commandContext[96];
+
+    void prepare(void *internalBuffer, int internalBufferSize, bool nonBlocking);
+    WiconnectResult inline receiveResponse();
+    WiconnectResult inline receivePacket();
+    void issueCommandCallback(WiconnectResult result);
+
+    wiconnect::LogFunc debugLogger;
+    void debugLog(const char *msg, ...);
+
+#ifdef WICONNECT_ASYNC_TIMER_ENABLED
+    wiconnect::PeriodicTimer commandProcessorTimer;
+    uint32_t commandProcessingPeriod;
+    CommandQueue commandQueue;
+    wiconnect::QueuedCommand *currentQueuedCommand;
+
+    void commandProcessingTimerHandler(void);
+    void processNextQueuedCommand();
+    void checkQueuedCommandTimeout();
+#endif
+
+    friend class NetworkInterface;
+    friend class SocketInterface;
+    friend class FileInterface;
+};
+
+}
+