MAX14661 Serial Controlled 16:2 Multiplexer
Dependents: MBD2PMD_WebServer ARD2PMD_WebServer MAX14661_DEMO MAX3232_DEMO
MAX14661.h
- Committer:
- gsteiert
- Date:
- 2014-02-03
- Revision:
- 0:6bd0b1a28e10
- Child:
- 1:4b0d22958890
File content as of revision 0:6bd0b1a28e10:
/* MAX14661 Driver Library * * 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. */ #ifndef MAX14661_H #define MAX14661_H #include "mbed.h" /** MAX14661 Library, Provides utilities for configuring the MAX14661 over I2C * * Example: * @code * // Enable only switch B3 and read back switch state. * * #include "MAX14661.h" * * MAX14661 mux(p28, p27); * * int main() { * mux.setAB(0x0000, MAX14661::SW03); * printf("mux = 0x%08X\n", mux.read()); * mux.clearAll(); * printf("mux = 0x%08X\n", mux.read()); * } * @endcode */ class MAX14661 { public: /** Create a MAX14661 interface * * @param sda I2C data line pin * @param scl I2C clock line pin * @param addr MAX14661 I2C address */ MAX14661(PinName sda, PinName scl, int addr = 0x98); ~MAX14661(); /** Name the register addresses */ enum MAX14661regs { REG_DIR0 = 0x00, REG_DIR1, REG_DIR2, REG_DIR3, REG_SHDW0 = 0x10, REG_SHDW1, REG_SHDW2, REG_SHSW3, REG_CMD_A, REG_CMD_B }; /** Name the command codes */ enum MAX14661cmds { CMD_EN01 = 0x00, CMD_EN02, CMD_EN03, CMD_EN04, CMD_EN05, CMD_EN06, CMD_EN07, CMD_EN08, CMD_EN09, CMD_EN10, CMD_EN11, CMD_EN12, CMD_EN13, CMD_EN14, CMD_EN15, CMD_EN16, CMD_DIS, CMD_COPY, CMD_NOOP = 0x1F }; /** Name the switch bits */ enum MAX14661sws { SW01 = (1 << 0), SW02 = (1 << 1), SW03 = (1 << 2), SW04 = (1 << 3), SW05 = (1 << 4), SW06 = (1 << 5), SW07 = (1 << 6), SW08 = (1 << 7), SW09 = (1 << 8), SW10 = (1 << 9), SW11 = (1 << 10), SW12 = (1 << 11), SW13 = (1 << 12), SW14 = (1 << 13), SW15 = (1 << 14), SW16 = (1 << 15) }; /** Clears all bits to opens all 32 switches */ void clearAll(); /** Set all 32 switches simultaneously * * @param swA the desired state of switches [A16 - A01] * @param swB the desired state of switches [B16 - B01] */ void setAB(int swA, int swB); /** Read the status of all 32 switches concatenated into a single int * * @returns * the switch states [B16-B01,A16-A1] */ int read(); private: I2C _i2c; int _addr; }; #endif