From a6163888f3c56123b1db313743c6147ba498732c Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Fri, 8 Aug 2014 14:42:07 +0300 Subject: Add third_party libs --- third_party/exosite/exosite_meta.c | 189 +++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 third_party/exosite/exosite_meta.c (limited to 'third_party/exosite/exosite_meta.c') diff --git a/third_party/exosite/exosite_meta.c b/third_party/exosite/exosite_meta.c new file mode 100644 index 0000000..91b7755 --- /dev/null +++ b/third_party/exosite/exosite_meta.c @@ -0,0 +1,189 @@ +/***************************************************************************** +* +* exosite_meta.c - Exosite meta information handler. +* Copyright (c) 2013, Exosite LLC +* All rights reserved. +* +* 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 Exosite LLC 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 HOLDER 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. +* +*****************************************************************************/ + +#include "exosite_meta.h" +#include "drivers/exosite_hal_lwip.h" +#include +//#include + +// external functions +// externs +// local functions +// exported functions +// local defines +// globals + +/***************************************************************************** +* +* exosite_meta_init +* +* \param int reset : 1 - reset meta data +* +* \return None +* +* \brief Does whatever we need to do to initialize the NV meta structure +* +*****************************************************************************/ +void exosite_meta_init(int reset) +{ + char strBuf[META_MARK_SIZE]; + + exoHAL_EnableMeta(); //turn on the necessary hardware / peripherals + + //check our meta mark - if it isn't there, we wipe the meta structure + exosite_meta_read((unsigned char *)strBuf, META_MARK_SIZE, META_MARK); + if (strncmp(strBuf, EXOMARK, META_MARK_SIZE) || reset) + exosite_meta_defaults(); + + return; +} + + +/***************************************************************************** +* +* exosite_meta_defaults +* +* \param None +* +* \return None +* +* \brief Writes default meta values to NV memory. Erases existing meta +* information! +* +*****************************************************************************/ +void exosite_meta_defaults(void) +{ + const unsigned char meta_server_ip[6] = {173,255,209,28,0,80}; + + exoHAL_EraseMeta(); //erase the information currently in meta + exosite_meta_write((unsigned char *)meta_server_ip, 6, META_SERVER); //store server IP + exosite_meta_write((unsigned char *)EXOMARK, META_MARK_SIZE, META_MARK); //store exosite mark + + return; +} + + +/***************************************************************************** +* +* exosite_meta_write +* +* \param write_buffer - string buffer containing info to write to meta; +* srcBytes - size of string in bytes; element - item from +* MetaElements enum. +* +* \return None +* +* \brief Writes specific meta information to meta memory +* +*****************************************************************************/ +void exosite_meta_write(unsigned char * write_buffer, unsigned short srcBytes, unsigned char element) +{ + exosite_meta * meta_info = 0; + + //TODO - do not write if the data already there is identical... + + switch (element) { + case META_CIK: + if (srcBytes > META_CIK_SIZE) return; + exoHAL_WriteMetaItem(write_buffer, srcBytes, (int)meta_info->cik); //store CIK + break; + case META_SERVER: + if (srcBytes > META_SERVER_SIZE) return; + exoHAL_WriteMetaItem(write_buffer, srcBytes, (int)meta_info->server); //store server IP + break; + case META_MARK: + if (srcBytes > META_MARK_SIZE) return; + exoHAL_WriteMetaItem(write_buffer, srcBytes, (int)meta_info->mark); //store exosite mark + break; + case META_UUID: + if (srcBytes > META_UUID_SIZE) return; + exoHAL_WriteMetaItem(write_buffer, srcBytes, (int)meta_info->uuid); //store UUID + break; + case META_MFR: + if (srcBytes > META_MFR_SIZE) return; + exoHAL_WriteMetaItem(write_buffer, srcBytes, (int)meta_info->mfr); //store manufacturing info + break; + case META_NONE: + default: + break; + } + + return; +} + + +/***************************************************************************** +* +* exosite_meta_read +* +* \param read_buffer - string buffer to receive element data; destBytes - +* size of buffer in bytes; element - item from MetaElements enum. +* +* \return None +* +* \brief Writes specific meta information to meta memory +* +*****************************************************************************/ +void exosite_meta_read(unsigned char * read_buffer, unsigned short destBytes, unsigned char element) +{ + exosite_meta * meta_info = 0; + + switch (element) { + case META_CIK: + if (destBytes < META_CIK_SIZE) return; + exoHAL_ReadMetaItem(read_buffer, META_CIK_SIZE, (int)meta_info->cik); //read CIK + break; + case META_SERVER: + if (destBytes < META_SERVER_SIZE) return; + exoHAL_ReadMetaItem(read_buffer, META_SERVER_SIZE, (int)meta_info->server); //read server IP + break; + case META_MARK: + if (destBytes < META_MARK_SIZE) return; + exoHAL_ReadMetaItem(read_buffer, META_MARK_SIZE, (int)meta_info->mark); //read exosite mark + break; + case META_UUID: + if (destBytes < META_UUID_SIZE) return; + exoHAL_ReadMetaItem(read_buffer, META_UUID_SIZE, (int)meta_info->uuid); //read provisioning UUID + break; + case META_MFR: + if (destBytes < META_MFR_SIZE) return; + exoHAL_ReadMetaItem(read_buffer, META_MFR_SIZE, (int)meta_info->mfr); //read manufacturing info + break; + case META_NONE: + default: + break; + } + + return; +} + + -- cgit v1.3.1