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

Committer:
dflet
Date:
Tue Sep 15 16:45:04 2015 +0000
Revision:
22:f9b5e0b80bf2
Parent:
0:50cedd586816
Removed some debug.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:50cedd586816 1 /*
dflet 0:50cedd586816 2 * netcfg.c - CC31xx/CC32xx Host Driver Implementation
dflet 0:50cedd586816 3 *
dflet 0:50cedd586816 4 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
dflet 0:50cedd586816 5 *
dflet 0:50cedd586816 6 *
dflet 0:50cedd586816 7 * Redistribution and use in source and binary forms, with or without
dflet 0:50cedd586816 8 * modification, are permitted provided that the following conditions
dflet 0:50cedd586816 9 * are met:
dflet 0:50cedd586816 10 *
dflet 0:50cedd586816 11 * Redistributions of source code must retain the above copyright
dflet 0:50cedd586816 12 * notice, this list of conditions and the following disclaimer.
dflet 0:50cedd586816 13 *
dflet 0:50cedd586816 14 * Redistributions in binary form must reproduce the above copyright
dflet 0:50cedd586816 15 * notice, this list of conditions and the following disclaimer in the
dflet 0:50cedd586816 16 * documentation and/or other materials provided with the
dflet 0:50cedd586816 17 * distribution.
dflet 0:50cedd586816 18 *
dflet 0:50cedd586816 19 * Neither the name of Texas Instruments Incorporated nor the names of
dflet 0:50cedd586816 20 * its contributors may be used to endorse or promote products derived
dflet 0:50cedd586816 21 * from this software without specific prior written permission.
dflet 0:50cedd586816 22 *
dflet 0:50cedd586816 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 0:50cedd586816 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 0:50cedd586816 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 0:50cedd586816 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 0:50cedd586816 27 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 0:50cedd586816 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 0:50cedd586816 29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 0:50cedd586816 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 0:50cedd586816 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 0:50cedd586816 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 0:50cedd586816 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 0:50cedd586816 34 *
dflet 0:50cedd586816 35 */
dflet 0:50cedd586816 36
dflet 0:50cedd586816 37
dflet 0:50cedd586816 38
dflet 0:50cedd586816 39 /*****************************************************************************/
dflet 0:50cedd586816 40 /* Include files */
dflet 0:50cedd586816 41 /*****************************************************************************/
dflet 0:50cedd586816 42 #include "cc3100_simplelink.h"
dflet 0:50cedd586816 43 #include "cc3100_protocol.h"
dflet 0:50cedd586816 44 #include "cc3100_driver.h"
dflet 0:50cedd586816 45
dflet 0:50cedd586816 46 #include "cc3100_netcfg.h"
dflet 0:50cedd586816 47
dflet 0:50cedd586816 48 namespace mbed_cc3100 {
dflet 0:50cedd586816 49
dflet 0:50cedd586816 50 cc3100_netcfg::cc3100_netcfg(cc3100_driver &driver)
dflet 0:50cedd586816 51 : _driver(driver)
dflet 0:50cedd586816 52 {
dflet 0:50cedd586816 53
dflet 0:50cedd586816 54 }
dflet 0:50cedd586816 55
dflet 0:50cedd586816 56 cc3100_netcfg::~cc3100_netcfg()
dflet 0:50cedd586816 57 {
dflet 0:50cedd586816 58
dflet 0:50cedd586816 59 }
dflet 0:50cedd586816 60
dflet 0:50cedd586816 61 /*****************************************************************************/
dflet 0:50cedd586816 62 /* sl_NetCfgSet */
dflet 0:50cedd586816 63 /*****************************************************************************/
dflet 0:50cedd586816 64 typedef union {
dflet 0:50cedd586816 65 _NetCfgSetGet_t Cmd;
dflet 0:50cedd586816 66 _BasicResponse_t Rsp;
dflet 0:50cedd586816 67 } _SlNetCfgMsgSet_u;
dflet 0:50cedd586816 68
dflet 0:50cedd586816 69 #if _SL_INCLUDE_FUNC(sl_NetCfgSet)
dflet 0:50cedd586816 70 const _SlCmdCtrl_t _SlNetCfgSetCmdCtrl = {
dflet 0:50cedd586816 71 SL_OPCODE_DEVICE_NETCFG_SET_COMMAND,
dflet 0:50cedd586816 72 sizeof(_NetCfgSetGet_t),
dflet 0:50cedd586816 73 sizeof(_BasicResponse_t)
dflet 0:50cedd586816 74 };
dflet 0:50cedd586816 75
dflet 0:50cedd586816 76 int32_t cc3100_netcfg::sl_NetCfgSet(const uint8_t ConfigId, const uint8_t ConfigOpt, const uint8_t ConfigLen, const uint8_t *pValues)
dflet 0:50cedd586816 77 {
dflet 0:50cedd586816 78 _SlNetCfgMsgSet_u Msg;
dflet 0:50cedd586816 79 _SlCmdExt_t CmdExt;
dflet 0:50cedd586816 80
dflet 0:50cedd586816 81 _driver._SlDrvResetCmdExt(&CmdExt);
dflet 0:50cedd586816 82 CmdExt.TxPayloadLen = (ConfigLen+3) & (~3);
dflet 0:50cedd586816 83 CmdExt.pTxPayload = (uint8_t *)pValues;
dflet 0:50cedd586816 84
dflet 0:50cedd586816 85 Msg.Cmd.ConfigId = ConfigId;
dflet 0:50cedd586816 86 Msg.Cmd.ConfigLen = ConfigLen;
dflet 0:50cedd586816 87 Msg.Cmd.ConfigOpt = ConfigOpt;
dflet 0:50cedd586816 88
dflet 0:50cedd586816 89 VERIFY_RET_OK(_driver._SlDrvCmdOp((_SlCmdCtrl_t *)&_SlNetCfgSetCmdCtrl, &Msg, &CmdExt));
dflet 0:50cedd586816 90
dflet 0:50cedd586816 91 return (int16_t)Msg.Rsp.status;
dflet 0:50cedd586816 92 }
dflet 0:50cedd586816 93 #endif
dflet 0:50cedd586816 94
dflet 0:50cedd586816 95 uint32_t cc3100_netcfg::SL_IPV4_VAL(uint8_t add_3,uint8_t add_2,uint8_t add_1,uint8_t add_0){
dflet 0:50cedd586816 96
dflet 0:50cedd586816 97 return((((uint32_t)add_3 << 24) & 0xFF000000) | (((uint32_t)add_2 << 16) & 0xFF0000) | (((uint32_t)add_1 << 8) & 0xFF00) | ((uint32_t)add_0 & 0xFF) );
dflet 0:50cedd586816 98 }
dflet 0:50cedd586816 99
dflet 0:50cedd586816 100 uint8_t cc3100_netcfg::SL_IPV4_BYTE(uint32_t val,uint8_t index){
dflet 0:50cedd586816 101
dflet 0:50cedd586816 102 return( (val >>= (index*8)) & 0xFF );
dflet 0:50cedd586816 103 }
dflet 0:50cedd586816 104
dflet 0:50cedd586816 105 /*****************************************************************************/
dflet 0:50cedd586816 106 /* sl_NetCfgGet */
dflet 0:50cedd586816 107 /*****************************************************************************/
dflet 0:50cedd586816 108 typedef union {
dflet 0:50cedd586816 109 _NetCfgSetGet_t Cmd;
dflet 0:50cedd586816 110 _NetCfgSetGet_t Rsp;
dflet 0:50cedd586816 111 } _SlNetCfgMsgGet_u;
dflet 0:50cedd586816 112
dflet 0:50cedd586816 113 #if _SL_INCLUDE_FUNC(sl_NetCfgGet)
dflet 0:50cedd586816 114 const _SlCmdCtrl_t _SlNetCfgGetCmdCtrl = {
dflet 0:50cedd586816 115 SL_OPCODE_DEVICE_NETCFG_GET_COMMAND,
dflet 0:50cedd586816 116 sizeof(_NetCfgSetGet_t),
dflet 0:50cedd586816 117 sizeof(_NetCfgSetGet_t)
dflet 0:50cedd586816 118 };
dflet 0:50cedd586816 119
dflet 0:50cedd586816 120 int32_t cc3100_netcfg::sl_NetCfgGet(const uint8_t ConfigId, uint8_t *pConfigOpt,uint8_t *pConfigLen, uint8_t *pValues)
dflet 0:50cedd586816 121 {
dflet 0:50cedd586816 122 _SlNetCfgMsgGet_u Msg;
dflet 0:50cedd586816 123 _SlCmdExt_t CmdExt;
dflet 0:50cedd586816 124
dflet 0:50cedd586816 125 if (*pConfigLen == 0) {
dflet 0:50cedd586816 126 return SL_EZEROLEN;
dflet 0:50cedd586816 127 }
dflet 0:50cedd586816 128
dflet 0:50cedd586816 129 _driver._SlDrvResetCmdExt(&CmdExt);
dflet 0:50cedd586816 130 CmdExt.RxPayloadLen = *pConfigLen;
dflet 0:50cedd586816 131 CmdExt.pRxPayload = (uint8_t *)pValues;
dflet 0:50cedd586816 132
dflet 0:50cedd586816 133 Msg.Cmd.ConfigLen = *pConfigLen;
dflet 0:50cedd586816 134 Msg.Cmd.ConfigId = ConfigId;
dflet 0:50cedd586816 135
dflet 0:50cedd586816 136 if( pConfigOpt ) {
dflet 0:50cedd586816 137 Msg.Cmd.ConfigOpt = (uint16_t)*pConfigOpt;
dflet 0:50cedd586816 138 }
dflet 0:50cedd586816 139 VERIFY_RET_OK(_driver._SlDrvCmdOp((_SlCmdCtrl_t *)&_SlNetCfgGetCmdCtrl, &Msg, &CmdExt));
dflet 0:50cedd586816 140
dflet 0:50cedd586816 141 if( pConfigOpt ) {
dflet 0:50cedd586816 142 *pConfigOpt = (uint8_t)Msg.Rsp.ConfigOpt;
dflet 0:50cedd586816 143 }
dflet 0:50cedd586816 144 if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen) {
dflet 0:50cedd586816 145 *pConfigLen = (uint8_t)CmdExt.RxPayloadLen;
dflet 0:50cedd586816 146 if( SL_MAC_ADDRESS_GET == ConfigId )
dflet 0:50cedd586816 147 {
dflet 0:50cedd586816 148 return SL_RET_CODE_OK; /* sp fix */
dflet 0:50cedd586816 149 }
dflet 0:50cedd586816 150 else
dflet 0:50cedd586816 151 {
dflet 0:50cedd586816 152 return SL_ESMALLBUF;
dflet 0:50cedd586816 153 }
dflet 0:50cedd586816 154 }
dflet 0:50cedd586816 155 else
dflet 0:50cedd586816 156 {
dflet 0:50cedd586816 157 *pConfigLen = (uint8_t)CmdExt.ActualRxPayloadLen;
dflet 0:50cedd586816 158 }
dflet 0:50cedd586816 159
dflet 0:50cedd586816 160 return (int16_t)Msg.Rsp.Status;
dflet 0:50cedd586816 161 }
dflet 0:50cedd586816 162 #endif
dflet 0:50cedd586816 163
dflet 0:50cedd586816 164 }//namespace mbed_cc3100