diff --git a/examples/Makefile b/examples/Makefile
index 8cc256f..8848b33 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -42,7 +42,7 @@ SRC = blink.c blink8.c blink12.c \
nes.c \
softPwm.c softTone.c \
delayTest.c serialRead.c serialTest.c okLed.c ds1302.c \
- rht03.c
+ rht03.c piglow.c
OBJ = $(SRC:.c=.o)
@@ -139,6 +139,10 @@ ds1302: ds1302.o
@echo [link]
@$(CC) -o $@ ds1302.o $(LDFLAGS) $(LDLIBS)
+piglow: piglow.o
+ @echo [link]
+ @$(CC) -o $@ piglow.o $(LDFLAGS) $(LDLIBS)
+
.c.o:
@echo [CC] $<
diff --git a/examples/piglow.c b/examples/piglow.c
new file mode 100644
index 0000000..d3fe4b9
--- /dev/null
+++ b/examples/piglow.c
@@ -0,0 +1,51 @@
+/*
+ * piglow.c:
+ * Very simple demonstration of the PiGlow board.
+ * This uses the SN3218 directly - soon there will be a new PiGlow
+ * devLib device which will handle the PiGlow board on a more easy
+ * to use manner...
+ *
+ * Copyright (c) 2013 Gordon Henderson.
+ ***********************************************************************
+ * This file is part of wiringPi:
+ * https://projects.drogon.net/raspberry-pi/wiringpi/
+ *
+ * wiringPi is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * wiringPi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with wiringPi. If not, see .
+ ***********************************************************************
+ */
+
+#include
+#include
+
+#define LED_BASE 533
+
+int main (void)
+{
+ int i, j ;
+
+ wiringPiSetupSys () ;
+
+ sn3218Setup (LED_BASE) ;
+
+ for (;;)
+ {
+ for (i = 0 ; i < 256 ; ++i)
+ for (j = 0 ; j < 18 ; ++j)
+ analogWrite (LED_BASE + j, i) ;
+
+ for (i = 255 ; i >= 0 ; --i)
+ for (j = 0 ; j < 18 ; ++j)
+ analogWrite (LED_BASE + j, i) ;
+ }
+}
diff --git a/gpio/extensions.c b/gpio/extensions.c
index 8be0ec0..c7e5308 100644
--- a/gpio/extensions.c
+++ b/gpio/extensions.c
@@ -49,6 +49,7 @@
#include
#include
#include
+#include
#include "extensions.h"
@@ -467,6 +468,20 @@ static int doExtensionMcp4802 (char *progName, int pinBase, char *params)
/*
+ * doExtensionSn3218:
+ * Analog Output (LED Driver)
+ * sn3218:base
+ *********************************************************************************
+ */
+
+static int doExtensionSn3218 (char *progName, int pinBase, char *params)
+{
+ sn3218Setup (pinBase) ;
+ return TRUE ;
+}
+
+
+/*
* doExtensionMcp3422:
* Analog IO
* mcp3422:base:i2cAddr
@@ -531,6 +546,7 @@ struct extensionFunctionStruct extensionFunctions [] =
{ "mcp3422", &doExtensionMcp3422 },
{ "max31855", &doExtensionMax31855 },
{ "max5322", &doExtensionMax5322 },
+ { "sn3218", &doExtensionSn3218 },
{ NULL, NULL },
} ;
diff --git a/wiringPi/Makefile b/wiringPi/Makefile
index 05dedec..ed4f6be 100644
--- a/wiringPi/Makefile
+++ b/wiringPi/Makefile
@@ -54,6 +54,7 @@ SRC = wiringPi.c \
pcf8574.c pcf8591.c \
mcp3002.c mcp3004.c mcp4802.c mcp3422.c \
max31855.c max5322.c \
+ sn3218.c \
drc.c
OBJ = $(SRC:.c=.o)
@@ -112,6 +113,7 @@ install-headers:
@install -m 0644 sr595.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 pcf8574.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 pcf8591.h $(DESTDIR)$(PREFIX)/include
+ @install -m 0644 sn3218.h $(DESTDIR)$(PREFIX)/include
.PHONEY: install
install: $(DYNAMIC) install-headers
@@ -151,6 +153,7 @@ uninstall:
@rm -f $(DESTDIR)$(PREFIX)/include/sr595.h
@rm -f $(DESTDIR)$(PREFIX)/include/pcf8574.h
@rm -f $(DESTDIR)$(PREFIX)/include/pcf8591.h
+ @rm -f $(DESTDIR)$(PREFIX)/include/sn3218.h
@rm -f $(DESTDIR)$(PREFIX)/lib/libwiringPi.*
@ldconfig
@@ -184,4 +187,5 @@ mcp4802.o: wiringPi.h wiringPiSPI.h mcp4802.h
mcp3422.o: wiringPi.h wiringPiI2C.h mcp3422.h
max31855.o: wiringPi.h wiringPiSPI.h max31855.h
max5322.o: wiringPi.h wiringPiSPI.h max5322.h
+sn3218.o: wiringPi.h wiringPiI2C.h sn3218.h
drc.o: wiringPi.h wiringSerial.h drc.h
diff --git a/wiringPi/sn3218.c b/wiringPi/sn3218.c
new file mode 100644
index 0000000..7ceb156
--- /dev/null
+++ b/wiringPi/sn3218.c
@@ -0,0 +1,75 @@
+/*
+ * sn3218.c:
+ * Extend wiringPi with the SN3218 I2C LEd Driver
+ * Copyright (c) 2012-2013 Gordon Henderson
+ ***********************************************************************
+ * This file is part of wiringPi:
+ * https://projects.drogon.net/raspberry-pi/wiringpi/
+ *
+ * wiringPi is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * wiringPi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with wiringPi.
+ * If not, see .
+ ***********************************************************************
+ */
+
+#include
+#include
+
+#include "sn3218.h"
+
+/*
+ * myAnalogWrite:
+ * Write analog value on the given pin
+ *********************************************************************************
+ */
+
+static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+ int fd = node->fd ;
+ int chan = 0x01 + (pin - node->pinBase) ;
+
+ wiringPiI2CWriteReg8 (fd, chan, value & 0xFF) ; // Value
+ wiringPiI2CWriteReg8 (fd, 0x16, 0x00) ; // Update
+}
+
+/*
+ * sn3218Setup:
+ * Create a new wiringPi device node for an sn3218 on the Pi's
+ * SPI interface.
+ *********************************************************************************
+ */
+
+int sn3218Setup (const int pinBase)
+{
+ int fd ;
+ struct wiringPiNodeStruct *node ;
+
+ if ((fd = wiringPiI2CSetup (0x54)) < 0)
+ return fd ;
+
+// Setup the chip - initialise all 18 LEDs to off
+
+//wiringPiI2CWriteReg8 (fd, 0x17, 0) ; // Reset
+ wiringPiI2CWriteReg8 (fd, 0x00, 1) ; // Not Shutdown
+ wiringPiI2CWriteReg8 (fd, 0x13, 0x3F) ; // Enable LEDs 0- 5
+ wiringPiI2CWriteReg8 (fd, 0x14, 0x3F) ; // Enable LEDs 6-11
+ wiringPiI2CWriteReg8 (fd, 0x15, 0x3F) ; // Enable LEDs 12-17
+ wiringPiI2CWriteReg8 (fd, 0x16, 0x00) ; // Update
+
+ node = wiringPiNewNode (pinBase, 18) ;
+
+ node->fd = fd ;
+ node->analogWrite = myAnalogWrite ;
+
+ return 0 ;
+}
diff --git a/wiringPi/sn3218.h b/wiringPi/sn3218.h
new file mode 100644
index 0000000..580d5f9
--- /dev/null
+++ b/wiringPi/sn3218.h
@@ -0,0 +1,33 @@
+/*
+ * sn3218.c:
+ * Extend wiringPi with the SN3218 I2C LED driver board.
+ * Copyright (c) 2012-2013 Gordon Henderson
+ ***********************************************************************
+ * This file is part of wiringPi:
+ * https://projects.drogon.net/raspberry-pi/wiringpi/
+ *
+ * wiringPi is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * wiringPi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with wiringPi.
+ * If not, see .
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int sn3218Setup (int pinBase) ;
+
+#ifdef __cplusplus
+}
+#endif