The PCAL6416A is a low-voltage 16-bit general purpose I/O (GPIO) expander with interrupt. This component library is compatible to basic operation as GPIO expanders: PCAL6416A, PCAL9555, PCA9555, PCA9535, PCA9539, PCAL9554, PCA9554 and PCA9538. On addition to this, this library is including mbed-SDK-style APIs. APIs that similar to DigitaiInOut, DigitalOut, DigitalIn, BusInOUt, BusOut and BusIn are available.

This is a copy of the PCA9555 library by Akifumi "Tedd" OKANO, which is compatible with PCAL6416A chip.

Revision:
0:035111d3d631
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/base_classes/PCAL955x.h	Wed Feb 15 10:07:59 2017 +0000
@@ -0,0 +1,83 @@
+/** PCAL955x GPIO with Agile I/O, interrupt and weak pull-up family
+ *
+ *  Abstract class for PCAL955x/PCAL6416 family
+ *  No instance can be made from this class
+ *
+ *  @class    PCAL955x
+ *  @author   Akifumi (Tedd) OKANO, NXP Semiconductors
+ *  @version  0.5.1
+ *  @date     07-Mar-2015
+ *  @modified 15-Feb-2017, by Andriy Makukha, Shenzhen MZJ Technology Co.
+ *
+ *  Released under the Apache 2 license
+ */
+
+#ifndef     MBED_PCAL955x
+#define     MBED_PCAL955x
+
+#include    "mbed.h"
+#include    "CompGpioExp.h"
+
+/** Abstract class for PCAL955x/PCAL6416 family
+ *  
+ *  No instance can be made from this class
+ */
+class PCAL955x : public CompGpioExp
+{
+public:
+    enum register_index {
+        INPUT,
+        OUTPUT,
+        POLARITY,
+        CONFIG,
+        ODS0,
+        ODS1,
+        IN_LATCH,
+        PULL_EN,
+        PULL_SEL,
+        INT_MASK,
+        INT_STAT,
+        OPC
+    };
+
+    PCAL955x( PinName i2c_sda, PinName i2c_scl, char i2c_address = DEFAULT_I2C_ADDR );
+    PCAL955x( I2C &i2c_obj, char i2c_address = DEFAULT_I2C_ADDR );
+    virtual ~PCAL955x();
+
+    virtual void    write( int pin, int value );
+    virtual int     read( int pin );
+    virtual void    configure( int pin, int value );
+    virtual int     read( void );   
+    virtual void    write_with_mask( int bitpattern, int mask_bits );
+    virtual void    configure_with_mask( int bitpattern, int mask_bits );
+    
+    void            write( int bit_pattern );
+    void            polarity( int bit_pattern );
+    void            configure( int bit_pattern );
+
+    void            interrupt_mask( int bit_pattern );
+    int             interrupt_status( void );
+
+    virtual int     number_of_pins( void )                     = 0;
+    virtual void    reg_index_write( char reg_addr, int data )  = 0;
+    virtual int     reg_index_read( char reg_addr )             = 0;
+                    operator int( void );
+
+protected:
+    enum {
+        DEFAULT_I2C_ADDR    = 0x40,
+    };
+
+    void bus_write( char *dp, int length );
+    void bus_read( char reg_addr, char *dp, int length );
+
+private:
+    I2C             *i2c_p;
+    I2C             &i2c;
+    char            address;    //  I2C slave address
+    int             pin_state;
+    int             pin_direction;
+}
+;
+
+#endif  //  MBED_PCAL955x
\ No newline at end of file