SDMP_IOT / Mbed OS AdiSense1000_SmartBabySeat

Fork of Babyseat_NewFirmware_copy_sean by Ross O'Halloran

Revision:
2:625a45555a85
diff -r 50fa490ecd89 -r 625a45555a85 src/register_interface.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/register_interface.cpp	Fri Aug 25 11:17:37 2017 +0000
@@ -0,0 +1,127 @@
+/*!
+ ******************************************************************************
+ * @file:   register_interface.cpp
+ * @brief:  ADISense1000 interface to register map in adisense firmware
+ *-----------------------------------------------------------------------------
+ *
+Copyright (c) 2017 Emutex Ltd. / Analog Devices, Inc.
+
+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.
+  - Modified versions of the software must be conspicuously marked as such.
+  - This software is licensed solely and exclusively for use with processors
+    manufactured by or for Analog Devices, Inc.
+  - This software may not be combined or merged with other code in any manner
+    that would cause the software to become subject to terms and conditions
+    which differ from those listed here.
+  - Neither the name of Analog Devices, Inc. nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+  - The use of this software may or may not infringe the patent rights of one
+    or more patent holders.  This license does not release you from the
+    requirement that you obtain separate licenses from these patent holders
+    to use this software.
+
+THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+TITLE, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+NO EVENT SHALL ANALOG DEVICES, INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF CLAIMS OF INTELLECTUAL
+PROPERTY RIGHTS INFRINGEMENT; 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 Files                                                              */
+/******************************************************************************/
+#include "inc/register_interface.h"
+#include "inc/spi_nucleo.h"
+
+#define BUFFER_SIZE 256
+#define CS_HOLD 1
+
+#define SET_WRITE_COMMAND(offset)                       \
+    do {                                                \
+        uint16_t command = 0x8000 | (offset & 0x7FFF);  \
+        txBuff[0] = command >> 8;                       \
+        txBuff[1] = command & 0xFF;                     \
+    } while(0)
+
+#define SET_READ_COMMAND(offset)                        \
+    do {                                                \
+        uint16_t command = (offset & 0x7FFF);           \
+        txBuff[0] = command >> 8;                       \
+        txBuff[1] = command & 0xFF;                     \
+    } while(0)
+
+static uint8_t txBuff[BUFFER_SIZE];
+
+/*!
+ * @brief Write configuration to adisense1000 register
+ *
+ * @param[in] addr  id of register to write too
+ * @param[in] size  size of register in bytes
+ * @param[in] pData data to be written
+ *
+ * @return Status
+ *         - #ADI_SENSE_SUCCESS Call completed successfully.
+ *         - todo
+ *
+ */
+ADI_SENSE_RESULT
+ADISense1000_RegWrite(uint16_t addr, uint16_t size, uint8_t *pData)
+{
+    memset(txBuff, 0, sizeof(txBuff));
+
+    SET_WRITE_COMMAND(addr);
+
+    for (int i = 2; i < (size + REG_CMD_SIZE); i++)
+    {
+        txBuff[i] = pData[i - REG_CMD_SIZE];
+    }
+
+    if (ADISense1000_HostSpiTransfer(txBuff, (size + REG_CMD_SIZE),
+                                     !CS_HOLD) != ADI_SENSE_SUCCESS)
+        return ADI_SENSE_FAILURE;
+
+    return ADI_SENSE_SUCCESS;
+}
+
+/*!
+ * @brief Read value of adisense1000 register
+ *
+ * @param[in] addr  id of register to read from
+ * @param[in] size  size of register in bytes
+ * @param[out] pData value from register
+ *
+ * @return Status
+ *         - #ADI_SENSE_SUCCESS Call completed successfully.
+ *         - todo
+ *
+ */
+ADI_SENSE_RESULT
+ADISense1000_RegRead(uint16_t addr, uint16_t size, uint8_t *data)
+{
+    memset(txBuff, 0, sizeof(txBuff));
+
+    SET_READ_COMMAND(addr);
+
+    if (ADISense1000_HostSpiTransfer(txBuff, size, !CS_HOLD) != ADI_SENSE_SUCCESS)
+        return ADI_SENSE_FAILURE;
+
+    memcpy(data, txBuff, size);
+
+    return ADI_SENSE_SUCCESS;
+}
+