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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers cc3100_netcfg.cpp Source File

cc3100_netcfg.cpp

00001 /*
00002 * netcfg.c - CC31xx/CC32xx Host Driver Implementation
00003 *
00004 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
00005 *
00006 *
00007 *  Redistribution and use in source and binary forms, with or without
00008 *  modification, are permitted provided that the following conditions
00009 *  are met:
00010 *
00011 *    Redistributions of source code must retain the above copyright
00012 *    notice, this list of conditions and the following disclaimer.
00013 *
00014 *    Redistributions in binary form must reproduce the above copyright
00015 *    notice, this list of conditions and the following disclaimer in the
00016 *    documentation and/or other materials provided with the
00017 *    distribution.
00018 *
00019 *    Neither the name of Texas Instruments Incorporated nor the names of
00020 *    its contributors may be used to endorse or promote products derived
00021 *    from this software without specific prior written permission.
00022 *
00023 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00024 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00025 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00026 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00027 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00028 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00029 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00030 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00031 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00032 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00033 *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00034 *
00035 */
00036 
00037 
00038 
00039 /*****************************************************************************/
00040 /* Include files                                                             */
00041 /*****************************************************************************/
00042 #include "cc3100_simplelink.h"
00043 #include "cc3100_protocol.h"
00044 #include "cc3100_driver.h"
00045 
00046 #include "cc3100_netcfg.h"
00047 
00048 namespace mbed_cc3100 {
00049 
00050 cc3100_netcfg::cc3100_netcfg(cc3100_driver &driver)
00051     : _driver(driver)
00052 {
00053 
00054 }
00055 
00056 cc3100_netcfg::~cc3100_netcfg()
00057 {
00058 
00059 }
00060 
00061 /*****************************************************************************/
00062 /* sl_NetCfgSet */
00063 /*****************************************************************************/
00064 typedef union {
00065     _NetCfgSetGet_t    Cmd;
00066     _BasicResponse_t   Rsp;
00067 } _SlNetCfgMsgSet_u;
00068 
00069 #if _SL_INCLUDE_FUNC(sl_NetCfgSet)
00070 const _SlCmdCtrl_t _SlNetCfgSetCmdCtrl = {
00071     SL_OPCODE_DEVICE_NETCFG_SET_COMMAND,
00072     sizeof(_NetCfgSetGet_t),
00073     sizeof(_BasicResponse_t)
00074 };
00075 
00076 int32_t cc3100_netcfg::sl_NetCfgSet(const uint8_t ConfigId, const uint8_t ConfigOpt, const uint8_t ConfigLen, const uint8_t *pValues)
00077 {
00078     _SlNetCfgMsgSet_u         Msg;
00079     _SlCmdExt_t               CmdExt;
00080 
00081     _driver._SlDrvResetCmdExt(&CmdExt);
00082     CmdExt.TxPayloadLen = (ConfigLen+3) & (~3);
00083     CmdExt.pTxPayload = (uint8_t *)pValues;
00084 
00085     Msg.Cmd.ConfigId    = ConfigId;
00086     Msg.Cmd.ConfigLen   = ConfigLen;
00087     Msg.Cmd.ConfigOpt   = ConfigOpt;
00088 
00089     VERIFY_RET_OK(_driver._SlDrvCmdOp((_SlCmdCtrl_t *)&_SlNetCfgSetCmdCtrl, &Msg, &CmdExt));
00090 
00091     return (int16_t)Msg.Rsp.status;
00092 }
00093 #endif
00094 
00095 uint32_t cc3100_netcfg::SL_IPV4_VAL(uint8_t add_3,uint8_t add_2,uint8_t add_1,uint8_t add_0){
00096     
00097          return((((uint32_t)add_3 << 24) & 0xFF000000) | (((uint32_t)add_2 << 16) & 0xFF0000) | (((uint32_t)add_1 << 8) & 0xFF00) | ((uint32_t)add_0 & 0xFF) );
00098 }
00099 
00100 uint8_t cc3100_netcfg::SL_IPV4_BYTE(uint32_t val,uint8_t index){
00101                       
00102         return( (val >>= (index*8)) & 0xFF );
00103 }                     
00104 
00105 /*****************************************************************************/
00106 /* sl_NetCfgGet */
00107 /*****************************************************************************/
00108 typedef union {
00109     _NetCfgSetGet_t     Cmd;
00110     _NetCfgSetGet_t     Rsp;
00111 } _SlNetCfgMsgGet_u;
00112 
00113 #if _SL_INCLUDE_FUNC(sl_NetCfgGet)
00114 const _SlCmdCtrl_t _SlNetCfgGetCmdCtrl = {
00115     SL_OPCODE_DEVICE_NETCFG_GET_COMMAND,
00116     sizeof(_NetCfgSetGet_t),
00117     sizeof(_NetCfgSetGet_t)
00118 };
00119 
00120 int32_t cc3100_netcfg::sl_NetCfgGet(const uint8_t ConfigId, uint8_t *pConfigOpt,uint8_t *pConfigLen, uint8_t *pValues)
00121 {
00122     _SlNetCfgMsgGet_u         Msg;
00123     _SlCmdExt_t               CmdExt;
00124 
00125     if (*pConfigLen == 0) {
00126         return SL_EZEROLEN;
00127     }
00128     
00129     _driver._SlDrvResetCmdExt(&CmdExt);
00130     CmdExt.RxPayloadLen = *pConfigLen;
00131     CmdExt.pRxPayload = (uint8_t *)pValues;
00132     
00133     Msg.Cmd.ConfigLen    = *pConfigLen;
00134     Msg.Cmd.ConfigId     = ConfigId;
00135 
00136     if( pConfigOpt ) {
00137         Msg.Cmd.ConfigOpt   = (uint16_t)*pConfigOpt;
00138     }
00139     VERIFY_RET_OK(_driver._SlDrvCmdOp((_SlCmdCtrl_t *)&_SlNetCfgGetCmdCtrl, &Msg, &CmdExt));
00140 
00141     if( pConfigOpt ) {
00142         *pConfigOpt = (uint8_t)Msg.Rsp.ConfigOpt;
00143     }
00144     if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen) {
00145         *pConfigLen = (uint8_t)CmdExt.RxPayloadLen;
00146          if( SL_MAC_ADDRESS_GET == ConfigId )
00147          {
00148            return SL_RET_CODE_OK;  /* sp fix */
00149          }
00150          else
00151          {
00152            return SL_ESMALLBUF;
00153          }
00154     } 
00155     else 
00156     {
00157         *pConfigLen = (uint8_t)CmdExt.ActualRxPayloadLen;
00158     }
00159 
00160     return (int16_t)Msg.Rsp.Status;
00161 }
00162 #endif
00163 
00164 }//namespace mbed_cc3100