Statistics
| Branch: | Revision:

ddr4s / fw / wiringPi / wiringPi / sn3218.c @ 32:cadb9025f1e0

History | View | Annotate | Download (2.33 KB)

1
/*
2
 * sn3218.c:
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/
8
 *
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.
13
 *
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.
18
 *
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
 ***********************************************************************
23
 */
24

    
25
#include <wiringPi.h>
26
#include <wiringPiI2C.h>
27

    
28
#include "sn3218.h"
29

    
30
/*
31
 * myAnalogWrite:
32
 *        Write analog value on the given pin
33
 *********************************************************************************
34
 */
35

    
36
static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value)
37
{
38
  int fd   = node->fd ;
39
  int chan = 0x01 + (pin - node->pinBase) ;
40
  
41
  wiringPiI2CWriteReg8 (fd, chan, value & 0xFF) ;        // Value
42
  wiringPiI2CWriteReg8 (fd, 0x16, 0x00) ;                // Update
43
}
44

    
45
/*
46
 * sn3218Setup:
47
 *        Create a new wiringPi device node for an sn3218 on the Pi's
48
 *        SPI interface.
49
 *********************************************************************************
50
 */
51

    
52
int sn3218Setup (const int pinBase)
53
{
54
  int fd ;
55
  struct wiringPiNodeStruct *node ;
56

    
57
  if ((fd = wiringPiI2CSetup (0x54)) < 0)
58
    return FALSE ;
59

    
60
// Setup the chip - initialise all 18 LEDs to off
61

    
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
68
  
69
  node = wiringPiNewNode (pinBase, 18) ;
70

    
71
  node->fd          = fd ;
72
  node->analogWrite = myAnalogWrite ;
73

    
74
  return TRUE ;
75
}