MAX14661 Serial Controlled 16:2 Multiplexer
Dependents: MBD2PMD_WebServer ARD2PMD_WebServer MAX14661_DEMO MAX3232_DEMO
MAX14661.h@1:4b0d22958890, 2014-02-15 (annotated)
- 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?
User | Revision | Line number | New 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 |