Port of TI's CC3100 Websock camera demo. Using FreeRTOS, mbedTLS, also parts of Arducam for cams ov5642 and 0v2640. Can also use MT9D111. Work in progress. Be warned some parts maybe a bit flacky. This is for Seeed Arch max only, for an M3, see the demo for CM3 using the 0v5642 aducam mini.

Dependencies:   mbed

simplelink/cc3100_protocol.h

Committer:
dflet
Date:
2015-09-15
Revision:
22:f9b5e0b80bf2
Parent:
0:50cedd586816

File content as of revision 22:f9b5e0b80bf2:

/*
 * protocol.h - CC31xx/CC32xx Host Driver Implementation
 *
 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
 *
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *
 *    Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 *    Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the
 *    distribution.
 *
 *    Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
*/

/*******************************************************************************\
*
*   FILE NAME:      protocol.h
*
*   DESCRIPTION:    Constant and data structure definitions and function
*                   prototypes for the SL protocol module, which implements
*                   processing of SimpleLink Commands.
*
*   AUTHOR:
*
\*******************************************************************************/

#ifndef SL_PROTOCOL_TYPES_H_
#define SL_PROTOCOL_TYPES_H_

namespace mbed_cc3100 {

/****************************************************************************
**
**  User I/F pools definitions
**
****************************************************************************/

/****************************************************************************
**
**  Definitions for SimpleLink Commands
**
****************************************************************************/


/* pattern for LE 8/16/32 or BE*/
#define H2N_SYNC_PATTERN     {0xBBDDEEFF,0x4321,0x34,0x12}
#define H2N_CNYS_PATTERN     {0xBBDDEEFF,0x8765,0x78,0x56}

const uint32_t H2N_DUMMY_PATTERN         =  (uint32_t)0xFFFFFFFF;
const uint32_t N2H_SYNC_PATTERN          =  (uint32_t)0xABCDDCBA;
const uint32_t SYNC_PATTERN_LEN          =  (uint32_t)sizeof(uint32_t);
const uint32_t UART_SET_MODE_MAGIC_CODE  =  (uint32_t)0xAA55AA55;
#define SPI_16BITS_BUG(pattern)     (uint32_t)((uint32_t)pattern & (uint32_t)0xFFFF7FFF)
#define SPI_8BITS_BUG(pattern)      (uint32_t)((uint32_t)pattern & (uint32_t)0xFFFFFF7F)



typedef struct {
    uint16_t Opcode;
    uint16_t Len;
} _SlGenericHeader_t;


typedef struct {
    uint32_t  Long;
    uint16_t  Short;
    uint8_t  Byte1;
    uint8_t  Byte2;
} _SlSyncPattern_t;

typedef _SlGenericHeader_t _SlCommandHeader_t;

typedef struct {
    _SlGenericHeader_t  GenHeader;
    uint8_t               TxPoolCnt;
    uint8_t               DevStatus;
    uint8_t               SocketTXFailure;
    uint8_t               SocketNonBlocking;
} _SlResponseHeader_t;

#define _SL_RESP_SPEC_HDR_SIZE (sizeof(_SlResponseHeader_t) - sizeof(_SlGenericHeader_t))
#define _SL_RESP_HDR_SIZE       sizeof(_SlResponseHeader_t)
#define _SL_CMD_HDR_SIZE        sizeof(_SlCommandHeader_t)

#define _SL_RESP_ARGS_START(_pMsg) (((_SlResponseHeader_t *)(_pMsg)) + 1)

/* Used only in NWP! */
typedef struct {
    _SlCommandHeader_t  sl_hdr;
    uint8_t   func_args_start;
} T_SCMD;


const uint8_t WLAN_CONN_STATUS_BIT  =  0x01;
const uint8_t EVENTS_Q_STATUS_BIT   =  0x02;
const uint8_t PENDING_RCV_CMD_BIT   =  0x04;
const uint8_t FW_BUSY_PACKETS_BIT   =  0x08;

const uint32_t INIT_STA_OK          =  0x11111111;
const uint32_t INIT_STA_ERR         =  0x22222222;
const uint32_t INIT_AP_OK           =  0x33333333;
const uint32_t INIT_AP_ERR          =  0x44444444;
const uint32_t INIT_P2P_OK          =  0x55555555;
const uint32_t INIT_P2P_ERR         =  0x66666666;

/****************************************************************************
**  OPCODES
****************************************************************************/
const uint16_t SL_IPV4_IPV6_OFFSET                        =     ( 9 );
const uint16_t SL_OPCODE_IPV4							  =     ( 0x0 << SL_IPV4_IPV6_OFFSET );
const uint16_t SL_OPCODE_IPV6							  =     ( 0x1 << SL_IPV4_IPV6_OFFSET );

const uint16_t SL_SYNC_ASYNC_OFFSET                       =     ( 10 );
const uint16_t SL_OPCODE_SYNC							  =     (0x1 << SL_SYNC_ASYNC_OFFSET );
const uint16_t SL_OPCODE_SILO_OFFSET                      =     ( 11 );
const uint16_t SL_OPCODE_SILO_MASK                        =     ( 0xF << SL_OPCODE_SILO_OFFSET );
const uint16_t SL_OPCODE_SILO_DEVICE                      =     ( 0x0 << SL_OPCODE_SILO_OFFSET );
const uint16_t SL_OPCODE_SILO_WLAN                        =     ( 0x1 << SL_OPCODE_SILO_OFFSET );
const uint16_t SL_OPCODE_SILO_SOCKET                      =     ( 0x2 << SL_OPCODE_SILO_OFFSET );
const uint16_t SL_OPCODE_SILO_NETAPP                      =     ( 0x3 << SL_OPCODE_SILO_OFFSET );
const uint16_t SL_OPCODE_SILO_NVMEM                       =     ( 0x4 << SL_OPCODE_SILO_OFFSET );
const uint16_t SL_OPCODE_SILO_NETCFG                      =     ( 0x5 << SL_OPCODE_SILO_OFFSET );

const uint16_t SL_FAMILY_SHIFT                            =     (0x4);
const uint16_t SL_FLAGS_MASK                              =     (0xF);

const uint16_t SL_OPCODE_DEVICE_INITCOMPLETE                         =      	0x0008;
const uint16_t SL_OPCODE_DEVICE_ABORT			                     =          0x000C;
const uint16_t SL_OPCODE_DEVICE_STOP_COMMAND                         =      	0x8473;
const uint16_t SL_OPCODE_DEVICE_STOP_RESPONSE                        =      	0x0473;
const uint16_t SL_OPCODE_DEVICE_STOP_ASYNC_RESPONSE                  =      	0x0073;
const uint16_t SL_OPCODE_DEVICE_DEVICEASYNCDUMMY                     =      	0x0063;

const uint16_t SL_OPCODE_DEVICE_VERSIONREADCOMMAND	                 =          0x8470;
const uint16_t SL_OPCODE_DEVICE_VERSIONREADRESPONSE	                 =          0x0470;
const uint16_t SL_OPCODE_DEVICE_DEVICEASYNCFATALERROR                =      	0x0078;
const uint16_t SL_OPCODE_WLAN_WLANCONNECTCOMMAND                     =      	0x8C80;
const uint16_t SL_OPCODE_WLAN_WLANCONNECTRESPONSE                    =      	0x0C80;
const uint16_t SL_OPCODE_WLAN_WLANASYNCCONNECTEDRESPONSE             =      	0x0880;
const uint16_t SL_OPCODE_WLAN_P2P_DEV_FOUND                          =          0x0830;
const uint16_t SL_OPCODE_WLAN_CONNECTION_FAILED                      =          0x0831;
const uint16_t SL_OPCODE_WLAN_P2P_NEG_REQ_RECEIVED                   =          0x0832;

const uint16_t SL_OPCODE_WLAN_WLANDISCONNECTCOMMAND                  =      	0x8C81;
const uint16_t SL_OPCODE_WLAN_WLANDISCONNECTRESPONSE                 =      	0x0C81;
const uint16_t SL_OPCODE_WLAN_WLANASYNCDISCONNECTEDRESPONSE          =      	0x0881;
const uint16_t SL_OPCODE_WLAN_WLANCONNECTEAPCOMMAND                  =      	0x8C82;
const uint16_t SL_OPCODE_WLAN_WLANCONNECTEAPCRESPONSE                =      	0x0C82;
const uint16_t SL_OPCODE_WLAN_PROFILEADDCOMMAND                      =      	0x8C83;
const uint16_t SL_OPCODE_WLAN_PROFILEADDRESPONSE                     =      	0x0C83;
const uint16_t SL_OPCODE_WLAN_PROFILEGETCOMMAND                      =      	0x8C84;
const uint16_t SL_OPCODE_WLAN_PROFILEGETRESPONSE                     =      	0x0C84;
const uint16_t SL_OPCODE_WLAN_PROFILEDELCOMMAND                      =      	0x8C85;
const uint16_t SL_OPCODE_WLAN_PROFILEDELRESPONSE                     =      	0x0C85;
const uint16_t SL_OPCODE_WLAN_POLICYSETCOMMAND                       =      	0x8C86;
const uint16_t SL_OPCODE_WLAN_POLICYSETRESPONSE                      =      	0x0C86;
const uint16_t SL_OPCODE_WLAN_POLICYGETCOMMAND                       =      	0x8C87;
const uint16_t SL_OPCODE_WLAN_POLICYGETRESPONSE                      =      	0x0C87;
const uint16_t SL_OPCODE_WLAN_FILTERADD                              =      	0x8C88;
const uint16_t SL_OPCODE_WLAN_FILTERADDRESPONSE                      =      	0x0C88;
const uint16_t SL_OPCODE_WLAN_FILTERGET                              =      	0x8C89;
const uint16_t SL_OPCODE_WLAN_FILTERGETRESPONSE                      =      	0x0C89;
const uint16_t SL_OPCODE_WLAN_FILTERDELETE                           =      	0x8C8A;
const uint16_t SL_OPCODE_WLAN_FILTERDELETERESPOSNE                   =      	0x0C8A;
const uint16_t SL_OPCODE_WLAN_WLANGETSTATUSCOMMAND                   =      	0x8C8F;
const uint16_t SL_OPCODE_WLAN_WLANGETSTATUSRESPONSE                  =      	0x0C8F;
const uint16_t SL_OPCODE_WLAN_STARTTXCONTINUESCOMMAND                =      	0x8CAA;
const uint16_t SL_OPCODE_WLAN_STARTTXCONTINUESRESPONSE               =      	0x0CAA;
const uint16_t SL_OPCODE_WLAN_STOPTXCONTINUESCOMMAND                 =      	0x8CAB;
const uint16_t SL_OPCODE_WLAN_STOPTXCONTINUESRESPONSE                =      	0x0CAB;
const uint16_t SL_OPCODE_WLAN_STARTRXSTATCOMMAND                     =      	0x8CAC;
const uint16_t SL_OPCODE_WLAN_STARTRXSTATRESPONSE                    =      	0x0CAC;
const uint16_t SL_OPCODE_WLAN_STOPRXSTATCOMMAND                      =      	0x8CAD;
const uint16_t SL_OPCODE_WLAN_STOPRXSTATRESPONSE                     =      	0x0CAD;
const uint16_t SL_OPCODE_WLAN_GETRXSTATCOMMAND                       =      	0x8CAF;
const uint16_t SL_OPCODE_WLAN_GETRXSTATRESPONSE                      =      	0x0CAF;
const uint16_t SL_OPCODE_WLAN_POLICYSETCOMMANDNEW                    =      	0x8CB0;
const uint16_t SL_OPCODE_WLAN_POLICYSETRESPONSENEW                   =      	0x0CB0;
const uint16_t SL_OPCODE_WLAN_POLICYGETCOMMANDNEW                    =      	0x8CB1;
const uint16_t SL_OPCODE_WLAN_POLICYGETRESPONSENEW                   =      	0x0CB1;

const uint16_t SL_OPCODE_WLAN_SMART_CONFIG_START_COMMAND             =      	0x8CB2;
const uint16_t SL_OPCODE_WLAN_SMART_CONFIG_START_RESPONSE            =      	0x0CB2;
const uint16_t SL_OPCODE_WLAN_SMART_CONFIG_START_ASYNC_RESPONSE      =      	0x08B2;
const uint16_t SL_OPCODE_WLAN_SMART_CONFIG_STOP_COMMAND              =      	0x8CB3;
const uint16_t SL_OPCODE_WLAN_SMART_CONFIG_STOP_RESPONSE             =      	0x0CB3;
const uint16_t SL_OPCODE_WLAN_SMART_CONFIG_STOP_ASYNC_RESPONSE       =      	0x08B3;
const uint16_t SL_OPCODE_WLAN_SET_MODE                               =          0x8CB4;
const uint16_t SL_OPCODE_WLAN_SET_MODE_RESPONSE                      =          0x0CB4;
const uint16_t SL_OPCODE_WLAN_CFG_SET                                =          0x8CB5;
const uint16_t SL_OPCODE_WLAN_CFG_SET_RESPONSE                       =          0x0CB5;
const uint16_t SL_OPCODE_WLAN_CFG_GET                                =          0x8CB6;
const uint16_t SL_OPCODE_WLAN_CFG_GET_RESPONSE                       =          0x0CB6;
const uint16_t SL_OPCODE_WLAN_STA_CONNECTED                          =      	0x082E;
const uint16_t SL_OPCODE_WLAN_STA_DISCONNECTED                       =      	0x082F;
const uint16_t SL_OPCODE_WLAN_EAP_PROFILEADDCOMMAND                  =          0x8C67;
const uint16_t SL_OPCODE_WLAN_EAP_PROFILEADDCOMMAND_RESPONSE         =          0x0C67;

const uint16_t SL_OPCODE_SOCKET_SOCKET                               =      	0x9401;
const uint16_t SL_OPCODE_SOCKET_SOCKETRESPONSE                       =      	0x1401;
const uint16_t SL_OPCODE_SOCKET_CLOSE                                =      	0x9402;
const uint16_t SL_OPCODE_SOCKET_CLOSERESPONSE                        =      	0x1402;
const uint16_t SL_OPCODE_SOCKET_ACCEPT                               =      	0x9403;
const uint16_t SL_OPCODE_SOCKET_ACCEPTRESPONSE                       =      	0x1403;
const uint16_t SL_OPCODE_SOCKET_ACCEPTASYNCRESPONSE                  =      	0x1003;
const uint16_t SL_OPCODE_SOCKET_ACCEPTASYNCRESPONSE_V6               =      	0x1203;
const uint16_t SL_OPCODE_SOCKET_BIND                                 =      	0x9404;
const uint16_t SL_OPCODE_SOCKET_BIND_V6                              =      	0x9604;
const uint16_t SL_OPCODE_SOCKET_BINDRESPONSE                         =      	0x1404;
const uint16_t SL_OPCODE_SOCKET_LISTEN                               =      	0x9405;
const uint16_t SL_OPCODE_SOCKET_LISTENRESPONSE                       =      	0x1405;
const uint16_t SL_OPCODE_SOCKET_CONNECT                              =      	0x9406;
const uint16_t SL_OPCODE_SOCKET_CONNECT_V6                           =      	0x9606;
const uint16_t SL_OPCODE_SOCKET_CONNECTRESPONSE                      =      	0x1406;
const uint16_t SL_OPCODE_SOCKET_CONNECTASYNCRESPONSE                 =      	0x1006;
const uint16_t SL_OPCODE_SOCKET_SELECT                               =      	0x9407;
const uint16_t SL_OPCODE_SOCKET_SELECTRESPONSE                       =      	0x1407;
const uint16_t SL_OPCODE_SOCKET_SELECTASYNCRESPONSE                  =      	0x1007;
const uint16_t SL_OPCODE_SOCKET_SETSOCKOPT                           =      	0x9408;
const uint16_t SL_OPCODE_SOCKET_SETSOCKOPTRESPONSE                   =      	0x1408;
const uint16_t SL_OPCODE_SOCKET_GETSOCKOPT                           =      	0x9409;
const uint16_t SL_OPCODE_SOCKET_GETSOCKOPTRESPONSE                   =      	0x1409;
const uint16_t SL_OPCODE_SOCKET_RECV                                 =      	0x940A;
const uint16_t SL_OPCODE_SOCKET_RECVASYNCRESPONSE                    =      	0x100A;
const uint16_t SL_OPCODE_SOCKET_RECVFROM                             =      	0x940B;
const uint16_t SL_OPCODE_SOCKET_RECVFROMASYNCRESPONSE                =      	0x100B;
const uint16_t SL_OPCODE_SOCKET_RECVFROMASYNCRESPONSE_V6             =      	0x120B;
const uint16_t SL_OPCODE_SOCKET_SEND                                 =      	0x940C;
const uint16_t SL_OPCODE_SOCKET_SENDTO                               =      	0x940D;
const uint16_t SL_OPCODE_SOCKET_SENDTO_V6                            =      	0x960D;
const uint16_t SL_OPCODE_SOCKET_TXFAILEDASYNCRESPONSE                =      	0x100E;
const uint16_t SL_OPCODE_SOCKET_SOCKETASYNCEVENT                     =          0x100F;
const uint16_t SL_OPCODE_NETAPP_START_COMMAND                        =          0x9C0A;
const uint16_t SL_OPCODE_NETAPP_START_RESPONSE                       =         	0x1C0A;
const uint16_t SL_OPCODE_NETAPP_NETAPPSTARTRESPONSE                  =      	0x1C0A;
const uint16_t SL_OPCODE_NETAPP_STOP_COMMAND                         =      	0x9C61;
const uint16_t SL_OPCODE_NETAPP_STOP_RESPONSE                        =      	0x1C61;
const uint16_t SL_OPCODE_NETAPP_NETAPPSET                            =	        0x9C0B;
const uint16_t SL_OPCODE_NETAPP_NETAPPSETRESPONSE                    =	        0x1C0B;
const uint16_t SL_OPCODE_NETAPP_NETAPPGET                            =	        0x9C27;
const uint16_t SL_OPCODE_NETAPP_NETAPPGETRESPONSE                    =	        0x1C27;
const uint16_t SL_OPCODE_NETAPP_DNSGETHOSTBYNAME                     =      	0x9C20;
const uint16_t SL_OPCODE_NETAPP_DNSGETHOSTBYNAMERESPONSE             =      	0x1C20;
const uint16_t SL_OPCODE_NETAPP_DNSGETHOSTBYNAMEASYNCRESPONSE        =      	0x1820;
const uint16_t SL_OPCODE_NETAPP_DNSGETHOSTBYNAMEASYNCRESPONSE_V6     =      	0x1A20;
const uint16_t SL_OPCODE_NETAPP_NETAPP_MDNS_LOOKUP_SERVICE           =          0x9C71;
const uint16_t SL_OPCODE_NETAPP_NETAPP_MDNS_LOOKUP_SERVICE_RESPONSE  =          0x1C72;
const uint16_t SL_OPCODE_NETAPP_MDNSREGISTERSERVICE                  =          0x9C34;
const uint16_t SL_OPCODE_NETAPP_MDNSREGISTERSERVICERESPONSE          =          0x1C34;
const uint16_t SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICE                 =          0x9C35;
const uint16_t SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICERESPONSE         =          0x1C35;
const uint16_t SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICEASYNCRESPONSE    =          0x1835;
const uint16_t SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICEASYNCRESPONSE_V6 =          0x1A35;
const uint16_t SL_OPCODE_NETAPP_DNSGETHOSTBYADDR                     =      	0x9C26;
const uint16_t SL_OPCODE_NETAPP_DNSGETHOSTBYADDR_V6                  =      	0x9E26;
const uint16_t SL_OPCODE_NETAPP_DNSGETHOSTBYADDRRESPONSE             =      	0x1C26;
const uint16_t SL_OPCODE_NETAPP_DNSGETHOSTBYADDRASYNCRESPONSE        =      	0x1826;
const uint16_t SL_OPCODE_NETAPP_PINGSTART                            =      	0x9C21;
const uint16_t SL_OPCODE_NETAPP_PINGSTART_V6                         =      	0x9E21;
const uint16_t SL_OPCODE_NETAPP_PINGSTARTRESPONSE                    =      	0x1C21;
const uint16_t SL_OPCODE_NETAPP_PINGREPORTREQUEST                    =      	0x9C22;
const uint16_t SL_OPCODE_NETAPP_PINGREPORTREQUESTRESPONSE            =      	0x1822;
const uint16_t SL_OPCODE_NETAPP_PINGSTOP                             =      	0x9C23;
const uint16_t SL_OPCODE_NETAPP_PINGSTOPRESPONSE                     =      	0x1C23;
const uint16_t SL_OPCODE_NETAPP_ARPFLUSH                             =      	0x9C24;
const uint16_t SL_OPCODE_NETAPP_ARPFLUSHRESPONSE                     =      	0x1C24;
const uint16_t SL_OPCODE_NETAPP_IPACQUIRED                           =      	0x1825;
const uint16_t SL_OPCODE_NETAPP_IPV4_LOST	                         =        	0x1832;
const uint16_t SL_OPCODE_NETAPP_DHCP_IPV4_ACQUIRE_TIMEOUT            =      	0x1833;
const uint16_t SL_OPCODE_NETAPP_IPACQUIRED_V6                        =      	0x1A25;
const uint16_t SL_OPCODE_NETAPP_IPERFSTARTCOMMAND                    =      	0x9C28;
const uint16_t SL_OPCODE_NETAPP_IPERFSTARTRESPONSE                   =      	0x1C28;
const uint16_t SL_OPCODE_NETAPP_IPERFSTOPCOMMAND                     =      	0x9C29;
const uint16_t SL_OPCODE_NETAPP_IPERFSTOPRESPONSE                    =      	0x1C29;
const uint16_t SL_OPCODE_NETAPP_CTESTSTARTCOMMAND                    =      	0x9C2A;
const uint16_t SL_OPCODE_NETAPP_CTESTSTARTRESPONSE                   =      	0x1C2A;
const uint16_t SL_OPCODE_NETAPP_CTESTASYNCRESPONSE                   =      	0x182A;
const uint16_t SL_OPCODE_NETAPP_CTESTSTOPCOMMAND                     =      	0x9C2B;
const uint16_t SL_OPCODE_NETAPP_CTESTSTOPRESPONSE                    =      	0x1C2B;
const uint16_t SL_OPCODE_NETAPP_IP_LEASED                            =      	0x182C;
const uint16_t SL_OPCODE_NETAPP_IP_RELEASED                          =      	0x182D;
const uint16_t SL_OPCODE_NETAPP_HTTPGETTOKENVALUE                    =      	0x182E;
const uint16_t SL_OPCODE_NETAPP_HTTPSENDTOKENVALUE                   =      	0x9C2F;
const uint16_t SL_OPCODE_NETAPP_HTTPPOSTTOKENVALUE                   =      	0x1830;
const uint16_t SL_OPCODE_NVMEM_FILEOPEN                              =      	0xA43C;
const uint16_t SL_OPCODE_NVMEM_FILEOPENRESPONSE                      =       	0x243C;
const uint16_t SL_OPCODE_NVMEM_FILECLOSE                             =       	0xA43D;
const uint16_t SL_OPCODE_NVMEM_FILECLOSERESPONSE                     =      	0x243D;
const uint16_t SL_OPCODE_NVMEM_FILEREADCOMMAND                       =       	0xA440;
const uint16_t SL_OPCODE_NVMEM_FILEREADRESPONSE                      =      	0x2440;
const uint16_t SL_OPCODE_NVMEM_FILEWRITECOMMAND                      =      	0xA441;
const uint16_t SL_OPCODE_NVMEM_FILEWRITERESPONSE                     =      	0x2441;
const uint16_t SL_OPCODE_NVMEM_FILEGETINFOCOMMAND                    =      	0xA442;
const uint16_t SL_OPCODE_NVMEM_FILEGETINFORESPONSE                   =      	0x2442;
const uint16_t SL_OPCODE_NVMEM_FILEDELCOMMAND                        =      	0xA443;
const uint16_t SL_OPCODE_NVMEM_FILEDELRESPONSE                       =      	0x2443;
const uint16_t SL_OPCODE_NVMEM_NVMEMFORMATCOMMAND                    =      	0xA444;
const uint16_t SL_OPCODE_NVMEM_NVMEMFORMATRESPONSE                   =      	0x2444;

const uint16_t SL_OPCODE_DEVICE_SETDEBUGLEVELCOMMAND                 =      	0x846A;
const uint16_t SL_OPCODE_DEVICE_SETDEBUGLEVELRESPONSE                =      	0x046A;

const uint16_t SL_OPCODE_DEVICE_NETCFG_SET_COMMAND                 	 =          0x8432;
const uint16_t SL_OPCODE_DEVICE_NETCFG_SET_RESPONSE                	 =          0x0432;
const uint16_t SL_OPCODE_DEVICE_NETCFG_GET_COMMAND                 	 =          0x8433;
const uint16_t SL_OPCODE_DEVICE_NETCFG_GET_RESPONSE                	 =          0x0433;
/*  */
const uint16_t SL_OPCODE_DEVICE_SETUARTMODECOMMAND                   =      	0x846B;
const uint16_t SL_OPCODE_DEVICE_SETUARTMODERESPONSE                  =      	0x046B;
const uint16_t SL_OPCODE_DEVICE_SSISIZESETCOMMAND	                 =          0x846B;
const uint16_t SL_OPCODE_DEVICE_SSISIZESETRESPONSE	                 =          0x046B;

/*  */
const uint16_t SL_OPCODE_DEVICE_EVENTMASKSET                         =      	0x8464;
const uint16_t SL_OPCODE_DEVICE_EVENTMASKSETRESPONSE                 =      	0x0464;
const uint16_t SL_OPCODE_DEVICE_EVENTMASKGET                         =      	0x8465;
const uint16_t SL_OPCODE_DEVICE_EVENTMASKGETRESPONSE                 =      	0x0465;

const uint16_t SL_OPCODE_DEVICE_DEVICEGET                            =      	0x8466;
const uint16_t SL_OPCODE_DEVICE_DEVICEGETRESPONSE                    =          0x0466;
const uint16_t SL_OPCODE_DEVICE_DEVICESET							 =			0x84B7;
const uint16_t SL_OPCODE_DEVICE_DEVICESETRESPONSE					 =			0x04B7;

const uint16_t SL_OPCODE_WLAN_SCANRESULTSGETCOMMAND                  =      	0x8C8C;
const uint16_t SL_OPCODE_WLAN_SCANRESULTSGETRESPONSE                 =      	0x0C8C;
const uint16_t SL_OPCODE_WLAN_SMARTCONFIGOPTSET                      =      	0x8C8D;
const uint16_t SL_OPCODE_WLAN_SMARTCONFIGOPTSETRESPONSE              =      	0x0C8D;
const uint16_t SL_OPCODE_WLAN_SMARTCONFIGOPTGET                      =      	0x8C8E;
const uint16_t SL_OPCODE_WLAN_SMARTCONFIGOPTGETRESPONSE              =      	0x0C8E;


/* Rx Filters opcodes */
const uint16_t SL_OPCODE_WLAN_WLANRXFILTERADDCOMMAND                 =          0x8C6C;
const uint16_t SL_OPCODE_WLAN_WLANRXFILTERADDRESPONSE                =          0x0C6C;
const uint16_t SL_OPCODE_WLAN_WLANRXFILTERSETCOMMAND                 =          0x8C6D;
const uint16_t SL_OPCODE_WLAN_WLANRXFILTERSETRESPONSE                =          0x0C6D;
const uint16_t SL_OPCODE_WLAN_WLANRXFILTERGETSTATISTICSINFOCOMMAND   =          0x8C6E;
const uint16_t SL_OPCODE_WLAN_WLANRXFILTERGETSTATISTICSINFORESPONSE  =          0x0C6E;
const uint16_t SL_OPCODE_WLAN_WLANRXFILTERGETCOMMAND                 =          0x8C6F;
const uint16_t SL_OPCODE_WLAN_WLANRXFILTERGETRESPONSE                =          0x0C6F;
const uint16_t SL_OPCODE_WLAN_WLANRXFILTERGETINFO                    =          0x8C70;
const uint16_t SL_OPCODE_WLAN_WLANRXFILTERGETINFORESPONSE            =          0x0C70;


/******************************************************************************************/
/*   Device structs  */
/******************************************************************************************/
typedef uint32_t InitStatus_t;


typedef struct {
    int32_t Status;
} InitComplete_t;

typedef struct {
    int16_t status;
    uint16_t padding;

} _BasicResponse_t;

typedef struct {
    uint16_t Timeout;
    uint16_t padding;
} _DevStopCommand_t;

typedef struct {
    uint32_t group;
    uint32_t mask;
} _DevMaskEventSetCommand_t;

typedef _BasicResponse_t _DevMaskEventSetResponse_t;


typedef struct {
    uint32_t group;
} _DevMaskEventGetCommand_t;


typedef struct {
    uint32_t group;
    uint32_t mask;
} _DevMaskEventGetResponse_t;


typedef struct {
    uint32_t group;
} _DevStatusGetCommand_t;


typedef struct {
    uint32_t group;
    uint32_t status;
} _DevStatusGetResponse_t;

typedef struct {
    uint32_t  ChipId;
    uint32_t  FwVersion[4];
    uint8_t   PhyVersion[4];
} _Device_VersionReadResponsePart_t;

typedef struct {
    _Device_VersionReadResponsePart_t part;
    uint32_t                            NwpVersion[4];
    uint16_t                            RomVersion;
    uint16_t                            Padding;
} _Device_VersionReadResponseFull_t;


typedef struct {
    uint32_t BaudRate;
    uint8_t  FlowControlEnable;
} _DevUartSetModeCommand_t;

typedef _BasicResponse_t _DevUartSetModeResponse_t;

/******************************************************/

typedef struct {
    uint8_t SsiSizeInBytes;
    uint8_t Padding[3];
} _StellarisSsiSizeSet_t;

/*****************************************************************************************/
/*   WLAN structs */
/*****************************************************************************************/
#define MAXIMAL_PASSWORD_LENGTH					(64)

typedef struct {
    uint8_t	SecType;
    uint8_t	SsidLen;
    uint8_t	Bssid[6];
    uint8_t	PasswordLen;
} _WlanConnectCommon_t;

#define SSID_STRING(pCmd)       (int8_t *)((_WlanConnectCommon_t *)(pCmd) + 1)
#define PASSWORD_STRING(pCmd)   (SSID_STRING(pCmd) + ((_WlanConnectCommon_t *)(pCmd))->SsidLen)

typedef struct {
    _WlanConnectCommon_t            Common;
    uint8_t							UserLen;
    uint8_t							AnonUserLen;
    uint8_t   						CertIndex;
    uint32_t  						EapBitmask;
} _WlanConnectEapCommand_t;

#define EAP_SSID_STRING(pCmd)       (int8_t *)((_WlanConnectEapCommand_t *)(pCmd) + 1)
#define EAP_PASSWORD_STRING(pCmd)   (EAP_SSID_STRING(pCmd) + ((_WlanConnectEapCommand_t *)(pCmd))->Common.SsidLen)
#define EAP_USER_STRING(pCmd)       (EAP_PASSWORD_STRING(pCmd) + ((_WlanConnectEapCommand_t *)(pCmd))->Common.PasswordLen)
#define EAP_ANON_USER_STRING(pCmd)  (EAP_USER_STRING(pCmd) + ((_WlanConnectEapCommand_t *)(pCmd))->UserLen)


typedef struct {
    uint8_t	PolicyType;
    uint8_t       Padding;
    uint8_t	PolicyOption;
    uint8_t	PolicyOptionLen;
} _WlanPoliciySetGet_t;


typedef struct {
    uint32_t  minDwellTime;
    uint32_t  maxDwellTime;
    uint32_t  numProbeResponse;
    uint32_t  G_Channels_mask;
    int32_t   rssiThershold;
    int32_t   snrThershold;
    int32_t   defaultTXPower;
    uint16_t  intervalList[16];
} _WlanScanParamSetCommand_t;


typedef struct {
    int8_t	SecType;
    uint8_t	SsidLen;
    uint8_t	Priority;
    uint8_t	Bssid[6];
    uint8_t   PasswordLen;
    uint8_t   WepKeyId;
} _WlanAddGetProfile_t;


typedef struct {
    _WlanAddGetProfile_t              Common;
    uint8_t                             UserLen;
    uint8_t                             AnonUserLen;
    uint8_t                             CertIndex;
    uint16_t                            padding;
    uint32_t                            EapBitmask;
} _WlanAddGetEapProfile_t;

#define PROFILE_SSID_STRING(pCmd)       ((int8_t *)((_WlanAddGetProfile_t *)(pCmd) + 1))
#define PROFILE_PASSWORD_STRING(pCmd)   (PROFILE_SSID_STRING(pCmd) + ((_WlanAddGetProfile_t *)(pCmd))->SsidLen)

#define EAP_PROFILE_SSID_STRING(pCmd)       (int8_t *)((_WlanAddGetEapProfile_t *)(pCmd) + 1)
#define EAP_PROFILE_PASSWORD_STRING(pCmd)   (EAP_PROFILE_SSID_STRING(pCmd) + ((_WlanAddGetEapProfile_t *)(pCmd))->Common.SsidLen)
#define EAP_PROFILE_USER_STRING(pCmd)       (EAP_PROFILE_PASSWORD_STRING(pCmd) + ((_WlanAddGetEapProfile_t *)(pCmd))->Common.PasswordLen)
#define EAP_PROFILE_ANON_USER_STRING(pCmd)  (EAP_PROFILE_USER_STRING(pCmd) + ((_WlanAddGetEapProfile_t *)(pCmd))->UserLen)

typedef struct {
    uint8_t	index;
    uint8_t	padding[3];
} _WlanProfileDelGetCommand_t;

typedef _BasicResponse_t _WlanGetNetworkListResponse_t;

typedef struct {
    uint8_t 	index;
    uint8_t 	count;
    int8_t 	padding[2];
} _WlanGetNetworkListCommand_t;




typedef struct {
    uint32_t  						groupIdBitmask;
    uint8_t                           cipher;
    uint8_t                           publicKeyLen;
    uint8_t                           group1KeyLen;
    uint8_t                           group2KeyLen;
} _WlanSmartConfigStartCommand_t;

#define SMART_CONFIG_START_PUBLIC_KEY_STRING(pCmd)       ((int8_t *)((_WlanSmartConfigStartCommand_t *)(pCmd) + 1))
#define SMART_CONFIG_START_GROUP1_KEY_STRING(pCmd)       ((int8_t *) (SMART_CONFIG_START_PUBLIC_KEY_STRING(pCmd) + ((_WlanSmartConfigStartCommand_t *)(pCmd))->publicKeyLen))
#define SMART_CONFIG_START_GROUP2_KEY_STRING(pCmd)       ((int8_t *) (SMART_CONFIG_START_GROUP1_KEY_STRING(pCmd) + ((_WlanSmartConfigStartCommand_t *)(pCmd))->group1KeyLen))

typedef	struct {
    uint8_t	mode;
    uint8_t   padding[3];
} _WlanSetMode_t;




typedef struct {
    uint16_t  Status;
    uint16_t  ConfigId;
    uint16_t  ConfigOpt;
    uint16_t  ConfigLen;
} _WlanCfgSetGet_t;


//wlan_rx_filters moved

typedef struct {
    uint16_t status;
    uint8_t  WlanRole;     /* 0 = station, 2 = AP */
    uint8_t  Ipv6Enabled;
    uint8_t  Ipv6DhcpEnabled;

    uint32_t ipV6Global[4];
    uint32_t ipV6Local[4];
    uint32_t ipV6DnsServer[4];
    uint8_t  Ipv6DhcpState;

} _NetappIpV6configRetArgs_t;


typedef struct {
    uint8_t  ipV4[4];
    uint8_t  ipV4Mask[4];
    uint8_t  ipV4Gateway[4];
    uint8_t  ipV4DnsServer[4];
    uint8_t  ipV4Start[4];
    uint8_t  ipV4End[4];
} _NetCfgIpV4AP_Args_t;



typedef struct {
    uint16_t status;
    uint8_t  MacAddr[6];
} _MAC_Address_SetGet_t;


typedef struct {
    uint16_t  Status;
    uint16_t	ConfigId;
    uint16_t	ConfigOpt;
    uint16_t	ConfigLen;
} _NetCfgSetGet_t;

typedef struct {
    uint16_t  Status;
    uint16_t  DeviceSetId;
    uint16_t  Option;
    uint16_t  ConfigLen;
} _DeviceSetGet_t;




/******************************************************************************************/
/*   Socket structs  */
/******************************************************************************************/

typedef struct {
    uint8_t Domain;
    uint8_t Type;
    uint8_t Protocol;
    uint8_t Padding;
} _SocketCommand_t;


typedef struct {
    int16_t statusOrLen;
    uint8_t  sd;
    uint8_t  padding;
} _SocketResponse_t;

typedef struct {
    uint8_t sd;
    uint8_t family;
    uint8_t padding1;
    uint8_t padding2;
} _AcceptCommand_t;


typedef struct {
    int16_t statusOrLen;
    uint8_t sd;
    uint8_t family;
    uint16_t port;
    uint16_t paddingOrAddr;
    uint32_t address;
} _SocketAddrAsyncIPv4Response_t;

typedef struct {
    int16_t statusOrLen;
    uint8_t sd;
    uint8_t family;
    uint16_t port;
    uint8_t address[6];
} _SocketAddrAsyncIPv6EUI48Response_t;
typedef struct {
    int16_t statusOrLen;
    uint8_t sd;
    uint8_t family;
    uint16_t port;
    uint16_t paddingOrAddr;
    uint32_t address[4];
} _SocketAddrAsyncIPv6Response_t;


typedef struct {
    int16_t lenOrPadding;
    uint8_t sd;
    uint8_t FamilyAndFlags;
    uint16_t port;
    uint16_t paddingOrAddr;
    uint32_t address;
} _SocketAddrIPv4Command_t;

typedef struct {
    int16_t lenOrPadding;
    uint8_t sd;
    uint8_t FamilyAndFlags;
    uint16_t port;
    uint8_t address[6];
} _SocketAddrIPv6EUI48Command_t;
typedef struct {
    int16_t lenOrPadding;
    uint8_t sd;
    uint8_t FamilyAndFlags;
    uint16_t port;
    uint16_t paddingOrAddr;
    uint32_t address[4];
} _SocketAddrIPv6Command_t;

typedef union {
    _SocketAddrIPv4Command_t IpV4;
    _SocketAddrIPv6EUI48Command_t IpV6EUI48;
#ifdef SL_SUPPORT_IPV6
    _SocketAddrIPv6Command_t IpV6;
#endif
} _SocketAddrCommand_u;

typedef union {
    _SocketAddrAsyncIPv4Response_t IpV4;
    _SocketAddrAsyncIPv6EUI48Response_t IpV6EUI48;
#ifdef SL_SUPPORT_IPV6
    _SocketAddrAsyncIPv6Response_t IpV6;
#endif
} _SocketAddrResponse_u;

typedef struct {
    uint8_t sd;
    uint8_t backlog;
    uint8_t padding1;
    uint8_t padding2;
} _ListenCommand_t;

typedef struct {
    uint8_t sd;
    uint8_t padding0;
    uint8_t padding1;
    uint8_t padding2;
} _CloseCommand_t;


typedef struct {
    uint8_t nfds;
    uint8_t readFdsCount;
    uint8_t writeFdsCount;
    uint8_t padding;
    uint16_t readFds;
    uint16_t writeFds;
    uint16_t tv_usec;
    uint16_t tv_sec;
} _SelectCommand_t;


typedef struct {
    uint16_t status;
    uint8_t readFdsCount;
    uint8_t writeFdsCount;
    uint16_t readFds;
    uint16_t writeFds;
} _SelectAsyncResponse_t;

typedef struct {
    uint8_t sd;
    uint8_t level;
    uint8_t optionName;
    uint8_t optionLen;
} _setSockOptCommand_t;

typedef struct {
    uint8_t sd;
    uint8_t level;
    uint8_t optionName;
    uint8_t optionLen;
} _getSockOptCommand_t;

typedef struct {
    int16_t status;
    uint8_t sd;
    uint8_t optionLen;
} _getSockOptResponse_t;


typedef struct {
    uint16_t StatusOrLen;
    uint8_t  sd;
    uint8_t FamilyAndFlags;
} _sendRecvCommand_t;

//netapp structs moved

/*****************************************************************************************
*   FS structs
******************************************************************************************/

typedef struct {
    uint32_t FileHandle;
    uint32_t Offset;
    uint16_t Len;
    uint16_t Padding;
} _FsReadCommand_t;

typedef struct {
    uint32_t Mode;
    uint32_t Token;
} _FsOpenCommand_t;

typedef struct {
    uint32_t FileHandle;
    uint32_t Token;
} _FsOpenResponse_t;


typedef struct {
    uint32_t FileHandle;
    uint32_t CertificFileNameLength;
    uint32_t SignatureLen;
} _FsCloseCommand_t;


typedef _BasicResponse_t _FsReadResponse_t;
typedef _BasicResponse_t _FsDeleteResponse_t;
typedef _BasicResponse_t _FsCloseResponse_t;

typedef struct {
    uint16_t Status;
    uint16_t flags;
    uint32_t FileLen;
    uint32_t AllocatedLen;
    uint32_t Token[4];
} _FsGetInfoResponse_t;

typedef struct {
    uint8_t DeviceID;
    uint8_t Padding[3];
} _FsFormatCommand_t;

typedef _BasicResponse_t _FsFormatResponse_t;

typedef struct {
    uint32_t Token;
} _FsDeleteCommand_t;

typedef   _FsDeleteCommand_t  _FsGetInfoCommand_t;

typedef struct {
    uint32_t FileHandle;
    uint32_t Offset;
    uint16_t Len;
    uint16_t Padding;
} _FsWriteCommand_t;

typedef _BasicResponse_t _FsWriteResponse_t;


/* TODO: Set MAx Async Payload length depending on flavor (Tiny, Small, etc.) */

#ifdef SL_TINY_EXT
#define SL_ASYNC_MAX_PAYLOAD_LEN        120  /* size must be aligned to 4 */
#else
#define SL_ASYNC_MAX_PAYLOAD_LEN        160 /* size must be aligned to 4 */
#endif
#define SL_ASYNC_MAX_MSG_LEN            (_SL_RESP_HDR_SIZE + SL_ASYNC_MAX_PAYLOAD_LEN)

#define RECV_ARGS_SIZE                  (sizeof(_SocketResponse_t))
#define RECVFROM_IPV4_ARGS_SIZE         (sizeof(_SocketAddrAsyncIPv4Response_t))
#define RECVFROM_IPV6_ARGS_SIZE         (sizeof(_SocketAddrAsyncIPv6Response_t))

#define SL_IPV4_ADDRESS_SIZE 			(sizeof(uint32_t))
#define SL_IPV6_ADDRESS_SIZE 			(4 * sizeof(uint32_t))

}//namespace mbed_cc3100

#endif /*  _SL_PROTOCOL_TYPES_H_  */