summaryrefslogtreecommitdiff
path: root/peripheral/libupm/src/ds2413/ds2413.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'peripheral/libupm/src/ds2413/ds2413.hpp')
-rw-r--r--peripheral/libupm/src/ds2413/ds2413.hpp175
1 files changed, 175 insertions, 0 deletions
diff --git a/peripheral/libupm/src/ds2413/ds2413.hpp b/peripheral/libupm/src/ds2413/ds2413.hpp
new file mode 100644
index 0000000..1e9e238
--- /dev/null
+++ b/peripheral/libupm/src/ds2413/ds2413.hpp
@@ -0,0 +1,175 @@
+/*
+ * Author: Jon Trulson <jtrulson@ics.com>
+ * Copyright (c) 2016 Intel Corporation.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#pragma once
+
+#include <string>
+#include <iostream>
+#include <map>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <mraa/common.hpp>
+#include <mraa/uart_ow.hpp>
+
+#define DS2413_DEFAULT_UART 0
+
+namespace upm {
+ /**
+ * @brief DS2413 modules
+ * @defgroup ds2413 libupm-ds2413
+ * @ingroup maxim uart gpio
+ */
+
+ /**
+ * @library ds2413
+ * @sensor ds2413
+ * @comname DS2413 1-Wire Dual Channel Addressable Switch
+ * @type gpio
+ * @man maxim
+ * @con uart
+ * @web https://learn.adafruit.com/adafruit-1-wire-gpio-breakout-ds2413/overview
+ *
+ * @brief API for the DS2413 1-Wire Dual Channel Addressable Switch
+ *
+ * The DS2413 is a dual-channel programmable I/O 1-Wire® chip. The
+ * PIO outputs are configured as open-drain and provide up to 20mA
+ * continuous sink capability and off-state operating voltage up
+ * to 28V. Control and sensing of the PIO pins is performed with
+ * a dedicated device-level command protocol.
+ *
+ * This device requires the use of a UART to provide access to a
+ * Dallas 1-wire bus, via a new facility supported by MRAA (once
+ * the relevant PR is accepted), using the UartOW access class.
+ * It is important to realize that the UART is only being used to
+ * access and control a Dallas 1-wire compliant bus, it is not
+ * actually a UART device.
+ *
+ * Multiple DS2413 devices can be connected to this bus. This
+ * module will identify all such devices connected, and allow you
+ * to access them using an index starting at 0.
+ *
+ * @snippet ds2413.cxx Interesting
+ */
+
+ class DS2413 {
+ public:
+
+ // The family code for these devices. We handle all of them that
+ // are found on the bus.
+ static const uint8_t DS2413_FAMILY_CODE = 0x3a;
+
+ // commands
+ typedef enum {
+ ACCESS_READ = 0xf5,
+ ACCESS_WRITE = 0x5a
+ } DS2413_CMD_T;
+
+ // possible ack responses for gpio writes
+ typedef enum {
+ ACK_SUCCESS = 0xaa,
+ ACK_FAILURE = 0xff
+ } DS2413_ACK_T;
+
+ /**
+ * DS2413 object constructor
+ *
+ * @param uart Default UART to use (0 or 1). Default is 0.
+ */
+ DS2413(int uart=DS2413_DEFAULT_UART);
+
+ /**
+ * DS2413 object destructor
+ */
+ ~DS2413();
+
+ /**
+ * This method will search the 1-wire bus and store information on
+ * each device detected on the bus. If no devices are found, an
+ * exception is thrown. Once this function completes
+ * successfully, you can use devicesFound() to determine how many
+ * devices were detected.
+ */
+ void init();
+
+ /**
+ * This method will return the number of DS2413 devices that were
+ * found on the bus.
+ *
+ * @return number of DS2413's that were found on the bus
+ */
+ int devicesFound()
+ {
+ return m_devicesFound;
+ }
+
+ /**
+ * Read the GPIO latches and values for a given device. Only the
+ * lower 4 bits of the return value have any meaning. The bits
+ * are formatted as follows (from msb to lsb):
+ * <gpioB latch> <gpioB value> <gpioA latch> <gpioA value>
+ *
+ * @param index The device index to access (starts at 0). Default
+ * is the first device (index = 0)
+ * @return the 4 bit status of the 2 gpios
+ */
+ int readGpios(int index=0);
+
+ /**
+ * Write the given values to the gpio latches for a given device.
+ * Only the lower 2 bits of the value have any meaning. The lsb
+ * is gor gpioA and the next lsb is for gpioB:
+ * <gpioB latch> <gpioA latch>
+ *
+ * @param index The device index to access (starts at 0).
+ * @param value the value to write to the gpio latches
+ */
+ void writeGpios(int index, int value);
+
+ /**
+ * Return an 8 byte string representing the unique device ID for a
+ * given device index. If the index is invalid, an empty strig
+ * will be returned.
+ *
+ * @param index The device index to access (starts at 0).
+ * @return 8 byte string representing the 1-wire device's unique
+ * rom code.
+ */
+ std::string getId(int index)
+ {
+ return m_deviceMap[index];
+ }
+
+ protected:
+ mraa::UartOW m_uart;
+
+ // the total number of devices found
+ int m_devicesFound;
+
+ std::map<int, std::string> m_deviceMap;
+
+ private:
+ };
+}