3 * Extend wiringPi with the SN3218 I2C LEd Driver
4 * Copyright (c) 2012-2013 Gordon Henderson
5 ***********************************************************************
6 * This file is part of wiringPi:
7 * https://projects.drogon.net/raspberry-pi/wiringpi/
9 * wiringPi is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU Lesser General Public License as
11 * published by the Free Software Foundation, either version 3 of the
12 * License, or (at your option) any later version.
14 * wiringPi is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with wiringPi.
21 * If not, see <http://www.gnu.org/licenses/>.
22 ***********************************************************************
26 #include <wiringPiI2C.h>
32 * Write analog value on the given pin
33 *********************************************************************************
36 static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value)
39 int chan = 0x01 + (pin - node->pinBase) ;
41 wiringPiI2CWriteReg8 (fd, chan, value & 0xFF) ; // Value
42 wiringPiI2CWriteReg8 (fd, 0x16, 0x00) ; // Update
47 * Create a new wiringPi device node for an sn3218 on the Pi's
49 *********************************************************************************
52 int sn3218Setup (const int pinBase)
55 struct wiringPiNodeStruct *node ;
57 if ((fd = wiringPiI2CSetup (0x54)) < 0)
60 // Setup the chip - initialise all 18 LEDs to off
62 //wiringPiI2CWriteReg8 (fd, 0x17, 0) ; // Reset
63 wiringPiI2CWriteReg8 (fd, 0x00, 1) ; // Not Shutdown
64 wiringPiI2CWriteReg8 (fd, 0x13, 0x3F) ; // Enable LEDs 0- 5
65 wiringPiI2CWriteReg8 (fd, 0x14, 0x3F) ; // Enable LEDs 6-11
66 wiringPiI2CWriteReg8 (fd, 0x15, 0x3F) ; // Enable LEDs 12-17
67 wiringPiI2CWriteReg8 (fd, 0x16, 0x00) ; // Update
69 node = wiringPiNewNode (pinBase, 18) ;
72 node->analogWrite = myAnalogWrite ;