diff --git a/examples/rtt_rtic_i2c.rs b/examples/rtt_rtic_i2c.rs
index cfe131ef64467ca808bceadd1a5f61366d533e94..82a6b1042ce7dff522fecc4f5d4d25a6830defd8 100644
--- a/examples/rtt_rtic_i2c.rs
+++ b/examples/rtt_rtic_i2c.rs
@@ -106,3 +106,108 @@ const APP: () = {
         }
     }
 };
+
+// SC18IS602
+mod SC18IS602 {
+    enum Function {
+        SpiReadWrite = 0x00, // 0F..01, where lowest 4 bits are the CSs
+        SpiConfigure = 0xF0,
+        ClearInterrupt = 0xF1,
+        IdleMode = 0xF2,
+        GpioWrite = 0xF4,
+        GpioRead = 0xF5,
+        GpioEnable = 0xF6,
+        GpioConfigure = 0xF7,
+    }
+
+    impl Function {
+        fn id(self) -> u8 {
+            self as u8
+        }
+    }
+
+    enum GpioMode {
+        QuasiBiDirectional = 0b00,
+        PushPull = 0b01,
+        InputOnly = 0b10,
+        OpenDrain = 0b11,
+    }
+
+    impl GpioMode {
+        fn val(self) -> u8 {
+            self as u8
+        }
+    }
+
+    use embedded_hal::{blocking::i2c, digital::v2::OutputPin};
+
+    enum Error {
+        NotConfigured,
+    }
+    // struct SH18IS602<PINS> {
+    struct SH18IS602<I2C>
+    where
+        I2C: i2c::Write,
+    {
+        addr: u8,
+        cs: bool,
+        i2c: I2C,
+    }
+
+    impl<I2C> SH18IS602<I2C>
+    where
+        I2C: i2c::Write,
+    {
+        fn new(mut i2c: I2C, addr: u8, cs: bool) -> SH18IS602<I2C> {
+            if cs {
+                let addr = (0x50 + addr) >> 1;
+                // Configure SS0 as GPIO
+                i2c.write(addr, &[Function::GpioEnable.id(), 0x1]).ok();
+
+                // Configure SS0 as a PushPull Output
+                i2c.write(
+                    addr,
+                    &[Function::GpioConfigure.id(), GpioMode::PushPull.val()],
+                )
+                .ok();
+            }
+            SH18IS602 { addr, cs, i2c }
+        }
+    }
+
+    // fn set<I2C>(i2c: I2C, data: u8)
+    // where
+    //     I2C: i2c::Write,
+    // {
+    //     i2c.write(self.addr, &[Function::GpioWrite.id(), 0x0]).ok();
+    // }
+
+    impl<I2C> OutputPin for SH18IS602<I2C>
+    where
+        I2C: i2c::Write,
+    {
+        type Error = Error;
+
+        fn set_low(&mut self) -> Result<(), Self::Error> {
+            if !self.cs {
+                Err(Error::NotConfigured)
+            } else {
+                self.i2c
+                    .write(self.addr, &[Function::GpioWrite.id(), 0x0])
+                    .ok();
+                Ok(())
+            }
+        }
+
+        fn set_high(&mut self) -> Result<(), Self::Error> {
+            if !self.cs {
+                Err(Error::NotConfigured)
+            } else {
+                self.i2c
+                    .write(self.addr, &[Function::GpioWrite.id(), 0x1])
+                    .ok();
+                Ok(())
+            }
+        }
+    }
+}