MAX14661 Serial Controlled 16:2 Multiplexer

Dependents:   MBD2PMD_WebServer ARD2PMD_WebServer MAX14661_DEMO MAX3232_DEMO

Committer:
gsteiert
Date:
Sat Feb 15 22:07:55 2014 +0000
Revision:
1:4b0d22958890
Parent:
0:6bd0b1a28e10
Child:
2:c3525ee2d636
Added more comments to enumerations

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gsteiert 0:6bd0b1a28e10 1 /* MAX14661 Driver Library
gsteiert 0:6bd0b1a28e10 2 *
gsteiert 0:6bd0b1a28e10 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
gsteiert 0:6bd0b1a28e10 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
gsteiert 0:6bd0b1a28e10 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
gsteiert 0:6bd0b1a28e10 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
gsteiert 0:6bd0b1a28e10 7 * furnished to do so, subject to the following conditions:
gsteiert 0:6bd0b1a28e10 8 *
gsteiert 0:6bd0b1a28e10 9 * The above copyright notice and this permission notice shall be included in all copies or
gsteiert 0:6bd0b1a28e10 10 * substantial portions of the Software.
gsteiert 0:6bd0b1a28e10 11 *
gsteiert 0:6bd0b1a28e10 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
gsteiert 0:6bd0b1a28e10 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
gsteiert 0:6bd0b1a28e10 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
gsteiert 0:6bd0b1a28e10 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
gsteiert 0:6bd0b1a28e10 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
gsteiert 0:6bd0b1a28e10 17 */
gsteiert 0:6bd0b1a28e10 18
gsteiert 0:6bd0b1a28e10 19 #ifndef MAX14661_H
gsteiert 0:6bd0b1a28e10 20 #define MAX14661_H
gsteiert 0:6bd0b1a28e10 21
gsteiert 0:6bd0b1a28e10 22 #include "mbed.h"
gsteiert 0:6bd0b1a28e10 23
gsteiert 0:6bd0b1a28e10 24 /** MAX14661 Library, Provides utilities for configuring the MAX14661 over I2C
gsteiert 0:6bd0b1a28e10 25 *
gsteiert 0:6bd0b1a28e10 26 * Example:
gsteiert 0:6bd0b1a28e10 27 * @code
gsteiert 0:6bd0b1a28e10 28 * // Enable only switch B3 and read back switch state.
gsteiert 0:6bd0b1a28e10 29 *
gsteiert 0:6bd0b1a28e10 30 * #include "MAX14661.h"
gsteiert 0:6bd0b1a28e10 31 *
gsteiert 0:6bd0b1a28e10 32 * MAX14661 mux(p28, p27);
gsteiert 0:6bd0b1a28e10 33 *
gsteiert 0:6bd0b1a28e10 34 * int main() {
gsteiert 0:6bd0b1a28e10 35 * mux.setAB(0x0000, MAX14661::SW03);
gsteiert 0:6bd0b1a28e10 36 * printf("mux = 0x%08X\n", mux.read());
gsteiert 0:6bd0b1a28e10 37 * mux.clearAll();
gsteiert 0:6bd0b1a28e10 38 * printf("mux = 0x%08X\n", mux.read());
gsteiert 0:6bd0b1a28e10 39 * }
gsteiert 0:6bd0b1a28e10 40 * @endcode
gsteiert 0:6bd0b1a28e10 41 */
gsteiert 0:6bd0b1a28e10 42 class MAX14661
gsteiert 0:6bd0b1a28e10 43 {
gsteiert 0:6bd0b1a28e10 44 public:
gsteiert 0:6bd0b1a28e10 45
gsteiert 0:6bd0b1a28e10 46 /** Create a MAX14661 interface
gsteiert 0:6bd0b1a28e10 47 *
gsteiert 0:6bd0b1a28e10 48 * @param sda I2C data line pin
gsteiert 0:6bd0b1a28e10 49 * @param scl I2C clock line pin
gsteiert 0:6bd0b1a28e10 50 * @param addr MAX14661 I2C address
gsteiert 0:6bd0b1a28e10 51 */
gsteiert 0:6bd0b1a28e10 52 MAX14661(PinName sda, PinName scl, int addr = 0x98);
gsteiert 0:6bd0b1a28e10 53
gsteiert 0:6bd0b1a28e10 54 ~MAX14661();
gsteiert 0:6bd0b1a28e10 55
gsteiert 0:6bd0b1a28e10 56 /** Name the register addresses
gsteiert 0:6bd0b1a28e10 57 */
gsteiert 0:6bd0b1a28e10 58 enum MAX14661regs {
gsteiert 1:4b0d22958890 59 REG_DIR0 = 0x00, /**< 8A-1A Direct Access */
gsteiert 1:4b0d22958890 60 REG_DIR1, /**< 16A-9A Direct Access */
gsteiert 1:4b0d22958890 61 REG_DIR2, /**< 8B-1B Direct Access */
gsteiert 1:4b0d22958890 62 REG_DIR3, /**< 16B-9B Direct Access */
gsteiert 1:4b0d22958890 63 REG_SHDW0 = 0x10, /**< 8A-1A Shadow */
gsteiert 1:4b0d22958890 64 REG_SHDW1, /**< 16A-9A Shadow */
gsteiert 1:4b0d22958890 65 REG_SHDW2, /**< 8B-1B Shadow */
gsteiert 1:4b0d22958890 66 REG_SHSW3, /**< 16B-9B Shadow */
gsteiert 1:4b0d22958890 67 REG_CMD_A, /**< Command A */
gsteiert 1:4b0d22958890 68 REG_CMD_B /**< Command A */
gsteiert 0:6bd0b1a28e10 69 };
gsteiert 0:6bd0b1a28e10 70
gsteiert 0:6bd0b1a28e10 71 /** Name the command codes
gsteiert 0:6bd0b1a28e10 72 */
gsteiert 0:6bd0b1a28e10 73 enum MAX14661cmds {
gsteiert 1:4b0d22958890 74 CMD_EN01 = 0x00, /**< Enable switch 1 */
gsteiert 1:4b0d22958890 75 CMD_EN02, /**< Enable switch 2 */
gsteiert 1:4b0d22958890 76 CMD_EN03, /**< Enable switch 3 */
gsteiert 1:4b0d22958890 77 CMD_EN04, /**< Enable switch 4 */
gsteiert 1:4b0d22958890 78 CMD_EN05, /**< Enable switch 5 */
gsteiert 1:4b0d22958890 79 CMD_EN06, /**< Enable switch 6 */
gsteiert 1:4b0d22958890 80 CMD_EN07, /**< Enable switch 7 */
gsteiert 1:4b0d22958890 81 CMD_EN08, /**< Enable switch 8 */
gsteiert 1:4b0d22958890 82 CMD_EN09, /**< Enable switch 9 */
gsteiert 1:4b0d22958890 83 CMD_EN10, /**< Enable switch 10 */
gsteiert 1:4b0d22958890 84 CMD_EN11, /**< Enable switch 11 */
gsteiert 1:4b0d22958890 85 CMD_EN12, /**< Enable switch 12 */
gsteiert 1:4b0d22958890 86 CMD_EN13, /**< Enable switch 13 */
gsteiert 1:4b0d22958890 87 CMD_EN14, /**< Enable switch 14 */
gsteiert 1:4b0d22958890 88 CMD_EN15, /**< Enable switch 15 */
gsteiert 1:4b0d22958890 89 CMD_EN16, /**< Enable switch 16 */
gsteiert 1:4b0d22958890 90 CMD_DIS, /**< Disable switches */
gsteiert 1:4b0d22958890 91 CMD_COPY, /**< Copy shadow registers to switches */
gsteiert 1:4b0d22958890 92 CMD_NOOP = 0x1F /**< Keep current state, no changes */
gsteiert 0:6bd0b1a28e10 93 };
gsteiert 0:6bd0b1a28e10 94
gsteiert 0:6bd0b1a28e10 95 /** Name the switch bits
gsteiert 0:6bd0b1a28e10 96 */
gsteiert 0:6bd0b1a28e10 97 enum MAX14661sws {
gsteiert 1:4b0d22958890 98 SW01 = (1 << 0), /**< Bit mask for switch 1 */
gsteiert 1:4b0d22958890 99 SW02 = (1 << 1), /**< Bit mask for switch 2 */
gsteiert 1:4b0d22958890 100 SW03 = (1 << 2), /**< Bit mask for switch 3 */
gsteiert 1:4b0d22958890 101 SW04 = (1 << 3), /**< Bit mask for switch 4 */
gsteiert 1:4b0d22958890 102 SW05 = (1 << 4), /**< Bit mask for switch 5 */
gsteiert 1:4b0d22958890 103 SW06 = (1 << 5), /**< Bit mask for switch 6 */
gsteiert 1:4b0d22958890 104 SW07 = (1 << 6), /**< Bit mask for switch 7 */
gsteiert 1:4b0d22958890 105 SW08 = (1 << 7), /**< Bit mask for switch 8 */
gsteiert 1:4b0d22958890 106 SW09 = (1 << 8), /**< Bit mask for switch 9 */
gsteiert 1:4b0d22958890 107 SW10 = (1 << 9), /**< Bit mask for switch 10 */
gsteiert 1:4b0d22958890 108 SW11 = (1 << 10), /**< Bit mask for switch 11 */
gsteiert 1:4b0d22958890 109 SW12 = (1 << 11), /**< Bit mask for switch 12 */
gsteiert 1:4b0d22958890 110 SW13 = (1 << 12), /**< Bit mask for switch 13 */
gsteiert 1:4b0d22958890 111 SW14 = (1 << 13), /**< Bit mask for switch 14 */
gsteiert 1:4b0d22958890 112 SW15 = (1 << 14), /**< Bit mask for switch 15 */
gsteiert 1:4b0d22958890 113 SW16 = (1 << 15) /**< Bit mask for switch 16 */
gsteiert 0:6bd0b1a28e10 114 };
gsteiert 0:6bd0b1a28e10 115
gsteiert 0:6bd0b1a28e10 116 /** Clears all bits to opens all 32 switches
gsteiert 0:6bd0b1a28e10 117 */
gsteiert 0:6bd0b1a28e10 118 void clearAll();
gsteiert 0:6bd0b1a28e10 119
gsteiert 0:6bd0b1a28e10 120 /** Set all 32 switches simultaneously
gsteiert 0:6bd0b1a28e10 121 *
gsteiert 0:6bd0b1a28e10 122 * @param swA the desired state of switches [A16 - A01]
gsteiert 0:6bd0b1a28e10 123 * @param swB the desired state of switches [B16 - B01]
gsteiert 0:6bd0b1a28e10 124 */
gsteiert 0:6bd0b1a28e10 125 void setAB(int swA, int swB);
gsteiert 0:6bd0b1a28e10 126
gsteiert 0:6bd0b1a28e10 127 /** Read the status of all 32 switches concatenated into a single int
gsteiert 0:6bd0b1a28e10 128 *
gsteiert 0:6bd0b1a28e10 129 * @returns
gsteiert 0:6bd0b1a28e10 130 * the switch states [B16-B01,A16-A1]
gsteiert 0:6bd0b1a28e10 131 */
gsteiert 0:6bd0b1a28e10 132 int read();
gsteiert 0:6bd0b1a28e10 133
gsteiert 0:6bd0b1a28e10 134 private:
gsteiert 0:6bd0b1a28e10 135 I2C _i2c;
gsteiert 0:6bd0b1a28e10 136 int _addr;
gsteiert 0:6bd0b1a28e10 137 };
gsteiert 0:6bd0b1a28e10 138
gsteiert 0:6bd0b1a28e10 139 #endif