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

Committer:
dan_ackme
Date:
Mon Aug 11 09:58:24 2014 +0000
Revision:
0:ea85c4bb5e1f
Child:
1:6ec9998427ad
initial check-in

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan_ackme 0:ea85c4bb5e1f 1 /*
dan_ackme 0:ea85c4bb5e1f 2 * Copyright 2014, ACKme Networks
dan_ackme 0:ea85c4bb5e1f 3 * All Rights Reserved.
dan_ackme 0:ea85c4bb5e1f 4 *
dan_ackme 0:ea85c4bb5e1f 5 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of ACKme Networks;
dan_ackme 0:ea85c4bb5e1f 6 * the contents of this file may not be disclosed to third parties, copied
dan_ackme 0:ea85c4bb5e1f 7 * or duplicated in any form, in whole or in part, without the prior
dan_ackme 0:ea85c4bb5e1f 8 * written permission of ACKme Networks.
dan_ackme 0:ea85c4bb5e1f 9 */
dan_ackme 0:ea85c4bb5e1f 10
dan_ackme 0:ea85c4bb5e1f 11 #pragma once
dan_ackme 0:ea85c4bb5e1f 12
dan_ackme 0:ea85c4bb5e1f 13 #include "WiconnectTypes.h"
dan_ackme 0:ea85c4bb5e1f 14
dan_ackme 0:ea85c4bb5e1f 15
dan_ackme 0:ea85c4bb5e1f 16 #include "types/LogFunc.h"
dan_ackme 0:ea85c4bb5e1f 17 #include "types/ReaderFunc.h"
dan_ackme 0:ea85c4bb5e1f 18 #include "types/Callback.h"
dan_ackme 0:ea85c4bb5e1f 19 #include "types/QueuedCommand.h"
dan_ackme 0:ea85c4bb5e1f 20 #include "types/CommandQueue.h"
dan_ackme 0:ea85c4bb5e1f 21 #include "types/TimeoutTimer.h"
dan_ackme 0:ea85c4bb5e1f 22 #include "types/PeriodicTimer.h"
dan_ackme 0:ea85c4bb5e1f 23 #include "types/Gpio.h"
dan_ackme 0:ea85c4bb5e1f 24 #include "types/WiconnectSerial.h"
dan_ackme 0:ea85c4bb5e1f 25
dan_ackme 0:ea85c4bb5e1f 26 #include "NetworkInterface.h"
dan_ackme 0:ea85c4bb5e1f 27 #include "SocketInterface.h"
dan_ackme 0:ea85c4bb5e1f 28 #include "FileInterface.h"
dan_ackme 0:ea85c4bb5e1f 29
dan_ackme 0:ea85c4bb5e1f 30
dan_ackme 0:ea85c4bb5e1f 31 #ifdef WICONNECT_ENABLE_MALLOC
dan_ackme 0:ea85c4bb5e1f 32 #define WICONNECT_MALLOC_ARGS , void* (*malloc_)(size_t) = WICONNECT_DEFAULT_MALLOC, void (*free_)(void*) = WICONNECT_DEFAULT_FREE
dan_ackme 0:ea85c4bb5e1f 33 #else
dan_ackme 0:ea85c4bb5e1f 34 #define WICONNECT_MALLOC_ARGS
dan_ackme 0:ea85c4bb5e1f 35 #endif
dan_ackme 0:ea85c4bb5e1f 36
dan_ackme 0:ea85c4bb5e1f 37
dan_ackme 0:ea85c4bb5e1f 38 namespace wiconnect {
dan_ackme 0:ea85c4bb5e1f 39
dan_ackme 0:ea85c4bb5e1f 40
dan_ackme 0:ea85c4bb5e1f 41 class Wiconnect : public NetworkInterface,
dan_ackme 0:ea85c4bb5e1f 42 public SocketInterface,
dan_ackme 0:ea85c4bb5e1f 43 public FileInterface
dan_ackme 0:ea85c4bb5e1f 44 {
dan_ackme 0:ea85c4bb5e1f 45 public:
dan_ackme 0:ea85c4bb5e1f 46 Wiconnect(const SerialConfig &serialConfig, Pin reset = PIN_NC, Pin wake = PIN_NC, bool nonBlocking = WICONNECT_DEFAULT_NONBLOCKING WICONNECT_MALLOC_ARGS);
dan_ackme 0:ea85c4bb5e1f 47 Wiconnect(const SerialConfig &serialConfig, void *internalBuffer, int internalBufferSize, Pin reset = PIN_NC, Pin wake = PIN_NC, bool nonBlocking = WICONNECT_DEFAULT_NONBLOCKING WICONNECT_MALLOC_ARGS);
dan_ackme 0:ea85c4bb5e1f 48 ~Wiconnect();
dan_ackme 0:ea85c4bb5e1f 49
dan_ackme 0:ea85c4bb5e1f 50 static Wiconnect* getInstance();
dan_ackme 0:ea85c4bb5e1f 51
dan_ackme 0:ea85c4bb5e1f 52 WiconnectResult init(bool bringNetworkUp);
dan_ackme 0:ea85c4bb5e1f 53 void deinit();
dan_ackme 0:ea85c4bb5e1f 54 bool isInitialized();
dan_ackme 0:ea85c4bb5e1f 55 WiconnectResult reset();
dan_ackme 0:ea85c4bb5e1f 56 WiconnectResult wakeup();
dan_ackme 0:ea85c4bb5e1f 57 void flush(int delayMs = 500);
dan_ackme 0:ea85c4bb5e1f 58
dan_ackme 0:ea85c4bb5e1f 59 WiconnectResult getVersion(char *versionBuffer = NULL, int versionBufferSize = 0, const Callback &completeCallback = Callback());
dan_ackme 0:ea85c4bb5e1f 60
dan_ackme 0:ea85c4bb5e1f 61 WiconnectResult sendCommand(const Callback &completeCallback, char *responseBuffer, int responseBufferLen,
dan_ackme 0:ea85c4bb5e1f 62 int timeoutMs, const ReaderFunc &reader, void *user, const char *cmd, va_list vaList);
dan_ackme 0:ea85c4bb5e1f 63 WiconnectResult sendCommand(char *responseBuffer, int responseBufferLen, int timeoutMs, const ReaderFunc &reader,
dan_ackme 0:ea85c4bb5e1f 64 void *user, const char *cmd, va_list vaList);
dan_ackme 0:ea85c4bb5e1f 65 WiconnectResult sendCommand(char *responseBuffer, int responseBufferLen, int timeoutMs, const ReaderFunc &reader,
dan_ackme 0:ea85c4bb5e1f 66 void *user, const char *cmd, ...);
dan_ackme 0:ea85c4bb5e1f 67 WiconnectResult sendCommand( int timeoutMs, const ReaderFunc &reader, void *user, const char *cmd, ...);
dan_ackme 0:ea85c4bb5e1f 68 WiconnectResult sendCommand(const ReaderFunc &reader, void *user, const char *cmd, ...);
dan_ackme 0:ea85c4bb5e1f 69 WiconnectResult sendCommand(char *responseBuffer, int responseBufferLen, int timeoutMs, const char *cmd, ...);
dan_ackme 0:ea85c4bb5e1f 70 WiconnectResult sendCommand(const Callback &completeCallback, char *responseBuffer, int responseBufferLen, const char *cmd, ...);
dan_ackme 0:ea85c4bb5e1f 71 WiconnectResult sendCommand(char *responseBuffer, int responseBufferLen, const char *cmd, ...);
dan_ackme 0:ea85c4bb5e1f 72 WiconnectResult sendCommand(const Callback &completeCallback, const char *cmd, ...);
dan_ackme 0:ea85c4bb5e1f 73 WiconnectResult sendCommand(const char *cmd, ...);
dan_ackme 0:ea85c4bb5e1f 74 WiconnectResult sendCommand(const Callback &completeCallback, int timeoutMs, const char *cmd, ...);
dan_ackme 0:ea85c4bb5e1f 75 WiconnectResult sendCommand(int timeoutMs, const char *cmd, ...);
dan_ackme 0:ea85c4bb5e1f 76 WiconnectResult sendCommand(const char *cmd, va_list vaList);
dan_ackme 0:ea85c4bb5e1f 77
dan_ackme 0:ea85c4bb5e1f 78 const char* getLastCommandResponseCodeStr();
dan_ackme 0:ea85c4bb5e1f 79 uint16_t getLastCommandResponseLength();
dan_ackme 0:ea85c4bb5e1f 80 char* getResponseBuffer();
dan_ackme 0:ea85c4bb5e1f 81 WiconnectResult responseToUint32(uint32_t *uint32Ptr);
dan_ackme 0:ea85c4bb5e1f 82 WiconnectResult responseToInt32(int32_t *int32Ptr);
dan_ackme 0:ea85c4bb5e1f 83
dan_ackme 0:ea85c4bb5e1f 84 WiconnectResult checkCurrentCommand();
dan_ackme 0:ea85c4bb5e1f 85 void stopCurrentCommand();
dan_ackme 0:ea85c4bb5e1f 86 void setCommandDefaultTimeout(int timeoutMs);
dan_ackme 0:ea85c4bb5e1f 87 int getCommandDefaultTimeout();
dan_ackme 0:ea85c4bb5e1f 88
dan_ackme 0:ea85c4bb5e1f 89 void setPinToGpioMapper(PinToGpioMapper mapper);
dan_ackme 0:ea85c4bb5e1f 90
dan_ackme 0:ea85c4bb5e1f 91 static const char* getWiconnectResultStr(WiconnectResult wiconnectResult);
dan_ackme 0:ea85c4bb5e1f 92 void setDebugLogger(LogFunc logFunc);
dan_ackme 0:ea85c4bb5e1f 93
dan_ackme 0:ea85c4bb5e1f 94 #ifdef WICONNECT_ASYNC_TIMER_ENABLED
dan_ackme 0:ea85c4bb5e1f 95 WiconnectResult enqueueCommand(QueuedCommand *command, const Callback &commandCompleteHandler = Callback());
dan_ackme 0:ea85c4bb5e1f 96 void setCommandProcessingPeriod(uint32_t periodMs);
dan_ackme 0:ea85c4bb5e1f 97 #endif
dan_ackme 0:ea85c4bb5e1f 98
dan_ackme 0:ea85c4bb5e1f 99 protected:
dan_ackme 0:ea85c4bb5e1f 100
dan_ackme 0:ea85c4bb5e1f 101 #ifdef WICONNECT_ENABLE_MALLOC
dan_ackme 0:ea85c4bb5e1f 102 void* (*_malloc)(size_t);
dan_ackme 0:ea85c4bb5e1f 103 void (*_free)(void *);
dan_ackme 0:ea85c4bb5e1f 104 friend class QueuedCommand;
dan_ackme 0:ea85c4bb5e1f 105 friend class WiconnectSerial;
dan_ackme 0:ea85c4bb5e1f 106 friend class ScanResult;
dan_ackme 0:ea85c4bb5e1f 107 friend class Socket;
dan_ackme 0:ea85c4bb5e1f 108 friend class File;
dan_ackme 0:ea85c4bb5e1f 109 #endif
dan_ackme 0:ea85c4bb5e1f 110
dan_ackme 0:ea85c4bb5e1f 111 wiconnect::WiconnectSerial serial;
dan_ackme 0:ea85c4bb5e1f 112 wiconnect::Gpio resetGpio;
dan_ackme 0:ea85c4bb5e1f 113 wiconnect::Gpio wakeGpio;
dan_ackme 0:ea85c4bb5e1f 114
dan_ackme 0:ea85c4bb5e1f 115 volatile bool commandExecuting;
dan_ackme 0:ea85c4bb5e1f 116 bool initialized;
dan_ackme 0:ea85c4bb5e1f 117 bool nonBlocking;
dan_ackme 0:ea85c4bb5e1f 118
dan_ackme 0:ea85c4bb5e1f 119 PinToGpioMapper pinToGpioMapper;
dan_ackme 0:ea85c4bb5e1f 120
dan_ackme 0:ea85c4bb5e1f 121 char *internalBuffer;
dan_ackme 0:ea85c4bb5e1f 122 int internalBufferSize;
dan_ackme 0:ea85c4bb5e1f 123 bool internalBufferAlloc;
dan_ackme 0:ea85c4bb5e1f 124 uint8_t internalProcessingState;
dan_ackme 0:ea85c4bb5e1f 125 void *currentCommandId;
dan_ackme 0:ea85c4bb5e1f 126
dan_ackme 0:ea85c4bb5e1f 127 wiconnect::TimeoutTimer timeoutTimer;
dan_ackme 0:ea85c4bb5e1f 128 int defaultTimeoutMs;
dan_ackme 0:ea85c4bb5e1f 129
dan_ackme 0:ea85c4bb5e1f 130 uint8_t commandHeaderBuffer[32];
dan_ackme 0:ea85c4bb5e1f 131 char commandFormatBuffer[WICONNECT_MAX_CMD_SIZE];
dan_ackme 0:ea85c4bb5e1f 132 uint8_t commandContext[96];
dan_ackme 0:ea85c4bb5e1f 133
dan_ackme 0:ea85c4bb5e1f 134 void prepare(void *internalBuffer, int internalBufferSize, bool nonBlocking);
dan_ackme 0:ea85c4bb5e1f 135 WiconnectResult inline receiveResponse();
dan_ackme 0:ea85c4bb5e1f 136 WiconnectResult inline receivePacket();
dan_ackme 0:ea85c4bb5e1f 137 void issueCommandCallback(WiconnectResult result);
dan_ackme 0:ea85c4bb5e1f 138
dan_ackme 0:ea85c4bb5e1f 139 wiconnect::LogFunc debugLogger;
dan_ackme 0:ea85c4bb5e1f 140 void debugLog(const char *msg, ...);
dan_ackme 0:ea85c4bb5e1f 141
dan_ackme 0:ea85c4bb5e1f 142 #ifdef WICONNECT_ASYNC_TIMER_ENABLED
dan_ackme 0:ea85c4bb5e1f 143 wiconnect::PeriodicTimer commandProcessorTimer;
dan_ackme 0:ea85c4bb5e1f 144 uint32_t commandProcessingPeriod;
dan_ackme 0:ea85c4bb5e1f 145 CommandQueue commandQueue;
dan_ackme 0:ea85c4bb5e1f 146 wiconnect::QueuedCommand *currentQueuedCommand;
dan_ackme 0:ea85c4bb5e1f 147
dan_ackme 0:ea85c4bb5e1f 148 void commandProcessingTimerHandler(void);
dan_ackme 0:ea85c4bb5e1f 149 void processNextQueuedCommand();
dan_ackme 0:ea85c4bb5e1f 150 void checkQueuedCommandTimeout();
dan_ackme 0:ea85c4bb5e1f 151 #endif
dan_ackme 0:ea85c4bb5e1f 152
dan_ackme 0:ea85c4bb5e1f 153 friend class NetworkInterface;
dan_ackme 0:ea85c4bb5e1f 154 friend class SocketInterface;
dan_ackme 0:ea85c4bb5e1f 155 friend class FileInterface;
dan_ackme 0:ea85c4bb5e1f 156 };
dan_ackme 0:ea85c4bb5e1f 157
dan_ackme 0:ea85c4bb5e1f 158 }
dan_ackme 0:ea85c4bb5e1f 159