CC3000HostDriver for device TI CC3000 some changes were made due to mbed compiler and the use of void*

Dependents:   CC3000Test

Committer:
dflet
Date:
Fri Aug 02 15:06:15 2013 +0000
Revision:
0:9cb694f00b7b
First commit TI CC3000HostDriver library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:9cb694f00b7b 1 /*****************************************************************************
dflet 0:9cb694f00b7b 2 *
dflet 0:9cb694f00b7b 3 * cc3000_common.h - CC3000 Host Driver Implementation.
dflet 0:9cb694f00b7b 4 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
dflet 0:9cb694f00b7b 5 *
dflet 0:9cb694f00b7b 6 * Redistribution and use in source and binary forms, with or without
dflet 0:9cb694f00b7b 7 * modification, are permitted provided that the following conditions
dflet 0:9cb694f00b7b 8 * are met:
dflet 0:9cb694f00b7b 9 *
dflet 0:9cb694f00b7b 10 * Redistributions of source code must retain the above copyright
dflet 0:9cb694f00b7b 11 * notice, this list of conditions and the following disclaimer.
dflet 0:9cb694f00b7b 12 *
dflet 0:9cb694f00b7b 13 * Redistributions in binary form must reproduce the above copyright
dflet 0:9cb694f00b7b 14 * notice, this list of conditions and the following disclaimer in the
dflet 0:9cb694f00b7b 15 * documentation and/or other materials provided with the
dflet 0:9cb694f00b7b 16 * distribution.
dflet 0:9cb694f00b7b 17 *
dflet 0:9cb694f00b7b 18 * Neither the name of Texas Instruments Incorporated nor the names of
dflet 0:9cb694f00b7b 19 * its contributors may be used to endorse or promote products derived
dflet 0:9cb694f00b7b 20 * from this software without specific prior written permission.
dflet 0:9cb694f00b7b 21 *
dflet 0:9cb694f00b7b 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 0:9cb694f00b7b 23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 0:9cb694f00b7b 24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 0:9cb694f00b7b 25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 0:9cb694f00b7b 26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 0:9cb694f00b7b 27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 0:9cb694f00b7b 28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 0:9cb694f00b7b 29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 0:9cb694f00b7b 30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 0:9cb694f00b7b 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 0:9cb694f00b7b 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 0:9cb694f00b7b 33 *
dflet 0:9cb694f00b7b 34 *****************************************************************************/
dflet 0:9cb694f00b7b 35 #ifndef __COMMON_H__
dflet 0:9cb694f00b7b 36 #define __COMMON_H__
dflet 0:9cb694f00b7b 37
dflet 0:9cb694f00b7b 38 //******************************************************************************
dflet 0:9cb694f00b7b 39 // Include files
dflet 0:9cb694f00b7b 40 //******************************************************************************
dflet 0:9cb694f00b7b 41 //#include <stdlib.h>
dflet 0:9cb694f00b7b 42 #include <errno.h>
dflet 0:9cb694f00b7b 43 //#include <stdint.h>
dflet 0:9cb694f00b7b 44
dflet 0:9cb694f00b7b 45 //*****************************************************************************
dflet 0:9cb694f00b7b 46 //
dflet 0:9cb694f00b7b 47 // If building with a C++ compiler, make all of the definitions in this header
dflet 0:9cb694f00b7b 48 // have a C binding.
dflet 0:9cb694f00b7b 49 //
dflet 0:9cb694f00b7b 50 //*****************************************************************************
dflet 0:9cb694f00b7b 51 #ifdef __cplusplus
dflet 0:9cb694f00b7b 52 extern "C" {
dflet 0:9cb694f00b7b 53 #endif
dflet 0:9cb694f00b7b 54
dflet 0:9cb694f00b7b 55 //*****************************************************************************
dflet 0:9cb694f00b7b 56 // ERROR CODES
dflet 0:9cb694f00b7b 57 //*****************************************************************************
dflet 0:9cb694f00b7b 58 #define ESUCCESS 0
dflet 0:9cb694f00b7b 59 #define EFAIL -1
dflet 0:9cb694f00b7b 60 #define EERROR EFAIL
dflet 0:9cb694f00b7b 61
dflet 0:9cb694f00b7b 62 //*****************************************************************************
dflet 0:9cb694f00b7b 63 // COMMON DEFINES
dflet 0:9cb694f00b7b 64 //*****************************************************************************
dflet 0:9cb694f00b7b 65 #define ERROR_SOCKET_INACTIVE -57
dflet 0:9cb694f00b7b 66
dflet 0:9cb694f00b7b 67 #define WLAN_ENABLE (1)
dflet 0:9cb694f00b7b 68
dflet 0:9cb694f00b7b 69 #define WLAN_DISABLE (0)
dflet 0:9cb694f00b7b 70
dflet 0:9cb694f00b7b 71 #define MAC_ADDR_LEN (6)
dflet 0:9cb694f00b7b 72
dflet 0:9cb694f00b7b 73 #define SP_PORTION_SIZE (32)
dflet 0:9cb694f00b7b 74
dflet 0:9cb694f00b7b 75 /*Defines for minimal and maximal RX buffer size. This size includes the spi
dflet 0:9cb694f00b7b 76 header and hci header.
dflet 0:9cb694f00b7b 77 The maximal buffer size derives from:
dflet 0:9cb694f00b7b 78 MTU + HCI header + SPI header + sendto() agrs size
dflet 0:9cb694f00b7b 79 The minimum buffer size derives from:
dflet 0:9cb694f00b7b 80 HCI header + SPI header + max args size
dflet 0:9cb694f00b7b 81
dflet 0:9cb694f00b7b 82 This buffer is used for receiving events and data.
dflet 0:9cb694f00b7b 83 The packet can not be longer than MTU size and CC3000 does not support
dflet 0:9cb694f00b7b 84 fragmentation. Note that the same buffer is used for reception of the data
dflet 0:9cb694f00b7b 85 and events from CC3000. That is why the minimum is defined.
dflet 0:9cb694f00b7b 86 The calculation for the actual size of buffer for reception is:
dflet 0:9cb694f00b7b 87 Given the maximal data size MAX_DATA that is expected to be received by
dflet 0:9cb694f00b7b 88 application, the required buffer is:
dflet 0:9cb694f00b7b 89 Using recv() or recvfrom():
dflet 0:9cb694f00b7b 90
dflet 0:9cb694f00b7b 91 max(CC3000_MINIMAL_RX_SIZE, MAX_DATA + HEADERS_SIZE_DATA + fromlen
dflet 0:9cb694f00b7b 92 + ucArgsize + 1)
dflet 0:9cb694f00b7b 93
dflet 0:9cb694f00b7b 94 Using gethostbyname() with minimal buffer size will limit the host name
dflet 0:9cb694f00b7b 95 returned to 99 bytes only.
dflet 0:9cb694f00b7b 96 The 1 is used for the overrun detection
dflet 0:9cb694f00b7b 97
dflet 0:9cb694f00b7b 98 Buffer size increased to 130 following the add_profile() with WEP security
dflet 0:9cb694f00b7b 99 which requires TX buffer size of 130 bytes:
dflet 0:9cb694f00b7b 100 HEADERS_SIZE_EVNT + WLAN_ADD_PROFILE_WEP_PARAM_LEN + MAX SSID LEN + 4 * MAX KEY LEN = 130
dflet 0:9cb694f00b7b 101 MAX SSID LEN = 32
dflet 0:9cb694f00b7b 102 MAX SSID LEN = 13 (with add_profile only ascii key setting is supported,
dflet 0:9cb694f00b7b 103 therfore maximum key size is 13)
dflet 0:9cb694f00b7b 104 */
dflet 0:9cb694f00b7b 105
dflet 0:9cb694f00b7b 106 #define CC3000_MINIMAL_RX_SIZE (130 + 1)
dflet 0:9cb694f00b7b 107 #define CC3000_MAXIMAL_RX_SIZE (1519 + 1)
dflet 0:9cb694f00b7b 108
dflet 0:9cb694f00b7b 109 /*Defines for minimal and maximal TX buffer size.
dflet 0:9cb694f00b7b 110 This buffer is used for sending events and data.
dflet 0:9cb694f00b7b 111 The packet can not be longer than MTU size and CC3000 does not support
dflet 0:9cb694f00b7b 112 fragmentation. Note that the same buffer is used for transmission of the data
dflet 0:9cb694f00b7b 113 and commands. That is why the minimum is defined.
dflet 0:9cb694f00b7b 114 The calculation for the actual size of buffer for transmission is:
dflet 0:9cb694f00b7b 115 Given the maximal data size MAX_DATA, the required buffer is:
dflet 0:9cb694f00b7b 116 Using Sendto():
dflet 0:9cb694f00b7b 117
dflet 0:9cb694f00b7b 118 max(CC3000_MINIMAL_TX_SIZE, MAX_DATA + SPI_HEADER_SIZE
dflet 0:9cb694f00b7b 119 + SOCKET_SENDTO_PARAMS_LEN + SIMPLE_LINK_HCI_DATA_HEADER_SIZE + 1)
dflet 0:9cb694f00b7b 120
dflet 0:9cb694f00b7b 121 Using Send():
dflet 0:9cb694f00b7b 122
dflet 0:9cb694f00b7b 123 max(CC3000_MINIMAL_TX_SIZE, MAX_DATA + SPI_HEADER_SIZE
dflet 0:9cb694f00b7b 124 + HCI_CMND_SEND_ARG_LENGTH + SIMPLE_LINK_HCI_DATA_HEADER_SIZE + 1)
dflet 0:9cb694f00b7b 125
dflet 0:9cb694f00b7b 126 The 1 is used for the overrun detection */
dflet 0:9cb694f00b7b 127
dflet 0:9cb694f00b7b 128 #define CC3000_MINIMAL_TX_SIZE (130 + 1)
dflet 0:9cb694f00b7b 129 #define CC3000_MAXIMAL_TX_SIZE (1519 + 1)
dflet 0:9cb694f00b7b 130
dflet 0:9cb694f00b7b 131 //TX and RX buffer sizes, allow to receive and transmit maximum data at length 8.
dflet 0:9cb694f00b7b 132 #ifdef CC3000_TINY_DRIVER
dflet 0:9cb694f00b7b 133 #define TINY_CC3000_MAXIMAL_RX_SIZE 44
dflet 0:9cb694f00b7b 134 #define TINY_CC3000_MAXIMAL_TX_SIZE 59
dflet 0:9cb694f00b7b 135 #endif
dflet 0:9cb694f00b7b 136
dflet 0:9cb694f00b7b 137 /*In order to determine your preferred buffer size,
dflet 0:9cb694f00b7b 138 change CC3000_MAXIMAL_RX_SIZE and CC3000_MAXIMAL_TX_SIZE to a value between
dflet 0:9cb694f00b7b 139 the minimal and maximal specified above.
dflet 0:9cb694f00b7b 140 Note that the buffers are allocated by SPI.
dflet 0:9cb694f00b7b 141 In case you change the size of those buffers, you might need also to change
dflet 0:9cb694f00b7b 142 the linker file, since for example on MSP430 FRAM devices the buffers are
dflet 0:9cb694f00b7b 143 allocated in the FRAM section that is allocated manually and not by IDE.
dflet 0:9cb694f00b7b 144 */
dflet 0:9cb694f00b7b 145
dflet 0:9cb694f00b7b 146 #ifndef CC3000_TINY_DRIVER
dflet 0:9cb694f00b7b 147
dflet 0:9cb694f00b7b 148 #define CC3000_RX_BUFFER_SIZE (CC3000_MAXIMAL_RX_SIZE)
dflet 0:9cb694f00b7b 149 #define CC3000_TX_BUFFER_SIZE (CC3000_MAXIMAL_TX_SIZE)
dflet 0:9cb694f00b7b 150
dflet 0:9cb694f00b7b 151 //if defined TINY DRIVER we use smaller RX and TX buffer in order to minimize RAM consumption
dflet 0:9cb694f00b7b 152 #else
dflet 0:9cb694f00b7b 153 #define CC3000_RX_BUFFER_SIZE (TINY_CC3000_MAXIMAL_RX_SIZE)
dflet 0:9cb694f00b7b 154 #define CC3000_TX_BUFFER_SIZE (TINY_CC3000_MAXIMAL_TX_SIZE)
dflet 0:9cb694f00b7b 155
dflet 0:9cb694f00b7b 156 #endif
dflet 0:9cb694f00b7b 157
dflet 0:9cb694f00b7b 158 //*****************************************************************************
dflet 0:9cb694f00b7b 159 // Compound Types
dflet 0:9cb694f00b7b 160 //*****************************************************************************
dflet 0:9cb694f00b7b 161 typedef long time_t_;
dflet 0:9cb694f00b7b 162 typedef unsigned long clock_t_;
dflet 0:9cb694f00b7b 163 typedef long suseconds_t;
dflet 0:9cb694f00b7b 164
dflet 0:9cb694f00b7b 165 typedef struct timeval timeval;
dflet 0:9cb694f00b7b 166
dflet 0:9cb694f00b7b 167 struct timeval
dflet 0:9cb694f00b7b 168 {
dflet 0:9cb694f00b7b 169 time_t_ tv_sec; /* seconds */
dflet 0:9cb694f00b7b 170 suseconds_t tv_usec; /* microseconds */
dflet 0:9cb694f00b7b 171 };
dflet 0:9cb694f00b7b 172
dflet 0:9cb694f00b7b 173 typedef char *(*tFWPatches)(unsigned long *usLength);
dflet 0:9cb694f00b7b 174
dflet 0:9cb694f00b7b 175 typedef char *(*tDriverPatches)(unsigned long *usLength);
dflet 0:9cb694f00b7b 176
dflet 0:9cb694f00b7b 177 typedef char *(*tBootLoaderPatches)(unsigned long *usLength);
dflet 0:9cb694f00b7b 178
dflet 0:9cb694f00b7b 179 typedef void (*tWlanCB)(long event_type, char * data, unsigned char length );
dflet 0:9cb694f00b7b 180
dflet 0:9cb694f00b7b 181 typedef long (*tWlanReadInteruptPin)(void);
dflet 0:9cb694f00b7b 182
dflet 0:9cb694f00b7b 183 typedef void (*tWlanInterruptEnable)(void);
dflet 0:9cb694f00b7b 184
dflet 0:9cb694f00b7b 185 typedef void (*tWlanInterruptDisable)(void);
dflet 0:9cb694f00b7b 186
dflet 0:9cb694f00b7b 187 typedef void (*tWriteWlanPin)(unsigned char val);
dflet 0:9cb694f00b7b 188
dflet 0:9cb694f00b7b 189 typedef struct
dflet 0:9cb694f00b7b 190 {
dflet 0:9cb694f00b7b 191 unsigned short usRxEventOpcode;
dflet 0:9cb694f00b7b 192 unsigned short usEventOrDataReceived;
dflet 0:9cb694f00b7b 193 unsigned char *pucReceivedData;
dflet 0:9cb694f00b7b 194 unsigned char *pucTxCommandBuffer;
dflet 0:9cb694f00b7b 195
dflet 0:9cb694f00b7b 196 tFWPatches sFWPatches;
dflet 0:9cb694f00b7b 197 tDriverPatches sDriverPatches;
dflet 0:9cb694f00b7b 198 tBootLoaderPatches sBootLoaderPatches;
dflet 0:9cb694f00b7b 199 tWlanCB sWlanCB;
dflet 0:9cb694f00b7b 200 tWlanReadInteruptPin ReadWlanInterruptPin;
dflet 0:9cb694f00b7b 201 tWlanInterruptEnable WlanInterruptEnable;
dflet 0:9cb694f00b7b 202 tWlanInterruptDisable WlanInterruptDisable;
dflet 0:9cb694f00b7b 203 tWriteWlanPin WriteWlanPin;
dflet 0:9cb694f00b7b 204
dflet 0:9cb694f00b7b 205 signed long slTransmitDataError;
dflet 0:9cb694f00b7b 206 unsigned short usNumberOfFreeBuffers;
dflet 0:9cb694f00b7b 207 unsigned short usSlBufferLength;
dflet 0:9cb694f00b7b 208 unsigned short usBufferSize;
dflet 0:9cb694f00b7b 209 unsigned short usRxDataPending;
dflet 0:9cb694f00b7b 210
dflet 0:9cb694f00b7b 211 unsigned long NumberOfSentPackets;
dflet 0:9cb694f00b7b 212 unsigned long NumberOfReleasedPackets;
dflet 0:9cb694f00b7b 213
dflet 0:9cb694f00b7b 214 unsigned char InformHostOnTxComplete;
dflet 0:9cb694f00b7b 215 }sSimplLinkInformation;
dflet 0:9cb694f00b7b 216
dflet 0:9cb694f00b7b 217 extern volatile sSimplLinkInformation tSLInformation;
dflet 0:9cb694f00b7b 218
dflet 0:9cb694f00b7b 219
dflet 0:9cb694f00b7b 220 //*****************************************************************************
dflet 0:9cb694f00b7b 221 // Prototypes for the APIs.
dflet 0:9cb694f00b7b 222 //*****************************************************************************
dflet 0:9cb694f00b7b 223
dflet 0:9cb694f00b7b 224
dflet 0:9cb694f00b7b 225
dflet 0:9cb694f00b7b 226 //*****************************************************************************
dflet 0:9cb694f00b7b 227 //
dflet 0:9cb694f00b7b 228 //! SimpleLinkWaitEvent
dflet 0:9cb694f00b7b 229 //!
dflet 0:9cb694f00b7b 230 //! @param usOpcode command operation code
dflet 0:9cb694f00b7b 231 //! @param pRetParams command return parameters
dflet 0:9cb694f00b7b 232 //!
dflet 0:9cb694f00b7b 233 //! @return none
dflet 0:9cb694f00b7b 234 //!
dflet 0:9cb694f00b7b 235 //! @brief Wait for event, pass it to the hci_event_handler and
dflet 0:9cb694f00b7b 236 //! update the event opcode in a global variable.
dflet 0:9cb694f00b7b 237 //
dflet 0:9cb694f00b7b 238 //*****************************************************************************
dflet 0:9cb694f00b7b 239
dflet 0:9cb694f00b7b 240 extern void SimpleLinkWaitEvent(unsigned short usOpcode, long *pRetParams);
dflet 0:9cb694f00b7b 241
dflet 0:9cb694f00b7b 242 //*****************************************************************************
dflet 0:9cb694f00b7b 243 //
dflet 0:9cb694f00b7b 244 //! SimpleLinkWaitData
dflet 0:9cb694f00b7b 245 //!
dflet 0:9cb694f00b7b 246 //! @param pBuf data buffer
dflet 0:9cb694f00b7b 247 //! @param from from information
dflet 0:9cb694f00b7b 248 //! @param fromlen from information length
dflet 0:9cb694f00b7b 249 //!
dflet 0:9cb694f00b7b 250 //! @return none
dflet 0:9cb694f00b7b 251 //!
dflet 0:9cb694f00b7b 252 //! @brief Wait for data, pass it to the hci_event_handler
dflet 0:9cb694f00b7b 253 //! and update in a global variable that there is
dflet 0:9cb694f00b7b 254 //! data to read.
dflet 0:9cb694f00b7b 255 //
dflet 0:9cb694f00b7b 256 //*****************************************************************************
dflet 0:9cb694f00b7b 257
dflet 0:9cb694f00b7b 258 extern void SimpleLinkWaitData(unsigned char *pBuf, unsigned char *from, unsigned char *fromlen);
dflet 0:9cb694f00b7b 259
dflet 0:9cb694f00b7b 260 //*****************************************************************************
dflet 0:9cb694f00b7b 261 //
dflet 0:9cb694f00b7b 262 //! UINT32_TO_STREAM_f
dflet 0:9cb694f00b7b 263 //!
dflet 0:9cb694f00b7b 264 //! \param p pointer to the new stream
dflet 0:9cb694f00b7b 265 //! \param u32 pointer to the 32 bit
dflet 0:9cb694f00b7b 266 //!
dflet 0:9cb694f00b7b 267 //! \return pointer to the new stream
dflet 0:9cb694f00b7b 268 //!
dflet 0:9cb694f00b7b 269 //! \brief This function is used for copying 32 bit to stream
dflet 0:9cb694f00b7b 270 //! while converting to little endian format.
dflet 0:9cb694f00b7b 271 //
dflet 0:9cb694f00b7b 272 //*****************************************************************************
dflet 0:9cb694f00b7b 273
dflet 0:9cb694f00b7b 274 extern unsigned char* UINT32_TO_STREAM_f (unsigned char *p, unsigned long u32);
dflet 0:9cb694f00b7b 275
dflet 0:9cb694f00b7b 276 //*****************************************************************************
dflet 0:9cb694f00b7b 277 //
dflet 0:9cb694f00b7b 278 //! UINT16_TO_STREAM_f
dflet 0:9cb694f00b7b 279 //!
dflet 0:9cb694f00b7b 280 //! \param p pointer to the new stream
dflet 0:9cb694f00b7b 281 //! \param u32 pointer to the 16 bit
dflet 0:9cb694f00b7b 282 //!
dflet 0:9cb694f00b7b 283 //! \return pointer to the new stream
dflet 0:9cb694f00b7b 284 //!
dflet 0:9cb694f00b7b 285 //! \brief This function is used for copying 16 bit to stream
dflet 0:9cb694f00b7b 286 //! while converting to little endian format.
dflet 0:9cb694f00b7b 287 //
dflet 0:9cb694f00b7b 288 //*****************************************************************************
dflet 0:9cb694f00b7b 289
dflet 0:9cb694f00b7b 290 extern unsigned char* UINT16_TO_STREAM_f (unsigned char *p, unsigned short u16);
dflet 0:9cb694f00b7b 291
dflet 0:9cb694f00b7b 292 //*****************************************************************************
dflet 0:9cb694f00b7b 293 //
dflet 0:9cb694f00b7b 294 //! STREAM_TO_UINT16_f
dflet 0:9cb694f00b7b 295 //!
dflet 0:9cb694f00b7b 296 //! \param p pointer to the stream
dflet 0:9cb694f00b7b 297 //! \param offset offset in the stream
dflet 0:9cb694f00b7b 298 //!
dflet 0:9cb694f00b7b 299 //! \return pointer to the new 16 bit
dflet 0:9cb694f00b7b 300 //!
dflet 0:9cb694f00b7b 301 //! \brief This function is used for copying received stream to
dflet 0:9cb694f00b7b 302 //! 16 bit in little endian format.
dflet 0:9cb694f00b7b 303 //
dflet 0:9cb694f00b7b 304 //*****************************************************************************
dflet 0:9cb694f00b7b 305
dflet 0:9cb694f00b7b 306 extern unsigned short STREAM_TO_UINT16_f(char* p, unsigned short offset);
dflet 0:9cb694f00b7b 307
dflet 0:9cb694f00b7b 308 //*****************************************************************************
dflet 0:9cb694f00b7b 309 //
dflet 0:9cb694f00b7b 310 //! STREAM_TO_UINT32_f
dflet 0:9cb694f00b7b 311 //!
dflet 0:9cb694f00b7b 312 //! \param p pointer to the stream
dflet 0:9cb694f00b7b 313 //! \param offset offset in the stream
dflet 0:9cb694f00b7b 314 //!
dflet 0:9cb694f00b7b 315 //! \return pointer to the new 32 bit
dflet 0:9cb694f00b7b 316 //!
dflet 0:9cb694f00b7b 317 //! \brief This function is used for copying received stream to
dflet 0:9cb694f00b7b 318 //! 32 bit in little endian format.
dflet 0:9cb694f00b7b 319 //
dflet 0:9cb694f00b7b 320 //*****************************************************************************
dflet 0:9cb694f00b7b 321
dflet 0:9cb694f00b7b 322 extern unsigned long STREAM_TO_UINT32_f(char* p, unsigned short offset);
dflet 0:9cb694f00b7b 323
dflet 0:9cb694f00b7b 324
dflet 0:9cb694f00b7b 325 //*****************************************************************************
dflet 0:9cb694f00b7b 326 // COMMON MACROs
dflet 0:9cb694f00b7b 327 //*****************************************************************************
dflet 0:9cb694f00b7b 328
dflet 0:9cb694f00b7b 329
dflet 0:9cb694f00b7b 330 //This macro is used for copying 8 bit to stream while converting to little endian format.
dflet 0:9cb694f00b7b 331 #define UINT8_TO_STREAM(_p, _val) {*(_p)++ = (_val);}
dflet 0:9cb694f00b7b 332 //This macro is used for copying 16 bit to stream while converting to little endian format.
dflet 0:9cb694f00b7b 333 #define UINT16_TO_STREAM(_p, _u16) (UINT16_TO_STREAM_f(_p, _u16))
dflet 0:9cb694f00b7b 334 //This macro is used for copying 32 bit to stream while converting to little endian format.
dflet 0:9cb694f00b7b 335 #define UINT32_TO_STREAM(_p, _u32) (UINT32_TO_STREAM_f(_p, _u32))
dflet 0:9cb694f00b7b 336 //This macro is used for copying a specified value length bits (l) to stream while converting to little endian format.
dflet 0:9cb694f00b7b 337 #define ARRAY_TO_STREAM(p, a, l) {register short _i; for (_i = 0; _i < l; _i++) *(p)++ = ((unsigned char *) a)[_i];}
dflet 0:9cb694f00b7b 338 //This macro is used for copying received stream to 8 bit in little endian format.
dflet 0:9cb694f00b7b 339 #define STREAM_TO_UINT8(_p, _offset, _u8) {_u8 = (unsigned char)(*(_p + _offset));}
dflet 0:9cb694f00b7b 340 //This macro is used for copying received stream to 16 bit in little endian format.
dflet 0:9cb694f00b7b 341 #define STREAM_TO_UINT16(_p, _offset, _u16) {_u16 = STREAM_TO_UINT16_f(_p, _offset);}
dflet 0:9cb694f00b7b 342 //This macro is used for copying received stream to 32 bit in little endian format.
dflet 0:9cb694f00b7b 343 #define STREAM_TO_UINT32(_p, _offset, _u32) {_u32 = STREAM_TO_UINT32_f(_p, _offset);}
dflet 0:9cb694f00b7b 344 #define STREAM_TO_STREAM(p, a, l) {register short _i; for (_i = 0; _i < l; _i++) *(a)++= ((unsigned char *) p)[_i];}
dflet 0:9cb694f00b7b 345
dflet 0:9cb694f00b7b 346
dflet 0:9cb694f00b7b 347
dflet 0:9cb694f00b7b 348
dflet 0:9cb694f00b7b 349 //*****************************************************************************
dflet 0:9cb694f00b7b 350 //
dflet 0:9cb694f00b7b 351 // Mark the end of the C bindings section for C++ compilers.
dflet 0:9cb694f00b7b 352 //
dflet 0:9cb694f00b7b 353 //*****************************************************************************
dflet 0:9cb694f00b7b 354 #ifdef __cplusplus
dflet 0:9cb694f00b7b 355 }
dflet 0:9cb694f00b7b 356 #endif // __cplusplus
dflet 0:9cb694f00b7b 357
dflet 0:9cb694f00b7b 358 #endif // __COMMON_H__
dflet 0:9cb694f00b7b 359