TI's CC3100 websocket camera demo with Arducam mini ov5642 and freertos. Should work with other M3's. Work in progress test demo.

Dependencies:   mbed

simplelink/cc3100_protocol.h

Committer:
dflet
Date:
2015-09-11
Revision:
1:e448e81c416f
Parent:
0:400d8e75a8d0

File content as of revision 1:e448e81c416f:

/*
 * 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_  */