fixed recv to support wind msg and rx fragments
Fork of SPWF01SA by
SPWFSA01.h@22:0fb8db6110be, 2016-10-10 (annotated)
- Committer:
- mapellil
- Date:
- Mon Oct 10 15:43:23 2016 +0000
- Revision:
- 22:0fb8db6110be
- Parent:
- 13:f21e4e73bbb6
Modified recv to support wind msg and rx fragment
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mridup | 0:9e5d98ceea74 | 1 | /* SPWFInterface Example |
mridup | 0:9e5d98ceea74 | 2 | * Copyright (c) 2015 ARM Limited |
mridup | 0:9e5d98ceea74 | 3 | * |
mridup | 0:9e5d98ceea74 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
mridup | 0:9e5d98ceea74 | 5 | * you may not use this file except in compliance with the License. |
mridup | 0:9e5d98ceea74 | 6 | * You may obtain a copy of the License at |
mridup | 0:9e5d98ceea74 | 7 | * |
mridup | 0:9e5d98ceea74 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
mridup | 0:9e5d98ceea74 | 9 | * |
mridup | 0:9e5d98ceea74 | 10 | * Unless required by applicable law or agreed to in writing, software |
mridup | 0:9e5d98ceea74 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
mridup | 0:9e5d98ceea74 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
mridup | 0:9e5d98ceea74 | 13 | * See the License for the specific language governing permissions and |
mridup | 0:9e5d98ceea74 | 14 | * limitations under the License. |
mridup | 0:9e5d98ceea74 | 15 | */ |
mapellil | 22:0fb8db6110be | 16 | |
mapellil | 22:0fb8db6110be | 17 | |
mridup | 0:9e5d98ceea74 | 18 | |
mridup | 0:9e5d98ceea74 | 19 | #ifndef SPWFSA01_H |
mridup | 0:9e5d98ceea74 | 20 | #define SPWFSA01_H |
mridup | 0:9e5d98ceea74 | 21 | |
mridup | 0:9e5d98ceea74 | 22 | #include "ATParser.h" |
mridup | 0:9e5d98ceea74 | 23 | |
mapellil | 22:0fb8db6110be | 24 | typedef enum { |
mapellil | 22:0fb8db6110be | 25 | WAITING_WIND=1, |
mapellil | 22:0fb8db6110be | 26 | RESIDUAL_DATA_ON_RECV |
mapellil | 22:0fb8db6110be | 27 | }t_recv_state; |
mapellil | 22:0fb8db6110be | 28 | |
mapellil | 22:0fb8db6110be | 29 | |
mridup | 0:9e5d98ceea74 | 30 | /** SPWFSA01Interface class. |
mridup | 0:9e5d98ceea74 | 31 | This is an interface to a SPWFSA01 module. |
mridup | 0:9e5d98ceea74 | 32 | */ |
mridup | 0:9e5d98ceea74 | 33 | class SPWFSA01 |
mridup | 0:9e5d98ceea74 | 34 | { |
mridup | 0:9e5d98ceea74 | 35 | public: |
mridup | 0:9e5d98ceea74 | 36 | SPWFSA01(PinName tx, PinName rx, bool debug=false); |
mridup | 0:9e5d98ceea74 | 37 | |
mridup | 0:9e5d98ceea74 | 38 | /** |
mridup | 0:9e5d98ceea74 | 39 | * Init the SPWFSA01 |
mridup | 0:9e5d98ceea74 | 40 | * |
mridup | 0:9e5d98ceea74 | 41 | * @param mode mode in which to startup |
mridup | 0:9e5d98ceea74 | 42 | * @return true only if SPWFSA01 has started up correctly |
mridup | 0:9e5d98ceea74 | 43 | */ |
mridup | 0:9e5d98ceea74 | 44 | bool startup(int mode); |
mridup | 0:9e5d98ceea74 | 45 | |
mridup | 0:9e5d98ceea74 | 46 | void waitSPWFReady(void); |
mridup | 0:9e5d98ceea74 | 47 | /** |
mridup | 0:9e5d98ceea74 | 48 | * Reset SPWFSA01 |
mridup | 0:9e5d98ceea74 | 49 | * |
mridup | 0:9e5d98ceea74 | 50 | * @return true only if SPWFSA01 resets successfully |
mridup | 0:9e5d98ceea74 | 51 | */ |
mridup | 0:9e5d98ceea74 | 52 | bool reset(void); |
mridup | 0:9e5d98ceea74 | 53 | |
mridup | 0:9e5d98ceea74 | 54 | bool hw_reset(void); |
mridup | 0:9e5d98ceea74 | 55 | |
mridup | 0:9e5d98ceea74 | 56 | /** |
mridup | 0:9e5d98ceea74 | 57 | * Enable/Disable DHCP |
mridup | 0:9e5d98ceea74 | 58 | * |
mridup | 5:f17d6351e942 | 59 | * @param mode mode of DHCP 2-softAP, 1-on, 0-off |
mridup | 0:9e5d98ceea74 | 60 | * @return true only if SPWFSA01 enables/disables DHCP successfully |
mridup | 0:9e5d98ceea74 | 61 | */ |
mridup | 5:f17d6351e942 | 62 | bool dhcp(int mode); |
mridup | 0:9e5d98ceea74 | 63 | |
mridup | 0:9e5d98ceea74 | 64 | /** |
mridup | 0:9e5d98ceea74 | 65 | * Connect SPWFSA01 to AP |
mridup | 0:9e5d98ceea74 | 66 | * |
mridup | 0:9e5d98ceea74 | 67 | * @param ap the name of the AP |
mridup | 0:9e5d98ceea74 | 68 | * @param passPhrase the password of AP |
mridup | 0:9e5d98ceea74 | 69 | * @param securityMode the security mode of AP (WPA/WPA2, WEP, Open) |
mridup | 0:9e5d98ceea74 | 70 | * @return true only if SPWFSA01 is connected successfully |
mridup | 0:9e5d98ceea74 | 71 | */ |
mridup | 0:9e5d98ceea74 | 72 | bool connect(const char *ap, const char *passPhrase, int securityMode); |
mridup | 0:9e5d98ceea74 | 73 | |
mridup | 0:9e5d98ceea74 | 74 | /** |
mridup | 0:9e5d98ceea74 | 75 | * Disconnect SPWFSA01 from AP |
mridup | 0:9e5d98ceea74 | 76 | * |
mridup | 0:9e5d98ceea74 | 77 | * @return true only if SPWFSA01 is disconnected successfully |
mridup | 0:9e5d98ceea74 | 78 | */ |
mridup | 0:9e5d98ceea74 | 79 | bool disconnect(void); |
mridup | 0:9e5d98ceea74 | 80 | |
mridup | 0:9e5d98ceea74 | 81 | /** |
mridup | 0:9e5d98ceea74 | 82 | * Get the IP address of SPWFSA01 |
mridup | 0:9e5d98ceea74 | 83 | * |
mridup | 0:9e5d98ceea74 | 84 | * @return null-teriminated IP address or null if no IP address is assigned |
mridup | 0:9e5d98ceea74 | 85 | */ |
mridup | 0:9e5d98ceea74 | 86 | const char *getIPAddress(void); |
mridup | 0:9e5d98ceea74 | 87 | |
mridup | 0:9e5d98ceea74 | 88 | /** |
mridup | 0:9e5d98ceea74 | 89 | * Get the MAC address of SPWFSA01 |
mridup | 0:9e5d98ceea74 | 90 | * |
mridup | 0:9e5d98ceea74 | 91 | * @return null-terminated MAC address or null if no MAC address is assigned |
mridup | 0:9e5d98ceea74 | 92 | */ |
mridup | 0:9e5d98ceea74 | 93 | const char *getMACAddress(void); |
mridup | 0:9e5d98ceea74 | 94 | |
mridup | 0:9e5d98ceea74 | 95 | /** |
mridup | 0:9e5d98ceea74 | 96 | * Check if SPWFSA01 is conenected |
mridup | 0:9e5d98ceea74 | 97 | * |
mridup | 0:9e5d98ceea74 | 98 | * @return true only if the chip has an IP address |
mridup | 0:9e5d98ceea74 | 99 | */ |
mridup | 0:9e5d98ceea74 | 100 | bool isConnected(void); |
mridup | 0:9e5d98ceea74 | 101 | |
mridup | 0:9e5d98ceea74 | 102 | /** |
mridup | 0:9e5d98ceea74 | 103 | * Open a socketed connection |
mridup | 0:9e5d98ceea74 | 104 | * |
mridup | 5:f17d6351e942 | 105 | * @param type the type of socket to open "u" (UDP) or "t" (TCP) |
mridup | 5:f17d6351e942 | 106 | * @param id id to get the new socket number, valid 0-7 |
mridup | 0:9e5d98ceea74 | 107 | * @param port port to open connection with |
mridup | 0:9e5d98ceea74 | 108 | * @param addr the IP address of the destination |
mridup | 0:9e5d98ceea74 | 109 | * @return true only if socket opened successfully |
mridup | 0:9e5d98ceea74 | 110 | */ |
mridup | 3:2af9df1068a5 | 111 | bool open(const char *type, int* id, const char* addr, int port); |
mridup | 0:9e5d98ceea74 | 112 | |
mridup | 0:9e5d98ceea74 | 113 | /** |
mridup | 0:9e5d98ceea74 | 114 | * Sends data to an open socket |
mridup | 0:9e5d98ceea74 | 115 | * |
mridup | 0:9e5d98ceea74 | 116 | * @param id id of socket to send to |
mridup | 0:9e5d98ceea74 | 117 | * @param data data to be sent |
mridup | 0:9e5d98ceea74 | 118 | * @param amount amount of data to be sent - max 1024 |
mridup | 0:9e5d98ceea74 | 119 | * @return true only if data sent successfully |
mridup | 0:9e5d98ceea74 | 120 | */ |
mridup | 0:9e5d98ceea74 | 121 | bool send(int id, const void *data, uint32_t amount); |
mridup | 0:9e5d98ceea74 | 122 | |
mridup | 0:9e5d98ceea74 | 123 | /** |
mridup | 0:9e5d98ceea74 | 124 | * Receives data from an open socket |
mridup | 0:9e5d98ceea74 | 125 | * |
mridup | 0:9e5d98ceea74 | 126 | * @param id id to receive from |
mridup | 0:9e5d98ceea74 | 127 | * @param data placeholder for returned information |
mridup | 0:9e5d98ceea74 | 128 | * @param amount number of bytes to be received |
mridup | 0:9e5d98ceea74 | 129 | * @return the number of bytes received |
mridup | 0:9e5d98ceea74 | 130 | */ |
mridup | 0:9e5d98ceea74 | 131 | int32_t recv(int id, void *data, uint32_t amount); |
mridup | 0:9e5d98ceea74 | 132 | |
mridup | 0:9e5d98ceea74 | 133 | /** |
mridup | 0:9e5d98ceea74 | 134 | * Closes a socket |
mridup | 0:9e5d98ceea74 | 135 | * |
mridup | 0:9e5d98ceea74 | 136 | * @param id id of socket to close, valid only 0-4 |
mridup | 0:9e5d98ceea74 | 137 | * @return true only if socket is closed successfully |
mridup | 0:9e5d98ceea74 | 138 | */ |
mridup | 0:9e5d98ceea74 | 139 | bool close(int id); |
mridup | 0:9e5d98ceea74 | 140 | |
mridup | 0:9e5d98ceea74 | 141 | /** |
mridup | 0:9e5d98ceea74 | 142 | * Allows timeout to be changed between commands |
mridup | 0:9e5d98ceea74 | 143 | * |
mridup | 0:9e5d98ceea74 | 144 | * @param timeout_ms timeout of the connection |
mridup | 0:9e5d98ceea74 | 145 | */ |
mridup | 0:9e5d98ceea74 | 146 | void setTimeout(uint32_t timeout_ms); |
mridup | 0:9e5d98ceea74 | 147 | |
mridup | 0:9e5d98ceea74 | 148 | /** |
mridup | 0:9e5d98ceea74 | 149 | * Checks if data is available |
mridup | 0:9e5d98ceea74 | 150 | */ |
mridup | 0:9e5d98ceea74 | 151 | bool readable(); |
mridup | 0:9e5d98ceea74 | 152 | |
mridup | 0:9e5d98ceea74 | 153 | /** |
mridup | 0:9e5d98ceea74 | 154 | * Checks if data can be written |
mridup | 0:9e5d98ceea74 | 155 | */ |
mridup | 0:9e5d98ceea74 | 156 | bool writeable(); |
mridup | 0:9e5d98ceea74 | 157 | |
mridup | 0:9e5d98ceea74 | 158 | private: |
mridup | 0:9e5d98ceea74 | 159 | BufferedSerial _serial; |
mridup | 0:9e5d98ceea74 | 160 | ATParser _parser; |
mridup | 0:9e5d98ceea74 | 161 | DigitalInOut _wakeup; |
mridup | 0:9e5d98ceea74 | 162 | DigitalInOut _reset; |
mridup | 0:9e5d98ceea74 | 163 | |
mridup | 0:9e5d98ceea74 | 164 | char _ip_buffer[16]; |
mridup | 0:9e5d98ceea74 | 165 | char _mac_buffer[18]; |
mridup | 13:f21e4e73bbb6 | 166 | bool dbg_on; |
mapellil | 22:0fb8db6110be | 167 | t_recv_state _recv_state; |
mapellil | 22:0fb8db6110be | 168 | unsigned int _recv_residual_data; |
mridup | 0:9e5d98ceea74 | 169 | }; |
mridup | 0:9e5d98ceea74 | 170 | |
mridup | 0:9e5d98ceea74 | 171 | #endif //SPWFSA01_H |