From ea8f23253b76302060e06e7f0cd986692cedaf6d Mon Sep 17 00:00:00 2001
From: Franz Bethke <bethke@math.hu-berlin.de>
Date: Fri, 20 Apr 2018 18:32:14 +0200
Subject: [PATCH] Add Lib for USS-Usage

---
 modules/catkin_ws/src/wiringPi/COPYING.LESSER |  165 +
 modules/catkin_ws/src/wiringPi/INSTALL        |   36 +
 modules/catkin_ws/src/wiringPi/Makefile       |   22 +
 modules/catkin_ws/src/wiringPi/People         |   33 +
 modules/catkin_ws/src/wiringPi/README.TXT     |   26 +
 modules/catkin_ws/src/wiringPi/build          |  103 +
 .../catkin_ws/src/wiringPi/devLib/Makefile    |  134 +
 .../catkin_ws/src/wiringPi/devLib/ds1302.c    |  240 ++
 .../catkin_ws/src/wiringPi/devLib/ds1302.h    |   44 +
 .../catkin_ws/src/wiringPi/devLib/ds1302.o    |  Bin 0 -> 5088 bytes
 modules/catkin_ws/src/wiringPi/devLib/font.h  | 2577 ++++++++++++++
 .../catkin_ws/src/wiringPi/devLib/gertboard.c |  164 +
 .../catkin_ws/src/wiringPi/devLib/gertboard.h |   45 +
 .../catkin_ws/src/wiringPi/devLib/gertboard.o |  Bin 0 -> 2696 bytes
 modules/catkin_ws/src/wiringPi/devLib/lcd.c   |  495 +++
 modules/catkin_ws/src/wiringPi/devLib/lcd.h   |   52 +
 modules/catkin_ws/src/wiringPi/devLib/lcd.o   |  Bin 0 -> 7240 bytes
 .../catkin_ws/src/wiringPi/devLib/lcd128x64.c |  673 ++++
 .../catkin_ws/src/wiringPi/devLib/lcd128x64.h |   39 +
 .../catkin_ws/src/wiringPi/devLib/lcd128x64.o |  Bin 0 -> 11472 bytes
 .../src/wiringPi/devLib/libwiringPiDev.so.2.0 |  Bin 0 -> 31136 bytes
 .../catkin_ws/src/wiringPi/devLib/maxdetect.c |  165 +
 .../catkin_ws/src/wiringPi/devLib/maxdetect.h |   40 +
 .../catkin_ws/src/wiringPi/devLib/maxdetect.o |  Bin 0 -> 3312 bytes
 .../catkin_ws/src/wiringPi/devLib/piFace.c    |  112 +
 .../catkin_ws/src/wiringPi/devLib/piFace.h    |   32 +
 .../catkin_ws/src/wiringPi/devLib/piFace.o    |  Bin 0 -> 2376 bytes
 .../catkin_ws/src/wiringPi/devLib/piGlow.c    |  118 +
 .../catkin_ws/src/wiringPi/devLib/piGlow.h    |   45 +
 .../catkin_ws/src/wiringPi/devLib/piGlow.o    |  Bin 0 -> 2768 bytes
 modules/catkin_ws/src/wiringPi/devLib/piNes.c |  113 +
 modules/catkin_ws/src/wiringPi/devLib/piNes.h |   45 +
 modules/catkin_ws/src/wiringPi/devLib/piNes.o |  Bin 0 -> 2592 bytes
 .../src/wiringPi/examples/COPYING.LESSER      |  165 +
 .../wiringPi/examples/Gertboard/7segments.c   |  221 ++
 .../src/wiringPi/examples/Gertboard/Makefile  |   74 +
 .../src/wiringPi/examples/Gertboard/buttons.c |   83 +
 .../wiringPi/examples/Gertboard/gertboard.c   |   96 +
 .../src/wiringPi/examples/Gertboard/record.c  |   60 +
 .../wiringPi/examples/Gertboard/temperature.c |   78 +
 .../wiringPi/examples/Gertboard/voltmeter.c   |   73 +
 .../src/wiringPi/examples/Gertboard/vumeter.c |  152 +
 .../catkin_ws/src/wiringPi/examples/Makefile  |  168 +
 .../src/wiringPi/examples/PiFace/Makefile     |   85 +
 .../src/wiringPi/examples/PiFace/blink.c      |   59 +
 .../src/wiringPi/examples/PiFace/buttons.c    |  103 +
 .../src/wiringPi/examples/PiFace/ladder.c     |  337 ++
 .../src/wiringPi/examples/PiFace/metro.c      |  111 +
 .../src/wiringPi/examples/PiFace/motor.c      |  120 +
 .../src/wiringPi/examples/PiFace/reaction.c   |  194 +
 .../src/wiringPi/examples/PiGlow/Makefile     |   79 +
 .../src/wiringPi/examples/PiGlow/piGlow0.c    |   51 +
 .../src/wiringPi/examples/PiGlow/piGlow1.c    |  258 ++
 .../src/wiringPi/examples/PiGlow/piglow.c     |  176 +
 .../src/wiringPi/examples/README.TXT          |   18 +
 .../catkin_ws/src/wiringPi/examples/blink.c   |   48 +
 .../catkin_ws/src/wiringPi/examples/blink.rtb |   30 +
 .../catkin_ws/src/wiringPi/examples/blink.sh  |   37 +
 .../catkin_ws/src/wiringPi/examples/blink12.c |  111 +
 .../src/wiringPi/examples/blink12drcs.c       |  125 +
 .../src/wiringPi/examples/blink6drcs.c        |  115 +
 .../catkin_ws/src/wiringPi/examples/blink8.c  |   57 +
 .../catkin_ws/src/wiringPi/examples/clock.c   |  201 ++
 .../src/wiringPi/examples/delayTest.c         |  107 +
 .../catkin_ws/src/wiringPi/examples/ds1302.c  |  238 ++
 .../catkin_ws/src/wiringPi/examples/header.h  |   23 +
 .../catkin_ws/src/wiringPi/examples/isr-osc.c |  118 +
 modules/catkin_ws/src/wiringPi/examples/isr.c |  110 +
 .../src/wiringPi/examples/lcd-adafruit.c      |  347 ++
 modules/catkin_ws/src/wiringPi/examples/lcd.c |  286 ++
 .../src/wiringPi/examples/lowPower.c          |   68 +
 modules/catkin_ws/src/wiringPi/examples/nes.c |   67 +
 .../catkin_ws/src/wiringPi/examples/okLed.c   |   82 +
 modules/catkin_ws/src/wiringPi/examples/pwm.c |   58 +
 .../src/wiringPi/examples/q2w/Makefile        |   81 +
 .../src/wiringPi/examples/q2w/binary.c        |   79 +
 .../src/wiringPi/examples/q2w/blink-io.c      |   61 +
 .../src/wiringPi/examples/q2w/blink.c         |   50 +
 .../src/wiringPi/examples/q2w/blink.sh        |   37 +
 .../src/wiringPi/examples/q2w/bright.c        |   59 +
 .../src/wiringPi/examples/q2w/button.c        |   63 +
 .../src/wiringPi/examples/q2w/volts.c         |   62 +
 .../catkin_ws/src/wiringPi/examples/rht03.c   |   69 +
 .../src/wiringPi/examples/serialRead.c        |   48 +
 .../src/wiringPi/examples/serialTest.c        |   75 +
 .../catkin_ws/src/wiringPi/examples/servo.c   |   57 +
 .../catkin_ws/src/wiringPi/examples/softPwm.c |   89 +
 .../src/wiringPi/examples/softTone.c          |   54 +
 .../catkin_ws/src/wiringPi/examples/speed.c   |   95 +
 .../src/wiringPi/examples/spiSpeed.c          |  118 +
 modules/catkin_ws/src/wiringPi/examples/wfi.c |  161 +
 .../src/wiringPi/gpio/COPYING.LESSER          |  165 +
 modules/catkin_ws/src/wiringPi/gpio/Makefile  |   87 +
 .../catkin_ws/src/wiringPi/gpio/extensions.c  |  700 ++++
 .../catkin_ws/src/wiringPi/gpio/extensions.h  |   26 +
 .../catkin_ws/src/wiringPi/gpio/extensions.o  |  Bin 0 -> 12920 bytes
 modules/catkin_ws/src/wiringPi/gpio/gpio      |  Bin 0 -> 51680 bytes
 modules/catkin_ws/src/wiringPi/gpio/gpio.1    |  371 ++
 modules/catkin_ws/src/wiringPi/gpio/gpio.c    | 1477 ++++++++
 modules/catkin_ws/src/wiringPi/gpio/gpio.o    |  Bin 0 -> 40688 bytes
 modules/catkin_ws/src/wiringPi/gpio/pins.c    |   33 +
 modules/catkin_ws/src/wiringPi/gpio/pins.o    |  Bin 0 -> 1936 bytes
 modules/catkin_ws/src/wiringPi/gpio/pintest   |  193 +
 modules/catkin_ws/src/wiringPi/gpio/readall.c |  629 ++++
 modules/catkin_ws/src/wiringPi/gpio/readall.o |  Bin 0 -> 23736 bytes
 modules/catkin_ws/src/wiringPi/gpio/test.sh   |   44 +
 modules/catkin_ws/src/wiringPi/pins/Makefile  |   18 +
 modules/catkin_ws/src/wiringPi/pins/pins.pdf  |  Bin 0 -> 9833 bytes
 modules/catkin_ws/src/wiringPi/pins/pins.tex  |  116 +
 .../catkin_ws/src/wiringPi/postinstall-pak    |    7 +
 .../src/wiringPi/wiringPi/COPYING.LESSER      |  165 +
 .../catkin_ws/src/wiringPi/wiringPi/Makefile  |  193 +
 .../src/wiringPi/wiringPi/drcSerial.c         |  201 ++
 .../src/wiringPi/wiringPi/drcSerial.h         |   33 +
 .../src/wiringPi/wiringPi/drcSerial.o         |  Bin 0 -> 4480 bytes
 .../src/wiringPi/wiringPi/libwiringPi.so.2.0  |  Bin 0 -> 72448 bytes
 .../src/wiringPi/wiringPi/max31855.c          |   81 +
 .../src/wiringPi/wiringPi/max31855.h          |   33 +
 .../src/wiringPi/wiringPi/max31855.o          |  Bin 0 -> 2016 bytes
 .../catkin_ws/src/wiringPi/wiringPi/max5322.c |   84 +
 .../catkin_ws/src/wiringPi/wiringPi/max5322.h |   33 +
 .../catkin_ws/src/wiringPi/wiringPi/max5322.o |  Bin 0 -> 2088 bytes
 .../src/wiringPi/wiringPi/mcp23008.c          |  149 +
 .../src/wiringPi/wiringPi/mcp23008.h          |   33 +
 .../src/wiringPi/wiringPi/mcp23008.o          |  Bin 0 -> 2744 bytes
 .../src/wiringPi/wiringPi/mcp23016.c          |  164 +
 .../src/wiringPi/wiringPi/mcp23016.h          |   33 +
 .../src/wiringPi/wiringPi/mcp23016.o          |  Bin 0 -> 2656 bytes
 .../src/wiringPi/wiringPi/mcp23016reg.h       |   48 +
 .../src/wiringPi/wiringPi/mcp23017.c          |  195 +
 .../src/wiringPi/wiringPi/mcp23017.h          |   33 +
 .../src/wiringPi/wiringPi/mcp23017.o          |  Bin 0 -> 2928 bytes
 .../src/wiringPi/wiringPi/mcp23s08.c          |  189 +
 .../src/wiringPi/wiringPi/mcp23s08.h          |   33 +
 .../src/wiringPi/wiringPi/mcp23s08.o          |  Bin 0 -> 3360 bytes
 .../src/wiringPi/wiringPi/mcp23s17.c          |  236 ++
 .../src/wiringPi/wiringPi/mcp23s17.h          |   33 +
 .../src/wiringPi/wiringPi/mcp23s17.o          |  Bin 0 -> 3656 bytes
 .../src/wiringPi/wiringPi/mcp23x08.h          |   73 +
 .../src/wiringPi/wiringPi/mcp23x0817.h        |   87 +
 .../catkin_ws/src/wiringPi/wiringPi/mcp3002.c |   76 +
 .../catkin_ws/src/wiringPi/wiringPi/mcp3002.h |   33 +
 .../catkin_ws/src/wiringPi/wiringPi/mcp3002.o |  Bin 0 -> 1992 bytes
 .../catkin_ws/src/wiringPi/wiringPi/mcp3004.c |   76 +
 .../catkin_ws/src/wiringPi/wiringPi/mcp3004.h |   33 +
 .../catkin_ws/src/wiringPi/wiringPi/mcp3004.o |  Bin 0 -> 1992 bytes
 .../catkin_ws/src/wiringPi/wiringPi/mcp3422.c |  110 +
 .../catkin_ws/src/wiringPi/wiringPi/mcp3422.h |   43 +
 .../catkin_ws/src/wiringPi/wiringPi/mcp3422.o |  Bin 0 -> 2472 bytes
 .../catkin_ws/src/wiringPi/wiringPi/mcp4802.c |   76 +
 .../catkin_ws/src/wiringPi/wiringPi/mcp4802.h |   33 +
 .../catkin_ws/src/wiringPi/wiringPi/mcp4802.o |  Bin 0 -> 1992 bytes
 .../catkin_ws/src/wiringPi/wiringPi/pcf8574.c |  126 +
 .../catkin_ws/src/wiringPi/wiringPi/pcf8574.h |   33 +
 .../catkin_ws/src/wiringPi/wiringPi/pcf8574.o |  Bin 0 -> 2344 bytes
 .../catkin_ws/src/wiringPi/wiringPi/pcf8591.c |   90 +
 .../catkin_ws/src/wiringPi/wiringPi/pcf8591.h |   33 +
 .../catkin_ws/src/wiringPi/wiringPi/pcf8591.o |  Bin 0 -> 2240 bytes
 .../catkin_ws/src/wiringPi/wiringPi/piHiPri.c |   51 +
 .../catkin_ws/src/wiringPi/wiringPi/piHiPri.o |  Bin 0 -> 1792 bytes
 .../src/wiringPi/wiringPi/piThread.c          |   63 +
 .../src/wiringPi/wiringPi/piThread.o          |  Bin 0 -> 2080 bytes
 .../catkin_ws/src/wiringPi/wiringPi/sn3218.c  |   75 +
 .../catkin_ws/src/wiringPi/wiringPi/sn3218.h  |   33 +
 .../catkin_ws/src/wiringPi/wiringPi/sn3218.o  |  Bin 0 -> 2080 bytes
 .../catkin_ws/src/wiringPi/wiringPi/softPwm.c |  167 +
 .../catkin_ws/src/wiringPi/wiringPi/softPwm.h |   35 +
 .../catkin_ws/src/wiringPi/wiringPi/softPwm.o |  Bin 0 -> 3704 bytes
 .../src/wiringPi/wiringPi/softServo.c         |  211 ++
 .../src/wiringPi/wiringPi/softServo.h         |   35 +
 .../src/wiringPi/wiringPi/softTone.c          |  150 +
 .../src/wiringPi/wiringPi/softTone.h          |   39 +
 .../src/wiringPi/wiringPi/softTone.o          |  Bin 0 -> 3496 bytes
 .../catkin_ws/src/wiringPi/wiringPi/sr595.c   |  109 +
 .../catkin_ws/src/wiringPi/wiringPi/sr595.h   |   34 +
 .../catkin_ws/src/wiringPi/wiringPi/sr595.o   |  Bin 0 -> 2456 bytes
 .../src/wiringPi/wiringPi/wiringPi.c          | 3152 +++++++++++++++++
 .../src/wiringPi/wiringPi/wiringPi.h          |  229 ++
 .../src/wiringPi/wiringPi/wiringPi.o          |  Bin 0 -> 53744 bytes
 .../src/wiringPi/wiringPi/wiringPiI2C.c       |  240 ++
 .../src/wiringPi/wiringPi/wiringPiI2C.h       |   42 +
 .../src/wiringPi/wiringPi/wiringPiI2C.o       |  Bin 0 -> 4520 bytes
 .../src/wiringPi/wiringPi/wiringPiSPI.c       |  144 +
 .../src/wiringPi/wiringPi/wiringPiSPI.h       |   35 +
 .../src/wiringPi/wiringPi/wiringPiSPI.o       |  Bin 0 -> 4616 bytes
 .../src/wiringPi/wiringPi/wiringSerial.c      |  213 ++
 .../src/wiringPi/wiringPi/wiringSerial.h      |   38 +
 .../src/wiringPi/wiringPi/wiringSerial.o      |  Bin 0 -> 4504 bytes
 .../src/wiringPi/wiringPi/wiringShift.c       |   83 +
 .../src/wiringPi/wiringPi/wiringShift.h       |   41 +
 .../src/wiringPi/wiringPi/wiringShift.o       |  Bin 0 -> 2336 bytes
 191 files changed, 23741 insertions(+)
 create mode 100644 modules/catkin_ws/src/wiringPi/COPYING.LESSER
 create mode 100644 modules/catkin_ws/src/wiringPi/INSTALL
 create mode 100644 modules/catkin_ws/src/wiringPi/Makefile
 create mode 100644 modules/catkin_ws/src/wiringPi/People
 create mode 100644 modules/catkin_ws/src/wiringPi/README.TXT
 create mode 100755 modules/catkin_ws/src/wiringPi/build
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/Makefile
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/ds1302.c
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/ds1302.h
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/ds1302.o
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/font.h
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/gertboard.c
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/gertboard.h
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/gertboard.o
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/lcd.c
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/lcd.h
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/lcd.o
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/lcd128x64.c
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/lcd128x64.h
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/lcd128x64.o
 create mode 100755 modules/catkin_ws/src/wiringPi/devLib/libwiringPiDev.so.2.0
 create mode 100755 modules/catkin_ws/src/wiringPi/devLib/maxdetect.c
 create mode 100755 modules/catkin_ws/src/wiringPi/devLib/maxdetect.h
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/maxdetect.o
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/piFace.c
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/piFace.h
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/piFace.o
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/piGlow.c
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/piGlow.h
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/piGlow.o
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/piNes.c
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/piNes.h
 create mode 100644 modules/catkin_ws/src/wiringPi/devLib/piNes.o
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/COPYING.LESSER
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/Gertboard/7segments.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/Gertboard/Makefile
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/Gertboard/buttons.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/Gertboard/gertboard.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/Gertboard/record.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/Gertboard/temperature.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/Gertboard/voltmeter.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/Gertboard/vumeter.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/Makefile
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/PiFace/Makefile
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/PiFace/blink.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/PiFace/buttons.c
 create mode 100755 modules/catkin_ws/src/wiringPi/examples/PiFace/ladder.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/PiFace/metro.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/PiFace/motor.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/PiFace/reaction.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/PiGlow/Makefile
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/PiGlow/piGlow0.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/PiGlow/piGlow1.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/PiGlow/piglow.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/README.TXT
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/blink.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/blink.rtb
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/blink.sh
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/blink12.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/blink12drcs.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/blink6drcs.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/blink8.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/clock.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/delayTest.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/ds1302.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/header.h
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/isr-osc.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/isr.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/lcd-adafruit.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/lcd.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/lowPower.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/nes.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/okLed.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/pwm.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/q2w/Makefile
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/q2w/binary.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/q2w/blink-io.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/q2w/blink.c
 create mode 100755 modules/catkin_ws/src/wiringPi/examples/q2w/blink.sh
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/q2w/bright.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/q2w/button.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/q2w/volts.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/rht03.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/serialRead.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/serialTest.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/servo.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/softPwm.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/softTone.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/speed.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/spiSpeed.c
 create mode 100644 modules/catkin_ws/src/wiringPi/examples/wfi.c
 create mode 100644 modules/catkin_ws/src/wiringPi/gpio/COPYING.LESSER
 create mode 100644 modules/catkin_ws/src/wiringPi/gpio/Makefile
 create mode 100644 modules/catkin_ws/src/wiringPi/gpio/extensions.c
 create mode 100644 modules/catkin_ws/src/wiringPi/gpio/extensions.h
 create mode 100644 modules/catkin_ws/src/wiringPi/gpio/extensions.o
 create mode 100755 modules/catkin_ws/src/wiringPi/gpio/gpio
 create mode 100644 modules/catkin_ws/src/wiringPi/gpio/gpio.1
 create mode 100755 modules/catkin_ws/src/wiringPi/gpio/gpio.c
 create mode 100644 modules/catkin_ws/src/wiringPi/gpio/gpio.o
 create mode 100644 modules/catkin_ws/src/wiringPi/gpio/pins.c
 create mode 100644 modules/catkin_ws/src/wiringPi/gpio/pins.o
 create mode 100755 modules/catkin_ws/src/wiringPi/gpio/pintest
 create mode 100755 modules/catkin_ws/src/wiringPi/gpio/readall.c
 create mode 100644 modules/catkin_ws/src/wiringPi/gpio/readall.o
 create mode 100755 modules/catkin_ws/src/wiringPi/gpio/test.sh
 create mode 100644 modules/catkin_ws/src/wiringPi/pins/Makefile
 create mode 100644 modules/catkin_ws/src/wiringPi/pins/pins.pdf
 create mode 100644 modules/catkin_ws/src/wiringPi/pins/pins.tex
 create mode 100644 modules/catkin_ws/src/wiringPi/postinstall-pak
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/COPYING.LESSER
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/Makefile
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/drcSerial.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/drcSerial.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/drcSerial.o
 create mode 100755 modules/catkin_ws/src/wiringPi/wiringPi/libwiringPi.so.2.0
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/max31855.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/max31855.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/max31855.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/max5322.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/max5322.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/max5322.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23008.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23008.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23008.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23016.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23016.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23016.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23016reg.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23017.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23017.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23017.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23s08.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23s08.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23s08.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23s17.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23s17.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23s17.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23x08.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp23x0817.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp3002.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp3002.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp3002.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp3004.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp3004.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp3004.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp3422.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp3422.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp3422.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp4802.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp4802.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/mcp4802.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/pcf8574.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/pcf8574.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/pcf8574.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/pcf8591.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/pcf8591.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/pcf8591.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/piHiPri.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/piHiPri.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/piThread.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/piThread.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/sn3218.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/sn3218.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/sn3218.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/softPwm.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/softPwm.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/softPwm.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/softServo.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/softServo.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/softTone.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/softTone.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/softTone.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/sr595.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/sr595.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/sr595.o
 create mode 100755 modules/catkin_ws/src/wiringPi/wiringPi/wiringPi.c
 create mode 100755 modules/catkin_ws/src/wiringPi/wiringPi/wiringPi.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/wiringPi.o
 create mode 100755 modules/catkin_ws/src/wiringPi/wiringPi/wiringPiI2C.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/wiringPiI2C.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/wiringPiI2C.o
 create mode 100755 modules/catkin_ws/src/wiringPi/wiringPi/wiringPiSPI.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/wiringPiSPI.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/wiringPiSPI.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/wiringSerial.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/wiringSerial.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/wiringSerial.o
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/wiringShift.c
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/wiringShift.h
 create mode 100644 modules/catkin_ws/src/wiringPi/wiringPi/wiringShift.o

diff --git a/modules/catkin_ws/src/wiringPi/COPYING.LESSER b/modules/catkin_ws/src/wiringPi/COPYING.LESSER
new file mode 100644
index 00000000..65c5ca88
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/COPYING.LESSER
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/modules/catkin_ws/src/wiringPi/INSTALL b/modules/catkin_ws/src/wiringPi/INSTALL
new file mode 100644
index 00000000..8e0c43cf
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/INSTALL
@@ -0,0 +1,36 @@
+
+How to install wiringPi
+=======================
+
+The easiest way is to use the supplied 'build' script:
+
+  ./build
+
+that should do a complete install or upgrade of wiringPi for you.
+
+That will install a dynamic library.
+
+Some distributions do not have /usr/local/lib in the default LD_LIBRARY_PATH. To
+fix this, you need to edit /etc/ld.so.conf and add in a single line:
+
+  /usr/local/lib
+
+then run the ldconfig command.
+
+  sudo ldconfig
+
+If you want to install a static library, you may need to do this manually:
+
+  cd wiringPi
+  make static
+  sudo make install-static
+
+
+To un-install wiringPi:
+
+  ./build uninstall
+
+Gordon Henderson
+
+projects@drogon.net
+https://projects.drogon.net/
diff --git a/modules/catkin_ws/src/wiringPi/Makefile b/modules/catkin_ws/src/wiringPi/Makefile
new file mode 100644
index 00000000..a02d1a3b
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/Makefile
@@ -0,0 +1,22 @@
+clean:
+	make -C wiringPi clean
+	make -C devLib clean
+	make -C gpio clean
+	make -C examples clean
+	make -C examples/Gertboard clean
+	make -C examples/PiFace clean
+	make -C examples/q2w clean
+	make -C examples/PiGlow clean
+	
+install:
+	make -C wiringPi
+	make -C wiringPi install
+	make -C devLib
+	make -C devLib install
+	make -C gpio
+	make -C gpio install
+	mkdir -p /usr/share/wiringPi/examples/Gertboard
+	mkdir -p /usr/share/wiringPi/examples/PiFace
+	mkdir -p /usr/share/wiringPi/examples/PiGlow
+	mkdir -p /usr/share/wiringPi/examples/q2w
+	find examples -exec install -m 0644 -D -t /usr/share/wiringPi/examples {} \;
diff --git a/modules/catkin_ws/src/wiringPi/People b/modules/catkin_ws/src/wiringPi/People
new file mode 100644
index 00000000..b339494e
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/People
@@ -0,0 +1,33 @@
+
+Just a quick note to some people who've provided help, suggestions,
+bug-fixes, etc. along the way...
+
+Nick Lott: (And others)
+  Hints about making it work with C++
+
+Philipp Stefan Neininger:
+  Minor bug in the Makefile to do with cross compiling
+
+Chris McSweeny
+  Hints and tips about the use of arithmetic in gettimeofday()
+    inside the dealyMicrosecondsHard() function.
+  And spotting a couple of schoolboy errors in the (experimental)
+  softServo code, prompting me to completely re-write it.
+
+Armin (Via projects website)
+  Some pointers about the i2c-dev.h files.
+
+Arno Wagner
+  Suggestions for the mmap calls in wiringPiSetup()
+
+CHARLES Thibaut:
+  A small issue in softTone
+
+Xian Stannard
+  Fixing some typos in the man page!
+
+Andre Crone
+  Suggested the __WIRING_PI.H__ round wiringPi.h
+
+Rik Teerling
+  Pointing out some silly mistooks in the I2C code...
diff --git a/modules/catkin_ws/src/wiringPi/README.TXT b/modules/catkin_ws/src/wiringPi/README.TXT
new file mode 100644
index 00000000..7789b2eb
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/README.TXT
@@ -0,0 +1,26 @@
+
+wiringPi README
+===============
+
+Please note that the official way to get wiringPi is via git from
+git.drogon.net and not GitHub.
+
+ie.
+
+  git clone git://git.drogon.net/wiringPi
+
+The version of wiringPi held on GitHub by "Gadgetoid" is used to build the
+wiringPython, Ruby, Perl, etc. wrappers for these other languages. This
+version may lag the official Drogon release.  Pull requests may not be
+accepted to Github....
+
+Please see
+
+  http://wiringpi.com/
+
+for the official documentation, etc. and the best way to submit bug reports, etc.
+is by sending an email to projects@drogon.net
+
+Thanks!
+
+  -Gordon
diff --git a/modules/catkin_ws/src/wiringPi/build b/modules/catkin_ws/src/wiringPi/build
new file mode 100755
index 00000000..bac483a4
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/build
@@ -0,0 +1,103 @@
+#!/bin/sh
+
+check_make_ok() {
+  if [ $? != 0 ]; then
+    echo ""
+    echo "Make Failed..."
+    echo "Please check the messages and fix any problems. If you're still stuck,"
+    echo "then please email all the output and as many details as you can to"
+    echo "  projects@drogon.net"
+    echo ""
+    exit 1
+  fi
+}
+
+if [ x$1 = "xclean" ]; then
+  cd wiringPi
+  echo -n "wiringPi:   "	; make clean
+  cd ../devLib
+  echo -n "DevLib:     "	; make clean
+  cd ../gpio
+  echo -n "gpio:       "	; make clean
+  cd ../examples
+  echo -n "Examples:   "	; make clean
+  cd Gertboard
+  echo -n "Gertboard:  "	; make clean
+  cd ../PiFace
+  echo -n "PiFace:     "	; make clean
+  cd ../q2w
+  echo -n "Quick2Wire: "	; make clean
+  cd ../PiGlow
+  echo -n "PiGlow:     "	; make clean
+  exit
+fi
+
+if [ x$1 = "xuninstall" ]; then
+  cd wiringPi
+  echo -n "wiringPi: " ; sudo make uninstall
+  cd ../devLib
+  echo -n "DevLib:   " ; sudo make uninstall
+  cd ../gpio
+  echo -n "gpio:     " ; sudo make uninstall
+  exit
+fi
+
+
+  echo "wiringPi Build script"
+  echo "====================="
+  echo
+
+  echo
+  echo "WiringPi Library"
+  cd wiringPi
+  sudo make uninstall
+  if [ x$1 = "xstatic" ]; then
+    make static
+    check_make_ok
+    sudo make install-static
+  else
+    make
+    check_make_ok
+    sudo make install
+  fi
+  check_make_ok
+
+  echo
+  echo "WiringPi Devices Library"
+  cd ../devLib
+  sudo make uninstall
+  if [ x$1 = "xstatic" ]; then
+    make static
+    check_make_ok
+    sudo make install-static
+  else
+    make
+    check_make_ok
+    sudo make install
+  fi
+  check_make_ok
+
+  echo
+  echo "GPIO Utility"
+  cd ../gpio
+  make
+  check_make_ok
+  sudo make install
+  check_make_ok
+
+# echo
+# echo "Examples"
+# cd ../examples
+# make
+# cd ..
+
+echo
+echo All Done.
+echo ""
+echo "NOTE: To compile programs with wiringPi, you need to add:"
+echo "    -lwiringPi"
+echo "  to your compile line(s) To use the Gertboard, MaxDetect, etc."
+echo "  code (the devLib), you need to also add:"
+echo "    -lwiringPiDev"
+echo "  to your compile line(s)."
+echo ""
diff --git a/modules/catkin_ws/src/wiringPi/devLib/Makefile b/modules/catkin_ws/src/wiringPi/devLib/Makefile
new file mode 100644
index 00000000..4ba17746
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/Makefile
@@ -0,0 +1,134 @@
+# Makefile:
+#	wiringPi device - Wiring Compatable library for the Raspberry Pi
+#
+#	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 <http://www.gnu.org/licenses/>.
+#################################################################################
+
+DYN_VERS_MAJ=2
+DYN_VERS_MIN=0
+
+VERSION=$(DYN_VERS_MAJ).$(DYN_VERS_MIN)
+DESTDIR=/usr
+PREFIX=/local
+
+STATIC=libwiringPiDev.a
+DYNAMIC=libwiringPiDev.so.$(VERSION)
+
+#DEBUG	= -g -O0
+DEBUG	= -O2
+CC	= gcc
+INCLUDE	= -I.
+CFLAGS	= $(DEBUG) -Wformat=2 -Wall $(INCLUDE) -Winline -pipe -fPIC
+
+LIBS    =
+
+###############################################################################
+
+SRC	=	ds1302.c maxdetect.c  piNes.c		\
+		gertboard.c piFace.c			\
+		lcd128x64.c lcd.c			\
+		piGlow.c
+
+OBJ	=	$(SRC:.c=.o)
+
+all:		$(DYNAMIC)
+
+static:		$(STATIC)
+
+$(STATIC):	$(OBJ)
+	@echo "[Link (Static)]"
+	@ar rcs $(STATIC) $(OBJ)
+	@ranlib $(STATIC)
+#	@size   $(STATIC)
+
+$(DYNAMIC):	$(OBJ)
+	@echo "[Link (Dynamic)]"
+	@$(CC) -shared -Wl,-soname,libwiringPiDev.so -o libwiringPiDev.so.$(VERSION) -lpthread $(OBJ)
+
+.c.o:
+	@echo [Compile] $<
+	@$(CC) -c $(CFLAGS) $< -o $@
+
+.PHONY:	clean
+clean:
+	@echo "[Clean]"
+	@rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPiDev.*
+
+.PHONY:	tags
+tags:	$(SRC)
+	@echo [ctags]
+	@ctags $(SRC)
+
+
+.PHONY:	install-headers
+install-headers:
+	@echo "[Install Headers]"
+	@install -m 0755 -d			$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 ds1302.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 maxdetect.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 piNes.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 gertboard.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 piFace.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 lcd128x64.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 lcd.h			$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 piGlow.h		$(DESTDIR)$(PREFIX)/include
+
+.PHONY:	install
+install:	$(DYNAMIC) install-headers
+	@echo "[Install Dynamic Lib]"
+	@install -m 0755 -d						$(DESTDIR)$(PREFIX)/lib
+	@install -m 0755 libwiringPiDev.so.$(VERSION)			$(DESTDIR)$(PREFIX)/lib/libwiringPiDev.so.$(VERSION)
+	@ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPiDev.so.$(VERSION)	$(DESTDIR)/lib/libwiringPiDev.so
+	@ldconfig
+
+.PHONY:	install-static
+install-static:	$(STATIC) install-headers
+	@echo "[Install Static Lib]"
+	@install -m 0755 -d			$(DESTDIR)$(PREFIX)/lib
+	@install -m 0755 libwiringPiDev.a	$(DESTDIR)$(PREFIX)/lib
+
+.PHONY:	uninstall
+uninstall:
+	@echo "[UnInstall]"
+	@rm -f $(DESTDIR)$(PREFIX)/include/ds1302.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/maxdetect.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/piNes.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/gertboard.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/piFace.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/lcd128x64.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/lcd.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/piGlow.h
+	@rm -f $(DESTDIR)$(PREFIX)/lib/libwiringPiDev.*
+	@ldconfig
+
+
+.PHONY:	depend
+depend:
+	makedepend -Y $(SRC)
+
+# DO NOT DELETE
+
+ds1302.o: ds1302.h
+maxdetect.o: maxdetect.h
+piNes.o: piNes.h
+gertboard.o: gertboard.h
+piFace.o: piFace.h
+lcd128x64.o: font.h lcd128x64.h
+lcd.o: lcd.h
+piGlow.o: piGlow.h
diff --git a/modules/catkin_ws/src/wiringPi/devLib/ds1302.c b/modules/catkin_ws/src/wiringPi/devLib/ds1302.c
new file mode 100644
index 00000000..cf64de77
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/ds1302.c
@@ -0,0 +1,240 @@
+/*
+ * ds1302.c:
+ *	Real Time clock
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdarg.h>
+
+#include <wiringPi.h>
+
+#include "ds1302.h"
+
+// Register defines
+
+#define	RTC_SECS	 0
+#define	RTC_MINS	 1
+#define	RTC_HOURS	 2
+#define	RTC_DATE	 3
+#define	RTC_MONTH	 4
+#define	RTC_DAY		 5
+#define	RTC_YEAR	 6
+#define	RTC_WP		 7
+#define	RTC_TC		 8
+#define	RTC_BM		31
+
+
+// Locals
+
+static int dPin, cPin, sPin ;
+
+/*
+ * dsShiftIn:
+ *	Shift a number in from the chip, LSB first. Note that the data is
+ *	sampled on the trailing edge of the last clock, so it's valid immediately.
+ *********************************************************************************
+ */
+
+static unsigned int dsShiftIn (void)
+{
+  uint8_t value = 0 ;
+  int i ;
+
+  pinMode (dPin, INPUT) ;	delayMicroseconds (1) ;
+
+  for (i = 0 ; i < 8 ; ++i)
+  {
+    value |= (digitalRead (dPin) << i) ;
+    digitalWrite (cPin, HIGH) ; delayMicroseconds (1) ;
+    digitalWrite (cPin, LOW) ;	delayMicroseconds (1) ;
+  }
+
+  return value;
+}
+
+
+/*
+ * dsShiftOut:
+ *	A normal LSB-first shift-out, just slowed down a bit - the Pi is
+ *	a bit faster than the chip can handle.
+ *********************************************************************************
+ */
+
+static void dsShiftOut (unsigned int data)
+{
+  int i ;
+
+  pinMode (dPin, OUTPUT) ;
+
+  for (i = 0 ; i < 8 ; ++i)
+  {
+    digitalWrite (dPin, data & (1 << i)) ;	delayMicroseconds (1) ;
+    digitalWrite (cPin, HIGH) ;			delayMicroseconds (1) ;
+    digitalWrite (cPin, LOW) ;			delayMicroseconds (1) ;
+  }
+}
+
+
+/*
+ * ds1302regRead: ds1302regWrite:
+ *	Read/Write a value to an RTC Register or RAM location on the chip
+ *********************************************************************************
+ */
+
+static unsigned int ds1302regRead (const int reg)
+{
+  unsigned int data ;
+
+  digitalWrite (sPin, HIGH) ; delayMicroseconds (1) ;
+    dsShiftOut (reg) ;
+    data = dsShiftIn () ;
+  digitalWrite (sPin, LOW)  ; delayMicroseconds (1) ;
+
+  return data ;
+}
+
+static void ds1302regWrite (const int reg, const unsigned int data)
+{
+  digitalWrite (sPin, HIGH) ; delayMicroseconds (1) ;
+    dsShiftOut (reg) ;
+    dsShiftOut (data) ;
+  digitalWrite (sPin, LOW)  ; delayMicroseconds (1) ;
+}
+
+
+/*
+ * ds1302rtcWrite: ds1302rtcRead:
+ *	Writes/Reads the data to/from the RTC register
+ *********************************************************************************
+ */
+
+unsigned int ds1302rtcRead (const int reg)
+{
+  return ds1302regRead (0x81 | ((reg & 0x1F) << 1)) ;
+}
+
+void ds1302rtcWrite (int reg, unsigned int data)
+{
+  ds1302regWrite (0x80 | ((reg & 0x1F) << 1), data) ;
+}
+
+
+/*
+ * ds1302ramWrite: ds1302ramRead:
+ *	Writes/Reads the data to/from the RTC register
+ *********************************************************************************
+ */
+
+unsigned int ds1302ramRead (const int addr)
+{
+  return ds1302regRead (0xC1 | ((addr & 0x1F) << 1)) ;
+}
+
+void ds1302ramWrite (const int addr, const unsigned int data)
+{
+  ds1302regWrite ( 0xC0 | ((addr & 0x1F) << 1), data) ;
+}
+
+/*
+ * ds1302clockRead:
+ *	Read all 8 bytes of the clock in a single operation
+ *********************************************************************************
+ */
+
+void ds1302clockRead (int clockData [8])
+{
+  int i ;
+  unsigned int regVal = 0x81 | ((RTC_BM & 0x1F) << 1) ;
+
+  digitalWrite (sPin, HIGH) ; delayMicroseconds (1) ;
+
+  dsShiftOut (regVal) ;
+  for (i = 0 ; i < 8 ; ++i)
+    clockData [i] = dsShiftIn () ;
+
+  digitalWrite (sPin, LOW) ;  delayMicroseconds (1) ;
+}
+
+
+/*
+ * ds1302clockWrite:
+ *	Write all 8 bytes of the clock in a single operation
+ *********************************************************************************
+ */
+
+void ds1302clockWrite (const int clockData [8])
+{
+  int i ;
+  unsigned int regVal = 0x80 | ((RTC_BM & 0x1F) << 1) ;
+
+  digitalWrite (sPin, HIGH) ; delayMicroseconds (1) ;
+
+  dsShiftOut (regVal) ;
+  for (i = 0 ; i < 8 ; ++i)
+    dsShiftOut (clockData [i]) ;
+
+  digitalWrite (sPin, LOW) ;  delayMicroseconds (1) ;
+}
+
+
+/*
+ * ds1302trickleCharge:
+ *	Set the bits on the trickle charger.
+ *	Probably best left alone...
+ *********************************************************************************
+ */
+
+void ds1302trickleCharge (const int diodes, const int resistors)
+{
+  if (diodes + resistors == 0)
+    ds1302rtcWrite (RTC_TC, 0x5C) ;	// Disabled
+  else
+    ds1302rtcWrite (RTC_TC, 0xA0 | ((diodes & 3) << 2) | (resistors & 3)) ;
+}
+
+
+
+
+/*
+ * ds1302setup:
+ *	Initialise the chip & remember the pins we're using
+ *********************************************************************************
+ */
+
+void ds1302setup (const int clockPin, const int dataPin, const int csPin)
+{
+  dPin = dataPin ;
+  cPin = clockPin ;
+  sPin = csPin ;
+
+  digitalWrite (dPin, LOW) ;
+  digitalWrite (cPin, LOW) ;
+  digitalWrite (sPin, LOW) ;
+
+  pinMode (dPin, OUTPUT) ;
+  pinMode (cPin, OUTPUT) ;
+  pinMode (sPin, OUTPUT) ;
+
+  ds1302rtcWrite (RTC_WP, 0) ;	// Remove write-protect
+}
diff --git a/modules/catkin_ws/src/wiringPi/devLib/ds1302.h b/modules/catkin_ws/src/wiringPi/devLib/ds1302.h
new file mode 100644
index 00000000..e82b3ed0
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/ds1302.h
@@ -0,0 +1,44 @@
+/*
+ * ds1302.h:
+ *	Real Time clock
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern unsigned int ds1302rtcRead       (const int reg) ;
+extern void         ds1302rtcWrite      (const int reg, const unsigned int data) ;
+
+extern unsigned int ds1302ramRead       (const int addr) ;
+extern void         ds1302ramWrite      (const int addr, const unsigned int data) ;
+
+extern void         ds1302clockRead     (int clockData [8]) ;
+extern void         ds1302clockWrite    (const int clockData [8]) ;
+
+extern void         ds1302trickleCharge (const int diodes, const int resistors) ;
+
+extern void         ds1302setup         (const int clockPin, const int dataPin, const int csPin) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/devLib/ds1302.o b/modules/catkin_ws/src/wiringPi/devLib/ds1302.o
new file mode 100644
index 0000000000000000000000000000000000000000..ef4586fb29150252ddae1d0741bfe0de56053272
GIT binary patch
literal 5088
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

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/devLib/font.h b/modules/catkin_ws/src/wiringPi/devLib/font.h
new file mode 100644
index 00000000..ce99e168
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/font.h
@@ -0,0 +1,2577 @@
+/**********************************************/
+/*                                            */
+/*       Font file generated by cpi2fnt       */
+/*       ------------------------------       */
+/*       Combined with the alpha-numeric      */
+/*       portion of Greg Harp's old PEARL     */
+/*       font (from earlier versions of       */
+/*       linux-m86k) by John Shifflett        */
+/*                                            */
+/**********************************************/
+
+static const int fontHeight = 8 ;
+static const int fontWidth  = 8 ;
+
+static unsigned char font [] =
+{
+   /* 0 0x00 '^@' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 1 0x01 '^A' */
+   0x7e, /* 01111110 */
+   0x81, /* 10000001 */
+   0xa5, /* 10100101 */
+   0x81, /* 10000001 */
+   0xbd, /* 10111101 */
+   0x99, /* 10011001 */
+   0x81, /* 10000001 */
+   0x7e, /* 01111110 */
+
+   /* 2 0x02 '^B' */
+   0x7e, /* 01111110 */
+   0xff, /* 11111111 */
+   0xdb, /* 11011011 */
+   0xff, /* 11111111 */
+   0xc3, /* 11000011 */
+   0xe7, /* 11100111 */
+   0xff, /* 11111111 */
+   0x7e, /* 01111110 */
+
+   /* 3 0x03 '^C' */
+   0x6c, /* 01101100 */
+   0xfe, /* 11111110 */
+   0xfe, /* 11111110 */
+   0xfe, /* 11111110 */
+   0x7c, /* 01111100 */
+   0x38, /* 00111000 */
+   0x10, /* 00010000 */
+   0x00, /* 00000000 */
+
+   /* 4 0x04 '^D' */
+   0x10, /* 00010000 */
+   0x38, /* 00111000 */
+   0x7c, /* 01111100 */
+   0xfe, /* 11111110 */
+   0x7c, /* 01111100 */
+   0x38, /* 00111000 */
+   0x10, /* 00010000 */
+   0x00, /* 00000000 */
+
+   /* 5 0x05 '^E' */
+   0x38, /* 00111000 */
+   0x7c, /* 01111100 */
+   0x38, /* 00111000 */
+   0xfe, /* 11111110 */
+   0xfe, /* 11111110 */
+   0xd6, /* 11010110 */
+   0x10, /* 00010000 */
+   0x38, /* 00111000 */
+
+   /* 6 0x06 '^F' */
+   0x10, /* 00010000 */
+   0x38, /* 00111000 */
+   0x7c, /* 01111100 */
+   0xfe, /* 11111110 */
+   0xfe, /* 11111110 */
+   0x7c, /* 01111100 */
+   0x10, /* 00010000 */
+   0x38, /* 00111000 */
+
+   /* 7 0x07 '^G' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 8 0x08 '^H' */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0xe7, /* 11100111 */
+   0xc3, /* 11000011 */
+   0xc3, /* 11000011 */
+   0xe7, /* 11100111 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+
+   /* 9 0x09 '^I' */
+   0x00, /* 00000000 */
+   0x3c, /* 00111100 */
+   0x66, /* 01100110 */
+   0x42, /* 01000010 */
+   0x42, /* 01000010 */
+   0x66, /* 01100110 */
+   0x3c, /* 00111100 */
+   0x00, /* 00000000 */
+
+   /* 10 0x0a '^J' */
+   0xff, /* 11111111 */
+   0xc3, /* 11000011 */
+   0x99, /* 10011001 */
+   0xbd, /* 10111101 */
+   0xbd, /* 10111101 */
+   0x99, /* 10011001 */
+   0xc3, /* 11000011 */
+   0xff, /* 11111111 */
+
+   /* 11 0x0b '^K' */
+   0x0f, /* 00001111 */
+   0x07, /* 00000111 */
+   0x0f, /* 00001111 */
+   0x7d, /* 01111101 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0x78, /* 01111000 */
+
+   /* 12 0x0c '^L' */
+   0x3c, /* 00111100 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+
+   /* 13 0x0d '^M' */
+   0x3f, /* 00111111 */
+   0x33, /* 00110011 */
+   0x3f, /* 00111111 */
+   0x30, /* 00110000 */
+   0x30, /* 00110000 */
+   0x70, /* 01110000 */
+   0xf0, /* 11110000 */
+   0xe0, /* 11100000 */
+
+   /* 14 0x0e '^N' */
+   0x7f, /* 01111111 */
+   0x63, /* 01100011 */
+   0x7f, /* 01111111 */
+   0x63, /* 01100011 */
+   0x63, /* 01100011 */
+   0x67, /* 01100111 */
+   0xe6, /* 11100110 */
+   0xc0, /* 11000000 */
+
+   /* 15 0x0f '^O' */
+   0x18, /* 00011000 */
+   0xdb, /* 11011011 */
+   0x3c, /* 00111100 */
+   0xe7, /* 11100111 */
+   0xe7, /* 11100111 */
+   0x3c, /* 00111100 */
+   0xdb, /* 11011011 */
+   0x18, /* 00011000 */
+
+   /* 16 0x10 '^P' */
+   0x80, /* 10000000 */
+   0xe0, /* 11100000 */
+   0xf8, /* 11111000 */
+   0xfe, /* 11111110 */
+   0xf8, /* 11111000 */
+   0xe0, /* 11100000 */
+   0x80, /* 10000000 */
+   0x00, /* 00000000 */
+
+   /* 17 0x11 '^Q' */
+   0x02, /* 00000010 */
+   0x0e, /* 00001110 */
+   0x3e, /* 00111110 */
+   0xfe, /* 11111110 */
+   0x3e, /* 00111110 */
+   0x0e, /* 00001110 */
+   0x02, /* 00000010 */
+   0x00, /* 00000000 */
+
+   /* 18 0x12 '^R' */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x7e, /* 01111110 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+
+   /* 19 0x13 '^S' */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x00, /* 00000000 */
+   0x66, /* 01100110 */
+   0x00, /* 00000000 */
+
+   /* 20 0x14 '^T' */
+   0x7f, /* 01111111 */
+   0xdb, /* 11011011 */
+   0xdb, /* 11011011 */
+   0x7b, /* 01111011 */
+   0x1b, /* 00011011 */
+   0x1b, /* 00011011 */
+   0x1b, /* 00011011 */
+   0x00, /* 00000000 */
+
+   /* 21 0x15 '^U' */
+   0x3e, /* 00111110 */
+   0x61, /* 01100001 */
+   0x3c, /* 00111100 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x3c, /* 00111100 */
+   0x86, /* 10000110 */
+   0x7c, /* 01111100 */
+
+   /* 22 0x16 '^V' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0x7e, /* 01111110 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+
+   /* 23 0x17 '^W' */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x7e, /* 01111110 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0xff, /* 11111111 */
+
+   /* 24 0x18 '^X' */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 25 0x19 '^Y' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x7e, /* 01111110 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 26 0x1a '^Z' */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x0c, /* 00001100 */
+   0xfe, /* 11111110 */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 27 0x1b '^[' */
+   0x00, /* 00000000 */
+   0x30, /* 00110000 */
+   0x60, /* 01100000 */
+   0xfe, /* 11111110 */
+   0x60, /* 01100000 */
+   0x30, /* 00110000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 28 0x1c '^\' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 29 0x1d '^]' */
+   0x00, /* 00000000 */
+   0x24, /* 00100100 */
+   0x66, /* 01100110 */
+   0xff, /* 11111111 */
+   0x66, /* 01100110 */
+   0x24, /* 00100100 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 30 0x1e '^^' */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x7e, /* 01111110 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 31 0x1f '^_' */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0x7e, /* 01111110 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 32 0x20 ' ' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 33 0x21 '!' */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x3c, /* 00111100 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 34 0x22 '"' */
+   0x6c, /* 01101100 */
+   0x6c, /* 01101100 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 35 0x23 '#' */
+   0x6c, /* 01101100 */
+   0x6c, /* 01101100 */
+   0xfe, /* 11111110 */
+   0x6c, /* 01101100 */
+   0xfe, /* 11111110 */
+   0x6c, /* 01101100 */
+   0x6c, /* 01101100 */
+   0x00, /* 00000000 */
+
+   /* 36 0x24 '$' */
+   0x18, /* 00011000 */
+   0x3e, /* 00111110 */
+   0x60, /* 01100000 */
+   0x3c, /* 00111100 */
+   0x06, /* 00000110 */
+   0x7c, /* 01111100 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 37 0x25 '%' */
+   0x00, /* 00000000 */
+   0xc6, /* 11000110 */
+   0xcc, /* 11001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x66, /* 01100110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 38 0x26 '&' */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0x68, /* 01101000 */
+   0x76, /* 01110110 */
+   0xdc, /* 11011100 */
+   0xcc, /* 11001100 */
+   0x76, /* 01110110 */
+   0x00, /* 00000000 */
+
+   /* 39 0x27 ''' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 40 0x28 '(' */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x30, /* 00110000 */
+   0x30, /* 00110000 */
+   0x18, /* 00011000 */
+   0x0c, /* 00001100 */
+   0x00, /* 00000000 */
+
+   /* 41 0x29 ')' */
+   0x30, /* 00110000 */
+   0x18, /* 00011000 */
+   0x0c, /* 00001100 */
+   0x0c, /* 00001100 */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x00, /* 00000000 */
+
+   /* 42 0x2a '*' */
+   0x00, /* 00000000 */
+   0x66, /* 01100110 */
+   0x3c, /* 00111100 */
+   0xff, /* 11111111 */
+   0x3c, /* 00111100 */
+   0x66, /* 01100110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 43 0x2b '+' */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 44 0x2c ',' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+
+   /* 45 0x2d '-' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 46 0x2e '.' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 47 0x2f '/' */
+   0x03, /* 00000011 */
+   0x06, /* 00000110 */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x60, /* 01100000 */
+   0xc0, /* 11000000 */
+   0x00, /* 00000000 */
+
+   /* 48 0x30 '0' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xde, /* 11011110 */
+   0xfe, /* 11111110 */
+   0xf6, /* 11110110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 49 0x31 '1' */
+   0x18, /* 00011000 */
+   0x78, /* 01111000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 50 0x32 '2' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x60, /* 01100000 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+
+   /* 51 0x33 '3' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0x06, /* 00000110 */
+   0x1c, /* 00011100 */
+   0x06, /* 00000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 52 0x34 '4' */
+   0x1c, /* 00011100 */
+   0x3c, /* 00111100 */
+   0x6c, /* 01101100 */
+   0xcc, /* 11001100 */
+   0xfe, /* 11111110 */
+   0x0c, /* 00001100 */
+   0x0c, /* 00001100 */
+   0x00, /* 00000000 */
+
+   /* 53 0x35 '5' */
+   0xfe, /* 11111110 */
+   0xc0, /* 11000000 */
+   0xfc, /* 11111100 */
+   0x06, /* 00000110 */
+   0x06, /* 00000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 54 0x36 '6' */
+   0x38, /* 00111000 */
+   0x60, /* 01100000 */
+   0xc0, /* 11000000 */
+   0xfc, /* 11111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 55 0x37 '7' */
+   0xfe, /* 11111110 */
+   0x06, /* 00000110 */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x60, /* 01100000 */
+   0x60, /* 01100000 */
+   0x00, /* 00000000 */
+
+   /* 56 0x38 '8' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 57 0x39 '9' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7e, /* 01111110 */
+   0x06, /* 00000110 */
+   0x0c, /* 00001100 */
+   0x38, /* 00111000 */
+   0x00, /* 00000000 */
+
+   /* 58 0x3a ':' */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 59 0x3b ';' */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+
+   /* 60 0x3c '<' */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x60, /* 01100000 */
+   0x30, /* 00110000 */
+   0x18, /* 00011000 */
+   0x0c, /* 00001100 */
+   0x00, /* 00000000 */
+
+   /* 61 0x3d '=' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 62 0x3e '>' */
+   0x30, /* 00110000 */
+   0x18, /* 00011000 */
+   0x0c, /* 00001100 */
+   0x06, /* 00000110 */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x00, /* 00000000 */
+
+   /* 63 0x3f '?' */
+   0x3c, /* 00111100 */
+   0x66, /* 01100110 */
+   0x06, /* 00000110 */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 64 0x40 '@' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xde, /* 11011110 */
+   0xde, /* 11011110 */
+   0xde, /* 11011110 */
+   0xc0, /* 11000000 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 65 0x41 'A' */
+   0x10, /* 00010000 */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 66 0x42 'B' */
+   0xfc, /* 11111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xfc, /* 11111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xfc, /* 11111100 */
+   0x00, /* 00000000 */
+
+   /* 67 0x43 'C' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 68 0x44 'D' */
+   0xfc, /* 11111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xfc, /* 11111100 */
+   0x00, /* 00000000 */
+
+   /* 69 0x45 'E' */
+   0xfe, /* 11111110 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xf8, /* 11111000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+
+   /* 70 0x46 'F' */
+   0xfe, /* 11111110 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xf8, /* 11111000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0x00, /* 00000000 */
+
+   /* 71 0x47 'G' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc0, /* 11000000 */
+   0xce, /* 11001110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 72 0x48 'H' */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 73 0x49 'I' */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+
+   /* 74 0x4a 'J' */
+   0x06, /* 00000110 */
+   0x06, /* 00000110 */
+   0x06, /* 00000110 */
+   0x06, /* 00000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 75 0x4b 'K' */
+   0xc6, /* 11000110 */
+   0xcc, /* 11001100 */
+   0xd8, /* 11011000 */
+   0xf0, /* 11110000 */
+   0xd8, /* 11011000 */
+   0xcc, /* 11001100 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 76 0x4c 'L' */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+
+   /* 77 0x4d 'M' */
+   0x82, /* 10000010 */
+   0xc6, /* 11000110 */
+   0xee, /* 11101110 */
+   0xfe, /* 11111110 */
+   0xd6, /* 11010110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 78 0x4e 'N' */
+   0xc6, /* 11000110 */
+   0xe6, /* 11100110 */
+   0xf6, /* 11110110 */
+   0xde, /* 11011110 */
+   0xce, /* 11001110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 79 0x4f 'O' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 80 0x50 'P' */
+   0xfc, /* 11111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xfc, /* 11111100 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0x00, /* 00000000 */
+
+   /* 81 0x51 'Q' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xf6, /* 11110110 */
+   0xde, /* 11011110 */
+   0x7c, /* 01111100 */
+   0x06, /* 00000110 */
+
+   /* 82 0x52 'R' */
+   0xfc, /* 11111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xfc, /* 11111100 */
+   0xd8, /* 11011000 */
+   0xcc, /* 11001100 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 83 0x53 'S' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0x60, /* 01100000 */
+   0x38, /* 00111000 */
+   0x0c, /* 00001100 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 84 0x54 'T' */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 85 0x55 'U' */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 86 0x56 'V' */
+   0xc3, /* 11000011 */
+   0xc3, /* 11000011 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x3c, /* 00111100 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 87 0x57 'W' */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xd6, /* 11010110 */
+   0xfe, /* 11111110 */
+   0xee, /* 11101110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 88 0x58 'X' */
+   0xc3, /* 11000011 */
+   0x66, /* 01100110 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x66, /* 01100110 */
+   0xc3, /* 11000011 */
+   0x00, /* 00000000 */
+
+   /* 89 0x59 'Y' */
+   0xc3, /* 11000011 */
+   0xc3, /* 11000011 */
+   0x66, /* 01100110 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 90 0x5a 'Z' */
+   0xfe, /* 11111110 */
+   0x06, /* 00000110 */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x60, /* 01100000 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+
+   /* 91 0x5b '[' */
+   0x3c, /* 00111100 */
+   0x30, /* 00110000 */
+   0x30, /* 00110000 */
+   0x30, /* 00110000 */
+   0x30, /* 00110000 */
+   0x30, /* 00110000 */
+   0x3c, /* 00111100 */
+   0x00, /* 00000000 */
+
+   /* 92 0x5c '\' */
+   0xc0, /* 11000000 */
+   0x60, /* 01100000 */
+   0x30, /* 00110000 */
+   0x18, /* 00011000 */
+   0x0c, /* 00001100 */
+   0x06, /* 00000110 */
+   0x03, /* 00000011 */
+   0x00, /* 00000000 */
+
+   /* 93 0x5d ']' */
+   0x3c, /* 00111100 */
+   0x0c, /* 00001100 */
+   0x0c, /* 00001100 */
+   0x0c, /* 00001100 */
+   0x0c, /* 00001100 */
+   0x0c, /* 00001100 */
+   0x3c, /* 00111100 */
+   0x00, /* 00000000 */
+
+   /* 94 0x5e '^' */
+   0x10, /* 00010000 */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 95 0x5f '_' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xfe, /* 11111110 */
+
+   /* 96 0x60 '`' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x0c, /* 00001100 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 97 0x61 'a' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7c, /* 01111100 */
+   0x06, /* 00000110 */
+   0x7e, /* 01111110 */
+   0xc6, /* 11000110 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+
+   /* 98 0x62 'b' */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xfc, /* 11111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xfc, /* 11111100 */
+   0x00, /* 00000000 */
+
+   /* 99 0x63 'c' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc0, /* 11000000 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 100 0x64 'd' */
+   0x06, /* 00000110 */
+   0x06, /* 00000110 */
+   0x7e, /* 01111110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+
+   /* 101 0x65 'e' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0xc0, /* 11000000 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 102 0x66 'f' */
+   0x3c, /* 00111100 */
+   0x66, /* 01100110 */
+   0x60, /* 01100000 */
+   0xf0, /* 11110000 */
+   0x60, /* 01100000 */
+   0x60, /* 01100000 */
+   0x60, /* 01100000 */
+   0x00, /* 00000000 */
+
+   /* 103 0x67 'g' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7e, /* 01111110 */
+   0x06, /* 00000110 */
+   0x7c, /* 01111100 */
+
+   /* 104 0x68 'h' */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xfc, /* 11111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 105 0x69 'i' */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x38, /* 00111000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 106 0x6a 'j' */
+   0x06, /* 00000110 */
+   0x00, /* 00000000 */
+   0x06, /* 00000110 */
+   0x06, /* 00000110 */
+   0x06, /* 00000110 */
+   0x06, /* 00000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+
+   /* 107 0x6b 'k' */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xcc, /* 11001100 */
+   0xd8, /* 11011000 */
+   0xf0, /* 11110000 */
+   0xd8, /* 11011000 */
+   0xcc, /* 11001100 */
+   0x00, /* 00000000 */
+
+   /* 108 0x6c 'l' */
+   0x38, /* 00111000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 109 0x6d 'm' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xec, /* 11101100 */
+   0xfe, /* 11111110 */
+   0xd6, /* 11010110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 110 0x6e 'n' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xfc, /* 11111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 111 0x6f 'o' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 112 0x70 'p' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xfc, /* 11111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xfc, /* 11111100 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+
+   /* 113 0x71 'q' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7e, /* 01111110 */
+   0x06, /* 00000110 */
+   0x06, /* 00000110 */
+
+   /* 114 0x72 'r' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xdc, /* 11011100 */
+   0xe6, /* 11100110 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0x00, /* 00000000 */
+
+   /* 115 0x73 's' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0xc0, /* 11000000 */
+   0x7c, /* 01111100 */
+   0x06, /* 00000110 */
+   0xfc, /* 11111100 */
+   0x00, /* 00000000 */
+
+   /* 116 0x74 't' */
+   0x30, /* 00110000 */
+   0x30, /* 00110000 */
+   0x7c, /* 01111100 */
+   0x30, /* 00110000 */
+   0x30, /* 00110000 */
+   0x36, /* 00110110 */
+   0x1c, /* 00011100 */
+   0x00, /* 00000000 */
+
+   /* 117 0x75 'u' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 118 0x76 'v' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x6c, /* 01101100 */
+   0x38, /* 00111000 */
+   0x00, /* 00000000 */
+
+   /* 119 0x77 'w' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xd6, /* 11010110 */
+   0xfe, /* 11111110 */
+   0x6c, /* 01101100 */
+   0x00, /* 00000000 */
+
+   /* 120 0x78 'x' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xc6, /* 11000110 */
+   0x6c, /* 01101100 */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 121 0x79 'y' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xc3, /* 11000011 */
+   0x66, /* 01100110 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x60, /* 01100000 */
+
+   /* 122 0x7a 'z' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xfe, /* 11111110 */
+   0x0c, /* 00001100 */
+   0x38, /* 00111000 */
+   0x60, /* 01100000 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+
+   /* 123 0x7b '{' */
+   0x0e, /* 00001110 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x70, /* 01110000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x0e, /* 00001110 */
+   0x00, /* 00000000 */
+
+   /* 124 0x7c '|' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 125 0x7d '}' */
+   0x70, /* 01110000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x0e, /* 00001110 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x70, /* 01110000 */
+   0x00, /* 00000000 */
+
+   /* 126 0x7e '~' */
+   0x72, /* 01110010 */
+   0x9c, /* 10011100 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 127 0x7f '' */
+   0x00, /* 00000000 */
+   0x10, /* 00010000 */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+
+   /* 128 0x80 '€' */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x0c, /* 00001100 */
+   0x78, /* 01111000 */
+
+   /* 129 0x81 '' */
+   0xcc, /* 11001100 */
+   0x00, /* 00000000 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0x76, /* 01110110 */
+   0x00, /* 00000000 */
+
+   /* 130 0x82 '‚' */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0xc0, /* 11000000 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 131 0x83 'ƒ' */
+   0x7c, /* 01111100 */
+   0x82, /* 10000010 */
+   0x78, /* 01111000 */
+   0x0c, /* 00001100 */
+   0x7c, /* 01111100 */
+   0xcc, /* 11001100 */
+   0x76, /* 01110110 */
+   0x00, /* 00000000 */
+
+   /* 132 0x84 '„' */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+   0x78, /* 01111000 */
+   0x0c, /* 00001100 */
+   0x7c, /* 01111100 */
+   0xcc, /* 11001100 */
+   0x76, /* 01110110 */
+   0x00, /* 00000000 */
+
+   /* 133 0x85 '…' */
+   0x30, /* 00110000 */
+   0x18, /* 00011000 */
+   0x78, /* 01111000 */
+   0x0c, /* 00001100 */
+   0x7c, /* 01111100 */
+   0xcc, /* 11001100 */
+   0x76, /* 01110110 */
+   0x00, /* 00000000 */
+
+   /* 134 0x86 '†' */
+   0x30, /* 00110000 */
+   0x30, /* 00110000 */
+   0x78, /* 01111000 */
+   0x0c, /* 00001100 */
+   0x7c, /* 01111100 */
+   0xcc, /* 11001100 */
+   0x76, /* 01110110 */
+   0x00, /* 00000000 */
+
+   /* 135 0x87 '‡' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0x7e, /* 01111110 */
+   0x0c, /* 00001100 */
+   0x38, /* 00111000 */
+
+   /* 136 0x88 'ˆ' */
+   0x7c, /* 01111100 */
+   0x82, /* 10000010 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0xc0, /* 11000000 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 137 0x89 '‰' */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0xc0, /* 11000000 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 138 0x8a 'Š' */
+   0x30, /* 00110000 */
+   0x18, /* 00011000 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0xc0, /* 11000000 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 139 0x8b '‹' */
+   0x66, /* 01100110 */
+   0x00, /* 00000000 */
+   0x38, /* 00111000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x00, /* 00000000 */
+
+   /* 140 0x8c 'Œ' */
+   0x7c, /* 01111100 */
+   0x82, /* 10000010 */
+   0x38, /* 00111000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x00, /* 00000000 */
+
+   /* 141 0x8d '' */
+   0x30, /* 00110000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x38, /* 00111000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x00, /* 00000000 */
+
+   /* 142 0x8e 'Ž' */
+   0xc6, /* 11000110 */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 143 0x8f '' */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 144 0x90 '' */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0xfe, /* 11111110 */
+   0xc0, /* 11000000 */
+   0xf8, /* 11111000 */
+   0xc0, /* 11000000 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+
+   /* 145 0x91 '‘' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x7e, /* 01111110 */
+   0xd8, /* 11011000 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+
+   /* 146 0x92 '’' */
+   0x3e, /* 00111110 */
+   0x6c, /* 01101100 */
+   0xcc, /* 11001100 */
+   0xfe, /* 11111110 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0xce, /* 11001110 */
+   0x00, /* 00000000 */
+
+   /* 147 0x93 '“' */
+   0x7c, /* 01111100 */
+   0x82, /* 10000010 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 148 0x94 '”' */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 149 0x95 '•' */
+   0x30, /* 00110000 */
+   0x18, /* 00011000 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 150 0x96 '–' */
+   0x78, /* 01111000 */
+   0x84, /* 10000100 */
+   0x00, /* 00000000 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0x76, /* 01110110 */
+   0x00, /* 00000000 */
+
+   /* 151 0x97 '—' */
+   0x60, /* 01100000 */
+   0x30, /* 00110000 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0x76, /* 01110110 */
+   0x00, /* 00000000 */
+
+   /* 152 0x98 '˜' */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7e, /* 01111110 */
+   0x06, /* 00000110 */
+   0xfc, /* 11111100 */
+
+   /* 153 0x99 '™' */
+   0xc6, /* 11000110 */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x6c, /* 01101100 */
+   0x38, /* 00111000 */
+   0x00, /* 00000000 */
+
+   /* 154 0x9a 'š' */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 155 0x9b '›' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x7e, /* 01111110 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 156 0x9c 'œ' */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0x64, /* 01100100 */
+   0xf0, /* 11110000 */
+   0x60, /* 01100000 */
+   0x66, /* 01100110 */
+   0xfc, /* 11111100 */
+   0x00, /* 00000000 */
+
+   /* 157 0x9d '' */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x3c, /* 00111100 */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 158 0x9e 'ž' */
+   0xf8, /* 11111000 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0xfa, /* 11111010 */
+   0xc6, /* 11000110 */
+   0xcf, /* 11001111 */
+   0xc6, /* 11000110 */
+   0xc7, /* 11000111 */
+
+   /* 159 0x9f 'Ÿ' */
+   0x0e, /* 00001110 */
+   0x1b, /* 00011011 */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0xd8, /* 11011000 */
+   0x70, /* 01110000 */
+   0x00, /* 00000000 */
+
+   /* 160 0xa0 ' ' */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x78, /* 01111000 */
+   0x0c, /* 00001100 */
+   0x7c, /* 01111100 */
+   0xcc, /* 11001100 */
+   0x76, /* 01110110 */
+   0x00, /* 00000000 */
+
+   /* 161 0xa1 '¡' */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x38, /* 00111000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x00, /* 00000000 */
+
+   /* 162 0xa2 '¢' */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+
+   /* 163 0xa3 '£' */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0x76, /* 01110110 */
+   0x00, /* 00000000 */
+
+   /* 164 0xa4 '¤' */
+   0x76, /* 01110110 */
+   0xdc, /* 11011100 */
+   0x00, /* 00000000 */
+   0xdc, /* 11011100 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x00, /* 00000000 */
+
+   /* 165 0xa5 '¥' */
+   0x76, /* 01110110 */
+   0xdc, /* 11011100 */
+   0x00, /* 00000000 */
+   0xe6, /* 11100110 */
+   0xf6, /* 11110110 */
+   0xde, /* 11011110 */
+   0xce, /* 11001110 */
+   0x00, /* 00000000 */
+
+   /* 166 0xa6 '¦' */
+   0x3c, /* 00111100 */
+   0x6c, /* 01101100 */
+   0x6c, /* 01101100 */
+   0x3e, /* 00111110 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 167 0xa7 '§' */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0x6c, /* 01101100 */
+   0x38, /* 00111000 */
+   0x00, /* 00000000 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 168 0xa8 '¨' */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x63, /* 01100011 */
+   0x3e, /* 00111110 */
+   0x00, /* 00000000 */
+
+   /* 169 0xa9 '©' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xfe, /* 11111110 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 170 0xaa 'ª' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xfe, /* 11111110 */
+   0x06, /* 00000110 */
+   0x06, /* 00000110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 171 0xab '«' */
+   0x63, /* 01100011 */
+   0xe6, /* 11100110 */
+   0x6c, /* 01101100 */
+   0x7e, /* 01111110 */
+   0x33, /* 00110011 */
+   0x66, /* 01100110 */
+   0xcc, /* 11001100 */
+   0x0f, /* 00001111 */
+
+   /* 172 0xac '¬' */
+   0x63, /* 01100011 */
+   0xe6, /* 11100110 */
+   0x6c, /* 01101100 */
+   0x7a, /* 01111010 */
+   0x36, /* 00110110 */
+   0x6a, /* 01101010 */
+   0xdf, /* 11011111 */
+   0x06, /* 00000110 */
+
+   /* 173 0xad '­' */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 174 0xae '®' */
+   0x00, /* 00000000 */
+   0x33, /* 00110011 */
+   0x66, /* 01100110 */
+   0xcc, /* 11001100 */
+   0x66, /* 01100110 */
+   0x33, /* 00110011 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 175 0xaf '¯' */
+   0x00, /* 00000000 */
+   0xcc, /* 11001100 */
+   0x66, /* 01100110 */
+   0x33, /* 00110011 */
+   0x66, /* 01100110 */
+   0xcc, /* 11001100 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 176 0xb0 '°' */
+   0x22, /* 00100010 */
+   0x88, /* 10001000 */
+   0x22, /* 00100010 */
+   0x88, /* 10001000 */
+   0x22, /* 00100010 */
+   0x88, /* 10001000 */
+   0x22, /* 00100010 */
+   0x88, /* 10001000 */
+
+   /* 177 0xb1 '±' */
+   0x55, /* 01010101 */
+   0xaa, /* 10101010 */
+   0x55, /* 01010101 */
+   0xaa, /* 10101010 */
+   0x55, /* 01010101 */
+   0xaa, /* 10101010 */
+   0x55, /* 01010101 */
+   0xaa, /* 10101010 */
+
+   /* 178 0xb2 '²' */
+   0x77, /* 01110111 */
+   0xdd, /* 11011101 */
+   0x77, /* 01110111 */
+   0xdd, /* 11011101 */
+   0x77, /* 01110111 */
+   0xdd, /* 11011101 */
+   0x77, /* 01110111 */
+   0xdd, /* 11011101 */
+
+   /* 179 0xb3 '³' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 180 0xb4 '´' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0xf8, /* 11111000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 181 0xb5 'µ' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0xf8, /* 11111000 */
+   0x18, /* 00011000 */
+   0xf8, /* 11111000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 182 0xb6 '¶' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0xf6, /* 11110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 183 0xb7 '·' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xfe, /* 11111110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 184 0xb8 '¸' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xf8, /* 11111000 */
+   0x18, /* 00011000 */
+   0xf8, /* 11111000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 185 0xb9 '¹' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0xf6, /* 11110110 */
+   0x06, /* 00000110 */
+   0xf6, /* 11110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 186 0xba 'º' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 187 0xbb '»' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xfe, /* 11111110 */
+   0x06, /* 00000110 */
+   0xf6, /* 11110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 188 0xbc '¼' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0xf6, /* 11110110 */
+   0x06, /* 00000110 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 189 0xbd '½' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 190 0xbe '¾' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0xf8, /* 11111000 */
+   0x18, /* 00011000 */
+   0xf8, /* 11111000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 191 0xbf '¿' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xf8, /* 11111000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 192 0xc0 'À' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x1f, /* 00011111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 193 0xc1 'Á' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 194 0xc2 'Â' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 195 0xc3 'Ã' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x1f, /* 00011111 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 196 0xc4 'Ä' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 197 0xc5 'Å' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0xff, /* 11111111 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 198 0xc6 'Æ' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x1f, /* 00011111 */
+   0x18, /* 00011000 */
+   0x1f, /* 00011111 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 199 0xc7 'Ç' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x37, /* 00110111 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 200 0xc8 'È' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x37, /* 00110111 */
+   0x30, /* 00110000 */
+   0x3f, /* 00111111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 201 0xc9 'É' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x3f, /* 00111111 */
+   0x30, /* 00110000 */
+   0x37, /* 00110111 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 202 0xca 'Ê' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0xf7, /* 11110111 */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 203 0xcb 'Ë' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0xf7, /* 11110111 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 204 0xcc 'Ì' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x37, /* 00110111 */
+   0x30, /* 00110000 */
+   0x37, /* 00110111 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 205 0xcd 'Í' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 206 0xce 'Î' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0xf7, /* 11110111 */
+   0x00, /* 00000000 */
+   0xf7, /* 11110111 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 207 0xcf 'Ï' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 208 0xd0 'Ð' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 209 0xd1 'Ñ' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 210 0xd2 'Ò' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 211 0xd3 'Ó' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x3f, /* 00111111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 212 0xd4 'Ô' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x1f, /* 00011111 */
+   0x18, /* 00011000 */
+   0x1f, /* 00011111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 213 0xd5 'Õ' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x1f, /* 00011111 */
+   0x18, /* 00011000 */
+   0x1f, /* 00011111 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 214 0xd6 'Ö' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x3f, /* 00111111 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 215 0xd7 '×' */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0xff, /* 11111111 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+
+   /* 216 0xd8 'Ø' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0xff, /* 11111111 */
+   0x18, /* 00011000 */
+   0xff, /* 11111111 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 217 0xd9 'Ù' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0xf8, /* 11111000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 218 0xda 'Ú' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x1f, /* 00011111 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 219 0xdb 'Û' */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+
+   /* 220 0xdc 'Ü' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+
+   /* 221 0xdd 'Ý' */
+   0xf0, /* 11110000 */
+   0xf0, /* 11110000 */
+   0xf0, /* 11110000 */
+   0xf0, /* 11110000 */
+   0xf0, /* 11110000 */
+   0xf0, /* 11110000 */
+   0xf0, /* 11110000 */
+   0xf0, /* 11110000 */
+
+   /* 222 0xde 'Þ' */
+   0x0f, /* 00001111 */
+   0x0f, /* 00001111 */
+   0x0f, /* 00001111 */
+   0x0f, /* 00001111 */
+   0x0f, /* 00001111 */
+   0x0f, /* 00001111 */
+   0x0f, /* 00001111 */
+   0x0f, /* 00001111 */
+
+   /* 223 0xdf 'ß' */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0xff, /* 11111111 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 224 0xe0 'à' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x76, /* 01110110 */
+   0xdc, /* 11011100 */
+   0xc8, /* 11001000 */
+   0xdc, /* 11011100 */
+   0x76, /* 01110110 */
+   0x00, /* 00000000 */
+
+   /* 225 0xe1 'á' */
+   0x78, /* 01111000 */
+   0xcc, /* 11001100 */
+   0xcc, /* 11001100 */
+   0xd8, /* 11011000 */
+   0xcc, /* 11001100 */
+   0xc6, /* 11000110 */
+   0xcc, /* 11001100 */
+   0x00, /* 00000000 */
+
+   /* 226 0xe2 'â' */
+   0xfe, /* 11111110 */
+   0xc6, /* 11000110 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0xc0, /* 11000000 */
+   0x00, /* 00000000 */
+
+   /* 227 0xe3 'ã' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0xfe, /* 11111110 */
+   0x6c, /* 01101100 */
+   0x6c, /* 01101100 */
+   0x6c, /* 01101100 */
+   0x6c, /* 01101100 */
+   0x00, /* 00000000 */
+
+   /* 228 0xe4 'ä' */
+   0xfe, /* 11111110 */
+   0xc6, /* 11000110 */
+   0x60, /* 01100000 */
+   0x30, /* 00110000 */
+   0x60, /* 01100000 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+
+   /* 229 0xe5 'å' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0xd8, /* 11011000 */
+   0xd8, /* 11011000 */
+   0xd8, /* 11011000 */
+   0x70, /* 01110000 */
+   0x00, /* 00000000 */
+
+   /* 230 0xe6 'æ' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x7c, /* 01111100 */
+   0xc0, /* 11000000 */
+
+   /* 231 0xe7 'ç' */
+   0x00, /* 00000000 */
+   0x76, /* 01110110 */
+   0xdc, /* 11011100 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+
+   /* 232 0xe8 'è' */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x3c, /* 00111100 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x3c, /* 00111100 */
+   0x18, /* 00011000 */
+   0x7e, /* 01111110 */
+
+   /* 233 0xe9 'é' */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0xc6, /* 11000110 */
+   0xfe, /* 11111110 */
+   0xc6, /* 11000110 */
+   0x6c, /* 01101100 */
+   0x38, /* 00111000 */
+   0x00, /* 00000000 */
+
+   /* 234 0xea 'ê' */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x6c, /* 01101100 */
+   0x6c, /* 01101100 */
+   0xee, /* 11101110 */
+   0x00, /* 00000000 */
+
+   /* 235 0xeb 'ë' */
+   0x0e, /* 00001110 */
+   0x18, /* 00011000 */
+   0x0c, /* 00001100 */
+   0x3e, /* 00111110 */
+   0x66, /* 01100110 */
+   0x66, /* 01100110 */
+   0x3c, /* 00111100 */
+   0x00, /* 00000000 */
+
+   /* 236 0xec 'ì' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0xdb, /* 11011011 */
+   0xdb, /* 11011011 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 237 0xed 'í' */
+   0x06, /* 00000110 */
+   0x0c, /* 00001100 */
+   0x7e, /* 01111110 */
+   0xdb, /* 11011011 */
+   0xdb, /* 11011011 */
+   0x7e, /* 01111110 */
+   0x60, /* 01100000 */
+   0xc0, /* 11000000 */
+
+   /* 238 0xee 'î' */
+   0x1e, /* 00011110 */
+   0x30, /* 00110000 */
+   0x60, /* 01100000 */
+   0x7e, /* 01111110 */
+   0x60, /* 01100000 */
+   0x30, /* 00110000 */
+   0x1e, /* 00011110 */
+   0x00, /* 00000000 */
+
+   /* 239 0xef 'ï' */
+   0x00, /* 00000000 */
+   0x7c, /* 01111100 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0xc6, /* 11000110 */
+   0x00, /* 00000000 */
+
+   /* 240 0xf0 'ð' */
+   0x00, /* 00000000 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+   0xfe, /* 11111110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 241 0xf1 'ñ' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x7e, /* 01111110 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+
+   /* 242 0xf2 'ò' */
+   0x30, /* 00110000 */
+   0x18, /* 00011000 */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+
+   /* 243 0xf3 'ó' */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x18, /* 00011000 */
+   0x0c, /* 00001100 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+
+   /* 244 0xf4 'ô' */
+   0x0e, /* 00001110 */
+   0x1b, /* 00011011 */
+   0x1b, /* 00011011 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+
+   /* 245 0xf5 'õ' */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0xd8, /* 11011000 */
+   0xd8, /* 11011000 */
+   0x70, /* 01110000 */
+
+   /* 246 0xf6 'ö' */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x7e, /* 01111110 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 247 0xf7 '÷' */
+   0x00, /* 00000000 */
+   0x76, /* 01110110 */
+   0xdc, /* 11011100 */
+   0x00, /* 00000000 */
+   0x76, /* 01110110 */
+   0xdc, /* 11011100 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 248 0xf8 'ø' */
+   0x38, /* 00111000 */
+   0x6c, /* 01101100 */
+   0x6c, /* 01101100 */
+   0x38, /* 00111000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 249 0xf9 'ù' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 250 0xfa 'ú' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x18, /* 00011000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 251 0xfb 'û' */
+   0x0f, /* 00001111 */
+   0x0c, /* 00001100 */
+   0x0c, /* 00001100 */
+   0x0c, /* 00001100 */
+   0xec, /* 11101100 */
+   0x6c, /* 01101100 */
+   0x3c, /* 00111100 */
+   0x1c, /* 00011100 */
+
+   /* 252 0xfc 'ü' */
+   0x6c, /* 01101100 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x36, /* 00110110 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 253 0xfd 'ý' */
+   0x78, /* 01111000 */
+   0x0c, /* 00001100 */
+   0x18, /* 00011000 */
+   0x30, /* 00110000 */
+   0x7c, /* 01111100 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 254 0xfe 'þ' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x3c, /* 00111100 */
+   0x3c, /* 00111100 */
+   0x3c, /* 00111100 */
+   0x3c, /* 00111100 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+   /* 255 0xff 'ÿ' */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+   0x00, /* 00000000 */
+
+};
diff --git a/modules/catkin_ws/src/wiringPi/devLib/gertboard.c b/modules/catkin_ws/src/wiringPi/devLib/gertboard.c
new file mode 100644
index 00000000..5aeaef7c
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/gertboard.c
@@ -0,0 +1,164 @@
+/*
+ * gertboard.c:
+ *	Access routines for the SPI devices on the Gertboard
+ *	Copyright (c) 2012 Gordon Henderson
+ *
+ *	The Gertboard has:
+ *
+ *		An MCP3002 dual-channel A to D convertor connected
+ *		to the SPI bus, selected by chip-select A, and:
+ *
+ *		An MCP4802 dual-channel D to A convertor connected
+ *		to the SPI bus, selected via chip-select B.
+ *
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+#include <stdio.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <linux/spi/spidev.h>
+
+#include <wiringPi.h>
+#include <wiringPiSPI.h>
+
+#include "gertboard.h"
+
+// The A-D convertor won't run at more than 1MHz @ 3.3v
+
+#define	SPI_ADC_SPEED	1000000
+#define	SPI_DAC_SPEED	1000000
+#define	SPI_A2D		      0
+#define	SPI_D2A		      1
+
+
+/*
+ * gertboardAnalogWrite:
+ *	Write an 8-bit data value to the MCP4802 Analog to digital
+ *	convertor on the Gertboard.
+ *********************************************************************************
+ */
+
+void gertboardAnalogWrite (const int chan, const int value)
+{
+  uint8_t spiData [2] ;
+  uint8_t chanBits, dataBits ;
+
+  if (chan == 0)
+    chanBits = 0x30 ;
+  else
+    chanBits = 0xB0 ;
+
+  chanBits |= ((value >> 4) & 0x0F) ;
+  dataBits  = ((value << 4) & 0xF0) ;
+
+  spiData [0] = chanBits ;
+  spiData [1] = dataBits ;
+
+  wiringPiSPIDataRW (SPI_D2A, spiData, 2) ;
+}
+
+
+/*
+ * gertboardAnalogRead:
+ *	Return the analog value of the given channel (0/1).
+ *	The A/D is a 10-bit device
+ *********************************************************************************
+ */
+
+int gertboardAnalogRead (const int chan)
+{
+  uint8_t spiData [2] ;
+
+  uint8_t chanBits ;
+
+  if (chan == 0)
+    chanBits = 0b11010000 ;
+  else
+    chanBits = 0b11110000 ;
+
+  spiData [0] = chanBits ;
+  spiData [1] = 0 ;
+
+  wiringPiSPIDataRW (SPI_A2D, spiData, 2) ;
+
+  return ((spiData [0] << 7) | (spiData [1] >> 1)) & 0x3FF ;
+}
+
+
+/*
+ * gertboardSPISetup:
+ *	Initialise the SPI bus, etc.
+ *********************************************************************************
+ */
+
+int gertboardSPISetup (void)
+{
+  if (wiringPiSPISetup (SPI_A2D, SPI_ADC_SPEED) < 0)
+    return -1 ;
+
+  if (wiringPiSPISetup (SPI_D2A, SPI_DAC_SPEED) < 0)
+    return -1 ;
+
+  return 0 ;
+}
+
+
+/*
+ * New wiringPi node extension methods.
+ *********************************************************************************
+ */
+
+static int myAnalogRead (struct wiringPiNodeStruct *node, const int chan)
+{
+  return gertboardAnalogRead (chan - node->pinBase) ;
+}
+
+static void myAnalogWrite (struct wiringPiNodeStruct *node, const int chan, const int value)
+{
+  gertboardAnalogWrite (chan - node->pinBase, value) ;
+}
+
+
+/*
+ * gertboardAnalogSetup:
+ *	Create a new wiringPi device node for the analog devices on the
+ *	Gertboard. We create one node with 2 pins - each pin being read
+ *	and write - although the operations actually go to different
+ *	hardware devices.
+ *********************************************************************************
+ */
+
+int gertboardAnalogSetup (const int pinBase)
+{
+  struct wiringPiNodeStruct *node ;
+  int    x ;
+
+  if (( x = gertboardSPISetup ()) != 0)
+    return  x;
+
+  node = wiringPiNewNode (pinBase, 2) ;
+  node->analogRead  = myAnalogRead ;
+  node->analogWrite = myAnalogWrite ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/devLib/gertboard.h b/modules/catkin_ws/src/wiringPi/devLib/gertboard.h
new file mode 100644
index 00000000..3fa19197
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/gertboard.h
@@ -0,0 +1,45 @@
+/*
+ * gertboard.h:
+ *	Access routines for the SPI devices on the Gertboard
+ *	Copyright (c) 2012 Gordon Henderson
+ *
+ *	The Gertboard has an MCP4802 dual-channel D to A convertor
+ *	connected to the SPI bus, selected via chip-select B.
+ *
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Old routines
+
+extern void gertboardAnalogWrite (const int chan, const int value) ;
+extern int  gertboardAnalogRead  (const int chan) ;
+extern int  gertboardSPISetup    (void) ;
+
+// New
+
+extern int  gertboardAnalogSetup (const int pinBase) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/devLib/gertboard.o b/modules/catkin_ws/src/wiringPi/devLib/gertboard.o
new file mode 100644
index 0000000000000000000000000000000000000000..5057c20bcb8ca8093383fc0076a19dbe9b5631ee
GIT binary patch
literal 2696
zcmbVNO>7%Q6rS}u#A%aV^Cua#QY_@6An3}5HYEruJ8_(?uu>~dS|On8O}vS%_$N4P
znji#`7ErcTr5-tO;=~1x5$d5NP1SQ$RfwYnY88H@7A_!EWZs*dNv7Mag!-cOd+(d?
z{p`Hi$tUCaTu71#7m1uC`yNLL(R=spG&R#?fE*yY^Lxzwv#ehX9~lBzce9B|YSZaT
z-(!~NHn;u>Z`}zyoi*ntHN9>pBxkpvyLb9_u7qHHJ)GFZWco!2E9<X%N!mTSb3L|A
zS6({d{^kDg3zF2qEHI%S4Gky>d2eJB5>!ofoleKujq?2J#&kkbH^PaXU$;8F>c-8!
zog-Zt>*i_Qe%icPR~`HmYZ9!_s;{9B^&_e7)%2)JXn&t=t{kQweP0S~{XGc%N49Cd
z-*rKLyF1VG%@o~#F$W8Fx7*KO#hq~PQbfP>>;(wWFAd13+=8yVdI8h9Kfd$cHklY3
zdp$lhGuv+1?f7x+n3g;`+@@aY<J7R0Jf@Aj=;85KlBwb3aB>8@Cgd4U5$VGzBCSNF
zL;byx%P^uC;D^~-33XP9ht3>OBAJ6E3hrx&fgJP{<>#4QL5=)#`+SN4+{ZYW|08Cf
zK%G^h^FYr*!Xa?KU~4B)XO!sYp^Or9<eU<JUx|$=(Toydj9`VQEKL6B2Cd40Cz%i#
z{(?k?OhF=(o`>K8Kthne#8&wJ9AbEf;d~#^m5J~Xv2_m*en*)+A+S6X_v|U*y-JMn
zCTN_OUy1+(;npMY4*<vfODs`^=?e_M$9y_Vu)l;SDE~K%pJbN_oiAY59>FIIR?D7k
znys=nN9wDYhFNPaoNZNYYtNgq%<?`>WEd0q)1#TZaXObPj!zrYnbG{XLC#lO)y6`h
zS}dH(nzlK0mKeseZO$zkbCpG7-mKRA*&eI_aYf5+FNujfV6RuNi3eGe*7?b18TS`u
z)Km0i;hDLQ_W{Ve0<H-7R{}2bZwa`_zc1iV3VBqv?|7m`d_=%;ZoHqj1pH|MUjQ2g
z^WYih{M!hEAg;p0@i^Ehc&FjR<qc+Vyu|#14_{(_&4+iGzvjd5F(1z%3eV5a9nqFo
z>$W)y+HQHe!mXB7Gd0^<v58iO146Xf<z+$vt=*_q7p>YV(dL@<y43(mqiI{(#N^CT
zdWMKbqpgZD-!kib+FlQj^BadC9D)CfPXmV1VDs_3hrc<zcW@SIPGGv!;~9LPaE6$Q
z-#B<bqr3nQ;{KcQTVGw|qWIyL0mGb+8=qo1{qO&O>!(?K60|5h{<sK&&HLy2lz@rU
zpE*GU1GwiHCZ2f=*=6yY=m^61pF?kh5j4L7+mOqQi1Wi(9?$28-?)G8F{H!dE9eN~
ne=YR=y(9f=26k9LKVZBET<7)i|6EZ0b$lt1o1WVH_1FIo@%Ma)

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/devLib/lcd.c b/modules/catkin_ws/src/wiringPi/devLib/lcd.c
new file mode 100644
index 00000000..6c0e4749
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/lcd.c
@@ -0,0 +1,495 @@
+/*
+ * lcd.c:
+ *	Text-based LCD driver.
+ *	This is designed to drive the parallel interface LCD drivers
+ *	based in the Hitachi HD44780U controller and compatables.
+ *
+ * Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include <wiringPi.h>
+
+#include "lcd.h"
+
+#ifndef	TRUE
+#  define	TRUE	(1==1)
+#  define	FALSE	(1==2)
+#endif
+
+// HD44780U Commands
+
+#define	LCD_CLEAR	0x01
+#define	LCD_HOME	0x02
+#define	LCD_ENTRY	0x04
+#define	LCD_CTRL	0x08
+#define	LCD_CDSHIFT	0x10
+#define	LCD_FUNC	0x20
+#define	LCD_CGRAM	0x40
+#define	LCD_DGRAM	0x80
+
+// Bits in the entry register
+
+#define	LCD_ENTRY_SH		0x01
+#define	LCD_ENTRY_ID		0x02
+
+// Bits in the control register
+
+#define	LCD_BLINK_CTRL		0x01
+#define	LCD_CURSOR_CTRL		0x02
+#define	LCD_DISPLAY_CTRL	0x04
+
+// Bits in the function register
+
+#define	LCD_FUNC_F	0x04
+#define	LCD_FUNC_N	0x08
+#define	LCD_FUNC_DL	0x10
+
+#define	LCD_CDSHIFT_RL	0x04
+
+struct lcdDataStruct
+{
+  int bits, rows, cols ;
+  int rsPin, strbPin ;
+  int dataPins [8] ;
+  int cx, cy ;
+} ;
+
+struct lcdDataStruct *lcds [MAX_LCDS] ;
+
+static int lcdControl ;
+
+// Row offsets
+
+static const int rowOff [4] = { 0x00, 0x40, 0x14, 0x54 } ;
+
+
+/*
+ * strobe:
+ *	Toggle the strobe (Really the "E") pin to the device.
+ *	According to the docs, data is latched on the falling edge.
+ *********************************************************************************
+ */
+
+static void strobe (const struct lcdDataStruct *lcd)
+{
+
+// Note timing changes for new version of delayMicroseconds ()
+
+  digitalWrite (lcd->strbPin, 1) ; delayMicroseconds (50) ;
+  digitalWrite (lcd->strbPin, 0) ; delayMicroseconds (50) ;
+}
+
+
+/*
+ * sentDataCmd:
+ *	Send an data or command byte to the display.
+ *********************************************************************************
+ */
+
+static void sendDataCmd (const struct lcdDataStruct *lcd, unsigned char data)
+{
+  register unsigned char myData = data ;
+  unsigned char          i, d4 ;
+
+  if (lcd->bits == 4)
+  {
+    d4 = (myData >> 4) & 0x0F;
+    for (i = 0 ; i < 4 ; ++i)
+    {
+      digitalWrite (lcd->dataPins [i], (d4 & 1)) ;
+      d4 >>= 1 ;
+    }
+    strobe (lcd) ;
+
+    d4 = myData & 0x0F ;
+    for (i = 0 ; i < 4 ; ++i)
+    {
+      digitalWrite (lcd->dataPins [i], (d4 & 1)) ;
+      d4 >>= 1 ;
+    }
+  }
+  else
+  {
+    for (i = 0 ; i < 8 ; ++i)
+    {
+      digitalWrite (lcd->dataPins [i], (myData & 1)) ;
+      myData >>= 1 ;
+    }
+  }
+  strobe (lcd) ;
+}
+
+
+/*
+ * putCommand:
+ *	Send a command byte to the display
+ *********************************************************************************
+ */
+
+static void putCommand (const struct lcdDataStruct *lcd, unsigned char command)
+{
+  digitalWrite (lcd->rsPin,   0) ;
+  sendDataCmd  (lcd, command) ;
+  delay (2) ;
+}
+
+static void put4Command (const struct lcdDataStruct *lcd, unsigned char command)
+{
+  register unsigned char myCommand = command ;
+  register unsigned char i ;
+
+  digitalWrite (lcd->rsPin,   0) ;
+
+  for (i = 0 ; i < 4 ; ++i)
+  {
+    digitalWrite (lcd->dataPins [i], (myCommand & 1)) ;
+    myCommand >>= 1 ;
+  }
+  strobe (lcd) ;
+}
+
+
+/*
+ *********************************************************************************
+ * User Callable code below here
+ *********************************************************************************
+ */
+
+/*
+ * lcdHome: lcdClear:
+ *	Home the cursor or clear the screen.
+ *********************************************************************************
+ */
+
+void lcdHome (const int fd)
+{
+  struct lcdDataStruct *lcd = lcds [fd] ;
+
+  putCommand (lcd, LCD_HOME) ;
+  lcd->cx = lcd->cy = 0 ;
+  delay (5) ;
+}
+
+void lcdClear (const int fd)
+{
+  struct lcdDataStruct *lcd = lcds [fd] ;
+
+  putCommand (lcd, LCD_CLEAR) ;
+  putCommand (lcd, LCD_HOME) ;
+  lcd->cx = lcd->cy = 0 ;
+  delay (5) ;
+}
+
+
+/*
+ * lcdDisplay: lcdCursor: lcdCursorBlink:
+ *	Turn the display, cursor, cursor blinking on/off
+ *********************************************************************************
+ */
+
+void lcdDisplay (const int fd, int state)
+{
+  struct lcdDataStruct *lcd = lcds [fd] ;
+
+  if (state)
+    lcdControl |=  LCD_DISPLAY_CTRL ;
+  else
+    lcdControl &= ~LCD_DISPLAY_CTRL ;
+
+  putCommand (lcd, LCD_CTRL | lcdControl) ; 
+}
+
+void lcdCursor (const int fd, int state)
+{
+  struct lcdDataStruct *lcd = lcds [fd] ;
+
+  if (state)
+    lcdControl |=  LCD_CURSOR_CTRL ;
+  else
+    lcdControl &= ~LCD_CURSOR_CTRL ;
+
+  putCommand (lcd, LCD_CTRL | lcdControl) ; 
+}
+
+void lcdCursorBlink (const int fd, int state)
+{
+  struct lcdDataStruct *lcd = lcds [fd] ;
+
+  if (state)
+    lcdControl |=  LCD_BLINK_CTRL ;
+  else
+    lcdControl &= ~LCD_BLINK_CTRL ;
+
+  putCommand (lcd, LCD_CTRL | lcdControl) ; 
+}
+
+
+/*
+ * lcdSendCommand:
+ *	Send any arbitary command to the display
+ *********************************************************************************
+ */
+
+void lcdSendCommand (const int fd, unsigned char command)
+{
+  struct lcdDataStruct *lcd = lcds [fd] ;
+  putCommand (lcd, command) ;
+}
+
+
+/*
+ * lcdPosition:
+ *	Update the position of the cursor on the display.
+ *	Ignore invalid locations.
+ *********************************************************************************
+ */
+
+void lcdPosition (const int fd, int x, int y)
+{
+  struct lcdDataStruct *lcd = lcds [fd] ;
+
+  if ((x > lcd->cols) || (x < 0))
+    return ;
+  if ((y > lcd->rows) || (y < 0))
+    return ;
+
+  putCommand (lcd, x + (LCD_DGRAM | rowOff [y])) ;
+
+  lcd->cx = x ;
+  lcd->cy = y ;
+}
+
+
+/*
+ * lcdCharDef:
+ *	Defines a new character in the CGRAM
+ *********************************************************************************
+ */
+
+void lcdCharDef (const int fd, int index, unsigned char data [8])
+{
+  struct lcdDataStruct *lcd = lcds [fd] ;
+  int i ;
+
+  putCommand (lcd, LCD_CGRAM | ((index & 7) << 3)) ;
+
+  digitalWrite (lcd->rsPin, 1) ;
+  for (i = 0 ; i < 8 ; ++i)
+    sendDataCmd (lcd, data [i]) ;
+}
+
+
+/*
+ * lcdPutchar:
+ *	Send a data byte to be displayed on the display. We implement a very
+ *	simple terminal here - with line wrapping, but no scrolling. Yet.
+ *********************************************************************************
+ */
+
+void lcdPutchar (const int fd, unsigned char data)
+{
+  struct lcdDataStruct *lcd = lcds [fd] ;
+
+  digitalWrite (lcd->rsPin, 1) ;
+  sendDataCmd  (lcd, data) ;
+
+  if (++lcd->cx == lcd->cols)
+  {
+    lcd->cx = 0 ;
+    if (++lcd->cy == lcd->rows)
+      lcd->cy = 0 ;
+    
+    putCommand (lcd, lcd->cx + (LCD_DGRAM | rowOff [lcd->cy])) ;
+  }
+}
+
+
+/*
+ * lcdPuts:
+ *	Send a string to be displayed on the display
+ *********************************************************************************
+ */
+
+void lcdPuts (const int fd, const char *string)
+{
+  while (*string)
+    lcdPutchar (fd, *string++) ;
+}
+
+
+/*
+ * lcdPrintf:
+ *	Printf to an LCD display
+ *********************************************************************************
+ */
+
+void lcdPrintf (const int fd, const char *message, ...)
+{
+  va_list argp ;
+  char buffer [1024] ;
+
+  va_start (argp, message) ;
+    vsnprintf (buffer, 1023, message, argp) ;
+  va_end (argp) ;
+
+  lcdPuts (fd, buffer) ;
+}
+
+
+/*
+ * lcdInit:
+ *	Take a lot of parameters and initialise the LCD, and return a handle to
+ *	that LCD, or -1 if any error.
+ *********************************************************************************
+ */
+
+int lcdInit (const int rows, const int cols, const int bits,
+	const int rs, const int strb,
+	const int d0, const int d1, const int d2, const int d3, const int d4,
+	const int d5, const int d6, const int d7)
+{
+  static int initialised = 0 ;
+
+  unsigned char func ;
+  int i ;
+  int lcdFd = -1 ;
+  struct lcdDataStruct *lcd ;
+
+  if (initialised == 0)
+  {
+    initialised = 1 ;
+    for (i = 0 ; i < MAX_LCDS ; ++i)
+      lcds [i] = NULL ;
+  }
+
+// Simple sanity checks
+
+  if (! ((bits == 4) || (bits == 8)))
+    return -1 ;
+
+  if ((rows < 0) || (rows > 20))
+    return -1 ;
+
+  if ((cols < 0) || (cols > 20))
+    return -1 ;
+
+// Create a new LCD:
+
+  for (i = 0 ; i < MAX_LCDS ; ++i)
+  {
+    if (lcds [i] == NULL)
+    {
+      lcdFd = i ;
+      break ;
+    }
+  }
+
+  if (lcdFd == -1)
+    return -1 ;
+
+  lcd = (struct lcdDataStruct *)malloc (sizeof (struct lcdDataStruct)) ;
+  if (lcd == NULL)
+    return -1 ;
+
+  lcd->rsPin   = rs ;
+  lcd->strbPin = strb ;
+  lcd->bits    = 8 ;		// For now - we'll set it properly later.
+  lcd->rows    = rows ;
+  lcd->cols    = cols ;
+  lcd->cx      = 0 ;
+  lcd->cy      = 0 ;
+
+  lcd->dataPins [0] = d0 ;
+  lcd->dataPins [1] = d1 ;
+  lcd->dataPins [2] = d2 ;
+  lcd->dataPins [3] = d3 ;
+  lcd->dataPins [4] = d4 ;
+  lcd->dataPins [5] = d5 ;
+  lcd->dataPins [6] = d6 ;
+  lcd->dataPins [7] = d7 ;
+
+  lcds [lcdFd] = lcd ;
+
+  digitalWrite (lcd->rsPin,   0) ; pinMode (lcd->rsPin,   OUTPUT) ;
+  digitalWrite (lcd->strbPin, 0) ; pinMode (lcd->strbPin, OUTPUT) ;
+
+  for (i = 0 ; i < bits ; ++i)
+  {
+    digitalWrite (lcd->dataPins [i], 0) ;
+    pinMode      (lcd->dataPins [i], OUTPUT) ;
+  }
+  delay (35) ; // mS
+
+
+// 4-bit mode?
+//	OK. This is a PIG and it's not at all obvious from the documentation I had,
+//	so I guess some others have worked through either with better documentation
+//	or more trial and error... Anyway here goes:
+//
+//	It seems that the controller needs to see the FUNC command at least 3 times
+//	consecutively - in 8-bit mode. If you're only using 8-bit mode, then it appears
+//	that you can get away with one func-set, however I'd not rely on it...
+//
+//	So to set 4-bit mode, you need to send the commands one nibble at a time,
+//	the same three times, but send the command to set it into 8-bit mode those
+//	three times, then send a final 4th command to set it into 4-bit mode, and only
+//	then can you flip the switch for the rest of the library to work in 4-bit
+//	mode which sends the commands as 2 x 4-bit values.
+
+  if (bits == 4)
+  {
+    func = LCD_FUNC | LCD_FUNC_DL ;			// Set 8-bit mode 3 times
+    put4Command (lcd, func >> 4) ; delay (35) ;
+    put4Command (lcd, func >> 4) ; delay (35) ;
+    put4Command (lcd, func >> 4) ; delay (35) ;
+    func = LCD_FUNC ;					// 4th set: 4-bit mode
+    put4Command (lcd, func >> 4) ; delay (35) ;
+    lcd->bits = 4 ;
+  }
+  else
+  {
+    func = LCD_FUNC | LCD_FUNC_DL ;
+    putCommand  (lcd, func     ) ; delay (35) ;
+    putCommand  (lcd, func     ) ; delay (35) ;
+    putCommand  (lcd, func     ) ; delay (35) ;
+  }
+
+  if (lcd->rows > 1)
+  {
+    func |= LCD_FUNC_N ;
+    putCommand (lcd, func) ; delay (35) ;
+  }
+
+// Rest of the initialisation sequence
+
+  lcdDisplay     (lcdFd, TRUE) ;
+  lcdCursor      (lcdFd, FALSE) ;
+  lcdCursorBlink (lcdFd, FALSE) ;
+  lcdClear       (lcdFd) ;
+
+  putCommand (lcd, LCD_ENTRY   | LCD_ENTRY_ID) ;
+  putCommand (lcd, LCD_CDSHIFT | LCD_CDSHIFT_RL) ;
+
+  return lcdFd ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/devLib/lcd.h b/modules/catkin_ws/src/wiringPi/devLib/lcd.h
new file mode 100644
index 00000000..0a0e5988
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/lcd.h
@@ -0,0 +1,52 @@
+/*
+ * lcd.h:
+ *	Text-based LCD driver.
+ *	This is designed to drive the parallel interface LCD drivers
+ *	based in the Hitachi HD44780U controller and compatables.
+ *
+ * Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#define	MAX_LCDS	8
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void lcdHome        (const int fd) ;
+extern void lcdClear       (const int fd) ;
+extern void lcdDisplay     (const int fd, int state) ;
+extern void lcdCursor      (const int fd, int state) ;
+extern void lcdCursorBlink (const int fd, int state) ;
+extern void lcdSendCommand (const int fd, unsigned char command) ;
+extern void lcdPosition    (const int fd, int x, int y) ;
+extern void lcdCharDef     (const int fd, int index, unsigned char data [8]) ;
+extern void lcdPutchar     (const int fd, unsigned char data) ;
+extern void lcdPuts        (const int fd, const char *string) ;
+extern void lcdPrintf      (const int fd, const char *message, ...) ;
+
+extern int  lcdInit (const int rows, const int cols, const int bits,
+	const int rs, const int strb,
+	const int d0, const int d1, const int d2, const int d3, const int d4,
+	const int d5, const int d6, const int d7) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/devLib/lcd.o b/modules/catkin_ws/src/wiringPi/devLib/lcd.o
new file mode 100644
index 0000000000000000000000000000000000000000..97f9fee758a23c83c7ab88544f7baa85bcd8128f
GIT binary patch
literal 7240
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

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/devLib/lcd128x64.c b/modules/catkin_ws/src/wiringPi/devLib/lcd128x64.c
new file mode 100644
index 00000000..accd5c3a
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/lcd128x64.c
@@ -0,0 +1,673 @@
+/*
+ * lcd128x64.c:
+ *	Graphics-based LCD driver.
+ *	This is designed to drive the parallel interface LCD drivers
+ *	based on the generic 12864H chips
+ *
+ *	There are many variations on these chips, however they all mostly
+ *	seem to be similar.
+ *	This implementation has the Pins from the Pi hard-wired into it,
+ *	in particular wiringPi pins 0-7 so that we can use
+ *	digitalWriteByete() to speed things up somewhat.
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <wiringPi.h>
+
+#include "font.h"
+#include "lcd128x64.h"
+
+// Size
+
+#define	LCD_WIDTH	128
+#define	LCD_HEIGHT	 64
+
+// Hardware Pins
+//	Note pins 0-7 are the 8-bit data port
+
+#define	CS1		10
+#define	CS2		11
+#define	STROBE		12
+#define	RS		13
+
+// Software copy of the framebuffer
+//	it's 8-bit deep although the display itself is only 1-bit deep.
+
+static unsigned char frameBuffer [LCD_WIDTH * LCD_HEIGHT] ;
+
+static int maxX,    maxY ;
+static int lastX,   lastY ;
+static int xOrigin, yOrigin ;
+static int lcdOrientation = 0 ;
+
+/*
+ * strobe:
+ *	Toggle the strobe (Really the "E") pin to the device.
+ *	According to the docs, data is latched on the falling edge.
+ *********************************************************************************
+ */
+
+static void strobe (void)
+{
+  digitalWrite (STROBE, 1) ; delayMicroseconds (1) ;
+  digitalWrite (STROBE, 0) ; delayMicroseconds (5) ;
+}
+
+
+/*
+ * sentData:
+ *	Send an data or command byte to the display.
+ *********************************************************************************
+ */
+
+static void sendData (const int data, const int chip)
+{
+  digitalWrite     (chip, 0) ;
+  digitalWriteByte (data) ;
+  strobe           () ;
+  digitalWrite     (chip, 1) ;
+}
+
+
+/*
+ * sendCommand:
+ *	Send a command byte to the display
+ *********************************************************************************
+ */
+
+static void sendCommand (const int command, const int chip)
+{
+  digitalWrite (RS, 0) ;
+  sendData     (command, chip) ;
+  digitalWrite (RS, 1) ;
+}
+
+
+/*
+ * setCol: SetLine:
+ *	Set the column and line addresses
+ *********************************************************************************
+ */
+
+static void setCol  (int col, const int chip)
+  { sendCommand (0x40 | (col  & 0x3F), chip) ; }
+
+static void setLine (int line, const int chip)
+  { sendCommand (0xB8 | (line & 0x07), chip) ; }
+
+
+/*
+ * lcd128x64update:
+ *	Copy our software version to the real display
+ *********************************************************************************
+ */
+
+void lcd128x64update (void)
+{
+  int line, x, y, fbLoc ;
+  unsigned char byte ;
+
+// Left side 
+
+  for (line = 0 ; line < 8 ; ++line)
+  {
+    setCol  (0,    CS1) ;
+    setLine (line, CS1) ;
+
+    for (x = 63 ; x >= 0 ; --x)
+    {
+      byte = 0 ;
+      for (y = 0 ; y < 8 ; ++y)
+      {
+	fbLoc = x + (((7 - line) * 8) + (7 - y)) * LCD_WIDTH ;
+	if (frameBuffer [fbLoc] != 0)
+	  byte |= (1 << y) ;
+      }
+      sendData (byte, CS1) ;
+    }
+  }
+
+// Right side 
+
+  for (line = 0 ; line < 8 ; ++line)
+  {
+    setCol  (0,    CS2) ;
+    setLine (line, CS2) ;
+
+    for (x = 127 ; x >= 64 ; --x)
+    {
+      byte = 0 ;
+      for (y = 0 ; y < 8 ; ++y)
+      {
+	fbLoc = x + (((7 - line) * 8) + (7 - y)) * LCD_WIDTH ;
+	if (frameBuffer [fbLoc] != 0)
+	  byte |= (1 << y) ;
+      }
+      sendData (byte, CS2) ;
+    }
+  }
+}
+
+
+/*
+ * lcd128x64setOrigin:
+ *	Set the display offset origin
+ *********************************************************************************
+ */
+
+void lcd128x64setOrigin (int x, int y)
+{
+  xOrigin = x ;
+  yOrigin = y ;
+}
+
+
+/*
+ * lcd128x64setOrientation:
+ *	Set the display orientation:
+ *	0: Normal, the display is portrait mode, 0,0 is top left
+ *	1: Landscape
+ *	2: Portrait, flipped
+ *	3: Landscape, flipped
+ *********************************************************************************
+ */
+
+void lcd128x64setOrientation (int orientation)
+{
+  lcdOrientation = orientation & 3 ;
+
+  lcd128x64setOrigin (0,0) ;
+
+  switch (lcdOrientation)
+  {
+    case 0:
+      maxX = LCD_WIDTH ;
+      maxY = LCD_HEIGHT ;
+      break ;
+
+    case 1:
+      maxX = LCD_HEIGHT ;
+      maxY = LCD_WIDTH ;
+      break ;
+
+    case 2:
+      maxX = LCD_WIDTH ;
+      maxY = LCD_HEIGHT ;
+      break ;
+
+    case 3:
+      maxX = LCD_HEIGHT ;
+      maxY = LCD_WIDTH ;
+      break ;
+  }
+}
+
+
+/*
+ * lcd128x64orientCoordinates:
+ *	Adjust the coordinates given to the display orientation
+ *********************************************************************************
+ */
+
+void lcd128x64orientCoordinates (int *x, int *y)
+{
+  register int tmp ;
+
+  *x += xOrigin ;
+  *y += yOrigin ;
+  *y  = maxY - *y - 1 ;
+
+  switch (lcdOrientation)
+  {
+    case 0:
+      break;
+
+    case 1:
+      tmp = maxY - *y - 1 ;
+      *y = *x ;
+      *x = tmp ;
+      break;
+
+    case 2:
+      *x = maxX - *x - 1 ;
+      *y = maxY - *y - 1 ;
+      break;
+
+    case 3:
+      *x = maxX - *x - 1 ;
+      tmp = *y ;
+      *y = *x ;
+      *x = tmp ;
+      break ;
+  }
+}
+
+
+/*
+ * lcd128x64getScreenSize:
+ *	Return the max X & Y screen sizes. Needs to be called again, if you 
+ *	change screen orientation.
+ *********************************************************************************
+ */
+
+void lcd128x64getScreenSize (int *x, int *y)
+{
+  *x = maxX ;
+  *y = maxY ;
+}
+
+
+/*
+ *********************************************************************************
+ * Standard Graphical Functions
+ *********************************************************************************
+ */
+
+
+/*
+ * lcd128x64point:
+ *	Plot a pixel.
+ *********************************************************************************
+ */
+
+void lcd128x64point (int x, int y, int colour)
+{
+  lastX = x ;
+  lastY = y ;
+
+  lcd128x64orientCoordinates (&x, &y) ;
+
+  if ((x < 0) || (x >= LCD_WIDTH) || (y < 0) || (y >= LCD_HEIGHT))
+    return ;
+
+  frameBuffer [x + y * LCD_WIDTH] = colour ;
+}
+
+
+/*
+ * lcd128x64line: lcd128x64lineTo:
+ *	Classic Bressenham Line code
+ *********************************************************************************
+ */
+
+void lcd128x64line (int x0, int y0, int x1, int y1, int colour)
+{
+  int dx, dy ;
+  int sx, sy ;
+  int err, e2 ;
+
+  lastX = x1 ;
+  lastY = y1 ;
+
+  dx = abs (x1 - x0) ;
+  dy = abs (y1 - y0) ;
+
+  sx = (x0 < x1) ? 1 : -1 ;
+  sy = (y0 < y1) ? 1 : -1 ;
+
+  err = dx - dy ;
+ 
+  for (;;)
+  {
+    lcd128x64point (x0, y0, colour) ;
+
+    if ((x0 == x1) && (y0 == y1))
+      break ;
+
+    e2 = 2 * err ;
+
+    if (e2 > -dy)
+    {
+      err -= dy ;
+      x0  += sx ;
+    }
+
+    if (e2 < dx)
+    {
+      err += dx ;
+      y0  += sy ;
+    }
+  }
+
+}
+
+void lcd128x64lineTo (int x, int y, int colour)
+{
+  lcd128x64line (lastX, lastY, x, y, colour) ;
+}
+
+
+/*
+ * lcd128x64rectangle:
+ *	A rectangle is a spoilt days fishing
+ *********************************************************************************
+ */
+
+void lcd128x64rectangle (int x1, int y1, int x2, int y2, int colour, int filled)
+{
+  register int x ;
+
+  if (filled)
+  {
+    /**/ if (x1 == x2)
+      lcd128x64line (x1, y1, x2, y2, colour) ;
+    else if (x1 < x2)
+      for (x = x1 ; x <= x2 ; ++x)
+	lcd128x64line (x, y1, x, y2, colour) ;
+    else
+      for (x = x2 ; x <= x1 ; ++x)
+	lcd128x64line (x, y1, x, y2, colour) ;
+  }
+  else
+  {
+    lcd128x64line   (x1, y1, x2, y1, colour) ;
+    lcd128x64lineTo (x2, y2, colour) ;
+    lcd128x64lineTo (x1, y2, colour) ;
+    lcd128x64lineTo (x1, y1, colour) ;
+  }
+}
+
+
+/*
+ * lcd128x64circle:
+ *      This is the midpoint circle algorithm.
+ *********************************************************************************
+ */
+
+void lcd128x64circle (int x, int y, int r, int colour, int filled)
+{
+  int ddF_x = 1 ;
+  int ddF_y = -2 * r ;
+
+  int f = 1 - r ;
+  int x1 = 0 ;
+  int y1 = r ;
+
+  if (filled)
+  {
+    lcd128x64line (x, y + r, x, y - r, colour) ;
+    lcd128x64line (x + r, y, x - r, y, colour) ;
+  }
+  else
+  {
+    lcd128x64point (x, y + r, colour) ;
+    lcd128x64point (x, y - r, colour) ;
+    lcd128x64point (x + r, y, colour) ;
+    lcd128x64point (x - r, y, colour) ;
+  }
+
+  while (x1 < y1)
+  {
+    if (f >= 0)
+    {
+      y1-- ;
+      ddF_y += 2 ;
+      f += ddF_y ;
+    }
+    x1++ ;
+    ddF_x += 2 ;
+    f += ddF_x ;
+    if (filled)
+    {
+      lcd128x64line (x + x1, y + y1, x - x1, y + y1, colour) ;
+      lcd128x64line (x + x1, y - y1, x - x1, y - y1, colour) ;
+      lcd128x64line (x + y1, y + x1, x - y1, y + x1, colour) ;
+      lcd128x64line (x + y1, y - x1, x - y1, y - x1, colour) ;
+    }
+    else
+    {
+      lcd128x64point (x + x1, y + y1, colour) ; lcd128x64point (x - x1, y + y1, colour) ;
+      lcd128x64point (x + x1, y - y1, colour) ; lcd128x64point (x - x1, y - y1, colour) ;
+      lcd128x64point (x + y1, y + x1, colour) ; lcd128x64point (x - y1, y + x1, colour) ;
+      lcd128x64point (x + y1, y - x1, colour) ; lcd128x64point (x - y1, y - x1, colour) ;
+    }
+  }
+}
+
+
+/*
+ * lcd128x64ellipse:
+ *	Fast ellipse drawing algorithm by 
+ *      John Kennedy
+ *	Mathematics Department
+ *	Santa Monica College
+ *	1900 Pico Blvd.
+ *	Santa Monica, CA 90405
+ *	jrkennedy6@gmail.com
+ *	-Confirned in email this algorithm is in the public domain -GH-
+ *********************************************************************************
+ */
+
+static void plot4ellipsePoints (int cx, int cy, int x, int y, int colour, int filled)
+{
+  if (filled)
+  {
+    lcd128x64line (cx + x, cy + y, cx - x, cy + y, colour) ;
+    lcd128x64line (cx - x, cy - y, cx + x, cy - y, colour) ;
+  }
+  else
+  {
+    lcd128x64point (cx + x, cy + y, colour) ;
+    lcd128x64point (cx - x, cy + y, colour) ;
+    lcd128x64point (cx - x, cy - y, colour) ;
+    lcd128x64point (cx + x, cy - y, colour) ;
+  }
+}
+
+void lcd128x64ellipse (int cx, int cy, int xRadius, int yRadius, int colour, int filled)
+{
+  int x, y ;
+  int xChange, yChange, ellipseError ;
+  int twoAsquare, twoBsquare ;
+  int stoppingX, stoppingY ;
+
+  twoAsquare = 2 * xRadius * xRadius ;
+  twoBsquare = 2 * yRadius * yRadius ;
+
+  x = xRadius ;
+  y = 0 ;
+
+  xChange = yRadius * yRadius * (1 - 2 * xRadius) ;
+  yChange = xRadius * xRadius ;
+
+  ellipseError = 0 ;
+  stoppingX    = twoBsquare * xRadius ;
+  stoppingY    = 0 ;
+
+  while (stoppingX >= stoppingY)	// 1st set of points
+  {
+    plot4ellipsePoints (cx, cy, x, y, colour, filled) ;
+    ++y ;
+    stoppingY    += twoAsquare ;
+    ellipseError += yChange ;
+    yChange      += twoAsquare ;
+
+    if ((2 * ellipseError + xChange) > 0 )
+    {
+      --x ;
+      stoppingX    -= twoBsquare ;
+      ellipseError += xChange ;
+      xChange      += twoBsquare ;
+    }
+  }
+
+  x = 0 ;
+  y = yRadius ;
+
+  xChange = yRadius * yRadius ;
+  yChange = xRadius * xRadius * (1 - 2 * yRadius) ;
+
+  ellipseError = 0 ;
+  stoppingX    = 0 ;
+  stoppingY    = twoAsquare * yRadius ;
+
+  while (stoppingX <= stoppingY)	//2nd set of points
+  {
+    plot4ellipsePoints (cx, cy, x, y, colour, filled) ;
+    ++x ;
+    stoppingX    += twoBsquare ;
+    ellipseError += xChange ;
+    xChange      += twoBsquare ;
+
+    if ((2 * ellipseError + yChange) > 0 )
+    {
+      --y ;
+      stoppingY -= twoAsquare ;
+      ellipseError += yChange ;
+      yChange += twoAsquare ;
+    }
+  }
+}
+
+
+/*
+ * lcd128x64putchar:
+ *	Print a single character to the screen
+ *********************************************************************************
+ */
+
+void lcd128x64putchar (int x, int y, int c, int bgCol, int fgCol)
+{
+  int y1, y2 ;
+
+  unsigned char line ;
+  unsigned char *fontPtr ;
+
+// Can't print if we're offscreen
+
+//if ((x < 0) || (x >= (maxX - fontWidth)) || (y < 0) || (y >= (maxY - fontHeight)))
+//  return ;
+
+  fontPtr = font + c * fontHeight ;
+
+  for (y1 = fontHeight - 1 ; y1 >= 0 ; --y1)
+  {
+    y2 = y + y1 ;
+    line = *fontPtr++ ;
+    lcd128x64point (x + 0, y2, (line & 0x80) == 0 ? bgCol : fgCol) ;
+    lcd128x64point (x + 1, y2, (line & 0x40) == 0 ? bgCol : fgCol) ;
+    lcd128x64point (x + 2, y2, (line & 0x20) == 0 ? bgCol : fgCol) ;
+    lcd128x64point (x + 3, y2, (line & 0x10) == 0 ? bgCol : fgCol) ;
+    lcd128x64point (x + 4, y2, (line & 0x08) == 0 ? bgCol : fgCol) ;
+    lcd128x64point (x + 5, y2, (line & 0x04) == 0 ? bgCol : fgCol) ;
+    lcd128x64point (x + 6, y2, (line & 0x02) == 0 ? bgCol : fgCol) ;
+    lcd128x64point (x + 7, y2, (line & 0x01) == 0 ? bgCol : fgCol) ;
+  }
+}
+
+
+/*
+ * lcd128x64puts:
+ *	Send a string to the display. Obeys \n and \r formatting
+ *********************************************************************************
+ */
+
+void lcd128x64puts (int x, int y, const char *str, int bgCol, int fgCol)
+{
+  int c, mx, my ;
+
+  mx = x ; my = y ;
+
+  while (*str)
+  {
+    c = *str++ ;
+
+    if (c == '\r')
+    {
+      mx = x ;
+      continue ;
+    }
+
+    if (c == '\n')
+    {
+      mx  = x ;
+      my -= fontHeight ;
+      continue ;
+    }
+
+    lcd128x64putchar (mx, my, c, bgCol, fgCol) ;
+
+    mx += fontWidth ;
+    if (mx >= (maxX - fontWidth))
+    {
+      mx  = 0 ;
+      my -= fontHeight ;
+    }
+  }
+}
+
+
+/*
+ * lcd128x64clear:
+ *	Clear the display to the given colour.
+ *********************************************************************************
+ */
+
+void lcd128x64clear (int colour)
+{
+  register int i ;
+  register unsigned char *ptr = frameBuffer ;
+
+  for (i = 0 ; i < (maxX * maxY) ; ++i)
+    *ptr++ = colour ;
+}
+
+
+
+
+/*
+ * lcd128x64setup:
+ *	Initialise the display and GPIO.
+ *********************************************************************************
+ */
+
+int lcd128x64setup (void)
+{
+  int i ;
+
+  for (i = 0 ; i < 8 ; ++i)
+    pinMode (i, OUTPUT) ;
+
+  digitalWrite (CS1,    1) ;
+  digitalWrite (CS2,    1) ;
+  digitalWrite (STROBE, 0) ;
+  digitalWrite (RS,     1) ;
+
+  pinMode (CS1,    OUTPUT) ;
+  pinMode (CS2,    OUTPUT) ;
+  pinMode (STROBE, OUTPUT) ;
+  pinMode (RS,     OUTPUT) ;
+
+  sendCommand (0x3F, CS1) ;	// Display ON
+  sendCommand (0xC0, CS1) ;	// Set display start line to 0
+
+  sendCommand (0x3F, CS2) ;	// Display ON
+  sendCommand (0xC0, CS2) ;	// Set display start line to 0
+
+  lcd128x64clear          (0) ;
+  lcd128x64setOrientation (0) ;
+  lcd128x64update         () ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/devLib/lcd128x64.h b/modules/catkin_ws/src/wiringPi/devLib/lcd128x64.h
new file mode 100644
index 00000000..b448bbc8
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/lcd128x64.h
@@ -0,0 +1,39 @@
+/*
+ * lcd128x64.h:
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+extern void lcd128x64setOrigin         (int x, int y) ;
+extern void lcd128x64setOrientation    (int orientation) ;
+extern void lcd128x64orientCoordinates (int *x, int *y) ;
+extern void lcd128x64getScreenSize     (int *x, int *y) ;
+extern void lcd128x64point             (int  x, int  y, int colour) ;
+extern void lcd128x64line              (int x0, int y0, int x1, int y1, int colour) ;
+extern void lcd128x64lineTo            (int  x, int  y, int colour) ;
+extern void lcd128x64rectangle         (int x1, int y1, int x2, int y2, int colour, int filled) ;
+extern void lcd128x64circle            (int  x, int  y, int  r, int colour, int filled) ;
+extern void lcd128x64ellipse           (int cx, int cy, int xRadius, int yRadius, int colour, int filled) ;
+extern void lcd128x64putchar           (int  x, int  y, int c, int bgCol, int fgCol) ;
+extern void lcd128x64puts              (int  x, int  y, const char *str, int bgCol, int fgCol) ;
+extern void lcd128x64update            (void) ;
+extern void lcd128x64clear             (int colour) ;
+
+extern int  lcd128x64setup             (void) ;
diff --git a/modules/catkin_ws/src/wiringPi/devLib/lcd128x64.o b/modules/catkin_ws/src/wiringPi/devLib/lcd128x64.o
new file mode 100644
index 0000000000000000000000000000000000000000..3efe19e452fa56c4822a502af4403b6d75fed381
GIT binary patch
literal 11472
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
Wm+b4)v7KrC{qh0$zHLF<ko_;fYeHoJ

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/devLib/libwiringPiDev.so.2.0 b/modules/catkin_ws/src/wiringPi/devLib/libwiringPiDev.so.2.0
new file mode 100755
index 0000000000000000000000000000000000000000..445f4b488f0dbc0bb236fc36f1c0ba6d1476e284
GIT binary patch
literal 31136
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
HbIbp~f-sKk

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/devLib/maxdetect.c b/modules/catkin_ws/src/wiringPi/devLib/maxdetect.c
new file mode 100755
index 00000000..23eabf80
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/maxdetect.c
@@ -0,0 +1,165 @@
+/*
+ * maxdetect.c:
+ *	Driver for the MaxDetect series sensors
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+//#include <stdio.h>
+//#include <stdlib.h>
+//#include <unistd.h>
+
+#include <wiringPi.h>
+
+#include "maxdetect.h"
+
+#ifndef	TRUE
+#  define	TRUE	(1==1)
+#  define	FALSE	(1==2)
+#endif
+
+
+/*
+ * maxDetectLowHighWait:
+ *	Wait for a transition from high to low on the bus
+ *********************************************************************************
+ */
+
+static void maxDetectLowHighWait (const int pin)
+{
+  unsigned int timeOut = millis () + 2000 ;
+
+  while (digitalRead (pin) == HIGH)
+    if (millis () > timeOut)
+      return ;
+
+  while (digitalRead (pin) == LOW)
+    if (millis () > timeOut)
+      return ;
+}
+
+
+/*
+ * maxDetectClockByte:
+ *	Read in a single byte from the MaxDetect bus
+ *********************************************************************************
+ */
+
+static unsigned int maxDetectClockByte (const int pin)
+{
+  unsigned int byte = 0 ;
+  int bit ;
+
+  for (bit = 0 ; bit < 8 ; ++bit)
+  {
+    maxDetectLowHighWait (pin) ;
+
+// bit starting now - we need to time it.
+
+    delayMicroseconds (30) ;
+    byte <<= 1 ;
+    if (digitalRead (pin) == HIGH)	// It's a 1
+      byte |= 1 ;
+  }
+
+  return byte ;
+}
+
+
+/*
+ * maxDetectRead:
+ *	Read in and return the 4 data bytes from the MaxDetect sensor.
+ *	Return TRUE/FALSE depending on the checksum validity
+ *********************************************************************************
+ */
+
+int maxDetectRead (const int pin, unsigned char buffer [4])
+{
+  int i ;
+  unsigned int checksum ;
+  unsigned char localBuf [5] ;
+
+// Wake up the RHT03 by pulling the data line low, then high
+//	Low for 10mS, high for 40uS.
+
+  pinMode      (pin, OUTPUT) ;
+  digitalWrite (pin, 0) ; delay             (10) ;
+  digitalWrite (pin, 1) ; delayMicroseconds (40) ;
+  pinMode      (pin, INPUT) ;
+
+// Now wait for sensor to pull pin low
+
+  maxDetectLowHighWait (pin) ;
+
+// and read in 5 bytes (40 bits)
+
+  for (i = 0 ; i < 5 ; ++i)
+    localBuf [i] = maxDetectClockByte (pin) ;
+
+  checksum = 0 ;
+  for (i = 0 ; i < 4 ; ++i)
+  {
+    buffer [i] = localBuf [i] ;
+    checksum += localBuf [i] ;
+  }
+  checksum &= 0xFF ;
+
+  return checksum == localBuf [4] ;
+}
+
+
+/*
+ * readRHT03:
+ *	Read the Temperature & Humidity from an RHT03 sensor
+ *********************************************************************************
+ */
+
+int readRHT03 (const int pin, int *temp, int *rh)
+{
+  static unsigned int nextTime   = 0 ;
+  static          int lastTemp   = 0 ;
+  static          int lastRh     = 0 ;
+  static          int lastResult = TRUE ;
+
+  unsigned char buffer [4] ;
+
+// Don't read more than once a second
+
+  if (millis () < nextTime)
+  {
+    *temp = lastTemp ;
+    *rh   = lastRh ;
+    return lastResult ;
+  }
+  
+  lastResult = maxDetectRead (pin, buffer) ;
+
+  if (lastResult)
+  {
+    *temp      = lastTemp   = (buffer [2] * 256 + buffer [3]) ;
+    *rh        = lastRh     = (buffer [0] * 256 + buffer [1]) ;
+    nextTime   = millis () + 2000 ;
+    return TRUE ;
+  }
+  else
+  {
+    return FALSE ;
+  }
+}
diff --git a/modules/catkin_ws/src/wiringPi/devLib/maxdetect.h b/modules/catkin_ws/src/wiringPi/devLib/maxdetect.h
new file mode 100755
index 00000000..a1fd742e
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/maxdetect.h
@@ -0,0 +1,40 @@
+/*
+ * maxdetect.h:
+ *	Driver for the MaxDetect series sensors
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Main generic function
+
+int maxDetectRead (const int pin, unsigned char buffer [4]) ;
+
+// Individual sensors
+
+int readRHT03 (const int pin, int *temp, int *rh) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/devLib/maxdetect.o b/modules/catkin_ws/src/wiringPi/devLib/maxdetect.o
new file mode 100644
index 0000000000000000000000000000000000000000..924f414a6ca9a33a4791cd54c4fd69830e8133b0
GIT binary patch
literal 3312
zcmbW3Uu;uV7{JeMJ65-GTVawKjBE62YLsg`#<Gbay<NNAVG%Mqi6Yd}-mzx=m-aR=
zAM~Mu+>GfoJir@ICKw+u8e(F?YQ_ssVt6n<>5~#mf;<R3p!56AJ!d<+YhV15+jG9(
z_wW3@w;v{w<1R@eTqLrOtZSSSa`lPzew22jWGm?*(}%5p^u}H99b}6aZ*>#W>hlc{
zs*kQzpSSMOZsU<;wpu+)ocA(*rfJ^Q8#la1kFEFy;)G~Nw6`X$huXB3x{l*u`9nE<
z!Sg~0fNsT=K%`0YL>^f8l8Xh!PqpP9Fdwk)QiTSy8p{~B7C<{-iLI`#PA(?8FrjzG
zH}DZS5%RqkeiD%fT(|Beqz89)fba6NVBx{&8n^B@Zb~q*xG#Rc(UR)76X%AM$;J&S
zxi_bH>)%G2k(-+DTB?g^=lZ+#MpKf0(i@LF^*<xck)+b^yU^4ZOeK)hcMs9I)qSuO
zp`*vNceP{MaV@<<%fV{SsC+zHYFe`%AJ(nEb?Y`Pynn;Oc-g}2?ZN@p1{Y{+B?#-d
z?N(n%Dqg7CXIC|#svoPa%q;2F?{Vu7TK7!TqT%K(-?g~nf{7^ZAAa*npr#ZFlG<k9
zHIG8E<+cG0?!uE`>)+u%wiYP1&(_4)*lWSi^oe@OtOxg~Luz=}aGh$A4<f^Act{<6
z$>zbqaAY_<93I8_p!C}fk=~yo(rLf6v#;B`1O*h}&oJ8?*lM!>tV@#v4fnVlbVcO=
z08RGlV1i>tWjhWmCi_2i#pJ*z?t~m%^u*-Q`L1y}e0GZ_k2Jc+<@a2z9(hEQ!<rn5
z$wBahh?wlvdPx|<m+Vwz8C$TN$C_u|aXHxV?3cqXy+;lLf#MJ|*2}y%H#igzxxc#E
zLWsNVjYRHl=ML1<fz$omVA~3sOUO^x4%l<>NRY?Nym>~PGjgu;b|2%+ea*g~^7V0Y
zfAn(`I3sPuy;gOj(M`5&1fabGkAD*-q|$+(>cAVox53N~v0U_QK>xE2{+BxNFFNqA
zI`Hcq_>aJGJQX|`AoP4;r<ggNGfX3Es#)yEX+K#$rRPu19?9fQQZi1PseI8;;p&7*
zAyYF`MzMlgglbc>*dMg}My*~jQQu9{6Ul=yEtx(zK7KfnN~g3~GLa_5e4&u9kzD>{
z-pmxHj7)C5D%C3a(t&c$;2uY+c@q?)keRoC59G7ea?Qw=OSu|Jr)y>=JD1MR&ZTEE
z`2wjz!YMr!-i=d3;hz~iCq8%{!<!f7X*7a3xng6=@f>jfh`_}>uM1rCpBMNxA<xGG
z-!AYA0>^g}uX|bGqW_lye@gKGM&M%IzXUG&KNPq){xmx$xIR1J;p6#S;Nm)5WZVV5
z7=sVWWe2w@Ay*un=l@#Zc*{BenQ_efq`-ge;Qz0{`B<>F4+jXs$I0{eGmgIEyapWp
zJlD&Dzqmd@Ob&u(=0bJ+PM~mp$W{s8ch33!Bx-HGXl718YgX-cmiMY~8&ngnB~f!3
zGegu9wHl#7t(OY<IioO7)NHv}G)mx7Dw~En@#gd{dR2%@qm9}0Of^$9*eL#g6NFG)
zYUi6Y3Jm2{aS=erGbYMTP;gD7B82`DOITs?_@%=-{QD7L{x34V{zb42JdW=db6-1`
zTz>^Rn9~_=vbufTk+sfz_+Dr?e;)4$r@kVKviPtFq0i&@I5<1jYk4MFyu*!LajZMH
z^LVZwXYo$=s|+-`BWwBkbNn`R+U*~I@$z$z`-ibSp6?&tW#`%hB076<&!QrTbNr|~
g$Byn5mNd$YxQ{YC&iYuUUHz-<ugx!D7sXlsKW$kS2mk;8

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/devLib/piFace.c b/modules/catkin_ws/src/wiringPi/devLib/piFace.c
new file mode 100644
index 00000000..4475c7f5
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/piFace.c
@@ -0,0 +1,112 @@
+/*
+ * piFace.:
+ *	This file to interface with the PiFace peripheral device which
+ *	has an MCP23S17 GPIO device connected via the SPI bus.
+ *
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+#include <stdio.h>
+#include <stdint.h>
+
+#include <wiringPi.h>
+#include <mcp23s17.h>
+
+#include "piFace.h"
+
+
+/*
+ * myDigitalWrite:
+ *	Perform the digitalWrite function on the PiFace board
+ *********************************************************************************
+ */
+
+void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  digitalWrite (pin + 16, value) ;
+}
+
+
+/*
+ * myDigitalRead:
+ *	Perform the digitalRead function on the PiFace board
+ *	With a slight twist - if we read from base + 8, then we
+ *	read from the output latch...
+ *********************************************************************************
+ */
+
+int myDigitalRead (struct wiringPiNodeStruct *node, int pin)
+{
+  if ((pin - node->pinBase) >= 8)
+    return digitalRead (pin + 8) ;
+  else
+    return digitalRead (pin + 16 + 8) ;
+}
+
+
+/*
+ * myPullUpDnControl:
+ *	Perform the pullUpDnControl function on the PiFace board
+ *********************************************************************************
+ */
+
+void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int pud)
+{
+  pullUpDnControl (pin + 16 + 8, pud) ;
+}
+
+
+/*
+ * piFaceSetup
+ *	We're going to create an instance of the mcp23s17 here, then
+ *	provide our own read/write routines on-top of it...
+ *	The supplied PiFace code (in Pithon) treats it as an 8-bit device
+ *	where you write the output ports and read the input port using the
+ *	same pin numbers, however I have had a request to be able to read
+ *	the output port, so reading 8..15 will read the output latch.
+ *********************************************************************************
+ */
+
+int piFaceSetup (const int pinBase)
+{
+  int    i ;
+  struct wiringPiNodeStruct *node ;
+
+// Create an mcp23s17 instance:
+
+   mcp23s17Setup (pinBase + 16, 0, 0) ;
+
+// Set the direction bits
+
+  for (i = 0 ; i < 8 ; ++i)
+  {
+    pinMode (pinBase + 16 +     i, OUTPUT) ;	// Port A is the outputs
+    pinMode (pinBase + 16 + 8 + i, INPUT) ;	// Port B inputs.
+  }
+
+  node = wiringPiNewNode (pinBase, 16) ;
+  node->digitalRead     = myDigitalRead ;
+  node->digitalWrite    = myDigitalWrite ;
+  node->pullUpDnControl = myPullUpDnControl ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/devLib/piFace.h b/modules/catkin_ws/src/wiringPi/devLib/piFace.h
new file mode 100644
index 00000000..49653144
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/piFace.h
@@ -0,0 +1,32 @@
+/*
+ * piFace.h:
+ *	Control the PiFace Interface board for the Raspberry Pi
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int  piFaceSetup (const int pinBase) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/devLib/piFace.o b/modules/catkin_ws/src/wiringPi/devLib/piFace.o
new file mode 100644
index 0000000000000000000000000000000000000000..cb2516fe77c25f4adee5e4806ec33ed7a42cd119
GIT binary patch
literal 2376
zcmbW2%}*0i5WuGeZB=M1exwEy_Fxo0Si1-a#+bI050eT6s2>rnOIcvU_9N{!fF?kK
zAvW5?cru<$ycm!E0mOv=z=KyzJgD)a9*74LoY}rdpPOx>PV#nUes5;p>%5oO<-T~o
z+vNf-F1P|!k5d5e-l`q8%rG><ekd;mN*}%wnD)2C0R7+}e(C#J&+0GFvL7d`Fn`Mm
zMVFVnmKzz5l(rLN<zygIHckYU_sUjj^9w~(>XkOvX*(7vKkzDBs~axM>G@Xt6f1pR
z5AfN+$44k_urv~?n%z~iRe5*&PGn*O26}rhNv(;=V#X{=opOg9YU?Ump0cEL$)OIp
z=X8Zj?IEQr)D`LhI83!sT=z%8wGePMH+Z~Hac8vracc&!8x<iIa$wjVOC+XSQQu^C
zo^;d~c;b%vf@^gVpR`)<p78}EzChIHWkC*#no|!yb{wXl&haDxd7V=@()t>FPYv#=
z!JRi;2f`&{nbfl;VV}H*$B<JW?Q$N06Tgg{>hL*UXQ)Q}T^28)CXuW!fPtFVV8~Jn
z_@(+`2Cef#`ymde_-8fviy9nqdcT^|<P@YAWBQD4s>Y4HZfcMmh!002@#JuS|5)F6
zay$}^_a$LU3`sAJ6b&Phi)DJV88e?XAZPP;YmRE_6i>G7%CcjcS<FE?m21CHP%c)y
zoSwOsozh@l&+D0)5q(ITA0odZ*O{gpa}dY&PDN$~-X!p14ZbGuLqdF+@iVA>0)H;>
zeFA?a@CJeN8%O&*An>Cso_M3c+XU_xINdK2iWj*=5XH@g<>04-8JzPwGHBxx^CxUP
z%zTgwi)mAxL~Z6PdX`&x%}`}iTQEVMQcV@)$wC1vAQv-+KBpOrAg8kFw3fk;OxD!o
zfuTfO!BkUoAY0kmY;roUrunJzMgLt(m_lz6?>DayX2x3%nCAW9xET%VZI}b5y9uIr
zsW=LqA({Mz2@*s(iG#TPW&25!4#LXq&YVMwYW{D&g1J=F{`>!S{V>Z9p%#VbcZv{g
zzJIQ-3QP<=#REj>5KHeNh0=W$rIqEch!Abwe~xdV;dFjs_SbQb1=9IZF3;!ZM{kI|
r_muLI<<F8Mi2Y|d?VZA3v%rr`)7wDrhJAfvPU}Bn@D0w3VqgC^baEY&

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/devLib/piGlow.c b/modules/catkin_ws/src/wiringPi/devLib/piGlow.c
new file mode 100644
index 00000000..44e3db8e
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/piGlow.c
@@ -0,0 +1,118 @@
+/*
+ * piGlow.c:
+ *	Easy access to the Pimoroni PiGlow board.
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <sn3218.h>
+
+#include "piGlow.h"
+
+#define	PIGLOW_BASE	577
+
+static int leg0 [6] = {  6,  7,  8,  5,  4,  9 } ;
+static int leg1 [6] = { 17, 16, 15, 13, 11, 10 } ;
+static int leg2 [6] = {  0,  1,  2,  3, 14, 12 } ;
+
+
+/*
+ * piGlow1:
+ *	Light up an individual LED
+ *********************************************************************************
+ */
+
+void piGlow1 (const int leg, const int ring, const int intensity)
+{
+  int *legLeds ;
+
+  if ((leg  < 0) || (leg  > 2)) return ;
+  if ((ring < 0) || (ring > 5)) return ;
+
+  /**/ if (leg == 0)
+    legLeds = leg0 ;
+  else if (leg == 1)
+    legLeds = leg1 ;
+  else
+    legLeds = leg2 ;
+
+  analogWrite (PIGLOW_BASE + legLeds [ring], intensity) ;
+}
+
+/*
+ * piGlowLeg:
+ *	Light up all 6 LEDs on a leg
+ *********************************************************************************
+ */
+
+void piGlowLeg (const int leg, const int intensity)
+{
+  int  i ;
+  int *legLeds ;
+
+  if ((leg < 0) || (leg > 2))
+    return ;
+
+  /**/ if (leg == 0)
+    legLeds = leg0 ;
+  else if (leg == 1)
+    legLeds = leg1 ;
+  else
+    legLeds = leg2 ;
+
+  for (i = 0 ; i < 6 ; ++i)
+    analogWrite (PIGLOW_BASE + legLeds [i], intensity) ;
+}
+
+
+/*
+ * piGlowRing:
+ *	Light up 3 LEDs in a ring. Ring 0 is the outermost, 5 the innermost
+ *********************************************************************************
+ */
+
+void piGlowRing (const int ring, const int intensity)
+{
+  if ((ring < 0) || (ring > 5))
+    return ;
+
+  analogWrite (PIGLOW_BASE + leg0 [ring], intensity) ;
+  analogWrite (PIGLOW_BASE + leg1 [ring], intensity) ;
+  analogWrite (PIGLOW_BASE + leg2 [ring], intensity) ;
+}
+
+/*
+ * piGlowSetup:
+ *	Initialise the board & remember the pins we're using
+ *********************************************************************************
+ */
+
+void piGlowSetup (int clear)
+{
+  sn3218Setup (PIGLOW_BASE) ;
+
+  if (clear)
+  {
+    piGlowLeg (0, 0) ;
+    piGlowLeg (1, 0) ;
+    piGlowLeg (2, 0) ;
+  }
+}
diff --git a/modules/catkin_ws/src/wiringPi/devLib/piGlow.h b/modules/catkin_ws/src/wiringPi/devLib/piGlow.h
new file mode 100644
index 00000000..a4d89d01
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/piGlow.h
@@ -0,0 +1,45 @@
+/*
+ * piglow.h:
+ *	Easy access to the Pimoroni PiGlow board.
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+#define	PIGLOW_RED	0
+#define	PIGLOW_ORANGE	1
+#define	PIGLOW_YELLOW	2
+#define	PIGLOW_GREEN	3
+#define	PIGLOW_BLUE	4
+#define	PIGLOW_WHITE	5
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void piGlow1     (const int leg,  const int ring, const int intensity) ;
+extern void piGlowLeg   (const int leg,  const int intensity) ;
+extern void piGlowRing  (const int ring, const int intensity) ;
+extern void piGlowSetup (int clear) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/devLib/piGlow.o b/modules/catkin_ws/src/wiringPi/devLib/piGlow.o
new file mode 100644
index 0000000000000000000000000000000000000000..d5f04a6a48200162f01b3ebc5925a524290a17be
GIT binary patch
literal 2768
zcmbVOO>7%Q6dv0NF-f~I6$hh&Y6PlM(X6~7O-TvJ&hJ_>gw{z5gkl_b^P@UW6z`Ij
z168#ol9gJr1c!<fM~*#msd{h~a^Q@Rs00$1qM}NuYJ~t{-nTn1*-RV>@uau!&G&w0
z=DnHSy*8E|4~Ig6DJ0$$yCX)0sCVq@DNjv_!=h8T&G6bQ?mz8o$Jd)??Jz9POJ;Ga
z`u*n6_3PiJ!$SNDu>06&5aLl|uKU=i5YpGIwF7mVA+vjQ`@vQn`A)Al(^Jzqv-SdP
z&dF@87_UC|<2EDJho;+Tt9^si_u-Hkyyx7XxtRWda@S?hp1eOixJ|+S{BE=T<1TLz
z{&-q?=FH+x)yJm$TXb{iroV14xinWF9t@lA-RR84z+UI-b2`tLtNwLoXQk^uIvq0&
zZ~w*<qv=gxJh_8<d-@CwXjgv4ur;4x2OJ^Rhz}7nJwr;2xSJT&?;`FbW_pSgv@S}F
zQnwL5O)MrxM$RO9re~e9?Icd={d%%@!0|@Lr^bMu?AHfR_;{i(X$&L>l7k3)77wD(
zC+9@yN-T8rP)D>*3&a|p_bft8O4&~`DfJ7G87+1roYvwSk+ha@+sX|sp5D@8!{2Gq
zQ2-l}8`x(L@dEsbF5z)ji*1BWE$&7#TEd~Ah8Ckh><M#z0Ux3>c%-$M8$R2qMaR3&
zdmaGy6KdKfesAu#pw6)Fr-;{qRyeA<pCVqx_u}YHi1MT)9G4RP1J1-a>J2<04UA(L
z@j5FF0TJ=K9RQ>n5jYKd={Xu63GA19_afowsY<5_XoZgujy&(k0I%Pqza{Zo68HK^
z`nwWO$WnW~BMkOd`NhiOL}__VFN%^ipTwgN4@2UH$WLS^htt{o<oI}QY$`vM9?p*C
zMWI|MEze(AU9>IfnYHGnc5boEYR<Bq6;Ua_+Go7x>*xoF@7<6;6t7Fk_}@*Rh83Le
z!iNgZd9FzuCkJ<$^L(!OGybK5bN;&u&iU_2T+RQB;?H>=9pL|`;?L_jA^V2>M~E4J
zBY>lZjAstOUzYjRb;bhz!TOvJ;KBR}nFoCVGvOTsVw}%s$%l7vKA$%goX@AwD_587
z!YoO9)t3vbty-mmZd+Gup<gQ41)<MYD#8PFr(9aRY?ZDGy|}!zWR=OKylh+g#M{%o
z6}wQpEOam0TFB3>7M3hI`~MdS3Pp+3o1P*J^uDa0KiYrSj*<brNU?*Iaql}V#4Q<*
z?+jGDgF*aWI!-$9-8UJmLVP9TaPNbp-u07YL{2sS4;defg|5Pe#MJ%&*Z7o-Pm&B0
z$Day<r1ShNGXX5<+8aES0RzV|g!ct7)jcTzKBw%@_2=<>q_pbawk*g;(h>bbEXQ;I
y@IRr}9w9yQ|8D_<0IBP5wRX7wEZ4s+1Mm+6R_DjRNvrw4#-@l?e6jOX=l>U0o>q?l

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/devLib/piNes.c b/modules/catkin_ws/src/wiringPi/devLib/piNes.c
new file mode 100644
index 00000000..a115050e
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/piNes.c
@@ -0,0 +1,113 @@
+/*
+ * piNes.c:
+ *	Driver for the NES Joystick controller on the Raspberry Pi
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+
+#include "piNes.h"
+
+#define	MAX_NES_JOYSTICKS	8
+
+#define	NES_RIGHT	0x01
+#define	NES_LEFT	0x02
+#define	NES_DOWN	0x04
+#define	NES_UP		0x08
+#define	NES_START	0x10
+#define	NES_SELECT	0x20
+#define	NES_B		0x40
+#define	NES_A		0x80
+
+
+#define	PULSE_TIME	25
+
+// Data to store the pins for each controller
+
+struct nesPinsStruct
+{
+  unsigned int cPin, dPin, lPin ;
+} ;
+
+static struct nesPinsStruct nesPins [MAX_NES_JOYSTICKS] ;
+
+static int joysticks = 0 ;
+
+
+/*
+ * setupNesJoystick:
+ *	Create a new NES joystick interface, program the pins, etc.
+ *********************************************************************************
+ */
+
+int setupNesJoystick (int dPin, int cPin, int lPin)
+{
+  if (joysticks == MAX_NES_JOYSTICKS)
+    return -1 ;
+
+  nesPins [joysticks].dPin = dPin ;
+  nesPins [joysticks].cPin = cPin ;
+  nesPins [joysticks].lPin = lPin ;
+
+  digitalWrite (lPin, LOW) ;
+  digitalWrite (cPin, LOW) ;
+
+  pinMode (lPin, OUTPUT) ;
+  pinMode (cPin, OUTPUT) ;
+  pinMode (dPin, INPUT) ;
+
+  return joysticks++ ;
+}
+
+
+/*
+ * readNesJoystick:
+ *	Do a single scan of the NES Joystick.
+ *********************************************************************************
+ */
+
+unsigned int readNesJoystick (int joystick)
+{
+  unsigned int value = 0 ;
+  int  i ;
+
+  struct nesPinsStruct *pins = &nesPins [joystick] ;
+ 
+// Toggle Latch - which presents the first bit
+
+  digitalWrite (pins->lPin, HIGH) ; delayMicroseconds (PULSE_TIME) ;
+  digitalWrite (pins->lPin, LOW)  ; delayMicroseconds (PULSE_TIME) ;
+
+// Read first bit
+
+  value = digitalRead (pins->dPin) ;
+
+// Now get the next 7 bits with the clock
+
+  for (i = 0 ; i < 7 ; ++i)
+  {
+    digitalWrite (pins->cPin, HIGH) ; delayMicroseconds (PULSE_TIME) ;
+    digitalWrite (pins->cPin, LOW)  ; delayMicroseconds (PULSE_TIME) ;
+    value = (value << 1) | digitalRead (pins->dPin) ;
+  }
+
+  return value ^ 0xFF ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/devLib/piNes.h b/modules/catkin_ws/src/wiringPi/devLib/piNes.h
new file mode 100644
index 00000000..897f1815
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/devLib/piNes.h
@@ -0,0 +1,45 @@
+/*
+ * piNes.h:
+ *	Driver for the NES Joystick controller on the Raspberry Pi
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#define	MAX_NES_JOYSTICKS	8
+
+#define	NES_RIGHT	0x01
+#define	NES_LEFT	0x02
+#define	NES_DOWN	0x04
+#define	NES_UP		0x08
+#define	NES_START	0x10
+#define	NES_SELECT	0x20
+#define	NES_B		0x40
+#define	NES_A		0x80
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int          setupNesJoystick (int dPin, int cPin, int lPin) ;
+extern unsigned int  readNesJoystick (int joystick) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/devLib/piNes.o b/modules/catkin_ws/src/wiringPi/devLib/piNes.o
new file mode 100644
index 0000000000000000000000000000000000000000..a080524846d668b735113e77e539d0ccc1096f7e
GIT binary patch
literal 2592
zcmbW2-)mE67{{N}WHxRZqjOMkV6KLO9uijzjxloT(q<CdVpC*j7t`cuV%rm!a{|f0
zS?DG^bb(y$a({z2f)`_61O|e4A_!jCJG~HO6vPXqd!9G%LmyAix!F_N_jy0h_j%sm
zr?>OPsS(2fHUqwaogPzw%{@DQPPsYQ4<AFJ`VsZk-zGfIDlPa=3cbU*LQlbY%YWx@
z6?*Z$---Jf|FvIFWZ%3bz5kq@*MHM+8t(Yt`Y*I%L)E&x*qbw~EB<GcJ-B8bIQ9#9
zaDN+3^b6H(J-SuGsoY+eS2eA_Mp0boo$PPiN~pme96_KwBzh>x;=?Ho4jfxUA#B_N
zRmga@D;pxS_YSP}S4Ml_KONt`yl7n+P^ExPpF8(e`uM_9+wt1zGv>INIW^H%z3k7~
z2{SWpo;@+->C>6)L}ns$mMR?9WsILLg3(DCNB4~;`nZ!Pk$<jZcc`67rhXr>l4Eyb
zGs*ONe55!?j#>XCQ~5{91cpgpBpuqH^ruMrJn1c^{|)8I)T9zqJi_P@<M8ixSU47X
zqX1&~6J{~26lO6{SK))uUhEk{&zYZUp4RHCx}_!tbQyMA3}{DoTMWeI*Wshs9un(P
zdyS0tGo>}MnT+7G5&RNzs^8Z|)Y+haJwo4&;Bd1sW4mS*ZZx~D*QhSL;Mne5!*Rj2
zz4lEEp4Sm5PZwt=tzvn0YHB`TDwnLuV!jNu#`T6*S-I3|cs5pZE;MU4wCqYvrq=A0
zO7}ve+G@IXwdvGcPP>RgS^}T+2>NtJ@95p4jZqMdIp5tchgfO%qtE)UBX~jZq|lcl
z_zw|WO%`K3A0GEdtq<})0-Wc6Pt=$5e;_#B6R!VIaH)SRxYR!r{Gh0_CAh5fUT|4w
zRDbO0Or-vx;8K4?a5-*T*QfoVU$!~zFz<7~bi1owWeH5zYYp2vdo8?7re}9NFl!aB
z0_KwIf&ymSS!pcWD_t<F&DB-gL5b7!Y;$^M;gsuDs>@)iY`b2*)~c-9Jlg+m)0jz1
z4t@c0$jD5+AH&}6w@=>*+S?opbXzBgwyE<!L7!ay0`a@}LUVpU*j45P#$_JF^gW`Q
z!TdEXT;oLDrUU&f_DLFCKj#PJN-J3oJCvW15Pi-+6W~05Zok7g`%-!@42Edwos(4F
zNvd;S=Xa<hjQ5|>_vnP3UqNpOuZzx)ayg&RkKRad?-4;q=hvwtEV!(&xsyDj7j#!A
Z>_f(Lpg50D{~yD~-_-C|5(^8C{~u86cESJv

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/examples/COPYING.LESSER b/modules/catkin_ws/src/wiringPi/examples/COPYING.LESSER
new file mode 100644
index 00000000..65c5ca88
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/COPYING.LESSER
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/modules/catkin_ws/src/wiringPi/examples/Gertboard/7segments.c b/modules/catkin_ws/src/wiringPi/examples/Gertboard/7segments.c
new file mode 100644
index 00000000..8797e492
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/Gertboard/7segments.c
@@ -0,0 +1,221 @@
+/*
+ * 7segments.c:
+ *	Simple test program to see if we can drive a 7-segment LED
+ *	display using the GPIO and little else on the Raspberry Pi
+ *
+ *	Copyright (c) 2013 Gordon Henderson
+ ***********************************************************************
+ */
+
+#undef	PHOTO_HACK
+
+#include <wiringPi.h>
+
+#include <stdio.h>
+#include <time.h>
+#include <ctype.h>
+#include <string.h>
+
+/*
+ *  Segment mapping
+ *
+ *	 --a--
+ *	|     |
+ *	f     b
+ *	|     |
+ *	 --g--
+ *	|     |
+ *	e     c
+ *	|     |
+ *	 --d--  p
+ */
+
+// GPIO Pin Mapping
+
+static int digits   [6] = {  7, 11, 10, 13, 12, 14    } ;
+static int segments [7] = {  6,  5,  4,  3,  2,  1, 0 } ;
+
+
+static const int segmentDigits [] =
+{
+// a  b  c  d  e  f  g     Segments
+// 6  5  4  3  2  1  0,	// wiringPi pin No.
+
+   1, 1, 1, 1, 1, 1, 0,	// 0
+   0, 1, 1, 0, 0, 0, 0,	// 1
+   1, 1, 0, 1, 1, 0, 1,	// 2
+   1, 1, 1, 1, 0, 0, 1,	// 3
+   0, 1, 1, 0, 0, 1, 1,	// 4
+   1, 0, 1, 1, 0, 1, 1,	// 5
+   1, 0, 1, 1, 1, 1, 1,	// 6
+   1, 1, 1, 0, 0, 0, 0,	// 7
+   1, 1, 1, 1, 1, 1, 1,	// 8
+   1, 1, 1, 1, 0, 1, 1,	// 9
+   1, 1, 1, 0, 1, 1, 1,	// A
+   0, 0, 1, 1, 1, 1, 1,	// b
+   1, 0, 0, 1, 1, 1, 0,	// C
+   0, 1, 1, 1, 1, 0, 1,	// d
+   1, 0, 0, 1, 1, 1, 1,	// E
+   1, 0, 0, 0, 1, 1, 1,	// F
+   0, 0, 0, 0, 0, 0, 0,	// blank
+} ;
+ 
+
+// display:
+//	A global variable which is written to by the main program and
+//	read from by the thread that updates the display. Only the first
+//	6 characters are used.
+
+char display [8] ;
+
+
+/*
+ * displayDigits:
+ *	This is our thread that's run concurrently with the main program.
+ *	Essentially sit in a loop, parsing and displaying the data held in
+ *	the "display" global.
+ *********************************************************************************
+ */
+
+PI_THREAD (displayDigits)
+{
+  int digit, segment ;
+  int index, d, segVal ;
+
+  piHiPri (50) ;
+
+  for (;;)
+  {
+    for (digit = 0 ; digit < 6 ; ++digit)
+    {
+      for (segment = 0 ; segment < 7 ; ++segment)
+      {
+	d = toupper (display [digit]) ;
+	/**/ if ((d >= '0') && (d <= '9'))	// Digit
+	  index = d - '0' ;
+	else if ((d >= 'A') && (d <= 'F'))	// Hex
+	  index = d - 'A' + 10 ;
+	else
+	  index = 16 ;				// Blank
+
+	segVal = segmentDigits [index * 7 + segment] ;
+
+	digitalWrite (segments [segment], segVal) ;
+      }
+      digitalWrite (digits [digit], 1) ;
+      delay (2) ;
+      digitalWrite (digits [digit], 0) ;
+    }
+  }
+}
+
+
+/*
+ * setup:
+ *	Initialise the hardware and start the thread
+ *********************************************************************************
+ */
+
+void setup (void)
+{
+  int i, c ;
+
+  wiringPiSetup () ;
+
+// 7 segments
+
+  for (i = 0 ; i < 7 ; ++i)
+    { digitalWrite (segments [i], 0) ; pinMode (segments [i], OUTPUT) ; }
+
+// 6 digits
+
+  for (i = 0 ; i < 6 ; ++i)
+    { digitalWrite (digits [i], 0) ;   pinMode (digits [i],   OUTPUT) ; }
+
+  strcpy (display, "      ") ;
+  piThreadCreate (displayDigits) ;
+  delay (10) ; // Just to make sure it's started
+
+// Quick countdown LED test sort of thing
+
+  c = 999999 ;
+  for (i = 0 ; i < 10 ; ++i)
+  {
+    sprintf (display, "%06d", c) ;
+    delay (400) ;
+    c -= 111111 ;
+  }
+
+  strcpy (display, "      ") ;
+  delay (400) ;
+
+#ifdef PHOTO_HACK
+  sprintf (display, "%s", "123456") ;
+  for (;;)
+    delay (1000) ;
+#endif
+
+}
+
+
+/*
+ * teenager:
+ *	No explanation needed. (Nor one given!)
+ *********************************************************************************
+ */
+
+void teenager (void)
+{
+  char *message = "      feedbeef      babe      cafe      b00b      " ;
+  int i ;
+
+  for (i = 0 ; i < strlen (message) - 4 ; ++i)
+  {
+    strncpy (display, &message [i], 6) ;
+    delay (200) ;
+  }
+  delay (1000) ;
+  for (i = 0 ; i < 3 ; ++i)
+  {
+    strcpy (display, "    ") ;
+    delay (150) ;
+    strcpy (display, " b00b ") ;
+    delay (250) ;
+  }
+  delay (1000) ;
+  strcpy (display, "      ") ;
+  delay (1000) ;
+}
+
+
+/*
+ *********************************************************************************
+ * main:
+ *	Let the fun begin
+ *********************************************************************************
+ */
+
+int main (void)
+{
+  struct tm *t ;
+  time_t     tim ;
+
+  setup    () ;
+  teenager () ;
+
+  tim = time (NULL) ;
+  for (;;)
+  {
+    while (time (NULL) == tim)
+      delay (5) ;
+
+    tim = time (NULL) ;
+    t   = localtime (&tim) ;
+
+    sprintf (display, "%02d%02d%02d", t->tm_hour, t->tm_min, t->tm_sec) ;
+
+    delay (500) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/Gertboard/Makefile b/modules/catkin_ws/src/wiringPi/examples/Gertboard/Makefile
new file mode 100644
index 00000000..75692611
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/Gertboard/Makefile
@@ -0,0 +1,74 @@
+#
+# Makefile:
+#	Gertboard - Examples using wiringPi
+#
+#	Copyright (c) 2013 Gordon Henderson
+#################################################################################
+
+#DEBUG	= -g -O0
+DEBUG	= -O3
+CC	= gcc
+INCLUDE	= -I/usr/local/include
+CFLAGS	= $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
+
+LDFLAGS	= -L/usr/local/lib
+LDLIBS    = -lwiringPi -lwiringPiDev -lpthread -lm
+
+# Should not alter anything below this line
+###############################################################################
+
+SRC	=	gertboard.c				\
+		buttons.c 7segments.c			\
+		voltmeter.c temperature.c vumeter.c	\
+		record.c
+
+OBJ	=	$(SRC:.c=.o)
+
+BINS	=	$(SRC:.c=)
+
+all:	$(BINS)
+
+gertboard:	gertboard.o
+	@echo [link]
+	@$(CC) -o $@ gertboard.o $(LDFLAGS) $(LDLIBS)
+
+buttons:	buttons.o
+	@echo [link]
+	@$(CC) -o $@ buttons.o $(LDFLAGS) $(LDLIBS)
+
+7segments:	7segments.o
+	@echo [link]
+	@$(CC) -o $@ 7segments.o $(LDFLAGS) $(LDLIBS)
+
+voltmeter:	voltmeter.o
+	@echo [link]
+	@$(CC) -o $@ voltmeter.o $(LDFLAGS) $(LDLIBS)
+
+temperature:	temperature.o
+	@echo [link]
+	@$(CC) -o $@ temperature.o $(LDFLAGS) $(LDLIBS)
+
+vumeter:	vumeter.o
+	@echo [link]
+	@$(CC) -o $@ vumeter.o $(LDFLAGS) $(LDLIBS)
+
+record:	record.o
+	@echo [link]
+	@$(CC) -o $@ record.o $(LDFLAGS) $(LDLIBS)
+
+.c.o:
+	@echo [CC] $<
+	@$(CC) -c $(CFLAGS) $< -o $@
+
+clean:
+	@echo [Clean]
+	@rm -f $(OBJ) *~ core tags $(BINS)
+
+tags:	$(SRC)
+	@echo [ctags]
+	@ctags $(SRC)
+
+depend:
+	makedepend -Y $(SRC)
+
+# DO NOT DELETE
diff --git a/modules/catkin_ws/src/wiringPi/examples/Gertboard/buttons.c b/modules/catkin_ws/src/wiringPi/examples/Gertboard/buttons.c
new file mode 100644
index 00000000..5f767641
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/Gertboard/buttons.c
@@ -0,0 +1,83 @@
+/*
+ * buttons.c:
+ *	Read the Gertboard buttons. Each one will act as an on/off
+ *	tiggle switch for 3 different LEDs
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+
+// Array to keep track of our LEDs
+
+int leds [] = { 0, 0, 0 } ;
+
+// scanButton:
+//	See if a button is pushed, if so, then flip that LED and
+//	wait for the button to be let-go
+
+void scanButton (int button)
+{
+  if (digitalRead (button) == HIGH)	// Low is pushed
+    return ;
+
+  leds [button] ^= 1 ; // Invert state
+  digitalWrite (4 + button, leds [button]) ;
+
+  while (digitalRead (button) == LOW)	// Wait for release
+    delay (10) ;
+}
+
+int main (void)
+{
+  int i ;
+
+  printf ("Raspberry Pi Gertboard Button Test\n") ;
+
+  wiringPiSetup () ;
+
+// Setup the outputs:
+//	Pins 3, 4, 5, 6 and 7 output:
+//	We're not using 3 or 4, but make sure they're off anyway
+//	(Using same hardware config as blink12.c)
+
+  for (i = 3 ; i < 8 ; ++i)
+  {
+    pinMode      (i, OUTPUT) ;
+    digitalWrite (i, 0) ;
+  }
+
+// Setup the inputs
+
+  for (i = 0 ; i < 3 ; ++i)
+  {
+    pinMode         (i, INPUT) ;
+    pullUpDnControl (i, PUD_UP) ;
+    leds [i] = 0 ;
+  }
+
+  for (;;)
+  {
+    for (i = 0 ; i < 3 ; ++i)
+      scanButton (i) ;
+    delay (1) ;
+  }
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/Gertboard/gertboard.c b/modules/catkin_ws/src/wiringPi/examples/Gertboard/gertboard.c
new file mode 100644
index 00000000..aefcb124
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/Gertboard/gertboard.c
@@ -0,0 +1,96 @@
+/*
+ * gertboard.c:
+ *	Simple test for the SPI bus on the Gertboard
+ *
+ *	Hardware setup:
+ *		D/A port 0 jumpered to A/D port 0.
+ *
+ *	We output a sine wave on D/A port 0 and sample A/D port 0. We then
+ *	plot the input value on the terminal as a sort of vertical scrolling
+ *	oscilloscipe.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include <stdlib.h>
+#include <math.h>
+
+// Gertboard D to A is an 8-bit unit.
+
+#define	B_SIZE	256
+
+#include <wiringPi.h>
+#include <gertboard.h>
+
+int main (void)
+{
+  double angle ;
+  int i, inputValue ;
+  int  buffer [B_SIZE] ;
+  int   cols ;
+  struct winsize w ;
+
+
+  printf ("Raspberry Pi Gertboard SPI test program\n") ;
+  printf ("=======================================\n") ;
+
+  ioctl (fileno (stdin), TIOCGWINSZ, &w);
+  cols = w.ws_col - 2 ;
+
+// Always initialise wiringPi. Use wiringPiSys() if you don't need
+//	(or want) to run as root
+
+  wiringPiSetupSys () ;
+
+// Initialise the Gertboard analog hardware at pin 100
+
+  gertboardAnalogSetup (100) ;
+
+// Generate a Sine Wave and store in our buffer
+
+  for (i = 0 ; i < B_SIZE ; ++i)
+  {
+    angle = ((double)i / (double)B_SIZE) * M_PI * 2.0 ;
+    buffer [i] = (int)rint ((sin (angle)) * 127.0 + 128.0) ;
+  }
+
+// Loop, output the sine wave on analog out port 0, read it into A-D port 0
+//	and display it on the screen
+
+  for (;;)
+  {
+    for (i = 0 ; i < B_SIZE ; ++i)
+    {
+      analogWrite (100, buffer [i]) ;
+
+      inputValue = analogRead (100) ;
+
+// We don't need to wory about the scale or sign - the analog hardware is
+//	a 10-bit value, so 0-1023. Just scale this to our terminal
+
+      printf ("%*s\n", (inputValue * cols) / 1023, "*") ;
+      delay (2) ;
+    }
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/Gertboard/record.c b/modules/catkin_ws/src/wiringPi/examples/Gertboard/record.c
new file mode 100644
index 00000000..71d87184
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/Gertboard/record.c
@@ -0,0 +1,60 @@
+/*
+ * record.c:
+ *	Record some audio via the Gertboard
+ *
+ *	Copyright (c) 2013 Gordon Henderson
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <sys/time.h>
+
+#include <wiringPi.h>
+#include <gertboard.h>
+
+#define	B_SIZE	40000
+
+int main ()
+{
+  int i ;
+  struct timeval tStart, tEnd, tTaken ;
+  unsigned char buffer [B_SIZE] ;
+
+  printf ("\n") ;
+  printf ("Gertboard demo: Recorder\n") ;
+  printf ("========================\n") ;
+
+// Always initialise wiringPi. Use wiringPiSys() if you don't need
+//	(or want) to run as root
+
+  wiringPiSetupSys () ;
+
+// Initialise the Gertboard analog hardware at pin 100
+
+  gertboardAnalogSetup (100) ;
+
+  gettimeofday (&tStart, NULL) ;
+
+  for (i = 0 ; i < B_SIZE ; ++i)
+    buffer [i] = analogRead (100) >> 2 ;
+
+  gettimeofday (&tEnd, NULL) ;
+  
+  timersub (&tEnd, &tStart, &tTaken) ;
+
+  printf ("Time taken for %d  reads: %ld.%ld\n", B_SIZE, tTaken.tv_sec, tTaken.tv_usec) ;
+
+  gettimeofday (&tStart, NULL) ;
+
+  for (i = 0 ; i < B_SIZE ; ++i)
+   analogWrite (100, buffer [i]) ;
+
+  gettimeofday (&tEnd, NULL) ;
+  
+  timersub (&tEnd, &tStart, &tTaken) ;
+
+  printf ("Time taken for %d writes: %ld.%ld\n", B_SIZE, tTaken.tv_sec, tTaken.tv_usec) ;
+
+  return 0 ;
+}
+
diff --git a/modules/catkin_ws/src/wiringPi/examples/Gertboard/temperature.c b/modules/catkin_ws/src/wiringPi/examples/Gertboard/temperature.c
new file mode 100644
index 00000000..5985a122
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/Gertboard/temperature.c
@@ -0,0 +1,78 @@
+/*
+ * temperature.c:
+ *	Demonstrate use of the Gertboard A to D converter to make
+ *	a simple thermometer using the LM35.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+
+#include <wiringPi.h>
+#include <gertboard.h>
+
+int main ()
+{
+  int x1, x2 ;
+  double v1, v2 ;
+
+  printf ("\n") ;
+  printf ("Gertboard demo: Simple Thermemeter\n") ;
+  printf ("==================================\n") ;
+
+// Always initialise wiringPi. Use wiringPiSys() if you don't need
+//	(or want) to run as root
+
+  wiringPiSetupSys () ;
+
+// Initialise the Gertboard analog hardware at pin 100
+
+  gertboardAnalogSetup (100) ;
+
+  printf ("\n") ;
+  printf ("| Channel 0 | Channel 1 | Temperature 1 | Temperature 2 |\n") ;
+
+  for (;;)
+  {
+
+// Read the 2 channels:
+
+    x1 = analogRead (100) ;
+    x2 = analogRead (101) ;
+
+// Convert to a voltage:
+
+    v1 = (double)x1 / 1023.0 * 3.3 ;
+    v2 = (double)x2 / 1023.0 * 3.3 ;
+
+// Print
+
+    printf ("|    %6.3f |    %6.3f |", v1, v2) ;
+
+// Print Temperature of both channels by converting the LM35 reading
+//	to a temperature. Fortunately these are easy: 0.01 volts per C.
+
+    printf ("          %4.1f |          %4.1f |\r", v1 * 100.0, v2 * 100.0) ;
+    fflush (stdout) ;
+  }
+
+  return 0 ;
+}
+
diff --git a/modules/catkin_ws/src/wiringPi/examples/Gertboard/voltmeter.c b/modules/catkin_ws/src/wiringPi/examples/Gertboard/voltmeter.c
new file mode 100644
index 00000000..c4d2113f
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/Gertboard/voltmeter.c
@@ -0,0 +1,73 @@
+/*
+ * voltmeter.c:
+ *	Demonstrate use of the Gertboard A to D converter to make
+ *	a simple voltmeter.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+
+#include <wiringPi.h>
+#include <gertboard.h>
+
+int main ()
+{
+  int x1, x2 ;
+  double v1, v2 ;
+
+  printf ("\n") ;
+  printf ("Gertboard demo: Simple Voltmeters\n") ;
+  printf ("=================================\n") ;
+
+// Always initialise wiringPi. Use wiringPiSys() if you don't need
+//	(or want) to run as root
+
+  wiringPiSetupSys () ;
+
+// Initialise the Gertboard analog hardware at pin 100
+
+  gertboardAnalogSetup (100) ;
+
+  printf ("\n") ;
+  printf ("| Channel 0 | Channel 1 |\n") ;
+
+  for (;;)
+  {
+
+// Read the 2 channels:
+
+    x1 = analogRead (100) ;
+    x2 = analogRead (101) ;
+
+// Convert to a voltage:
+
+    v1 = (double)x1 / 1023.0 * 3.3 ;
+    v2 = (double)x2 / 1023.0 * 3.3 ;
+
+// Print
+
+    printf ("|    %6.3f |    %6.3f |\r", v1, v2) ;
+    fflush (stdout) ;
+  }
+
+  return 0 ;
+}
+
diff --git a/modules/catkin_ws/src/wiringPi/examples/Gertboard/vumeter.c b/modules/catkin_ws/src/wiringPi/examples/Gertboard/vumeter.c
new file mode 100644
index 00000000..9643ace9
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/Gertboard/vumeter.c
@@ -0,0 +1,152 @@
+/*
+ * vumeter.c:
+ *	Simple VU meter
+ *
+ * Heres the theory:
+ *	We will sample at 4000 samples/sec and put the data into a
+ *	low-pass filter with a depth of 1000 samples. This will give
+ *	us 1/4 a second of lag on the signal, but I think it might
+ *	produce a more pleasing output.
+ *
+ *	The input of the microphone should be at mid-pont with no
+ *	sound input, but we might have to sample that too, to get
+ *	our reference zero...
+ *
+ *	Copyright (c) 2013 Gordon Henderson
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+
+#include <wiringPi.h>
+#include <gertboard.h>
+
+#ifndef	TRUE
+#define	TRUE	(1==1)
+#define	FALSE	(!TRUE)
+#endif
+
+#define	B_SIZE	1000
+#define	S_SIZE	 128
+
+static int buffer [B_SIZE] ;
+static int bPtr = 0 ;
+
+/*
+ * ledPercent:
+ *	Output the given value as a percentage on the LEDs
+ *********************************************************************************
+ */
+
+static void ledPercent (int percent)
+{
+  unsigned int output = 0 ;
+
+  if (percent > 11) output |= 0x01 ;
+  if (percent > 22) output |= 0x02 ;
+  if (percent > 33) output |= 0x04 ;
+  if (percent > 44) output |= 0x08 ;
+  if (percent > 55) output |= 0x10 ;
+  if (percent > 66) output |= 0x20 ;
+  if (percent > 77) output |= 0x40 ;
+  if (percent > 88) output |= 0x80 ;
+
+  digitalWriteByte (output) ;
+}
+
+static unsigned int tPeriod, tNextSampleTime ;
+
+/*
+ * sample:
+ *	Get a sample from the Gertboard. If not enough time has elapsed
+ *	since the last sample, then wait...
+ *********************************************************************************
+ */
+
+static void sample (void)
+{
+  unsigned int tFuture ;
+
+// Calculate the future sample time
+
+  tFuture = tPeriod + tNextSampleTime ;
+
+// Wait until the next sample time
+
+  while (micros () < tNextSampleTime)
+    ;
+  
+  buffer [bPtr] = gertboardAnalogRead (0) ;
+
+  tNextSampleTime = tFuture ;
+}
+
+
+int main ()
+{
+  int quietLevel, min, max ;
+  int i, sum ;
+  unsigned int tStart, tEnd ;
+
+  printf ("\n") ;
+  printf ("Gertboard demo: VU Meter\n") ;
+  printf ("========================\n") ;
+
+  wiringPiSetup     () ;
+  gertboardSPISetup () ;
+
+  ledPercent (0) ;
+  for (i = 0 ; i < 8 ; ++i)
+    pinMode (i, OUTPUT) ;
+
+  for (bPtr = 0 ; bPtr < B_SIZE ; ++bPtr)
+    buffer [bPtr] = 99 ;
+
+  tPeriod = 1000000 / 1000 ;
+
+  printf ("Shhhh.... ") ; fflush (stdout) ;
+  delay (1000) ;
+  printf ("Sampling quiet... ") ; fflush (stdout) ;
+
+  tStart = micros () ;
+
+  tNextSampleTime = micros () ;
+  for (bPtr = 0 ; bPtr < B_SIZE ; ++bPtr)
+    sample () ;
+
+  tEnd = micros () ;
+
+  quietLevel = 0 ;
+  max =    0 ;
+  min = 1024 ;
+  for (i = 0 ; i < B_SIZE ; ++i)
+  {
+    quietLevel += buffer [i] ;
+    if (buffer [i] > max) max = buffer [i] ;
+    if (buffer [i] < min) min = buffer [i] ;
+  }
+  quietLevel /= B_SIZE ;
+
+  printf ("Done. Quiet level is: %d [%d:%d] [%d:%d]\n", quietLevel, min, max, quietLevel - min, max - quietLevel) ;
+
+  printf ("Time taken for %d reads: %duS\n", B_SIZE, tEnd - tStart) ;
+
+  for (bPtr = 0 ;;)
+  {
+    sample () ;
+    sum = 0 ;
+    for (i = 0 ; i < S_SIZE ; ++i)
+      sum += buffer [i] ;
+    sum /= S_SIZE ;
+    sum = abs (quietLevel - sum) ;
+    sum = (sum * 1000) / quietLevel ;
+    ledPercent (sum) ;
+    if (++bPtr > S_SIZE)
+      bPtr = 0 ;
+  }
+
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/Makefile b/modules/catkin_ws/src/wiringPi/examples/Makefile
new file mode 100644
index 00000000..c9967dc4
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/Makefile
@@ -0,0 +1,168 @@
+#
+# Makefile:
+#	wiringPi - Wiring Compatable library for the Raspberry Pi
+#	https://projects.drogon.net/wiring-pi
+#
+#	Copyright (c) 2012 Gordon Henderson
+#################################################################################
+# This file is part of wiringPi:
+#	Wiring Compatable library for the Raspberry Pi
+#
+#    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 <http://www.gnu.org/licenses/>.
+#################################################################################
+
+
+#DEBUG	= -g -O0
+DEBUG	= -O3
+CC	= gcc
+INCLUDE	= -I/usr/local/include
+CFLAGS	= $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
+
+LDFLAGS	= -L/usr/local/lib
+LDLIBS    = -lwiringPi -lwiringPiDev -lpthread -lm
+
+# Should not alter anything below this line
+###############################################################################
+
+SRC	=	blink.c blink8.c blink12.c					\
+		blink12drcs.c							\
+		pwm.c								\
+		speed.c wfi.c isr.c isr-osc.c					\
+		lcd.c lcd-adafruit.c clock.c					\
+		nes.c								\
+		softPwm.c softTone.c 						\
+		delayTest.c serialRead.c serialTest.c okLed.c ds1302.c		\
+		lowPower.c							\
+		rht03.c piglow.c
+
+OBJ	=	$(SRC:.c=.o)
+
+BINS	=	$(SRC:.c=)
+
+all:	
+	@cat README.TXT
+	@echo "    $(BINS)" | fmt
+	@echo ""
+
+really-all:	$(BINS)
+
+blink:	blink.o
+	@echo [link]
+	@$(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS)
+
+blink8:	blink8.o
+	@echo [link]
+	@$(CC) -o $@ blink8.o $(LDFLAGS) $(LDLIBS)
+
+blink12drcs:	blink12drcs.o
+	@echo [link]
+	@$(CC) -o $@ blink12drcs.o $(LDFLAGS) $(LDLIBS)
+
+blink12:	blink12.o
+	@echo [link]
+	@$(CC) -o $@ blink12.o $(LDFLAGS) $(LDLIBS)
+
+speed:	speed.o
+	@echo [link]
+	@$(CC) -o $@ speed.o $(LDFLAGS) $(LDLIBS)
+
+lcd:	lcd.o
+	@echo [link]
+	@$(CC) -o $@ lcd.o $(LDFLAGS) $(LDLIBS)
+
+lcd-adafruit:	lcd-adafruit.o
+	@echo [link]
+	@$(CC) -o $@ lcd-adafruit.o $(LDFLAGS) $(LDLIBS)
+
+clock:	clock.o
+	@echo [link]
+	@$(CC) -o $@ clock.o $(LDFLAGS) $(LDLIBS)
+
+wfi:	wfi.o
+	@echo [link]
+	@$(CC) -o $@ wfi.o $(LDFLAGS) $(LDLIBS)
+
+isr:	isr.o
+	@echo [link]
+	@$(CC) -o $@ isr.o $(LDFLAGS) $(LDLIBS)
+
+isr-osc:	isr-osc.o
+	@echo [link]
+	@$(CC) -o $@ isr-osc.o $(LDFLAGS) $(LDLIBS)
+
+nes:	nes.o
+	@echo [link]
+	@$(CC) -o $@ nes.o $(LDFLAGS) $(LDLIBS) 
+
+rht03:	rht03.o
+	@echo [link]
+	@$(CC) -o $@ rht03.o $(LDFLAGS) $(LDLIBS) 
+
+pwm:	pwm.o
+	@echo [link]
+	@$(CC) -o $@ pwm.o $(LDFLAGS) $(LDLIBS)
+
+softPwm:	softPwm.o
+	@echo [link]
+	@$(CC) -o $@ softPwm.o $(LDFLAGS) $(LDLIBS)
+
+softTone:	softTone.o
+	@echo [link]
+	@$(CC) -o $@ softTone.o $(LDFLAGS) $(LDLIBS)
+
+delayTest:	delayTest.o
+	@echo [link]
+	@$(CC) -o $@ delayTest.o $(LDFLAGS) $(LDLIBS)
+
+serialRead:	serialRead.o
+	@echo [link]
+	@$(CC) -o $@ serialRead.o $(LDFLAGS) $(LDLIBS)
+
+serialTest:	serialTest.o
+	@echo [link]
+	@$(CC) -o $@ serialTest.o $(LDFLAGS) $(LDLIBS)
+
+okLed:	okLed.o
+	@echo [link]
+	@$(CC) -o $@ okLed.o $(LDFLAGS) $(LDLIBS)
+
+tone:	tone.o
+	@echo [link]
+	@$(CC) -o $@ tone.o $(LDFLAGS) $(LDLIBS)
+
+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] $<
+	@$(CC) -c $(CFLAGS) $< -o $@
+
+clean:
+	@echo "[Clean]"
+	@rm -f $(OBJ) *~ core tags $(BINS)
+
+tags:	$(SRC)
+	@echo [ctags]
+	@ctags $(SRC)
+
+depend:
+	makedepend -Y $(SRC)
+
+# DO NOT DELETE
diff --git a/modules/catkin_ws/src/wiringPi/examples/PiFace/Makefile b/modules/catkin_ws/src/wiringPi/examples/PiFace/Makefile
new file mode 100644
index 00000000..0bde334f
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/PiFace/Makefile
@@ -0,0 +1,85 @@
+#
+# Makefile:
+#	wiringPi - Wiring Compatable library for the Raspberry Pi
+#	https://projects.drogon.net/wiring-pi
+#
+#	Copyright (c) 2012 Gordon Henderson
+#################################################################################
+# This file is part of wiringPi:
+#	Wiring Compatable library for the Raspberry Pi
+#
+#    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 <http://www.gnu.org/licenses/>.
+#################################################################################
+
+
+#DEBUG	= -g -O0
+DEBUG	= -O3
+CC	= gcc
+INCLUDE	= -I/usr/local/include
+CFLAGS	= $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
+
+LDFLAGS	= -L/usr/local/lib
+LDLIBS    = -lwiringPi -lwiringPiDev -lpthread -lm
+
+# Should not alter anything below this line
+###############################################################################
+
+SRC	=	blink.c buttons.c reaction.c ladder.c metro.c motor.c
+
+OBJ	=	$(SRC:.c=.o)
+
+BINS	=	$(SRC:.c=)
+
+all:	$(BINS)
+
+blink:	blink.o
+	@echo [link]
+	@$(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS)
+
+buttons:	buttons.o
+	@echo [link]
+	@$(CC) -o $@ buttons.o $(LDFLAGS) $(LDLIBS)
+
+reaction:	reaction.o
+	@echo [link]
+	@$(CC) -o $@ reaction.o $(LDFLAGS) $(LDLIBS)
+
+ladder:	ladder.o
+	@echo [link]
+	@$(CC) -o $@ ladder.o $(LDFLAGS) $(LDLIBS)
+
+metro:	metro.o
+	@echo [link]
+	@$(CC) -o $@ metro.o $(LDFLAGS) $(LDLIBS)
+
+motor:	motor.o
+	@echo [link]
+	@$(CC) -o $@ motor.o $(LDFLAGS) $(LDLIBS)
+
+.c.o:
+	@echo [CC] $<
+	@$(CC) -c $(CFLAGS) $< -o $@
+
+clean:
+	@echo "[Clean]"
+	@rm -f $(OBJ) *~ core tags $(BINS)
+
+tags:	$(SRC)
+	@echo [ctags]
+	@ctags $(SRC)
+
+depend:
+	makedepend -Y $(SRC)
+
+# DO NOT DELETE
diff --git a/modules/catkin_ws/src/wiringPi/examples/PiFace/blink.c b/modules/catkin_ws/src/wiringPi/examples/PiFace/blink.c
new file mode 100644
index 00000000..ffb8a2e3
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/PiFace/blink.c
@@ -0,0 +1,59 @@
+/*
+ * blink.c:
+ *	Simple "blink" test for the PiFace interface board.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+
+#include <wiringPi.h>
+#include <piFace.h>
+
+// Use 200 as the pin-base for the PiFace board, and pick a pin
+//	for the LED that's not connected to a relay
+
+#define	PIFACE	200
+#define	LED	(PIFACE+2)
+
+int main (int argc, char *argv [])
+{
+  printf ("Raspberry Pi PiFace Blink\n") ;
+  printf ("=========================\n") ;
+
+// Always initialise wiringPi. Use wiringPiSys() if you don't need
+//	(or want) to run as root
+
+  wiringPiSetupSys () ;
+
+// Setup the PiFace board
+
+  piFaceSetup (PIFACE) ;
+
+  for (;;)
+  {
+    digitalWrite (LED, HIGH) ;	// On
+    delay (500) ;		// mS
+    digitalWrite (LED, LOW) ;	// Off
+    delay (500) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/PiFace/buttons.c b/modules/catkin_ws/src/wiringPi/examples/PiFace/buttons.c
new file mode 100644
index 00000000..147a4bdb
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/PiFace/buttons.c
@@ -0,0 +1,103 @@
+/*
+ * buttons.c:
+ *	Simple test for the PiFace interface board.
+ *
+ *	Read the buttons and output the same to the LEDs
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+
+#include <wiringPi.h>
+#include <piFace.h>
+
+int outputs [4] = { 0,0,0,0 } ;
+
+// Use 200 as the pin-base for the PiFace board
+
+#define	PIFACE_BASE	200
+
+
+/*
+ * scanButton:
+ *	Read the guiven button - if it's pressed, then flip the state
+ *	of the correspoinding output pin
+ *********************************************************************************
+ */
+
+void scanButton (int button)
+{
+  if (digitalRead (PIFACE_BASE + button) == LOW)
+  {
+    outputs [button] ^= 1 ;
+    digitalWrite (PIFACE_BASE + button, outputs [button]) ;
+    printf ("Button %d pushed - output now: %s\n",
+		button, (outputs [button] == 0) ? "Off" : "On") ;
+  }
+
+  while (digitalRead (PIFACE_BASE + button) == LOW)
+    delay (1) ;
+}
+
+
+/*
+ * start here
+ *********************************************************************************
+ */
+
+int main (void)
+{
+  int pin, button ;
+
+  printf ("Raspberry Pi wiringPi + PiFace test program\n") ;
+  printf ("===========================================\n") ;
+  printf ("\n") ;
+  printf (
+"This program reads the buttons and uses them to toggle the first 4\n"
+"outputs. Push a button once to turn an output on, and push it again to\n"
+"turn it off again.\n\n") ;
+
+// Always initialise wiringPi. Use wiringPiSys() if you don't need
+//	(or want) to run as root
+
+  wiringPiSetupSys () ;
+
+  piFaceSetup (PIFACE_BASE) ;
+
+// Enable internal pull-ups & start with all off
+
+  for (pin = 0 ; pin < 8 ; ++pin)
+  {
+    pullUpDnControl (PIFACE_BASE + pin, PUD_UP) ;
+    digitalWrite    (PIFACE_BASE + pin, 0) ;
+  }
+
+// Loop, scanning the buttons
+
+  for (;;)
+  {
+    for (button = 0 ; button < 4 ; ++button)
+      scanButton (button) ;
+    delay (5) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/PiFace/ladder.c b/modules/catkin_ws/src/wiringPi/examples/PiFace/ladder.c
new file mode 100755
index 00000000..4f08a6f5
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/PiFace/ladder.c
@@ -0,0 +1,337 @@
+/*
+ * ladder.c:
+ *
+ *	Gordon Henderson, June 2012
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <math.h>
+
+#include <wiringPi.h>
+#include <piFace.h>
+
+#ifndef	TRUE
+#  define	TRUE	(1==1)
+#  define	FALSE	(1==2)
+#endif
+
+#undef	DEBUG
+
+#define	NUM_LEDS	 8
+
+
+// Map the LEDs to the hardware pins
+//	using PiFace pin numbers here
+
+#define	PIFACE	200
+
+const int ledMap [NUM_LEDS] =
+{
+//  0, 1, 2, 3, 4, 5, 6, 7, 8
+    200, 201, 202, 203, 204, 205, 206, 207
+} ;
+
+
+// Some constants for our circuit simulation
+
+const double vBatt      =      9.0 ;	// Volts (ie. a PP3)
+const double capacitor  =      0.001 ;	// 1000uF
+const double rCharge    =   2200.0 ;	// ohms
+const double rDischarge =  68000.0 ;	// ohms
+const double timeInc    =      0.01 ;	// Seconds
+
+double vCharge, vCap, vCapLast ;
+
+
+
+/*
+ * setup:
+ *	Program the GPIO correctly and initialise the lamps
+ ***********************************************************************
+ */
+
+void setup (void)
+{
+  int i ;
+
+  wiringPiSetupSys () ;
+
+  if (piFaceSetup (200) == -1)
+    exit (1) ;
+
+// Enable internal pull-ups
+
+  for (i = 0 ; i < 8 ; ++i)
+    pullUpDnControl (PIFACE + i, PUD_UP) ;
+
+// Calculate the actual charging voltage - standard calculation of
+//	vCharge = r2 / (r1 + r2) * vBatt
+//
+//
+//   -----+--- vBatt
+//        |
+//        R1
+//        |
+//        +---+---- vCharge
+//        |   |
+//        R2  C
+//        |   |
+//   -----+---+-----
+
+  vCharge = rDischarge / (rCharge + rDischarge) * vBatt ;
+
+// Start with no charge
+
+  vCap    = vCapLast = 0.0 ;
+}
+
+
+/*
+ * introLeds
+ *	Put a little pattern on the LEDs to start with
+ *********************************************************************************
+ */
+
+void introLeds (void)
+{
+  int i, j ;
+
+
+  printf ("Pi Ladder\n") ;
+  printf ("=========\n\n") ;
+  printf ("       vBatt: %6.2f volts\n", vBatt) ;
+  printf ("     rCharge: %6.0f ohms\n", rCharge) ;
+  printf ("  rDischarge: %6.0f ohms\n", rDischarge) ;
+  printf ("     vCharge: %6.2f volts\n", vCharge) ;
+  printf ("   capacitor: %6.0f uF\n", capacitor * 1000.0) ;
+
+// Flash 3 times:
+
+  for (j = 0 ; j < 3 ; ++j)
+  {
+    for (i = 0 ; i < NUM_LEDS ; ++i)
+      digitalWrite (ledMap [i], 1) ;
+    delay (500) ;
+    for (i = 0 ; i < NUM_LEDS ; ++i)
+      digitalWrite (ledMap [i], 0) ;
+    delay (100) ;
+  }
+
+// All On
+
+  for (i = 0 ; i < NUM_LEDS ; ++i)
+    digitalWrite (ledMap [i], 1) ;
+  delay (500) ;
+
+// Countdown...
+
+  for (i = NUM_LEDS - 1 ; i >= 0 ; --i)
+  {
+    digitalWrite (ledMap [i], 0) ;
+    delay (100) ;
+  }
+  delay (500) ;
+}
+
+
+/*
+ * winningLeds
+ *	Put a little pattern on the LEDs to start with
+ *********************************************************************************
+ */
+
+void winningLeds (void)
+{
+  int i, j ;
+
+// Flash 3 times:
+
+  for (j = 0 ; j < 3 ; ++j)
+  {
+    for (i = 0 ; i < NUM_LEDS ; ++i)
+      digitalWrite (ledMap [i], 1) ;
+    delay (500) ;
+    for (i = 0 ; i < NUM_LEDS ; ++i)
+      digitalWrite (ledMap [i], 0) ;
+    delay (100) ;
+  }
+
+// All On
+
+  for (i = 0 ; i < NUM_LEDS ; ++i)
+    digitalWrite (ledMap [i], 1) ;
+  delay (500) ;
+
+// Countup...
+
+  for (i = 0 ; i < NUM_LEDS ; ++i)
+  {
+    digitalWrite (ledMap [i], 0) ;
+    delay (100) ;
+  }
+  delay (500) ;
+}
+
+
+/*
+ * chargeCapacitor: dischargeCapacitor:
+ *	Add or remove charge to the capacitor.
+ *	Standard capacitor formulae.
+ *********************************************************************************
+ */
+
+void chargeCapacitor (void)
+{
+  vCap = (vCapLast - vCharge) *
+	exp (- timeInc / (rCharge * capacitor)) + vCharge ;
+
+#ifdef	DEBUG
+  printf ("+vCap: %7.4f\n", vCap) ;
+#endif
+
+  vCapLast = vCap ;
+}
+
+void dischargeCapacitor (void)
+{
+  vCap = vCapLast *
+	exp (- timeInc / (rDischarge * capacitor)) ;
+
+#ifdef	DEBUG
+  printf ("-vCap: %7.4f\n", vCap) ;
+#endif
+
+  vCapLast = vCap ;
+}
+
+
+/*
+ * ledBargraph:
+ *	Output the supplied number as a bargraph on the LEDs
+ *********************************************************************************
+ */
+
+void ledBargraph (double value, int topLedOn)
+{
+  int topLed = (int)floor (value / vCharge * (double)NUM_LEDS) + 1 ;
+  int i ;
+
+  if (topLed > NUM_LEDS)
+    topLed = NUM_LEDS ;
+
+  if (!topLedOn)
+    --topLed ;
+
+  for (i = 0 ; i < topLed ; ++i)
+    digitalWrite (ledMap [i], 1) ;
+
+  for (i = topLed ; i < NUM_LEDS ; ++i)
+    digitalWrite (ledMap [i], 0) ;
+}
+
+
+/*
+ * ledOnAction:
+ *	Make sure the leading LED is on and check the button
+ *********************************************************************************
+ */
+
+void ledOnAction (void)
+{
+  if (digitalRead (PIFACE) == LOW)
+  {
+    chargeCapacitor () ;
+    ledBargraph (vCap, TRUE) ;
+  }
+}
+
+
+/*
+ * ledOffAction:
+ *	Make sure the leading LED is off and check the button
+ *********************************************************************************
+ */
+
+void ledOffAction (void)
+{
+  dischargeCapacitor () ;
+
+// Are we still pushing the button?
+
+  if (digitalRead (PIFACE) == LOW)
+  {
+    vCap = vCapLast = 0.0 ;
+    ledBargraph (vCap, FALSE) ;
+
+// Wait until we release the button
+
+    while (digitalRead (PIFACE) == LOW)
+      delay (10) ;
+  }
+}
+
+
+/*
+ ***********************************************************************
+ * The main program
+ ***********************************************************************
+ */
+
+int main (void)
+{
+  unsigned int then, ledOnTime, ledOffTime ;
+  unsigned int ourDelay = (int)(1000.0 * timeInc) ;
+  
+  setup     () ;
+  introLeds () ;
+
+// Setup the LED times - TODO reduce the ON time as the game progresses
+
+  ledOnTime  = 1000 ;
+  ledOffTime = 1000 ;
+
+// This is our Gate/Squarewave loop
+
+  for (;;)
+  {
+
+// LED ON:
+
+    (void)ledBargraph (vCap, TRUE) ;
+    then = millis () + ledOnTime ;
+    while (millis () < then)
+    {
+      ledOnAction () ;
+      delay       (ourDelay) ;
+    }
+
+// Have we won yet?
+//	We need vCap to be in the top NUM_LEDS of the vCharge
+
+    if (vCap > ((double)(NUM_LEDS - 1) / (double)NUM_LEDS * vCharge))	// Woo hoo!
+    {
+      winningLeds () ;
+      while (digitalRead (PIFACE) == HIGH)
+	delay (10) ;
+      while (digitalRead (PIFACE) == LOW)
+	delay (10) ;
+      vCap = vCapLast = 0.0 ;
+    }
+
+// LED OFF:
+
+    (void)ledBargraph (vCap, FALSE) ;
+    then = millis () + ledOffTime ;
+    while (millis () < then)
+    {
+      ledOffAction () ;
+      delay        (ourDelay) ;
+    }
+
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/PiFace/metro.c b/modules/catkin_ws/src/wiringPi/examples/PiFace/metro.c
new file mode 100644
index 00000000..a4a8c1d0
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/PiFace/metro.c
@@ -0,0 +1,111 @@
+/*
+ * metronome.c:
+ *	Simple test for the PiFace interface board.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <wiringPi.h>
+#include <piFace.h>
+
+#define	PIFACE	200
+
+/*
+ * middleA:
+ *	Play middle A (on the relays - yea!)
+ *********************************************************************************
+ */
+
+static void middleA (void)
+{
+  unsigned int next ;
+
+  for (;;)
+  {
+    next = micros () + 1136 ;
+    digitalWrite (PIFACE + 0, 0)  ;
+    digitalWrite (PIFACE + 1, 0)  ;
+    while (micros () < next)
+      delayMicroseconds (1) ;
+    
+    next = micros () + 1137 ;
+    digitalWrite (PIFACE + 0, 1)  ;
+    digitalWrite (PIFACE + 1, 1)  ;
+    while (micros () < next)
+      delayMicroseconds (1) ;
+    
+  }
+}
+
+
+int main (int argc, char *argv [])
+{
+  int bpm, msPerBeat, state = 0 ;
+  unsigned int end ;
+
+  printf ("Raspberry Pi PiFace Metronome\n") ;
+  printf ("=============================\n") ;
+
+  piHiPri (50) ;
+
+  wiringPiSetupSys () ;	// Needed for timing functions
+  piFaceSetup      (PIFACE) ;
+
+  if (argc != 2)
+  {
+    printf ("Usage: %s <beates per minute>\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  if (strcmp (argv [1], "a") == 0)
+    middleA () ;
+
+  bpm = atoi (argv [1]) ;
+
+  if ((bpm < 40) || (bpm > 208))
+  {
+    printf ("%s range is 40 through 208 beats per minute\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  msPerBeat = 60000 / bpm  ;
+
+// Main loop:
+//	Put some random LED pairs up for a few seconds, then blank ...
+
+  for (;;)
+  {
+    end = millis ()  + msPerBeat ;
+
+    digitalWrite (PIFACE + 0, state)  ;
+    digitalWrite (PIFACE + 1, state)  ;
+
+    while (millis () < end)
+      delayMicroseconds (500) ;
+
+    state ^= 1 ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/PiFace/motor.c b/modules/catkin_ws/src/wiringPi/examples/PiFace/motor.c
new file mode 100644
index 00000000..14f55397
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/PiFace/motor.c
@@ -0,0 +1,120 @@
+/*
+ * motor.c:
+ *	Use the PiFace board to demonstrate an H bridge
+ *	circuit via the 2 relays.
+ *	Then add on an external transsitor to help with PWM.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <piFace.h>
+#include <softPwm.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+int outputs [2] = { 0,0 } ;
+
+#define	PIFACE_BASE	200
+#define PWM_OUT_PIN	204
+#define	PWM_UP		202
+#define	PWM_DOWN	203
+
+void scanButton (int button)
+{
+  if (digitalRead (PIFACE_BASE + button) == LOW)
+  {
+    outputs [button] ^= 1 ;
+    digitalWrite (PIFACE_BASE + button, outputs [button]) ;
+    printf ("Button %d pushed - output now: %s\n",
+		button, (outputs [button] == 0) ? "Off" : "On") ;
+  }
+
+  while (digitalRead (PIFACE_BASE + button) == LOW)
+    delay (1) ;
+}
+
+
+int main (void)
+{
+  int pin, button ;
+  int pwmValue = 0 ;
+
+  printf ("Raspberry Pi PiFace - Motor control\n") ;
+  printf ("==================================\n") ;
+  printf ("\n") ;
+  printf (
+"This program is designed to be used with a motor connected to the relays\n"
+"in an H-Bridge type configuration with optional speeed control via PWM.\n"
+"\n"
+"Use the leftmost buttons to turn each relay on and off, and the rigthmost\n"
+"buttons to increase ot decrease the PWM output on the control pin (pin\n"
+"4)\n\n") ;
+
+  wiringPiSetup () ;
+  piFaceSetup (PIFACE_BASE) ;
+  softPwmCreate (PWM_OUT_PIN, 100, 100) ;
+
+// Enable internal pull-ups & start with all off
+
+  for (pin = 0 ; pin < 8 ; ++pin)
+  {
+    pullUpDnControl (PIFACE_BASE + pin, PUD_UP) ;
+    digitalWrite    (PIFACE_BASE + pin, 0) ;
+  }
+
+  for (;;)
+  {
+    for (button = 0 ; button < 2 ; ++button)
+      scanButton (button) ;
+
+    if (digitalRead (PWM_UP) == LOW)
+    {
+      pwmValue += 10 ;
+      if (pwmValue > 100)
+	pwmValue = 100 ;
+
+      softPwmWrite (PWM_OUT_PIN, pwmValue) ;
+      printf ("PWM -> %3d\n", pwmValue) ;
+
+      while (digitalRead (PWM_UP) == LOW)
+	delay (5) ;
+    }
+
+    if (digitalRead (PWM_DOWN) == LOW)
+    {
+      pwmValue -= 10 ;
+      if (pwmValue < 0)
+	pwmValue = 0 ;
+
+      softPwmWrite (PWM_OUT_PIN, pwmValue) ;
+      printf ("PWM -> %3d\n", pwmValue) ;
+
+      while (digitalRead (PWM_DOWN) == LOW)
+	delay (5) ;
+    }
+
+    delay (5) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/PiFace/reaction.c b/modules/catkin_ws/src/wiringPi/examples/PiFace/reaction.c
new file mode 100644
index 00000000..50845080
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/PiFace/reaction.c
@@ -0,0 +1,194 @@
+/*
+ * reaction.c:
+ *	Simple test for the PiFace interface board.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include <wiringPi.h>
+#include <piFace.h>
+
+
+int outputs [4] = { 0,0,0,0 } ;
+
+#define	PIFACE	200
+
+/*
+ * light:
+ *	Light up the given LED - actually lights up a pair
+ *********************************************************************************
+ */
+
+void light (int led, int value)
+{
+  led *= 2 ;
+  digitalWrite (PIFACE + led + 0, value) ;
+  digitalWrite (PIFACE + led + 1, value) ;
+}
+
+/*
+ * lightAll:
+ *	All On or Off
+ *********************************************************************************
+ */
+
+void lightAll (int onoff)
+{
+  light (0, onoff) ;
+  light (1, onoff) ;
+  light (2, onoff) ;
+  light (3, onoff) ;
+}
+
+
+/*
+ * waitForNoButtons:
+ *	Wait for all buttons to be released
+ *********************************************************************************
+ */
+
+void waitForNoButtons (void)
+{
+  int i, button ;
+
+  for (;;)
+  {
+    button = 0 ;
+    for (i = 0 ; i < 4 ; ++i)
+      button += digitalRead (PIFACE + i) ;
+
+    if (button == 4)
+      break ;
+  }
+}
+
+
+void scanButton (int button)
+{
+  if (digitalRead (PIFACE + button) == LOW)
+  {
+    outputs [button] ^= 1 ;
+    digitalWrite (PIFACE + button, outputs [button]) ;
+  }
+
+  while (digitalRead (PIFACE + button) == LOW)
+    delay (1) ;
+}
+
+
+int main (void)
+{
+  int i, j ;
+  int led, button ;
+  unsigned int start, stop ;
+
+  printf ("Raspberry Pi PiFace Reaction Timer\n") ;
+  printf ("==================================\n") ;
+
+  if (piFaceSetup (PIFACE) == -1)
+    exit (1) ;
+
+// Enable internal pull-ups
+
+  for (i = 0 ; i < 8 ; ++i)
+    pullUpDnControl (PIFACE + i, PUD_UP) ;
+
+
+// Main game loop:
+//	Put some random LED pairs up for a few seconds, then blank ...
+
+  for (;;)
+  {
+    printf ("Press any button to start ... \n") ; fflush (stdout) ;
+
+    for (;;)
+    {
+      led = rand () % 4 ;
+      light (led, 1) ;
+      delay (10) ;
+      light (led, 0) ;
+
+      button = 0 ;
+      for (j = 0 ; j < 4 ; ++j)
+	button += digitalRead (PIFACE + j) ;
+
+      if (button != 4)
+	break ;
+    }
+
+    waitForNoButtons () ;
+
+    printf ("Wait for it ... ") ; fflush (stdout) ;
+
+    led = rand () % 4 ;
+    delay (rand () % 500 + 1000) ;
+    light (led, 1) ;
+
+    start = millis () ;
+    for (button = -1 ; button == -1 ; )
+    {
+      for (j = 0 ; j < 4 ; ++j)
+	if (digitalRead (PIFACE + j) == 0)	// Pushed
+	{
+	  button = j ;
+	  break ;
+	}
+    }
+    stop = millis () ;
+    button = 3 - button ; // Correct for the buttons/LEDs reversed
+
+    light (led, 0) ;
+
+    waitForNoButtons () ;
+
+    light (led, 1) ;
+
+    if (button == led)
+    {
+      printf ("You got it in %3d mS\n", stop - start) ;
+    }
+    else
+    {
+      printf ("Missed: You pushed %d - LED was %d\n", button, led) ;
+      for (;;)
+      {
+	light (button, 1) ;
+	delay (100) ;
+	light (button, 0) ;
+	delay (100) ;
+	i = 0 ;
+	for (j = 0 ; j < 4 ; ++j)
+	  i += digitalRead (PIFACE + j) ;
+	if (i != 4)
+	  break ;
+      }
+
+      waitForNoButtons () ;
+    }
+    light (led, 0) ;
+    delay (4000) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/PiGlow/Makefile b/modules/catkin_ws/src/wiringPi/examples/PiGlow/Makefile
new file mode 100644
index 00000000..8d31141a
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/PiGlow/Makefile
@@ -0,0 +1,79 @@
+#
+# Makefile:
+#	wiringPi - Wiring Compatable library for the Raspberry Pi
+#	https://projects.drogon.net/wiring-pi
+#
+#	Copyright (c) 2012-2013 Gordon Henderson
+#################################################################################
+# This file is part of wiringPi:
+#	Wiring Compatable library for the Raspberry Pi
+#
+#    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 <http://www.gnu.org/licenses/>.
+#################################################################################
+
+
+#DEBUG	= -g -O0
+DEBUG	= -O3
+CC	= gcc
+INCLUDE	= -I/usr/local/include
+CFLAGS	= $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
+
+LDFLAGS	= -L/usr/local/lib
+LDLIBS    = -lwiringPi -lwiringPiDev -lpthread -lm
+
+# Should not alter anything below this line
+###############################################################################
+
+SRC	=	piGlow0.c piGlow1.c piglow.c
+
+OBJ	=	$(SRC:.c=.o)
+
+BINS	=	$(SRC:.c=)
+
+all:	$(BINS)
+
+piGlow0:	piGlow0.o
+	@echo [link]
+	@$(CC) -o $@ piGlow0.o $(LDFLAGS) $(LDLIBS)
+
+piGlow1:	piGlow1.o
+	@echo [link]
+	@$(CC) -o $@ piGlow1.o $(LDFLAGS) $(LDLIBS)
+
+piglow:	piglow.o
+	@echo [link]
+	@$(CC) -o $@ piglow.o $(LDFLAGS) $(LDLIBS)
+
+.c.o:
+	@echo [CC] $<
+	@$(CC) -c $(CFLAGS) $< -o $@
+
+clean:
+	@echo "[Clean]"
+	@rm -f $(OBJ) *~ core tags $(BINS)
+
+tags:	$(SRC)
+	@echo [ctags]
+	@ctags $(SRC)
+
+install:	piglow
+	@echo Installing piglow into /usr/local/bin
+	@cp -a piglow /usr/local/bin/piglow
+	@chmod 755 /usr/local/bin/piglow
+	@echo Done. Remember to load the I2C drivers!
+
+depend:
+	makedepend -Y $(SRC)
+
+# DO NOT DELETE
diff --git a/modules/catkin_ws/src/wiringPi/examples/PiGlow/piGlow0.c b/modules/catkin_ws/src/wiringPi/examples/PiGlow/piGlow0.c
new file mode 100644
index 00000000..d3fe4b96
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/PiGlow/piGlow0.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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <sn3218.h>
+
+#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/modules/catkin_ws/src/wiringPi/examples/PiGlow/piGlow1.c b/modules/catkin_ws/src/wiringPi/examples/PiGlow/piGlow1.c
new file mode 100644
index 00000000..a00b31e3
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/PiGlow/piGlow1.c
@@ -0,0 +1,258 @@
+/*
+ * piGlow1.c:
+ *	Very simple demonstration of the PiGlow board.
+ *	This uses the piGlow devLib.
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <poll.h>
+
+#include <wiringPi.h>
+#include <piGlow.h>
+
+#define	PIGLOW_BASE	533
+
+#ifndef	TRUE
+#  define TRUE  (1==1)
+#  define FALSE (!TRUE)
+#endif
+
+
+/*
+ * keypressed: clearKeypressed:
+ *	Simple but effective ways to tell if the enter key has been pressed
+ *********************************************************************************
+ */
+
+static int keypressed (void)
+{
+  struct pollfd polls ;
+
+  polls.fd     = fileno (stdin) ;
+  polls.events = POLLIN ;
+
+  return poll (&polls, 1, 0) != 0 ;
+}
+
+static void clearKeypressed (void)
+{
+  while (keypressed ())
+    (void)getchar () ;
+}
+
+
+/*
+ * pulseLed:
+ *	Pulses the LED at position leg, ring from off to a max. value,
+ *	then off again
+ *********************************************************************************
+ */
+
+static void pulseLed (int leg, int ring)
+{
+  int i ;
+
+  for (i = 0 ; i < 140 ; ++i)
+  {
+    piGlow1 (leg, ring, i) ;
+    delay (1) ;
+  }
+  delay (10) ;
+  for (i = 140 ; i >= 0 ; --i)
+  {
+    piGlow1 (leg, ring, i) ;
+    delay (1) ;
+  }
+}
+
+/*
+ * pulseLeg:
+ *	Same as above, but a whole leg at a time
+ *********************************************************************************
+ */
+
+static void pulseLeg (int leg)
+{
+  int i ;
+
+  for (i = 0 ; i < 140 ; ++i)
+  {
+    piGlowLeg (leg, i) ; delay (1) ;
+  }
+  delay (10) ;
+  for (i = 140 ; i >= 0 ; --i)
+  {
+    piGlowLeg (leg, i) ; delay (1) ;
+  }
+}
+
+
+/*
+ * pulse Ring:
+ *	Same as above, but a whole ring at a time
+ *********************************************************************************
+ */
+
+static void pulseRing (int ring)
+{
+  int i ;
+
+  for (i = 0 ; i < 140 ; ++i)
+  {
+    piGlowRing (ring, i) ; delay (1) ;
+  }
+  delay (10) ;
+  for (i = 140 ; i >= 0 ; --i)
+  {
+    piGlowRing (ring, i) ; delay (1) ;
+  }
+}
+
+#define	LEG_STEPS	3
+
+static int legSequence [] =
+{
+   4, 12, 99,
+  99,  4, 12, 
+  12, 99,  4,
+} ;
+  
+
+#define	RING_STEPS	16
+
+static int ringSequence [] =
+{
+   0,  0,  0,  0,  0, 64,
+   0,  0,  0,  0, 64, 64,
+   0,  0,  0, 64, 64,  0,
+   0,  0, 64, 64,  0,  0,
+   0, 64, 64,  0,  0,  0,
+  64, 64,  0,  0,  0,  0,
+  64,  0,  0,  0,  0,  0,
+   0,  0,  0,  0,  0,  0,
+  64,  0,  0,  0,  0,  0,
+  64, 64,  0,  0,  0,  0,
+   0, 64, 64,  0,  0,  0,
+   0,  0, 64, 64,  0,  0,
+   0,  0,  0, 64, 64,  0,
+   0,  0,  0,  0, 64, 64,
+   0,  0,  0,  0,  0, 64,
+   0,  0,  0,  0,  0,  0,
+} ;
+
+/*
+ * main:
+ *	Our little demo prgoram
+ *********************************************************************************
+ */
+
+int main (void)
+{
+  int i ;
+  int step, ring, leg ;
+
+// Always initialise wiringPi:
+//	Use the Sys method if you don't need to run as root
+
+  wiringPiSetupSys () ;
+
+// Initialise the piGlow devLib with our chosen pin base
+
+  piGlowSetup (1) ;
+
+// LEDs, one at a time
+
+  printf ("LEDs, one at a time\n") ;
+  for (; !keypressed () ;)
+    for (leg = 0 ; leg < 3 ; ++leg)
+    {
+      for (ring = 0 ; ring < 6 ; ++ring)
+      {
+	pulseLed (leg, ring) ;
+	if (keypressed ())
+	  break ;
+      }
+      if (keypressed ())
+	break ;
+    }
+  clearKeypressed () ;
+
+// Rings, one at a time
+
+  printf ("Rings, one at a time\n") ;
+  for (; !keypressed () ;)
+    for (ring = 0 ; ring < 6 ; ++ring)
+    {
+      pulseRing (ring) ;
+      if (keypressed ())
+	break ;
+    }
+  clearKeypressed () ;
+
+// Legs, one at a time
+
+  printf ("Legs, one at a time\n") ;
+  for (; !keypressed () ;)
+    for (leg = 0 ; leg < 3 ; ++leg)
+    {
+      pulseLeg (leg) ;
+      if (keypressed ())
+	break ;
+    }
+  clearKeypressed () ;
+
+  delay (1000) ;
+
+// Sequence - alternating rings, legs and random
+
+  printf ("Sequence now\n") ;
+  for (; !keypressed () ;)
+  {
+    for (i = 0 ; i < 20 ; ++i)
+      for (step = 0 ; step < LEG_STEPS ; ++step)
+      {
+	for (leg = 0 ; leg < 3 ; ++leg)
+	  piGlowLeg (leg, legSequence [step * 3 + leg]) ;
+	delay (80) ;
+      }
+
+    for (i = 0 ; i < 10 ; ++i)
+      for (step = 0 ; step < RING_STEPS ; ++step)
+      {
+	for (ring = 0 ; ring < 6 ; ++ring)
+	  piGlowRing (ring, ringSequence [step * 6 + ring]) ;
+	delay (80) ;
+      }
+
+    for (i = 0 ; i < 1000 ; ++i)
+    {
+      leg  = random () % 3 ;
+      ring = random () % 6 ;
+      piGlow1 (leg, ring, random () % 256) ;
+      delay (5) ; 
+      piGlow1 (leg, ring, 0) ;
+    }
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/PiGlow/piglow.c b/modules/catkin_ws/src/wiringPi/examples/PiGlow/piglow.c
new file mode 100644
index 00000000..e6a2db36
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/PiGlow/piglow.c
@@ -0,0 +1,176 @@
+/*
+ * piglow.c:
+ *	Very simple demonstration of the PiGlow board.
+ *	This uses the piGlow devLib.
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#ifndef	TRUE
+#  define TRUE  (1==1)
+#  define FALSE (!TRUE)
+#endif
+
+#include <wiringPi.h>
+#include <piGlow.h>
+
+static void failUsage (void)
+{
+  fprintf (stderr, "Usage examples:\n") ;
+  fprintf (stderr, "  piglow off         # All off\n") ;
+  fprintf (stderr, "  piglow red 50      # Light the 3 red LEDs to 50%%\n") ;
+  fprintf (stderr, "     colours are: red, yellow, orange, green, blue and white\n") ;
+  fprintf (stderr, "  piglow all 75      # Light all to 75%%\n") ;
+  fprintf (stderr, "  piglow leg 0 25    # Light leg 0 to 25%%\n") ;
+  fprintf (stderr, "  piglow ring 3 100  # Light ring 3 to 100%%\n") ;
+  fprintf (stderr, "  piglow led 2 5 100 # Light the single LED on Leg 2, ring 5 to 100%%\n") ;
+
+  exit (EXIT_FAILURE) ;
+}
+
+static int getPercent (char *typed)
+{
+  int percent ;
+
+  percent = atoi (typed) ;
+  if ((percent < 0) || (percent > 100))
+  {
+    fprintf (stderr, "piglow: percent value out of range\n") ;
+    exit (EXIT_FAILURE) ;
+  }
+  return (percent * 255) / 100 ;
+}
+
+
+/*
+ * main:
+ *	Our little demo prgoram
+ *********************************************************************************
+ */
+
+int main (int argc, char *argv [])
+{
+  int percent ;
+  int ring, leg ;
+
+// Always initialise wiringPi:
+//	Use the Sys method if you don't need to run as root
+
+  wiringPiSetupSys () ;
+
+// Initialise the piGlow devLib
+
+  piGlowSetup (FALSE) ;
+
+  if (argc == 1)
+    failUsage () ;
+
+  if ((argc == 2) && (strcasecmp (argv [1], "off") == 0))
+  {
+    for (leg = 0 ; leg < 3 ; ++leg)
+      piGlowLeg (leg, 0) ;
+    return 0 ;
+  }
+
+  if (argc == 3)
+  {
+    percent = getPercent (argv [2]) ;
+
+    /**/ if (strcasecmp (argv [1], "red") == 0)
+      piGlowRing (PIGLOW_RED, percent) ;
+    else if (strcasecmp (argv [1], "yellow") == 0)
+      piGlowRing (PIGLOW_YELLOW, percent) ;
+    else if (strcasecmp (argv [1], "orange") == 0)
+      piGlowRing (PIGLOW_ORANGE, percent) ;
+    else if (strcasecmp (argv [1], "green") == 0)
+      piGlowRing (PIGLOW_GREEN, percent) ;
+    else if (strcasecmp (argv [1], "blue") == 0)
+      piGlowRing (PIGLOW_BLUE, percent) ;
+    else if (strcasecmp (argv [1], "white") == 0)
+      piGlowRing (PIGLOW_WHITE, percent) ;
+    else if (strcasecmp (argv [1], "all") == 0)
+      for (ring = 0 ; ring < 6 ; ++ring)
+	piGlowRing (ring, percent) ;
+    else
+    {
+      fprintf (stderr, "piglow: invalid colour\n") ;
+      exit (EXIT_FAILURE) ;
+    }
+    return 0 ;
+  }
+
+  if (argc == 4)
+  {
+    /**/ if (strcasecmp (argv [1], "leg") == 0)
+    {
+      leg = atoi (argv [2]) ;
+      if ((leg < 0) || (leg > 2))
+      {
+	fprintf (stderr, "piglow: leg value out of range\n") ;
+	exit (EXIT_FAILURE) ;
+      }
+      percent = getPercent (argv [3]) ;
+      piGlowLeg (leg, percent) ;
+    }
+    else if (strcasecmp (argv [1], "ring") == 0)
+    {
+      ring = atoi (argv [2]) ;
+      if ((ring < 0) || (ring > 5))
+      {
+	fprintf (stderr, "piglow: ring value out of range\n") ;
+	exit (EXIT_FAILURE) ;
+      }
+      percent = getPercent (argv [3]) ;
+      piGlowRing (ring, percent) ;
+    }
+    return 0 ;
+  }
+
+  if (argc == 5)
+  {
+    if (strcasecmp (argv [1], "led") != 0)
+      failUsage () ;
+
+    leg = atoi (argv [2]) ;
+    if ((leg < 0) || (leg > 2))
+    {
+      fprintf (stderr, "piglow: leg value out of range\n") ;
+      exit (EXIT_FAILURE) ;
+    }
+    ring = atoi (argv [3]) ;
+    if ((ring < 0) || (ring > 5))
+    {
+      fprintf (stderr, "piglow: ring value out of range\n") ;
+      exit (EXIT_FAILURE) ;
+    }
+    percent = getPercent (argv [4]) ;
+    piGlow1 (leg, ring, percent) ;
+    return 0 ;
+  }
+
+  failUsage () ;
+  return 0 ; 
+}
+
+
diff --git a/modules/catkin_ws/src/wiringPi/examples/README.TXT b/modules/catkin_ws/src/wiringPi/examples/README.TXT
new file mode 100644
index 00000000..33263b1c
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/README.TXT
@@ -0,0 +1,18 @@
+
+wiringPi Examples
+=================
+
+There are now too many examples to compile them all in a sensible time,
+and you probably don't want to compile or run them all anyway, so they
+have been separated out.
+
+To compile an individual example, just type
+
+    make exampleName
+
+To really compile everything:
+
+    make really-all
+
+The individual tests are:
+
diff --git a/modules/catkin_ws/src/wiringPi/examples/blink.c b/modules/catkin_ws/src/wiringPi/examples/blink.c
new file mode 100644
index 00000000..c27a20e3
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/blink.c
@@ -0,0 +1,48 @@
+/*
+ * blink.c:
+ *	Standard "blink" program in wiringPi. Blinks an LED connected
+ *	to the first GPIO pin.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+
+// LED Pin - wiringPi pin 0 is BCM_GPIO 17.
+
+#define	LED	0
+
+int main (void)
+{
+  printf ("Raspberry Pi blink\n") ;
+
+  wiringPiSetup () ;
+  pinMode (LED, OUTPUT) ;
+
+  for (;;)
+  {
+    digitalWrite (LED, HIGH) ;	// On
+    delay (500) ;		// mS
+    digitalWrite (LED, LOW) ;	// Off
+    delay (500) ;
+  }
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/blink.rtb b/modules/catkin_ws/src/wiringPi/examples/blink.rtb
new file mode 100644
index 00000000..eb7d26c7
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/blink.rtb
@@ -0,0 +1,30 @@
+// blink.rtb:
+//    Blink program in Return to Basic
+//
+// Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+//**********************************************************************
+// 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+//
+PinMode (0, 1) // Output
+CYCLE 
+  DigitalWrite (0, 1) // Pin 0 ON
+  WAIT (0.5) // 0.5 seconds
+  DigitalWrite (0, 0)
+  WAIT (0.5)
+REPEAT 
+END 
diff --git a/modules/catkin_ws/src/wiringPi/examples/blink.sh b/modules/catkin_ws/src/wiringPi/examples/blink.sh
new file mode 100644
index 00000000..77553836
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/blink.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# blink.sh:
+#	Standard "blink" program in wiringPi. Blinks an LED connected
+#	to the first GPIO pin.
+#
+# Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+#######################################################################
+# 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 <http://www.gnu.org/licenses/>.
+#######################################################################
+
+# LED Pin - wiringPi pin 0 is BCM_GPIO 17.
+
+PIN=0
+
+gpio mode $PIN out
+
+while true; do
+  gpio write $PIN 1
+  sleep 0.5
+  gpio write $PIN 0
+  sleep 0.5
+done
diff --git a/modules/catkin_ws/src/wiringPi/examples/blink12.c b/modules/catkin_ws/src/wiringPi/examples/blink12.c
new file mode 100644
index 00000000..c9b3d506
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/blink12.c
@@ -0,0 +1,111 @@
+/*
+ * blink12.c:
+ *	Simple sequence over the first 12 GPIO pins - LEDs
+ *	Aimed at the Gertboard, but it's fairly generic.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+
+// Simple sequencer data
+//	Triplets of LED, On/Off and delay
+
+int data [] =
+{
+            0, 1, 1,
+            1, 1, 1,
+  0, 0, 0,  2, 1, 1,
+  1, 0, 0,  3, 1, 1,
+  2, 0, 0,  4, 1, 1,
+  3, 0, 0,  5, 1, 1,
+  4, 0, 0,  6, 1, 1,
+  5, 0, 0,  7, 1, 1,
+  6, 0, 0, 11, 1, 1,
+  7, 0, 0, 10, 1, 1,
+ 11, 0, 0, 13, 1, 1,
+ 10, 0, 0, 12, 1, 1,
+ 13, 0, 1,
+ 12, 0, 1,
+
+  0, 0, 1,	// Extra delay
+
+// Back again
+
+           12, 1, 1,
+           13, 1, 1,
+ 12, 0, 0, 10, 1, 1,
+ 13, 0, 0, 11, 1, 1,
+ 10, 0, 0,  7, 1, 1,
+ 11, 0, 0,  6, 1, 1,
+  7, 0, 0,  5, 1, 1,
+  6, 0, 0,  4, 1, 1,
+  5, 0, 0,  3, 1, 1,
+  4, 0, 0,  2, 1, 1,
+  3, 0, 0,  1, 1, 1,
+  2, 0, 0,  0, 1, 1,
+  1, 0, 1,
+  0, 0, 1,
+
+  0, 0, 1,	// Extra delay
+
+  0, 9, 0,	// End marker
+
+} ;
+
+
+int main (void)
+{
+  int pin ;
+  int dataPtr ;
+  int l, s, d ;
+
+  printf ("Raspberry Pi - 12-LED Sequence\n") ;
+  printf ("==============================\n") ;
+  printf ("\n") ;
+  printf ("Connect LEDs up to the first 8 GPIO pins, then pins 11, 10, 13, 12 in\n") ;
+  printf ("    that order, then sit back and watch the show!\n") ;
+
+  wiringPiSetup () ;
+
+  for (pin = 0 ; pin < 14 ; ++pin)
+    pinMode (pin, OUTPUT) ;
+
+  dataPtr = 0 ;
+
+  for (;;)
+  {
+    l = data [dataPtr++] ;	// LED
+    s = data [dataPtr++] ;	// State
+    d = data [dataPtr++] ;	// Duration (10ths)
+
+    if (s == 9)			// 9 -> End Marker
+    {
+      dataPtr = 0 ;
+      continue ;
+    }
+
+    digitalWrite (l, s) ;
+    delay        (d * 100) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/blink12drcs.c b/modules/catkin_ws/src/wiringPi/examples/blink12drcs.c
new file mode 100644
index 00000000..6ee11fd1
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/blink12drcs.c
@@ -0,0 +1,125 @@
+/*
+ * blink12drcs.c:
+ *	Simple sequence over the first 12 GPIO pins - LEDs
+ *	Aimed at the Gertboard, but it's fairly generic.
+ *	This version uses DRC totalk to the ATmega on the Gertboard
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+#include <drcSerial.h>
+
+#define	GERT_BASE	100
+
+static int pinMap [] =
+{
+  0, 1, 2, 3,		// Pi Native
+  GERT_BASE + 2, GERT_BASE + 3, GERT_BASE + 4, GERT_BASE + 5,
+  GERT_BASE + 6, GERT_BASE + 7, GERT_BASE + 8, GERT_BASE + 9,
+} ;
+
+// Simple sequencer data
+//	Triplets of LED, On/Off and delay
+
+
+int data [] =
+{
+               0, 1, 1,
+               1, 1, 1,
+   0, 0, 0,    2, 1, 1,
+   1, 0, 0,    3, 1, 1,
+   2, 0, 0,    4, 1, 1,
+   3, 0, 0,    5, 1, 1,
+   4, 0, 0,    6, 1, 1,
+   5, 0, 0,    7, 1, 1,
+   6, 0, 0,    8, 1, 1,
+   7, 0, 0,    9, 1, 1,
+   8, 0, 0,   10, 1, 1,
+   9, 0, 0,   11, 1, 1,
+  10, 0, 1,
+  11, 0, 1,
+
+  0, 0, 1,	// Extra delay
+
+// Back again
+
+              11, 1, 1,
+              10, 1, 1,
+  11, 0, 0,    9, 1, 1,
+  10, 0, 0,    8, 1, 1,
+   9, 0, 0,    7, 1, 1,
+   8, 0, 0,    6, 1, 1,
+   7, 0, 0,    5, 1, 1,
+   6, 0, 0,    4, 1, 1,
+   5, 0, 0,    3, 1, 1,
+   4, 0, 0,    2, 1, 1,
+   3, 0, 0,    1, 1, 1,
+   2, 0, 0,    0, 1, 1,
+   1, 0, 1,
+   0, 0, 1,
+
+   0, 0, 1,	// Extra delay
+
+   0, 9, 0,	// End marker
+
+} ;
+
+
+int main (void)
+{
+  int pin ;
+  int dataPtr ;
+  int l, s, d ;
+
+  printf ("Raspberry Pi - 12-LED Sequence\n") ;
+  printf ("==============================\n") ;
+  printf ("\n") ;
+  printf ("Connect LEDs up to the first 4 Pi pins and 8 pins on the ATmega\n") ;
+  printf ("    from PD2 through PB1 in that order,\n") ;
+  printf ("  then sit back and watch the show!\n") ;
+
+  wiringPiSetup  () ;
+  drcSetupSerial (GERT_BASE, 20, "/dev/ttyAMA0", 115200) ;
+
+  for (pin = 0 ; pin < 12 ; ++pin)
+    pinMode (pinMap [pin], OUTPUT) ;
+
+  dataPtr = 0 ;
+
+  for (;;)
+  {
+    l = data [dataPtr++] ;	// LED
+    s = data [dataPtr++] ;	// State
+    d = data [dataPtr++] ;	// Duration (10ths)
+
+    if (s == 9)			// 9 -> End Marker
+    {
+      dataPtr = 0 ;
+      continue ;
+    }
+
+    digitalWrite (pinMap [l], s) ;
+    delay        (d * analogRead (GERT_BASE) / 4) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/blink6drcs.c b/modules/catkin_ws/src/wiringPi/examples/blink6drcs.c
new file mode 100644
index 00000000..32f4921e
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/blink6drcs.c
@@ -0,0 +1,115 @@
+/*
+ * blink6drcs.c:
+ *	Simple sequence over 6 pins on a remote DRC board.
+ *	Aimed at the Gertduino, but it's fairly generic.
+ *	This version uses DRC to talk to the ATmega on the Gertduino
+ *
+ * Copyright (c) 2012-2014 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+#include <drcSerial.h>
+
+#define	GERT_BASE	100
+
+static int pinMap [] =
+{
+  GERT_BASE + 6, GERT_BASE + 5, GERT_BASE + 3, GERT_BASE + 10, GERT_BASE + 9, GERT_BASE + 13,
+} ;
+
+// Simple sequencer data
+//	Triplets of LED, On/Off and delay
+
+
+int data [] =
+{
+               0, 1, 1,
+               1, 1, 1,
+   0, 0, 0,    2, 1, 1,
+   1, 0, 0,    3, 1, 1,
+   2, 0, 0,    4, 1, 1,
+   3, 0, 0,    5, 1, 1,
+   4, 0, 1,
+   5, 0, 1,
+
+   0, 0, 1,	// Extra delay
+
+// Back again
+
+               5, 1, 1,
+               4, 1, 1,
+   5, 0, 0,    3, 1, 1,
+   4, 0, 0,    2, 1, 1,
+   3, 0, 0,    1, 1, 1,
+   2, 0, 0,    0, 1, 1,
+   1, 0, 1,
+   0, 0, 1,
+
+   0, 0, 1,	// Extra delay
+
+   0, 9, 0,	// End marker
+
+} ;
+
+
+int main (void)
+{
+  int pin ;
+  int dataPtr ;
+  int l, s, d ;
+
+  printf ("Raspberry Pi - 6-LED Sequence\n") ;
+  printf ("=============================\n") ;
+  printf ("\n") ;
+  printf ("  Use the 2 buttons to temporarily speed up the sequence\n") ;
+
+  wiringPiSetupSys  () ;	// Not using the Pi's GPIO here
+  drcSetupSerial (GERT_BASE, 20, "/dev/ttyAMA0", 115200) ;
+
+  for (pin = 0 ; pin < 6 ; ++pin)
+    pinMode (pinMap [pin], OUTPUT) ;
+
+  pinMode (GERT_BASE + 16, INPUT) ;	// Buttons
+  pinMode (GERT_BASE + 17, INPUT) ;
+
+  pullUpDnControl (GERT_BASE + 16, PUD_UP) ;
+  pullUpDnControl (GERT_BASE + 17, PUD_UP) ;
+
+  dataPtr = 0 ;
+
+  for (;;)
+  {
+    l = data [dataPtr++] ;	// LED
+    s = data [dataPtr++] ;	// State
+    d = data [dataPtr++] ;	// Duration (10ths)
+
+    if (s == 9)			// 9 -> End Marker
+    {
+      dataPtr = 0 ;
+      continue ;
+    }
+
+    digitalWrite (pinMap [l], s) ;
+    delay        (d * digitalRead (GERT_BASE + 16) * 15 + digitalRead (GERT_BASE + 17) * 20) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/blink8.c b/modules/catkin_ws/src/wiringPi/examples/blink8.c
new file mode 100644
index 00000000..602d3c05
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/blink8.c
@@ -0,0 +1,57 @@
+/*
+ * blink8.c:
+ *	Simple sequence over the first 8 GPIO pins - LEDs
+ *	Aimed at the Gertboard, but it's fairly generic.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+
+int main (void)
+{
+  int i, led ;
+
+  printf ("Raspberry Pi - 8-LED Sequencer\n") ;
+  printf ("==============================\n") ;
+  printf ("\n") ;
+  printf ("Connect LEDs to the first 8 GPIO pins and watch ...\n") ;
+
+  wiringPiSetup () ;
+
+  for (i = 0 ; i < 8 ; ++i)
+    pinMode (i, OUTPUT) ;
+
+  for (;;)
+  {
+    for (led = 0 ; led < 8 ; ++led)
+    {
+      digitalWrite (led, 1) ;
+      delay (100) ;
+    }
+
+    for (led = 0 ; led < 8 ; ++led)
+    {
+      digitalWrite (led, 0) ;
+      delay (100) ;
+    }
+  }
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/clock.c b/modules/catkin_ws/src/wiringPi/examples/clock.c
new file mode 100644
index 00000000..9a53210a
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/clock.c
@@ -0,0 +1,201 @@
+/*
+ * clock.c:
+ *	Demo of the 128x64 graphics based LCD driver.
+ *	This is designed to drive the parallel interface LCD drivers
+ *	based on the popular 12864H controller chip.
+ *
+ *	This test program assumes the following:
+ *		(Which is currently hard-wired into the driver)
+ *
+ *	GPIO 0-7 is connected to display data pins 0-7.
+ *	GPIO 10 is CS1
+ *	GPIO 11 is CS2
+ *	GPIO 12 is STROBE
+ *	GPIO 10 is RS
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+#include <math.h>
+
+#include <wiringPi.h>
+#include <lcd128x64.h>
+
+#ifndef	TRUE
+#  define	TRUE	(1==1)
+#  define	FALSE	(1==2)
+#endif
+
+double clockRadius ;
+double thickness, barLen ;
+int maxX, maxY ;
+
+double rads (double degs)
+{
+  return degs * M_PI / 180.0 ;
+}
+
+void drawClockHands (void)
+{
+  time_t t ;
+  struct tm *now ;
+  double angle, p, x0, y0, x1, y1 ;
+  int h24, h, m, s ;
+  char text [20] ;
+
+  time (&t) ;
+  now = localtime (&t) ;
+
+  h24 = now->tm_hour ;
+  m   = now->tm_min ;
+  s   = now->tm_sec ;
+
+  h = h24 ;
+  if (h > 12)
+    h -= 12 ;
+
+// Hour hand
+
+  angle = h * 30 + m * 0.5 ;
+  x0 = sin (rads (angle)) * (clockRadius * 0.75) ;
+  y0 = cos (rads (angle)) * (clockRadius * 0.75) ;
+  for (p = -3.0 ; p <= 3.0 ; p += 0.2)
+  {
+    x1 = sin (rads (angle + p)) * (clockRadius * 0.7) ;
+    y1 = cos (rads (angle + p)) * (clockRadius * 0.7) ;
+    lcd128x64line (0, 0, x1, y1, 1) ;
+    lcd128x64lineTo (x0, y0, 1) ;
+  }
+
+// Minute hand
+
+  angle = m * 6 ;
+  x0 = sin (rads (angle)) * (clockRadius * 0.9) ;
+  y0 = cos (rads (angle)) * (clockRadius * 0.9) ;
+  for (p = -1.0 ; p <= 1.0 ; p += 0.2)
+  {
+    x1 = sin (rads (angle + p)) * (clockRadius * 0.85) ;
+    y1 = cos (rads (angle + p)) * (clockRadius * 0.85) ;
+    lcd128x64line (0, 0, x1, y1, 1) ;
+    lcd128x64lineTo (x0, y0, 1) ;
+  }
+
+// Second hand
+
+  angle = s * 6 ;
+  x0 = sin (rads (angle)) * (clockRadius * 0.2) ;
+  y0 = cos (rads (angle)) * (clockRadius * 0.2) ;
+  x1 = sin (rads (angle)) * (clockRadius * 0.95) ;
+  y1 = cos (rads (angle)) * (clockRadius * 0.95) ;
+  lcd128x64line (0 - x0, 0 - y0, x1, y1, 1) ;
+  lcd128x64circle (0, 0, clockRadius * 0.1,  0, 1) ;
+  lcd128x64circle (0, 0, clockRadius * 0.05, 1, 1) ;
+
+// Text:
+
+  sprintf (text, "%02d:%02d:%02d", h24, m, s) ;
+  lcd128x64puts (32, 24, text, 0, 1) ;
+
+  sprintf (text, "%2d/%2d/%2d", now->tm_mday, now->tm_mon + 1, now->tm_year - 100) ;
+  lcd128x64puts (32, -23, text, 0, 1) ;
+}
+
+void drawClockFace (void)
+{
+  int m ;
+  double d, px1, py1, px2, py2 ;
+
+  lcd128x64clear (0) ;
+  lcd128x64circle (0,0, clockRadius, 1, TRUE) ;
+  lcd128x64circle (0,0, clockRadius - thickness, 0, TRUE) ;
+
+// The four big indicators for 12,15,30 and 45
+
+  lcd128x64rectangle (- 3,  clockRadius - barLen, 3,  clockRadius,     1, TRUE) ;	// 12
+  lcd128x64rectangle (clockRadius - barLen, 3,  clockRadius, -3, 1, TRUE) ;	// 3
+  lcd128x64rectangle (- 3, -clockRadius + barLen, 3, -clockRadius, 1, TRUE) ;	// 6
+  lcd128x64rectangle (-clockRadius + barLen, 3, -clockRadius, -3, 1, TRUE) ;	// 9
+
+
+// Smaller 5 and 1 minute ticks
+
+  for (m = 0 ; m < 60 ; ++m)
+  {
+    px1 = sin (rads (m * 6)) * clockRadius ;
+    py1 = cos (rads (m * 6)) * clockRadius ;
+    if ((m % 5) == 0)
+      d = barLen ;
+    else 
+      d = barLen / 2.0 ;
+
+    px2 = sin (rads (m * 6)) * (clockRadius - d) ;
+    py2 = cos (rads (m * 6)) * (clockRadius - d) ;
+    lcd128x64line (px1, py1, px2, py2, 1) ;
+  }
+}
+
+void setup (void)
+{
+  lcd128x64getScreenSize (&maxX, &maxY) ;
+  clockRadius = maxY / 2 - 1 ;
+  thickness = maxX / 48 ;
+  barLen = thickness * 4 ;
+  lcd128x64setOrigin (32, 32) ;
+}
+
+
+
+
+/*
+ ***********************************************************************
+ * The main program
+ ***********************************************************************
+ */
+
+int main (int argc, char *argv [])
+{
+  time_t now ;
+
+  wiringPiSetup () ;
+
+  lcd128x64setup () ;
+
+  setup () ;
+  for (;;)
+  {
+    drawClockFace  () ;
+    drawClockHands () ;
+    lcd128x64update () ;
+
+    now = time (NULL) ;
+    while (time (NULL) == now)
+      delay (10) ;
+  }
+  
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/delayTest.c b/modules/catkin_ws/src/wiringPi/examples/delayTest.c
new file mode 100644
index 00000000..4c8b6ca4
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/delayTest.c
@@ -0,0 +1,107 @@
+/*
+ * delayTest.c:
+ *	Just a little test program I'm using to experiment with
+ *	various timings and latency, etc.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <wiringPi.h>
+
+#include <sys/time.h>
+
+#define	CYCLES	1000
+
+int main()
+{
+  int x ;
+  struct timeval t1, t2 ;
+  int t ;
+  int max, min ;
+  int del ;
+  int underRuns, overRuns, exactRuns, total ;
+  int descheds ;
+
+  if (wiringPiSetup () == -1)
+    return 1 ;
+
+  piHiPri (10) ; sleep (1) ;
+
+// Baseline test
+
+  gettimeofday (&t1, NULL) ;
+  gettimeofday (&t2, NULL) ;
+
+  t = t2.tv_usec - t1.tv_usec ;
+  printf ("Baseline test: %d\n", t);
+
+  for (del = 1 ; del < 200 ; ++del)
+  {
+    underRuns = overRuns = exactRuns = total = 0 ;
+    descheds = 0 ;
+    max = del ;
+    min = del ;
+
+    for (x = 0 ; x < CYCLES ; ++x)
+    {
+      for (;;)				// Repeat this if we get a delay over 999uS
+      {					// -> High probability Linux has deschedulled us
+	gettimeofday (&t1, NULL) ;
+	  delayMicroseconds (del) ;
+	gettimeofday (&t2, NULL) ;
+
+	if (t2.tv_usec < t1.tv_usec)	// Counter wrapped
+	  t = (1000000 + t2.tv_usec) - t1.tv_usec;
+	else
+	  t = t2.tv_usec - t1.tv_usec ;
+	if (t > 999)
+	{
+	  ++descheds ;
+	  continue ;
+	}
+	else
+	  break ;
+      }
+
+      if (t > max)
+      {
+        max = t ;
+	++overRuns ;
+      }
+      else if (t < min)
+      {
+	min = t ;
+	++underRuns ;
+      }
+      else
+	++exactRuns ;
+
+      total += t ;
+    }
+    printf ("Delay: %3d. Min: %3d, Max: %3d, Unders: %3d, Overs: %3d, Exacts: %3d, Average: %3d,  Descheds: %2d\n",
+	del, min, max, underRuns, overRuns, exactRuns, total / CYCLES,  descheds) ;
+    fflush (stdout) ;
+    delay (1) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/ds1302.c b/modules/catkin_ws/src/wiringPi/examples/ds1302.c
new file mode 100644
index 00000000..f1e9e205
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/ds1302.c
@@ -0,0 +1,238 @@
+/*
+ * ds1302.c:
+ *	Real Time clock
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <time.h>
+
+#include <wiringPi.h>
+#include <ds1302.h>
+
+// Register defines
+
+#define	RTC_SECS	 0
+#define	RTC_MINS	 1
+#define	RTC_HOURS	 2
+#define	RTC_DATE	 3
+#define	RTC_MONTH	 4
+#define	RTC_DAY		 5
+#define	RTC_YEAR	 6
+#define	RTC_WP		 7
+#define	RTC_TC		 8
+#define	RTC_BM		31
+
+
+static unsigned int masks [] = { 0x7F, 0x7F, 0x3F, 0x3F, 0x1F, 0x07, 0xFF } ;
+
+
+/*
+ * bcdToD: dToBCD:
+ *	BCD decode/encode
+ *********************************************************************************
+ */
+
+static int bcdToD (unsigned int byte, unsigned int mask)
+{
+  unsigned int b1, b2 ;
+  byte &= mask ;
+  b1 = byte & 0x0F ;
+  b2 = ((byte >> 4) & 0x0F) * 10 ;
+  return b1 + b2 ;
+}
+
+static unsigned int dToBcd (unsigned int byte)
+{
+  return ((byte / 10) << 4) + (byte % 10) ;
+}
+
+
+/*
+ * ramTest:
+ *	Simple test of the 31 bytes of RAM inside the DS1302 chip
+ *********************************************************************************
+ */
+
+static int ramTestValues [] =
+  { 0x00, 0xFF, 0xAA, 0x55, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0xF0, 0x0F, -1 } ;
+
+static int ramTest (void)
+{
+  int addr ;
+  int got ;
+  int i = 0 ;
+  int errors = 0 ;
+  int testVal ;
+
+  printf ("DS1302 RAM TEST\n") ;
+
+  testVal = ramTestValues [i] ;
+
+  while (testVal != -1)
+  {
+    for (addr = 0 ; addr < 31 ; ++addr)
+      ds1302ramWrite (addr, testVal) ;
+
+    for (addr = 0 ; addr < 31 ; ++addr)
+      if ((got = ds1302ramRead (addr)) != testVal)
+      {
+	printf ("DS1302 RAM Failure: Address: %2d, Expected: 0x%02X, Got: 0x%02X\n",
+		addr, testVal, got) ;
+	++errors ;
+      }
+    testVal = ramTestValues [++i] ;
+  }
+
+  for (addr = 0 ; addr < 31 ; ++addr)
+    ds1302ramWrite (addr, addr) ;
+
+  for (addr = 0 ; addr < 31 ; ++addr)
+    if ((got = ds1302ramRead (addr)) != addr)
+    {
+      printf ("DS1302 RAM Failure: Address: %2d, Expected: 0x%02X, Got: 0x%02X\n",
+	      addr, addr, got) ;
+      ++errors ;
+    }
+
+  if (errors == 0)
+    printf ("-- DS1302 RAM TEST: OK\n") ;
+  else
+    printf ("-- DS1302 RAM TEST FAILURE. %d errors.\n", errors) ;
+
+  return 0 ;
+}
+
+/*
+ * setLinuxClock:
+ *	Set the Linux clock from the hardware
+ *********************************************************************************
+ */
+
+static int setLinuxClock (void)
+{
+  char dateTime [20] ;
+  char command [64] ;
+  int  clock [8] ;
+
+
+  printf ("Setting the Linux Clock from the DS1302... ") ; fflush (stdout) ;
+
+  ds1302clockRead (clock) ;
+
+// [MMDDhhmm[[CC]YY][.ss]]
+
+  sprintf (dateTime, "%02d%02d%02d%02d%02d%02d.%02d",
+	bcdToD (clock [RTC_MONTH], masks [RTC_MONTH]),
+	bcdToD (clock [RTC_DATE],  masks [RTC_DATE]),
+	bcdToD (clock [RTC_HOURS], masks [RTC_HOURS]),
+	bcdToD (clock [RTC_MINS],  masks [RTC_MINS]),
+	20,
+	bcdToD (clock [RTC_YEAR],  masks [RTC_YEAR]),
+	bcdToD (clock [RTC_SECS],  masks [RTC_SECS])) ;
+
+  sprintf (command, "/bin/date %s", dateTime) ;
+  system (command) ;
+
+  return 0 ;
+}
+
+
+/*
+ * setDSclock:
+ *	Set the DS1302 block from Linux time
+ *********************************************************************************
+ */
+
+static int setDSclock (void)
+{
+  struct tm t ;
+  time_t now ;
+  int clock [8] ;
+
+  printf ("Setting the clock in the DS1302 from Linux time... ") ;
+
+  now = time (NULL) ;
+  gmtime_r (&now, &t) ;
+
+  clock [ 0] = dToBcd (t.tm_sec) ;	// seconds
+  clock [ 1] = dToBcd (t.tm_min) ;	// mins
+  clock [ 2] = dToBcd (t.tm_hour) ;	// hours
+  clock [ 3] = dToBcd (t.tm_mday) ;	// date
+  clock [ 4] = dToBcd (t.tm_mon + 1) ;	// months 0-11 --> 1-12
+  clock [ 5] = dToBcd (t.tm_wday + 1) ;	// weekdays (sun 0)
+  clock [ 6] = dToBcd (t.tm_year - 100) ;       // years
+  clock [ 7] = 0 ;			// W-Protect off
+
+  ds1302clockWrite (clock) ;
+
+  printf ("OK\n") ;
+
+  return 0 ;
+}
+
+
+
+
+int main (int argc, char *argv [])
+{
+  int i ;
+  int clock [8] ;
+
+  wiringPiSetup () ;
+  ds1302setup   (0, 1, 2) ;
+
+  if (argc == 2)
+  {
+    /**/ if (strcmp (argv [1], "-slc") == 0)
+      return setLinuxClock () ;
+    else if (strcmp (argv [1], "-sdsc") == 0)
+      return setDSclock () ;
+    else if (strcmp (argv [1], "-rtest") == 0)
+      return ramTest () ;
+    else
+    {
+      printf ("Usage: ds1302 [-slc | -sdsc | -rtest]\n") ;
+      return EXIT_FAILURE ;
+    }
+  }
+
+  for (i = 0 ;; ++i)
+  {
+    printf ("%5d:  ", i) ;
+
+    ds1302clockRead (clock) ;
+    printf (" %2d:%02d:%02d",
+	bcdToD (clock [2], masks [2]), bcdToD (clock [1], masks [1]), bcdToD (clock [0], masks [0])) ;
+
+    printf (" %2d/%02d/%04d",
+	bcdToD (clock [3], masks [3]), bcdToD (clock [4], masks [4]), bcdToD (clock [6], masks [6]) + 2000) ;
+      
+    printf ("\n") ;
+
+    delay (200) ;
+  }
+ 
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/header.h b/modules/catkin_ws/src/wiringPi/examples/header.h
new file mode 100644
index 00000000..82f723d3
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/header.h
@@ -0,0 +1,23 @@
+/*
+ * file.c:
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
diff --git a/modules/catkin_ws/src/wiringPi/examples/isr-osc.c b/modules/catkin_ws/src/wiringPi/examples/isr-osc.c
new file mode 100644
index 00000000..a872ee3a
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/isr-osc.c
@@ -0,0 +1,118 @@
+/*
+ * isr-osc.c:
+ *	Wait for Interrupt test program - ISR method - interrupt oscillator
+ *
+ *	How to test:
+ *
+ *	IMPORTANT: To run this test we connect 2 GPIO pins together, but
+ *	before we do that YOU must make sure that they are both setup
+ *	the right way. If they are set to outputs and one is high and one low,
+ *	then you connect the wire, you'll create a short and that won't be good.
+ *
+ *	Before making the connection, type:
+ *		gpio mode 0 output
+ *		gpio write 0 0
+ *		gpio mode 1 input
+ *	then you can connect them together.
+ *
+ *	Run the program, then:
+ *		gpio write 0 1
+ *		gpio write 0 0
+ *
+ *	at which point it will trigger an interrupt and the program will
+ *	then do the up/down toggling for itself and run at full speed, and
+ *	it will report the number of interrupts recieved every second.
+ *
+ *	Copyright (c) 2013 Gordon Henderson. projects@drogon.net
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <wiringPi.h>
+
+
+// What GPIO input are we using?
+//	This is a wiringPi pin number
+
+#define	OUT_PIN		0
+#define	IN_PIN		1
+
+// globalCounter:
+//	Global variable to count interrupts
+//	Should be declared volatile to make sure the compiler doesn't cache it.
+
+static volatile int globalCounter = 0 ;
+
+/*
+ * myInterrupt:
+ *********************************************************************************
+ */
+
+void myInterrupt (void)
+{
+  digitalWrite (OUT_PIN, 1) ;
+  ++globalCounter ;
+  digitalWrite (OUT_PIN, 0) ;
+}
+
+
+/*
+ *********************************************************************************
+ * main
+ *********************************************************************************
+ */
+
+int main (void)
+{
+  int myCounter   = 0 ;
+  int lastCounter = 0 ;
+
+  if (wiringPiSetup () < 0)
+  {
+    fprintf (stderr, "Unable to setup wiringPi: %s\n", strerror (errno)) ;
+    return 1 ;
+  }
+
+  pinMode (OUT_PIN, OUTPUT) ;
+  pinMode (IN_PIN,  INPUT) ;
+
+  if (wiringPiISR (IN_PIN, INT_EDGE_FALLING, &myInterrupt) < 0)
+  {
+    fprintf (stderr, "Unable to setup ISR: %s\n", strerror (errno)) ;
+    return 1 ;
+  }
+
+  for (;;)
+  {
+    printf ("Waiting ... ") ; fflush (stdout) ;
+
+    while (myCounter == globalCounter)
+      delay (1000) ;
+
+    printf (" Done. counter: %6d: %6d\n",
+		globalCounter, myCounter - lastCounter) ;
+    lastCounter = myCounter ;
+    myCounter   = globalCounter ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/isr.c b/modules/catkin_ws/src/wiringPi/examples/isr.c
new file mode 100644
index 00000000..abc6aec9
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/isr.c
@@ -0,0 +1,110 @@
+/*
+ * isr.c:
+ *	Wait for Interrupt test program - ISR method
+ *
+ *	How to test:
+ *	  Use the SoC's pull-up and pull down resistors that are avalable
+ *	on input pins. So compile & run this program (via sudo), then
+ *	in another terminal:
+ *		gpio mode 0 up
+ *		gpio mode 0 down
+ *	at which point it should trigger an interrupt. Toggle the pin
+ *	up/down to generate more interrupts to test.
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <wiringPi.h>
+
+
+// globalCounter:
+//	Global variable to count interrupts
+//	Should be declared volatile to make sure the compiler doesn't cache it.
+
+static volatile int globalCounter [8] ;
+
+
+/*
+ * myInterrupt:
+ *********************************************************************************
+ */
+
+void myInterrupt0 (void) { ++globalCounter [0] ; }
+void myInterrupt1 (void) { ++globalCounter [1] ; }
+void myInterrupt2 (void) { ++globalCounter [2] ; }
+void myInterrupt3 (void) { ++globalCounter [3] ; }
+void myInterrupt4 (void) { ++globalCounter [4] ; }
+void myInterrupt5 (void) { ++globalCounter [5] ; }
+void myInterrupt6 (void) { ++globalCounter [6] ; }
+void myInterrupt7 (void) { ++globalCounter [7] ; }
+
+
+/*
+ *********************************************************************************
+ * main
+ *********************************************************************************
+ */
+
+int main (void)
+{
+  int gotOne, pin ;
+  int myCounter [8] ;
+
+  for (pin = 0 ; pin < 8 ; ++pin) 
+    globalCounter [pin] = myCounter [pin] = 0 ;
+
+  wiringPiSetup () ;
+
+  wiringPiISR (0, INT_EDGE_FALLING, &myInterrupt0) ;
+  wiringPiISR (1, INT_EDGE_FALLING, &myInterrupt1) ;
+  wiringPiISR (2, INT_EDGE_FALLING, &myInterrupt2) ;
+  wiringPiISR (3, INT_EDGE_FALLING, &myInterrupt3) ;
+  wiringPiISR (4, INT_EDGE_FALLING, &myInterrupt4) ;
+  wiringPiISR (5, INT_EDGE_FALLING, &myInterrupt5) ;
+  wiringPiISR (6, INT_EDGE_FALLING, &myInterrupt6) ;
+  wiringPiISR (7, INT_EDGE_FALLING, &myInterrupt7) ;
+
+  for (;;)
+  {
+    gotOne = 0 ;
+    printf ("Waiting ... ") ; fflush (stdout) ;
+
+    for (;;)
+    {
+      for (pin = 0 ; pin < 8 ; ++pin)
+      {
+	if (globalCounter [pin] != myCounter [pin])
+	{
+	  printf (" Int on pin %d: Counter: %5d\n", pin, globalCounter [pin]) ;
+	  myCounter [pin] = globalCounter [pin] ;
+	  ++gotOne ;
+	}
+      }
+      if (gotOne != 0)
+	break ;
+    }
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/lcd-adafruit.c b/modules/catkin_ws/src/wiringPi/examples/lcd-adafruit.c
new file mode 100644
index 00000000..47c9b9b2
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/lcd-adafruit.c
@@ -0,0 +1,347 @@
+/*
+ * lcd-adafruit.c:
+ *	Text-based LCD driver test code
+ *	This is designed to drive the Adafruit RGB LCD Plate
+ *	with the additional 5 buttons for the Raspberry Pi
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <time.h>
+
+#include <wiringPi.h>
+#include <mcp23017.h>
+#include <lcd.h>
+
+#ifndef	TRUE
+#  define	TRUE	(1==1)
+#  define	FALSE	(1==2)
+#endif
+
+
+// Defines for the Adafruit Pi LCD interface board
+
+#define	AF_BASE		100
+#define	AF_RED		(AF_BASE + 6)
+#define	AF_GREEN	(AF_BASE + 7)
+#define	AF_BLUE		(AF_BASE + 8)
+
+#define	AF_E		(AF_BASE + 13)
+#define	AF_RW		(AF_BASE + 14)
+#define	AF_RS		(AF_BASE + 15)
+
+#define	AF_DB4		(AF_BASE + 12)
+#define	AF_DB5		(AF_BASE + 11)
+#define	AF_DB6		(AF_BASE + 10)
+#define	AF_DB7		(AF_BASE +  9)
+
+#define	AF_SELECT	(AF_BASE +  0)
+#define	AF_RIGHT	(AF_BASE +  1)
+#define	AF_DOWN		(AF_BASE +  2)
+#define	AF_UP		(AF_BASE +  3)
+#define	AF_LEFT		(AF_BASE +  4)
+
+
+// User-Defined character test
+
+static unsigned char newChar [8] = 
+{
+  0b00100,
+  0b00100,
+  0b00000,
+  0b00100,
+  0b01110,
+  0b11011,
+  0b11011,
+  0b10001,
+} ;
+
+// Global lcd handle:
+
+static int lcdHandle ;
+
+/*
+ * usage:
+ *********************************************************************************
+ */
+
+int usage (const char *progName)
+{
+  fprintf (stderr, "Usage: %s colour\n", progName) ;
+  return EXIT_FAILURE ;
+}
+
+
+/*
+ * scrollMessage:
+ *********************************************************************************
+ */
+
+static const char *message =
+  "                    "
+  "Wiring Pi by Gordon Henderson. HTTP://WIRINGPI.COM/"
+  "                    " ;
+
+void scrollMessage (int line, int width)
+{
+  char buf [32] ;
+  static int position = 0 ;
+  static int timer = 0 ;
+
+  if (millis () < timer)
+    return ;
+
+  timer = millis () + 200 ;
+
+  strncpy (buf, &message [position], width) ;
+  buf [width] = 0 ;
+  lcdPosition (lcdHandle, 0, line) ;
+  lcdPuts (lcdHandle, buf) ;
+
+  if (++position == (strlen (message) - width))
+    position = 0 ;
+}
+
+
+/*
+ * setBacklightColour:
+ *	The colour outputs are inverted.
+ *********************************************************************************
+ */
+
+static void setBacklightColour (int colour)
+{
+  colour &= 7 ;
+
+  digitalWrite (AF_RED,   !(colour & 1)) ;
+  digitalWrite (AF_GREEN, !(colour & 2)) ;
+  digitalWrite (AF_BLUE,  !(colour & 4)) ;
+}
+
+
+/*
+ * adafruitLCDSetup:
+ *	Setup the Adafruit board by making sure the additional pins are
+ *	set to the correct modes, etc.
+ *********************************************************************************
+ */
+
+static void adafruitLCDSetup (int colour)
+{
+  int i ;
+
+//	Backlight LEDs
+
+  pinMode (AF_RED,   OUTPUT) ;
+  pinMode (AF_GREEN, OUTPUT) ;
+  pinMode (AF_BLUE,  OUTPUT) ;
+  setBacklightColour (colour) ;
+
+//	Input buttons
+
+  for (i = 0 ; i <= 4 ; ++i)
+  {
+    pinMode (AF_BASE + i, INPUT) ;
+    pullUpDnControl (AF_BASE + i, PUD_UP) ;	// Enable pull-ups, switches close to 0v
+  }
+
+// Control signals
+
+  pinMode (AF_RW, OUTPUT) ; digitalWrite (AF_RW, LOW) ;	// Not used with wiringPi - always in write mode
+
+// The other control pins are initialised with lcdInit ()
+
+  lcdHandle = lcdInit (2, 16, 4, AF_RS, AF_E, AF_DB4,AF_DB5,AF_DB6,AF_DB7, 0,0,0,0) ;
+
+  if (lcdHandle < 0)
+  {
+    fprintf (stderr, "lcdInit failed\n") ;
+    exit (EXIT_FAILURE) ;
+  }
+}
+
+
+/*
+ * waitForEnter:
+ *	On the Adafruit display, wait for the select button
+ *********************************************************************************
+ */
+
+static void waitForEnter (void)
+{
+  printf ("Press SELECT to continue: ") ; fflush (stdout) ;
+
+  while (digitalRead (AF_SELECT) == HIGH)	// Wait for push
+    delay (1) ;
+
+  while (digitalRead (AF_SELECT) == LOW)	// Wait for release
+    delay (1) ;
+
+  printf ("OK\n") ;
+}
+
+
+/*
+ * speedTest:
+ *	Test the update speed of the display
+ *********************************************************************************
+ */
+
+static void speedTest (void)
+{
+  unsigned int start, end, taken ;
+  int times ;
+
+  lcdClear (lcdHandle) ;
+  start = millis () ;
+  for (times = 0 ; times < 10 ; ++times)
+  {
+    lcdPuts (lcdHandle, "0123456789ABCDEF") ;
+    lcdPuts (lcdHandle, "0123456789ABCDEF") ;
+  }
+  end   = millis () ;
+  taken = (end - start) / 10;
+
+  lcdClear (lcdHandle) ;
+  lcdPosition (lcdHandle, 0, 0) ; lcdPrintf (lcdHandle, "Speed: %dmS", taken) ;
+  lcdPosition (lcdHandle, 0, 1) ; lcdPrintf (lcdHandle, "For full update") ;
+
+  waitForEnter () ;
+
+  lcdClear (lcdHandle) ;
+  lcdPosition (lcdHandle, 0, 0) ; lcdPrintf (lcdHandle, "Time: %dmS", taken / 32) ;
+  lcdPosition (lcdHandle, 0, 1) ; lcdPrintf (lcdHandle, "Per character") ;
+
+  waitForEnter () ;
+
+  lcdClear (lcdHandle) ;
+  lcdPosition (lcdHandle, 0, 0) ; lcdPrintf (lcdHandle, "%d cps...", 32000 / taken) ;
+
+  waitForEnter () ;
+}
+
+
+/*
+ * The works
+ *********************************************************************************
+ */
+
+int main (int argc, char *argv[])
+{
+  int colour ;
+  int cols = 16 ;
+  int waitForRelease = FALSE ;
+
+  struct tm *t ;
+  time_t tim ;
+
+  char buf [32] ;
+
+  if (argc != 2)
+    return usage (argv [0]) ;
+
+  printf ("Raspberry Pi Adafruit LCD test\n") ;
+  printf ("==============================\n") ;
+
+  colour = atoi (argv [1]) ;
+
+  wiringPiSetupSys () ;
+  mcp23017Setup (AF_BASE, 0x20) ;
+
+  adafruitLCDSetup (colour) ;
+
+  lcdPosition (lcdHandle, 0, 0) ; lcdPuts (lcdHandle, "Gordon Henderson") ;
+  lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, "  wiringpi.com  ") ;
+
+  waitForEnter () ;
+
+  lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, "Adafruit RGB LCD") ;
+
+  waitForEnter () ;
+
+  lcdCharDef  (lcdHandle, 2, newChar) ;
+
+  lcdClear    (lcdHandle) ;
+  lcdPosition (lcdHandle, 0, 0) ;
+  lcdPuts     (lcdHandle, "User Char: ") ;
+  lcdPutchar  (lcdHandle, 2) ;
+
+  lcdCursor      (lcdHandle, TRUE) ;
+  lcdCursorBlink (lcdHandle, TRUE) ;
+
+  waitForEnter () ;
+
+  lcdCursor      (lcdHandle, FALSE) ;
+  lcdCursorBlink (lcdHandle, FALSE) ;
+
+  speedTest () ;
+
+  lcdClear (lcdHandle) ;
+
+  for (;;)
+  {
+    scrollMessage (0, cols) ;
+    
+    tim = time (NULL) ;
+    t = localtime (&tim) ;
+
+    sprintf (buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec) ;
+
+    lcdPosition (lcdHandle, (cols - 8) / 2, 1) ;
+    lcdPuts     (lcdHandle, buf) ;
+
+// Check buttons to cycle colour
+
+// If Up or Down are still pushed, then skip
+
+    if (waitForRelease)
+    {
+      if ((digitalRead (AF_UP) == LOW) || (digitalRead (AF_DOWN) == LOW))
+	continue ;
+      else
+	waitForRelease = FALSE ;
+    }
+
+    if (digitalRead (AF_UP) == LOW)	// Pushed
+    {
+      colour = colour + 1 ;
+      if (colour == 8)
+	colour = 0 ;
+      setBacklightColour (colour) ;
+      waitForRelease = TRUE ;
+    }
+
+    if (digitalRead (AF_DOWN) == LOW)	// Pushed
+    {
+      colour = colour - 1 ;
+      if (colour == -1)
+	colour = 7 ;
+      setBacklightColour (colour) ;
+      waitForRelease = TRUE ;
+    }
+
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/lcd.c b/modules/catkin_ws/src/wiringPi/examples/lcd.c
new file mode 100644
index 00000000..510f5620
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/lcd.c
@@ -0,0 +1,286 @@
+/*
+ * lcd.c:
+ *	Text-based LCD driver.
+ *	This is designed to drive the parallel interface LCD drivers
+ *	based in the Hitachi HD44780U controller and compatables.
+ *
+ *	This test program assumes the following:
+ *
+ *	8-bit displays:
+ *		GPIO 0-7 is connected to display data pins 0-7.
+ *		GPIO 11 is the RS pin.
+ *		GPIO 10 is the Strobe/E pin.
+ *
+ *	For 4-bit interface:
+ *		GPIO 4-7 is connected to display data pins 4-7.
+ *		GPIO 11 is the RS pin.
+ *		GPIO 10 is the Strobe/E pin.
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include <unistd.h>
+#include <string.h>
+#include <time.h>
+
+#include <wiringPi.h>
+#include <lcd.h>
+
+#ifndef	TRUE
+#  define	TRUE	(1==1)
+#  define	FALSE	(1==2)
+#endif
+
+static unsigned char newChar [8] = 
+{
+  0b11111,
+  0b10001,
+  0b10001,
+  0b10101,
+  0b11111,
+  0b10001,
+  0b10001,
+  0b11111,
+} ;
+
+
+// Global lcd handle:
+
+static int lcdHandle ;
+
+/*
+ * usage:
+ *********************************************************************************
+ */
+
+int usage (const char *progName)
+{
+  fprintf (stderr, "Usage: %s bits cols rows\n", progName) ;
+  return EXIT_FAILURE ;
+}
+
+
+/*
+ * scrollMessage:
+ *********************************************************************************
+ */
+
+static const char *message =
+  "                    "
+  "Wiring Pi by Gordon Henderson. HTTP://WIRINGPI.COM/"
+  "                    " ;
+
+void scrollMessage (int line, int width)
+{
+  char buf [32] ;
+  static int position = 0 ;
+  static int timer = 0 ;
+
+  if (millis () < timer)
+    return ;
+
+  timer = millis () + 200 ;
+
+  strncpy (buf, &message [position], width) ;
+  buf [width] = 0 ;
+  lcdPosition (lcdHandle, 0, line) ;
+  lcdPuts     (lcdHandle, buf) ;
+
+  if (++position == (strlen (message) - width))
+    position = 0 ;
+}
+
+
+/*
+ * pingPong:
+ *	Bounce a character - only on 4-line displays
+ *********************************************************************************
+ */
+
+static void pingPong (int lcd, int cols)
+{
+  static int position = 0 ;
+  static int dir      = 0 ;
+
+  if (dir == 0)		// Setup
+  {
+    dir = 1 ;
+    lcdPosition (lcdHandle, 0, 3) ;
+    lcdPutchar  (lcdHandle, '*') ;
+    return ;
+  }
+
+  lcdPosition (lcdHandle, position, 3) ;
+  lcdPutchar (lcdHandle, ' ') ;
+  position += dir ;
+
+  if (position == cols)
+  {
+    dir = -1 ;
+    --position ;
+  }
+  
+  if (position < 0)
+  {
+    dir = 1 ;
+    ++position ;
+  }
+
+  lcdPosition (lcdHandle, position, 3) ;
+  lcdPutchar  (lcdHandle, '#') ;
+}
+
+
+/*
+ * waitForEnter:
+ *********************************************************************************
+ */
+
+static void waitForEnter (void)
+{
+  printf ("Press ENTER to continue: ") ;
+  (void)fgetc (stdin) ;
+}
+
+
+/*
+ * The works
+ *********************************************************************************
+ */
+
+int main (int argc, char *argv[])
+{
+  int i ;
+  int lcd ;
+  int bits, rows, cols ;
+
+  struct tm *t ;
+  time_t tim ;
+
+  char buf [32] ;
+
+  if (argc != 4)
+    return usage (argv [0]) ;
+
+  printf ("Raspberry Pi LCD test\n") ;
+  printf ("=====================\n") ;
+
+  bits = atoi (argv [1]) ;
+  cols = atoi (argv [2]) ;
+  rows = atoi (argv [3]) ;
+
+  if (!((rows == 1) || (rows == 2) || (rows == 4)))
+  {
+    fprintf (stderr, "%s: rows must be 1, 2 or 4\n", argv [0]) ;
+    return EXIT_FAILURE ;
+  }
+
+  if (!((cols == 16) || (cols == 20)))
+  {
+    fprintf (stderr, "%s: cols must be 16 or 20\n", argv [0]) ;
+    return EXIT_FAILURE ;
+  }
+
+  wiringPiSetup () ;
+
+  if (bits == 4)
+    lcdHandle = lcdInit (rows, cols, 4, 11,10, 4,5,6,7,0,0,0,0) ;
+  else
+    lcdHandle = lcdInit (rows, cols, 8, 11,10, 0,1,2,3,4,5,6,7) ;
+
+  if (lcdHandle < 0)
+  {
+    fprintf (stderr, "%s: lcdInit failed\n", argv [0]) ;
+    return -1 ;
+  }
+
+  lcdPosition (lcdHandle, 0, 0) ; lcdPuts (lcdHandle, "Gordon Henderson") ;
+  lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, "  wiringpi.com  ") ;
+
+  waitForEnter () ;
+
+  if (rows > 1)
+  {
+    lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, "  wiringpi.com  ") ;
+
+    if (rows == 4)
+    {
+      lcdPosition (lcdHandle, 0, 2) ;
+      for (i = 0 ; i < ((cols - 1) / 2) ; ++i)
+        lcdPuts (lcdHandle, "=-") ;
+      lcdPuts (lcdHandle, "=3") ;
+
+      lcdPosition (lcdHandle, 0, 3) ;
+      for (i = 0 ; i < ((cols - 1) / 2) ; ++i)
+        lcdPuts (lcdHandle, "-=") ;
+      lcdPuts (lcdHandle, "-4") ;
+    }
+  }
+
+  waitForEnter () ;
+
+  lcdCharDef  (lcdHandle, 2, newChar) ;
+
+  lcdClear    (lcdHandle) ;
+  lcdPosition (lcdHandle, 0, 0) ;
+  lcdPuts     (lcdHandle, "User Char: ") ;
+  lcdPutchar  (lcdHandle, 2) ;
+
+  lcdCursor      (lcdHandle, TRUE) ;
+  lcdCursorBlink (lcdHandle, TRUE) ;
+
+  waitForEnter () ;
+
+  lcdCursor      (lcdHandle, FALSE) ;
+  lcdCursorBlink (lcdHandle, FALSE) ;
+  lcdClear       (lcdHandle) ;
+
+  for (;;)
+  {
+    scrollMessage (0, cols) ;
+    
+    if (rows == 1)
+      continue ;
+
+    tim = time (NULL) ;
+    t = localtime (&tim) ;
+
+    sprintf (buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec) ;
+
+    lcdPosition (lcdHandle, (cols - 8) / 2, 1) ;
+    lcdPuts     (lcdHandle, buf) ;
+
+    if (rows == 2)
+      continue ;
+
+    sprintf (buf, "%02d/%02d/%04d", t->tm_mday, t->tm_mon + 1, t->tm_year+1900) ;
+
+    lcdPosition (lcdHandle, (cols - 10) / 2, 2) ;
+    lcdPuts     (lcdHandle, buf) ;
+
+    pingPong (lcd, cols) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/lowPower.c b/modules/catkin_ws/src/wiringPi/examples/lowPower.c
new file mode 100644
index 00000000..e901e7fa
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/lowPower.c
@@ -0,0 +1,68 @@
+/*
+ * lowPower.c:
+ *	Check the Pi's LOW-Power signal.
+ *
+ *	This is a demonstration program that could be turned into some sort
+ *	of logger via e.g. syslog - however it's also probably something
+ *	that might be better handled by a future kernel - who knows.
+ *
+ * Copyright (c) 2014 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <time.h>
+#include <wiringPi.h>
+
+
+#define	LOW_POWER	35
+
+/*
+ * lowPower:
+ *	This is an ISR that waits for the low-power signal going low and
+ *	prints the result.
+ *********************************************************************************
+ */
+
+void lowPower (void)
+{
+  time_t t ;
+
+  time (&t) ;
+  printf ("%s: LOW POWER DETECTED\n", ctime (&t)) ;
+}
+
+
+/*
+ *********************************************************************************
+ * main
+ *********************************************************************************
+ */
+
+int main (void)
+{
+  wiringPiSetupGpio () ;	// GPIO mode as it's an internal pin
+
+  wiringPiISR (LOW_POWER, INT_EDGE_FALLING, &lowPower) ;
+
+  for (;;)
+    delay (1000) ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/nes.c b/modules/catkin_ws/src/wiringPi/examples/nes.c
new file mode 100644
index 00000000..31908e8a
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/nes.c
@@ -0,0 +1,67 @@
+/*
+ * nes.c:
+ *	Test program for an old NES controller connected to the Pi.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+#include <wiringPi.h>
+#include <piNes.h>
+
+#define	BLANK	"|      "
+
+int main ()
+{
+  int joystick ;
+  unsigned int buttons ;
+
+  if (wiringPiSetup () == -1)
+  {
+    fprintf (stdout, "oops: %s\n", strerror (errno)) ;
+    return 1 ;
+  }
+
+  if ((joystick = setupNesJoystick (2, 1, 0)) == -1)
+  {
+    fprintf (stdout, "Unable to setup joystick\n") ;
+    return 1 ;
+  }
+
+  for (;;)
+  {
+    buttons = readNesJoystick (joystick) ;
+
+    if ((buttons & NES_UP)     != 0) printf ("|  UP  " ) ; else printf (BLANK) ;
+    if ((buttons & NES_DOWN)   != 0) printf ("| DOWN " ) ; else printf (BLANK) ;
+    if ((buttons & NES_LEFT)   != 0) printf ("| LEFT " ) ; else printf (BLANK) ;
+    if ((buttons & NES_RIGHT)  != 0) printf ("|RIGHT " ) ; else printf (BLANK) ;
+    if ((buttons & NES_SELECT) != 0) printf ("|SELECT" ) ; else printf (BLANK) ;
+    if ((buttons & NES_START)  != 0) printf ("|START " ) ; else printf (BLANK) ;
+    if ((buttons & NES_A)      != 0) printf ("|  A   " ) ; else printf (BLANK) ;
+    if ((buttons & NES_B)      != 0) printf ("|  B   " ) ; else printf (BLANK) ;
+    printf ("|\n") ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/okLed.c b/modules/catkin_ws/src/wiringPi/examples/okLed.c
new file mode 100644
index 00000000..930f266b
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/okLed.c
@@ -0,0 +1,82 @@
+/*
+ * okLed.c:
+ *      Make the OK LED on the Pi Pulsate...
+ *
+ * Originally posted to the Raspberry Pi forums:
+ *  http://www.raspberrypi.org/phpBB3/viewtopic.php?p=162581#p162581
+ *
+ * Compile this and store it somewhere, then kick it off at boot time
+ *    e.g. by putting it in /etc/rc.local and running it in the
+ *    background &
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <math.h>
+
+#include <wiringPi.h>
+#include <softPwm.h>
+
+// The OK/Act LED is connected to BCM_GPIO pin 16
+
+#define OK_LED  16
+
+int main ()
+{
+  int fd, i ;
+
+  wiringPiSetupGpio () ;
+
+// Change the trigger on the OK/Act LED to "none"
+
+  if ((fd = open ("/sys/class/leds/led0/trigger", O_RDWR)) < 0)
+  {
+    fprintf (stderr, "Unable to change LED trigger: %s\n", strerror (errno)) ;
+    return 1 ;
+  }
+  write (fd, "none\n", 5) ;
+  close (fd) ;
+
+  softPwmCreate (OK_LED, 0, 100) ;
+
+  for (;;)
+  {
+    for (i = 0 ; i <= 100 ; ++i)
+    {
+      softPwmWrite (OK_LED, i) ;
+      delay (10) ;
+    }
+    delay (50) ;
+
+    for (i = 100 ; i >= 0 ; --i)
+    {
+      softPwmWrite (OK_LED, i) ;
+      delay (10) ;
+    }
+    delay (10) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/pwm.c b/modules/catkin_ws/src/wiringPi/examples/pwm.c
new file mode 100644
index 00000000..816c8322
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/pwm.c
@@ -0,0 +1,58 @@
+/*
+ * pwm.c:
+ *	This tests the hardware PWM channel.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+int main (void)
+{
+  int bright ;
+
+  printf ("Raspberry Pi wiringPi PWM test program\n") ;
+
+  if (wiringPiSetup () == -1)
+    exit (1) ;
+
+  pinMode (1, PWM_OUTPUT) ;
+
+  for (;;)
+  {
+    for (bright = 0 ; bright < 1024 ; ++bright)
+    {
+      pwmWrite (1, bright) ;
+      delay (1) ;
+    }
+
+    for (bright = 1023 ; bright >= 0 ; --bright)
+    {
+      pwmWrite (1, bright) ;
+      delay (1) ;
+    }
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/q2w/Makefile b/modules/catkin_ws/src/wiringPi/examples/q2w/Makefile
new file mode 100644
index 00000000..150c825f
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/q2w/Makefile
@@ -0,0 +1,81 @@
+#
+# Makefile:
+#	wiringPi - Wiring Compatable library for the Raspberry Pi
+#	https://projects.drogon.net/wiring-pi
+#
+#	Copyright (c) 2012-2013 Gordon Henderson
+#################################################################################
+# This file is part of wiringPi:
+#	Wiring Compatable library for the Raspberry Pi
+#
+#    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 <http://www.gnu.org/licenses/>.
+#################################################################################
+
+
+#DEBUG	= -g -O0
+DEBUG	= -O3
+CC	= gcc
+INCLUDE	= -I/usr/local/include
+CFLAGS	= $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
+
+LDFLAGS	= -L/usr/local/lib
+LDLIBS    = -lwiringPi -lwiringPiDev -lpthread -lm
+
+###############################################################################
+
+SRC	=	blink.c button.c blink-io.c volts.c bright.c
+
+OBJ	=	$(SRC:.c=.o)
+
+BINS	=	$(SRC:.c=)
+
+all:	$(BINS)
+
+blink:	blink.o
+	@echo [link]
+	@$(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS)
+
+blink-io:	blink-io.o
+	@echo [link]
+	@$(CC) -o $@ blink-io.o $(LDFLAGS) $(LDLIBS)
+
+button:	button.o
+	@echo [link]
+	@$(CC) -o $@ button.o $(LDFLAGS) $(LDLIBS)
+
+volts:	volts.o
+	@echo [link]
+	@$(CC) -o $@ volts.o $(LDFLAGS) $(LDLIBS)
+
+bright:	bright.o
+	@echo [link]
+	@$(CC) -o $@ bright.o $(LDFLAGS) $(LDLIBS)
+
+
+.c.o:
+	@echo [CC] $<
+	@$(CC) -c $(CFLAGS) $< -o $@
+
+clean:
+	@echo "[Clean]"
+	@rm -f $(OBJ) *~ core tags $(BINS)
+
+tags:	$(SRC)
+	@echo [ctags]
+	@ctags $(SRC)
+
+depend:
+	makedepend -Y $(SRC)
+
+# DO NOT DELETE
diff --git a/modules/catkin_ws/src/wiringPi/examples/q2w/binary.c b/modules/catkin_ws/src/wiringPi/examples/q2w/binary.c
new file mode 100644
index 00000000..3c987c6a
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/q2w/binary.c
@@ -0,0 +1,79 @@
+/*
+ * binary.c:
+ *      Using the Quick 2 wire 16-bit GPIO expansion board to output
+ *	a binary counter.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+#include <mcp23017.h>
+
+#define	Q2W_BASE	100
+
+int main (void)
+{
+  int i, bit ;
+
+// Enable the on-goard GPIO
+
+  wiringPiSetup () ;
+
+// Add in the mcp23017 on the q2w board
+
+  mcp23017Setup (Q2W_BASE, 0x20) ;
+
+  printf ("Raspberry Pi - quite2Wire MCP23017 Test\n") ;
+
+// On-board button Input:
+
+  pinMode (0, INPUT) ;
+
+// First 10 pins on q2w board as outputs:
+
+  for (i = 0 ; i < 10 ; ++i)
+    pinMode (Q2W_BASE + i, OUTPUT) ;
+
+// Last pin as an input with the internal pull-up enabled
+
+  pinMode         (Q2W_BASE + 15, INPUT) ;
+  pullUpDnControl (Q2W_BASE + 15, PUD_UP) ;
+
+// Loop, outputting a binary number,
+//	Go faster with the button, or stop if the
+//	on-board button is pushed
+
+  for (;;)
+  {
+    for (i = 0 ; i < 1024 ; ++i)
+    {
+      for (bit = 0 ; bit < 10 ; ++bit)
+        digitalWrite (Q2W_BASE + bit, i & (1 << bit)) ;
+
+      while (digitalRead (0) == HIGH)		// While pushed
+	delay (1) ;
+
+      if (digitalRead (Q2W_BASE + 15) == HIGH)	// Not Pushed
+	delay (100) ;
+    }
+  }
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/q2w/blink-io.c b/modules/catkin_ws/src/wiringPi/examples/q2w/blink-io.c
new file mode 100644
index 00000000..4dd42765
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/q2w/blink-io.c
@@ -0,0 +1,61 @@
+/*
+ * blink-io.c:
+ *	Simple "blink" test for the Quick2Wire 16-pin IO board.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+#include <mcp23017.h>
+
+#define	LED		1
+#define	Q2W_BASE	100
+
+int main (void)
+{
+
+// Enable the on-goard GPIO
+
+  wiringPiSetup () ;
+
+// Add in the mcp23017 on the q2w board
+
+  mcp23017Setup (Q2W_BASE, 0x20) ;
+
+  printf ("Raspberry Pi - Quick2Wire MCP23017 Blink Test\n") ;
+
+// Blink the on-board LED as well as one on the mcp23017
+
+  pinMode (LED, OUTPUT) ;
+  pinMode (Q2W_BASE + 0, OUTPUT) ;
+
+  for (;;)
+  {
+    digitalWrite (LED,          HIGH) ;
+    digitalWrite (Q2W_BASE + 0, HIGH) ;
+    delay (500) ;
+    digitalWrite (LED,          LOW) ;
+    digitalWrite (Q2W_BASE + 0, LOW) ;
+    delay (500) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/q2w/blink.c b/modules/catkin_ws/src/wiringPi/examples/q2w/blink.c
new file mode 100644
index 00000000..62b694a7
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/q2w/blink.c
@@ -0,0 +1,50 @@
+/*
+ * blink.c:
+ *	Simple "blink" test for the Quick2Wire interface board.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+
+#define	LED	1
+
+int main (void)
+{
+
+// Enable the on-goard GPIO
+
+  wiringPiSetup () ;
+
+  printf ("Raspberry Pi - Quick2Wire Mainboard LED Blink Test\n") ;
+
+  pinMode (LED, OUTPUT) ;
+
+  for (;;)
+  {
+    digitalWrite (LED, HIGH) ;
+    delay (500) ;
+    digitalWrite (LED, LOW) ;
+    delay (500) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/q2w/blink.sh b/modules/catkin_ws/src/wiringPi/examples/q2w/blink.sh
new file mode 100755
index 00000000..2dee6c73
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/q2w/blink.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# blink.sh:
+#	Standard "blink" program in wiringPi. Blinks an LED connected
+#	to the LED on the Quick2Wire board
+#
+# Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+#######################################################################
+# 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 <http://www.gnu.org/licenses/>.
+#######################################################################
+
+# LED Pin - wiringPi pin 1 is BCM_GPIO 18.
+
+LED=1
+
+gpio mode $LED out
+
+while true; do
+  gpio write $LED 1
+  sleep 0.5
+  gpio write $LED 0
+  sleep 0.5
+done
diff --git a/modules/catkin_ws/src/wiringPi/examples/q2w/bright.c b/modules/catkin_ws/src/wiringPi/examples/q2w/bright.c
new file mode 100644
index 00000000..23188341
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/q2w/bright.c
@@ -0,0 +1,59 @@
+/*
+ * bright.c:
+ *	Vary the Q2W LED brightness with the analog card
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+#include <pcf8591.h>
+
+#define	LED		  1
+#define Q2W_ABASE       120
+
+int main (void)
+{
+  int value ;
+
+// Enable the on-goard GPIO
+
+  wiringPiSetup () ;
+
+// Add in the pcf8591 on the q2w board
+
+  pcf8591Setup (Q2W_ABASE, 0x48) ;
+
+  printf ("Raspberry Pi - Quick2Wire Analog Test\n") ;
+
+// Setup the LED
+
+  pinMode  (LED, PWM_OUTPUT) ;
+  pwmWrite (LED, 0) ;
+
+  for (;;)
+  {
+    value = analogRead  (Q2W_ABASE + 0) ;
+    pwmWrite (LED, value * 4) ;
+    delay (10) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/q2w/button.c b/modules/catkin_ws/src/wiringPi/examples/q2w/button.c
new file mode 100644
index 00000000..1781f02f
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/q2w/button.c
@@ -0,0 +1,63 @@
+/*
+ * button.c:
+ *	Simple button test for the Quick2Wire interface board.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+
+#define	BUTTON	0
+#define	LED1	1
+#define	LED2	7
+
+int main (void)
+{
+
+// Enable the on-goard GPIO
+
+  wiringPiSetup () ;
+
+  printf ("Raspberry Pi - Quick2Wire Mainboard Button & LED Test\n") ;
+
+  pinMode (BUTTON, INPUT) ;
+  pinMode (LED1, OUTPUT) ;
+  pinMode (LED2, OUTPUT) ;
+
+  digitalWrite (LED1, HIGH) ;		// On-board LED on
+  digitalWrite (LED2, LOW) ;		// 2nd LED off
+
+  for (;;)
+  {
+    if (digitalRead (BUTTON) == HIGH)	// Swap LED states
+    {
+      digitalWrite (LED1, LOW) ;
+      digitalWrite (LED2, HIGH) ;
+      while (digitalRead (BUTTON) == HIGH)
+	delay (1) ;
+      digitalWrite (LED1, HIGH) ;
+      digitalWrite (LED2, LOW) ;
+    }
+    delay (1) ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/q2w/volts.c b/modules/catkin_ws/src/wiringPi/examples/q2w/volts.c
new file mode 100644
index 00000000..e0910933
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/q2w/volts.c
@@ -0,0 +1,62 @@
+/*
+ * volts.c:
+ *	Read in all 4 analogs on the Q2W analog board.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+#include <pcf8591.h>
+
+#define	LED		1
+#define Q2W_ABASE       120
+
+int main (void)
+{
+  int value, pin ;
+
+// Enable the on-goard GPIO
+
+  wiringPiSetup () ;
+
+  pinMode (LED, OUTPUT) ;	// On-board LED
+
+// Add in the pcf8591 on the q2w board
+
+  pcf8591Setup (Q2W_ABASE, 0x48) ;
+
+  printf ("Raspberry Pi - Quick2Wire Voltmeter\n") ;
+
+  for (;;)
+  {
+    for (pin = 0 ; pin < 4 ; ++pin)
+    {
+      value = analogRead  (Q2W_ABASE + pin) ;
+      printf ("  %5.2f", (double)value * 3.3 / 255.0) ;
+    }
+    printf ("\r") ; fflush (stdout) ;
+
+    delay (100) ;
+    digitalWrite (LED, !digitalRead (LED)) ;	// Flicker the LED
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/rht03.c b/modules/catkin_ws/src/wiringPi/examples/rht03.c
new file mode 100644
index 00000000..566e954c
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/rht03.c
@@ -0,0 +1,69 @@
+/*
+ * rht03.c:
+ *	Driver for the MaxDetect series sensors
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+
+#include <wiringPi.h>
+#include <maxdetect.h>
+
+#define	RHT03_PIN	0
+
+/*
+ ***********************************************************************
+ * The main program
+ ***********************************************************************
+ */
+
+int main (void)
+{
+  int temp, rh ;
+  int newTemp, newRh ;
+
+  temp = rh = newTemp = newRh = 0 ;
+
+  wiringPiSetup () ;
+  piHiPri       (55) ;
+
+  for (;;)
+  {
+    delay (100) ;
+
+    if (!readRHT03 (RHT03_PIN, &newTemp, &newRh))
+      continue ;
+
+    if ((temp != newTemp) || (rh != newRh))
+    {
+      temp = newTemp ;
+      rh   = newRh ;
+      if ((temp & 0x8000) != 0)	// Negative
+      {
+	temp &= 0x7FFF ;
+	temp = -temp ;
+      }
+      printf ("Temp: %5.1f, RH: %5.1f%%\n", temp / 10.0, rh / 10.0) ;
+    }
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/serialRead.c b/modules/catkin_ws/src/wiringPi/examples/serialRead.c
new file mode 100644
index 00000000..9ee11ac2
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/serialRead.c
@@ -0,0 +1,48 @@
+/*
+ * serial.c:
+ *	Example program to read bytes from the Serial line
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <wiringSerial.h>
+
+int main ()
+{
+  int fd ;
+
+  if ((fd = serialOpen ("/dev/ttyAMA0", 115200)) < 0)
+  {
+    fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;
+    return 1 ;
+  }
+
+// Loop, getting and printing characters
+
+  for (;;)
+  {
+    putchar (serialGetchar (fd)) ;
+    fflush (stdout) ;
+  }
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/serialTest.c b/modules/catkin_ws/src/wiringPi/examples/serialTest.c
new file mode 100644
index 00000000..0d6da5f0
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/serialTest.c
@@ -0,0 +1,75 @@
+/*
+ * serialTest.c:
+ *	Very simple program to test the serial port. Expects
+ *	the port to be looped back to itself
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <wiringPi.h>
+#include <wiringSerial.h>
+
+int main ()
+{
+  int fd ;
+  int count ;
+  unsigned int nextTime ;
+
+  if ((fd = serialOpen ("/dev/ttyAMA0", 115200)) < 0)
+  {
+    fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;
+    return 1 ;
+  }
+
+  if (wiringPiSetup () == -1)
+  {
+    fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ;
+    return 1 ;
+  }
+
+  nextTime = millis () + 300 ;
+
+  for (count = 0 ; count < 256 ; )
+  {
+    if (millis () > nextTime)
+    {
+      printf ("\nOut: %3d: ", count) ;
+      fflush (stdout) ;
+      serialPutchar (fd, count) ;
+      nextTime += 300 ;
+      ++count ;
+    }
+
+    delay (3) ;
+
+    while (serialDataAvail (fd))
+    {
+      printf (" -> %3d", serialGetchar (fd)) ;
+      fflush (stdout) ;
+    }
+  }
+
+  printf ("\n") ;
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/servo.c b/modules/catkin_ws/src/wiringPi/examples/servo.c
new file mode 100644
index 00000000..aa1ab052
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/servo.c
@@ -0,0 +1,57 @@
+/*
+ * servo.c:
+ *	Test of the softServo code.
+ *	Do not use this code - use the servoBlaster kernel module instead
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+#include <wiringPi.h>
+#include <softServo.h>
+
+int main ()
+{
+  if (wiringPiSetup () == -1)
+  {
+    fprintf (stdout, "oops: %s\n", strerror (errno)) ;
+    return 1 ;
+  }
+
+  softServoSetup (0, 1, 2, 3, 4, 5, 6, 7) ;
+
+  softServoWrite (0,  0) ;
+/*
+  softServoWrite (1, 1000) ;
+  softServoWrite (2, 1100) ;
+  softServoWrite (3, 1200) ;
+  softServoWrite (4, 1300) ;
+  softServoWrite (5, 1400) ;
+  softServoWrite (6, 1500) ;
+  softServoWrite (7, 2200) ;
+*/
+
+  for (;;)
+    delay (10) ;
+
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/softPwm.c b/modules/catkin_ws/src/wiringPi/examples/softPwm.c
new file mode 100644
index 00000000..11f7ad0a
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/softPwm.c
@@ -0,0 +1,89 @@
+/*
+ * softPwm.c:
+ *	Test of the software PWM driver. Needs 8 LEDs connected
+ *	to the Pi - e.g. Ladder board.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+#include <wiringPi.h>
+#include <softPwm.h>
+
+#define RANGE		100
+#define	NUM_LEDS	  8
+
+int ledMap [NUM_LEDS] = { 0, 1, 2, 3, 4, 5, 6, 7 } ;
+
+int values [NUM_LEDS] = { 0, 25, 50, 75, 100, 75, 50, 25 } ;
+
+int main ()
+{
+  int i, j ;
+  char buf [80] ;
+
+  wiringPiSetup ()  ;
+
+  for (i = 0 ; i < NUM_LEDS ; ++i)
+  {
+    softPwmCreate (ledMap [i], 0, RANGE) ;
+    printf ("%3d, %3d, %3d\n", i, ledMap [i], values [i]) ;
+  }
+
+  fgets (buf, 80, stdin) ;
+
+// Bring all up one by one:
+
+  for (i = 0 ; i < NUM_LEDS ; ++i)
+    for (j = 0 ; j <= 100 ; ++j)
+    {
+      softPwmWrite (ledMap [i], j) ;
+      delay (10) ;
+    }
+
+  fgets (buf, 80, stdin) ;
+
+// All Down
+
+  for (i = 100 ; i > 0 ; --i)
+  {
+    for (j = 0 ; j < NUM_LEDS ; ++j)
+      softPwmWrite (ledMap [j], i) ;
+    delay (10) ;
+  }
+
+  fgets (buf, 80, stdin) ;
+
+  for (;;)
+  {
+    for (i = 0 ; i < NUM_LEDS ; ++i)
+      softPwmWrite (ledMap [i], values [i]) ;
+
+    delay (50) ;
+
+    i = values [0] ;
+    for (j = 0 ; j < NUM_LEDS - 1 ; ++j)
+      values [j] = values [j + 1] ;
+    values [NUM_LEDS - 1] = i ;
+  }
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/softTone.c b/modules/catkin_ws/src/wiringPi/examples/softTone.c
new file mode 100644
index 00000000..2f46783e
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/softTone.c
@@ -0,0 +1,54 @@
+/*
+ * softTone.c:
+ *	Test of the softTone module in wiringPi
+ *	Plays a scale out on pin 3 - connect pizeo disc to pin 3 & 0v
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+#include <wiringPi.h>
+#include <softTone.h>
+
+#define	PIN	3
+
+int scale [8] = { 262, 294, 330, 349, 392, 440, 494, 525 } ;
+
+int main ()
+{
+  int i ;
+
+  wiringPiSetup () ;
+
+  softToneCreate (PIN) ;
+
+  for (;;)
+  {
+    for (i = 0 ; i < 8 ; ++i)
+    {
+      printf ("%3d\n", i) ;
+      softToneWrite (PIN, scale [i]) ;
+      delay (500) ;
+    }
+  }
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/speed.c b/modules/catkin_ws/src/wiringPi/examples/speed.c
new file mode 100644
index 00000000..0a42b362
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/speed.c
@@ -0,0 +1,95 @@
+/*
+ * speed.c:
+ *	Simple program to measure the speed of the various GPIO
+ *	access mechanisms.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#define	FAST_COUNT	10000000
+#define	SLOW_COUNT	 1000000
+#define	PASSES		       5
+
+void speedTest (int pin, int maxCount)
+{
+  int count, sum, perSec, i ;
+  unsigned int start, end ;
+
+  sum = 0 ;
+
+  for (i = 0 ; i < PASSES ; ++i)
+  {
+    start = millis () ;
+    for (count = 0 ; count < maxCount ; ++count)
+      digitalWrite (pin, 1) ;
+    end = millis () ;
+    printf (" %6d", end - start) ;
+    fflush (stdout) ;
+    sum += (end - start) ;
+  }
+
+  digitalWrite (pin, 0) ;
+  printf (". Av: %6dmS", sum / PASSES) ;
+  perSec = (int)(double)maxCount / (double)((double)sum / (double)PASSES) * 1000.0 ;
+  printf (": %7d/sec\n", perSec) ;
+}
+
+
+int main (void)
+{
+  printf ("Raspberry Pi wiringPi GPIO speed test program\n") ;
+  printf ("=============================================\n") ;
+
+// Start the standard way
+
+  printf ("\nNative wiringPi method: (%8d iterations)\n", FAST_COUNT) ;
+  wiringPiSetup () ;
+  pinMode (0, OUTPUT) ;
+  speedTest (0, FAST_COUNT) ;
+
+// GPIO
+
+  printf ("\nNative GPIO method: (%8d iterations)\n", FAST_COUNT) ;
+  wiringPiSetupGpio () ;
+  pinMode (17, OUTPUT) ;
+  speedTest (17, FAST_COUNT) ;
+
+// Phys
+
+  printf ("\nPhysical pin GPIO method: (%8d iterations)\n", FAST_COUNT) ;
+  wiringPiSetupPhys () ;
+  pinMode (11, OUTPUT) ;
+  speedTest (11, FAST_COUNT) ;
+
+// Switch to SYS mode:
+
+  system ("/usr/local/bin/gpio export 17 out") ;
+  printf ("\n/sys/class/gpio method: (%8d iterations)\n", SLOW_COUNT) ;
+  wiringPiSetupSys () ;
+  speedTest (17, SLOW_COUNT) ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/spiSpeed.c b/modules/catkin_ws/src/wiringPi/examples/spiSpeed.c
new file mode 100644
index 00000000..0208f0a2
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/spiSpeed.c
@@ -0,0 +1,118 @@
+/*
+ * spiSpeed.c:
+ *	Code to measure the SPI speed/latency.
+ *	Copyright (c) 2014 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdint.h>
+#include <string.h>
+#include <errno.h>
+//#include <fcntl.h>
+//#include <sys/ioctl.h>
+//#include <linux/spi/spidev.h>
+
+#include <wiringPi.h>
+#include <wiringPiSPI.h>
+
+#define	TRUE	(1==1)
+#define	FALSE	(!TRUE)
+
+#define	SPI_CHAN		0
+#define	NUM_TIMES		100
+#define	MAX_SIZE		(1024*1024)
+
+static int myFd ;
+
+
+void spiSetup (int speed)
+{
+  if ((myFd = wiringPiSPISetup (SPI_CHAN, speed)) < 0)
+  {
+    fprintf (stderr, "Can't open the SPI bus: %s\n", strerror (errno)) ;
+    exit (EXIT_FAILURE) ;
+  }
+}
+
+
+int main (void)
+{
+  int speed, times, size ;
+  unsigned int start, end ;
+  int spiFail ;
+  unsigned char *myData ;
+  double timePerTransaction, perfectTimePerTransaction, dataSpeed ;
+
+  if ((myData = malloc (MAX_SIZE)) == NULL)
+  {
+    fprintf (stderr, "Unable to allocate buffer: %s\n", strerror (errno)) ;
+    exit (EXIT_FAILURE) ;
+  }
+
+  wiringPiSetup () ;
+
+  for (speed = 1 ; speed <= 32 ; speed *= 2)
+  {
+    printf ("+-------+--------+----------+----------+-----------+------------+\n") ;
+    printf ("|   MHz |   Size | mS/Trans |      TpS |    Mb/Sec | Latency mS |\n") ;
+    printf ("+-------+--------+----------+----------+-----------+------------+\n") ;
+
+    spiFail = FALSE ;
+    spiSetup (speed * 1000000) ;
+    for (size = 1 ; size <= MAX_SIZE ; size *= 2)
+    {
+      printf ("| %5d | %6d ", speed, size) ;
+
+      start = millis () ;
+      for (times = 0 ; times < NUM_TIMES ; ++times)
+	if (wiringPiSPIDataRW (SPI_CHAN, myData, size) == -1)
+	{
+	  printf ("SPI failure: %s\n", strerror (errno)) ;
+	  spiFail = TRUE ;
+	  break ;
+	}
+      end = millis () ;
+
+      if (spiFail)
+	break ;
+
+      timePerTransaction        = ((double)(end - start) / (double)NUM_TIMES) / 1000.0 ;
+      dataSpeed                 =  (double)(size * 8)    / (1024.0 * 1024.0) / timePerTransaction  ;
+      perfectTimePerTransaction = ((double)(size * 8))   / ((double)(speed * 1000000)) ;
+
+      printf ("| %8.3f ", timePerTransaction * 1000.0) ;
+      printf ("| %8.1f ", 1.0 / timePerTransaction) ;
+      printf ("| %9.5f ", dataSpeed) ;
+      printf ("|   %8.5f ", (timePerTransaction - perfectTimePerTransaction) * 1000.0) ;
+      printf ("|\n") ;
+
+    }
+
+    close (myFd) ;
+    printf ("+-------+--------+----------+----------+-----------+------------+\n") ;
+    printf ("\n") ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/examples/wfi.c b/modules/catkin_ws/src/wiringPi/examples/wfi.c
new file mode 100644
index 00000000..6bb68927
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/examples/wfi.c
@@ -0,0 +1,161 @@
+/*
+ * wfi.c:
+ *	Wait for Interrupt test program
+ *
+ *	This program demonstrates the use of the waitForInterrupt()
+ *	function in wiringPi. It listens to a button input on
+ *	BCM_GPIO pin 17 (wiringPi pin 0)
+ *
+ *	The biggest issue with this method is that it really only works
+ *	well in Sys mode.
+ *
+ *	Jan 2013: This way of doing things is sort of deprecated now, see
+ *	the wiringPiISR() function instead and the isr.c test program here.
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <wiringPi.h>
+
+// A 'key' which we can lock and unlock - values are 0 through 3
+//	This is interpreted internally as a pthread_mutex by wiringPi
+//	which is hiding some of that to make life simple.
+
+#define	COUNT_KEY	0
+
+// What BCM_GPIO input are we using?
+
+#define	BUTTON_PIN	17
+
+// Debounce time in mS
+
+#define	DEBOUNCE_TIME	100
+
+
+// globalCounter:
+//	Global variable to count interrupts
+//	Should be declared volatile to make sure the compiler doesn't cache it.
+
+static volatile int globalCounter = 0 ;
+
+
+/*
+ * waitForIt:
+ *	This is a thread created using the wiringPi simplified threading
+ *	mechanism. It will wait on an interrupt on the button and increment
+ *	a counter.
+ *********************************************************************************
+ */
+
+PI_THREAD (waitForIt)
+{
+  int state = 0 ;
+  int debounceTime = 0 ;
+
+  (void)piHiPri (10) ;	// Set this thread to be high priority
+
+  for (;;)
+  {
+    if (waitForInterrupt (BUTTON_PIN, -1) > 0)	// Got it
+    {
+// Bouncing?
+
+      if (millis () < debounceTime)
+      {
+	debounceTime = millis () + DEBOUNCE_TIME ;
+	continue ;
+      }
+
+// We have a valid one
+
+      state ^= 1 ;
+
+      piLock (COUNT_KEY) ;
+	++globalCounter ;
+      piUnlock (COUNT_KEY) ;
+
+// Wait for key to be released
+
+      while (digitalRead (BUTTON_PIN) == LOW)
+	delay (1) ;
+
+      debounceTime = millis () + DEBOUNCE_TIME ;
+    }
+  }
+}
+
+
+/*
+ * setup:
+ *	Demo a crude but effective way to initialise the hardware
+ *********************************************************************************
+ */
+
+void setup (void)
+{
+
+// Use the gpio program to initialise the hardware
+//	(This is the crude, but effective)
+
+  system ("gpio edge 17 falling") ;
+
+// Setup wiringPi
+
+  wiringPiSetupSys () ;
+
+// Fire off our interrupt handler
+
+  piThreadCreate (waitForIt) ;
+
+}
+
+
+/*
+ * main
+ *********************************************************************************
+ */
+
+int main (void)
+{
+  int lastCounter = 0 ;
+  int myCounter   = 0 ;
+
+  setup () ;
+
+  for (;;)
+  {
+    printf ("Waiting ... ") ; fflush (stdout) ;
+
+    while (myCounter == lastCounter)
+    {
+      piLock (COUNT_KEY) ;
+	myCounter = globalCounter ;
+      piUnlock (COUNT_KEY) ;
+      delay (500) ;
+    }
+
+    printf (" Done. myCounter: %5d\n", myCounter) ;
+    lastCounter = myCounter ;
+  }
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/gpio/COPYING.LESSER b/modules/catkin_ws/src/wiringPi/gpio/COPYING.LESSER
new file mode 100644
index 00000000..65c5ca88
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/gpio/COPYING.LESSER
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/modules/catkin_ws/src/wiringPi/gpio/Makefile b/modules/catkin_ws/src/wiringPi/gpio/Makefile
new file mode 100644
index 00000000..37b4887d
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/gpio/Makefile
@@ -0,0 +1,87 @@
+#
+# Makefile:
+#	The gpio command:
+#	  A swiss-army knige of GPIO shenanigans.
+#	https://projects.drogon.net/wiring-pi
+#
+#	Copyright (c) 2012-2013 Gordon Henderson
+#################################################################################
+# This file is part of wiringPi:
+#	Wiring Compatable library for the Raspberry Pi
+#
+#    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 <http://www.gnu.org/licenses/>.
+#################################################################################
+
+DESTDIR=/usr
+PREFIX=/local
+
+#DEBUG	= -g -O0
+DEBUG	= -O2
+CC	= gcc
+INCLUDE	= -I$(DESTDIR)$(PREFIX)/include
+CFLAGS	= $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
+
+LDFLAGS	= -L$(DESTDIR)$(PREFIX)/lib
+LIBS    = -lwiringPi -lwiringPiDev -lpthread -lm
+
+# May not need to  alter anything below this line
+###############################################################################
+
+SRC	=	gpio.c extensions.c readall.c pins.c
+
+OBJ	=	$(SRC:.c=.o)
+
+all:		gpio
+
+gpio:	$(OBJ)
+	@echo [Link]
+	@$(CC) -o $@ $(OBJ) $(LDFLAGS) $(LIBS)
+	
+.c.o:
+	@echo [Compile] $<
+	@$(CC) -c $(CFLAGS) $< -o $@
+
+.PHONY:	clean
+clean:
+	@echo "[Clean]"
+	@rm -f $(OBJ) gpio *~ core tags *.bak
+
+.PHONY:	tags
+tags:	$(SRC)
+	@echo [ctags]
+	@ctags $(SRC)
+
+.PHONY:	install
+install:
+	@echo "[Install]"
+	@cp gpio		$(DESTDIR)$(PREFIX)/bin
+	@chown root.root	$(DESTDIR)$(PREFIX)/bin/gpio
+	@chmod 4755		$(DESTDIR)$(PREFIX)/bin/gpio
+	@mkdir -p		$(DESTDIR)$(PREFIX)/man/man1
+	@cp gpio.1		$(DESTDIR)$(PREFIX)/man/man1
+
+.PHONY:	uninstall
+uninstall:
+	@echo "[UnInstall]"
+	@rm -f $(DESTDIR)$(PREFIX)/bin/gpio
+	@rm -f $(DESTDIR)$(PREFIX)/man/man1/gpio.1
+
+.PHONY:	depend
+depend:
+	makedepend -Y $(SRC)
+
+# DO NOT DELETE
+
+gpio.o: extensions.h
+extensions.o: extensions.h
diff --git a/modules/catkin_ws/src/wiringPi/gpio/extensions.c b/modules/catkin_ws/src/wiringPi/gpio/extensions.c
new file mode 100644
index 00000000..96d6255f
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/gpio/extensions.c
@@ -0,0 +1,700 @@
+/*
+ * extensions.c:
+ *	Part of the GPIO program to test, peek, poke and otherwise
+ *	noodle with the GPIO hardware on the Raspberry Pi.
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <ctype.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <fcntl.h>
+
+#include <wiringPi.h>
+
+#include <mcp23008.h>
+#include <mcp23016.h>
+#include <mcp23017.h>
+#include <mcp23s08.h>
+#include <mcp23s17.h>
+#include <sr595.h>
+#include <pcf8591.h>
+#include <pcf8574.h>
+#include <max31855.h>
+#include <max5322.h>
+#include <mcp3002.h>
+#include <mcp3004.h>
+#include <mcp4802.h>
+#include <mcp3422.h>
+#include <sn3218.h>
+#include <drcSerial.h>
+
+#include "extensions.h"
+
+extern int wiringPiDebug ;
+
+#ifndef TRUE
+#  define	TRUE	(1==1)
+#  define	FALSE	(1==2)
+#endif
+
+// Local structure to hold details
+
+struct extensionFunctionStruct
+{
+  const char *name ;
+  int	(*function)(char *progName, int pinBase, char *params) ;
+} ;
+
+
+/*
+ * extractInt:
+ *	Check & return an integer at the given location (prefixed by a :)
+ *********************************************************************************
+ */
+
+static char *extractInt (char *progName, char *p, int *num)
+{
+  if (*p != ':')
+  {
+    fprintf (stderr, "%s: colon expected\n", progName) ;
+    return NULL ;
+  }
+
+  ++p ;
+
+  if (!isdigit (*p))
+  {
+    fprintf (stderr, "%s: digit expected\n", progName) ;
+    return NULL ;
+  }
+
+  *num = strtol (p, NULL, 0) ;
+  while (isdigit (*p))
+    ++p ;
+
+  return p ;
+}
+
+
+/*
+ * extractStr:
+ *	Check & return a string at the given location (prefixed by a :)
+ *********************************************************************************
+ */
+
+static char *extractStr (char *progName, char *p, char **str)
+{
+  char *q, *r ;
+
+  if (*p != ':')
+  {
+    fprintf (stderr, "%s: colon expected\n", progName) ;
+    return NULL ;
+  }
+
+  ++p ;
+
+  if (!isprint (*p))
+  {
+    fprintf (stderr, "%s: character expected\n", progName) ;
+    return NULL ;
+  }
+
+  q = p ;
+  while ((*q != 0) && (*q != ':'))
+    ++q ;
+
+  *str = r = calloc (q - p + 2, 1) ;	// Zeros it
+
+  while (p != q)
+    *r++ = *p++ ;
+    
+  return p ;
+}
+
+
+
+/*
+ * doExtensionMcp23008:
+ *	MCP23008 - 8-bit I2C GPIO expansion chip
+ *	mcp23002:base:i2cAddr
+ *********************************************************************************
+ */
+
+static int doExtensionMcp23008 (char *progName, int pinBase, char *params)
+{
+  int i2c ;
+
+  if ((params = extractInt (progName, params, &i2c)) == NULL)
+    return FALSE ;
+
+  if ((i2c < 0x03) || (i2c > 0x77))
+  {
+    fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+    return FALSE ;
+  }
+
+  mcp23008Setup (pinBase, i2c) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionMcp23016:
+ *	MCP230016- 16-bit I2C GPIO expansion chip
+ *	mcp23016:base:i2cAddr
+ *********************************************************************************
+ */
+
+static int doExtensionMcp23016 (char *progName, int pinBase, char *params)
+{
+  int i2c ;
+
+  if ((params = extractInt (progName, params, &i2c)) == NULL)
+    return FALSE ;
+
+  if ((i2c < 0x03) || (i2c > 0x77))
+  {
+    fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+    return FALSE ;
+  }
+
+  mcp23016Setup (pinBase, i2c) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionMcp23017:
+ *	MCP230017- 16-bit I2C GPIO expansion chip
+ *	mcp23017:base:i2cAddr
+ *********************************************************************************
+ */
+
+static int doExtensionMcp23017 (char *progName, int pinBase, char *params)
+{
+  int i2c ;
+
+  if ((params = extractInt (progName, params, &i2c)) == NULL)
+    return FALSE ;
+
+  if ((i2c < 0x03) || (i2c > 0x77))
+  {
+    fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+    return FALSE ;
+  }
+
+  mcp23017Setup (pinBase, i2c) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionMcp23s08:
+ *	MCP23s08 - 8-bit SPI GPIO expansion chip
+ *	mcp23s08:base:spi:port
+ *********************************************************************************
+ */
+
+static int doExtensionMcp23s08 (char *progName, int pinBase, char *params)
+{
+  int spi, port ;
+
+  if ((params = extractInt (progName, params, &spi)) == NULL)
+    return FALSE ;
+
+  if ((spi < 0) || (spi > 1))
+  {
+    fprintf (stderr, "%s: SPI address (%d) out of range\n", progName, spi) ;
+    return FALSE ;
+  }
+
+  if ((params = extractInt (progName, params, &port)) == NULL)
+    return FALSE ;
+
+  if ((port < 0) || (port > 7))
+  {
+    fprintf (stderr, "%s: port address (%d) out of range\n", progName, port) ;
+    return FALSE ;
+  }
+
+  mcp23s08Setup (pinBase, spi, port) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionMcp23s17:
+ *	MCP23s17 - 16-bit SPI GPIO expansion chip
+ *	mcp23s17:base:spi:port
+ *********************************************************************************
+ */
+
+static int doExtensionMcp23s17 (char *progName, int pinBase, char *params)
+{
+  int spi, port ;
+
+  if ((params = extractInt (progName, params, &spi)) == NULL)
+    return FALSE ;
+
+  if ((spi < 0) || (spi > 1))
+  {
+    fprintf (stderr, "%s: SPI address (%d) out of range\n", progName, spi) ;
+    return FALSE ;
+  }
+
+  if ((params = extractInt (progName, params, &port)) == NULL)
+    return FALSE ;
+
+  if ((port < 0) || (port > 7))
+  {
+    fprintf (stderr, "%s: port address (%d) out of range\n", progName, port) ;
+    return FALSE ;
+  }
+
+  mcp23s17Setup (pinBase, spi, port) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionSr595:
+ *	Shift Register 74x595
+ *	sr595:base:pins:data:clock:latch
+ *********************************************************************************
+ */
+
+static int doExtensionSr595 (char *progName, int pinBase, char *params)
+{
+  int pins, data, clock, latch ;
+
+// Extract pins
+
+  if ((params = extractInt (progName, params, &pins)) == NULL)
+    return FALSE ;
+
+  if ((pins < 8) || (pins > 32))
+  {
+    fprintf (stderr, "%s: pin count (%d) out of range - 8-32 expected.\n", progName, pins) ;
+    return FALSE ;
+  }
+
+  if ((params = extractInt (progName, params, &data)) == NULL)
+    return FALSE ;
+
+  if ((params = extractInt (progName, params, &clock)) == NULL)
+    return FALSE ;
+
+  if ((params = extractInt (progName, params, &latch)) == NULL)
+    return FALSE ;
+
+  sr595Setup (pinBase, pins, data, clock, latch) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionPcf8574:
+ *	Digital IO (Crude!)
+ *	pcf8574:base:i2cAddr
+ *********************************************************************************
+ */
+
+static int doExtensionPcf8574 (char *progName, int pinBase, char *params)
+{
+  int i2c ;
+
+  if ((params = extractInt (progName, params, &i2c)) == NULL)
+    return FALSE ;
+
+  if ((i2c < 0x03) || (i2c > 0x77))
+  {
+    fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+    return FALSE ;
+  }
+
+  pcf8574Setup (pinBase, i2c) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionPcf8591:
+ *	Analog IO
+ *	pcf8591:base:i2cAddr
+ *********************************************************************************
+ */
+
+static int doExtensionPcf8591 (char *progName, int pinBase, char *params)
+{
+  int i2c ;
+
+  if ((params = extractInt (progName, params, &i2c)) == NULL)
+    return FALSE ;
+
+  if ((i2c < 0x03) || (i2c > 0x77))
+  {
+    fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+    return FALSE ;
+  }
+
+  pcf8591Setup (pinBase, i2c) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionMax31855:
+ *	Analog IO
+ *	max31855:base:spiChan
+ *********************************************************************************
+ */
+
+static int doExtensionMax31855 (char *progName, int pinBase, char *params)
+{
+  int spi ;
+
+  if ((params = extractInt (progName, params, &spi)) == NULL)
+    return FALSE ;
+
+  if ((spi < 0) || (spi > 1))
+  {
+    fprintf (stderr, "%s: SPI channel (%d) out of range\n", progName, spi) ;
+    return FALSE ;
+  }
+
+  max31855Setup (pinBase, spi) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionMcp3002:
+ *	Analog IO
+ *	mcp3002:base:spiChan
+ *********************************************************************************
+ */
+
+static int doExtensionMcp3002 (char *progName, int pinBase, char *params)
+{
+  int spi ;
+
+  if ((params = extractInt (progName, params, &spi)) == NULL)
+    return FALSE ;
+
+  if ((spi < 0) || (spi > 1))
+  {
+    fprintf (stderr, "%s: SPI channel (%d) out of range\n", progName, spi) ;
+    return FALSE ;
+  }
+
+  mcp3002Setup (pinBase, spi) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionMcp3004:
+ *	Analog IO
+ *	mcp3004:base:spiChan
+ *********************************************************************************
+ */
+
+static int doExtensionMcp3004 (char *progName, int pinBase, char *params)
+{
+  int spi ;
+
+  if ((params = extractInt (progName, params, &spi)) == NULL)
+    return FALSE ;
+
+  if ((spi < 0) || (spi > 1))
+  {
+    fprintf (stderr, "%s: SPI channel (%d) out of range\n", progName, spi) ;
+    return FALSE ;
+  }
+
+  mcp3004Setup (pinBase, spi) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionMax5322:
+ *	Analog O
+ *	max5322:base:spiChan
+ *********************************************************************************
+ */
+
+static int doExtensionMax5322 (char *progName, int pinBase, char *params)
+{
+  int spi ;
+
+  if ((params = extractInt (progName, params, &spi)) == NULL)
+    return FALSE ;
+
+  if ((spi < 0) || (spi > 1))
+  {
+    fprintf (stderr, "%s: SPI channel (%d) out of range\n", progName, spi) ;
+    return FALSE ;
+  }
+
+  max5322Setup (pinBase, spi) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * doExtensionMcp4802:
+ *	Analog IO
+ *	mcp4802:base:spiChan
+ *********************************************************************************
+ */
+
+static int doExtensionMcp4802 (char *progName, int pinBase, char *params)
+{
+  int spi ;
+
+  if ((params = extractInt (progName, params, &spi)) == NULL)
+    return FALSE ;
+
+  if ((spi < 0) || (spi > 1))
+  {
+    fprintf (stderr, "%s: SPI channel (%d) out of range\n", progName, spi) ;
+    return FALSE ;
+  }
+
+  mcp4802Setup (pinBase, spi) ;
+
+  return TRUE ;
+}
+
+
+/*
+ * 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
+ *********************************************************************************
+ */
+
+static int doExtensionMcp3422 (char *progName, int pinBase, char *params)
+{
+  int i2c, sampleRate, gain ;
+
+  if ((params = extractInt (progName, params, &i2c)) == NULL)
+    return FALSE ;
+
+  if ((i2c < 0x03) || (i2c > 0x77))
+  {
+    fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+    return FALSE ;
+  }
+
+  if ((params = extractInt (progName, params, &sampleRate)) == NULL)
+    return FALSE ;
+
+  if ((sampleRate < 0) || (sampleRate > 3))
+  {
+    fprintf (stderr, "%s: sample rate (%d) out of range\n", progName, sampleRate) ;
+    return FALSE ;
+  }
+
+  if ((params = extractInt (progName, params, &gain)) == NULL)
+    return FALSE ;
+
+  if ((gain < 0) || (gain > 3))
+  {
+    fprintf (stderr, "%s: gain (%d) out of range\n", progName, gain) ;
+    return FALSE ;
+  }
+
+  mcp3422Setup (pinBase, i2c, sampleRate, gain) ;
+
+  return TRUE ;
+}
+
+/*
+ * doExtensionDrcS:
+ *	Interface to a DRC Serial system
+ *	drcs:base:pins:serialPort:baud
+ *********************************************************************************
+ */
+
+static int doExtensionDrcS (char *progName, int pinBase, char *params)
+{
+  char *port ;
+  int pins, baud ;
+
+  if ((params = extractInt (progName, params, &pins)) == NULL)
+    return FALSE ;
+
+  if ((pins < 1) || (pins > 100))
+  {
+    fprintf (stderr, "%s: pins (%d) out of range (2-100)\n", progName, pins) ;
+    return FALSE ;
+  }
+  
+  if ((params = extractStr (progName, params, &port)) == NULL)
+    return FALSE ;
+
+  if (strlen (port) == 0)
+  {
+    fprintf (stderr, "%s: serial port device name required\n", progName) ;
+    return FALSE ;
+  }
+
+  if ((params = extractInt (progName, params, &baud)) == NULL)
+    return FALSE ;
+
+  if ((baud < 1) || (baud > 4000000))
+  {
+    fprintf (stderr, "%s: baud rate (%d) out of range\n", progName, baud) ;
+    return FALSE ;
+  }
+
+  drcSetupSerial (pinBase, pins, port, baud) ;
+
+  return TRUE ;
+}
+
+
+
+/*
+ * Function list
+ *********************************************************************************
+ */
+
+struct extensionFunctionStruct extensionFunctions [] = 
+{
+  { "mcp23008",		&doExtensionMcp23008 	},
+  { "mcp23016",		&doExtensionMcp23016 	},
+  { "mcp23017",		&doExtensionMcp23017 	},
+  { "mcp23s08",		&doExtensionMcp23s08 	},
+  { "mcp23s17",		&doExtensionMcp23s17 	},
+  { "sr595",		&doExtensionSr595	},
+  { "pcf8574",		&doExtensionPcf8574	},
+  { "pcf8591",		&doExtensionPcf8591	},
+  { "mcp3002",		&doExtensionMcp3002	},
+  { "mcp3004",		&doExtensionMcp3004	},
+  { "mcp4802",		&doExtensionMcp4802	},
+  { "mcp3422",		&doExtensionMcp3422	},
+  { "max31855",		&doExtensionMax31855	},
+  { "max5322",		&doExtensionMax5322	},
+  { "sn3218",		&doExtensionSn3218	},
+  { "drcs",		&doExtensionDrcS	},
+  { NULL,		NULL		 	},
+} ;
+
+
+/*
+ * doExtension:
+ *	Load in a wiringPi extension
+ *********************************************************************************
+ */
+
+int doExtension (char *progName, char *extensionData)
+{
+  char *p ;
+  char *extension = extensionData ;
+  struct extensionFunctionStruct *extensionFn ;
+  int pinBase = 0 ;
+
+// Get the extension extension name by finding the first colon
+
+  p = extension ;
+  while (*p != ':')
+  {
+    if (!*p)	// ran out of characters
+    {
+      fprintf (stderr, "%s: extension name not terminated by a colon\n", progName) ;
+      return FALSE ;
+    }
+    ++p ;
+  }
+
+  *p++ = 0 ;
+
+  if (!isdigit (*p))
+  {
+    fprintf (stderr, "%s: pinBase number expected after extension name\n", progName) ;
+    return FALSE ;
+  }
+
+  while (isdigit (*p))
+  {
+    if (pinBase > 1000000000)
+    {
+      fprintf (stderr, "%s: pinBase too large\n", progName) ;
+      return FALSE ;
+    }
+
+    pinBase = pinBase * 10 + (*p - '0') ;
+    ++p ;
+  }
+
+  if (pinBase < 64)
+  {
+    fprintf (stderr, "%s: pinBase (%d) too small. Minimum is 64.\n", progName, pinBase) ;
+    return FALSE ;
+  }
+
+// Search for extensions:
+
+  for (extensionFn = extensionFunctions ; extensionFn->name != NULL ; ++extensionFn)
+  {
+    if (strcmp (extensionFn->name, extension) == 0)
+      return extensionFn->function (progName, pinBase, p) ;
+  }
+
+  fprintf (stderr, "%s: extension %s not found\n", progName, extension) ;
+  return FALSE ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/gpio/extensions.h b/modules/catkin_ws/src/wiringPi/gpio/extensions.h
new file mode 100644
index 00000000..5d271234
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/gpio/extensions.h
@@ -0,0 +1,26 @@
+/*
+ * extensions.h:
+ *	Part of the GPIO program to test, peek, poke and otherwise
+ *	noodle with the GPIO hardware on the Raspberry Pi.
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+extern int doExtension (char *progName, char *extensionData) ;
diff --git a/modules/catkin_ws/src/wiringPi/gpio/extensions.o b/modules/catkin_ws/src/wiringPi/gpio/extensions.o
new file mode 100644
index 0000000000000000000000000000000000000000..fd7d06e442a7d111f4cffe03ddef9d0b6dbb7fdb
GIT binary patch
literal 12920
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
BnTP-Y

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/gpio/gpio b/modules/catkin_ws/src/wiringPi/gpio/gpio
new file mode 100755
index 0000000000000000000000000000000000000000..477efde624dbf2ac47b5806040a14645817dabc4
GIT binary patch
literal 51680
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

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/gpio/gpio.1 b/modules/catkin_ws/src/wiringPi/gpio/gpio.1
new file mode 100644
index 00000000..e7131c1c
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/gpio/gpio.1
@@ -0,0 +1,371 @@
+.TH "GPIO" "March 2013" "Command-Line access to Raspberry Pi's GPIO"
+
+.SH NAME
+gpio \- Command-line access to Raspberry Pi's GPIO
+
+.SH SYNOPSIS
+.B gpio
+.B \-v
+.PP
+.B gpio
+.B [ \-g | \-1 ]
+.B mode/read/write/aread/awrite/wb/pwm/clock ...
+.PP
+.B gpio
+.B [ \-x extension:params ]
+.B mode/read/write/aread/awrite/pwm/pwmTone ...
+.PP
+.B gpio
+.B [ \-p ]
+.B read/write/toggle/wb
+.B ...
+.PP
+.B gpio
+.B readall/reset
+.PP
+.B gpio
+.B unexportall/exports
+.PP
+.B gpio
+.B export/edge/unexport
+.B ...
+.PP
+.B gpio
+.B wfi
+.B ...
+.PP
+.B gpio
+.B drive
+group value
+.PP
+.B gpio
+.B usbp
+high | low
+.PP
+.B gpio
+.B pwm-bal/pwm-ms
+.PP
+.B gpio
+.B pwmr
+range
+.PP
+.B gpio
+.B load \ i2c/spi ...
+.PP
+.B gpio
+.B gbr
+channel
+.PP
+.B gpio
+.B gbw
+channel value
+
+.SH DESCRIPTION
+
+.B GPIO
+is a swiss army knife of a command line tool to allow the user easy
+access to the GPIO pins on the Raspberry Pi and the SPI A/D and D/A
+converters on the Gertboard. It's designed for simple testing and
+diagnostic purposes, but can be used in shell scripts for general if
+somewhat slow control of the GPIO pins.
+
+It can also control the IO's on the PiFace IO board and load the SPI and I2C
+kernel modules if required.
+
+Additionally, it can be used to set the exports in the \fI/sys/class/gpio\fR
+system directory to allow subsequent programs to use the \fR/sys/class/gpio\fR
+interface without needing to be run as root.
+
+.SH OPTIONS
+
+.TP
+.B \-v
+Output the current version including the board revision of the Raspberry Pi.
+
+.TP
+.B \-g
+Use the BCM_GPIO pins numbers rather than wiringPi pin numbers.
+\fINote:\fR The BCM_GPIO pin numbers are always used with the 
+export and edge commands.
+
+.TP
+.B \-1
+Use the physical pin numbers rather than wiringPi pin numbers.
+\fINote:\fR that this applies to the P1 connector only. It is not possible to
+use pins on the Revision 2 P5 connector this way, and as with \-g the
+BCM_GPIO pin numbers are always used with the export and edge commands.
+
+.TP
+.B \-x extension
+This causes the named extension to be initialised. Extensions
+comprise of a name (e.g. mcp23017) followed by a colon, then the
+pin-base, then more optional parameters depending on the extension type.
+See the web page on http://wiringpi.com/the-gpio-utility/
+
+.TP
+.B \-p
+Use the PiFace interface board and its corresponding pin numbers. The PiFace
+will always appear at pin number 200 in the gpio command. You can assign any
+pin numbers you like in your own programs though.
+
+.TP
+.B read <pin>
+Read the digital value of the given pin and print 0 or 1 to represent the
+respective logic levels.
+
+.TP
+.B write <pin> <value>
+Write the given value (0 or 1) to the pin. You need to set the pin
+to output mode first.
+
+.TP
+.B aread <pin>
+Read the analog value of the given pin. This needs to be uses in
+conjunction with a -x flag to add in an extension that handles analog
+inputs.  respective logic levels.
+
+e.g. gpio -x mcp3002:200:0 aread 200
+
+will read the first analog input on an mcp3002 SPI ADC chip.
+
+.TP
+.B awrite <pin> <value>
+Write the analog value to the given pin. This needs to be used in
+conjunction with a -x flag to add in an extension that handles analog
+inputs.  respective logic levels.
+
+e.g. gpio -x mcp4802:200:0 awrite 200 128
+
+will write the value 128 to the first DAC port on an mcp4802 chip on
+the Pi's SPI bus 0.
+
+
+.TP
+.B wb <value>
+Write the given byte to the 8 main GPIO pins. You can prefix it with 0x
+to specify a hexadecimal number. You need to set pins to output mode
+first.
+
+.TP
+.B readall
+Output a table of all GPIO pins values. The values represent the actual values read
+if the pin is in input mode, or the last value written if the pin is in output
+mode.
+
+The readall command is usable with an extension module (via the -x parameter),
+but it's unable to determine pin modes or states, so will perform both a
+digital and analog read on each pin in-turn.
+
+.TP
+.B reset
+Resets the GPIO - As much as it's possible to do. All pins are set to
+input mode and all the internal pull-up/down resistors are disconnected
+(tristate mode).
+
+The reset command is usable with an extension module (via the -x parameter),
+but it's limited to turning the pin into input mode (if applicable) and
+removing any pull up/down resistor.
+
+.TP
+.B pwm <pin> <value>
+Write a PWM value (0-1023) to the given pin. The pin needs to be put
+into PWM mode first.
+
+.TP
+.B clock <pin> <frequency>
+Set the output frequency on the given pin. The pin needs to be put into
+clock mode first.
+
+.TP
+.B mode <pin> <mode>
+Set a pin into \fIinput\fR, \fIoutput\fR or \fIpwm\fR mode. Can also
+use the literals \fIup\fR, \fIdown\fR or \fItri\fR to set the internal
+pull-up, pull-down or tristate (off) controls.
+
+.TP
+.B unexportall
+Un-Export all the GPIO pins in the /sys/class/gpio directory.
+
+.TP
+.B exports
+Print a list (if any) of all the exported GPIO pins and their current values.
+
+.TP
+.B export
+Export a GPIO pin in the \fI/sys/class/gpio\fR directory. Use like the
+mode command above however only \fIin\fR and \fIout\fR are supported at
+this time. Note that the pin number is the \fBBCM_GPIO\fR number and
+not the wiringPi number.
+
+Once a GPIO pin has been exported, the \fBgpio\fR program changes the
+ownership of the \fI/sys/class/gpio/gpioX/value\fR and if present in
+later kernels, the \fI/sys/class/gpio/gpioX/edge\fR pseudo files to
+that of the user running the \fBgpio\fR program. This means that you
+can have a small script of gpio exports to setup the gpio pins as your
+program requires without the need to run anything as root, or with the
+sudo command.
+
+.TP
+.B edge
+This exports a GPIO pin in the \fI/sys/class/gpio\fR directory, set
+the direction to input and set the edge interrupt method to \fInone\fR,
+\fIrising\fR, \fIfalling\fR or \fIboth\fR.  Use like the export command
+above and note that \fBBCM_GPIO\fR pin number is used not not wiringPi pin
+numbering.
+
+Like the export commands above, ownership is set to that of the 
+calling user, allowing subsequent access from user programs without
+requiring root/sudo.
+
+.TP
+.B unexport
+Un-Export a GPIO pin in the /sys/class/gpio directory.
+
+.TP
+.B wfi <pin> <mode>
+This set the given pin to the supplied interrupt mode: rising, falling
+or both then waits for the interrupt to happen. It's a non-busy wait,
+so does not consume and CPU while it's waiting.
+
+.TP
+.B drive
+group value
+
+Change the pad driver value for the given pad group to the supplied drive
+value. Group is 0, 1 or 2 and value is 0-7. Do not use unless you are
+absolutely sure you know what you're doing.
+
+.TP
+.B usbp
+high | low
+
+Change the USB current limiter to high (1.2 amps) or low (the default, 600mA)
+This is only applicable to the model B+
+
+.TP
+.B pwm-bal/pwm-ms 
+Change the PWM mode to balanced (the default) or mark:space ratio (traditional)
+
+.TP
+.B pwmr
+Change the PWM range register. The default is 1024.
+
+.TP
+.B load i2c [baudrate]
+This loads the i2c or drivers into the kernel and changes the permissions
+on the associated /dev/ entries so that the current user has access to
+them. Optionally it will set the I2C baudrate to that supplied in Kb/sec
+(or as close as the Pi can manage) The default speed is 100Kb/sec.
+
+.TP
+.B load spi [buffer size in KB]
+This loads the spi drivers into the kernel and changes the permissions
+on the associated /dev/ entries so that the current user has access to
+them. Optionally it will set the SPI buffer size to that supplied. The
+default is 4KB.
+
+.TP
+.B gbr
+channel
+
+This reads the analog to digital converter on the Gertboard on the given
+channel. The board jumpers need to be in-place to do this operation.
+
+.TP
+.B gbw
+channel value
+
+This writes the supplied value to the output channel on the Gertboards
+SPI digital to analogue converter.
+The board jumpers need to be in-place to do this operation.
+
+
+.SH "WiringPi vs. BCM_GPIO Pin numbering"
+
+.PP
+.TS
+c c c c l.
+WiringPi	GPIO-r1	GPIO-r2	P1-Phys	Function
+_
+ 0	17	17	11	
+ 1	18	18	12	(PWM)
+ 2	21	27	13
+ 3	22	22	15
+ 4	23	23	16
+ 5	24	24	18
+ 6	25	25	22
+ 7	4	4	7
+ 8	0	2	3	I2C: SDA0
+ 9	1	3	5	I2C: SCL0
+10	8	8	24	SPI: CE0
+11	7	7	26	SPI: CE1
+12	10	10	19	SPI: MOSI
+13	9	9	21	SPI: MISO
+14	11	11	23	SPI: SCLK
+15	14	14	8	TxD
+16	15	16	10	RxD
+17	-	28
+18	-	29
+19	-	30
+20	-	31
+.TE
+
+Note that "r1" and "r2" above refers to the board revision. Normally
+wiringPi detects the correct board revision with use for it's own
+numbering scheme, but if you are using a Revision 2 board with some
+of the pins which change numbers between revisions you will need
+to alter your software.
+
+.SH FILES
+
+.TP 2.2i
+.I gpio
+executable
+
+.SH EXAMPLES
+.TP 2.2i
+gpio mode 4 output # Set pin 4 to output
+.PP
+gpio -g mode 23 output # Set GPIO pin 23 to output (same as WiringPi pin 4)
+.PP
+gpio mode 1 pwm # Set pin 1 to PWM mode
+.PP
+gpio pwm 1 512 # Set pin 1 to PWM value 512 - half brightness
+.PP
+gpio export 17 out # Set GPIO Pin 17 to output
+.PP
+gpio export 0 in # Set GPIO Pin 0 (SDA0) to input.
+.PP
+gpio -g read 0 # Read GPIO Pin 0 (SDA0)
+
+.SH "NOTES"
+
+When using the \fIexport\fR, \fIedge\fR or \fIunexport\fR commands, the
+pin numbers are \fBalways\fR native BCM_GPIO numbers and never wiringPi
+pin numbers.
+
+.SH "SEE ALSO"
+
+.LP
+WiringPi's home page
+.IP
+http://wiringpi.com/
+
+.SH AUTHOR
+
+Gordon Henderson
+
+.SH "REPORTING BUGS"
+
+Please report bugs to <projects@drogon.net>
+
+.SH COPYRIGHT
+
+Copyright (c) 2012-2013 Gordon Henderson
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+.SH TRADEMARKS AND ACKNOWLEDGEMENTS
+
+Raspberry Pi is a trademark of the Raspberry Pi Foundation. See
+http://raspberrypi.org/ for full details.
diff --git a/modules/catkin_ws/src/wiringPi/gpio/gpio.c b/modules/catkin_ws/src/wiringPi/gpio/gpio.c
new file mode 100755
index 00000000..8567e77c
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/gpio/gpio.c
@@ -0,0 +1,1477 @@
+/*
+ * gpio.c:
+ *	Swiss-Army-Knife, Set-UID command-line interface to the Raspberry
+ *	Pi's GPIO.
+ *	Copyright (c) 2012-2014 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <ctype.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <wiringPi.h>
+
+#include <gertboard.h>
+#include <piFace.h>
+
+#include "extensions.h"
+
+extern int wiringPiDebug ;
+
+// External functions I can't be bothered creating a separate .h file for:
+
+extern void doReadall    (void) ;
+extern void doPins       (void) ;
+
+#ifndef TRUE
+#  define	TRUE	(1==1)
+#  define	FALSE	(1==2)
+#endif
+
+/*
+	2.31 : ODROID-C1/ODROID-C2 wiringPi support
+	2.33 : ODROID-C1/ODROID-C2 GPIO sysfs irq support
+*/
+#define	VERSION			"2.33"
+#define	PI_USB_POWER_CONTROL	38
+#define	I2CDETECT		"/usr/sbin/i2cdetect"
+
+int wpMode ;
+int piModel = PI_MODEL_UNKNOWN;
+
+char *usage = "Usage: gpio -v\n"
+              "       gpio -h\n"
+              "       gpio [-g|-1] [-x extension:params] ...\n"
+              "       gpio [-p] <read/write/wb> ...\n"
+              "       gpio <read/write/aread/awritewb/pwm/clock/mode> ...\n"
+	      "       gpio readall/reset\n"
+	      "       gpio unexportall/exports\n"
+	      "       gpio export/edge/unexport ...\n"
+	      "       gpio wfi <pin> <mode>\n"
+	      "       gpio drive <group> <value>\n"
+	      "       gpio pwm-bal/pwm-ms \n"
+	      "       gpio pwmr <range> \n"
+	      "       gpio pwmc <divider> \n"
+	      "       gpio load spi/i2c\n"
+	      "       gpio i2cd/i2cdetect\n"
+	      "       gpio usbp high/low\n"
+	      "       gpio gbr <channel>\n"
+	      "       gpio gbw <channel> <value>" ;	// No trailing newline needed here.
+
+
+#ifdef	NOT_FOR_NOW
+/*
+ * decodePin:
+ *	Decode a pin "number" which can actually be a pin name to represent
+ *	one of the Pi's on-board pins.
+ *********************************************************************************
+ */
+
+static int decodePin (const char *str)
+{
+
+// The first case - see if it's a number:
+
+  if (isdigit (str [0]))
+    return atoi (str) ;
+
+  return 0 ;
+}
+#endif
+
+
+/*
+ * changeOwner:
+ *	Change the ownership of the file to the real userId of the calling
+ *	program so we can access it.
+ *********************************************************************************
+ */
+
+static void changeOwner (char *cmd, char *file)
+{
+  uid_t uid = getuid () ;
+  uid_t gid = getgid () ;
+
+  if (chown (file, uid, gid) != 0)
+  {
+    if (errno == ENOENT)	// Warn that it's not there
+      fprintf (stderr, "%s: Warning: File not present: %s\n", cmd, file) ;
+    else
+    {
+      fprintf (stderr, "%s: Unable to change ownership of %s: %s\n", cmd, file, strerror (errno)) ;
+      exit (1) ;
+    }
+  }
+}
+
+
+/*
+ * moduleLoaded:
+ *	Return true/false if the supplied module is loaded
+ *********************************************************************************
+ */
+
+static int moduleLoaded (char *modName)
+{
+  int len   = strlen (modName) ;
+  int found = FALSE ;
+  FILE *fd = fopen ("/proc/modules", "r") ;
+  char line [80] ;
+
+  if (fd == NULL)
+  {
+    fprintf (stderr, "gpio: Unable to check modules: %s\n", strerror (errno)) ;
+    exit (1) ;
+  }
+
+  while (fgets (line, 80, fd) != NULL)
+  {
+    if (strncmp (line, modName, len) != 0)
+      continue ;
+
+    found = TRUE ;
+    break ;
+  }
+
+  fclose (fd) ;
+
+  return found ;
+}
+
+
+/*
+ * doLoad:
+ *	Load either the spi or i2c modules and change device ownerships, etc.
+ *********************************************************************************
+ */
+
+static void _doLoadUsage (char *argv [])
+{
+  fprintf (stderr, "Usage: %s load <spi/i2c> [SPI bufferSize in KB | I2C baudrate in Kb/sec]\n", argv [0]) ;
+  exit (1) ;
+}
+
+static void doLoad (int argc, char *argv [])
+{
+  char *module1, *module2 ;
+  char cmd [80] ;
+  char *file1, *file2 ;
+  char args1 [32], args2 [32] ;
+
+  if (argc < 3)
+    _doLoadUsage (argv) ;
+
+  args1 [0] = args2 [0] = 0 ;
+
+  /**/ if (strcasecmp (argv [2], "spi") == 0)
+  {
+    module1 = "spidev" ;
+    module2 = "spi_bcm2708" ;
+    file1  = "/dev/spidev0.0" ;
+    file2  = "/dev/spidev0.1" ;
+    if (argc == 4)
+      sprintf (args1, " bufsiz=%d", atoi (argv [3]) * 1024) ;
+    else if (argc > 4)
+      _doLoadUsage (argv) ;
+  }
+  else if (strcasecmp (argv [2], "i2c") == 0)
+  {
+    module1 = "i2c_dev" ;
+    module2 = "i2c_bcm2708" ;
+    file1  = "/dev/i2c-0" ;
+    file2  = "/dev/i2c-1" ;
+    if (argc == 4)
+      sprintf (args2, " baudrate=%d", atoi (argv [3]) * 1000) ;
+    else if (argc > 4)
+      _doLoadUsage (argv) ;
+  }
+  else
+    _doLoadUsage (argv) ;
+
+  if (piModel == PI_MODEL_ODROIDC  ||
+      piModel == PI_MODEL_ODROIDC2 ||
+      piModel == PI_MODEL_ODROIDXU_34)  {
+    if (strcasecmp (argv [2], "i2c") == 0)  {
+      if (piModel == PI_MODEL_ODROIDC || piModel == PI_MODEL_ODROIDC2)  {
+        module1 = "aml-i2c";
+        file1 = "/dev/i2c-1";
+        file2 = "/dev/i2c-2";
+
+        if (!moduleLoaded(module1))  {
+          sprintf (cmd, "PATH=/bin:/usr/bin:/sbin:/usr/local/bin modprobe %s", module1) ;
+          system (cmd) ;
+        }
+      }
+      else {
+        file1 = "/dev/i2c-4";	/* i2c smbus : 0x12c70000 */
+        file2 = "/dev/i2c-1";	/* hsi2c : 0x12cb0000 */
+      }
+
+      sleep (1) ;	// To let things get settled
+      changeOwner (argv [0], file1) ;
+      changeOwner (argv [0], file2) ;
+    }
+    else  {
+      if (piModel == PI_MODEL_ODROIDC2) {
+          fprintf (stderr, "ODROID-C2 : H/W SPI not support!\n") ;
+          return;
+      }
+      if (piModel == PI_MODEL_ODROIDC)  {
+        file1 = "/dev/spidev0.0";
+        module1 = "spidev";
+        module2 = "spicc";
+        if (!moduleLoaded(module1))  {
+          sprintf (cmd, "PATH=/bin:/usr/bin:/sbin:/usr/local/bin modprobe %s%s", module1, args1) ;
+          system (cmd) ;
+        }
+        if (!moduleLoaded(module2))  {
+          sprintf (cmd, "PATH=/bin:/usr/bin:/sbin:/usr/local/bin modprobe %s", module2) ;
+          system (cmd) ;
+        }
+        if (!moduleLoaded (module2))
+        {
+          fprintf (stderr, "%s: Unable to load %s\n", argv [0], module2) ;
+          exit (1) ;
+        }
+
+        sleep (1) ;	// To let things get settled
+        changeOwner (argv [0], file1) ;
+      }
+      else {
+        module1 = "spidev";
+        file1 = "/dev/spidev1.0";
+
+        if (!moduleLoaded (module1))
+        {
+          fprintf (stderr, "%s: Unable to load %s\n", argv [0], module1) ;
+          fprintf (stderr, "\nYou need modified dtb file for spidev.\n");
+          fprintf (stderr, "\nstep 1)\n");
+          fprintf (stderr, "  - install device-tree-compiler.\n");
+          fprintf (stderr, "    sudo apt-get install device-tree-compiler\n");
+          fprintf (stderr, "\nstep 2)\n");
+          fprintf (stderr, "  - modified dtb file.\n");
+          fprintf (stderr, "    sudo -s\n");
+          fprintf (stderr, "    fdtput -c /media/boot/exynos5422-odroidxu3.dtb /spi@12d30000/spidev\n");
+          fprintf (stderr, "    fdtput -t s /media/boot/exynos5422-odroidxu3.dtb /spi@12d30000/spidev compatible \"spidev\"\n");
+          fprintf (stderr, "    fdtput -t x /media/boot/exynos5422-odroidxu3.dtb /spi@12d30000/spidev reg 0\n");
+          fprintf (stderr, "    fdtput -t i /media/boot/exynos5422-odroidxu3.dtb /spi@12d30000/spidev spi-max-frequency 20000000\n");
+          fprintf (stderr, "    fdtput -c /media/boot/exynos5422-odroidxu3.dtb /spi@12d30000/spidev/controller-data\n");
+          fprintf (stderr, "    fdtput -t x /media/boot/exynos5422-odroidxu3.dtb /spi@12d30000/spidev/controller-data cs-gpio 0x44, 0x5, 0x0\n");
+          fprintf (stderr, "    fdtput -t x /media/boot/exynos5422-odroidxu3.dtb /spi@12d30000/spidev/controller-data samsung,spi-feedback-delay 0\n");
+          fprintf (stderr, "\nstep 3)\n");
+          fprintf (stderr, "  - reboot system.\n");
+          fprintf (stderr, "    sudo reboot\n");
+          fprintf (stderr, "\nstep 4)\n");
+          fprintf (stderr, "  - check your SPI node.\n");
+          fprintf (stderr, "    ls /dev/spidev1.0\n");
+          // fdtput
+          exit (1) ;
+        }
+
+        sleep (1) ;	// To let things get settled
+        changeOwner (argv [0], file1) ;
+      }
+    }
+  }
+  else  {
+    if (!moduleLoaded (module1))
+    {
+      sprintf (cmd, "PATH=/bin:/usr/bin:/sbin:/usr/local/bin modprobe %s%s", module1, args1) ;
+      system (cmd) ;
+    }
+
+    if (!moduleLoaded (module2))
+    {
+      sprintf (cmd, "PATH=/bin:/usr/bin:/sbin:/usr/local/bin modprobe %s%s", module2, args2) ;
+      system (cmd) ;
+    }
+
+    if (!moduleLoaded (module2))
+    {
+      fprintf (stderr, "%s: Unable to load %s\n", argv [0], module2) ;
+      exit (1) ;
+    }
+    sleep (1) ;	// To let things get settled
+
+    changeOwner (argv [0], file1) ;
+    changeOwner (argv [0], file2) ;
+  }
+}
+
+
+/*
+ * doI2Cdetect:
+ *	Run the i2cdetect command with the right runes for this Pi revision
+ *********************************************************************************
+ */
+
+static void doI2Cdetect (int argc, char *argv [])
+{
+  int port = piBoardRev () == 1 ? 0 : 1 ;
+  char command [128] ;
+  struct stat statBuf ;
+
+  if (stat (I2CDETECT, &statBuf) < 0)
+  {
+    fprintf (stderr, "%s: Unable to find i2cdetect command: %s\n", argv [0], strerror (errno)) ;
+    return ;
+  }
+
+  if (!moduleLoaded ("i2c_dev"))
+  {
+    fprintf (stderr, "%s: The I2C kernel module(s) are not loaded.\n", argv [0]) ;
+    return ;
+  }
+
+  sprintf (command, "%s -y %d", I2CDETECT, port) ;
+  if (system (command) < 0)
+    fprintf (stderr, "%s: Unable to run i2cdetect: %s\n", argv [0], strerror (errno)) ;
+
+}
+
+
+/*
+ * doExports:
+ *	List all GPIO exports
+ *********************************************************************************
+ */
+
+static void doExports (int argc, char *argv [])
+{
+  int fd ;
+  int i, l, first ;
+  char fName [128] ;
+  char buf [16] ;
+
+  // ODROIDC GPIO Max 128, ODROIDXU_34 GPIO Max 256
+  for (first = 0, i = 0 ; i < 256 ; ++i)	// Crude, but effective
+  {
+
+// Try to read the direction
+
+    sprintf (fName, "/sys/class/gpio/gpio%d/direction", i) ;
+    if ((fd = open (fName, O_RDONLY)) == -1)
+      continue ;
+
+    if (first == 0)
+    {
+      ++first ;
+      printf ("GPIO Pins exported:\n") ;
+    }
+
+    printf ("%4d: ", i) ;
+
+    if ((l = read (fd, buf, 16)) == 0)
+      sprintf (buf, "%s", "?") ;
+ 
+    buf [l] = 0 ;
+    if ((buf [strlen (buf) - 1]) == '\n')
+      buf [strlen (buf) - 1] = 0 ;
+
+    printf ("%-3s", buf) ;
+
+    close (fd) ;
+
+// Try to Read the value
+
+    sprintf (fName, "/sys/class/gpio/gpio%d/value", i) ;
+    if ((fd = open (fName, O_RDONLY)) == -1)
+    {
+      printf ("No Value file (huh?)\n") ;
+      continue ;
+    }
+
+    if ((l = read (fd, buf, 16)) == 0)
+      sprintf (buf, "%s", "?") ;
+
+    buf [l] = 0 ;
+    if ((buf [strlen (buf) - 1]) == '\n')
+      buf [strlen (buf) - 1] = 0 ;
+
+    printf ("  %s", buf) ;
+
+// Read any edge trigger file
+
+    sprintf (fName, "/sys/class/gpio/gpio%d/edge", i) ;
+    if ((fd = open (fName, O_RDONLY)) == -1)
+    {
+      printf ("\n") ;
+      continue ;
+    }
+
+    if ((l = read (fd, buf, 16)) == 0)
+      sprintf (buf, "%s", "?") ;
+
+    buf [l] = 0 ;
+    if ((buf [strlen (buf) - 1]) == '\n')
+      buf [strlen (buf) - 1] = 0 ;
+
+    printf ("  %-8s\n", buf) ;
+
+    close (fd) ;
+  }
+}
+
+
+/*
+ * doExport:
+ *	gpio export pin mode
+ *	This uses the /sys/class/gpio device interface.
+ *********************************************************************************
+ */
+
+void doExport (int argc, char *argv [])
+{
+  FILE *fd ;
+  int pin ;
+  char *mode ;
+  char fName [128] ;
+
+  if (argc != 4)
+  {
+    fprintf (stderr, "Usage: %s export pin mode\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin = atoi (argv [2]) ;
+
+  mode = argv [3] ;
+
+  sprintf (fName, "/sys/class/%s/export", "gpio");
+
+  if ((fd = fopen (fName, "w")) == NULL)
+  {
+    fprintf (stderr, "%s: Unable to open GPIO export interface: %s\n", argv [0], strerror (errno)) ;
+    exit (1) ;
+  }
+
+  fprintf (fd, "%d\n", pin) ;
+  fclose (fd) ;
+
+  sprintf (fName, "/sys/class/gpio/gpio%d/direction", pin) ;
+
+  if ((fd = fopen (fName, "w")) == NULL)
+  {
+    fprintf (stderr, "%s: Unable to open GPIO direction interface for pin %d: %s\n", argv [0], pin, strerror (errno)) ;
+    exit (1) ;
+  }
+
+  /**/ if ((strcasecmp (mode, "in")  == 0) || (strcasecmp (mode, "input")  == 0))
+    fprintf (fd, "in\n") ;
+  else if ((strcasecmp (mode, "out") == 0) || (strcasecmp (mode, "output") == 0))
+    fprintf (fd, "out\n") ;
+  else
+  {
+    fprintf (stderr, "%s: Invalid mode: %s. Should be in or out\n", argv [1], mode) ;
+    exit (1) ;
+  }
+
+  fclose (fd) ;
+
+// Change ownership so the current user can actually use it!
+
+  sprintf (fName, "/sys/class/gpio/gpio%d/value", pin) ;
+
+  changeOwner (argv [0], fName) ;
+
+  sprintf (fName, "/sys/class/gpio/gpio%d/edge", pin) ;
+
+  changeOwner (argv [0], fName) ;
+
+}
+
+
+/*
+ * doWfi:
+ *	gpio wfi pin mode
+ *	Wait for Interrupt on a given pin.
+ *	Slight cheat here - it's easier to actually use ISR now (which calls
+ *	gpio to set the pin modes!) then we simply sleep, and expect the thread
+ *	to exit the program. Crude but effective.
+ *********************************************************************************
+ */
+
+static void wfi (void)
+  { exit (0) ; }
+
+void doWfi (int argc, char *argv [])
+{
+  int pin, mode ;
+
+  if (argc != 4)
+  {
+    fprintf (stderr, "Usage: %s wfi pin mode\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin  = atoi (argv [2]) ;
+
+  /**/ if (strcasecmp (argv [3], "rising")  == 0) mode = INT_EDGE_RISING ;
+  else if (strcasecmp (argv [3], "falling") == 0) mode = INT_EDGE_FALLING ;
+  else if (strcasecmp (argv [3], "both")    == 0) mode = INT_EDGE_BOTH ;
+  else
+  {
+    fprintf (stderr, "%s: wfi: Invalid mode: %s. Should be rising, falling or both\n", argv [1], argv [3]) ;
+    exit (1) ;
+  }
+
+  if (wiringPiISR (pin, mode, &wfi) < 0)
+  {
+    fprintf (stderr, "%s: wfi: Unable to setup ISR: %s\n", argv [1], strerror (errno)) ;
+    exit (1) ;
+  }
+
+  for (;;)
+    delay (9999) ;
+}
+
+
+
+/*
+ * doEdge:
+ *	gpio edge pin mode
+ *	Easy access to changing the edge trigger on a GPIO pin
+ *	This uses the /sys/class/gpio device interface.
+ *********************************************************************************
+ */
+
+void doEdge (int argc, char *argv [])
+{
+  FILE *fd ;
+  int pin ;
+  char *mode ;
+  char fName [128] ;
+
+  // Reset irq gpio
+  doUnexport(3, argv);      // unexport argc == 3
+
+  if (argc != 4)
+  {
+    fprintf (stderr, "Usage: %s edge pin mode\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin  = atoi (argv [2]) ;
+  mode = argv [3] ;
+
+// Export the pin and set direction to input
+
+  sprintf (fName, "/sys/class/%s/export", "gpio");
+
+  if ((fd = fopen (fName, "w")) == NULL)
+  {
+    fprintf (stderr, "%s: Unable to open GPIO export interface: %s\n", argv [0], strerror (errno)) ;
+    exit (1) ;
+  }
+  fprintf (fd, "%d\n", pin) ;
+  fclose (fd) ;
+
+  sprintf (fName, "/sys/class/gpio/gpio%d/direction", pin);
+
+  if ((fd = fopen (fName, "w")) == NULL)
+  {
+    fprintf (stderr, "%s: Unable to open GPIO direction interface for pin %d: %s\n", argv [0], pin, strerror (errno)) ;
+    exit (1) ;
+  }
+
+  fprintf (fd, "in\n") ;
+  fclose (fd) ;
+
+  sprintf (fName, "/sys/class/gpio/gpio%d/edge", pin);
+
+  if ((fd = fopen (fName, "w")) == NULL)
+  {
+    fprintf (stderr, "%s: Unable to open GPIO edge interface for pin %d: %s\n", argv [0], pin, strerror (errno)) ;
+    exit (1) ;
+  }
+
+  /**/ if (strcasecmp (mode, "none")    == 0) fprintf (fd, "none\n") ;
+  else if (strcasecmp (mode, "rising")  == 0) fprintf (fd, "rising\n") ;
+  else if (strcasecmp (mode, "falling") == 0) fprintf (fd, "falling\n") ;
+  else if (strcasecmp (mode, "both")    == 0) fprintf (fd, "both\n") ;
+  else
+  {
+    fprintf (stderr, "%s: Invalid mode: %s. Should be none, rising, falling or both\n", argv [1], mode) ;
+    exit (1) ;
+  }
+
+// Change ownership of the value and edge files, so the current user can actually use it!
+
+  sprintf (fName, "/sys/class/gpio/gpio%d/value", pin);
+
+  changeOwner (argv [0], fName) ;
+
+  sprintf (fName, "/sys/class/gpio/gpio%d/edge", pin);
+
+  changeOwner (argv [0], fName) ;
+
+  fclose (fd) ;
+}
+
+
+/*
+ * doUnexport:
+ *	gpio unexport pin
+ *	This uses the /sys/class/gpio device interface.
+ *********************************************************************************
+ */
+
+void doUnexport (int argc, char *argv [])
+{
+  FILE *fd ;
+  int pin ;
+  char fName [128] ;
+
+  if (argc != 3)
+  {
+    fprintf (stderr, "Usage: %s unexport pin\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin = atoi (argv [2]) ;
+
+  sprintf (fName, "/sys/class/%s/unexport", "gpio") ;
+
+  if ((fd = fopen (fName, "w")) == NULL)
+  {
+    fprintf (stderr, "%s: Unable to open GPIO export interface\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  fprintf (fd, "%d\n", pin) ;
+  fclose (fd) ;
+}
+
+
+/*
+ * doUnexportAll:
+ *	gpio unexportall
+ *	Un-Export all the GPIO pins.
+ *	This uses the /sys/class/gpio device interface.
+ *********************************************************************************
+ */
+
+void doUnexportall (char *progName)
+{
+  FILE *fd ;
+  int pin ;
+
+  // ODROIDC GPIO Max 128, ODROIDXU_34 GPIO Max 256
+  for (pin = 0 ; pin < 256 ; ++pin)
+  {
+    if ((fd = fopen ("/sys/class/gpio/unexport", "w")) == NULL)
+    {
+      fprintf (stderr, "%s: Unable to open GPIO export interface\n", progName) ;
+      exit (1) ;
+    }
+    fprintf (fd, "%d\n", pin) ;
+    fclose (fd) ;
+  }
+}
+
+
+/*
+ * doResetExternal:
+ *	Load readallExternal, we try to do this with an external device.
+ *********************************************************************************
+ */
+
+static void doResetExternal (void)
+{
+  int pin ;
+
+  for (pin = wiringPiNodes->pinBase ; pin <= wiringPiNodes->pinMax ; ++pin)
+  {
+    pinMode         (pin, INPUT) ;
+    pullUpDnControl (pin, PUD_OFF) ;
+  }
+}
+
+
+/*
+ * doReset:
+ *	Reset the GPIO pins - as much as we can do
+ *********************************************************************************
+ */
+
+static void doReset (char *progName)
+{
+  int model, rev, mem, maker, overVolted ;
+  int pin, endPin ;
+
+  printf ("GPIO Reset is dangerous!\n") ;
+  printf (" - Do Not rely on this to do anything sensible!\n") ;
+
+  if (wiringPiNodes != NULL)	// External
+  {
+    doResetExternal () ;
+    return ;
+  }
+
+  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
+
+  /**/ if ((model == PI_MODEL_A)  || (model == PI_MODEL_B))
+    endPin = 16 ;
+  else if ((model == PI_MODEL_BP)       ||
+           (model == PI_MODEL_ODROIDC)  ||
+           (model == PI_MODEL_ODROIDC2) ||
+           (model == PI_MODEL_ODROIDXU_34))
+    endPin = 39 ;
+  else if (model == PI_MODEL_CM)
+  {
+    printf (" - Don't know how to reset a comput module:\n") ;
+    printf ("   Write a shell-script to reset the pins to the state you need.\n") ;
+    return ;
+  }
+  else
+  {
+    printf ("Oops - unable to determine board type... model: %d\n", model) ;
+    return ;
+  }
+
+  for (pin = 0 ; pin <= endPin ; ++pin)
+  {
+    if (wpiPinToGpio (pin) == -1)
+      continue ;
+
+    digitalWrite    (pin, LOW) ;
+    pinMode         (pin, INPUT) ;
+    pullUpDnControl (pin, PUD_OFF) ;
+  }
+}
+
+
+/*
+ * doMode:
+ *	gpio mode pin mode ...
+ *********************************************************************************
+ */
+
+void doMode (int argc, char *argv [])
+{
+  int pin ;
+  char *mode ;
+
+  if (argc != 4)
+  {
+    fprintf (stderr, "Usage: %s mode pin mode\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin = atoi (argv [2]) ;
+
+  mode = argv [3] ;
+
+  /**/ if (strcasecmp (mode, "in")      == 0) pinMode         (pin, INPUT) ;
+  else if (strcasecmp (mode, "input")   == 0) pinMode         (pin, INPUT) ;
+  else if (strcasecmp (mode, "out")     == 0) pinMode         (pin, OUTPUT) ;
+  else if (strcasecmp (mode, "output")  == 0) pinMode         (pin, OUTPUT) ;
+  else if (strcasecmp (mode, "pwm")     == 0) pinMode         (pin, PWM_OUTPUT) ;
+  else if (strcasecmp (mode, "pwmTone") == 0) pinMode         (pin, PWM_TONE_OUTPUT) ;
+  else if (strcasecmp (mode, "clock")   == 0) pinMode         (pin, GPIO_CLOCK) ;
+  else if (strcasecmp (mode, "up")      == 0) pullUpDnControl (pin, PUD_UP) ;
+  else if (strcasecmp (mode, "down")    == 0) pullUpDnControl (pin, PUD_DOWN) ;
+  else if (strcasecmp (mode, "tri")     == 0) pullUpDnControl (pin, PUD_OFF) ;
+  else if (strcasecmp (mode, "off")     == 0) pullUpDnControl (pin, PUD_OFF) ;
+
+// Undocumented
+
+  else if (strcasecmp (mode, "alt0")    == 0) pinModeAlt (pin, 0b100) ;
+  else if (strcasecmp (mode, "alt1")    == 0) pinModeAlt (pin, 0b101) ;
+  else if (strcasecmp (mode, "alt2")    == 0) pinModeAlt (pin, 0b110) ;
+  else if (strcasecmp (mode, "alt3")    == 0) pinModeAlt (pin, 0b111) ;
+  else if (strcasecmp (mode, "alt4")    == 0) pinModeAlt (pin, 0b011) ;
+  else if (strcasecmp (mode, "alt5")    == 0) pinModeAlt (pin, 0b010) ;
+  else
+  {
+    fprintf (stderr, "%s: Invalid mode: %s. Should be in/out/pwm/clock/up/down/tri\n", argv [1], mode) ;
+    exit (1) ;
+  }
+}
+
+
+/*
+ * doPadDrive:
+ *	gpio drive group value
+ *********************************************************************************
+ */
+
+static void doPadDrive (int argc, char *argv [])
+{
+  int group, val ;
+
+  if (argc != 4)
+  {
+    fprintf (stderr, "Usage: %s drive group value\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  group = atoi (argv [2]) ;
+  val   = atoi (argv [3]) ;
+
+  if ((group < 0) || (group > 2))
+  {
+    fprintf (stderr, "%s: drive group not 0, 1 or 2: %d\n", argv [0], group) ;
+    exit (1) ;
+  }
+
+  if ((val < 0) || (val > 7))
+  {
+    fprintf (stderr, "%s: drive value not 0-7: %d\n", argv [0], val) ;
+    exit (1) ;
+  }
+
+  setPadDrive (group, val) ;
+}
+
+
+/*
+ * doUsbP:
+ *	Control USB Power - High (1.2A) or Low (600mA)
+ *	gpio usbp high/low
+ *********************************************************************************
+ */
+
+static void doUsbP (int argc, char *argv [])
+{
+  int model, rev, mem, maker, overVolted ;
+
+  if (argc != 3)
+  {
+    fprintf (stderr, "Usage: %s usbp high|low\n", argv [0]) ;
+    exit (1) ;
+  }
+
+// Make sure we're on a B+
+
+  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
+
+  if (model != PI_MODEL_BP)
+  {
+    fprintf (stderr, "USB power contol is applicable to B+ boards only.\n") ;
+    exit (1) ;
+  }
+    
+// Need to force BCM_GPIO mode:
+
+  wiringPiSetupGpio () ;
+
+  if ((strcasecmp (argv [2], "high") == 0) || (strcasecmp (argv [2], "hi") == 0))
+  {
+    digitalWrite (PI_USB_POWER_CONTROL, 1) ;
+    pinMode (PI_USB_POWER_CONTROL, OUTPUT) ;
+    printf ("Switched to HIGH current USB (1.2A)\n") ;
+    return ;
+  }
+
+  if ((strcasecmp (argv [2], "low") == 0) || (strcasecmp (argv [2], "lo") == 0))
+  {
+    digitalWrite (PI_USB_POWER_CONTROL, 0) ;
+    pinMode (PI_USB_POWER_CONTROL, OUTPUT) ;
+    printf ("Switched to LOW current USB (600mA)\n") ;
+    return ;
+  }
+
+  fprintf (stderr, "Usage: %s usbp high|low\n", argv [0]) ;
+  exit (1) ;
+}
+
+
+/*
+ * doGbw:
+ *	gpio gbw channel value
+ *	Gertboard Write - To the Analog output
+ *********************************************************************************
+ */
+
+static void doGbw (int argc, char *argv [])
+{
+  int channel, value ;
+
+  if (argc != 4)
+  {
+    fprintf (stderr, "Usage: %s gbw <channel> <value>\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  channel = atoi (argv [2]) ;
+  value   = atoi (argv [3]) ;
+
+  if ((channel < 0) || (channel > 1))
+  {
+    fprintf (stderr, "%s: gbw: Channel number must be 0 or 1\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  if ((value < 0) || (value > 255))
+  {
+    fprintf (stderr, "%s: gbw: Value must be from 0 to 255\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  if (gertboardAnalogSetup (64) < 0)
+  {
+    fprintf (stderr, "Unable to initialise the Gertboard SPI interface: %s\n", strerror (errno)) ;
+    exit (1) ;
+  }
+
+  analogWrite (64 + channel, value) ;
+}
+
+
+/*
+ * doGbr:
+ *	gpio gbr channel
+ *	From the analog input
+ *********************************************************************************
+ */
+
+static void doGbr (int argc, char *argv [])
+{
+  int channel ;
+
+  if (argc != 3)
+  {
+    fprintf (stderr, "Usage: %s gbr <channel>\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  channel = atoi (argv [2]) ;
+
+  if ((channel < 0) || (channel > 1))
+  {
+    fprintf (stderr, "%s: gbr: Channel number must be 0 or 1\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  if (gertboardAnalogSetup (64) < 0)
+  {
+    fprintf (stderr, "Unable to initialise the Gertboard SPI interface: %s\n", strerror (errno)) ;
+    exit (1) ;
+  }
+
+  printf ("%d\n", analogRead (64 + channel)) ;
+}
+
+
+/*
+ * doWrite:
+ *	gpio write pin value
+ *********************************************************************************
+ */
+
+static void doWrite (int argc, char *argv [])
+{
+  int pin, val ;
+
+  if (argc != 4)
+  {
+    fprintf (stderr, "Usage: %s write pin value\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin = atoi (argv [2]) ;
+
+  /**/ if ((strcasecmp (argv [3], "up") == 0) || (strcasecmp (argv [3], "on") == 0))
+    val = 1 ;
+  else if ((strcasecmp (argv [3], "down") == 0) || (strcasecmp (argv [3], "off") == 0))
+    val = 0 ;
+  else
+    val = atoi (argv [3]) ;
+
+  /**/ if (val == 0)
+    digitalWrite (pin, LOW) ;
+  else
+    digitalWrite (pin, HIGH) ;
+}
+
+
+/*
+ * doAwriterite:
+ *	gpio awrite pin value
+ *********************************************************************************
+ */
+
+static void doAwrite (int argc, char *argv [])
+{
+  int pin, val ;
+
+  if (argc != 4)
+  {
+    fprintf (stderr, "Usage: %s awrite pin value\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin = atoi (argv [2]) ;
+
+  val = atoi (argv [3]) ;
+
+  analogWrite (pin, val) ;
+}
+
+
+/*
+ * doWriteByte:
+ *	gpio write value
+ *********************************************************************************
+ */
+
+static void doWriteByte (int argc, char *argv [])
+{
+  int val ;
+
+  if (argc != 3)
+  {
+    fprintf (stderr, "Usage: %s wb value\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  val = (int)strtol (argv [2], NULL, 0) ;
+
+  digitalWriteByte (val) ;
+}
+
+
+/*
+ * doRead:
+ *	Read a pin and return the value
+ *********************************************************************************
+ */
+
+void doRead (int argc, char *argv []) 
+{
+  int pin, val ;
+
+  if (argc != 3)
+  {
+    fprintf (stderr, "Usage: %s read pin\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin = atoi (argv [2]) ;
+  val = digitalRead (pin) ;
+
+  printf ("%s\n", val == 0 ? "0" : "1") ;
+}
+
+
+/*
+ * doAread:
+ *	Read an analog pin and return the value
+ *********************************************************************************
+ */
+
+void doAread (int argc, char *argv []) 
+{
+  if (argc != 3)
+  {
+    fprintf (stderr, "Usage: %s aread pin\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  printf ("%d\n", analogRead (atoi (argv [2]))) ;
+}
+
+
+/*
+ * doToggle:
+ *	Toggle an IO pin
+ *********************************************************************************
+ */
+
+void doToggle (int argc, char *argv [])
+{
+  int pin ;
+
+  if (argc != 3)
+  {
+    fprintf (stderr, "Usage: %s toggle pin\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin = atoi (argv [2]) ;
+
+  digitalWrite (pin, !digitalRead (pin)) ;
+}
+
+
+/*
+ * doPwmTone:
+ *	Output a tone in a PWM pin
+ *********************************************************************************
+ */
+
+void doPwmTone (int argc, char *argv [])
+{
+  int pin, freq ;
+
+  if (argc != 4)
+  {
+    fprintf (stderr, "Usage: %s pwmTone <pin> <freq>\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin = atoi (argv [2]) ;
+  freq = atoi (argv [3]) ;
+
+  pwmToneWrite (pin, freq) ;
+}
+
+
+/*
+ * doClock:
+ *	Output a clock on a pin
+ *********************************************************************************
+ */
+
+void doClock (int argc, char *argv [])
+{
+  int pin, freq ;
+
+  if (argc != 4)
+  {
+    fprintf (stderr, "Usage: %s clock <pin> <freq>\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin = atoi (argv [2]) ;
+
+  freq = atoi (argv [3]) ;
+
+  gpioClockSet (pin, freq) ;
+}
+
+
+/*
+ * doPwm:
+ *	Output a PWM value on a pin
+ *********************************************************************************
+ */
+
+void doPwm (int argc, char *argv [])
+{
+  int pin, val ;
+
+  if (argc != 4)
+  {
+    fprintf (stderr, "Usage: %s pwm <pin> <value>\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pin = atoi (argv [2]) ;
+
+  val = atoi (argv [3]) ;
+
+  pwmWrite (pin, val) ;
+}
+
+
+/*
+ * doPwmMode: doPwmRange: doPwmClock:
+ *	Change the PWM mode, range and clock divider values
+ *********************************************************************************
+ */
+
+static void doPwmMode (int mode)
+{
+  pwmSetMode (mode) ;
+}
+
+static void doPwmRange (int argc, char *argv [])
+{
+  unsigned int range ;
+
+  if (argc != 3)
+  {
+    fprintf (stderr, "Usage: %s pwmr <range>\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  range = (unsigned int)strtoul (argv [2], NULL, 10) ;
+
+  if (range == 0)
+  {
+    fprintf (stderr, "%s: range must be > 0\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pwmSetRange (range) ;
+}
+
+static void doPwmClock (int argc, char *argv [])
+{
+  unsigned int clock ;
+
+  if (argc != 3)
+  {
+    fprintf (stderr, "Usage: %s pwmc <clock>\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  clock = (unsigned int)strtoul (argv [2], NULL, 10) ;
+
+  if ((clock < 1) || (clock > 4095))
+  {
+    fprintf (stderr, "%s: clock must be between 0 and 4096\n", argv [0]) ;
+    exit (1) ;
+  }
+
+  pwmSetClock (clock) ;
+}
+
+
+/*
+ * main:
+ *	Start here
+ *********************************************************************************
+ */
+
+int main (int argc, char *argv [])
+{
+  int i ;
+  int model, rev, mem, maker, overVolted ;
+
+  if (getenv ("WIRINGPI_DEBUG") != NULL)
+  {
+    printf ("gpio: wiringPi debug mode enabled\n") ;
+    wiringPiDebug = TRUE ;
+  }
+
+  if (argc == 1)
+  {
+    fprintf (stderr, "%s\n", usage) ;
+    return 1 ;
+  }
+
+// Help
+
+  if (strcasecmp (argv [1], "-h") == 0)
+  {
+    printf ("%s: %s\n", argv [0], usage) ;
+    return 0 ;
+  }
+
+// Sort of a special:
+
+  if (strcmp (argv [1], "-R") == 0)
+  {
+    printf ("%d\n", piBoardRev ()) ;
+    return 0 ;
+  }
+
+// Version & Warranty
+
+  if (strcmp (argv [1], "-V") == 0)
+  {
+    printf ("%d\n", piBoardRev ()) ;
+    return 0 ;
+  }
+
+  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
+  piModel = model;
+
+  if (strcmp (argv [1], "-v") == 0)
+  {
+    printf ("gpio version: %s\n", VERSION) ;
+    printf ("Copyright (c) 2012-2014 Gordon Henderson\n") ;
+    printf ("This is free software with ABSOLUTELY NO WARRANTY.\n") ;
+    printf ("For details type: %s -warranty\n", argv [0]) ;
+    printf ("\n") ;
+    if (model == PI_MODEL_UNKNOWN)
+    {
+      printf ("Your Raspberry Pi has an unknown model type. Please report this to\n") ;
+      printf ("    projects@drogon.net\n") ;
+      printf ("with a copy of your /proc/cpuinfo if possible\n") ;
+    }
+    else if ( model == PI_MODEL_ODROIDC     ||
+              model == PI_MODEL_ODROIDXU_34 ||
+              model == PI_MODEL_ODROIDC2      )
+    {
+      printf ("Hardkernel ODROID Details:\n") ;
+      printf ("  Type: %s, Revision: %s, Memory: %dMB, Maker: %s\n",
+      piModelNames [model], piRevisionNames [rev], mem, piMakerNames [maker]) ;
+    }
+    else
+    {
+      printf ("Raspberry Pi Details:\n") ;
+      printf ("  Type: %s, Revision: %s, Memory: %dMB, Maker: %s %s\n", 
+      piModelNames [model], piRevisionNames [rev], mem, piMakerNames [maker], overVolted ? "[OV]" : "") ;
+    }
+    return 0 ;
+  }
+
+  if (strcasecmp (argv [1], "-warranty") == 0)
+  {
+    printf ("gpio version: %s\n", VERSION) ;
+    printf ("Copyright (c) 2012-2014 Gordon Henderson\n") ;
+    printf ("\n") ;
+    printf ("    This program is free software; you can redistribute it and/or modify\n") ;
+    printf ("    it under the terms of the GNU Leser General Public License as published\n") ;
+    printf ("    by the Free Software Foundation, either version 3 of the License, or\n") ;
+    printf ("    (at your option) any later version.\n") ;
+    printf ("\n") ;
+    printf ("    This program is distributed in the hope that it will be useful,\n") ;
+    printf ("    but WITHOUT ANY WARRANTY; without even the implied warranty of\n") ;
+    printf ("    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n") ;
+    printf ("    GNU Lesser General Public License for more details.\n") ;
+    printf ("\n") ;
+    printf ("    You should have received a copy of the GNU Lesser General Public License\n") ;
+    printf ("    along with this program. If not, see <http://www.gnu.org/licenses/>.\n") ;
+    printf ("\n") ;
+    return 0 ;
+  }
+
+  if (geteuid () != 0)
+  {
+    fprintf (stderr, "%s: Must be root to run. Program should be suid root. This is an error.\n", argv [0]) ;
+    return 1 ;
+  }
+
+// Initial test for /sys/class/gpio operations:
+
+  /**/ if (strcasecmp (argv [1], "exports"    ) == 0)	{ doExports     (argc, argv) ;	return 0 ; }
+  else if (strcasecmp (argv [1], "export"     ) == 0)	{ doExport      (argc, argv) ;	return 0 ; }
+  else if (strcasecmp (argv [1], "edge"       ) == 0)	{ doEdge        (argc, argv) ;	return 0 ; }
+  else if (strcasecmp (argv [1], "unexport"   ) == 0)	{ doUnexport    (argc, argv) ;	return 0 ; }
+  else if (strcasecmp (argv [1], "unexportall") == 0)	{ doUnexportall (argv [0]) ;	return 0 ; }
+
+// Check for load command:
+
+  if (strcasecmp (argv [1], "load" ) == 0)	{ doLoad     (argc, argv) ; return 0 ; }
+
+// Gertboard commands
+
+  if (strcasecmp (argv [1], "gbr" ) == 0)	{ doGbr (argc, argv) ; return 0 ; }
+  if (strcasecmp (argv [1], "gbw" ) == 0)	{ doGbw (argc, argv) ; return 0 ; }
+
+// Check for -g argument
+
+  /**/ if (strcasecmp (argv [1], "-g") == 0)
+  {
+    wiringPiSetupGpio () ;
+
+    for (i = 2 ; i < argc ; ++i)
+      argv [i - 1] = argv [i] ;
+    --argc ;
+    wpMode = WPI_MODE_GPIO ;
+  }
+
+// Check for -1 argument
+
+  else if (strcasecmp (argv [1], "-1") == 0)
+  {
+    wiringPiSetupPhys () ;
+
+    for (i = 2 ; i < argc ; ++i)
+      argv [i - 1] = argv [i] ;
+    --argc ;
+    wpMode = WPI_MODE_PHYS ;
+  }
+
+// Check for -p argument for PiFace
+
+  else if (strcasecmp (argv [1], "-p") == 0)
+  {
+    piFaceSetup (200) ;
+
+    for (i = 2 ; i < argc ; ++i)
+      argv [i - 1] = argv [i] ;
+    --argc ;
+    wpMode = WPI_MODE_PIFACE ;
+  }
+
+// Default to wiringPi mode
+
+  else
+  {
+    wiringPiSetup () ;
+    wpMode = WPI_MODE_PINS ;
+  }
+
+// Check for -x argument to load in a new extension
+
+  if (strcasecmp (argv [1], "-x") == 0)
+  {
+    if (argc < 3)
+    {
+      fprintf (stderr, "%s: -x missing extension specification.\n", argv [0]) ;
+      exit (EXIT_FAILURE) ;
+    }
+
+    if (!doExtension (argv [0], argv [2]))	// Prints its own error messages
+      exit (EXIT_FAILURE) ;
+
+    for (i = 3 ; i < argc ; ++i)
+      argv [i - 2] = argv [i] ;
+    argc -= 2 ;
+  }
+
+  if (argc <= 1)
+  {
+    fprintf (stderr, "%s: no command given\n", argv [0]) ;
+    exit (EXIT_FAILURE) ;
+  }
+
+// Core wiringPi functions
+
+  /**/ if (strcasecmp (argv [1], "mode"   ) == 0) doMode      (argc, argv) ;
+  else if (strcasecmp (argv [1], "read"   ) == 0) doRead      (argc, argv) ;
+  else if (strcasecmp (argv [1], "write"  ) == 0) doWrite     (argc, argv) ;
+  else if (strcasecmp (argv [1], "pwm"    ) == 0) doPwm       (argc, argv) ;
+  else if (strcasecmp (argv [1], "awrite" ) == 0) doAwrite    (argc, argv) ;
+  else if (strcasecmp (argv [1], "aread"  ) == 0) doAread     (argc, argv) ;
+
+// GPIO Nicies
+
+  else if (strcasecmp (argv [1], "toggle" ) == 0) doToggle    (argc, argv) ;
+
+// Pi Specifics
+
+  else if (strcasecmp (argv [1], "pwm-bal"  ) == 0) doPwmMode    (PWM_MODE_BAL) ;
+  else if (strcasecmp (argv [1], "pwm-ms"   ) == 0) doPwmMode    (PWM_MODE_MS) ;
+  else if (strcasecmp (argv [1], "pwmr"     ) == 0) doPwmRange   (argc, argv) ;
+  else if (strcasecmp (argv [1], "pwmc"     ) == 0) doPwmClock   (argc, argv) ;
+  else if (strcasecmp (argv [1], "pwmTone"  ) == 0) doPwmTone    (argc, argv) ;
+  else if (strcasecmp (argv [1], "drive"    ) == 0) doPadDrive   (argc, argv) ;
+  else if (strcasecmp (argv [1], "usbp"     ) == 0) doUsbP       (argc, argv) ;
+  else if (strcasecmp (argv [1], "readall"  ) == 0) doReadall    () ;
+  else if (strcasecmp (argv [1], "nreadall" ) == 0) doReadall    () ;
+  else if (strcasecmp (argv [1], "pins"     ) == 0) doPins       () ;
+  else if (strcasecmp (argv [1], "i2cdetect") == 0) doI2Cdetect  (argc, argv) ;
+  else if (strcasecmp (argv [1], "i2cd"     ) == 0) doI2Cdetect  (argc, argv) ;
+  else if (strcasecmp (argv [1], "reset"    ) == 0) doReset      (argv [0]) ;
+  else if (strcasecmp (argv [1], "wb"       ) == 0) doWriteByte  (argc, argv) ;
+  else if (strcasecmp (argv [1], "clock"    ) == 0) doClock      (argc, argv) ;
+  else if (strcasecmp (argv [1], "wfi"      ) == 0) doWfi        (argc, argv) ;
+  else
+  {
+    fprintf (stderr, "%s: Unknown command: %s.\n", argv [0], argv [1]) ;
+    exit (EXIT_FAILURE) ;
+  }
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/gpio/gpio.o b/modules/catkin_ws/src/wiringPi/gpio/gpio.o
new file mode 100644
index 0000000000000000000000000000000000000000..4246715057cf41d1fd0910f7952b41567237be7a
GIT binary patch
literal 40688
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

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/gpio/pins.c b/modules/catkin_ws/src/wiringPi/gpio/pins.c
new file mode 100644
index 00000000..19fcc1af
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/gpio/pins.c
@@ -0,0 +1,33 @@
+/*
+ * pins.c:
+ *	Just display a handy Pi pinnout diagram.
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+#include <stdio.h>
+
+void doPins (void)
+{
+  printf ("The pins command has been deprecated - sorry. Please use the\n") ;
+  printf ("  gpio readall\n") ;
+  printf ("command to get a list of the pinnouts for your Pi.\n") ;
+}
+
diff --git a/modules/catkin_ws/src/wiringPi/gpio/pins.o b/modules/catkin_ws/src/wiringPi/gpio/pins.o
new file mode 100644
index 0000000000000000000000000000000000000000..eb996a8ebdbd77ef4c51baa9c9c36981c01d65ff
GIT binary patch
literal 1936
zcmbVM&2G~`5S}zZ1B5n396&{4#Q}jtR!-GMEe8~-Kzl$CA$kO~Nj5*KV@LK{Gzh_=
z65`lL;7z#j0Ni;2KwP*Zl^JKJaW~GTBdurVoB3wfvtxgJ{Pf8}p#UrecnDLEQGoBo
zsohA;1}sAvb`SrQzLNiw9*(tp_^tGdaDbP6Ek=VN7VU62R6$4dRV-Rs2cn}#k!~xa
zJEAJ$Fp9=fG<~gNEfQR&uZhnz6N;WTLJ5Bm8xeLXPKARoF|p`|kr;<bB$@*WLi9$1
zP()gFl<x!VY;QjhclTOJU=pz**QHmjC#hHaP^(LCU2ff*;9||I)xEm61#pcvM=88}
z0fmD~VYR$iI>H7Kelv{#+#&sFsq$*6WRY1#Jv|41k7pwQ#oUe)o@si9Sj0+sQiSt)
zFjl!R2Vb0nUz~$qnuE{2Hz8Lu@0Iolv1MG9yec#tvJIWEi3W`DHq$JABifm53h+r5
z&@SWpcRUfQPeSqRTk}1-`8U$+Nj}wYSpT-wZobIi6gv?akB3IJK*lDT=ssJK_LVgH
zz<}&1qd>Oe7-STZL+LfSdD^W(nl6*TAM9&?43frQ2Us8ojg~vl_NuW_?R}(CZQXy<
zjnq(|9OmqXKq}2@ws%ymK@SwZ$B8$4m#Y|{>1=R<)n9D0j;wzLHSNQbbKT-ppKy2b
zyEg7B%FW7sbg1T8`8DKH%{5$E>04(qmD32HpU=_2P#*t>rSN=m1?I7SZuxHie>1_+
z%wzbq<$DZR&HN1qXFltm<vVF`ixZrH3%|GgQ{M(+!X~=s;{I{jw`k<ek7qBG=Y-~m
zzH#O=zJi#0_XxqR1wWCK5%>J$yJx5LrcK<mdI_=1xZM5e&zZOXXIqs2LztF|yZ?W;
CSET9y

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/gpio/pintest b/modules/catkin_ws/src/wiringPi/gpio/pintest
new file mode 100755
index 00000000..83ca12a5
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/gpio/pintest
@@ -0,0 +1,193 @@
+#!/bin/bash
+#
+# pintest
+#	Test the Pi's GPIO port
+# Copyright (c) 2013 Gordon Henderson
+#################################################################################
+# This file is part of wiringPi:
+#	Wiring Compatable library for the Raspberry Pi
+#
+#    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 <http://www.gnu.org/licenses/>.
+#################################################################################
+
+
+# logErr pin, expected got
+################################################################################
+
+logErr ()
+{
+  if [ $errs = 0 ]; then
+    echo ""
+  fi
+  echo " --> Pin $1 failure. Expected $2, got $3"
+  let errs+=1
+}
+
+
+# printErrorCount
+################################################################################
+
+printErrCount()
+{
+  if [ $errs = 0 ]; then
+    echo "No faults detected."
+  elif [ $errs = 1 ]; then
+    echo "One fault detected."
+  else
+    echo "$errs faults detected"
+  fi
+}
+
+
+# testPins start end
+################################################################################
+
+testPins()
+{
+  start=$1
+    end=$2
+   errs=0
+
+  printf "%30s %2d:%2d: "  "$3" $1 $2
+
+# Set range to inputs
+
+  for i in `seq $start $end`; do
+    gpio mode $i in
+  done
+
+# Enable internal pull-ups and expect to read high
+
+  for i in `seq $start $end`; do
+    gpio mode $i up
+    if [ `gpio read $i` = 0 ]; then
+      logErr $i 1 0
+    fi
+  done
+
+# Enable internal pull-downs and expect to read low
+
+  for i in `seq $start $end`; do
+    gpio mode $i down
+    if [ `gpio read $i` = 1 ]; then
+      echo "Pin $i failure - expected 0, got 1"
+      let errs+=1
+    fi
+  done
+
+# Remove the internal pull up/downs
+
+  for i in `seq $start $end`; do
+    gpio mode $i tri
+  done
+
+  if [ $errs = 0 ]; then
+    echo " OK"
+  else
+    printErrCount
+  fi
+
+  let totErrs+=errs
+}
+
+
+intro()
+{
+  revision=`gpio -V`
+  cat <<EOF
+PinTest
+=======
+
+This is a simple utility to test the GPIO pins on your revision $revision
+Raspberry Pi.
+
+NOTE: All GPIO peripherals must be removed to perform this test. This
+  includes serial, I2C and SPI connections. You may get incorrect results
+  if something is connected and it interferes with the test.
+
+This test can only test the input side of things. It uses the internal
+pull-up and pull-down resistors to simulate inputs. It does not test
+the output drivers.
+
+You will need to reboot your Pi after this test if you wish to use the 
+serial port as it will be left in GPIO mode rather than serial mode.
+
+Please make sure everything is removed and press the ENTER key to continue,
+EOF
+
+  echo -n "or Control-C to abort... "
+  read a
+}
+
+
+# Start here
+################################################################################
+
+intro
+gpio unexportall
+gpio reset
+
+   errs=0
+totErrs=0
+
+echo ""
+
+# Main pins
+
+testPins 0 7 "The main 8 GPIO pins"
+
+# P5 pins, if a rev 2:
+
+if [ $revision = 2 ]; then
+  testPins 17 20 "The 4 pins on the P5 connector"
+fi
+
+# SPI
+
+testPins 10 14 "The 5 SPI pins"
+
+# Serial
+
+testPins 15 16 "The serial pins"
+
+# I2C - Needs somewhat different testing
+#	due to the on-board pull-up's
+
+echo -n "                  The I2C pins  8: 9: "
+errs=0
+gpio mode 8 in
+gpio mode 9 in
+
+if [ `gpio read 8` = 0 ]; then
+  echo "Pin 8 failure - expected 1, got 0"
+  let errs+=1
+fi
+
+if [ `gpio read 9` = 0 ]; then
+  echo "Pin 9 failure - expected 1, got 0"
+  let errs+=1
+fi
+
+if [ $errs = 0 ]; then
+  echo " OK"
+else
+  printErrCount
+fi
+
+echo ""
+if [ $totErrs != 0 ]; then
+  echo ""
+  echo "Faults detected! Output of 'readall':"
+  gpio readall
+fi
diff --git a/modules/catkin_ws/src/wiringPi/gpio/readall.c b/modules/catkin_ws/src/wiringPi/gpio/readall.c
new file mode 100755
index 00000000..f05b2982
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/gpio/readall.c
@@ -0,0 +1,629 @@
+/*
+ * readall.c:
+ *	The readall functions - getting a bit big, so split them out.
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <ctype.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <wiringPi.h>
+
+extern int wpMode ;
+
+#ifndef TRUE
+#  define       TRUE    (1==1)
+#  define       FALSE   (1==2)
+#endif
+
+/*
+ * doReadallExternal:
+ *	A relatively crude way to read the pins on an external device.
+ *	We don't know the input/output mode of pins, but we can tell
+ *	if it's an analog pin or a digital one...
+ *********************************************************************************
+ */
+
+static void doReadallExternal (void)
+{
+  int pin ;
+
+  printf ("+------+---------+--------+\n") ;
+  printf ("|  Pin | Digital | Analog |\n") ;
+  printf ("+------+---------+--------+\n") ;
+
+  for (pin = wiringPiNodes->pinBase ; pin <= wiringPiNodes->pinMax ; ++pin)
+    printf ("| %4d |  %4d   |  %4d  |\n", pin, digitalRead (pin), analogRead (pin)) ;
+
+  printf ("+------+---------+--------+\n") ;
+}
+
+
+/*
+ * doReadall:
+ *	Read all the GPIO pins
+ *	We also want to use this to read the state of pins on an externally
+ *	connected device, so we need to do some fiddling with the internal
+ *	wiringPi node structures - since the gpio command can only use
+ *	one external device at a time, we'll use that to our advantage...
+ *********************************************************************************
+ */
+
+static char *alts [] =
+{
+  "IN", "OUT", "ALT5", "ALT4", "ALT0", "ALT1", "ALT2", "ALT3"
+} ;
+
+static int physToWpi [64] = 
+{
+  -1,           // 0
+  -1, -1,       // 1, 2
+   8, -1,
+   9, -1,
+   7, 15,
+  -1, 16,
+   0,  1,
+   2, -1,
+   3,  4,
+  -1,  5,
+  12, -1,
+  13,  6,
+  14, 10,
+  -1, 11,       // 25, 26
+  30, 31,	// Actually I2C, but not used
+  21, -1,
+  22, 26,
+  23, -1,
+  24, 27,
+  25, 28,
+  -1, 29,
+  -1, -1,
+  -1, -1,
+  -1, -1,
+  -1, -1,
+  -1, -1,
+  17, 18,
+  19, 20,
+  -1, -1, -1, -1, -1, -1, -1, -1, -1
+} ;
+
+static char *physNames [64] = 
+{
+  NULL,
+
+  "   3.3v", "5v     ",
+  "  SDA.1", "5V     ",
+  "  SCL.1", "0v     ",
+  "GPIO. 7", "TxD    ",
+  "     0v", "RxD    ",
+  "GPIO. 0", "GPIO. 1",
+  "GPIO. 2", "0v     ",
+  "GPIO. 3", "GPIO. 4",
+  "   3.3v", "GPIO. 5",
+  "   MOSI", "0v     ",
+  "   MISO", "GPIO. 6",
+  "   SCLK", "CE0    ",
+  "     0v", "CE1    ",
+  "  SDA.0", "SCL.0  ",
+  "GPIO.21", "0v     ",
+  "GPIO.22", "GPIO.26",
+  "GPIO.23", "0v     ",
+  "GPIO.24", "GPIO.27",
+  "GPIO.25", "GPIO.28",
+  "     0v", "GPIO.29",
+       NULL, NULL,
+       NULL, NULL,
+       NULL, NULL,
+       NULL, NULL,
+       NULL, NULL,
+  "GPIO.17", "GPIO.18",
+  "GPIO.19", "GPIO.20",
+   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+} ;
+
+static char *physNamesOdroidc [64] =
+{
+  NULL,
+
+  "    3.3v", "5v      ",
+  "   SDA.1", "5V      ",
+  "   SCL.1", "0v      ",
+  "GPIO. 83", "TxD1    ",
+  "      0v", "RxD1    ",
+  "GPIO. 88", "GPIO. 87",
+  "GPIO.116", "0v      ",
+  "GPIO.115", "GPIO.104",
+  "    3.3v", "GPIO.102",
+  "    MOSI", "0v      ",
+  "    MISO", "GPIO.103",
+  "    SCLK", "CE0     ",
+  "      0v", "GPIO.118",
+  "   SDA.2", "SCL.2   ",
+  "GPIO.101", "0v      ",
+  "GPIO.100", "GPIO. 99",
+  "GPIO.108", "0v      ",
+  "GPIO.97 ", "GPIO. 98",
+  "   AIN.1", "1v8     ",
+  "      0v", "AIN.0   ",
+
+   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+   NULL,NULL,NULL,
+} ;
+
+static char *physNamesOdroidc2_Rev1_1 [64] =
+{
+  NULL,
+
+  "    3.3v", "5v      ",
+  "   SDA.1", "5V      ",
+  "   SCL.1", "0v      ",
+  "GPIO.249", "TxD1    ",
+  "      0v", "RxD1    ",
+  "GPIO.247", "GPIO.238",
+  "GPIO.239", "0v      ",
+  "GPIO.237", "GPIO.236",
+  "    3.3v", "GPIO.233",
+  "GPIO.235", "0v      ",
+  "GPIO.232", "GPIO.231",
+  "GPIO.230", "GPIO.229",
+  "      0v", "GPIO.225",
+  "   SDA.2", "SCL.2   ",
+  "GPIO.228", "0v      ",
+  "GPIO.219", "GPIO.224",
+  "GPIO.234", "0v      ",
+  "GPIO.214", "GPIO.218",
+  "   AIN.1", "1v8     ",
+  "      0v", "AIN.0   ",
+
+   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+   NULL,NULL,NULL,
+} ;
+
+static char *physNamesOdroidc2_Rev1_0 [64] =
+{
+  NULL,
+
+  "    3.3v", "5v      ",
+  "   SDA.1", "5V      ",
+  "   SCL.1", "0v      ",
+  "GPIO.214", "--------",
+  "      0v", "--------",
+  "GPIO.219", "GPIO.218",
+  "GPIO.247", "0v      ",
+  "--------", "GPIO.235",
+  "    3.3v", "GPIO.233",
+  "GPIO.238", "0v      ",
+  "GPIO.237", "GPIO.234",
+  "GPIO.236", "GPIO.248",
+  "      0v", "GPIO.249",
+  "   SDA.2", "SCL.2   ",
+  "GPIO.232", "0v      ",
+  "GPIO.231", "GPIO.230",
+  "GPIO.239", "0v      ",
+  "GPIO.228", "GPIO.229",
+  "   AIN.1", "1v8     ",
+  "      0v", "AIN.0   ",
+
+   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+   NULL,NULL,NULL,
+} ;
+
+static char *physNamesOdroidXU [64] =
+{
+  NULL,
+
+  "    3.3v", "5v      ",
+  "I2C1.SDA", "5V      ",
+  "I2C1.SCL", "0v      ",
+  "GPIO. 18", "UART0.TX",
+  "      0v", "UART0.RX",
+  "GPIO.174", "GPIO.173",
+  "GPIO. 21", "0v      ",
+  "GPIO. 22", "GPIO. 19",
+  "    3.3v", "GPIO. 23",
+  "    MOSI", "0v      ",
+  "    MISO", "GPIO. 24",
+  "    SCLK", "CE0     ",
+  "      0v", "GPIO. 25",
+  "I2C5.SDA", "I2C5.SCL",
+  "GPIO. 28", "0v      ",
+  "GPIO. 30", "GPIO. 29",
+  "GPIO. 31", "0v      ",
+  "POWER ON", "GPIO. 33",
+  "   AIN.0", "1v8     ",
+  "      0v", "AIN.3   ",
+
+   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+   NULL,NULL,NULL,
+} ;
+
+/*
+ * readallPhys:
+ *	Given a physical pin output the data on it and the next pin:
+ *| BCM | wPi |   Name  | Mode | Val| Physical |Val | Mode | Name    | wPi | BCM |
+ *********************************************************************************
+ */
+
+static void readallPhys (int physPin)
+{
+  int pin ;
+
+  if (physPinToGpio (physPin) == -1)
+    printf (" |     |    ") ;
+  else
+    printf (" | %3d | %3d", physPinToGpio (physPin), physToWpi [physPin]) ;
+
+  printf (" | %s", physNames [physPin]) ;
+
+  if (physToWpi [physPin] == -1)
+    printf (" |      |  ") ;
+  else
+  {
+    /**/ if (wpMode == WPI_MODE_GPIO)
+      pin = physPinToGpio (physPin) ;
+    else if (wpMode == WPI_MODE_PHYS)
+      pin = physPin ;
+    else
+      pin = physToWpi [physPin] ;
+
+    printf (" | %4s", alts [getAlt (pin)]) ;
+    printf (" | %d", digitalRead (pin)) ;
+  }
+
+// Pin numbers:
+
+  printf (" | %2d", physPin) ;
+  ++physPin ;
+  printf (" || %-2d", physPin) ;
+
+// Same, reversed
+
+  if (physToWpi [physPin] == -1)
+    printf (" |   |     ") ;
+  else
+  {
+    /**/ if (wpMode == WPI_MODE_GPIO)
+      pin = physPinToGpio (physPin) ;
+    else if (wpMode == WPI_MODE_PHYS)
+      pin = physPin ;
+    else
+      pin = physToWpi [physPin] ;
+
+    printf (" | %d", digitalRead (pin)) ;
+    printf (" | %-4s", alts [getAlt (pin)]) ;
+  }
+
+  printf (" | %-5s", physNames [physPin]) ;
+
+  if (physToWpi     [physPin] == -1)
+    printf (" |     |    ") ;
+  else
+    printf (" | %-3d | %-3d", physToWpi [physPin], physPinToGpio (physPin)) ;
+
+  printf (" |\n") ;
+}
+
+
+void cmReadall (void)
+{
+  int pin ;
+
+  printf ("+-----+------+-------+      +-----+------+-------+\n") ;
+  printf ("| Pin | Mode | Value |      | Pin | Mode | Value |\n") ;
+  printf ("+-----+------+-------+      +-----+------+-------+\n") ;
+
+  for (pin = 0 ; pin < 28 ; ++pin)
+  {
+    printf ("| %3d ", pin) ;
+    printf ("| %-4s ", alts [getAlt (pin)]) ;
+    printf ("| %s  ", digitalRead (pin) == HIGH ? "High" : "Low ") ;
+    printf ("|      ") ;
+    printf ("| %3d ", pin + 28) ;
+    printf ("| %-4s ", alts [getAlt (pin + 28)]) ;
+    printf ("| %s  ", digitalRead (pin + 28) == HIGH ? "High" : "Low ") ;
+    printf ("|\n") ;
+  }
+
+  printf ("+-----+------+-------+      +-----+------+-------+\n") ;
+}
+
+
+/*
+ * abReadall:
+ *	Read all the pins on the model A or B.
+ *********************************************************************************
+ */
+
+void abReadall (int model, int rev)
+{
+  int pin ;
+  char *type ;
+
+  if (model == PI_MODEL_A)
+    type = " A" ;
+  else
+    if (rev == PI_VERSION_2)
+      type = "B2" ;
+    else
+      type = "B1" ;
+
+  printf (" +-----+-----+---------+------+---+-Model %s-+---+------+---------+-----+-----+\n", type) ;
+  printf (" | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |\n") ;
+  printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
+  for (pin = 1 ; pin <= 26 ; pin += 2)
+    readallPhys (pin) ;
+
+  if (rev == PI_VERSION_2) // B version 2
+  {
+    printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
+    for (pin = 51 ; pin <= 54 ; pin += 2)
+      readallPhys (pin) ;
+  }
+
+  printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
+  printf (" | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |\n") ;
+  printf (" +-----+-----+---------+------+---+-Model %s-+---+------+---------+-----+-----+\n", type) ;
+}
+
+
+/*
+ * piPlusReadall:
+ *	Read all the pins on the model A+ or the B+
+ *********************************************************************************
+ */
+
+void piPlusReadall (int model)
+{
+  int pin ;
+
+  if (model == PI_MODEL_AP)
+    printf (" +-----+-----+---------+------+---+--A Plus--+---+------+---------+-----+-----+\n") ;
+  else
+    printf (" +-----+-----+---------+------+---+--B Plus--+---+------+---------+-----+-----+\n") ;
+
+  printf (" | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |\n") ;
+  printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
+  for (pin = 1 ; pin <= 40 ; pin += 2)
+    readallPhys (pin) ;
+  printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
+  printf (" | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |\n") ;
+
+  if (model == PI_MODEL_AP)
+    printf (" +-----+-----+---------+------+---+--A Plus--+---+------+---------+-----+-----+\n") ;
+  else
+    printf (" +-----+-----+---------+------+---+--B Plus--+---+------+---------+-----+-----+\n") ;
+}
+
+static void readallPhysOdroidC (int physPin, int model, int rev)
+{
+  int pin ;
+
+  if     ((physPinToGpio (physPin) == -1)  && (physToWpi [physPin] == -1))
+    printf (" |      |    ");
+  else if (physPinToGpio (physPin) != -1)
+    printf (" |  %3d | %3d", physPinToGpio (physPin), physToWpi [physPin]);
+  else
+    printf (" |      | %3d", physToWpi [physPin]);
+
+  if (model == PI_MODEL_ODROIDC)
+	printf (" | %s", physNamesOdroidc [physPin]) ;
+  else {
+	if (rev == PI_VERSION_1)
+		printf (" | %s", physNamesOdroidc2_Rev1_0 [physPin]) ;
+	else
+		printf (" | %s", physNamesOdroidc2_Rev1_1 [physPin]) ;
+  }
+
+  if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1))
+    printf (" |      |  ");
+  else
+  {
+    /**/ if (wpMode == WPI_MODE_GPIO)
+      pin = physPinToGpio (physPin) ;
+    else if (wpMode == WPI_MODE_PHYS)
+      pin = physPin ;
+    else
+      pin = physToWpi [physPin] ;
+
+	if( physPinToGpio (physPin) == -1 )	{
+	    printf (" |      |  ") ;
+	}
+	else	{
+	    printf (" | %4s", alts [getAlt (pin)]) ;
+	    printf (" | %d", digitalRead (pin)) ;
+	}
+  }
+
+// Pin numbers:
+
+  printf (" | %2d", physPin) ;
+  ++physPin ;
+  printf (" || %-2d", physPin) ;
+
+// Same, reversed
+
+  if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1))
+    printf (" |   |     ");
+  else
+  {
+    /**/ if (wpMode == WPI_MODE_GPIO)
+      pin = physPinToGpio (physPin) ;
+    else if (wpMode == WPI_MODE_PHYS)
+      pin = physPin ;
+    else
+      pin = physToWpi [physPin] ;
+
+	if (physPinToGpio (physPin) == -1)	{
+	    printf (" |   |     ") ;
+	}
+	else	{
+	    printf (" | %d", digitalRead (pin)) ;
+	    printf (" | %-4s", alts [getAlt (pin)]) ;
+	}
+  }
+
+  if (model == PI_MODEL_ODROIDC)
+	  printf (" | %-6s", physNamesOdroidc [physPin]) ;
+  else {
+	if (rev == PI_VERSION_1)
+		printf (" | %-6s", physNamesOdroidc2_Rev1_0 [physPin]) ;
+	else
+		printf (" | %-6s", physNamesOdroidc2_Rev1_1 [physPin]) ;
+  }
+
+  if     ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
+    printf (" |     |     ");
+  else if (physPinToGpio (physPin) != -1)
+    printf (" | %-3d |  %-3d", physToWpi [physPin], physPinToGpio (physPin));
+  else
+    printf (" | %-3d |     ", physToWpi [physPin]);
+
+  printf (" |\n") ;
+}
+
+void ReadallOdroidC (int model, int rev)
+{
+  int pin ;
+
+  if(model == PI_MODEL_ODROIDC2)
+	printf (" +------+-----+----------+------+ Model  ODROID-C2 +------+----------+-----+------+\n") ;
+  else
+	printf (" +------+-----+----------+------+- Model ODROID-C -+------+----------+-----+------+\n") ;
+
+  printf (" | GPIO | wPi |   Name   | Mode | V | Physical | V | Mode |   Name   | wPi | GPIO |\n") ;
+  printf (" +------+-----+----------+------+---+----++----+---+------+----------+-----+------+\n") ;
+  for (pin = 1 ; pin <= 40 ; pin += 2)
+    readallPhysOdroidC (pin, model, rev) ;
+  printf (" +------+-----+----------+------+---+----++----+---+------+----------+-----+------+\n") ;
+}
+
+static void readallPhysOdroidXU (int physPin)
+{
+  int pin ;
+
+  if     ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
+    printf (" |      |    ") ;
+  else if (physPinToGpio (physPin) != -1)
+    printf (" |  %3d | %3d", physPinToGpio (physPin), physToWpi [physPin]);
+  else
+    printf (" |      | %3d", physToWpi [physPin]);
+
+  printf (" | %s", physNamesOdroidXU [physPin]) ;
+
+  if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1))
+    printf (" |      |  ") ;
+  else
+  {
+    /**/ if (wpMode == WPI_MODE_GPIO)
+      pin = physPinToGpio (physPin) ;
+    else if (wpMode == WPI_MODE_PHYS)
+      pin = physPin ;
+    else
+      pin = physToWpi [physPin] ;
+
+    printf (" | %4s", alts [getAlt (pin)]) ;
+    printf (" | %d", digitalRead (pin)) ;
+  }
+
+// Pin numbers:
+
+  printf (" | %2d", physPin) ;
+  ++physPin ;
+  printf (" || %-2d", physPin) ;
+
+// Same, reversed
+
+  if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1))
+    printf (" |   |     ") ;
+  else
+  {
+    /**/ if (wpMode == WPI_MODE_GPIO)
+      pin = physPinToGpio (physPin) ;
+    else if (wpMode == WPI_MODE_PHYS)
+      pin = physPin ;
+    else
+      pin = physToWpi [physPin] ;
+
+    printf (" | %d", digitalRead (pin)) ;
+    printf (" | %-4s", alts [getAlt (pin)]) ;
+  }
+
+  printf (" | %-6s", physNamesOdroidXU [physPin]) ;
+
+  if     ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
+    printf (" |     |     ") ;
+  else if (physPinToGpio (physPin) != -1)
+    printf (" | %-3d |  %-3d", physToWpi [physPin], physPinToGpio (physPin));
+  else
+    printf (" | %-3d |     ", physToWpi [physPin]);
+
+  printf (" |\n") ;
+}
+
+void ReadallOdroidXU (void)
+{
+  int pin ;
+
+  printf (" +------+-----+----------+------ Model ODROID-XU3/4 ------+----------+-----+------+\n") ;
+  printf (" | GPIO | wPi |   Name   | Mode | V | Physical | V | Mode |   Name   | wPi | GPIO |\n") ;
+  printf (" +------+-----+----------+------+---+----++----+---+------+----------+-----+------+\n") ;
+  for (pin = 1 ; pin <= 40 ; pin += 2)
+    readallPhysOdroidXU (pin) ;
+  printf (" +------+-----+----------+------+---+----++----+---+------+----------+-----+------+\n") ;
+}
+
+void doReadall (void)
+{
+  int model, rev, mem, maker, overVolted ;
+
+  if (wiringPiNodes != NULL)	// External readall
+  {
+    doReadallExternal () ;
+    return ;
+  }
+
+  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
+
+  /**/ if ((model == PI_MODEL_A) || (model == PI_MODEL_B))
+    abReadall (model, rev) ;
+  else if ((model == PI_MODEL_BP) || (model == PI_MODEL_AP))
+    piPlusReadall (model) ;
+  else if (model == PI_MODEL_CM)
+    cmReadall () ;
+  else if (model == PI_MODEL_ODROIDC || model == PI_MODEL_ODROIDC2)
+    ReadallOdroidC (model, rev);
+  else if (model == PI_MODEL_ODROIDXU_34)
+    ReadallOdroidXU();
+  else
+    printf ("Oops - unable to determine board type... model: %d\n", model) ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/gpio/readall.o b/modules/catkin_ws/src/wiringPi/gpio/readall.o
new file mode 100644
index 0000000000000000000000000000000000000000..857e25e18132f7e867ea0a3d927d5de9b0080521
GIT binary patch
literal 23736
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
Gt^Wq}9u0{A

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/gpio/test.sh b/modules/catkin_ws/src/wiringPi/gpio/test.sh
new file mode 100755
index 00000000..a7c2bb22
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/gpio/test.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+#
+# test.sh:
+#	Simple test: Assumes LEDs on Pins 0-7 and lights them
+#	in-turn.
+#################################################################################
+# This file is part of wiringPi:
+#	Wiring Compatable library for the Raspberry Pi
+#
+#    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 <http://www.gnu.org/licenses/>.
+#################################################################################
+
+# Simple test - assumes LEDs on Pins 0-7.
+
+for i in `seq 0 7`;
+do
+  gpio mode $i out
+done
+
+while true;
+do
+  for i in `seq 0 7`;
+  do
+    gpio write $i 1
+    sleep 0.1
+  done
+
+  for i in `seq 0 7`;
+  do
+    gpio write $i 0
+    sleep 0.1
+  done
+done
diff --git a/modules/catkin_ws/src/wiringPi/pins/Makefile b/modules/catkin_ws/src/wiringPi/pins/Makefile
new file mode 100644
index 00000000..fd34ee93
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/pins/Makefile
@@ -0,0 +1,18 @@
+
+SRC	=	pins.tex
+
+
+all:		${SRC}
+	@echo	Generating DVI
+	@latex  pins.tex
+
+pins.dvi:	pins.tex
+	@latex  pins.tex
+
+pdf:	pins.dvi
+	@dvipdf pins.dvi
+
+
+.PHONY:	clean
+clean:
+	@rm -f *.dvi *.aux *.log *.ps *.toc *.bak *~
diff --git a/modules/catkin_ws/src/wiringPi/pins/pins.pdf b/modules/catkin_ws/src/wiringPi/pins/pins.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..bd9629d62044179a5532a68a0eb0dbd7b3ac2dd1
GIT binary patch
literal 9833
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

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/pins/pins.tex b/modules/catkin_ws/src/wiringPi/pins/pins.tex
new file mode 100644
index 00000000..c3753e9e
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/pins/pins.tex
@@ -0,0 +1,116 @@
+\documentclass[12pt,a4paper]{article}
+\parskip 1ex
+\parindent 0em
+\thispagestyle{empty}
+\pagestyle{plain}
+\pagenumbering{arabic}
+\setlength{\topmargin}{0pt}
+\setlength{\headheight}{0pt}
+\setlength{\headsep}{0pt}
+\setlength{\topskip}{0pt}
+\setlength{\textheight}{240mm}
+\setlength{\footskip}{5ex}
+\setlength{\oddsidemargin}{0pt}
+\setlength{\evensidemargin}{0pt}
+\setlength{\textwidth}{160mm}
+\usepackage[dvips]{graphics,color}
+\usepackage{helvet}
+\renewcommand{\familydefault}{\sfdefault}
+\begin{document}
+\begin{sffamily}
+\definecolor{rtb-black}{rgb}  {0.0, 0.0, 0.0}
+\definecolor{rtb-navy}{rgb}   {0.0, 0.0, 0.5}
+\definecolor{rtb-green}{rgb}  {0.0, 0.5, 0.0}
+\definecolor{rtb-teal}{rgb}   {0.0, 0.5, 0.5}
+\definecolor{rtb-maroon}{rgb} {0.5, 0.0, 0.0}
+\definecolor{rtb-purple}{rgb} {0.5, 0.0, 0.5}
+\definecolor{rtb-olive}{rgb}  {0.5, 0.5, 0.0}
+\definecolor{rtb-silver}{rgb} {0.7, 0.7, 0.7}
+\definecolor{rtb-grey}{rgb}   {0.5, 0.5, 0.5}
+\definecolor{rtb-blue}{rgb}   {0.0, 0.0, 1.0}
+\definecolor{rtb-lime}{rgb}   {0.0, 1.0, 0.0}
+\definecolor{rtb-aqua}{rgb}   {0.0, 1.0, 1.0}
+\definecolor{rtb-red}{rgb}    {1.0, 0.0, 0.0}
+\definecolor{rtb-fuchsia}{rgb}{1.0, 0.0, 1.0}
+\definecolor{rtb-yellow}{rgb} {1.0, 1.0, 0.0}
+\definecolor{rtb-white}{rgb}  {1.0, 1.0, 1.0}
+
+\begin{center}
+\bfseries{WiringPi: GPIO Pin Numbering Tables}\\
+\tt{http://wiringpi.com/}
+\end{center}
+
+\begin{center}
+\begin{tabular}{|c|c|c||p{8mm}|p{8mm}||c|c|c|c|}
+\hline
+\multicolumn{8}{|c|}{\bfseries{P1: The Main GPIO connector}}\\
+\hline
+\hline
+WiringPi Pin	& BCM GPIO	& Name	& \multicolumn{2}{|c||}{Header}	& Name	& BCM GPIO	& WiringPi Pin\\
+\hline
+\hline
+	& 			& \textcolor{rtb-red}{3.3v}	& \raggedleft{1} &  2 & \textcolor{rtb-maroon}{5v}	& 	& \\
+\hline
+8	& Rv1:0 - Rv2:2		& \textcolor{rtb-aqua}{SDA}	& \raggedleft{3} &  4 & \textcolor{rtb-maroon}{5v}	& 	& \\
+\hline
+9	& Rv1:1 - Rv2:3		& \textcolor{rtb-aqua}{SCL}	& \raggedleft{5} &  6 & \textcolor{rtb-black}{0v}	& 	& \\
+\hline
+7	& 4			& \textcolor{rtb-green}{GPIO7}	& \raggedleft{7} &  8 & \textcolor{rtb-yellow}{TxD}	& 14    & 15\\
+\hline
+	& 			& \textcolor{rtb-black}{0v}	& \raggedleft{9} & 10 & \textcolor{rtb-yellow}{RxD}	& 15	& 16\\
+\hline
+0	& 17			& \textcolor{rtb-green}{GPIO0}	& \raggedleft{11} & 12 & \textcolor{rtb-green}{GPIO1}	& 18	& 1\\
+\hline
+2	& Rv1:21 - Rv2:27	& \textcolor{rtb-green}{GPIO2}	& \raggedleft{13} & 14 & \textcolor{rtb-black}{0v}	& 	& \\
+\hline
+3	& 22			& \textcolor{rtb-green}{GPIO3}	& \raggedleft{15} & 16 & \textcolor{rtb-green}{GPIO4}	& 23	& 4\\
+\hline
+	& 			& \textcolor{rtb-red}{3.3v}	& \raggedleft{17} & 18 & \textcolor{rtb-green}{GPIO5}	& 24	& 5\\
+\hline
+12	& 10			& \textcolor{rtb-teal}{MOSI}	& \raggedleft{19} & 20 & \textcolor{rtb-black}{0v}	& 	& \\
+\hline
+13	& 9			& \textcolor{rtb-teal}{MISO}	& \raggedleft{21} & 22 & \textcolor{rtb-green}{GPIO6}	& 25	& 6\\
+\hline
+14	& 11			& \textcolor{rtb-teal}{SCLK}	& \raggedleft{23} & 24 & \textcolor{rtb-teal}{CE0}	& 8	& 10\\
+\hline
+	& 			& \textcolor{rtb-black}{0v}	& \raggedleft{25} & 26 & \textcolor{rtb-teal}{CE1}	& 7	& 11\\
+\hline
+\hline
+WiringPi Pin	& BCM GPIO	& Name	& \multicolumn{2}{|c||}{Header}	& Name	& BCM GPIO	& WiringPi Pin\\
+\hline
+\end{tabular}
+\end{center}
+
+Note the differences between Revision 1 and Revision 2 Raspberry
+Pi's. The Revision 2 is readily identifiable by the presence of the 2
+mounting holes.
+
+The revision 2 Raspberry Pi has an additional GPIO connector, P5, which is next to the main P1 GPIO
+connector:
+
+\begin{center}
+\begin{tabular}{|c|c|c||p{8mm}|p{8mm}||c|c|c|c|}
+\hline
+\multicolumn{8}{|c|}{\bfseries{P5: Secondary GPIO connector (Rev. 2 Pi only)}}\\
+\hline
+\hline
+WiringPi Pin	& BCM GPIO	& Name	& \multicolumn{2}{|c||}{Header}	& Name	& BCM GPIO	& WiringPi Pin\\
+\hline
+\hline
+	& 		& \textcolor{rtb-maroon}{5v}	& \raggedleft{1} &  2 & \textcolor{rtb-red}{3.3v}	& 	&	\\
+\hline
+17	& 28		& \textcolor{rtb-green}{GPIO8}	& \raggedleft{3} &  4 & \textcolor{rtb-green}{GPIO9}	& 29	& 18	\\
+\hline
+19	& 30		& \textcolor{rtb-green}{GPIO10}	& \raggedleft{5} &  6 & \textcolor{rtb-green}{GPIO11}	& 31	& 20	\\
+\hline
+	& 		& \textcolor{rtb-black}{0v}	& \raggedleft{7} &  8 & \textcolor{rtb-black}{0v}	& 	&	\\
+\hline
+\hline
+WiringPi Pin	& BCM GPIO	& Name	& \multicolumn{2}{|c||}{Header}	& Name	& BCM GPIO	& WiringPi Pin\\
+\hline
+\end{tabular}
+\end{center}
+
+
+\end{sffamily}
+\end{document}
diff --git a/modules/catkin_ws/src/wiringPi/postinstall-pak b/modules/catkin_ws/src/wiringPi/postinstall-pak
new file mode 100644
index 00000000..469eb470
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/postinstall-pak
@@ -0,0 +1,7 @@
+#!/bin/bash
+echo
+echo "WiringPi for C1 is now installed"
+echo "Please check the wiki: http://odroid.com/dokuwiki/doku.php?id=en:odroid-c1"
+echo "For extra references:"
+echo "Github: https://github.com/hardkernel/wiringPi"
+echo "Examples folder is copied to /usr/share/wiringPi/examples"
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/COPYING.LESSER b/modules/catkin_ws/src/wiringPi/wiringPi/COPYING.LESSER
new file mode 100644
index 00000000..65c5ca88
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/COPYING.LESSER
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/Makefile b/modules/catkin_ws/src/wiringPi/wiringPi/Makefile
new file mode 100644
index 00000000..4e3342e0
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/Makefile
@@ -0,0 +1,193 @@
+# ;
+# Makefile:
+#	wiringPi - Wiring Compatable library for the Raspberry Pi
+#
+#	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+#################################################################################
+
+DYN_VERS_MAJ=2
+DYN_VERS_MIN=0
+
+VERSION=$(DYN_VERS_MAJ).$(DYN_VERS_MIN)
+DESTDIR=/usr
+PREFIX=/local
+
+STATIC=libwiringPi.a
+DYNAMIC=libwiringPi.so.$(VERSION)
+
+#DEBUG	= -g -O0
+DEBUG	= -O2
+CC	= gcc
+INCLUDE	= -I.
+DEFS	= -D_GNU_SOURCE
+CFLAGS	= $(DEBUG) $(DEFS) -Wformat=2 -Wall -Winline $(INCLUDE) -pipe -fPIC
+
+LIBS    =
+
+# Should not alter anything below this line
+###############################################################################
+
+SRC	=	wiringPi.c						\
+		wiringSerial.c wiringShift.c				\
+		piHiPri.c piThread.c					\
+		wiringPiSPI.c wiringPiI2C.c				\
+		softPwm.c softTone.c					\
+		mcp23008.c mcp23016.c mcp23017.c			\
+		mcp23s08.c mcp23s17.c					\
+		sr595.c							\
+		pcf8574.c pcf8591.c					\
+		mcp3002.c mcp3004.c mcp4802.c mcp3422.c			\
+		max31855.c max5322.c					\
+		sn3218.c						\
+		drcSerial.c
+
+OBJ	=	$(SRC:.c=.o)
+
+all:		$(DYNAMIC)
+
+static:		$(STATIC)
+
+$(STATIC):	$(OBJ)
+	@echo "[Link (Static)]"
+	@ar rcs $(STATIC) $(OBJ)
+	@ranlib $(STATIC)
+#	@size   $(STATIC)
+
+$(DYNAMIC):	$(OBJ)
+	@echo "[Link (Dynamic)]"
+	@$(CC) -shared -Wl,-soname,libwiringPi.so -o libwiringPi.so.$(VERSION) -lpthread $(OBJ)
+
+.c.o:
+	@echo [Compile] $<
+	@$(CC) -c $(CFLAGS) $< -o $@
+
+.PHONY:	clean
+clean:
+	@echo "[Clean]"
+	@rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPi.*
+
+.PHONY:	tags
+tags:	$(SRC)
+	@echo [ctags]
+	@ctags $(SRC)
+
+
+.PHONY:	install-headers
+install-headers:
+	@echo "[Install Headers]"
+	@install -m 0755 -d			$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 wiringPi.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 wiringSerial.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 wiringShift.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 softPwm.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 softTone.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 wiringPiSPI.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 wiringPiI2C.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 drcSerial.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 mcp23008.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 mcp23016.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 mcp23017.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 mcp23s08.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 mcp23s17.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 max31855.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 max5322.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 mcp3002.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 mcp3004.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 mcp4802.h		$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 mcp3422.h		$(DESTDIR)$(PREFIX)/include
+	@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
+
+.PHONY:	install
+install:	$(DYNAMIC) install-headers
+	@echo "[Install Dynamic Lib]"
+	@install -m 0755 -d						$(DESTDIR)$(PREFIX)/lib
+	@install -m 0755 libwiringPi.so.$(VERSION)			$(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION)
+	@ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION)	$(DESTDIR)/lib/libwiringPi.so
+	@ldconfig
+
+.PHONY:	install-static
+install-static:	$(STATIC) install-headers
+	@echo "[Install Static Lib]"
+	@install -m 0755 -d			$(DESTDIR)$(PREFIX)/lib
+	@install -m 0755 libwiringPi.a		$(DESTDIR)$(PREFIX)/lib
+
+.PHONY:	uninstall
+uninstall:
+	@echo "[UnInstall]"
+	@rm -f $(DESTDIR)$(PREFIX)/include/wiringPi.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/wiringSerial.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/wiringShift.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/softPwm.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/softTone.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/wiringPiSPI.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/wiringPiI2C.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/drcSerial.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/mcp23008.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/mcp23016.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/mcp23017.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/mcp23s08.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/mcp23s17.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/max31855.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/max5322.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/mcp3002.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/mcp3004.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/mcp4802.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/mcp3422.h
+	@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
+
+
+.PHONY:	depend
+depend:
+	makedepend -Y $(SRC) $(SRC_I2C)
+
+# DO NOT DELETE
+
+wiringPi.o: softPwm.h softTone.h wiringPi.h
+wiringSerial.o: wiringSerial.h
+wiringShift.o: wiringPi.h wiringShift.h
+piHiPri.o: wiringPi.h
+piThread.o: wiringPi.h
+wiringPiSPI.o: wiringPi.h wiringPiSPI.h
+wiringPiI2C.o: wiringPi.h wiringPiI2C.h
+softPwm.o: wiringPi.h softPwm.h
+softTone.o: wiringPi.h softTone.h
+mcp23008.o: wiringPi.h wiringPiI2C.h mcp23x0817.h mcp23008.h
+mcp23016.o: wiringPi.h wiringPiI2C.h mcp23016.h mcp23016reg.h
+mcp23017.o: wiringPi.h wiringPiI2C.h mcp23x0817.h mcp23017.h
+mcp23s08.o: wiringPi.h wiringPiSPI.h mcp23x0817.h mcp23s08.h
+mcp23s17.o: wiringPi.h wiringPiSPI.h mcp23x0817.h mcp23s17.h
+sr595.o: wiringPi.h sr595.h
+pcf8574.o: wiringPi.h wiringPiI2C.h pcf8574.h
+pcf8591.o: wiringPi.h wiringPiI2C.h pcf8591.h
+mcp3002.o: wiringPi.h wiringPiSPI.h mcp3002.h
+mcp3004.o: wiringPi.h wiringPiSPI.h mcp3004.h
+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
+drcSerial.o: wiringPi.h wiringSerial.h drcSerial.h
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/drcSerial.c b/modules/catkin_ws/src/wiringPi/wiringPi/drcSerial.c
new file mode 100644
index 00000000..6491a98c
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/drcSerial.c
@@ -0,0 +1,201 @@
+/*
+ * drcSerial.c:
+ *	Extend wiringPi with the DRC Serial protocol (e.g. to Arduino)
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <time.h>
+#include <string.h>
+#include <errno.h>
+
+#include "wiringPi.h"
+#include "wiringSerial.h"
+
+#include "drcSerial.h"
+
+#ifndef	TRUE
+#  define	TRUE	(1==1)
+#  define	FALSE	(1==2)
+#endif
+
+
+/*
+ * myPinMode:
+ *	Change the pin mode on the remote DRC device
+ *********************************************************************************
+ */
+
+static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+  /**/ if (mode == OUTPUT)
+    serialPutchar (node->fd, 'o') ;       // Input
+  else if (mode == PWM_OUTPUT)
+    serialPutchar (node->fd, 'p') ;       // PWM
+  else
+    serialPutchar (node->fd, 'i') ;       // Default to input
+
+  serialPutchar (node->fd, pin - node->pinBase) ;
+}
+
+
+/*
+ * myPullUpDnControl:
+ *	ATmegas only have pull-up's on of off. No pull-downs.
+ *********************************************************************************
+ */
+
+static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+
+// Force pin into input mode
+
+  serialPutchar (node->fd, 'i' ) ;
+  serialPutchar (node->fd, pin - node->pinBase) ;
+
+  /**/ if (mode == PUD_UP)
+  {
+    serialPutchar (node->fd, '1') ;
+    serialPutchar (node->fd, pin - node->pinBase) ;
+  }
+  else if (mode == PUD_OFF)
+  {
+    serialPutchar (node->fd, '0') ;
+    serialPutchar (node->fd, pin - node->pinBase) ;
+  }
+}
+
+
+/*
+ * myDigitalWrite:
+ *********************************************************************************
+ */
+
+static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  serialPutchar (node->fd, value == 0 ? '0' : '1') ;
+  serialPutchar (node->fd, pin - node->pinBase) ;
+}
+
+
+/*
+ * myPwmWrite:
+ *********************************************************************************
+ */
+
+static void myPwmWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  serialPutchar (node->fd, 'v') ;
+  serialPutchar (node->fd, pin - node->pinBase) ;
+  serialPutchar (node->fd, value & 0xFF) ;
+}
+
+
+/*
+ * myAnalogRead:
+ *********************************************************************************
+ */
+
+static int myAnalogRead (struct wiringPiNodeStruct *node, int pin)
+{
+  int vHi, vLo ;
+
+  serialPutchar (node->fd, 'a') ;
+  serialPutchar (node->fd, pin - node->pinBase) ;
+  vHi = serialGetchar (node->fd) ;
+  vLo = serialGetchar (node->fd) ;
+
+  return (vHi << 8) | vLo ;
+}
+
+
+/*
+ * myDigitalRead:
+ *********************************************************************************
+ */
+
+static int myDigitalRead (struct wiringPiNodeStruct *node, int pin)
+{
+  serialPutchar (node->fd, 'r') ; // Send read command
+  serialPutchar (node->fd, pin - node->pinBase) ;
+  return (serialGetchar (node->fd) == '0') ? 0 : 1 ;
+}
+
+
+/*
+ * drcSetup:
+ *	Create a new instance of an DRC GPIO interface.
+ *	Could be a variable nunber of pins here - we might not know in advance
+ *	if it's an ATmega with 14 pins, or something with less or more!
+ *********************************************************************************
+ */
+
+int drcSetupSerial (const int pinBase, const int numPins, const char *device, const int baud)
+{
+  int fd ;
+  int ok, tries ;
+  time_t then ;
+  struct wiringPiNodeStruct *node ;
+
+  if ((fd = serialOpen (device, baud)) < 0)
+    return wiringPiFailure (WPI_ALMOST, "Unable to open DRC device (%s): %s", device, strerror (errno)) ;
+
+  delay (10) ;	// May need longer if it's an Uno that reboots on the open...
+
+// Flush any pending input
+
+  while (serialDataAvail (fd))
+    (void)serialGetchar (fd) ;
+
+  ok = FALSE ;
+  for (tries = 1 ; (tries < 5) && (!ok) ; ++tries)
+  {
+    serialPutchar (fd, '@') ;		// Ping
+    then = time (NULL) + 2 ;
+    while (time (NULL) < then)
+      if (serialDataAvail (fd))
+      {
+        if (serialGetchar (fd) == '@')
+        {
+          ok = TRUE ;
+          break ;
+        }
+      }
+  }
+
+  if (!ok)
+  {
+    serialClose (fd) ;
+    return wiringPiFailure (WPI_FATAL, "Unable to communicate with DRC serial device") ;
+  }
+
+  node = wiringPiNewNode (pinBase, numPins) ;
+
+  node->fd              = fd ;
+  node->pinMode         = myPinMode ;
+  node->pullUpDnControl = myPullUpDnControl ;
+  node->analogRead      = myAnalogRead ;
+  node->digitalRead     = myDigitalRead ;
+  node->digitalWrite    = myDigitalWrite ;
+  node->pwmWrite        = myPwmWrite ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/drcSerial.h b/modules/catkin_ws/src/wiringPi/wiringPi/drcSerial.h
new file mode 100644
index 00000000..29e988e1
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/drcSerial.h
@@ -0,0 +1,33 @@
+/*
+ * drcSerial.h:
+ *	Extend wiringPi with the DRC Serial protocol (e.g. to Arduino)
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int drcSetupSerial (const int pinBase, const int numPins, const char *device, const int baud) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/drcSerial.o b/modules/catkin_ws/src/wiringPi/wiringPi/drcSerial.o
new file mode 100644
index 0000000000000000000000000000000000000000..ba441cc869b08506fea8d047bfda37048a161705
GIT binary patch
literal 4480
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
Rx$)bWA%72o85R5Z{{d00S1bSk

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/libwiringPi.so.2.0 b/modules/catkin_ws/src/wiringPi/wiringPi/libwiringPi.so.2.0
new file mode 100755
index 0000000000000000000000000000000000000000..801a295cad6d5acc33144088a4343f6b3b5d6281
GIT binary patch
literal 72448
zcmdqK3v^Re7C(IZ2(+a%0a~mG8nkE;gqDXCu+q=~DHf>|1_ZS&X$q0j);8fKN=sVg
z8l%<G5g#+w@iFMkXvc97QK98k#8(9clu-&O+)#uf3I&AxfBT$slbg`0v;N<=zO}x~
zO3&T<?6c24`*j}oCajo{Juy5iOj551=~js#Lkh=ah>C_@0h$acP3kITNd2Tfj8-RT
zIw~AZ9IKX+WMl~9)&-yXPZ)^O$ZpiKt{2Cr%;u%qE*v1W+acQR5be~mS%|5YQKESy
zO8V>&^`T{wpi@htr7P!qM<Lx;zRtkQ%H@JkE!B2+pdHEidoP0^oF@9~OfNa409<M*
zhQr1d4}1hZlWw0O-8;tZ-uG$d!Hu83(PxPByT%s|+_#I`72tCVKGa_fK2p3?89AWP
z`1UIg_m-q6V|b<XWPj<}?|SBkOFh|O>ZIz7L{pR$9!6~{VfRF%)Wcwi>`^0yXT(ck
zy$5F8SXo8t&8hqlc1n>l43(9U_!}N2t<f8=m14GLWLPpjo{%4RXFt<;DM<>y(~!|c
z%8z_|J;`z_J{kCo$A_*=e9Y{Q|CxYdq6Yr8+exUj;FF~x%EtZe_~hVohrmxmIUS!F
z`1}E%nfT1Yhps#EnS;+=_}qgJU3vJB?yUIO@R^4XUGwp=<FkMOaTTL1!KVzLa(pWA
zS%eQ=i}6{4&r*Dr;X~K`_$<fg0RnKXz^4))7e3YaJcQ4~_|WC%h2%l`n7F5+R@^@>
z$|q3%QQTAUl;(a7?w`Zw&-nZWpYrFnb)R$ByeDQE`u}0h{de84bJ@bt|Lph8H{IW!
zbL9K0{~dY%f(@fa9T@ub$nl2EnWw)v`1FO|&&_^k>EF+Pbk{xqYWMuJ{FY~95BK=n
z#<^p6{nT0;*ZB0~$qTOgVz%MPY2)e4311!``AL?3_`&X9Ed2J9(GizsU+Q+DG{5qf
z2hxWR>brRNIeBM^>;C!=PIde7;^{vp9@~8~?p@ERxaG!&dfgwMd!Y9W&p*fg`M&2~
zUjEGx*PK@$>375S`%hK%d1K#wv-;*H|J>L(;+HRm_3ZOjRkx`_CpN9}y?6MD<;#Yy
z{Bdf0pH(Xkjs50GYT2K<4E^IhqjvmPzq{9jn8%(Tz2`H-1IEvuzW8y(yj%CYbX|MZ
zpyiWZT-h|}4;3r!`uV91|9Pt9Qt#)^O!^^l#o;aeHZ9urr>)Q3|4MW9h4e{34a&c9
z=E|bycU3;qZ>9Ae-JsWOvmSrT@}iP^?X^XBf0g>D$`6Oik(QcC-9Nl)!`r7ms2qIu
zuBdHA&wcSs@}<3%w`7}NiS~ZF>R8m@)*Za%r?hF0mF?`FoZLKh#XE}QgX>NdOuBbH
zg>a`=gcL2c4-BsU1p(hP7{#E|NDLj}`=Zv^0X_L%NAxq0#5%%PM0SiHh5XbJeZNlR
zd8QLS8J*DowG%lbI^naq6Z|Kg$Z6<=KB*IWimQ&sOYz(hemo}2j_^^P^c&TQeXs6B
zKhrzGU(pHvcqe$EB_lqe*PWfvySsKgu9QyX-wVba>A}^B9wv3t?}kq7@+kb4=Bv=l
z(uqI!hnyYJFYQF0S31G>>_pBpoyggv6M9c4{0lH3W9Xm&Q~vKrpMyH_x0RjHrvY!o
zC-jQ!ME;AN;8%2_|A<cfVH!HTHndZ~r#j&u*9o6to#^w;PW0(SA3Zwg_i!iu9%cQ;
zN|keYquWH=K1|QCQrmqTA(o5MSQZztQiGV7$3Z^2j^fi(ik0$7;ke%9g|tBMF*-Qn
z3W5Jo;OlAefQ!~9bk(!*#!6)qIDC!Ze;<=SRx(cI_`$r8o)z+!QG&vCFE6CsEG{7b
zDvmfK@E-{NwG%laS>O+<^kQK$QS@6a`ppsjUN7i3sd!op;i5GXT|1dw&~GV+F-&%S
zC-BBH4y$~&iGEvL98c>Yy4DE(m7-sDOY@wduM>+amCp>J&juk+I%gyO8ztGL{$`Fa
zig7I#dZ--F@o|E_tFUj%V;mvOAUzAbLApZ9IcOA=yl4_~mfgYO0#Q3r;9I6}#A^co
zi_k-k@T-Xee;e>Uz`wG^$S|s18ijqE#dv8vbXkO)>Y{KgM@!vBzd5vM#`PgDq=kZy
zVJ1hY>(72dpJlXw#ii<hf}n4q1vRcWc_EDw^y*?)UBC85eNU;ow3Qa4nu~I9&koi(
zHNsvwA})kFq-zDfuADPjD|pQpdTSPrW`KNjtrzrVi#e?NVVTg6Q7n`n;nh;C%3pLS
z+)H{@jJNhdPM9s|pAh&m+C<>$207?@k@-X7W&ZG*(2t>#kx7D`G)vgGA;iA<!Vhb2
z;q-eTA6?~wPY!J+aAmN+Sl<i!vP_Ox0GO_S3VB*?=+6=2Z@kb$oABpJ0>50~E1%{F
zli>4T!M|Z5$9n|+Q<OcVL}~RwBddtw)zUg)mzGkFh!OY&ke~e7a?r>yLT%DJVqEoA
zoKW?*-hz*jHea}g^Fn$}_;YOzN2qqZQQ+Gq3qrtjB?~_JA$(?t@z(#5)2VuRMU1z_
z%<)1j=?=AD+Gye$#S5v6pf`->h(*E=lYl4vR39|53U$193qH+)kLp(kg&*dK{4c^x
z8YASd6Y^gx_@6*Yd8~OZ?>7s2q$^$UZxf7<aI|y|We+J%YI%htg!-iOLjO6Ba{S$b
z{%IjkvxrC1FI`;)y+Py$m3|BAXuOpNjkx1yF;qGPpA5lA&8sKHxN=1P|AmNg)d+po
zj_2@~ypSGe`n*Dt4jLIoq%&!i(1URnC(HpIUH1w;WrB~|?+{`4vd1}{YWHTrr&0`v
z)@O9}7xeYD99HS~2>IC|0IK@&YH6w9Q#X?%9uW9MVHaZ-M>GjJKNk9FS<Lapg8tuv
zPpydeF9d$Apl1gSz^U|eRQf+~LcvaI5qQH~j=xv%v5Il!Kgki*0)JAquLwlpj?!Ks
zf6E=5@GSV!RjA4%><bI=D=%-}!qSqw3P(Y?BQH<NvzOQ%QeF`XDKBgKl)OS)xow`k
z!eJ|)J|(lbw8S>OU~aLE*L7TzXI)Z23<`?v%Ro4JQQkDcA+xxkqQX`oRXD)4Tq-Ja
zIx3{RyrQyldx@hc&pLmBWLtvn=h++%`$Ai3QDMPS)I&Dw0;<g`DzFzzi|rtvmt&s@
zz*%nd!_#aIXL(6xX(4*Z%Ue`YqG7AHnN(&k&75zuE|3<N+4B~H7Tn9FGW+<_g7U&?
zwnb7=X_>7=DuM_VQjxW|v?9=f**4cX53H?@rDe9fxp~E<Rt%-Q81#90n$F5?1%*`M
zC@oewXBAS1Irft2r6ht>Hh*bF0IIM#ataE~<@QB3G?)UZif=Dih+#kqQ?WxTTf8vW
z<{-Q@j|PB_7XaZO`9yn3;q6qb4wHb20AyRtYOMvuBywIJlwVRx;ukpVr6nXPFr}o1
z66%DyEVR$FI|_=Y(NKyjY_<g|W@fqFfsWW;$i=||7`t>HBj&dpEtoK1{8EQ4Z`O<;
zHVl{90czM~IB9W#-7&GWJgWqrSne!?Qc8<Sy%u{;xm|+B;3_2rC8ZU`Hd~p0=vleb
zFy0D{af(XI7f1zGtF58}&Sta1pTJqNms%ZQ=a^5%%UkGl*p`rj7Wh$CRAAu26wVSx
z!+M`$x0b_OtfeJ|6&5%Xmr08icAQpFG7pRvFPx5O;)>!1W_DGLAXStWIdWilM`;<m
zCu%={icBsLkx`WZ%bdl<Gs?^egAzwM{BNPXxY%BSf`s#{1<vCvBk!`6ERq&3Ea3M}
zd!ghkf#U_!F^5$>i?z&w_XgAC0s+r0SYRvXo?B)|Fxe~MUL3BlmD>x7r?S|xmO#}G
zE4nXmAo#3B3#nbfV%$~O9QKMbo2`)Fm-2gu6?jJL<mTnvCKfv@=7UiYD>)82M8xv@
z9H+xNzo0w-A@eXX;4#QI0x%ai3QUVAvGB@CHqmOny~vS;=%8|{(;-z@=i3VNAT`B$
zDFR?=-ok<<0u2FKy|dUxaWtLzk!llrHuEI=4DK#|UFKw=vx!IzBBSNzWRWz}W@<4^
z<9<ZeuuK+aY7+q?!={DO0GE2R7Rh~0(~==Vo2tm*woD2Zd_@J;fP<iWE}t3~6}I9c
ze~_q3DJv*1SSXd)79-`Uek~kd1e~>?#A*w~-@T=RFc2aOt!2Z8r=+Cu?l_csa}YF2
z162f3R-}r$it>@8M{=?<Yf;+BQ6n_K=u|%g^fXKh2r_g#BF$g3)D%d2s2M(DnA)ab
z$?(*)k)k6w$;jbqRYl40VX0yeh2>V(M=o<piKaZM*gn@fq@r}l%~GDN5WaxyHMgRI
zPtQP=ARF7~swM=XG$}i4d}iLTA;SZALq_=T19!uQjN}u3xP&DFKH7f~L6EjaOC1R+
z`cUg&4jiJTn3g_V(lIzv3j6=XKMW7!h?HuvCNmI#tC!v0UBWmU1<rA$J(^b49|<^~
z)kjEs1?=oY_2JS%z;vn4S=D`6Mk>dz|HQ~{RJ<hc((VwvfYtK{mHzIRIiJ-n!SptP
zuMNQ$3;dc8{Cxsn7lL0b@an!ewBH>e^f9k<d74A;D+Ql@A^24S-x7jfE%4I8;Bl$r
zjS9g(Ea(j(_$LHDF$Djtz#BvGFA02d2>vaBPYJ=lC-7+@_zwj>BLu%k;MaU+l<30p
z-hZY;aGeGpNeFSR)!^xQrFzwC@D(Z&<$4YNRt>&EgTG3H-=V?RXz<M%yi<eUr@;@_
z;9E3!S%X(J_!JGkO@kMSi`BMk@MAReiOog^QCLxSQZJ(hFOCpcRk8*zwnz-0qQO_H
zOi-q2@Ky~zLxUGvMpkRl;MJoJs>spcpVIJ|rNLvX=D+eacyUzB>gH?k<SXh`roodg
z)N6?buf{6XRci3!sDL$Dt-&K<`L9|HKE{v5xvvIat-;r6@b_r&Yc+W7(PO;^-%Ufm
zUW1R-;2SjfM>Y5z8axuT|7zCYGyPae+NZ&rHTV_{K2C#IH25kFzD<MIYw+zFygGNV
z>d%d=AX^o&JN_q1gYTii8#MTy8hoM#-%EoxYVh$Ie6j|gpuwkT@Xu)QX&OA88LL-@
z2Jb&pK&3^4pQsX}%+cVdYw)u)c=arUs`EAYL=F9X4gN|EzD$GfqrorH;Bz$iN)5iR
z2EST^ze|I!)!@~$B&uGc!C$SRuhZZQHTbm}ym~f7)%6;Dfrfs)25-^e8#MTN8vG6o
zUK};C+GY*@8V&tE4Sv1`-=e|K(%=;h{vi#%O@nu7@a-DBQG=IuaftlCzXl(r!K-KS
zRBh1Uuhq~eYVhi_K&m!s@YiYRlQsAx4L(JKAE3dfY4F!;@EIEX4H~>fgHP7rb2RvY
z8vHB`e!K>sufgA_!Oz#==V<U{8vGy)eu)M@PJ^%1;GfpuS8MR%sFl^$YVhJw55up~
z;BV6Ksng(xXz*(__@Nqny#}AE!LQfghiUK)8vJk#euoA>LW6JC;BVI8_i6B>H24+`
z-lV}R8hn}t-=@Kj*5KPU_^}$i#dSQ&;?{leiczxEG&pq1Y0Ul>*Vd>l8Y0~KMjir*
zZ@_o>tG^}#cLcLY^|ttM4fvYiFpzqi8N7>NS_*j^7`&6<2!iVwyqVxgg6kN(fnZvC
zcxxH_7QwW%@K!STb%H5Oy=4skE5T6&=QH?Of@!JX&0+8p1k)11o5A3R38pFCo5J9g
z1k+URH8OY^!8BES4Gb<Pn5JB>#Nc}grYY6ib_s|9a|t#O+`{151k+UMZD#N^f@zBM
zHZXWH!MzBsXYhD}X-f3gF?bBYG!=Sl89a<&n(Dlj48D<In&P}=48E3Nnv%Tv4DLfP
zO-0@u2KOYGrXX(ygJTG$rL{MO!Qlkcl;brr`25R&X-e@L82lr_G?jQI1|K7sQnt74
zB8~qL!A62x82mNCltR7D4BkaBrATiBgLe{4DbQQb;LQXl5nRXM4FnG$xR$|h5lpGh
zTgl+p38ob1Eo1Os38vKM&1dkl1XD`$<}mmPf+=NrGZ_3Z!IYA`DGXjoFl`aMMg}h<
zm{Nz=z~FL%DP?#i2H#6Cr3!D`FU<Y~rx4u2;MoLI%J4QbcpAZ!D!dI0o=os?g6kPP
zo?uE1-Z}=4A(*xr-dY9^BbZWzx01m(5=^PVTgKpP38v8Z<}<ht!4&e|90vC!n6@b1
z3<k##Orh^hVQ@IXw-9V(@cEYjrxR>o@Q(!FO0dM>V+2#`_O@MM_9r-l;1&jdO)#Y>
zZ!?2;5j>vY1_tjWIFsOd25%<VOmH28HxN95;93U1MKCShyp;@oo#06XmofOS1X~Es
zXYjKGXAzvk;3o*4OmGH+A10WlW^W3ER}!2}u#v&b2%bW)fx+bj-%hZ^;Cl(4N^skG
zW`BZn2yS8UY=Z9~xS7Gz2%bi81A`|MoJ(*$gU1t0OHgkegU1j&gWy^Q4<neCPTooe
z-$?LGg3B0uEy1)T^5!$R55ad5oWtOr1kWZogTXNb(^TzEVQ@IXw6ydZ8NA^Iqf}Ij
zxMt;yT#I}$$Kvj{AE3pP{ytK@#XVe!gfCd!V=bP9U+x1&_HLw<pW2{wgHAvI(pFR`
z|Ao#txDzdvPXKNrN@WX@iT)a5`Bgn})=@FTGO*nue{XTM$1O_0bQDLOVmgYx+t*U0
zzXo1%_ZFIUiiYT~sRkGH>`8xywIBHeZ-0r}H(rXc$ZeKJWt=5!yXEssjzlnv7R+Kf
zGu}RwUuF88;3GM2u(;9>`~`P2z|RqDai<@8(I_e3Lu$o>A>O@Rmjc4D)0fM$^mz#F
z8YelsdG7%wmmB>r1v?symst9m?`HFnTh|9{T<u*Q39j}iM}}wS3+rj}ah*?CJm>V5
zT9@yJ2NzWN8i3M2wgP{veDC7#`X2c6z=5ihe@E%^bzQt-J!y4It>@{!=yUy*fL!N$
zFZ!VB<ZedM<I08s^lqU`31bqwPUg6LK)PCb5DG$aeYkwa2gbU5hUG(28(h9b{hu2=
zk=vp%T@wlPUv=^`(PQ`ZsnnzXno1PXdi3hsQdGPCN=ECqk6Sn9O=HOTXfpl39ABS~
z#z*g3UOv8_|1Xbk_8Xz&yY+XBj}`>M_6rBbZ@*hR8s9A)j_=mr9$!qy_M=JZGW+!j
zwcoOThK`RGOTT45S`Y<|FSUXBo$$}Zj>c!`aD0Z}9v{6F-GP77q<q=<5`)Lb#M0!G
z%i`H}JUR7@MLt?+aYqiIWrjsICnX}${dk5lTXqtb%_EX58$LUmd-#>-wi+$+4$IkN
z^w)k#L0^`}_Hh>bnT+vz+@9}h8MxUJcHR<p%Hjr_Ld$TKX+k;t$Rc;QqHyZ4@=o5O
z9Qc`XB%&^m@7%g$f9LiXK=~raGwB6ad%~i0&!qYd6oRgHgMQLxZ9L!b;B7pAtg!Oj
z@j!*=p&5*{>mnVC+tUGh&qI_yT<yIV9rHYN6K=I!k*_H~45Iw7-7`t?%xt3^k*(>^
z^H3^hz4#SUrR15^!tMUhB;dEyhU)jX;NP-OuBGaDOC-J*(_oRGOv=EWMSdj7f-+mK
zPRe2BBT2JRIx_SFtCR9^ryux8QW-0sOsZt%^GUU=d^xF(mH$YpXXV>T4Xk`WsTrll
z1*((iMX}U|8lQ6rQv0iGjQA!Fa(jP^`*~Ic%l2jN!W8VRuvBerL5n$CES~D5Hr!b}
zcO@CKJ@B6_x$RvEm<@1$NN-Lu5KRg&8-3(J@_{CEQWOOg%2;x0=7P#8cnA6(kG?@;
zai=JyKdG~;?JVZ0y3-(F`?`d0UIS6hF2`(l_no+{`S8K($BuDWEUwLwsST~Y0{%sq
z(aU~uB)b~IMmIX!Fu|WIMvtD6%L*h(K9}0Sr|+%kiVcnJ5y9guC_m$r$)IFZh?3`3
zy4F3+le4Y5i+?jp6QHXRCRclegVZ;Ur1R9`p_bID7xSg7A<{Cs*)er&iWBbXpHFIb
zEj@)X8PMv=r;U<HK6RUCMCCMe{v&lRpJN?odm`&0^2vO*BuRt}vt~0vYtioDpN!IN
zp7=_%1<h>`R@1B&oYsO<YJ>M6)K_bojulYV@mgp-$o#8;NNsTIjz2@u=yTj)aX*qo
zNEkkr8D3x0ovc^2mD<j^+jJL;1N7K7A81edc@)YNvSCewMc$^bzJM7Z+cSVy-<4!&
z?TPq#HwvvS^0(RY(bKOw5-jqujY}BjfYP7LThrkDuSGtoOh4uG1<~qjUI0Ifyw4qF
zfi69d`z~F&boTT9JF5;=;&LeR=Z#*&+0B)e2nh4%7LO&|qBl3npG%)xT>By{1NT`x
zIX;UgvX_3{^ms$%`R<NxmFHueeYkzLgEtbhejRFJ9H*%Ic(!|h?J3yA9h+41p}vM*
z3AN}q7AF}ps(;W|ABWh=Lguql>y_$y!{XW!2BJZXWG_h0nCFK@ITU!b(%eS=+a94`
zMc>Xex#N@I!B+zliS?W({my(a{N*HQK>IRiIRyeM;un3*OW;L|%XyOYu8!{IZ=t{|
zfchv1rLTzw^CsOj2qWB3o4*kOO~<T_zIqLA-MVlP@E-KldMpEB$;a{$5}Q?5Z~W2c
zbL;lQE4?SNQ&g(pb{4n9^`(DDI<qxOUz3C^h%RnG7fKxwct)Pfqn^H2*(?Ja?|6{0
zctL&t;QHBA|1w)Wo0+&V;FWp?vDS>5ng)5xlEw5b81OtIHz}=9jL^@97+~3CrX;{!
z5aF_JFo`>W^;U^m8h(9|R%QC?7B<-Qzl5Ma1iDG5Aeg8#?^aGV9l|Q}PEge+s3MKB
zm8rK8^-3IB%agwN9uWPN+}D#H1GdVa`29W`?jOc|Al^+gO@GLe&zfeKrf10)XXIwd
zdk~If5sMs~l#Of|)j?b;6EHrgt_BRz$796z5TR-s^wkw`2Lv2KjaO5sU7`A8Pz(jf
z+rLP7HQv7a;j(zsGrs>rykRJaxD07eX8{*O0f$h5ojZy*<g%Y1=M#^<#zoPtMw=r^
ziGVY}`;gnY9|hvf(Ur&8af+K_jDyFR850g$&!q065VLs92&1PrLw!#b!p(bF<n1hw
zPQR+JJ^{O;q6!rvxV95|1xLRgf=(vUJn3sf(DYR^pjU;Uui?~=5cD*To*RPh&Cxj_
z=vvPE))4eCPCYmTox#z4LeTUbCkPl7g1(ER&sc*8Z{+CjLeRM!JtqWRz|mPD=%+Y(
z0HJXUKV^!YMQC?qlBsC|kjRBiU3t-kiYEFawI<QdSf!%IpyEXrio+%rj3)O4N!Gpk
zq7jtU>V(DDp!%9ysGF*-6kRl7neH~-W6Hy{We)T%_<|qUYxuUlD*Vhd@<kjjX!6<X
z@G$ROB*YNWBDE|c0I>7hUn8Qvy<;hX3RMVUf;f?6-rgD_E^5~xBF5<yWh}v|BO=D>
zV+~PAcL2Fgy?^@+BG%nX4G|ZnD~+18$T%^gyER0-wgaLx4H0q<*;(ZTnVWb%?xi6j
zF98uBWEWa%Hqjr+dqQItT4<0kD0!_S9mkw1clGYjP?6thSow*)FVU1Y#0!;r(*Kx`
ze7l)4izod?x?jid+i7wje+cAv<S-M?Wn4$cxg*!(`~YzOAlRxq_ZOp->&ZFqIv=iI
zwHp1qbsPRntF8z~4_ABGqS!f_^`XlbzWAiY+GN7<kEd_VU=r8W($!S8BT<rOV>x7r
z&>3DdN@f`Wpj-EdShv5=)`COtM4~&dE^$vC!vG@s9jZgDct-ZXIK&j~?ls5z1y#Be
zY+zvVbiZdV7VD(mY<J{l@O^`!6W*Ccfs=-*`R7)3W&RQFY6IhUC-lMaT<5#!s~geY
zGx=PGeq9sPVX>Zdox{>-Vw=1BM>tWc`OtYAILCw9VjWTM8Gqi@a?z3FI^R`aeFeJ4
z30h?#mU8RjQ$RL_2^~qR*&7))c9>h*tw0lEpX@pp;jrR}=UkYhIB0!+W<5FLl2(hm
zdlZ<+XO(j_@2!!sz>lmlyCr2QCQ`OnksDJRb{{g=Y}P+XoBK+%gCSQyaxWc`iM*k^
z1I8ke8B)moBFSAtROld?79*Fep4b}VknPqz1`l|!D{dad4G0!92{!0ao8^hD+<nNM
zvYrl+cDMBZQQpo3uGyon8A0rtcelG*=!~nHm`OE!JWJQmM$-&6S#_^Lo7|lirMY#b
z&v93ZBUg$hs!G-l*43SbvK`$K<j}9sTa#2(1z;L%Z+{r$@^qh;A8h-#7&_rS9NBW)
zpF>bE&rv?Z9g`wpf5>yCUmpFc&(Js4kk3M<qvNnxsd*9zNYW297OT&F%lh?Fds0}D
z{$#^5fT5z>AmiCfKk9GXobH2yHqamaR7~3m|AJs}hcQ{6*xDu<!t5XQcj}&ltNy6J
zN0fux#CY93urEMg&NFB^3N0I3V!H#LO&p@zvOMv%a(Gi1jvZ%1MHwvmdO>CS>IKj`
zsg3I!vKBz2TvqQ?)QKJFSQ%JP_n+<w)>bt`CwOq+&9(KBqH60!+)+Nbl1SX_=ro~r
zblM8t*d>t<cDJ}QX3=Ww#OW=m4T1jMx}8v-X}U@NWrqB7uB#n^)q-)jl&&Q0s=m;J
z%QsH{=xHF$Vc(nO!=};4A4pN<$C3z#v$W2`;?FbkOUM;intz5GtfNM^I`^??-;@s~
z%4?k7B5%=G9|i)Ecs(4}^+T9hzD`~cX^}IHz+FpDEN3R;_6B~Ng4@CTHVwB2v1$fE
z25yTeU&@&l+%Dj^IZ%XQH7UYikrOG8$+@%Gu9DBYF5e3MV}nWEo{?+tG$D}2`anEy
zPt<V#_l*21sQSWps6LI!g7c~J`7i|iV+U#a@Qi#Qi1st0Z9<JQ;1KpYY08kJjOrw)
zEP;*CS|U3GGVEXB-=m*V<4wP6IhdbqYJfD(JKVa{*nGf*l-F(n5qBDld2t^2S$(b}
zUG?i?Nj0wm0Y^*&VFkQv_YsTdmfH0+7wv9wUvaj%e{=M9c@*+kEzJtuU}?vC@`((J
zozLljgvCzlOBA>NS_RnCefC|!o_L<26C&_vhI^vvi0X+~;7-KJj9mEwJUY>xFc)k!
zTMukRQXAG+Vq{3>ILtpEwVs|ALzwejH_(9f6E@du(bv#{y<2w<dm~qSxV}0T{s<M!
zhg_qXoLk(3S7O?Hat>^GO#W7x1M^{>4^2_dI&@KA{R}wZfq}ld5;us}XoQr-x=r>%
zL*W?j9S8vA>RPvf?Ywrk)HLg#YS6E1Xzk7Pqpv>7I3RW(#7%00#qFS7)bJ7F+~RBE
z>)M()=k6`Fh=--HHO0do`CE(J<jYBE{WOrjTo<jFDfYm6E4p!gcmEs!P9(w+zL+*n
z(zJoIsZ7j!npvafN66G#Q!9Vtje~OFd^~@kzbv*`NZ9oxhOx%occtrsPhb595T)))
zJ%f7tL2^1rQdiFIfD#1(QyVImCv{B$Q}0b$e$eaZ(6z-%diB0UzALwA`g12di)zz!
zX1N(A`6t--*A4gtwBy#LJtYiCzk>w>&O=8_{2jr7|GrZg@Y%y;z!9k926Qf;Q1hL9
zQeX2L7%79Xj*w5vjTZOFXJCKjI3<%c8z3jfIAYcA&F(J!o8>P4^CLPAsosm0@NuVC
z{-*Uw9=FiT=NK2+X}4KE1XH;!Y1E2Lc2Hxl_O8yiU^EEu=vuIWEc%)zlH{+nc5{#H
z1}Wr5*l#?X-g_V9V0lAvp;`#q24_?<xu6(5oDG5=a(9Ui2r5CIDp(xu8S_VG$6Hpq
zz^ZyU7@|*hK;azE1oVvDjJeWV{w>Uce4o%CsulKn8+zd5LmOwNa*2G(J+c%6$c^5a
z;3YV?h(iiEDEm2ynUP=^_fz`I1tsUByvOV5+(T|`{Wg~!CR%k*!rMHS^R9DPV?IS=
zvK~0Qg~HZ31#>Kh02>cSa1ouw+IJ0-(&w-+LXI9SeoB@{$jK>)8$-}~6!~Z@<)cq|
zjeJ0MB*iKN4scsFBlPfa(UL*6FqQnH{OugAy}-PO=(5!f<@{7dJ$0WjGdOvruOxKB
zL_DYF$*USc!WSL0aTl;ZPBX0sD1n8hF1PM+jIt>*34@omo0B3jWp+V|T67akxd@si
z*D4Sxz`_m+{70S6DI#4Uzg!4g@hOz^6IQ_PzH1P>j=>^s|Md-+;7sbkhDdawOao8N
ziIfXq>)KkJB)_B_{jWCP{>(CNlyZvNLx{f6R}MOiqWlP*&AA&2Q}YMmk+%Y{JHZ5h
z%64}jMiF~7%oBN$M(BPkDHeYpHskLEw<$8C@<=bUjD`2<=q7oGe9F~wNq(3}<dsBX
zl9xt``6S^K>;Xn{dt*zKdvcn)++1~J@g<+H>fklL(^${SlShEZvJ64ry)i)F%l$aL
z>Qr@TZ`)p<yccBe76R7pU(&y+#fcgnJL{_-BSCfNaK^*({XT$r=%cTGligrtvko`e
z?gSqwQX5R~QZTZlXqG>kklK)X21l{syARjwb>eKG8kO)4oCTYr_l40JkI``z5rCLz
z9N$r0^tZgq`8_<ZD<n6|8Od^4Uy*>Ih+k6o(~p3Nb4^fHp?9-<r2mPqAKbSj;y^c2
zS@$(e<+@;Wwy5o>^y*<jF^@8M=>A~%z*hvDwa>fAUug-M9OSQf{stebf0TS|J^9!y
zi)VR~LH?2L1=!k5#<5-zjtAqFEb<%77kV*Y$lH`X=va8=Rk$T@re|^d;9gdo2Dni&
zxl!#0Fs!fjTV*;%MDrUAvuPAYpNr$eT3AZC4KiD-HzhrW;L-KLU(mzNTg5mx5{L+z
zj&5oi9&9uD;*Yl;3&bOambPK{l(~kW@g=7=$n7Mv;q0NtV_oEC`!4n@QI1R+xYuI$
zv8Rdhay)yKk17L6*?5`=6^W;b?D=8Z7UhM@^-1TcbePJXYOKaUg8E%Tk2LOvTJcCj
zU!8$dg_;JFd?`!btFLBH*V`jZGL|4Gut#+3@-bSr!0ruyP#4%^QDt&n8mE8gAnt0;
z=&Mtx_EMO|)2}55kKwSa)*ZkNU@Baf=()o_i>Elrh{X0eP!nWjLli_~c7&yo#b>~V
ziiAJd6RoD-4AR%^0tM#TMl@iA%0Z@LeKq~$Lr}#IUQzRJR*~=$>wM(XtVn;BI!ygA
zi&oTLWg#+;V%f_Uw|C$kOW^R^z%H=3{Rles4#bf7d_w*YeaTpwjWfFk*Sd9+nfkiu
zYmUKnOjVaEA*X&7t+2r?9WNr8<sZdCg7P3S`!5Lm`6|_?M5AAL*DkkF%Ceq7g#N>I
z4%Uc4pBB&br1;c^jaN-aV){(Z#!T|wJ_rjphjR^0-JcCL_JTLZw#IPzs5$fdZ25%z
zneq*&X$NyxQv8bVV2DpVM$*-GSTb9_MN$4q(ST4&#AMRrB7)?@)H7yz<V0k1#RNZd
z>&D`i9(Y~F`SUrZh=kA?d6lyj939}O8~~axFPCVRm-Le(IAtW~qb%S*Wh6yOP#B$4
z>Q`+>?@-tXyve0e*c5PVeS`KDp1YE;f9meNo%>4$+WP(FfHDB%fSzD**zSO`4tmCu
zkw%jo`47Fk4z^INUos;XQ}B33+R%*!tFXXc?=YOeYeMk)?JQ$>emi?F{z3@>a*TY}
z5+vg5)G!JS)%{i&>Q#e#sInFPtNGaPdbCo)SitYn6e`jc6y60~3xCnDm`p6z(h%yt
zU_*EfgF~}tsae2JuOqT5B6|iS_4^khA1OQ+Pk~&=jmRE&6)7kK(3=g3dwf2#+_J&-
z?Nyl;Jj|mU)KlJV-^J2S*hi*;Ut~uV;=y&*FXQl9!-E6pAzoJ1ajI@j<oc@K<rqMZ
znocS^(LHgojQ&Xf!e;z+9?l+%)&Qz^Irj&@2jPrH<~6cOLpg}y)pnHnYkZCvm(RNR
zI^`a?LkI&}NhJs7f4Q9vBlQd)1QIFFog$I)tSS;|3p#AASL`VK`ojKoDGqeR`Qsv!
zTX(ArH@KkgGZ%H4qwX_5gnw+JM{M#egA&h1t@}>^XPo2pfiu={DNBqnaQA4Ko4Kqw
zG+fHi2`e%G@iklnOvvNwPq^cHMc$?-`c~axh#^j~hRUb0F}hf@-;ub!;f84GnX?!0
z;4d6)<Zl~KTod-~=a*<%B%hpfw>Nt?6XBnWnFuGcgGD&Q&<VawRfKfE2)%H}_w#o2
zOcMz2UB8Or)vdb$hZCd}evZa0$oGRc-2tZZg{s4JGUc9vgG_zRs}z@R-P1^Mn@VtR
zb{lCA!jQ{=Y^tmS0KT(ZyYX>zJ#1vs>t=$)T}ve5(CVQ4b>pGfs-3{hmTO-|0X2{I
zGon)~vwW?4hE%glU!6}g^4D(m4Nk<(20T(BaYcxF&y)H6?;Ai$FYFJxdqF4C18<8+
z`4qHX+R~uA*^7v*`*k5IeTktH{xP0pN<*7t@C-hh2HfHN7m8E&pE$Alt?lP~7@S-8
zE)FZ`c+kU#dg&qbZQWvaC(+r#63kd^52##?9+3X_e$I+I(w-;bPWWAxb!*KJ`gJ41
z0h1r%oF!aevx4!K!Aw1CptUkvdp<%*8|M(PJ+^!G>e)+gI(zYNPvN<2e>w@ov_Dl$
z@_)T_J{Zs^q#3viVqhJ=lda#~78dSon+pGOUBt1(ChGNKq`vwdVsufbul^6a!HV}|
zc7ubH2;_Fx#RzA$JAEIN;hD*w50sNJJPAKT1^RW7;q<&WkK1PqMBm+lgQK@LbOnEG
zSVx`R)&ECqTDvkIR0^P_IcE9j#=2Eu5-nGmzTDlz&=6?l6eXKAxWn5eRVEy1lwt1R
zYs$vmhobkG<P_od&;#DfA*sZX4Xx9e8foPWHNF9x@BaQWMMf)f7xt}yfWF{ZJ-|p9
z*LyXaI>4U<YD3~TxqeX(&apB61Nc7J6*m)bLnP@;W_EJUcj;$$;Xq-t+}oSQI6=;5
zYp{7Zv!Reg<U78x@&Ou%w~Y*i@e5w3kO6|nkN)Mx-QS=6vi}JT-g^d<6)BL~zKymN
z|9Jls`~~Cjg7HjfT0M8x_3_v1SG^4m@&Pt&E7y`az$(?}z2Q?oy~;nHu>k+{ud4&r
zcd+R)Ve#aE^$Q5)PPhe5{j1iuex`=yyPx2Wo{uS;gb16AP>#0%Qq+=Cmq4k(djA$C
zVtW4sH$<`xQ>bMPoNd*5WIg{WrQDS&*Ro2ofBY(UIE)_deUGgs%<!9p7>q~F2fyb$
z>PPT*>(=4`fD*#TfH2%2T+C<qS>mio$Xs-msK<ERy4O%A9JA&dkkb)RbvDISdldG`
zJuw7*btKl<o*6ITHBbGjB?vXognD|l@S#V5H*FXU>M3D6QM;a2_xgwK20A-zhkTMA
z5Y2+4u!#-lNN0B+HAS~WTjBD_2{PiA-f~j5(?p1~!6}~DstN8e<$AP$CmlJv$J~Fr
zNlp#K5z8lkW5OYy;Ixp=xREE2M-IYHlt*@{=Uv#bb#&gPuQ`BGVkOc5y<@PRSd6cj
zSYEW^0m`-TKmB8G0|v=WOt6g@4W2Z`SMEL{pLK_y-P>P`fClg^4M4}}Sny}z{WJCS
z%bUrhgB_tum|;6?sjsGQLwTmW;5r9g(mTAWE)&7Yw4QXC71oSerprY=S#=K!Uf3qx
z;w`I4OIWjf5(&qLbk2?jp{vdPH3=t!lFFUrIIiy^Ht8U}S+08$h4RS9P?9I%6}SL9
zBW9KQb$!Fd*|4SYa5z@ImWYHtXfB5<bEtt^7Ym5dHdPWIx|9s6is*OBrB;!e*xczI
zfGWP;bte>5slMl3f#BowH#;XDxeiTPoV<b?sCy%27=+1)RqKft4)eu?;ysU+Y`?vM
zl;C}gfzYdoDarehng?OPJHd;6w~6RIp1v@F>s)XBs{W+v8afSTo_jq&)A}SRhiSX_
z`V`#iSJi=&O2w3(3^Xa-y9zb6o~IbU^WfJA2~|o&!Y2St8;Bo^1eM<zM6ya1%<sRb
zsZ~Bg3~F6}5Il)o-xS?8K@RhVi*aXr#{c5|nE{pPi2F>CQ+OXCep5Vm{L=b;V7^cm
zF#hDcNG;ptVeDH*fqK&h8n!n}^;77RU@yi>ti1G=F6;XQ(=asA>HE(glB3Z3&w+QJ
z?IZBw5!8pbpBvAOqxYcME6+P|HrjiTuC@w}fdfxEYT?fs)EAx4>`?ur^Zr&+fA+{E
zwtkN=Cq)g?jbaR^Gluc(;f2cZ6)<G}i1o53{a^-Usya?Cui5NWC#?knE3&jEa7H4*
zGezCY#aMmP$`i|+^z~?`^wHFA)YiU++SD`3y&thtiJB+S2yOld?8b0IBKFIy0#5~3
zPa>Cc>nvzZZwc#b)-hTfI<XBsJLsWZcWk!DoYYs@fstZMAIr{GK7u~kq2Fe-VQUC`
zIHW4vNp6j`(%4AqR`>E!Bh;?@`2iFj-JfV3FYERKO7)rEl_aClB=6(rgA`~R>33t4
zI*bfkc@SP*NqH&_Juvcy4$1HHlOI??<o(ezBR3d2;y&I_zLt^qQOTta$$R<9?_=av
zkSh;1Lqg~UOTjz{*QER4ej~(3zYX-FHQ5io#9y@5*Gwl>RBa_Q^CMt0Slkc3r1Ig=
z8q5<mjv8|V)j`knzNB8xgR?7lY-8K$+0ZPO`@_e8Uf!IFV+3U{c(gt$_Vejks8Omx
z>>bTwq>=<udhynMdFu(9*3Y1|cM1!*3<;w#z-rqdBkc5PIh`7gSZ<UuzypRDiCf^;
zm7$PzR{&xf&T#GMz<w?0lH2c|2gx8y&<BQCa4UvL?}IiV2msGxu&gU^f?I>~I<T^C
z769cMta-S4YhJ`qnsoOp<F9Pu?dRu3{Ihd8JjJWpwvvYVG5Q40f#CTr)D0<5;LX39
zZ}@l?jb@{m2`ga~^&B#B=+Htj7%8Jy&|omoTRF)l1PF7@CY=!&p_3lCResv4j<p<4
zt*?Fr;&Imwix1+)U3;6Kd@Lj9?^UI5#Q2zMUV%;Uovv2_%Q}lgU>^fk)};gVR*5_e
zPdJ71Ua>h;J|VOJht*YM^cby27Y$=I=}N&$2wa9+;7?(|7~3>J-kX^=;g7(71*0?3
zD-Af1(nKZMpEq51pI;GI1o%ebR%zX$D#8x$&{w-43=A^t7KxASqwNeH2UymXREUxN
z2UuBW1?c@7rj5XS0D0`RLzQ(KD1&%(b1-^9&jVs#*c9t@bTI}j-=*v!Z2k-%e$O<*
z=&ZbXHixEA^R5`Qa-oq$RU|3gGxB>@&7-OcHu8>yG&FB3yE)x|nfO6;cM@H9mG1AH
z?rlyt;AZNa^GhYV?=NtE7)dl2W#<wM$fFz1p|=5fO9Jz%GKcdk<ouq}$afH$_C5uE
z%FNBgv=ZZ``7la(2R$L5FDc^r9A6Lgq`S~kDFL%4T_UnC;(?MBj$Lp(r1}01YrmMc
zPt&$vK<$UH_WNKE(sM`caqxo93}f&F0yA1hc*u;F1_WZf2v06Cqv30tU)b;pQ<tU)
zk_QcsAS4wFuVwSyan$qq&K*H%@>53F*~~NqD)G-uW5AQmOn*lkHZ!eYSpZ+2L5UM=
z10|gOeEkP?-AR*@r~4>~u%Qx7*cJgNgl2anojR5ywERc5CzS~32*<U3>3Nc+>H;a$
zxj|Wo^qShxr27w8W2l%_pG=}LV;0~G0Da9_5~6A=sfKMMFzQi=U}e`Pn6p1pBul}L
zned6Jh*0o?x-*EEtXoH+;L(j*fI`--VNiMx2+Wd38AcCoR{)lEy%6;bI~!P87X^_0
zKmeMzqd9VEfNdUU+hS*IO@Lbe2D;`F>MeaSET4L&Nq1AA!4TfyO`bsvfS{mL@IsK=
zKrZW^EEV1F2Uga}0NH6T`&tnld0$6H_PAEkz&z<o(MaTLyikm<BYAW?hqIb3RLHuQ
zp-><%a_CVG4V_P&H0k~bP-y5$UXw5n<g#uNAV@~>fow{1imW@2Q8C4sm}DmbdXMrX
z)jrCfK}ZUE73vEv#V5Sqt2y_sBbZE4fV@sNsp)PZlqY>8uQ@|W%A?EUPzxn&nqZYT
zHfnPl+dt5gF4ysV&AQK=G%K~C>Js~gSM~F7lLu$xp#vQlRlf?~(Lc5tI;*;rA5EC8
zgn9G~{#IRT=t-E_Xo06X1F-skzdI=P)kLqJ=f8)X=kwA^iu--lrB#f^fmZrQaj=B8
zI~Zm%<4nJoUUiA~fcok-c0UW0ruU;j;~3Uj56KQv9iw>kQAQzQDTwEBOb)3!0@M*$
z&gp9^(KSU71Xs4g{8$^%J82Z2^mxs{Ub>K*Hbw$L{`5YqhNnUYl*QyL*p8jt#7aEO
zRleXTx{dyT1wCFmJ4S3`+3}2gz*U&k_dEQFzl661Zjc5%hLPj$`oiw@5FSrn6P2Ni
z$+3+I(}6gEF5_Syd{qr!VoC%Gub<*cRTrfl9c(h(0IBam{-Zs`EX1>T7`snjlZjCy
zlje(4fl7#vF~{Mrw>yT+)@7#myAXU4LI{}tdou420k|90f1|>#OSg%0#!DrzJL+7Q
zhUsh4QEz%5{Yl=pa9dPcbt$SV^%et^zWOh~d9S1j)!wkrpQxTrdGJ0J)t`g2YwA&r
zdh7sDe-G7vrL8x;5B8FG0xE>uu>_9{z_2F1p%Z{<X7DBiV7P(g)oEZFH{Us8y<vKv
ztnK|CeJZu@;arB1@4+4SPp=zZpm`q|v69G+H8NJyn<;n%9joly0IT4AFq+Bm{@X<h
z-UXIVvzhEBFrrBg-;|=q3z&+%uY)?UzF_oK#}!EN|It@8>C2S(VN8U;|LqqpD_Ou`
zph_2bEPa21z61(ajpTdJ7)(1fP;5SwBxr&159yOVt_?~+cvX;gev!&WkkQlBNX)8{
zAurX?mw*$uC||#;)u-P+WSXv_Oc_7C*%1b|cy&pKukIz`I2fDsKtMIKJu(<qfpIOp
z3os$|yBWEu`!n?GPMG!UPLg3O&xbk8BtJjLJE?rPo}LMwRF<QZzry3Dle=5+)Xx;X
zRrwGo*M%tO7vu<dZb)HjVz1zsCFwnKZ*-u>i^}gw!EdmZUn}Fcl=1U*%#Xdjz?fhq
z1Zlkx9Kz!6D9P^_C)R25S7sScu8;0M0x8Y?Pbk-ctJ?V$xThf~ajdH-=jU8z(>+_5
zye3A-;!(q=mGRmCPJqv6xMzH};|8yxX!xk(#q*p^6mn2%@GBm00r9exvI9Xhdf)QF
za^Iv><l#g7{QE7)7Hm4_mC!KWE+e}zrplveDMu!??oi%_1ggJT@bWL7+lPK>9X%=!
zz%fFY3OB1@3~)$@RfDcK?LR&7n{a^L?0tqOi)xGl<6!k?u-x$1pM#+Oe22zM(HQSX
ziSKjZ{T2X0j*7Qi;QundHIH}UqUa?ZoP+2lqnSKC$*@scV9bCPFqia+0uy?N2i4c1
z8n3@&3?D*L8UwxW!Y2v!eU~@ai7XnFe=fKVhe7>m^x~ZbU${0>==G)eLAT43;_1*O
zDO5lu6Qe><#<PX(rx-aqjroDy;1w)7FUESLm@Qv)e?U>QpV<vBv$R7<GlC0e3)}Ro
z=YrBbox0Y|BehxgZwy-ymVtLE<8kt-yN#(bArng(dGH#vJcdDFCBFJC(zYjIASy7a
zN3bT!C!+ELRtc`Cid+y0ZpvGzk~hl=9&xVTPSrsw($}yriMY1nrBKS_s<b%d8b&iy
z7V-u5X9*YxJM#Dr+*;o+stwSUGdfy8gDzdAd!Oi@4Cq_w_BPw^#bf-SyBCer{n_In
z^%kK$`KfaF-;C}!dAVm~o`%j&bhoN>?{T`VoGw>GXCk`ZD%~GB-SeF80S(=iM8}Ua
zGoaCt|3V!bqeK;7V&+s9L1;c7!ci<6jYwKS4v|Lrn!cD1w~R~*gKLJ-m+>QMp<sc7
zQfLkP582ImwSFBDLiuR{|D^ZHEG%vz9u(H1M50F#ua*wGqWL$Bk^u=rol<`+lZgH{
zgTwFd?@6fVfA5d)_WAgxsr|k4d&ZX(=nruk{L>ksLkp-9W2A*IerE^GNr!Y)tch{_
zCdNl^g|1gR*57KRlFK?0wo+B8JSe)+n2OS&Ws6dXZhlo?MU<<4tpn1X(y!AFB3K7l
zPvKR+pLyn>qlH-JMN5+LD)1Kh7zIAeuj~PFO~aBgG{egK_~9nc$I5f{ERJ4AJF10$
zpBu_zZqD80<ld{8Ata@O(=89soeH8m&E?@=Z!l7dWXaM%c@kWgCq+`8j1RS?Li}m*
z!k;KQ`XgT=FE)a=qpz|Nl~|3C#{&5dA*pr^Ztys=4qaN@cQGULGhAmEjKMf(i}F3B
z<?CU*ugK;)TBu}uM&9x)ekBSoU*0tQVIx~y1qnoPxD0-ZIZ;_jsuz<f-Y!sne3N?9
zwNA&=tJ$zkwiWN3P&6v5Q8Pt8N?!t(7F;Y;X8jA=-tSCVaG_Ai#(k!H@T-~byIzq7
zw$}XM_=YVG%(72uMmwTUX7r9`dR5M+Yyh@(t2+Nz9i`v!s5!IbdgS^QGGxX#Q6krm
z-mah82F$`|FzJoJ7avu6;O+ztv$xep72<8pZ0k`x$mmD!9(A;m81IgJiB50WUW2WB
z_!3F}QrQpTNU)<ye+V{F9{dtcg^uKck4JZM4HXG%kOIYmVWK>u4&Pc*X23MAu|9d5
zBZ22d{>I9KFbmL5{CZ7%5*WOJ1A@tNe2c75uto)f^$OV0;9pchuRQO4rNlyrBF%n-
zn{|L~HJR07Ws6UfJMtgMZ1LpJfyE^EcUXQjI+ZVExtITd-xGtJ><$lNsxVShQ{+D=
zflyQavVrOD)HB}e-%#^A>681@^circA6~<|U8eVq`0v;{(yMY4_>(h@1aGY~z4A{y
zCbQnurx4DB=>*3;-EhmiX$)1#KZtc`rn~PO@THzyf45@v9OF2lE=C^)Jyy-^r7d}j
zvLB+#Co!CI;ITLV2ypAWe*dVtw7M65Qi1-!gYYH6^)y_(W@{mLx*Ee_?&N=eiOvhH
zCv!z-IF!5aYR4|5yan0VV)ooWpi|c^$GOd%_-z&4_O;AWHU%6-zUgW!PPro2QuoUB
z<QM7PfWe7_qc`l$$9p@3ccq`63%v6O%mPVSa^!KmX^Zs`IZHg>H_<zP%vrW5KcH{4
z4y-5GdFM?NAvA@+WViWy`XZo{`30?G@ZA8!_IC6?*}eRG#Er5H<Cxq8I=XP`aE4sS
zo5UDrz{%+G5GHN<7FX1uQFzn;U{^eMo*FN2i~gi$m$M7rXxbrfbKj4z7i^3Msqz|_
z%L{}zqEGB<0`ld`rv~ZWE27>bu8f}e9aesV_3(8s_Ps0Z_d!h4<x?|q2kEoqUzi|h
zx{*#U<S%!(!1^DM(Z4de@kSy;pZ#3k*?)8NKG(%?8iwB7?Ck?_0{yG}@GE_)6nO1l
z{sJQ0N4&m{-i((o!W>u3aX%21dWKZ-6@{RhZ_e&!`2JhuubH0Sr%FwH(*7OWeVUs3
z|D7fw{Jcp11|tm?duj=~e;6&~lN+M|Dc_Rw&cbQHHaJZI!T~Sy(8)>aev3Q-lZuYc
zXK+g=f1CL&UgFiw<F{$bMp#Lnz*Nnrx!O+b<+{{$MUvlWjx1&_82=&(ps|(Yo|@Q^
zVaZxbGb6?~7Sykdz_Q%>t#7LO$(2tJx+e9E>q6HDqg;o(vN(dGm3Wf$D|S+{`w+eX
zEey@}(_~@T!z6#nPo<cr>0Rf#J{S$>;3q!NI&&Euu)$Q@p;~ULi(!tws3VzB#j~IH
z1_&zh$=Tgxs@DIi@@ec-^_s9xY3eSfbr|Od_(19|Sb<Kzlmp}uCpY4NNK%I59(E#Y
zd2|!Gsrd4e87dMO7>ca3RJD$gq&xuou=it>9spDK%M+LanYj>;|BJmg_9Q_jlTdz>
zbz(21J4rDz%HLrx#@KH%YD*?7cpV*GZZcZsY2pdX4ATd621ma&^NYNjrwRC*e2Saz
z13L6&5y}GCET2H+Zc`$NyO-gC5^<}zE`%dyxrfoIi1#k|jW)h${v&_E5eavhP-h`e
z4R)4iU}wLxTyvSToQGKg;}QPyRR{iZ$KO<c;qgp?3YXbHRu)bYhkL)1+`*kB9%Le#
zKMO>2bs(DQ{1XIeO50j+V*ZkVHp)SO9rz1R#fgJPg|6h7dOOX}nFjs3`(yEavJJG*
zrX5*y#_HmvaQwtUSc7Xv#%j#kkD*6;J)Gv6NH*8N(VSgj4*G7ZQu(UShy2ar5NbCd
zk<W|`mBKv<yS^igzkc0$))|5rz3e_r{g|kq8_*AJ`@(DXArW*myW!inSk>y$VaWWU
z+8@T3cQfvgByo^FR17g|F+sZQZZTnongk83h!x{ya=ZYGGC9ohG4}(pXLkw7yWnWd
z*MGA)TKJ=Tf&ts3a6TA~zVgsMSYOU=Tv_ZyPnr74ugHG^vkv=W*sqL2$SlN?vgGe~
zf3F?Dx1=Caq<l=wTT|Vc2KW83`1XolVz&E6D;kvF)GwoDi0F89NOo2aBl-IA?3ePf
z{+nB0Q(Q08SS0oPP<YdFM(#!_IvpztES8bG$qu1bQ2vQ-=y2v~_?%h(VS;|$Ph5-N
zcg3L0^4YK-NIV_>gd1hW^@&NiVk8<O4YOHtJ=AQL^JC5OeE1fA5l~0pNa1Q@OvEn+
zw6H*8zZfus-%>i>i6`M8NXu9~IEng-QPz@KnAS4!<)Dz2xIUl-_G>=M!!K#`1I<+I
z3+;n`HU4P6o$jA+_0=^PKP(d(f;}$_!C1&f**z!<ozq1K7S&#!?=R=t>oTtEU_5z2
zBEB!m=WF&;@Jjt(DV|TiOVbLA=W9akr_KrQvN>Ur0r3vAt<FvggFmU^?GNi5auJ-M
zhs$5F@Dtyp4^}WDo9$Y0E~^ZM0HN`X{f2xBt5{4Xx$>9q(ageg&1JG-eGrAz@*d4E
ztUr@}9o~Inet}n)A?IC5VJ3OI3A!|Bqh>8ED#HFpnt*uV6SW%mZCF2I9%3#1aU@u<
zOlbp)5F2%ejRIRZCHF-dn?(C3HlEZUFh63A^Tn@^hGhi&=#&A2d4P|F=Ue#*Sv73;
z;Vk)xb};)%hs>GPrE4~8j(nCapYaRN8lzoM5_kb^Lq-w25iP0}^Wi@fR~;V@eIHWZ
zOKCVH1z=psK{iUn;le-B1I7PQ*vKqj%*Nq}0ZHJv>-(<EPIyET_5<WZVD^ZSy(oGn
zQxf<v15ReZN3WbGMXtjgYXDlbA@XjFn8=j9AVIQV>ohkk!;{4lkt}FErfDmZ#UBI7
zqMc_5N*4Y6$pX)Rsh4<V8S5W{X?Vz)@uW~jk)X^{DdbFynWi&3h7+4L$|vkaYw^83
zWy}lOd_wsY{sDEe=k8JNuI{`@vwKpa*}XW{U1~79SHur&9JoaU)C74e9wA}d6?L}R
zByXM2e=D6;%uA$$l>7c7-pDsGCsG>GQO*7(78YSLp6{GMzQyw$dM<NB$pp2!r5>fW
zR6J<IHnmB9)H0yxS<MINgEdg1P=`@Pu{|rFFep`eb3lo4z{hjtPt4ez`Jfn_mn8bQ
zNszwfS@BI7iEsvZ1HMa_lZHLWyMKoDXa`?UHwSnhFXJ909GC>(!xD>aLdMd)AR3DM
zIjIepvarqM^HuJkQ7m4tfaOb}!^&%571&ya<Qp}gV{7Z46fd7*ozRx_i2QT(HnzXr
z(|^1CGi{hoDBqHV{<Sx)gnzxg3y%f+@un{YH4W@18TZ!xs{ES$$-(C-cCddOr*0SD
zq_L~p#g))1w(IInF#@32fF$$VH04cj&~6Wrj}WDa&<*ke4$F_QHynb37AJx@JkL<#
z(KIAAhzDQGP!m`$L*JMX!O?Xj!u4r}@;+)YU}Xd^=XeL<rsMr_7;4z~ZeVX%;E~K{
zFED?>>JV<zovoi|MbQXzEEZY(h5<Xx^&i*J_Z<^Aw4p)hC`ONhQ0tqSD%dJe!Vk)@
z@zM(P6<C9&D*Pa8WK#37Mw-obMK=#%KOh`@G$)4bdXD8k*ypr-aU;D{jTbX$o4=FX
zt6|CY>`WSih~a~<qGx8S91C&+qJ=+4;^%rN{q`sM;d(2gSazZ37RWl`!B10Qlg1;F
zu1_n)@%a(u2vn!XbA_;?#)hb05&F|-NoehU?Q;2JRQYMG1^FjabbAv12l?MkLCeea
zza9rKK8y^0rk}7wZf-mj+1MUQp2y7KYSBmUAX{9C!F23udM19*`O)R_PiAfu(Er02
zPmugMzovh&oHJzHc-eYRziv`&;}KnBOLz=cKJf4zmC@TVf1XkHK7)Z};(c?xnfwvP
zu3zcFU;Ow7eqXLV!g)XYB8XB2=@AOdu+V|>IE`jqe3IOZq2sqOqMJijM(h`E*eW7$
zzP+gjI4d`Yu$stNMJ6#9cD0OS+*<1q-}pU{*T~|V;*c$sOC%^nhy)W7Ax>@gPJEK9
zC8Dv#5Z&xu1T*>lannTVZ#!>C8G=2Q*#lVrPGl0foBo{!Zzh^3_pPD#A^7*B@hcu*
z${#61fI=)7SwPbn`b9(yzSr~UEk;S6AB!*gQY@!7(4@gn2FadWJW5PM$z8BUhz#{6
z<tIom`Wvj|A{~9Pj0x79GXYwoEoxD1qtf%tR-@y<*?q11mCv3g_wUeuZp&8VHwHS<
z#_wbj`G52O4CpLW;?bkl=KzfXiCoKKfO&pnJ9eSM`TJsA9Xo$d2w#NrJeF^yp3Atr
zmv6Bqg9GHhUCloaV?4;7{`lodUOs@_f<>_<2l*vTQeK9o_*zACu-rqa5q`w;)B)v@
zKWVdlQ7!U4GNn5&%C$WVr|lo0GfYCeHulC?=Xl>B{|e1F7dPSEHJW&$lsIr>DSrVw
z3B*dHNm<5NY{2&nq>b#@%C14s;fXR!gJ35klNdtus*DE2POy-?Jfu!f_doFDOH+qt
z+91i`uQ)o$g<0g&8yA5)Rx8TlCw;yf@1|oT{kqeN9nc&szkdQu=f8IX_Qwa!_ZRug
zT$tR!=E^g!?WxL0KL<+n;DWD?_XiI4WAq!#g$mF@iSiRucjy0z7=0j0dFv^xv)btw
zxi||13H+I@FYv&#K+}E)T4dZf2!V}k^t19VF~F329~hvNw>5qrr4#}nKG6!;Xy#vx
zA77g0Q}#x?I(~4FPh{LUoU=Tm6aj%_@Nh>8zW?Xw#=;dUKqP@;Bc*#K(=Wsvl7bYK
z!Ufrwiu%@XIsIk&a-`#TNgc_oZ{^Yxs^SA`I|f`}eX+5OI@<#r{UAQxuPP;YJHgwT
zJ?Yn3<TES{UCfm~wa9xdc#8KW2x#B&6R7!b3~W(OLG7(^>ibRy6cb>$@J?t7Pe@Mi
zH~%(fparmnV1VBiNhdXW=7-a7%U7a?s-EEuMxy#^svf;<h1cXd9_HMF%H?RME{XAM
z`6leG*)kbVmK(_*K=L8f<Z91wZenj-om9R;P$1##x<p0yk1nd~2AuyVOd+If!Pcbv
zcvK*J;!!{Xdp%gjk6_Wl$dfRi*WjfKwdXC$+mFK;(v%Otdk%XMb>uS4B>2e=7>afx
z>{<6vNQ5y_Xp;W7&;UcOGW+<_g7U&?wnbx%GfE2P7Tb)DQe&abVJlx~FR>ZtQmwJv
zw#Z&#FD)?^m6t9w4lOG$wGOqGIqfAyrF2S)%XrhRM&o>kqioF3p^FzU9#URVQ8w3B
zUcR)<KBTmK-q5o7W#h*WAG*kHTkI$;vs;G%F|I5<HEqO*)RgPWcnMwuD#jSq|3=+t
zuP~OBI*j%byTe{kY+q(8G%mF{SdT<!Ep-+bGKwO5Nukj(-)1bcml#Wni~|ad^UCZb
zTg;6imvKOaF$8sEOiX4$aj|itv&8D4QKo}vuwRTRrG++ziiw#}US3+xSfle2M|o+n
zF?njaeO?Z_MWe#OOaQtY7{e9w|7`!61tp}AqEaWuOCzNI`UlIvdoHsx%Q3s+54T>0
zqugFHZwyAqg@fJ3m(Fum7_U`Ht~C~u)sr2irN)YdP|84NT}jgNn?4_g$*~*f7gP+z
zU2;)rxz(2EaF)+4H7;Lnv^vYnZ6%JpV*5h7Bd>H3yuc0(qQ+rcSjN$}ri~nEy#9J4
z)#fcKEp`;lv)xL0N83+vL4{*P=KO;43S&XJZH)2S0TtJ(f=`$>ZR#}R7-Nwg9_!c1
zkYqM$xNAV}fPYW3LB<kj!0*pcMIq-X`pqgFV^nov)T#?!Ljh9ZEGsK5hXqtufw!P)
zAzY-GF{-dRataE~<@QAocv5+(vyA!}Y+O`O>;wjmnLHpRZPq|_9ICJ1Zd-gin2aHV
zjxVUN2``3vZ!xA0OH;|E-$Ora<jwyR{mmm{F6T=w4Qa_h#RX**hz7@eqiu=3!a)iw
zv?1gWm8B)3r_1CDBola1skOjiGcL3(EG=Kk-A|>@%AKYOcz6^u=3JYt#2@w*w!$Hr
z+(dzAFLBz2u%3hXKzGK4&I*TduFaTo6VwJ}BNEAle}xX}`dxH44-b$9^Rq3nS&NND
z1@J}q4~wp#{t&h|z-K5)@t`d)omXD4kOT{&bNUl-X&DqiIZh4LT$_U_-cd?UG{l(6
zgKUg3WeNF{umZjXWpfzmQt56lT}<F*bZWn#Cl?J^i}gIT(6(qOi3*bi+e^?-5n3)U
zEp-erCY$ZZ%%x5wrt*0Zpu$;LIxbl6ztWGt53QX7PQh9lt?(jSVL)Gk-@=6jWya)5
zIayN&2J3%l#nK8Ih23ha7+O|b;DBfghgM+TN*z|1nu2RcL7{c1-CjC|Q>6^Gm#CR2
zC9k|-F-apy|5tp5{|-K5f&?1#TM~6D&+p^omnewO|DclpwVm2wh`({W<;<KCVm5y~
z1lcz;durxw!IT~IGnsRP$^866{Am)+ovKffomGAzbUE{vR{S2i+yEJ^geYp+is()R
z#lnK6#>E9C4q8}Q=i96c#>7bFQfS0!*Hn@^1xdG;hR)4|Dse8fmD{cUX-v#i61;jC
z{TWVw3ZxYHId@<yrqYU`rG@3C_QIj+6xs3IPfbVApON(EX8JRV{-n{L(e$T~{@CbG
z5&op6(4SQLGYoPU6e8E~jFb{1rN&4_2wcn<QaP3&DCU+r=1T(#{rYD4AF;V0D13)H
zE6Rt`tWi94uDyh1BFR=b&nB@7KZ-dc9~&hrMmL~vD4T1gnOW1aZbxRwGfx;lV^RRj
zoNAtsD`_(v2atxe%Bm<Rrv$-^JS+Z3TTO4Fm8l(6cHG2@{|a}+kkk?QGa5dyprmwh
zi8Nte>B52%DYvv_sdR_4qOd@+VAZ|AR$gK&mQshL;xkO5WoWU{B+Bt>IY`PZU0CMC
z^a=uJu}!5LBuzC>o0?_5DKm9wW~v{WHDmbD5&o)SQrY5#(@RTiGt2D`8^r-&|2@Hl
z_IY+kL9ri4dY)d2#Q{~~67^(w2A4UDi)WOXOEUTL80)zb5?n1!#STU$5uZ$0cmV>P
zFz6R|48!>_cv?XTj2@_GtQcGoSZ6U<{iDV)1$ZU}n_AIHITH>t1s;)?lXZKppz-5q
zUg-#zmwPAC`ss2k4DP5498~!FUDKZm|JCmr|E;ed{_(5dHR@fUmf!Wg+8BiDdvyTp
z>+36kzE`Vvfm*ixlOiJ{gG39b_nO2N$^PRL0z#=&ia@EO*Z(B`H-P1L49n_6YXUGA
zL)&{uU9gy}^7`MnZupI>`)^!vzi~+sU7}<4JrfeI`rUVdK?U7~`LA&Q72&_2eR1jh
zSD<-)2HjUqEjO{eRZ)fw)uNOk$Vs$NQ$b{*0GNu}+?*`R3N|A)Q3xcKVx6>;qWOs`
z$LGxKv@W;IhW&O&ElC!UTv$561j)9g>gEXY++;<M$X>=&zDy6D?x=IV?&89z{CKkZ
z9SqgvHtbhuWAK0XgiNzp!!m>W4b)fIifvYhF_eO-)IQ95lh7{Rj^K)>TiUbI72v}b
z(B^4sKiD%=45UGZ(pgIvE_9aI+0KY<uBc4~=JkSNAtJR1yDDPra>T`>xUXB`^R2;s
zZH>>DgSSoFR{4AlfSVuk`Szi#U+weJf2CO~`+QNTFMHVMGoq|SnTE0!Wf@AN8wXV=
zTTre=*@m(KrSu5+pfsRtLuo`Ag_m(tP#RI@cyL06vIXUQl(mn74@v{h#CD);!-;kx
zzMdiB>^TLc0i^|H8_F`2`8dd3O)$zjs>hQZ`r*V3l+7rc|BQTvr&M)#LY0WJ439%C
zRN^IrwJ7sn^7&d&8t@*90l9|WN3o!+LrLFGZ$`O<auD9JsYPkPJ4S6(kJ5-8QX9$)
zl=*nyD4$Ba%~y}o@DDugKv|123NMDzdzC3D>rm#SY{ToObtt8Oqdi_&sl^xW*3gS9
zI7DBMG6&^8lyw`?9&f9(pfsX1Zi3!X=4{6JQRZ*MI8c_MY(QCwav#b%lx--RQ6|Qr
z+>UXfG&VucD9cc;CU^(vsUBsr9(wx_et@zPWf@BP{hrk*8&KAvY(_~xx0kaM?NC;J
z4EYQg56Wbe`JbR4l+7sTqfGe}?NQdET#K>|<qnjUpP?O27Y%sYnu4+!<$Qua_xUPO
zwxQgCGJhB3$APGEH~6B=L79)z@CEdRG9P6#%6gRTDCzfQ6Y)qO<x9|`tVLOg(y#~p
z6O6J2CH+pFgeL_ld!c`n^gFQgQD*GJI8j!jY(UwDvK?jqSI|2iB+&0c=A)$FrK}|w
z<$9F$`$0$e|AGz=Hp;%ixKU<&i+YsJC|gk09e|#$Kz$4Ji?ZP$`axNH2>QTF4u->M
zk1_-0ER>ZfD^WJ1tVfyh9rR9kl<g?%Q6^pqzxf{HKv{+|A7ul|T9heA&<<rK$`+Ju
zD5XB&e-wI0S*f5Olnp3XqfGHaUc#ePP`03qx(a-cK`xYaC}*KeX@y*bM_EsJl>1P&
zpp^Qe{y4^ovJPcFO6dp4LnSV#lU-rUrb%H-3}IKrc8#jVqsJs*8Oi;Sm2yX%VPah3
zWPP{AQI*oTK4Whjo^&lWr1oZfl2`hCdk7&e!rz5YTL*Xt@atWd(?0@yW%cFwmw~s`
z_~_Zb|04eH<C6irX1T*;{sQ>4O8lSoL~V*QtO_^9CAuQaaYjC-pMXw8yDF+T$EAcX
zj){vhQ3BxOiO2X?qka>^@ITZa{U$}qs^I<zZw5ZO1N>dU8#}-|fKLQIbUcp$ZwR3$
zJG=~h6!1orG#*#@q`0=|@V~{x8BD6+WUG&<{vkX!K!I@?!V3c9B0k4aUxxZOsXp8i
zmpC=fI5#d49L;e^yX+c)zwuCLJLndXfaBu~kC6UWMVR7@uE<Go^<m3n;*7wc-T1hu
z30!a4Ak9X*3^(jY{(^Rog^!O*d^BQ0oY50GJ}&tY9dx~_izzP6)pc@Qb6CVZ5ixOT
zrnnSST=MuhBWTeE948V-(kuN|Npr2whm`2Q2>&+lJ3{a@zK?-#0RBs&wve9gh5~Nu
z7CsM!kdxZ~1iB@7zCu6Du3m(X#dw=B*HsY``ax=BawGw7!9$;Gh(7#?AAbw*IZq<C
zh+bTSQBDVbKJXr*2b)L2&7{9f(qH(27*%tV)N$e`O{5)o67?bR2(M-QiO=)ESK<Ls
z6Y&Z7@kDs+cbp5%Kc4HKV(nwl8`mJ_F+SceLUtATJ^KBVzuyVnO8oazyOEO!Q<}R$
zQR4pgZuj}`|4)0@0$pcSrT;uAg_KK*40Hz63kzy>N=(``DT>YwdDAq#v}u8{dUKmc
z6Pm{*_oht*F%TwHY_&L8yOg!)j93dY5+2sh2pXMIP+?gCD=IpP)>21sGHb9Fmy67|
z&-wQM%DooW%%HOtXRVuk&Ug0NXYX_NdHm<*{-+65ltbj=LbNZwpgoGX^+SlxUuE5J
zMNzZ*<9b9IB6FpfBX-D@A4Av^+{1DlkM*!)wXFnpR9icwo;$#Q0{oRh{)R|Y*wLV1
zUr~fMMVlZhT&AC%L^%iF{);bakbXS^d^vE@MT6jf03HXvP(e^>$Ft$TUBL6C-5Z1c
zpZ^KBS!#SuR8v&t;!VN0wy3Q{bjU#d0_=&l3FP%_eI%AY5N;0{*LQ<|2>f-z?~TVg
z=~u}=fc(A4PfC6bq+I2VdufX!$UlMn-@!k8;}T<z;}T<#<FY<7kyr4M{H)`$L3&8~
zryP61z1X{%dBoGl_*osQ-{qelIIoJHJt!B&zZ7mkT;^REJNF9P?Pk5%hWrua-zNEH
z{C>a;+;(sH8h?5ie8<4|5#jUN5A_eC`KpamaJV~{f#nGJm;WR7Qd#;FGXy=pwn%1F
zCe~3c=T4Nr2z%Ft&(F*hiGP{#Y{r!x&->gmbwyG=^uZj~P?SG{1f0iAk^OE)T~Ypo
zo2WG&gqa#ljYU_wcvDfrjW-)_Ql9(`ZpI3uVhdC{0R8sw!F&_c&yM@wx&`Wj<9^c3
zfaTY_33iC|*ZCM))A!EIT#L9_CtE$glKjh%AN$hG%nHrN7|?Z8{Cqv~Q^;>b`}_K-
zIdZ6=;DtO}BgU^g4{ihhjt6FDmRfnmeHhy^PVWZ3KZJ`P%1fgrfnP|!<~oIWLe{Ct
z!h-WqNz`4bj3-LDmr?Gyhw+RNEN9lYn#f3A!GS<I<M*P+Vmxb%<Jka@5^fN@2KZj!
z7-nt|d_C~pz~3q;dgE%?a}lB$@-GzJ^WUaOv@x=v&dzDles{9IKLq(2BO|Bh|H^GX
zJHVtro&^8Me$Er959_pchuIgsDDsfMO5`Cwzt&@rd14+6n?(M-l8<q{UDoeyvVM#e
zVvQa>r8!bMe0pRN05qyytm}*NV?jg;V=sWuddQ3YGxqudfc+C9Z+ijyXPd|yJEb;K
zIyxu64kFR^?)qP4MEVgFmv*}k@^(XBkH|y2jpna_5hyOJ00+FZ!?WN!2EO+RACygd
zW*UEb8ToVnWo8CjeK$yd&BKT)&VpYAd;xI(KE(Jx`L7cxGVjVhgY%vA-+JVyQ0`r_
z9((=V7>O60>bZXnxa_`koA5tE`)VR_Gmrc1x)1pie<c4&<QG4hyZnpDZ$<uEsZjR4
zD?EM0o_X`ozQ|v1^W(BQt38sx82OXPH~VVQZ;h9K8S<NuAH}orb}8@KyD}1OgSXmw
z`HG@A;wwy-H5J7*YUh8HPoezBS$;HMwmKitZH1s_{dpLC&w+2h0PrjBGwa>;tifH+
zRz%{$WcLRzqFgJU*<%K=e`-Jq@oc^o__G3eev0*xeu}mlowEWRyytYYTlM><?LOo0
zO^_3v;Cu-=96#`PjvwrJnyj<C<L8Q^O_4=dNnF6HW!AYnAuk4bUk&O7JE<4!9G!DT
zB!+zP-zUL;2>fPVkunJ7_#6R#4ERF=Krhad7#X95tI@(cX3dhe-1%_$)Hk`G^2%Y*
zjTXXnxYX4YwQCgOWt_I4+*XvUlKMP9!2FgnoU&&Vf4TvD<KWYIa5TT2yE(gWyc78o
z$gdMQrv7U8Ib_gRr(}zrPlA6E{4D~6__2qOsTB)tb5WD8tms>KCgy{0&CJ{=<ve}S
zZ~6V|w<3Qr_*%g?6y$?lJ+?Jqn7fDO!X|dMqugGUdpFCC=J&dG%DA}&`TLRICHc^s
zegm(d-^3%On8O0|ZWG3`1kwKh${$1d?E(b#ztOM%i{Oj@Yc~D4KY`9w`V8RH{~|mH
z?LxUFls}rEa`l&XsX_jJ<hM({r$79Z`ZvPKYRn|>y1CeW1IkUKTu!@J&bE7%&+bQ1
zK6>Df+r1d|90A`}@QonuYae<3@Eb0<rajNbS=V#mH}g8$)2=hvi^_8{=XcTnGVql?
zHZ${p6!h%&`mGsL#wSAq-dFwxlpja=M{|{LLHS!k<+(p=LYYUT{)00!$6229ptrC0
zp0}^WZ2d&mUA=F;nkQ#=katMrd444AH0!xU{O&UFk37!jWw)L1a4G9C<<@|&9el^Y
z_ms#*J8>US<IZF5{E7{DDRu__`PC=qKFCSoY&55wYR-rGcg>c==Syj~mm%i_<kZRY
z0Q6zIWjm*6j<gmmz*@b0_A!N3Ozf+{8RiL`#hP~W<iWmK&sVZbxG%CC>ssj0L;Q3b
z<cxfW;}dfH^K||uGm<fXfe}IGl}EsT2>cfaVA?;S*~X8bNB$)8#a9FU>6?e8-omq?
zKlmDE@ojSFHUD#3IrtZRch>ou%$LnN--v$e!50UgnZMB*;r-|h$R9!e#jJNUKdAqm
z$lrnd+Mr&jXR}sg+Tj5B_Jgli_)t$iwj1hyV&4(u&&8Q|eNYZgzq(!fxQrWlXXEU6
z5%@Q#ysLxq%8@_xI^?y3e;4?ZD$n<PF8bYq{9~_Co{YPP!9N#g`hO$-Yx*5iZT@yU
z?$}Wx_j&L|amN2%#Kq73{$y8T*PYCMV;;`L<vRkSr#JprL`rXT+lj--@LvZ06!>3j
zyY_%zzI*tP=p+5q5^UFP$UlVqTO{ABe--ARq^kfs%J{$Ni|;NjB>!ms`k?<KKZg8m
zL3#4f@L_czX{SOw2<!!4rSOH?DQOOzympfIF9-jA@auZc^Q^{5^lu{z@T88}&y2tI
z;F|y+?hf$V(;SI*1^8|O-*ey#`8oK|OLp6A_BZ!|&%t*y*NQw(Pje2DvJC`9>x<B=
z3u<}tAod+Wx#cLgUdnmx3Vo$nt-`vl3eVa2E~5+lRpMW$hx0Y&NB@2}|5m#)xzBAa
zMfo_k2u<EABa2{%%Oe`R8QyGxH(TJ%7I?D--fV%_-2$;P7E#KiEL9SA;4EAMjsi@0
zkm-3$pLnN@oWb;gT{eQR<4qWUDrzXcJ~x5eZTXtsg#FBy{f7k2|Lv<Y{gReD4J7DU
z@DTQ%66RRq$p7U?z!9VgFHt`});d^vO^~B$6AncUkt0M2`&l8yIxOzU)<8n+0!tM?
z@m8BwJsT((N5Lj&eXq_~{r8f8hG}irX{I}A_$y3fi}n9HJi-198&UBti`0>>Bkd&J
zOgcuolXMU1KGK7vhe?l;9w(ji*S4N>NEeb;kk*l|Bkd&JOgcuolXMU1KGK7vhe?l;
z9w(i%nDvt`B&{H=BV9+@NxGSIjC3dI9@2fJ2T2c;9wj|aI_DDBPr8t_g0zlw9cd@&
zX3{azouqq6_mLhXJxqF(^f>9964p<;khFrdj&vPqC+TL=G18r+dr0?@9wa?XdX)4y
z=^XPA;W+1zE+nlWts`AW+DW>Zbc}Q-=^oO3qz6e4lO82KPU<`pwGEKtFXjRHiD}Lt
z`5L|tE{Q))ienb%KE}TU`el6n2_HO`8a|mja71C^GJj1lF8_BU^OBs4eVv%h&tJpm
z5qx9{l6u|-D$~{5nHEf@KcR0_@Y|&Jh%KVO*e`7&?ICuE4HNi?ePWxmjkHTxSFulQ
z^V=nM`fby;2$%hHN*@l{_7kLkjL+|U_^%oN73gmme+l&8@p%!S6U1I275k1c{sQPx
zeEx&!BcQ)z{EcV_R5h#b{Pp^E7F_HW8&zMiQ*4wxv0vLl>{Hv+o+<JPuh=P6+H(>g
zX)8%fdrSLD{EY~x$_e+W*dVruPX7Lvew6kQ`~7xj(^Ku2c2ZlVpS3NrmHAU){ytT^
z#D3{NfB%c_(udMMVxQQPOJ}iJ+ST8NlSsdjeVa?S*MqNt&VK%@k-iF_4DmE*7vr6v
zn;5?qbR$09_zV);Oe*p^7;gt{!>5PoB&eL(`s@6^jH4>YZ<E?1wut_I`^65iL2MNJ
z#I{_ziG5<5*d;azpV;|E+LlYVTsYLr8vOk73?pfI1QA*Y8e#lQ(E0etnt2|vb3o5!
zd;#d`jGqSjm-rOnGnd$@pc3-%IRzh)KL>OkK4&of7EpW@XrATd`AK+mFCy`i1zDG6
z9S*O}xypgn)S>yB799o4Wxwk5dhOSG{+y`4Pt_jjOX)wcUwlIRLHbepQ2JQ<SNc|b
zL;ND#?$W=~x6-fDr}Atr{VaVe{VMGzLEHIH*&b@Y=#<TV)$@<p|EJXd&AR`0T0r_a
zTlnDJ7VRMIA-#@t3u(5pf@%5F@3kB^lYfkK>uW538~Hv(`dQM?lRilLHPUaB9wyaR
zs;{noPju1R4TF7|!RWG*@{-a^Dh5re?8dT+l2ZIE`kfY!E-5XmD6PP6&QBH!Fp{5;
z!5j(&m_78o&7W0(8AZ?8f_R~$=W#*&6i3gsg7_Rq&%=WFsg9nj1@XD=`CAY_&Czqm
zAda^PyvvW+c!A7*rP=U#PH|TJ3`fr~{iO;pgHG=9BP#z)XN3OZ&n=J{^nO30{PP_>
z7xm{BV71os&>;R6XX2@-A2RU*%+A@)+X^sa@A_Uge$1GMvf<bjJd+Jy;IvL<!)3Jz
z263lC=RaqHs9i_$u&RXh7YX@TWm2K`m%WPM;~~6+xKkFap$5r3oDQg->ejMX%*)cA
zAEq4l+?(RY4FBwY`2z54c8ya`iuxR;965^+eRfPm4N_?S;({Mgu`9mB0?IE`aJ+-U
z1jUaKFD?(_FB6|8E^EC6xk^stILmBW_5l+9g1Gwm2QBR2ori|MnEW>pF9$CAPyZrn
z5Lrhh$p1zNek_E`EyPmqZpsn+C0s+iwZf)VpN+&*AzXgLC2~eW_{WIvAg=a)miX=v
z|9!*{RoZ$#Zi%xGxahxsDryk5Yl8SVaqX`|29G$!;s6M;kCN~+gP-fPPex5z`F~CR
zaq`Q)Tf!^kk8*q||EXvY(P!^eRM_0_J>*tq!B2$R`CNlXoL!VJ`!fj_6OZk+>B}r}
zmQc=uBT<8>y_Mv5$WM24s>xp*;%_8AH-xXGoUPPH_LmYqKz=90pCJFp9?KWA#OWa(
z3*p1Wucmz2n@YHqctfb(PZN(4*Y^25@rf_m@-a)C`wf1s)B0~wi=dw*>?6Mus`r56
zAvsSIpT66cm%X-xNy?A?Bx=&y{x1L*KaXB%V5iO!=Y-*3fZxnUErPU!Q{eD<cxr16
z`P&%=2mddkhHsJii#@TyBhFB$9ppE6d9r>{Pi@a7#JfWLG2$`es(&-_iBNxiNcltU
zvx#^q<zPiLVVL+xh=0uBu=l4?%gBEDl;Uhp7-Pa+#AD9|`S&Y+IEX)O@CDB9DT}LJ
zlf-w0@ZYGMXM=L&VN3cY#&NCsyhZUJ2KnW;eun=CLA*}!9|!TP6#r2W?<U^*vmidG
z`13*hX5iV@uiJCrcjdtE$$>u%T;{9j5nJzW#|C-hakhHpH-*AKL4IxjXNW%$!hdS;
zi1UqmtXy`x^Go7i58*EY&sOj6bKr%i*zveSHU<d$Epg5QE_zO$eSt;jxC<074B~H7
z{7BUDlPm<DO`kI0G7n7NVA;QFi4#*f3n`xl*BSg=r)kOxhB+p<^<G4N&KoOp)O)qo
zd!sF1ML8RZmwwa&3yBXBZzZnt)vd(GiMNpdcHr6U)p~b~SjHjpYrVxcS>WBoRep?k
z7x6n!B0qMsWem%oAg=43+U1N|{`OG4DdJl17f(`e>J}?tgmTobY2w!r*LqWbXMqQZ
ztG%UT7I>8SgD0tX`c}($i2Pdb#8wNi`5dh`{xOR`MSiU}dRq{G^d$Ahwpo6y_pu!O
zs?Uz?mj43QtNt)ST=y-ik9mO$cpJ$7y&Up?1YE|^_$Mr*`sWM8oljc)V#;|rhaBY}
zA%8FVUp)zbY=>psKz@1uOE&*kJ)PSvW0L%5<={U*2d;X?{yr$@9Xa^jdhf9OA7Z^_
zC*hwa|Apj#PY(V%;HLdQZ5g@kcC>$|iR-xD$bO0LwEXX<e6_2Ucr9`D+i~L862DdD
ze8vLniRXc4YyT^uXC9u%Q;(C8Bw_H`&!>`|P0l96f9|a3<spO5ejdLGxSYC%&j;?H
zocL5!7~HVi;OESGPTvRoESJlRe8=F}?WQay=jjrj13q6)`=_FkbjQ&zbI2(;RpjIO
zi;ld)l)`fl@F?ScvXK0Tnl0MI%=akXV*&G<U_@()$I}*PwzHD>bic*XttMPUe4OK}
zo_HtmQjSyglQi*Yqh)+t906h9Y1!NDqvTIjTRwev#TfBP&i|aAoI4b+vHUk#;@o9$
zCVb>uz~^KCaLZKGpoPqn_clp8I~>37CH~VKa;9_O1#_*O$t_lZwx_%Ysu=wq_N%v(
zfBFhmm~ZJ~gA?<SSPuLemD6OIkFv}L;;G9m5Fy@A+~NL8pT|cGKKq<)O!-50?KC)r
z`pCUG@Pm{S<@~daWu8|2Y73Zm7$Ewy9CD_Wf0gB5OgRO{uW;`15eqCNKA(7s`#PPk
z-kQS?mykcs4a-`}sV3gad6?S>C!Ryj#vJ&EDQ7n~AT-0-nuGsyIq<LKz@MP}aSjL_
zFNcB4{4+5bH5M(RT}N}snR9yfaeAJ?=Q%spSpjql=aL-!G2k-pwoXM&0d$`Um*nW*
zW|d!O`BYC?k7S%qaJ@Fa4FXGo{HZG~f6@}CL*>LRp#HX5an6&K<iFYAO!&whIq)x1
z&LrzK?;b(9hjQ>gPX6%<D?FNK=?{s=xnBH%bsr%<LI*MLYC+y_fk(;XCxtlhk^UVC
z_3wP(+19Cx4UTh<jFoaOg_RJW{-g!!iNBZl?rsa1cTylKztfd|Nex?E{jF2w(9iFs
zoIaIvl?6Clo$C!wCLh^O{*ll;_PHGVkCHz{$Lyi3?-Sp_jjefy6Y_pSJkEBYy3R|A
zv;B2G$(v{GogTA-k5m4cz>DSi^c@!vvE*#>Pxjk1y3d3tar4h2K(zheL3{_F2b;)W
z4t&0x7k$A3bZe)I{BbJIVdGqBa2EEFKIP~B{DaK9o_OjS3z&DoAUaC?5IgE2@_&l>
z$Y(5IeoKYuKPW%j)4Ur3xI8b5e>O}-k&?Zf4G$_m_c`WWD#)5p`Bc!n`vv$R;L^_V
zsVGujc;4`PX^s6C<&1NESAWhsBm1~G&*1o8;Cd?|MnQ{+7hh@t^X@Q2m*$XDOa3Uw
zwfaw-c#Q3%>v9r!G3)Y^z8vzm=HUNK4*oCaz#lU>=5vm(AF%T86E9}JTuc1-IpoND
zAhXRgFH%m58$<JsG01u)2md@Yh|DL&oKMt0FI4<0tH^ECr^Mh)_((nZTbEn#e&$_6
ze1iMl_Ys%(R7M&16M2V&=o4?S=(m}9EAbullV^#48n~=?BU4d>sGr|M{z+~qRG)7U
z-#uUj?6t&sf_U+W1vnizhlx*cpqqEFf#s;dS=dKT<iO8AGkbqk0+0I2YxGLPkMpsW
z7P*HR>xoCXE-WS9M?7`A1$5k9Z*VgC$n81syD6tNB!3_A;_X(5o-ch9c(!qLD2M!?
z1HaIxhelsD{IkE;E`)ILhiN*X`Hejaon>$>?a_;J;5C#pPQ~?k`I;R313B<9;Pbue
z+}LMx@H=e-nRI5bv$LelNhGeQUY%%aT+@<BIPDz+9UE~w3huMX^d{PR@KW_OINJLY
z8+-aUBzqF=nf`%vA~`tZ;LX3O9^A0hUQ)U2((>#~3AtY-ksKIE4kvJ#&cLwKi5o*Y
z677S%y~8NtOC{tcmH?~11RXls_qEr@*VMMG?%0Ueu*>_PdtA7wcAda{tNYq`jhCvA
z*R82-l60~!+0(yKUh!UIYPV_gN_Y!+mq@MZPo*8buPNP8o9b`taysPi%5K~PpwYI0
ze%86BtGhE}G~<isRib%qJQKlp%3IL);`spJQ;SyNUG;bieM`T*5?*3#D%>8`mywpl
zRX&MCNkv7)QukH@^PYJxt8!T-E-tXwWR+A@R+c#_+zX)+lkL*c6jNDRUg@^3G@wcN
zjWuyd*wX7Sg&Nv=Hj%HoXA|C^?<H!wH~V=jD}AZ5r4{~E#WEJFkE3rL+=5aUP_L}A
zoDA_Ty>VP+<S)Fu%)y-pQlPsJjyy1!$}}YV+Iu<%obL31UXPWQMvUV^385=-^T3c#
zMrlQvFI9G_U)9ozfT~_YrC@MXQ%k9*8B%^R%ham)+M4R76<&X?#tjB;S4cuTdX>5B
zqIyXJS80?b{2ewcr@N}VPwrkSO$-e}08?c)MZd9yu3qb_&4aSnSvreXwLwm($ZS@R
zWwl><B<$c`V_p=F0nVfhBcxK@4c+m9ZWC+i8o-b>QPWG9k91<d>(_zfJ?+xhAm&}~
zCT2Vz2;L0ua^scg!rkAQfzNm`E8po&4s1$01LmfNjHwcWz$@2EkXfSS?i}d2F75Pn
zY>8u7_O_*#EXCC#VCx;O@!vGzCe6hXy~FX~6aaRVH@aFG_}4MWFyhK8HJY}P1x*_?
zJ+SQ3WynpnbuM34S+225%cR6`m6_)3O&6N7)wiXf<q|6vF)4_;%9p!X`4W?x99mko
ze3{hHn;crU)PU)}rAx}h!uEkSx6`1$-m{TN)UB>sS(~VBuE8o|mlTb+r~4Clk3I&V
zlc>3-xoTx&H8|><*CuKkSgfIDHK3N2)heLAY1QRbO^H=?n0#6iEmfB{)g~NV%GA-f
zITovLYP`HUv7}^4$uh^jYCb-g!K?ZQ;5cSsXvP{Nvl#||Uw^{f+l4#6f(3iKF@1xn
zv1Mh#TlJuVta&YRg`nOFV%qZZ;Y>#YBgfXa3Kv_cml8s`bcZykG_AS!$9B-AWj5iP
z>BSJaLPUF-+~%$j;|(e6feBm>lEz&-?J3;i(i>D?$3RWThQW=dTJ)Y3)Y;aT=?QVm
z#V8@DTW-;dcVk$HdtmV@!@Snfp3EczhC7|u1*AiT+d83Ie_HNV2uj6zU|nxZsvEw|
z#YL4xT~<Z2FYu2{<Ds~zuBRi^O^HN0lWg0Bt7|qT<Z3dnx^l-lrIm<^5kV)kZF1yV
zCXY|NgpKd@WVJiEt-72R*5Fo0C)3v1GnnoQO7NLrOK@!1+WV4y{pp^Lj!?COeQ?B}
z9P2;z9oAoa(j6U}f(-DDOm}Zbe`kAgIGEFk`*G4ih#pkIHt5zHm+SyAzT-L(Zq*qG
zmX`4}*d6LY?5mQ)E6w2Oz$JCEiuSk7@+UfvEI8hLT!*XS1i>y6GMp{R?o3_(K%*|g
z+=1EV8-ULRwdsU9A@kfuU$fe2GZ*j$i)elw90NCk=wtxL&UDV|bIb=Dd;9yup9V6R
zq%c<`aXAs2Dl?Gj_c@n1O{#lspY<m@bJ|AMI!y`}X8FC?V8-6gWE<3x<*X4Ch5vRU
z>D-_dvh;gnMaO=xY)KM>MuQ-~YT%9B<<Qk!5ZUNmNrlC+24i{kRkIo*QN6@YJy=<+
zP1u{av+?T0^&zfF29hp-W>{cECwkGlXutt7O9fS%(fDZF&FQ|BX?Pi`p2AB@%5|Z#
zb)~rCsqAWa0xoSb>k2OMvx|${sIbBoQ==&)w2&qe8`5dpvrb!Quk>qji>HM2CdR8-
z)@X4em$IA*te1L^1Wu~IC*&XQ(&PC6)Wy)QYj?C4ukDw8yE~otbOx2uoHpACnKq1p
zWF`|Dr<t~NHW;8@(&_Zdb4l7sw&9|{&>)iM2Qx3ia;H=7bqVUAEem%tM%$IZ&ZqX~
zDl^-6XPND_s63O{YpPP+c8A1XO<b`VTUYx)SuMA>VYZ+H$O6c=CbLSj7o1j`sb$t|
zBv*>rfwgK-S5S3h6~J3a9o+Mo3EFCBL^QH=e?Jz*;RO65$b*NVT)ts83j?$#uvPFL
zE<M+kJ1Nc68h2UN^Dug_E$I(+vAKIQsE1l(ipdRrj@kHGDX!xr``YjzEK_Z;bRy9<
zl$2%G+&CP{lSf-l0cDj|pj=)T<kBkaL?jboFkkia`OR|718te%R7YZi?7BSurOsfM
z<uRSX#w*kiSnqSSzEhGO?#(1OfMT{bv`b^SJGY}`W8YxOhQaQh_Dj0k9h1UMtX)n?
z`*0shT8g>L<lsVBxe7XvNFZ+jOP3U2ECnwuG0jziXvxNYBrz}Jubgavso!jvN;<lD
zmeJJ?A)2y9?UTAKq48_mz=mp)*oHy}Tt8}RvcfQzIVEzj5{^vVqn!Uy<UEu<6`y=c
z(chUUy(lDI&np!!LF72zg`(y4_b5tt7g$ab_y4A~yd1ycs}#3>{oRVvV>q9bAoWTe
z_*&3}1*9=hk*)RX?^~4W`(?=P<Y|Odj&1SV9an$-9gNcVvw-Ta^(d9&T6uSjruFwS
zO5?0Y^cPX8KVkDbSG7$r{auYxeP4~%ujSSLK9rI2mrG#;egBP8eP520$A77~^=tVd
zV4~L?d?e`abd>&;h26hWmp{lcxxc*ro=52<zSr>w96OqzRL-sa<=x-?lm_{1%F|!d
zw}#5=?<SN!(50M~YQ2ie@vy)C1G{XF($kcYG;F_oZ6xKj|MmAqN_U42U!#<x<a3Dl
z%j^FgDV4j?{2`Qd<ec4K-u?a3{kBv_JDNh&e^ll}h{zCA|I*(%jXz~M!u;X%H^7FY
zaJRhv9%}z<EdO1U75%mTiKn7S;rqSUSpE=r#do#5{=Vu7mY3g!NYHju{nZa{MxMWZ
z{T<e>@0nue_xUzv|7v-qKMIw1f3GEqNl?XX${l}N{^!8`^*hf*E$1_q#5w=jl;bd0
zljdCtB1@}jow6M9Da$g#?}2P;cKMf(A@!Fk1F4oT58=WqL8-X6)@?HQ=drUahkpO9
vd0Nh&*0H0Q(5+K8wKZz#`5<4%N83%^TE=I#`it{zO<&QDwqjhpnRNaey^80t

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/max31855.c b/modules/catkin_ws/src/wiringPi/wiringPi/max31855.c
new file mode 100644
index 00000000..21858391
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/max31855.c
@@ -0,0 +1,81 @@
+/*
+ * max31855.c:
+ *	Extend wiringPi with the max31855 SPI Analog to Digital convertor
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <wiringPiSPI.h>
+
+#include "max31855.h"
+
+/*
+ * myAnalogRead:
+ *	Return the analog value of the given pin
+ *	Note: The chip really only has one read "channel", but we're faking it
+ *	here so we can read the error registers. Channel 0 will be the data
+ *	channel, and 1 is the error register code.
+ *	Note: Temperature returned is temp in C * 4, so divide result by 4
+ *********************************************************************************
+ */
+
+static int myAnalogRead (struct wiringPiNodeStruct *node, int pin)
+{
+  unsigned int spiData ;
+  int temp ;
+  int chan = pin - node->pinBase ;
+
+  wiringPiSPIDataRW (node->fd, (unsigned char *)&spiData, 4) ;
+
+  if (chan == 0)			// Read temp in C
+  {
+    spiData >>= 18 ;
+    temp = spiData & 0x3FFF ;		// Bottom 13 bits
+    if ((spiData & 0x2000) != 0)	// Negative
+      temp = -temp ;
+    return temp ;
+  }
+  else					// Return error bits
+    return spiData & 0x7 ;
+}
+
+
+/*
+ * max31855Setup:
+ *	Create a new wiringPi device node for an max31855 on the Pi's
+ *	SPI interface.
+ *********************************************************************************
+ */
+
+int max31855Setup (const int pinBase, int spiChannel)
+{
+  struct wiringPiNodeStruct *node ;
+
+  if (wiringPiSPISetup (spiChannel, 5000000) < 0)	// 5MHz - prob 4 on the Pi
+    return -1 ;
+
+  node = wiringPiNewNode (pinBase, 2) ;
+
+  node->fd         = spiChannel ;
+  node->analogRead = myAnalogRead ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/max31855.h b/modules/catkin_ws/src/wiringPi/wiringPi/max31855.h
new file mode 100644
index 00000000..385c4bd3
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/max31855.h
@@ -0,0 +1,33 @@
+/*
+ * max31855.c:
+ *	Extend wiringPi with the MAX31855 SPI Thermocouple 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int max31855Setup (int pinBase, int spiChannel) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/max31855.o b/modules/catkin_ws/src/wiringPi/wiringPi/max31855.o
new file mode 100644
index 0000000000000000000000000000000000000000..6fec57b600b24b76b0ccf117f6f43a1abebd0616
GIT binary patch
literal 2016
zcmbW0?@Lo*6vxlp%A46VNmwX&Uzix^bxSw27qRKoD-M-SsR+AXx2q2K!{!}oFSN3P
zF$C!^@MZr&(F-y1j|d{_rC=Zt<eOrhbN4*+y4^wb9e3wEpXZ$O{N5T4jnvp|z-5Cw
zaMt1!V9#;p`wiC*SD+4NBDo*$s88Ph=F0cvw*+}dZ+FDxyyHeE;asp?@Ejab%E0G*
zu-&1zZhx(n^PzSjCim7GLD^<``_T1Z_QS&N`=h3xhob)F^yBd-BdMV+2(TbEv^}R1
z#(25k`~L9|<i6mTf)VuMV7+6%2D@`7MqA!#jur}q+&w|gP05}EEH7aBhBkPMxNv*|
zqeDZt#m<@eY)a3HUa3!Vcl)wN%d_e6N$x&r;AWAFx7;3|+vgrI#=mC#1K1vi!M5IL
zYpJglc5%Zxk+-rwm2AM-__8M8bZy(mo$k##rwc*ADGXgM#>y;q^nC23Q;e5lgBV*)
zbVd&NUa;!7Tb>|*9e-A`V<juu;X(zjM^a;|Z>*I?*`c-~o`4;MD*R#vzmBA_f&%nZ
z;ejeVjJyfwxx#80`;7h^epdA#RpF3S*LywvUau5|<VGN+Cen*xO^tyv8k!sogp|pV
zk;w40G94HU4J)t~&%{%UQ}M{uSWwl~@Lf=pRb7oPE77H8WkHQ6N(CdDo?S5~oCg!y
z+C)00;j|3V{UXsx(Y5$R_ZT%x5JjBMhVy3xQN*42asG-Rig*KloQvp_=n>J!6=DwO
zd_O^2-AL-{JX$?dv`gH}XbDx)wRIh&7;XYc^Q)_104bYF#Fw?i21wC#GO497B$d`R
zX>?+y+t??NjBIU5S;(l#((?Iq{@IF{L2sq}rumVP-V{ygzx-~rU=Qt;zZ6k)UbCk(
z$2gq{jl*xci}4P|%U|9p>n}G{!>lfBP|g3%_h7Eo`u}!(Kg)NcHH+ta%@BP)e{RQ2
z%pBUq1I*AO_90{DJ4q>SmS4J$1W|ndi!Ffr=vbYfKoG^(MdwGkJfEN6Rb=IRj|lo%
q{t`7zDqj}0%jZtvdo1t?v-EcB@GBqx5;CjtMFyW@zgetY3H<>TgyD$*

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/max5322.c b/modules/catkin_ws/src/wiringPi/wiringPi/max5322.c
new file mode 100644
index 00000000..b7cd6a94
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/max5322.c
@@ -0,0 +1,84 @@
+/*
+ * max5322.c:
+ *	Extend wiringPi with the MAX5322 SPI Digital to Analog convertor
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <wiringPiSPI.h>
+
+#include "max5322.h"
+
+/*
+ * myAnalogWrite:
+ *	Write analog value on the given pin
+ *********************************************************************************
+ */
+
+static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  unsigned char spiData [2] ;
+  unsigned char chanBits, dataBits ;
+  int chan = pin - node->pinBase ;
+
+  if (chan == 0)
+    chanBits = 0b01000000 ;
+  else
+    chanBits = 0b01010000 ;
+
+  chanBits |= ((value >> 12) & 0x0F) ;
+  dataBits  = ((value      ) & 0xFF) ;
+
+  spiData [0] = chanBits ;
+  spiData [1] = dataBits ;
+
+  wiringPiSPIDataRW (node->fd, spiData, 2) ;
+}
+
+/*
+ * max5322Setup:
+ *	Create a new wiringPi device node for an max5322 on the Pi's
+ *	SPI interface.
+ *********************************************************************************
+ */
+
+int max5322Setup (const int pinBase, int spiChannel)
+{
+  struct wiringPiNodeStruct *node ;
+  unsigned char spiData [2] ;
+
+  if (wiringPiSPISetup (spiChannel, 8000000) < 0)	// 10MHz Max
+    return -1 ;
+
+  node = wiringPiNewNode (pinBase, 2) ;
+
+  node->fd          = spiChannel ;
+  node->analogWrite = myAnalogWrite ;
+
+// Enable both DACs
+
+  spiData [0] = 0b11100000 ;
+  spiData [1] = 0 ;
+  
+  wiringPiSPIDataRW (node->fd, spiData, 2) ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/max5322.h b/modules/catkin_ws/src/wiringPi/wiringPi/max5322.h
new file mode 100644
index 00000000..a217cf88
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/max5322.h
@@ -0,0 +1,33 @@
+/*
+ * max5322.h:
+ *	Extend wiringPi with the MAX5322 SPI Digital to Analog convertor
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int max5322Setup (int pinBase, int spiChannel) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/max5322.o b/modules/catkin_ws/src/wiringPi/wiringPi/max5322.o
new file mode 100644
index 0000000000000000000000000000000000000000..157c4dea98aa1d1606cb7005b31605e3dd56c326
GIT binary patch
literal 2088
zcmbW1OG_J36vxjbvBs$50~aY4nnhYH)M?@)t)-MiqmCdkXvEsmj$<56Fb_#4_*hh_
zZE*+%>8G(>NQy;V_8aJ;6rqJuy6K`NJ!djkr;`Z9Kir&qfA>7@V{SHw$46`&2TUA1
zg!2)j0H==geo*fQp&48tZhv#XBd{PA9XGnLBWhu<(_b36yBEb#anrdI^Kzp0rDga?
z`}E$1?8C37?UR;<qaBC$6o()dF=9dNt;84V#O;sn1AS(3cX~?usr}i9_6^XEshG8n
z?)R#+7TKrN+V@JvH_h>KxvV{MVqv|ec6{jYo`{+lJq&v}(7pU6u^7`UcjzlGv{B_J
zPY+tI!ybm0zaHy;Fgi4J-_tccU&yEhPruM7___lHedK@c4+y?KVc=GUdwP8SfG^-1
zpnZ`#Dh9ZXN#NF6xz46~=Pn+w8~HV3?itxI@3F;Pyff4YT{ygF%)KNV;#*(aLcDw1
zKEeBJvWs^k3GvQwqv2I;=nft5qg*`$V6S<@#O<}*k(w^w<Y9+8)2Py=71>Pr^}QKh
zcBrrNCtwHX1^h}Czlx-_iUQoZfQK&NlgQg~opWeO`Z=SOu+_@Hash|5yw=~_(<8(o
zy&lTQsqE5BE~zRYjgC(YhQ_6dk&&t4m=p^Qjt@()n#?6LOVQ+1bSx~Z^5hIiQeKtg
z%TheCEG^2(6iYazsD%}?|GyxjtVXg63IuUoB)TCw```54q8<}O5pTlA_zQw4;ygCS
z-x5R-Z^6d+9zm2f|A|hk^Lq?VkC7VF1Ea(E9GejG>uFV<2O+QKDmKA-IVB|vs<Nhn
zuz-gJ!hAjtIuHt(RB~BKt%DHHrqfCWT{2l!5k@1^-THZgphqhSX)!0K6;|!i)`OAs
zrmSCN5E<!n#hm?GzoAZ?p)(Agc~m+j<H_wBobHh7uopr96QrBih+AJM{+HF172ifL
z%6Zv%KgLo{>;C_@e$a^bp*4%e_nRU1+4`9sGcmL4EORi!8ou;DM6Tv<l0xQ;_&FMw
z#Ll0gS?tuhzbHWz+ZWv*#j<#Ie{IODXO9TBjQ9i%OtNmP*4oLvWH@damfpGxo3(xe
QvRd_n2He7Vv#j<10$Gyxi~s-t

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23008.c b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23008.c
new file mode 100644
index 00000000..d21d2378
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23008.c
@@ -0,0 +1,149 @@
+/*
+ * mcp23008.c:
+ *	Extend wiringPi with the MCP 23008 I2C GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <pthread.h>
+
+#include "wiringPi.h"
+#include "wiringPiI2C.h"
+#include "mcp23x0817.h"
+
+#include "mcp23008.h"
+
+
+/*
+ * myPinMode:
+ *********************************************************************************
+ */
+
+static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+  int mask, old, reg ;
+
+  reg  = MCP23x08_IODIR ;
+  mask = 1 << (pin - node->pinBase) ;
+  old  = wiringPiI2CReadReg8 (node->fd, reg) ;
+
+  if (mode == OUTPUT)
+    old &= (~mask) ;
+  else
+    old |=   mask ;
+
+  wiringPiI2CWriteReg8 (node->fd, reg, old) ;
+}
+
+
+/*
+ * myPullUpDnControl:
+ *********************************************************************************
+ */
+
+static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+  int mask, old, reg ;
+
+  reg  = MCP23x08_GPPU ;
+  mask = 1 << (pin - node->pinBase) ;
+
+  old  = wiringPiI2CReadReg8 (node->fd, reg) ;
+
+  if (mode == PUD_UP)
+    old |=   mask ;
+  else
+    old &= (~mask) ;
+
+  wiringPiI2CWriteReg8 (node->fd, reg, old) ;
+}
+
+
+/*
+ * myDigitalWrite:
+ *********************************************************************************
+ */
+
+static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  int bit, old ;
+
+  bit  = 1 << ((pin - node->pinBase) & 7) ;
+
+  old = node->data2 ;
+  if (value == LOW)
+    old &= (~bit) ;
+  else
+    old |=   bit ;
+
+  wiringPiI2CWriteReg8 (node->fd, MCP23x08_GPIO, old) ;
+  node->data2 = old ;
+}
+
+
+/*
+ * myDigitalRead:
+ *********************************************************************************
+ */
+
+static int myDigitalRead (struct wiringPiNodeStruct *node, int pin)
+{
+  int mask, value ;
+
+  mask  = 1 << ((pin - node->pinBase) & 7) ;
+  value = wiringPiI2CReadReg8 (node->fd, MCP23x08_GPIO) ;
+
+  if ((value & mask) == 0)
+    return LOW ;
+  else 
+    return HIGH ;
+}
+
+
+/*
+ * mcp23008Setup:
+ *	Create a new instance of an MCP23008 I2C GPIO interface. We know it
+ *	has 8 pins, so all we need to know here is the I2C address and the
+ *	user-defined pin base.
+ *********************************************************************************
+ */
+
+int mcp23008Setup (const int pinBase, const int i2cAddress)
+{
+  int fd ;
+  struct wiringPiNodeStruct *node ;
+
+  if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
+    return fd ;
+
+  wiringPiI2CWriteReg8 (fd, MCP23x08_IOCON, IOCON_INIT) ;
+
+  node = wiringPiNewNode (pinBase, 8) ;
+
+  node->fd              = fd ;
+  node->pinMode         = myPinMode ;
+  node->pullUpDnControl = myPullUpDnControl ;
+  node->digitalRead     = myDigitalRead ;
+  node->digitalWrite    = myDigitalWrite ;
+  node->data2           = wiringPiI2CReadReg8 (fd, MCP23x08_OLAT) ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23008.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23008.h
new file mode 100644
index 00000000..e9299a8c
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23008.h
@@ -0,0 +1,33 @@
+/*
+ * 23008.h:
+ *	Extend wiringPi with the MCP 23008 I2C GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int mcp23008Setup (const int pinBase, const int i2cAddress) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23008.o b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23008.o
new file mode 100644
index 0000000000000000000000000000000000000000..03a0289efb5e21db0906e1cbe9ec48814c15d247
GIT binary patch
literal 2744
zcmbW2Z)jUp6u@tiu1&h_C60oD2}^NEN8Kaoy4pFAyryYWh;3;aRO;5H&08Cqf21!g
z_0KlQHn?O$5d=T!2fzD85K$<lS+NL0wF-59aN?Kw2c=)u54Og0?z`9Ay(Azz@ZLH1
zch5QZymRk+??yN}Vz=3d5F2@k)JK96QtGJNL1qTYanecRvCq&wLjR7G|8VxcK=;Z&
zckDc<Omxvr*VnhdEw=A(cW=?n%9~F5+nNhpA7V6J>WY-_IcF|a-KT~LxvIKP-9k=c
zbg$Q4x#9c*voe3o_X`WUU3I^=?*4Rrrds#crs-Zh*6SXl2doeXU2BI>`u)xWS~b`D
zL94uV+Qj?c(672TT)X8%`^+Wnb@%Z0uefSsz6d=ORRkVs^gCVxz3<x4$_F;%>6yyg
z&cGwcVI~mu@9!|)U8VPN0dsP-o<AO=hjbr%Wj@k6t(LBQ?t>cEj=+t6X_oxgniEE*
z{i-uUHzV&HNz`gJ`qNq`Oay+6(6A5K;Xkz+m_1-_n5G}h1=Acf<HM}gbQhXUMnj<&
zeLeBHV%8}7&a3^Z|Lj1KjRMyL1FFAYy>Q0lzCM3oz(3%>0Ly`NnTpunm?E~4$9D2q
zhjSJ7=rr(W_?(7XQ#^O<n&K@xqKYrCcwww5PU3|r*k~rt;T?F{o`e}fdf>VO7s?3U
zh7`|Tdr0x#acGLK+*V{+hL~?ZOy5NxkZHVGe3PAucSP}k^Z3!I6o+-*Lw}I#c&pbL
zQGE8C;tiRF;#?EK<Jd;_YE7nyqv;z%fIFJG18r-;@d!LF$6#oe^0OWTJIVPZcV|5X
z`wZtdIcNO@`y%JtoU`6>+d-t4n=@1ng1gfw4$|HL!$3R@l#rPgJl}%f0)7IX*N+Vc
zVS5GoUAUU%|EL8gnfZL*Ilq5UohO-<;nYIPNTgpWqzt`2oYE6X7)=(_>3DuP8_H#k
zLN1LYm3=vv)XD5<bYe)0&Q6Ss#KP0F)7nrpJWH;n3aRYEWNNH0#1c;F3xhJmw2X-o
zV!Bbx%N~z|asApjuEyk?sn`ioz&?PN9%WJDZi#=`g8$xvU*vto6Zn*rXG-Gox|bz>
zLh}DW;&MG3(z<dUhvYAFUn|b@*g@kZB*G2BC;2#O;Wzns)xx*=c+0}Yc_ZrbO2$ac
zfi?=JUKCbAPbXAEFBwElCX578=a!cV18OmwPA%!_6{61PG8sJ!F4>%+tE1!bv&%+e
zeu=0oT3?*KT1aI0X7d`JMEM{HTW5U}gTPQe=6y9sjqeVAKky6$g#*{C{1fEl@kfE9
zDZT{w9Y?|M4RY%j?oZ3Q=!;^-&jZ7pPZ}TKIjztCf7cK4ct2=aMErRff-UM7dQ4)n
z>$CD<l_o@-K$m&E)xC#<hr*F-(SLzo1Ebmgz0Vs`;*Pj~7%Sq%{^7fC?LCHg_^)6Q
p2a;Ip$Fa3`bocP2TRZ^&U&rCHuI~cYZ2et)D3DJ~_21pP{=aUHoc{m-

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23016.c b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23016.c
new file mode 100644
index 00000000..e5cc6328
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23016.c
@@ -0,0 +1,164 @@
+/*
+ * mcp23016.c:
+ *	Extend wiringPi with the MCP 23016 I2C GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <pthread.h>
+
+#include "wiringPi.h"
+#include "wiringPiI2C.h"
+#include "mcp23016.h"
+
+#include "mcp23016reg.h"
+
+
+/*
+ * myPinMode:
+ *********************************************************************************
+ */
+
+static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+  int mask, old, reg ;
+
+  pin -= node->pinBase ;
+
+  if (pin < 8)		// Bank A
+    reg  = MCP23016_IODIR0 ;
+  else
+  {
+    reg  = MCP23016_IODIR1 ;
+    pin &= 0x07 ;
+  }
+
+  mask = 1 << pin ;
+  old  = wiringPiI2CReadReg8 (node->fd, reg) ;
+
+  if (mode == OUTPUT)
+    old &= (~mask) ;
+  else
+    old |=   mask ;
+
+  wiringPiI2CWriteReg8 (node->fd, reg, old) ;
+}
+
+
+/*
+ * myDigitalWrite:
+ *********************************************************************************
+ */
+
+static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  int bit, old ;
+
+  pin -= node->pinBase ;	// Pin now 0-15
+
+  bit = 1 << (pin & 7) ;
+
+  if (pin < 8)			// Bank A
+  {
+    old = node->data2 ;
+
+    if (value == LOW)
+      old &= (~bit) ;
+    else
+      old |=   bit ;
+
+    wiringPiI2CWriteReg8 (node->fd, MCP23016_GP0, old) ;
+    node->data2 = old ;
+  }
+  else				// Bank B
+  {
+    old = node->data3 ;
+
+    if (value == LOW)
+      old &= (~bit) ;
+    else
+      old |=   bit ;
+
+    wiringPiI2CWriteReg8 (node->fd, MCP23016_GP1, old) ;
+    node->data3 = old ;
+  }
+}
+
+
+/*
+ * myDigitalRead:
+ *********************************************************************************
+ */
+
+static int myDigitalRead (struct wiringPiNodeStruct *node, int pin)
+{
+  int mask, value, gpio ;
+
+  pin -= node->pinBase ;
+
+  if (pin < 8)		// Bank A
+    gpio  = MCP23016_GP0 ;
+  else
+  {
+    gpio  = MCP23016_GP1 ;
+    pin  &= 0x07 ;
+  }
+
+  mask  = 1 << pin ;
+  value = wiringPiI2CReadReg8 (node->fd, gpio) ;
+
+  if ((value & mask) == 0)
+    return LOW ;
+  else 
+    return HIGH ;
+}
+
+
+/*
+ * mcp23016Setup:
+ *	Create a new instance of an MCP23016 I2C GPIO interface. We know it
+ *	has 16 pins, so all we need to know here is the I2C address and the
+ *	user-defined pin base.
+ *********************************************************************************
+ */
+
+int mcp23016Setup (const int pinBase, const int i2cAddress)
+{
+  int fd ;
+  struct wiringPiNodeStruct *node ;
+
+  if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
+    return fd ;
+
+  wiringPiI2CWriteReg8 (fd, MCP23016_IOCON0, IOCON_INIT) ;
+  wiringPiI2CWriteReg8 (fd, MCP23016_IOCON1, IOCON_INIT) ;
+
+  node = wiringPiNewNode (pinBase, 16) ;
+
+  node->fd              = fd ;
+  node->pinMode         = myPinMode ;
+  node->digitalRead     = myDigitalRead ;
+  node->digitalWrite    = myDigitalWrite ;
+  node->data2           = wiringPiI2CReadReg8 (fd, MCP23016_OLAT0) ;
+  node->data3           = wiringPiI2CReadReg8 (fd, MCP23016_OLAT1) ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23016.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23016.h
new file mode 100644
index 00000000..f9b5cc54
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23016.h
@@ -0,0 +1,33 @@
+/*
+ * mcp23016.h:
+ *	Extend wiringPi with the MCP 23016 I2C GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int mcp23016Setup (const int pinBase, const int i2cAddress) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23016.o b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23016.o
new file mode 100644
index 0000000000000000000000000000000000000000..712d58f4359e6b6a3863b67140672363c694a1d4
GIT binary patch
literal 2656
zcmbVNUr1Y57(Yq0x!U%|4Ict6<aU%{alK2db#@P%*CZMtRWXKHtjnU_YA}fsZ>Vle
zg*yueD|8Qo!JhWEhmH9(%34I~WP2GDWw3RFZYz{+-54^c8=ZCEckelRdXvDm4^F=C
z{Lb(DbG~!W$$T{4;dZ$Q7Z-Vn9LzXMh~ho4+bpw<93{0RnYfPh7=08of0Y_vpxfpT
z-mUM=$KLsqOFi{;qvp%SO`~h+4T=5|diWE1(uw+*`I$60wC)R#r5?Y{DIVInec}tc
zVKG-RCL{Y9`I0XXA;cy<_}CYC3uBQ4{i87udT2iK&PnDyujRNjFWJ7|e2Q_leq6le
zduPq}$=cxhH7%+2)9qv;Mt3#(m3H$G5Uk35=3m~q8Yo`7iCbNIQ@Vl95qf{?o*nH@
z%`MH`bs5KD4Qqm>!6EIUHuN*_h%c~!YG>=jI=%DYJ6>NhL3im6X0U=RuF>_G$<XF%
zEpX}Q78cs1cUKR?+)nfRY8|&@bb}5^vE}NHy}dmkxnUtjqY5BZfPfhUbM~=iw%YD@
zX|#UT!y|;grBSPa^lRuh=?sToR2q`Q#k^5e&Z^C7@N`SjnuX><Eo!h?J$K5+m8M{*
zCD;-?2a!<fZADzK_Yv1jo$J^UuXGI>)C~A>wl;%Wlk2XyHQ8@^;<A#hmHhx{vJ^Qy
zwr_XBX8l0zXMWE!KhvF)C9qpzOtH0b)a`QJvb$aOU-g7#<w}(%H<;DEa&Wp<ZivVV
zBm+XbEX5)2NuYnoe3wxl)Dx2x_nhnxTlFwXiNZ6lBHMc<3jlb^-VDUC-=*S#Nae&s
zs!QM_fVhSDRxbfN#_$EuC|0jPpMrt>6$C-7KG`NzBV1O7q4E&yZmD<(-hwCP3{3Gm
zbV?Th<?vT4;03^+hB_5&EQoa`pci12i}Q8`oa9EPn$EyCsg97`Y$P+5G1A#r3K>H`
znD*)EQJD2+^5-W<b&~3g_q1#AR8L1oBHEwo*V^OJ6uF!!Wb$LZnXaa=<=&@{wTd7H
zu`r%6p&P|1k?|zZtzYiOY)tt1;K?6_@i*L4l#6WLiN7o0vcSJz0dHh|#5mYL9{*(l
z7xSL4fL{>sr-V3H1zfD>y$X1>fQxw*h>3zv77i{0%;5L}n;Q;%h0VF<eEuB~b$T{u
zq=!Kp1zV4EtDtAos-e#qL>)~VX`&8KPZJAJi}`G3LeI_;b!0M^)AK;dPa3+~*_}K+
zZKOvgh-!K3<Ecx9bZ-AxSvCJ%Dd2)Fa^A2uz)(J7{j+DKcLMJ}o^=~1Fx|_Z5Q+KY
z{|B1<hWi=sS%y1bsNWoU8QqG(ZPd@fz?lEnKLoy*%DMl4o4<|u2SJO%{m+UZ*nC@D
z<9o$zk@}4IQ3?xAF1~AsIq3}yxGngi$@|aY3t*HxzX8^e*BBAc4}G~mKR>*i&fcTT
rb>=^g6G5Eym#ZD=f3o^lm;?U*;Be-z0jym94{%c;@7rqs*O~tx{5hE4

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23016reg.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23016reg.h
new file mode 100644
index 00000000..9aea92d5
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23016reg.h
@@ -0,0 +1,48 @@
+/*
+ * mcp23016:
+ *	Copyright (c) 2012-2013 Gordon Henderson
+ *
+ *	Header file for code using the MCP23016 GPIO expander
+ *	chip.
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+// MCP23016 Registers
+
+#define	MCP23016_GP0		0x00
+#define	MCP23016_GP1		0x01
+#define	MCP23016_OLAT0		0x02
+#define	MCP23016_OLAT1		0x03
+#define	MCP23016_IPOL0		0x04
+#define	MCP23016_IPOL1		0x05
+#define	MCP23016_IODIR0		0x06
+#define	MCP23016_IODIR1		0x07
+#define	MCP23016_INTCAP0	0x08
+#define	MCP23016_INTCAP1	0x09
+#define	MCP23016_IOCON0		0x0A
+#define	MCP23016_IOCON1		0x0B
+
+// Bits in the IOCON register
+
+#define	IOCON_IARES	0x01
+
+// Default initialisation mode
+
+#define	IOCON_INIT	0
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23017.c b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23017.c
new file mode 100644
index 00000000..51741954
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23017.c
@@ -0,0 +1,195 @@
+/*
+ * mcp23017.c:
+ *	Extend wiringPi with the MCP 23017 I2C GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <pthread.h>
+
+#include "wiringPi.h"
+#include "wiringPiI2C.h"
+#include "mcp23x0817.h"
+
+#include "mcp23017.h"
+
+
+/*
+ * myPinMode:
+ *********************************************************************************
+ */
+
+static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+  int mask, old, reg ;
+
+  pin -= node->pinBase ;
+
+  if (pin < 8)		// Bank A
+    reg  = MCP23x17_IODIRA ;
+  else
+  {
+    reg  = MCP23x17_IODIRB ;
+    pin &= 0x07 ;
+  }
+
+  mask = 1 << pin ;
+  old  = wiringPiI2CReadReg8 (node->fd, reg) ;
+
+  if (mode == OUTPUT)
+    old &= (~mask) ;
+  else
+    old |=   mask ;
+
+  wiringPiI2CWriteReg8 (node->fd, reg, old) ;
+}
+
+
+/*
+ * myPullUpDnControl:
+ *********************************************************************************
+ */
+
+static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+  int mask, old, reg ;
+
+  pin -= node->pinBase ;
+
+  if (pin < 8)		// Bank A
+    reg  = MCP23x17_GPPUA ;
+  else
+  {
+    reg  = MCP23x17_GPPUB ;
+    pin &= 0x07 ;
+  }
+
+  mask = 1 << pin ;
+  old  = wiringPiI2CReadReg8 (node->fd, reg) ;
+
+  if (mode == PUD_UP)
+    old |=   mask ;
+  else
+    old &= (~mask) ;
+
+  wiringPiI2CWriteReg8 (node->fd, reg, old) ;
+}
+
+
+/*
+ * myDigitalWrite:
+ *********************************************************************************
+ */
+
+static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  int bit, old ;
+
+  pin -= node->pinBase ;	// Pin now 0-15
+
+  bit = 1 << (pin & 7) ;
+
+  if (pin < 8)			// Bank A
+  {
+    old = node->data2 ;
+
+    if (value == LOW)
+      old &= (~bit) ;
+    else
+      old |=   bit ;
+
+    wiringPiI2CWriteReg8 (node->fd, MCP23x17_GPIOA, old) ;
+    node->data2 = old ;
+  }
+  else				// Bank B
+  {
+    old = node->data3 ;
+
+    if (value == LOW)
+      old &= (~bit) ;
+    else
+      old |=   bit ;
+
+    wiringPiI2CWriteReg8 (node->fd, MCP23x17_GPIOB, old) ;
+    node->data3 = old ;
+  }
+}
+
+
+/*
+ * myDigitalRead:
+ *********************************************************************************
+ */
+
+static int myDigitalRead (struct wiringPiNodeStruct *node, int pin)
+{
+  int mask, value, gpio ;
+
+  pin -= node->pinBase ;
+
+  if (pin < 8)		// Bank A
+    gpio  = MCP23x17_GPIOA ;
+  else
+  {
+    gpio  = MCP23x17_GPIOB ;
+    pin  &= 0x07 ;
+  }
+
+  mask  = 1 << pin ;
+  value = wiringPiI2CReadReg8 (node->fd, gpio) ;
+
+  if ((value & mask) == 0)
+    return LOW ;
+  else 
+    return HIGH ;
+}
+
+
+/*
+ * mcp23017Setup:
+ *	Create a new instance of an MCP23017 I2C GPIO interface. We know it
+ *	has 16 pins, so all we need to know here is the I2C address and the
+ *	user-defined pin base.
+ *********************************************************************************
+ */
+
+int mcp23017Setup (const int pinBase, const int i2cAddress)
+{
+  int fd ;
+  struct wiringPiNodeStruct *node ;
+
+  if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
+    return fd ;
+
+  wiringPiI2CWriteReg8 (fd, MCP23x17_IOCON, IOCON_INIT) ;
+
+  node = wiringPiNewNode (pinBase, 16) ;
+
+  node->fd              = fd ;
+  node->pinMode         = myPinMode ;
+  node->pullUpDnControl = myPullUpDnControl ;
+  node->digitalRead     = myDigitalRead ;
+  node->digitalWrite    = myDigitalWrite ;
+  node->data2           = wiringPiI2CReadReg8 (fd, MCP23x17_OLATA) ;
+  node->data3           = wiringPiI2CReadReg8 (fd, MCP23x17_OLATB) ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23017.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23017.h
new file mode 100644
index 00000000..79b4d7b3
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23017.h
@@ -0,0 +1,33 @@
+/*
+ * 23017.h:
+ *	Extend wiringPi with the MCP 23017 I2C GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int mcp23017Setup (const int pinBase, const int i2cAddress) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23017.o b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23017.o
new file mode 100644
index 0000000000000000000000000000000000000000..cbb25e9859541b9a4374838761ba80ec9160cb91
GIT binary patch
literal 2928
zcmbVOZ%A8L6u(Kdd0PA8oP&S^Bgn9HK3<%)c7x&5L?hVhjA0$tNz|yp{E_%Vb$_%h
zTDW9F8SK-(jO|NdgAEE}bZZcuOa|M!g~8f=Xt$PO*Rdh{AYyHH&VBcp=QDxQ125;?
z-~F9G_n!Oi%YwJ3(`vC0T`c5fk{{_PA+nIS+nCu#j*)T_@PCPPAKmq({uWN0qFbro
z?b$o2NA`vKbZ<3XFZ+J!XSF;1ra=G7Q~`4no#|AyFZGQuIJB1Tb!wdCk?k9G8+2V`
zKAmSeIdj}m>mfuVJ^0K~yNH2^pZ<5EmIY4j+UJGTU3&(7(+h%@=;k#nFZ;*Rs^k3?
z#}_MuYmVABGA`-<N<bM<u2%pj;P0jnX;xbX)K9nO%U~_a^<yxpq~EF+*h)S0pX?pF
zu0_AkaDcXdqTki6mTjhXtq#u(tzzZ8GISq&$@t}i`RG=_?{(kv(LII!!tyy%J9aJG
z*H~`)ZQ(1_9{OkYu9oRm*{YJ-v#7N&hv8vra44T)e?8mTx;1+1!A*UA0YBZN+n9vK
zSz4iMv+-*#2%ag2ANs8p{@+X`jF|1C>-3!9TP}Sim&?)HnQEBuQLhV-A0Op%U^alc
zsF^aDJ9`Xm)gs-d-s;RVdNB8I)XN%3e}!g~u8xiuT@8VeWK2!EPD;&^+}M(2Blo<!
zMUtDP)5kU3)g-%H<QDlfL_)zTP%Lls6U%I+rKZ9zT!uYr2JBfjL&z*@MXbDJRYYgX
z)+4&&<)RY+MHG~y6Z>}8Q9_(R9pHXV+%ILF76q^|<}{xhL)|V`E?e70=exEp(RHar
z5gSsa-J)#uhz*M9f@DBw7ll@!Ug3U|2mLzs{mzK;Ou5+LG5GaDJ@vr9$9<Pk=hxvA
zUDkQg*}>MqDTfpumlCp-J2U}+t>7DtxUCQ!(2^o}=^-579IGKd>j7Xj9KQ$}h3zru
z<M1GV1vCoVU(heXgSd<f0b%>6nNW|NTL+bmV7Cs7jT|`ydI7;BZk9m+3gOuQLii%!
zRZ!=LyiV3Dz}_pu|F{TFqNCGIFUamw(kO|}dBPK6H5hp{5mrO_VSgw%2BW@YBodhR
z#5&?JH4%>>5{{jTkA=u^S5I%d(lgxK+3EKV3=b&nJ>Fq*A)E-uCi=qNO&u&?e`uoB
z2x3@<=_U9>YI54hI0&2#T{w%`nCN}P6C%R%5H1On^V&2!IY#^g1MV>JcZ%Snd|xrX
zk^hMSf65SN)qorG{$RkX4EzeKme?G>rU>pb#4*NyrwH!S!oyj{^PHD+Cj25Ft0sJf
zk3Tix`g^fy!u4}Vq?x&>8XN(wCNw>%TZvF4D5;@Yl}KYjHAtk9nHj<WDH)4|r$UiA
zB8|qQ(NGL1vA7zNy3Pg~XVl>66p@&BXmWTw5sdOfz-xFC<pL+%I`bRa1{g}CanoRI
zeh2Yh!QQpOV-%SO)cXZjD$Aqa5P09CJO>ZvH{X0wQ(okv@HT4$_<bH8jQOPgZtyL%
z{>RPV#{Ff`M$!FG8bPr2`gPrHz>L(79&`P#bAL1a3I_x|5f85Kzn<$gFbegrk6-cn
z_XGQfzPi8OKYaJidk+xV;Qo_1Fo>xfwjbu&k^VUky1^aryM}-K%=yazE0lkhe;TjC
Jyiv^g{|DGc-yHw|

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s08.c b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s08.c
new file mode 100644
index 00000000..d0acb5ee
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s08.c
@@ -0,0 +1,189 @@
+/*
+ * mcp23s08.c:
+ *	Extend wiringPi with the MCP 23s08 SPI GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+
+#include "wiringPi.h"
+#include "wiringPiSPI.h"
+#include "mcp23x0817.h"
+
+#include "mcp23s08.h"
+
+#define	MCP_SPEED	4000000
+
+
+
+/*
+ * writeByte:
+ *	Write a byte to a register on the MCP23s08 on the SPI bus.
+ *********************************************************************************
+ */
+
+static void writeByte (uint8_t spiPort, uint8_t devId, uint8_t reg, uint8_t data)
+{
+  uint8_t spiData [4] ;
+
+  spiData [0] = CMD_WRITE | ((devId & 7) << 1) ;
+  spiData [1] = reg ;
+  spiData [2] = data ;
+
+  wiringPiSPIDataRW (spiPort, spiData, 3) ;
+}
+
+/*
+ * readByte:
+ *	Read a byte from a register on the MCP23s08 on the SPI bus.
+ *********************************************************************************
+ */
+
+static uint8_t readByte (uint8_t spiPort, uint8_t devId, uint8_t reg)
+{
+  uint8_t spiData [4] ;
+
+  spiData [0] = CMD_READ | ((devId & 7) << 1) ;
+  spiData [1] = reg ;
+
+  wiringPiSPIDataRW (spiPort, spiData, 3) ;
+
+  return spiData [2] ;
+}
+
+
+/*
+ * myPinMode:
+ *********************************************************************************
+ */
+
+static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+  int mask, old, reg ;
+
+  reg  = MCP23x08_IODIR ;
+  mask = 1 << (pin - node->pinBase) ;
+  old  = readByte (node->data0, node->data1, reg) ;
+
+  if (mode == OUTPUT)
+    old &= (~mask) ;
+  else
+    old |=   mask ;
+
+  writeByte (node->data0, node->data1, reg, old) ;
+}
+
+
+/*
+ * myPullUpDnControl:
+ *********************************************************************************
+ */
+
+static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+  int mask, old, reg ;
+
+  reg  = MCP23x08_GPPU ;
+  mask = 1 << (pin - node->pinBase) ;
+
+  old  = readByte (node->data0, node->data1, reg) ;
+
+  if (mode == PUD_UP)
+    old |=   mask ;
+  else
+    old &= (~mask) ;
+
+  writeByte (node->data0, node->data1, reg, old) ;
+}
+
+
+/*
+ * myDigitalWrite:
+ *********************************************************************************
+ */
+
+static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  int bit, old ;
+
+  bit  = 1 << ((pin - node->pinBase) & 7) ;
+
+  old = node->data2 ;
+  if (value == LOW)
+    old &= (~bit) ;
+  else
+    old |=   bit ;
+
+  writeByte (node->data0, node->data1, MCP23x08_GPIO, old) ;
+  node->data2 = old ;
+}
+
+
+/*
+ * myDigitalRead:
+ *********************************************************************************
+ */
+
+static int myDigitalRead (struct wiringPiNodeStruct *node, int pin)
+{
+  int mask, value ;
+
+  mask  = 1 << ((pin - node->pinBase) & 7) ;
+  value = readByte (node->data0, node->data1, MCP23x08_GPIO) ;
+
+  if ((value & mask) == 0)
+    return LOW ;
+  else 
+    return HIGH ;
+}
+
+
+/*
+ * mcp23s08Setup:
+ *	Create a new instance of an MCP23s08 SPI GPIO interface. We know it
+ *	has 8 pins, so all we need to know here is the SPI address and the
+ *	user-defined pin base.
+ *********************************************************************************
+ */
+
+int mcp23s08Setup (const int pinBase, const int spiPort, const int devId)
+{
+  int    x ;
+  struct wiringPiNodeStruct *node ;
+
+  if ((x = wiringPiSPISetup (spiPort, MCP_SPEED)) < 0)
+    return x ;
+
+  writeByte (spiPort, devId, MCP23x08_IOCON, IOCON_INIT) ;
+
+  node = wiringPiNewNode (pinBase, 8) ;
+
+  node->data0           = spiPort ;
+  node->data1           = devId ;
+  node->pinMode         = myPinMode ;
+  node->pullUpDnControl = myPullUpDnControl ;
+  node->digitalRead     = myDigitalRead ;
+  node->digitalWrite    = myDigitalWrite ;
+  node->data2           = readByte (spiPort, devId, MCP23x08_OLAT) ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s08.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s08.h
new file mode 100644
index 00000000..ebf93d19
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s08.h
@@ -0,0 +1,33 @@
+/*
+ * 23s08.h:
+ *	Extend wiringPi with the MCP 23s08 SPI GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int mcp23s08Setup (const int pinBase, const int spiPort, const int devId) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s08.o b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s08.o
new file mode 100644
index 0000000000000000000000000000000000000000..4e653c774677624b93b18b0b30c2efeb17712570
GIT binary patch
literal 3360
zcmbVPZ%kWN6u*51N}+qNE_@)_65f((x@>zX`-4oQ>1!Y3p&j6$5`$YUP)0*ru)I2O
zx{-8Sxan|yG5W>tGjTC~X^dtI*_<IJOP1jhzlqT)VPYg9lE@~Wd*8kAc(lvnA-#Wo
z_x#Q|_ndQI!ugiSF~Q+LTpZ|Sw7KIbLi6s;b&xKDXa}l6(JmdY>G?nE_dP$L7b>3h
z!<mjXUv=ZmSHuop&j0M1n=f?K;oI&z7w_e&R`2ea#kUJ#uT(ti(eZCzJ3;L`&F63j
zr&2y4KkstP<Y$9Z6}|=HM=yY}0sW9^8V}dyTzdZ7`rebb=y4Zb{)YI05WM@OLXXED
zMWNLTPN;pU_z!gk5rLPvUx*)-`;m&8Pq_G_^wEr7=%ya)=w)(la0ju@^qLN(1`VM>
zMQXS}qC;v_?Z(R_3y<*}wN8^E*~6g8V1ZQ4&8v`sR<L^B!|uB^4h=6B-uJBD<Ak78
zT;Fq3b1&rA1WCJFXz@;U`vmhcPs~@Y)=ZZArpgjlHvTmg|8Sk8@(H(KF|)8x8-6hN
zpyUPcqWh+rf8;PapwNZ0o(TSPBVtku1T1o?CzLw3+Y<U9&-dzmytwD)!_R2(r3R$-
zsIQY6sCXsXbpyFyLU>KXzpMB@se`==lyz}Nn)(>-so|v-skmZh@qr62rQub_5(%#o
z20_LP`8%qm74c6us)0w1X!tFUhKHcHZt2sN#edh=&9qS?Iu6T#&OcsXhov8uQF9r9
z<@b*$+8mtP?<2ly%&U<0!{NF{Xuk+;Kabgd(q<OaQ)<j?Lev@#zaaageYuR0laDBe
zmB4|f9NjgZYiv>ihn1syO<X=0Xlx2J1&%`GAa&-19Pge$j&ZMJm&aB8AynND_-=MK
zNoG~_UJ_KXKJRQ51Hwp+SPzIQR;#s0hGU)RfV@oxILQmIin7pKBYHKe(+qHmoPm5v
zhLGr;7D8hEWoKBFFIA|bKVR7{28Am%qF)td@B|v64enLK0l7|wQrvFfUa)arsYMY`
z|CMk+{w4!(uMoc<I76a5T@e!fmn$_faH&caoAa*M#7<$hMr>Ba07L{Dpt%tTp_dc#
zP%6;!dZ}|~$uB5EPWUS&POwx;oTzde>;Xiu*q>w?yBN;*v@U?{WjLqMS^)MU!)M4v
zKxm%LB}D0BtF4n0Rc{40^sBbvEr58pp$PSs!P8~%bAa!J;3oys7_BKRFPG8(v<!~Y
z{i6pDjRl&Oew3cjlBbhKJk^s;8i~#Ai9~z=cAdFYDmtoV!Xp_YJCY(uGIM-nAc117
zk&ciWiFF)1*45G->sCXNmKZvd%qBCZJCj|VZCc!jpXfoc*q9OTACC184aWxKNie~j
zcO{J6sFko4XiuDJCw@Rqk^zKth6q3SXi#~NfFJ~y;K%XX1O&0`FPZQ*{o}0ecKzux
z_%#b|^((Tv*zM?L@CgfUwey7qe+FXa_gb*v);z3O@SPTYjXg1YJXs5F^((Xd5Od5V
zMaXxA2*)Ss4xv#tbDY1c&uut=R|__r_c2n&CelW{4`w54&O>~aO{C(Akr+3SG5`&Q
zl)kYsL;)q2NhOC9sR^X?kEGLy45(yAjD*tK9z8&N4k?tK7>W&M<7wJTEQ0?x$v`8e
zx4-ZpU_{=rebVf2o_v=`ErRf~$|vj-GsOC;77odhe_`sG@^cKgxj{uc!1S3pwnJz?
ztcXp!`qT0ofm`bSPs<N7egI~xaQ+c12x}fcpW7^$RrR6$LhO+9xb7*&xArzU`-|}d
zHUiH-=f44qQuRaZ|ABF)Na{zpoX_h=-g2o>#~FW!@%dy6hvvf`JJFRZO~x!EcwoB&
Wes=%FO)38itf8-&W;RB<|Nj90%v+=Y

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s17.c b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s17.c
new file mode 100644
index 00000000..c2d1be3a
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s17.c
@@ -0,0 +1,236 @@
+/*
+ * mcp23s17.c:
+ *	Extend wiringPi with the MCP 23s17 SPI GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+
+#include "wiringPi.h"
+#include "wiringPiSPI.h"
+#include "mcp23x0817.h"
+
+#include "mcp23s17.h"
+
+#define	MCP_SPEED	4000000
+
+
+
+/*
+ * writeByte:
+ *	Write a byte to a register on the MCP23s17 on the SPI bus.
+ *********************************************************************************
+ */
+
+static void writeByte (uint8_t spiPort, uint8_t devId, uint8_t reg, uint8_t data)
+{
+  uint8_t spiData [4] ;
+
+  spiData [0] = CMD_WRITE | ((devId & 7) << 1) ;
+  spiData [1] = reg ;
+  spiData [2] = data ;
+
+  wiringPiSPIDataRW (spiPort, spiData, 3) ;
+}
+
+/*
+ * readByte:
+ *	Read a byte from a register on the MCP23s17 on the SPI bus.
+ *********************************************************************************
+ */
+
+static uint8_t readByte (uint8_t spiPort, uint8_t devId, uint8_t reg)
+{
+  uint8_t spiData [4] ;
+
+  spiData [0] = CMD_READ | ((devId & 7) << 1) ;
+  spiData [1] = reg ;
+
+  wiringPiSPIDataRW (spiPort, spiData, 3) ;
+
+  return spiData [2] ;
+}
+
+
+/*
+ * myPinMode:
+ *********************************************************************************
+ */
+
+static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+  int mask, old, reg ;
+
+  pin -= node->pinBase ;
+
+  if (pin < 8)		// Bank A
+    reg  = MCP23x17_IODIRA ;
+  else
+  {
+    reg  = MCP23x17_IODIRB ;
+    pin &= 0x07 ;
+  }
+
+  mask = 1 << pin ;
+  old  = readByte (node->data0, node->data1, reg) ;
+
+  if (mode == OUTPUT)
+    old &= (~mask) ;
+  else
+    old |=   mask ;
+
+  writeByte (node->data0, node->data1, reg, old) ;
+}
+
+
+/*
+ * myPullUpDnControl:
+ *********************************************************************************
+ */
+
+static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+  int mask, old, reg ;
+
+  pin -= node->pinBase ;
+
+  if (pin < 8)		// Bank A
+    reg  = MCP23x17_GPPUA ;
+  else
+  {
+    reg  = MCP23x17_GPPUB ;
+    pin &= 0x07 ;
+  }
+
+  mask = 1 << pin ;
+  old  = readByte (node->data0, node->data1, reg) ;
+
+  if (mode == PUD_UP)
+    old |=   mask ;
+  else
+    old &= (~mask) ;
+
+  writeByte (node->data0, node->data1, reg, old) ;
+}
+
+
+/*
+ * myDigitalWrite:
+ *********************************************************************************
+ */
+
+static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  int bit, old ;
+
+  pin -= node->pinBase ;	// Pin now 0-15
+
+  bit = 1 << (pin & 7) ;
+
+  if (pin < 8)			// Bank A
+  {
+    old = node->data2 ;
+
+    if (value == LOW)
+      old &= (~bit) ;
+    else
+      old |=   bit ;
+
+    writeByte (node->data0, node->data1, MCP23x17_GPIOA, old) ;
+    node->data2 = old ;
+  }
+  else				// Bank B
+  {
+    old = node->data3 ;
+
+    if (value == LOW)
+      old &= (~bit) ;
+    else
+      old |=   bit ;
+
+    writeByte (node->data0, node->data1, MCP23x17_GPIOB, old) ;
+    node->data3 = old ;
+  }
+}
+
+
+/*
+ * myDigitalRead:
+ *********************************************************************************
+ */
+
+static int myDigitalRead (struct wiringPiNodeStruct *node, int pin)
+{
+  int mask, value, gpio ;
+
+  pin -= node->pinBase ;
+
+  if (pin < 8)		// Bank A
+    gpio  = MCP23x17_GPIOA ;
+  else
+  {
+    gpio  = MCP23x17_GPIOB ;
+    pin  &= 0x07 ;
+  }
+
+  mask  = 1 << pin ;
+  value = readByte (node->data0, node->data1, gpio) ;
+
+  if ((value & mask) == 0)
+    return LOW ;
+  else 
+    return HIGH ;
+}
+
+
+/*
+ * mcp23s17Setup:
+ *	Create a new instance of an MCP23s17 SPI GPIO interface. We know it
+ *	has 16 pins, so all we need to know here is the SPI address and the
+ *	user-defined pin base.
+ *********************************************************************************
+ */
+
+int mcp23s17Setup (const int pinBase, const int spiPort, const int devId)
+{
+  int    x ;
+  struct wiringPiNodeStruct *node ;
+
+  if ((x = wiringPiSPISetup (spiPort, MCP_SPEED)) < 0)
+    return x ;
+
+  writeByte (spiPort, devId, MCP23x17_IOCON,  IOCON_INIT | IOCON_HAEN) ;
+  writeByte (spiPort, devId, MCP23x17_IOCONB, IOCON_INIT | IOCON_HAEN) ;
+
+  node = wiringPiNewNode (pinBase, 16) ;
+
+  node->data0           = spiPort ;
+  node->data1           = devId ;
+  node->pinMode         = myPinMode ;
+  node->pullUpDnControl = myPullUpDnControl ;
+  node->digitalRead     = myDigitalRead ;
+  node->digitalWrite    = myDigitalWrite ;
+  node->data2           = readByte (spiPort, devId, MCP23x17_OLATA) ;
+  node->data3           = readByte (spiPort, devId, MCP23x17_OLATB) ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s17.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s17.h
new file mode 100644
index 00000000..3b2a8088
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s17.h
@@ -0,0 +1,33 @@
+/*
+ * 23s17.h:
+ *	Extend wiringPi with the MCP 23s17 SPI GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int mcp23s17Setup (int pinBase, int spiPort, int devId) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s17.o b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23s17.o
new file mode 100644
index 0000000000000000000000000000000000000000..e780bad13ace885dd39f68bd355f999fd2e43140
GIT binary patch
literal 3656
zcmbVOZ){Ul6u)i9y1(x|#*9tCP?Bm&klONRfJW2XzHOb9jnLM`4Cu<%v1VPjbZyvF
zAm*`UH)V=3d^GAO{h$dSOd~Fmg#np~OBSXv^2HG%NPs9v1cXt~y}ggUy|#vMn)mLx
zzkB}PbMAdT+URdG8VpD!19}53%~TYjis~ia%~&_8MO7#i@R5f;<)&rBwr*dh>_t1Q
z`G{<*a7}$n?U38bW%K-k^4NSdm}#pg=PPGNFN()TVJYL4#O%8@K63Rt6HG72Hbb3z
zJZ>{83ueQVGUFaEv;6@Ji1gL_GGMaXw>j@19rP*ZEFJr%droB9EP0#h@_TdZX2|&>
zR#%m<YPs>{iM-PF!CWrKd<Dqgr|ZBcq$F)vt4~RJXg*S*Trr<s1tOVdDbr5FANSh~
z5VM&5mnA}D$7<|iHfS@FU)f&FFO1HKC#QTFKg*?tZI+mwN|!@AQpYq4KwK*$)Z-A>
z9;2xv{1y(8+c+3%A&&y&=gAttSZrcJY!7H`m(7#4Aj14%G5emahQ&0$K;ztNGhlK7
z!(K{!k2P`1Hls}L;0&nTyU3;8Vm7z#tX%n*vS<|LIi@)d2{D`cGU;km%aYoM_u_qc
zzna@pKCWAV7P5%RPye6I_q2&{rcr`q4(D^3q!0v1t7@3P(n78lO@>^mJd2e_hLoSF
zXAal+$v;nmXUd>QGhEhex-6bwmPOBrd-Ln2$)y`#@me9=4izH5;1CXCayJw>gDPJ~
z<e^NiL0<M{HL|#-nAYf&IDQRMkjbKdB4v{r#q3SxcQe~lnfz(E1#!Y*SXo7`!%$~e
zX0h^v8=6dlN6b6U0>>0U7Idh1H4~;{OoaS)Mgk{{mq}-hOok;Nnf6Vr7<rt_X>@(W
zYX$V<#as?pJFxd3G1dv}3wd@s-7blGsptM7FpUl3t$!l%+>!+GLe9QS&}M<7ThH1(
zEy9M{J9t~*aK156v)B8o)gC&KPNdS-t&S}Y=f;LKo4Jm-8XV3ojvedsxOJ1$)!=M!
z?ttWg>hl9Kyt4-xh9$%58gs=7Xb?N#Yxvq69kC#d8L?ndOwEGRn5+^kfMB7*TaB!+
z?4vS3@6#8oD8`+F)tIPaGPoMK0glr(pjrCz2+{{ek6@WF$%6HG85ZngD`df`l<ySW
z#xJS_Cm>j`f&@r<gbHrs6x9VPX~Roxya_fwEwll#`a$<Dvw%<&JqTd^LmI~irbfX!
zQRWfs$7vj6<yhFRm|KNTlf_UaY{x7h&+>q{oniwuU50MwimjQ7ejyMt!LJyZz)~?X
zp%n!%z2A%)`>b|=t>(BoXLSN>J;ys~z(8zYVSEi9YR74$=n_tO6Ef4GfJ~^O0Hc5j
zl^5WRfJg->LLDXW{u1~R!0TwfeCt?E0Xtqo{*w|o>hBudw0X$2&C!MWN95SSSSk{4
zPsUQwrRkn%q#I_t)A4v{P)>LU5~<`soFcKru7U0-3OD=PJlG#@YibHK2E#$@@i&Ii
zp;$7OIJi3&*xe#WQjtCFC>$P2MY{UJUA=wbo=6N#aOZ(&Dm|!GSPryC54BQ1K%Mjj
zL_0%(2kse0SqcK_@gMUr!$sg#`8B-mdih-%Tq}Q0gKPbod7tR*tk>XLJ0EFqt)1Bt
z_yY~Dwet$EJN3I#lUGuMYwe#bfq$;S>HimXf9_~-t(|)65J;b|M}uqQv@&UWrt%M;
zvipegDz2W-K`x-;>iPUehpXrFz7AK<19A+F^rs>RU`!?RW3S33qw$C%6&+3?M>jMk
zavT^MLJV-E6Y*GIG(LhHT?767(FBMj22xQ+b8BcL>s{nv+R@%{PcqWaT9QZbY=afl
zXlv<j3O8Vsn)trvXN7kMz2B&aTNU8rFu#&c@xG;h!zruYR2DAx632PDIf~Gj&ab+_
z&8buLGH}%9v+BD*w^;s9>)*}woiJ)i)!(WGfmh>K#}*By6`g#_{P%Nx+OJxg;`(mY
z5nojIUzL3um}2#_SLG#!xgf0{)m8P?`q8tm-+QX^8Q1Tn6AkIYVf&$vor&{?oZ$-e
Z`&tW+-hU-v#r)6kPvzIl*wRby|3Bh!zytsQ

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23x08.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23x08.h
new file mode 100644
index 00000000..c4e6b272
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23x08.h
@@ -0,0 +1,73 @@
+/*
+ * mcp23x17:
+ *	Copyright (c) 2012-2013 Gordon Henderson
+ *
+ *	Header file for code using the MCP23x17 GPIO expander chip.
+ *	This comes in 2 flavours: MCP23017 which has an I2C interface,
+ *	an the MXP23S17 which has an SPI interface.
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+// MCP23x17 Registers
+
+#define	IODIRA		0x00
+#define	IPOLA		0x02
+#define	GPINTENA	0x04
+#define	DEFVALA		0x06
+#define	INTCONA		0x08
+#define	IOCON		0x0A
+#define	GPPUA		0x0C
+#define	INTFA		0x0E
+#define	INTCAPA		0x10
+#define	GPIOA		0x12
+#define	OLATA		0x14
+
+#define	IODIRB		0x01
+#define	IPOLB		0x03
+#define	GPINTENB	0x05
+#define	DEFVALB		0x07
+#define	INTCONB		0x09
+#define	IOCONB		0x0B
+#define	GPPUB		0x0D
+#define	INTFB		0x0F
+#define	INTCAPB		0x11
+#define	GPIOB		0x13
+#define	OLATB		0x15
+
+// Bits in the IOCON register
+
+#define	IOCON_UNUSED	0x01
+#define	IOCON_INTPOL	0x02
+#define	IOCON_ODR	0x04
+#define	IOCON_HAEN	0x08
+#define	IOCON_DISSLW	0x10
+#define	IOCON_SEQOP	0x20
+#define	IOCON_MIRROR	0x40
+#define	IOCON_BANK_MODE	0x80
+
+// Default initialisation mode
+
+#define	IOCON_INIT	(IOCON_SEQOP)
+
+// SPI Command codes
+
+#define	CMD_WRITE	0x40
+#define CMD_READ	0x41
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp23x0817.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23x0817.h
new file mode 100644
index 00000000..58bc0382
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp23x0817.h
@@ -0,0 +1,87 @@
+/*
+ * mcp23xxx:
+ *	Copyright (c) 2012-2013 Gordon Henderson
+ *
+ *	Header file for code using the MCP23x08 and 17 GPIO expander
+ *	chips.
+ *	This comes in 2 flavours: MCP230xx (08/17) which has an I2C
+ *	interface, and the MXP23Sxx (08/17) which has an SPI interface.
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+// MCP23x08 Registers
+	
+#define	MCP23x08_IODIR		0x00
+#define	MCP23x08_IPOL		0x01
+#define	MCP23x08_GPINTEN	0x02
+#define	MCP23x08_DEFVAL		0x03
+#define	MCP23x08_INTCON		0x04
+#define	MCP23x08_IOCON		0x05
+#define	MCP23x08_GPPU		0x06
+#define	MCP23x08_INTF		0x07
+#define	MCP23x08_INTCAP		0x08
+#define	MCP23x08_GPIO		0x09
+#define	MCP23x08_OLAT		0x0A
+
+// MCP23x17 Registers
+
+#define	MCP23x17_IODIRA		0x00
+#define	MCP23x17_IPOLA		0x02
+#define	MCP23x17_GPINTENA	0x04
+#define	MCP23x17_DEFVALA	0x06
+#define	MCP23x17_INTCONA	0x08
+#define	MCP23x17_IOCON		0x0A
+#define	MCP23x17_GPPUA		0x0C
+#define	MCP23x17_INTFA		0x0E
+#define	MCP23x17_INTCAPA	0x10
+#define	MCP23x17_GPIOA		0x12
+#define	MCP23x17_OLATA		0x14
+
+#define	MCP23x17_IODIRB		0x01
+#define	MCP23x17_IPOLB		0x03
+#define	MCP23x17_GPINTENB	0x05
+#define	MCP23x17_DEFVALB	0x07
+#define	MCP23x17_INTCONB	0x09
+#define	MCP23x17_IOCONB		0x0B
+#define	MCP23x17_GPPUB		0x0D
+#define	MCP23x17_INTFB		0x0F
+#define	MCP23x17_INTCAPB	0x11
+#define	MCP23x17_GPIOB		0x13
+#define	MCP23x17_OLATB		0x15
+
+// Bits in the IOCON register
+
+#define	IOCON_UNUSED	0x01
+#define	IOCON_INTPOL	0x02
+#define	IOCON_ODR	0x04
+#define	IOCON_HAEN	0x08
+#define	IOCON_DISSLW	0x10
+#define	IOCON_SEQOP	0x20
+#define	IOCON_MIRROR	0x40
+#define	IOCON_BANK_MODE	0x80
+
+// Default initialisation mode
+
+#define	IOCON_INIT	(IOCON_SEQOP)
+
+// SPI Command codes
+
+#define	CMD_WRITE	0x40
+#define CMD_READ	0x41
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp3002.c b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3002.c
new file mode 100644
index 00000000..5d449401
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3002.c
@@ -0,0 +1,76 @@
+/*
+ * mcp3002.c:
+ *	Extend wiringPi with the MCP3002 SPI Analog to Digital convertor
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <wiringPiSPI.h>
+
+#include "mcp3002.h"
+
+/*
+ * myAnalogRead:
+ *	Return the analog value of the given pin
+ *********************************************************************************
+ */
+
+static int myAnalogRead (struct wiringPiNodeStruct *node, int pin)
+{
+  unsigned char spiData [2] ;
+  unsigned char chanBits ;
+  int chan = pin - node->pinBase ;
+
+  if (chan == 0)
+    chanBits = 0b11010000 ;
+  else
+    chanBits = 0b11110000 ;
+
+  spiData [0] = chanBits ;
+  spiData [1] = 0 ;
+
+  wiringPiSPIDataRW (node->fd, spiData, 2) ;
+
+  return ((spiData [0] << 7) | (spiData [1] >> 1)) & 0x3FF ;
+}
+
+
+/*
+ * mcp3002Setup:
+ *	Create a new wiringPi device node for an mcp3002 on the Pi's
+ *	SPI interface.
+ *********************************************************************************
+ */
+
+int mcp3002Setup (const int pinBase, int spiChannel)
+{
+  struct wiringPiNodeStruct *node ;
+
+  if (wiringPiSPISetup (spiChannel, 1000000) < 0)
+    return -1 ;
+
+  node = wiringPiNewNode (pinBase, 2) ;
+
+  node->fd         = spiChannel ;
+  node->analogRead = myAnalogRead ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp3002.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3002.h
new file mode 100644
index 00000000..0cd727f3
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3002.h
@@ -0,0 +1,33 @@
+/*
+ * mcp3002.c:
+ *	Extend wiringPi with the MCP3002 SPI Analog to Digital convertor
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int mcp3002Setup (int pinBase, int spiChannel) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp3002.o b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3002.o
new file mode 100644
index 0000000000000000000000000000000000000000..919732166877cd1b9538a16117cef0725ee7c597
GIT binary patch
literal 1992
zcmbuA?@Lor7{{OeFt5|L6$JwW_hO2HUhe!cGa@$K+!cnJQ!1ja*X`<t`ytyMYA-U9
z!Xbh5$C&s+ETh-bKTxkCD$wXfZ;JIiclYRRyMw4NoIU4!&htFy+~=Ib)+4botHlCL
z7Ptv#BSrx>?PvX<)(ygWaDce+)w6d}sZ^5Umc6qZXT);Y$N3M2hql(a-6Nb4%OBr{
zeHL&<Uhi4aVbkvWL>XK=Gd_!J$L>4&{OUuqYv*0dQD?=53ASQBE-Ci6Y3WK$;>H`#
zVKt%yX5;1W<zM^35f_x-<Kmn)@$_J|YoBtLkF~M*{Bi<UF5ltA@|5U5z!coQ`-iR$
z*hO6VatzVY(d*vs+4)jVEqMp|0bb}0l(domkw3r-1N`vSD);sY{(uk=hH1}mN&5w`
zJe&s0s@u}u*34~V!92*X=yO@JVW-!ca5%Y8D|F-Vnm!jL8*;jzSwl|GhHcX6O*@<(
z1R*CEZq=Pk44sJ`zEw=7z-D@4fE=r7A{%BhlMR~cFm1_d$gh2y?q!4KI)4H-;2Q9A
zb)4$vuA=~a10HO^Zy~>k`&>p#(&~)%0XDPz`34-aiRFGl=;ITRT?^&pOnz}%k&_@r
zW0NDHm^3*y7LUwGGog`KM1qxcA)Q;CO2?<h!?G$*-v&u4s&ZmUN~D&g1v#Bz`QnON
zS~mLs2_}@4iF{H47{Yy#=!B^DKk2@r(gab&+psbIgdmEz6C2|%2%?C)urcn%K8YR+
zHKrSShjCU%;EQWnRh~zy7OFPIdIcpT^Qy9{0-waM2Y$X-1P$<|TqeDwWY&OB<g-~N
zhc3Cis_@Z?*<P(cz-!S;N?It$S^V(-lo#Xajnv+-ATrX+syY3wy%X&?L$wN?dQ>~x
z`V*SdIh_fu!)`d;Us4w~;<YdC2ThuYe2wbC0p<MHct6IPegEICAJpRov_`S`K_kRI
z+ds4824-~aVGc%U;!E$8T#a{<LIgd2js^y?`ZIJFJ7(v1q8F5X7o8u)vUqlW7m(G~
u9uascDJoSpr@ytIWwv*6rvC=gW8Ko*bzrMqzXh4u`feSr<GfL|>;DF}so|dh

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp3004.c b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3004.c
new file mode 100644
index 00000000..82c73dd2
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3004.c
@@ -0,0 +1,76 @@
+/*
+ * mcp3004.c:
+ *	Extend wiringPi with the MCP3004 SPI Analog to Digital convertor
+ *	Copyright (c) 2012-2013 Gordon Henderson
+ *
+ *	Thanks also to "ShorTie" on IRC for some remote debugging help!
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <wiringPiSPI.h>
+
+#include "mcp3004.h"
+
+/*
+ * myAnalogRead:
+ *	Return the analog value of the given pin
+ *********************************************************************************
+ */
+
+static int myAnalogRead (struct wiringPiNodeStruct *node, int pin)
+{
+  unsigned char spiData [3] ;
+  unsigned char chanBits ;
+  int chan = pin - node->pinBase ;
+
+  chanBits = 0b10000000 | (chan << 4) ;
+
+  spiData [0] = 1 ;		// Start bit
+  spiData [1] = chanBits ;
+  spiData [2] = 0 ;
+
+  wiringPiSPIDataRW (node->fd, spiData, 3) ;
+
+  return ((spiData [1] << 8) | spiData [2]) & 0x3FF ;
+}
+
+
+/*
+ * mcp3004Setup:
+ *	Create a new wiringPi device node for an mcp3004 on the Pi's
+ *	SPI interface.
+ *********************************************************************************
+ */
+
+int mcp3004Setup (const int pinBase, int spiChannel)
+{
+  struct wiringPiNodeStruct *node ;
+
+  if (wiringPiSPISetup (spiChannel, 1000000) < 0)
+    return -1 ;
+
+  node = wiringPiNewNode (pinBase, 8) ;
+
+  node->fd         = spiChannel ;
+  node->analogRead = myAnalogRead ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp3004.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3004.h
new file mode 100644
index 00000000..a07c0bf0
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3004.h
@@ -0,0 +1,33 @@
+/*
+ * mcp3004.c:
+ *	Extend wiringPi with the MCP3004 SPI Analog to Digital convertor
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int mcp3004Setup (int pinBase, int spiChannel) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp3004.o b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3004.o
new file mode 100644
index 0000000000000000000000000000000000000000..862b16fce398efd8c0a551889d5f44c4e5c80ee7
GIT binary patch
literal 1992
zcmbuA-%k@k5Xa}*B4@$28cmvDLLUmj2$xo%iZSL21&*Wvq!2Mik869S4gEpdYXBdF
zST!`ng!s>3d>|zl9{m@5GbWm#@xd2Oow?q^*&d0}Z?ZSLpPkvgo!QH6jz=eK90yDs
z+=bH-qX65E)4r&8MYsS?kSbri*Kh7@@^9@(j~ssPDB`z4QrdC!^dXU|5kDWS9ei|D
z-fxN9nxB)ZA3xCo?!AbgOC8kso;rp~J5fKMlm<KXsB)WBdFMTB_;rhr65QR-DF_x~
z)$i3``{Jk@svmH3UiW!XTkqZHak_e}kEK^v67_n$y2wk_St(e<)%b^x4&B}G266rK
zF-(q)-S+h@#LIcD>>Cz_gup<ktdD|EgCQX>B#c~ZaNmtUFcb&{M)dtJ>rVjg$sBO&
z9<Hmio!`ZTd68c==Hg@{E}w1D>Egp3(1*iY#@r;?u*>t(7It|n_8FHi<8*lugk5~3
z!*H@NR1*h$t6NNg-LhhUoNCf4JFa9UJG8Z6dL^4_ef?~PmmS(${0Z2BO3^AioNIxU
zH%|)%5YFJ@8T=mdOZc9vXi0jW(LTmzwSM6Y4!OkYU;xXXfZRqnuVf3$bE=XAc``aP
z8ji{{6BDuVd3ioO8XcEmEmO?omuEAv*{O)4DRcKhmP?wFSdkOy6*;A3vTVJWs+CvG
z{(pjLb#1zkQ~^TxUL>jz<^Ct#R}`ItM7$Fl<If19h`X>c{+b|)xEmYeKJ1fhM$-rQ
zxMOq}XL$snw2{-4I9jdPuxZvSs#!(Q)O8JnB%U6Gc&P+B5X$*%W<||zfRHHUa%vu3
z@&!#5CZ`t$^aO#RN2_T$RaA0#@c)z#<LMh|zF{IV(q6-yJe%)C7tT<w#1oH3XV>_I
zmJCicp?%m5r~6Cl#YVjOi~B*779wA>`f)&O{%d>?W3A5rxBH7md;qOkEPmJwvCrP0
z*(nn<yY@2&Gqmuf`%SKN|I7*)@k?fieU^WQA7IC-eqW7*vU5@WD3-;u`dviUoO?vz
rqeW5ahB<jQAIs|9$(jBQq%FhJx9h~#y#IM*R{MJlxQX*-HShl$<Ehy3

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp3422.c b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3422.c
new file mode 100644
index 00000000..831aece3
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3422.c
@@ -0,0 +1,110 @@
+/*
+ * mcp3422.c:
+ *	Extend wiringPi with the MCP3422 I2C ADC chip
+ *	Also works for the MCP3423 and MCP3224 (4 channel) chips
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <linux/spi/spidev.h>
+
+#include <wiringPi.h>
+#include <wiringPiI2C.h>
+
+#include "mcp3422.h"
+
+
+/*
+ * myAnalogRead:
+ *	Read a channel from the device
+ *********************************************************************************
+ */
+
+int myAnalogRead (struct wiringPiNodeStruct *node, int chan)
+{
+  unsigned char config ;
+  unsigned char buffer [4] ;
+  int value = 0 ;
+
+// One-shot mode, trigger plus the other configs.
+
+  config = 0x80 | ((chan - node->pinBase) << 5) | (node->data0 << 2) | (node->data1) ;
+  
+  wiringPiI2CWrite (node->fd, config) ;
+
+  switch (node->data0)	// Sample rate
+  {
+    case MCP3422_SR_3_75:			// 18 bits
+      delay (270) ;
+      read (node->fd, buffer, 4) ;
+      value = ((buffer [0] & 3) << 16) | (buffer [1] << 8) | buffer [0] ;
+      break ;
+
+    case MCP3422_SR_15:				// 16 bits
+      delay ( 70) ;
+      read (node->fd, buffer, 3) ;
+      value = (buffer [0] << 8) | buffer [1] ;
+      break ;
+
+    case MCP3422_SR_60:				// 14 bits
+      delay ( 17) ;
+      read (node->fd, buffer, 3) ;
+      value = ((buffer [0] & 0x3F) << 8) | buffer [1] ;
+      break ;
+
+    case MCP3422_SR_240:			// 12 bits
+      delay (  5) ;
+      read (node->fd, buffer, 3) ;
+      value = ((buffer [0] & 0x0F) << 8) | buffer [0] ;
+      break ;
+  }
+
+  return value ;
+}
+
+
+/*
+ * mcp3422Setup:
+ *	Create a new wiringPi device node for the mcp3422
+ *********************************************************************************
+ */
+
+int mcp3422Setup (int pinBase, int i2cAddress, int sampleRate, int gain)
+{
+  int fd ;
+  struct wiringPiNodeStruct *node ;
+
+  if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
+    return fd ;
+
+  node = wiringPiNewNode (pinBase, 4) ;
+
+  node->data0      = sampleRate ;
+  node->data1      = gain ;
+  node->analogRead = myAnalogRead ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp3422.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3422.h
new file mode 100644
index 00000000..bb4692d8
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3422.h
@@ -0,0 +1,43 @@
+/*
+ * mcp3422.c:
+ *	Extend wiringPi with the MCP3422 I2C ADC chip
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#define	MCP3422_SR_3_75	0
+#define	MCP3422_SR_15	1
+#define	MCP3422_SR_60	2
+#define	MCP3422_SR_240	3
+
+#define	MCP3422_GAIN_1	0
+#define	MCP3422_GAIN_2	1
+#define	MCP3422_GAIN_4	2
+#define	MCP3422_GAIN_8	3
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int mcp3422Setup (int pinBase, int i2cAddress, int sampleRate, int gain) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp3422.o b/modules/catkin_ws/src/wiringPi/wiringPi/mcp3422.o
new file mode 100644
index 0000000000000000000000000000000000000000..3ceba46e47d31d53e620b957e5b7fa9d88411dc3
GIT binary patch
literal 2472
zcmbW1?`zve7{||+yDF(GX(Jnf4x$%c$;vA1G|ko(7Aa0*wU{(C3G2u<q1bY5VmrZ+
z*LZ<-Ozl8;g}&ThFzCC!a$tkSrezHJCU5q(_*J{oF}62bV1?{?WL<JoWZ3o<r@Q;y
zJ<mP&^X5!;HX4Z#st9?H9M&i$r1;WdS@nu4IY|b|g6{sMJHJTknYZ(LGxo+PwCV12
zf={)@Rwmwga;(#h4rZk0P2TzO^MM~!vGvE#Xx~i7oxO;7>k*X2FYdtK*^Aoq&K_6a
z+BpW*Uau|wTMjC^`^2k@t)Yaw>vY9Vmmk>Go7n`P*U!bhVa40`u&47-T7FOvM{Yrd
zke!#|*T+>XA+{D15vM!pd3%0e93iRp^LyfmN_GTTg#)`7I5`Xf?6!vzPM7O+rGedN
zpX~4NAC5Q6j0YxO^u5rxV~Iki&5PUZXK66;;9YHTNpoK;xPQ7oxsN<_yS*uYj{{D-
zPd%VFUxgZRi*fgwq`UKas=fS?_TdAPNvGeHN0(OWRl6>qSH_j(*@?PWOMRA_P?F=y
zg*SU#9!sVsk`u`bWC&e>BA;F*kxeObDt?^53saSWy^al_Njw0WAUV;DAV=>E3X&%9
zmrsyUz$zrvMf^<((pOPU82*x*7Gx*3E)0X!l)z(KAEE0Q`F%gEnF~F6gmCbMi33kz
z;s~CfqvFW%qYwy3!XxGgbLf4`6Og~c#ObXSuwh7&--peVK76tdpXtLd_u<RHF&-5c
z7Ub;<<V8qf@ih8yQpv5K8y_1}a-`DGs%ClZ`c=!!6C;zoGNomWE3>l;GmFNeHkF+*
z$c<91RJ}f5x-^!4zgDs>lDEocgVa0=W5YIct46N4Y81>;nR;HZ?D{%u`A;xs-I!a;
zTM(Y7^L~yyjBEY^ZVU?Ni$WfUMENR05b~3dDE|f_DA>Q%!$<l*W;pBrSBA6xU-Q>J
z=>Igs+5Q(9E`U!O=N!Xv-zYa2j!zlo1)rY*Ho$Nh%BZNHybAoL{Q~9mybxuhQL)Vx
z$n9D$FVa#CHdV2$O`9lr(>95+vavxtpwz47(yCQ%5GA)(saRF$QeCqxB{R2l*4uuf
zc-B_YDAdf#!M4(H{&Oya1x`75BUNCiEq^_FwWDYM6g1!-skDQie~l3Ij&F}=4U6<e
zz<Z544GDShCHgKfF7`zQ@ms*q=l``&`96d5|F`3-zI_sMR@9!}H`+$yr}-slpk>+z
z^WVZ?NZ*frhUbqJwa5306<vSIK7c~l{_XltJ)IZsAKFrTx_@|gf@=@x;6Me(4^9i~
g!PwFKnh)>$2KZ*+eGHC|ENpz<KYuQ?vkH#?H)vL78~^|S

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp4802.c b/modules/catkin_ws/src/wiringPi/wiringPi/mcp4802.c
new file mode 100644
index 00000000..5c5c17af
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp4802.c
@@ -0,0 +1,76 @@
+/*
+ * mcp4802.c:
+ *	Extend wiringPi with the MCP4802 SPI Digital to Analog convertor
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <wiringPiSPI.h>
+
+#include "mcp4802.h"
+
+/*
+ * myAnalogWrite:
+ *	Write analog value on the given pin
+ *********************************************************************************
+ */
+
+static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  unsigned char spiData [2] ;
+  unsigned char chanBits, dataBits ;
+  int chan = pin - node->pinBase ;
+
+  if (chan == 0)
+    chanBits = 0x30 ;
+  else
+    chanBits = 0xB0 ;
+
+  chanBits |= ((value >> 4) & 0x0F) ;
+  dataBits  = ((value << 4) & 0xF0) ;
+
+  spiData [0] = chanBits ;
+  spiData [1] = dataBits ;
+
+  wiringPiSPIDataRW (node->fd, spiData, 2) ;
+}
+
+/*
+ * mcp4802Setup:
+ *	Create a new wiringPi device node for an mcp4802 on the Pi's
+ *	SPI interface.
+ *********************************************************************************
+ */
+
+int mcp4802Setup (const int pinBase, int spiChannel)
+{
+  struct wiringPiNodeStruct *node ;
+
+  if (wiringPiSPISetup (spiChannel, 1000000) < 0)
+    return -1 ;
+
+  node = wiringPiNewNode (pinBase, 2) ;
+
+  node->fd          = spiChannel ;
+  node->analogWrite = myAnalogWrite ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp4802.h b/modules/catkin_ws/src/wiringPi/wiringPi/mcp4802.h
new file mode 100644
index 00000000..effa0246
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/mcp4802.h
@@ -0,0 +1,33 @@
+/*
+ * mcp4802.c:
+ *	Extend wiringPi with the MCP4802 SPI Digital to Analog convertor
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int mcp4802Setup (int pinBase, int spiChannel) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/mcp4802.o b/modules/catkin_ws/src/wiringPi/wiringPi/mcp4802.o
new file mode 100644
index 0000000000000000000000000000000000000000..4da7eca49478f60c72d4e855cd3b2ef2bd882936
GIT binary patch
literal 1992
zcmbW2-Afcv6u{4ZnCnNgTNG><xDOTvI?bAH8WB6X>I$ObDi&emxQ_1Pe#knD+CxfK
zxJV%VCB0=mh++>u_8$~IL{MPSLp>DRIkWfbZJmYiz|1-KchASY_srd0?H%lMIvl{o
z0e9ed#3{gr``8X!W*E*wEkxJ9`d=#uW}=(!E6r#`3y~&IaJTE`_RC_ixVh?y7Cw1<
z4+`)0KDzgQxi`j|9B-WHxBkIfbFkrV`b^oPn;0|`y-`Y$uZpg}_3v9V-o^;Ptn6)k
zLVhqFEBq+@*$H=hq3|Aydn~7?yUSO1C~4ual<xV(I2JG5#o{9)!Cg$}xj(t@ZG>&a
z#V?1@-_vs|&^$h!&zSi@hukhJt)aX%3O)*kWTjp1x>n+WHYFHRLQ0oa|AO@fa6B9Z
z$Fk4SP+#rY!UOXozs%-z(h(`(oT!yNY8^D=u#?U8lU60)Gp8!~*ImO>AXzK<5vY<U
zQpcQZ6!pXn--|X=;Ii!)Aa~ihBNdt{c(|ZS7?n&~l2gcU?TvZ4p!$SA0T*~G@G~d)
zB_zHR6ySOVu2$fq$j{?C7g#RqoYB@Q_>-SqT}a0l+B=mtIS%O+HKV7pa}&9wX@J&0
zINYrcYQuefvEDIlOzj@*)nF-^OJ?RqlChD2h;Hhm6QF5}rXHWy;)!`}R!^pQ!kA&^
z7exPm!H}^ul$|l4hpnGFL}&k-zE_k<f!7QCvA`vPzYw@r-~q<zve3ijHZwTq=LquR
zO4`(?QJcAvPH-z{q;%OdmQ9dnaPuHfFD`-w<a{QToHtS{Ajh-mw2?uVOx85y{-N<!
z>wG}AqK$+$o72+<U&g6*03+#+lz(AiWF)Uj>gZkG`v#n$GY=nml#DHQg{By%o=_eB
zh10z!xrz_*@*DS)CT)a#MQOnS<veYC5M%B3|G)LaEM7q^3Xks)A=-TXTn`9LbZy}d
zBDC>+z?k?=Qi#Ihr)VGuKYxzyp<&m*Z|p$%zNmi`%j0?f&LJy5dqfamKa~j@2vWW+
i8ket~-08o8WQ}RMyS4a~*RMflSKr6r8qSMSUjHwV<lTD!

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/pcf8574.c b/modules/catkin_ws/src/wiringPi/wiringPi/pcf8574.c
new file mode 100644
index 00000000..c172d1cb
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/pcf8574.c
@@ -0,0 +1,126 @@
+/*
+ * pcf8574.c:
+ *	Extend wiringPi with the PCF8574 I2C GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <pthread.h>
+
+#include "wiringPi.h"
+#include "wiringPiI2C.h"
+
+#include "pcf8574.h"
+
+
+/*
+ * myPinMode:
+ *	The PCF8574 is an odd chip - the pins are effectively bi-directional,
+ *	however the pins should be drven high when used as an input pin...
+ *	So, we're effectively copying digitalWrite...
+ *********************************************************************************
+ */
+
+static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode)
+{
+  int bit, old ;
+
+  bit  = 1 << ((pin - node->pinBase) & 7) ;
+
+  old = node->data2 ;
+  if (mode == OUTPUT)
+    old &= (~bit) ;	// Write bit to 0
+  else
+    old |=   bit ;	// Write bit to 1
+
+  wiringPiI2CWrite (node->fd, old) ;
+  node->data2 = old ;
+}
+
+
+
+/*
+ * myDigitalWrite:
+ *********************************************************************************
+ */
+
+static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  int bit, old ;
+
+  bit  = 1 << ((pin - node->pinBase) & 7) ;
+
+  old = node->data2 ;
+  if (value == LOW)
+    old &= (~bit) ;
+  else
+    old |=   bit ;
+
+  wiringPiI2CWrite (node->fd, old) ;
+  node->data2 = old ;
+}
+
+
+/*
+ * myDigitalRead:
+ *********************************************************************************
+ */
+
+static int myDigitalRead (struct wiringPiNodeStruct *node, int pin)
+{
+  int mask, value ;
+
+  mask  = 1 << ((pin - node->pinBase) & 7) ;
+  value = wiringPiI2CRead (node->fd) ;
+
+  if ((value & mask) == 0)
+    return LOW ;
+  else 
+    return HIGH ;
+}
+
+
+/*
+ * pcf8574Setup:
+ *	Create a new instance of a PCF8574 I2C GPIO interface. We know it
+ *	has 8 pins, so all we need to know here is the I2C address and the
+ *	user-defined pin base.
+ *********************************************************************************
+ */
+
+int pcf8574Setup (const int pinBase, const int i2cAddress)
+{
+  int fd ;
+  struct wiringPiNodeStruct *node ;
+
+  if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
+    return fd ;
+
+  node = wiringPiNewNode (pinBase, 8) ;
+
+  node->fd           = fd ;
+  node->pinMode      = myPinMode ;
+  node->digitalRead  = myDigitalRead ;
+  node->digitalWrite = myDigitalWrite ;
+  node->data2        = wiringPiI2CRead (fd) ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/pcf8574.h b/modules/catkin_ws/src/wiringPi/wiringPi/pcf8574.h
new file mode 100644
index 00000000..8e2d8181
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/pcf8574.h
@@ -0,0 +1,33 @@
+/*
+ * pcf8574.h:
+ *	Extend wiringPi with the PCF8574 I2C GPIO expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int pcf8574Setup (const int pinBase, const int i2cAddress) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/pcf8574.o b/modules/catkin_ws/src/wiringPi/wiringPi/pcf8574.o
new file mode 100644
index 0000000000000000000000000000000000000000..2b38c7fddfd72d2818ed5bf99a9bde2e5e408518
GIT binary patch
literal 2344
zcmbtU|4UO*6u;a2GEFxte=tmZLWE&HHqogOwW)K@SW}!MLu^ic>O(ijd`m6JXjwcg
zkRYo6!k_vjkb&7R{Z<fxL_`omQTT%xeZkIo@7{bqpAmK7zI)E+e9k%do_p_`^9S3l
z77JlwA!o>r#ZW@lb9Z#Fs(MK=DJ0>V#wW;Mn6oPznRodw->;*0e#Ln|>wKK;TX9yl
z5i-I%D{rb%k+7hA7c!shHH`~_Qe|TqgE8)dvRSY?|012Y^{VQbvbk{8u6$NgDdVL=
z=Bd4}A5wYApW`#%EOLce=m@K?W&gOw>_}Moschkbv~_2dm6@~3mt{LFODo@N7nD`u
zZtjik?QP|)dreUM9GEsRL3M#zt*K2K->)uLc?}CDf!5YjTy<nHosiR917FX(YCUPy
za$j?Mcvn5&d_u#yI+xqy^0=DSE)h~nXUmmtVwowilo#dO7ok^WfFGs4Dx7_el8iO#
z!1W%3(S#VtY5aiimeuDd%h&=AF6k%(+Xu{Qa1EdzM8MB3-gqG+o;#rByn`H&e*Elk
z1qWvhIm%kKr06pdJl-6#v2EfaHq)C%0JoXZ0nOP5*IiD^fTa_wF2C9<z>ZMdMR{tU
zK*ydSKS^=5FI2aYe5&o9Y{b4B_|4DTgVzC4vIo`rZ-)2o!<PU*1nbPwT<V#Cei?>Y
zp4<E2BsnzF)X-SZ50Ut6n=~rPv59UmHoRk9NJ+8?W|x#WKRGOtXdu|x;tNJQ+uOtb
zo@kG+CFqZmX(=ToM!Terx>hw@XKM*)ov<jUlX~`UAS6zQun0L!_k|~24C4p9EtE?-
z+@ZrC?Sntp;n)|J=Zy|OsKbl#qJkLfaw>{<LmSl8-WSEt=c0~bIx~Kf+KUD}OKrkW
z&Bo=}Ak1<~o5z@z5+`E3EY8S;ACAc}!VgYO5f$Lmi3w?3oR}s2&}2L=CV-Ndltn%e
ziquZYv7vFotI^_EbR-pvLu3C_IEcp<8E>{1Fq8_~Kh4^E7t6tcz4bBzofi=VVg12(
zi>cVl!v7u0aTtgj{|x<xy2wQ_!Y2X4oc|i{ra6uK|J(Xr8qe+tn5wY&1_scXt)I;u
zfHPfBy=MlRaPj>h74M~99@6+FJqSAMKZ7rVVs?HU{q+t|BAy?{vUqlW_|}ZQ$B^qZ
mehdwr7`J7%cBBh*LrXNE2rwMR`UQZQ)&EMt2jJI>vHmaICNfa~

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/pcf8591.c b/modules/catkin_ws/src/wiringPi/wiringPi/pcf8591.c
new file mode 100644
index 00000000..0c860564
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/pcf8591.c
@@ -0,0 +1,90 @@
+/*
+ * pcf8591.c:
+ *	Extend wiringPi with the PCF8591 I2C GPIO Analog expander chip
+ *	The chip has 1 8-bit DAC and 4 x 8-bit ADCs
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <unistd.h>
+
+#include "wiringPi.h"
+#include "wiringPiI2C.h"
+
+#include "pcf8591.h"
+
+
+/*
+ * myAnalogWrite:
+ *********************************************************************************
+ */
+
+static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  unsigned char b [2] ;
+  b [0] = 0x40 ;
+  b [1] = value & 0xFF ;
+  write (node->fd, b, 2) ;
+}
+
+
+/*
+ * myAnalogRead:
+ *********************************************************************************
+ */
+
+static int myAnalogRead (struct wiringPiNodeStruct *node, int pin)
+{
+  int x ;
+
+  wiringPiI2CWrite (node->fd, 0x40 | ((pin - node->pinBase) & 3)) ;
+
+  x = wiringPiI2CRead (node->fd) ;	// Throw away the first read
+  x = wiringPiI2CRead (node->fd) ;
+
+  return x ;
+}
+
+
+/*
+ * pcf8591Setup:
+ *	Create a new instance of a PCF8591 I2C GPIO interface. We know it
+ *	has 4 pins, (4 analog inputs and 1 analog output which we'll shadow
+ *	input 0) so all we need to know here is the I2C address and the
+ *	user-defined pin base.
+ *********************************************************************************
+ */
+
+int pcf8591Setup (const int pinBase, const int i2cAddress)
+{
+  int fd ;
+  struct wiringPiNodeStruct *node ;
+
+  if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
+    return fd ;
+
+  node = wiringPiNewNode (pinBase, 4) ;
+
+  node->fd          = fd ;
+  node->analogRead  = myAnalogRead ;
+  node->analogWrite = myAnalogWrite ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/pcf8591.h b/modules/catkin_ws/src/wiringPi/wiringPi/pcf8591.h
new file mode 100644
index 00000000..6b44ccf9
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/pcf8591.h
@@ -0,0 +1,33 @@
+/*
+ * pcf8591.h:
+ *	Extend wiringPi with the PCF8591 I2C GPIO Analog expander chip
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int pcf8591Setup (const int pinBase, const int i2cAddress) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/pcf8591.o b/modules/catkin_ws/src/wiringPi/wiringPi/pcf8591.o
new file mode 100644
index 0000000000000000000000000000000000000000..4db158b8eb13716dd11f97f03004c54782ac3890
GIT binary patch
literal 2240
zcmbW1-%Aux6vxm0FgMfDq+r9Keb6$>Vb|1DB6j^bf~dJlhSW6fj_%_Au-(~QE7I7C
zhDDIxd+EtPA$kbGik_m!pm!+<qNg4z?3|f<b)4OW>cE|I?&o~(?|Wx;aCFG&Z~!+4
zT!#G`rvPhJ`*F|+gHQ)GAQirPi>sa|Q_T)Z-+Af8R8%UuTUs%Y^nqqiVC${BIry2H
zNJXqir3+>@S0xo*d$*0uyjXwgAxR*7?xLjs#2yPfuEKk>UGc8RP@$jwLZXd*{d8FW
zt^dGTn36|Z`gZ=zD>sVtZ|0!u$2WI(cct~ZE9mqYPvDcJPe_t3P2l(*{p0NQZ5ZzF
z@Ab7#&*f5D&eth+i2k;&oKXwh4|IwC4zcH~$$jnqK$pME-$V02J7zj?+?fPNzQNH{
zTkYAv4fG;E$#O&F2L#`}8o?7fV&=M8u7!L^Xec;k!GmElmMLOrgY?1NV`oV47F?3x
zyDfP8g@%x!q-3el*}38SZfOR<RrX|wyUNLt(ms}&3oMs`rEyu{wDfPR8QBTOCz#Gy
zFN<AJ&7y<O1+){T=7K{d@HCQ!5(;ps0`IH9!xeb60@si?;(FK6lNo1){sES9^Lbi<
z!%}3vyR#=CMj*KoN-2r-!qrS%Q}=3<suBfxcyzokG%Ak|4TT4%<f%~K=%5VChESHX
zni5%*Be6w!UWq4QIi8897AE2&?fqs~7GU(oh77A(Zpo@X2*%Xqv2;|$d6Tu8&bSe^
z82`e@L`M5bMmMDn3+Fd6CL=Cj;XFnVjd(p4&Wi-mh#$qm`7?rO#2c}2ev2TQy&s=J
z=`NauRgL>VG3Wd~&M*PzYpf1pb|tAPbLh2<>0>;~s0l^X)Vu~_RM8X==dxKafS5}q
z;)`lx1;j`?nN(9KNu@Pa93Go)GmZ&FqqQ27=QB!@?=Bzo-@Ol;(3`ivj36?yH>TVB
z+V5r)W@rzCdkQmXC5X0ZI-vJW<M5YB|2Hyvf5h#7kSc;@%#P2ahWh;9_5o~5ecIRm
zx8ny{dp~-s@%Eioh%ui(_ahc&mG*Lh6_(N7V2tjc)q<>j-U>11`_J(;49cC~2X=lE
z6VmxnTi%|ZAH6mE-cu8A6@39>rrZ14mqm5^+)4a`3EweK{|r6{%JcCLV_a_hH3pxP
J*kbna{{Rmr11<mn

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/piHiPri.c b/modules/catkin_ws/src/wiringPi/wiringPi/piHiPri.c
new file mode 100644
index 00000000..d2f3b4e9
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/piHiPri.c
@@ -0,0 +1,51 @@
+/*
+ * piHiPri:
+ *	Simple way to get your program running at high priority
+ *	with realtime schedulling.
+ *
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <sched.h>
+#include <string.h>
+
+#include "wiringPi.h"
+
+
+/*
+ * piHiPri:
+ *	Attempt to set a high priority schedulling for the running program
+ *********************************************************************************
+ */
+
+int piHiPri (const int pri)
+{
+  struct sched_param sched ;
+
+  memset (&sched, 0, sizeof(sched)) ;
+
+  if (pri > sched_get_priority_max (SCHED_RR))
+    sched.sched_priority = sched_get_priority_max (SCHED_RR) ;
+  else
+    sched.sched_priority = pri ;
+
+  return sched_setscheduler (0, SCHED_RR, &sched) ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/piHiPri.o b/modules/catkin_ws/src/wiringPi/wiringPi/piHiPri.o
new file mode 100644
index 0000000000000000000000000000000000000000..15cfa994b10b34524c1dc75a381724f3a3d0852b
GIT binary patch
literal 1792
zcmbW0&1(};5WpuN+E~*VKMqO@?jcGF?IY1P&>m#dnq<Xbi)}#>TsO(qEcs~J-9Rd$
zhnzw${vrMiT2RnG!J~RA=*6=_oq79SyKXiho$@*}znOU-vy<1QYB?H-fRqT_ffG+s
zfP>hHt#VU^DVT(f;qUiR^tHjybVJ*Z-^h|Pyqihn4?e{+lzB-1mcG248_s0%N80fF
zJ1XE*+plI44efT4m-Vh`gOBMaA1+*1fp5xlhVjgg&)kB_>guwR-KzDvZckZc3oJKZ
z=y5OqDqmo^1-3NnaphJnU&s}5OLR8L6;DCr#Y2en(~;@qMB)uTlx{d9Vr|mJRC*A-
zpHiab$yB<SN|ervXt<(Y#o^acSTq*eNq`vsg-Hx|3X>R|3B$O{#2B6!!_SUzdfg@8
zJ$Vn1UB;Cj$p)Am!__f-V+@B~OS9H(i`AtCdZoIyQmpE0<?=>pQ{ODER7*NI^`_a-
zpPR0}Yg;?E<?iVnqc5;yx;)-%n>OgW;~MprUT?PaZNu_j!Y2^#K%J$x{yFkw8Eq2c
zNnDaYC5RHtZ+e*XDYRw2A~=mStz%)%UdJ_Rz#P~1bW>Wk**2JK_FZ5N!!>}_90xdH
zy>8oTne9Db^_@<~>|#oH$2D2y!PY!~9WY*PHuY`W=$OaHoz_sWkY+eI87eXoIS-yU
zIup|vpkApmLFlid8P9}Iy{B{JWL_2grr^O}#9I*$D%!&@bLh~Xr>)OpZP@$&_k2~<
z=TQ4a)-U=Y+VcKV-}5nl>NmgRvt^w`G_S<|nLYFmMS?1{RI>lle~d=h_fthf<#(d*
zN42tE@{7oVy+;I(1Z<Myli>Zs?oR1hk+?2&64^Oi!SjiQo!=J?X<*zh!SnwDm1?RT

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/piThread.c b/modules/catkin_ws/src/wiringPi/wiringPi/piThread.c
new file mode 100644
index 00000000..b0499be4
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/piThread.c
@@ -0,0 +1,63 @@
+/*
+ * piThread.c:
+ *	Provide a simplified interface to pthreads
+ *
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <pthread.h>
+#include "wiringPi.h"
+
+static pthread_mutex_t piMutexes [4] ;
+
+
+
+/*
+ * piThreadCreate:
+ *	Create and start a thread
+ *********************************************************************************
+ */
+
+int piThreadCreate (void *(*fn)(void *))
+{
+  pthread_t myThread ;
+
+  return pthread_create (&myThread, NULL, fn, NULL) ;
+}
+
+/*
+ * piLock: piUnlock:
+ *	Activate/Deactivate a mutex.
+ *	We're keeping things simple here and only tracking 4 mutexes which
+ *	is more than enough for out entry-level pthread programming
+ *********************************************************************************
+ */
+
+void piLock (int key)
+{
+  pthread_mutex_lock (&piMutexes [key]) ;
+}
+
+void piUnlock (int key)
+{
+  pthread_mutex_unlock (&piMutexes [key]) ;
+}
+
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/piThread.o b/modules/catkin_ws/src/wiringPi/wiringPi/piThread.o
new file mode 100644
index 0000000000000000000000000000000000000000..ab3aaf50b793ce169fc02b6124f8032089b3d19a
GIT binary patch
literal 2080
zcmbVM&rcIk5T0d0Dgs4Almruc0E3Bab`=^?H04)WO%)@MXiQwT?KW-t1JdqB@PG%r
z5JE!YKfs^h&7)29;>|z7o0@p>pfSb-XWqWoK3|rL)9ijT-+VJ~JMZnjSj?n5G!2Al
za2wi@U;#dLw*3@yQ_u%JVDEk#viE*lAFQAD-sil%-#IppX?t&BG-frwkka1IjK=cz
zwO*D9y6oNeL+@B7J_2^`*goiDvV+05_QA}@uM`yGBQFV0%Cj81EzQs0NQ|##gPI>C
zri@9$oJa;NvUaSbVNM#;mqR{r)wGgk(wwHcLEb@o{t&dS0d2UqJ9dbFd<glAJa>z5
zp+C{+>5t8x0T{sWI?r9;NPRL2$HPdV*>=MB<EW$_Ie7pbe^I7mrzq2b4fLN>FGiZA
zKa#RKbW2g&)gjgnBu|G^QWU!95za}^&t`|*7+y3t)ovmY#os-Fe}X*qPa%?t`Df9O
z>JuPO`gKGyq2ED2N)MZ*)neUq^F|Kcdx7t5d5so1j~U+sXDPEhH=A*m)9IDPRcCc}
zF0<&srq2qU92Yqa-_4bsT(RsF+)@RbWHxf;maIy>oeHB$YqikfEy7$7lI*!h*qzP{
z0PW$Q<Ivb4#+dj%iBF?X)`1u0guXx|n#!+)G}Fe>7y5?8pOyFo=cx}}!e+Q5_!N&H
zDEvB)!Dwt(eK(8f*F!7{ukKY`1Bc{;k#~I;jBKL;j4*ICrLtGq1|zpot$H<-)HZz2
zSh~M9!Nv{-tM-acq3%{avD$xQ0xRjARZn~hIkIOVwC?KJ8paImL#m|+og@BAA95Z)
zFKiw0#?g0(>=ItIzWN1tL&*put!!5?pq^@dlZ%cx3P=ctqlFmt|C@?VgzEY!Ob}-Z
z0mmlCDTNpH0`Fj6__Fke97w*Zeah?Qvr6(`yk?!F05N|NKSn2N|4bs$>=1zVk7`A|
y*gtxA)Y((X7OyW-Aes976sylp@<&|wnj?K1dhk-$KaE_}`Y}$v!n|zi`hNl6aM!5-

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/sn3218.c b/modules/catkin_ws/src/wiringPi/wiringPi/sn3218.c
new file mode 100644
index 00000000..7ceb156b
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <wiringPiI2C.h>
+
+#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/modules/catkin_ws/src/wiringPi/wiringPi/sn3218.h b/modules/catkin_ws/src/wiringPi/wiringPi/sn3218.h
new file mode 100644
index 00000000..580d5f96
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int sn3218Setup (int pinBase) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/sn3218.o b/modules/catkin_ws/src/wiringPi/wiringPi/sn3218.o
new file mode 100644
index 0000000000000000000000000000000000000000..a2c6d32712410e33e2ca161db6ed802beab9d138
GIT binary patch
literal 2080
zcmbW1&rcIU6vtn?C>5ct_#-43X*?K=GU+1JVhpx4K#2_y3jPRcDP^Gz{XyDoC>-=q
zG1;hzi5GAF7aoW~6O7(Dk$AwPCML#<Cro{BJ5!eJHZgpg*?I3X@6GS&li|pS-DU$J
z8w|pMCn&(TrUN^mn*nHp7KmQC?s~WLJmx5WwrP9csYTn9cec)<G5dpDS62WQnXBt5
zIWQB|{(hK7BV7LJ(8D)AYTKpdO&V1GqkZ9BY~DhD>ok52fiq@s_5kov_4uuJ<k~OY
z4!>->Q>j$6dk*<)SPM^v%by(D?(D;D7!8GPc)Dlii&?ek>1Tb++v6+hp8Qz$F>fCm
zxLoC)Ua#!)`n&_!tuC4f$+kWPwvyY{+1l)Qg=^?Qc3y7*xJY%-=`PzJI2~wqWAPJ1
zy`T@aJ+lX$9cAgZ(_>$Ec7&YnpdL!CmZEKHg5MRZM#=Kz03`fbNy472B*C#d+=9ez
z=wDwOkCLFdE}nn{wCZ|EaJ&xEzPalt0BgWQ$lGx~UY?`xC)yJY;^!K0C}gko%6^uB
z%vvxTPv@5I=2NNyvC+uHP%sjk7#WEUPsgT%Ly_Satfum*?9yavtT&{GO({!$-a}MT
ziz~)}!(d!l9nUQ&;KF&3Xy;F2*~gnn8YGA!-iAf+DS{|-e4>i$xY~ekG~llr@V5r;
zL|e?~f`J?7@8R5zH5H+o+z?!x7qG%wMvc#7t>&wBQdoH<9cQXiQh_bR)i|*ELIHHZ
zirI8(SxK(}OXM;cC5s{1oT{+V@tK~28c!?()3cRiY%w3tC}J8%u05DZZ_a#U1IS44
zt5xl5zQdi^LT4AKMO2Ly{v>xfr@f?c#EYT#K)Qs5xcLR|Q=^3_)~KuKP@hN5moe9B
z{r@|DfallF9et9>@2|SGub986$FN1%wIDQPD`*k>h%@7zq<;K7e~ui3#QqC(9}TPX
z3ll_%b<z1zuE-bXcM6$#?-4<X=O@WA$h<7_&2y*lH#{)O>sDm+A8j801Tw4f1zf>)
Iqs-&~1Jir?X8-^I

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/softPwm.c b/modules/catkin_ws/src/wiringPi/wiringPi/softPwm.c
new file mode 100644
index 00000000..3c79ba7b
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/softPwm.c
@@ -0,0 +1,167 @@
+/*
+ * softPwm.c:
+ *	Provide 2 channels of software driven PWM.
+ *	Copyright (c) 2012-2014 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <pthread.h>
+
+#include "wiringPi.h"
+#include "softPwm.h"
+
+// MAX_PINS:
+//	This is more than the number of Pi pins because we can actually softPwm
+//	pins that are on GPIO expanders. It's not that efficient and more than 1 or
+//	2 pins on e.g. (SPI) mcp23s17 won't really be that effective, however...
+
+#define	MAX_PINS	1024
+
+// The PWM Frequency is derived from the "pulse time" below. Essentially,
+//	the frequency is a function of the range and this pulse time.
+//	The total period will be range * pulse time in µS, so a pulse time
+//	of 100 and a range of 100 gives a period of 100 * 100 = 10,000 µS
+//	which is a frequency of 100Hz.
+//
+//	It's possible to get a higher frequency by lowering the pulse time,
+//	however CPU uage will skyrocket as wiringPi uses a hard-loop to time
+//	periods under 100µS - this is because the Linux timer calls are just
+//	accurate at all, and have an overhead.
+//
+//	Another way to increase the frequency is to reduce the range - however
+//	that reduces the overall output accuracy...
+
+#define	PULSE_TIME	100
+
+static int marks         [MAX_PINS] ;
+static int range         [MAX_PINS] ;
+static pthread_t threads [MAX_PINS] ;
+
+int newPin = -1 ;
+
+
+/*
+ * softPwmThread:
+ *	Thread to do the actual PWM output
+ *********************************************************************************
+ */
+
+static PI_THREAD (softPwmThread)
+{
+  int pin, mark, space ;
+  struct sched_param param ;
+
+  param.sched_priority = sched_get_priority_max (SCHED_RR) ;
+  pthread_setschedparam (pthread_self (), SCHED_RR, &param) ;
+
+  pin    = newPin ;
+  newPin = -1 ;
+
+  piHiPri (90) ;
+
+  for (;;)
+  {
+    mark  = marks [pin] ;
+    space = range [pin] - mark ;
+
+    if (mark != 0)
+      digitalWrite (pin, HIGH) ;
+    delayMicroseconds (mark * 100) ;
+
+    if (space != 0)
+      digitalWrite (pin, LOW) ;
+    delayMicroseconds (space * 100) ;
+  }
+
+  return NULL ;
+}
+
+
+/*
+ * softPwmWrite:
+ *	Write a PWM value to the given pin
+ *********************************************************************************
+ */
+
+void softPwmWrite (int pin, int value)
+{
+  pin &= (MAX_PINS - 1) ;
+
+  /**/ if (value < 0)
+    value = 0 ;
+  else if (value > range [pin])
+    value = range [pin] ;
+
+  marks [pin] = value ;
+}
+
+
+/*
+ * softPwmCreate:
+ *	Create a new softPWM thread.
+ *********************************************************************************
+ */
+
+int softPwmCreate (int pin, int initialValue, int pwmRange)
+{
+  int res ;
+  pthread_t myThread ;
+
+  if (range [pin] != 0)	// Already running on this pin
+    return -1 ;
+
+  if (range <= 0)
+    return -1 ;
+
+  pinMode      (pin, OUTPUT) ;
+  digitalWrite (pin, LOW) ;
+
+  marks [pin] = initialValue ;
+  range [pin] = pwmRange ;
+
+  newPin = pin ;
+  res    = pthread_create (&myThread, NULL, softPwmThread, NULL) ;
+
+  while (newPin != -1)
+    delay (1) ;
+
+  threads [pin] = myThread ;
+
+  return res ;
+}
+
+
+/*
+ * softPwmStop:
+ *	Stop an existing softPWM thread
+ *********************************************************************************
+ */
+
+void softPwmStop (int pin)
+{
+  if (range [pin] != 0)
+  {
+    pthread_cancel (threads [pin]) ;
+    pthread_join   (threads [pin], NULL) ;
+    range [pin] = 0 ;
+    digitalWrite (pin, LOW) ;
+  }
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/softPwm.h b/modules/catkin_ws/src/wiringPi/wiringPi/softPwm.h
new file mode 100644
index 00000000..0351da5d
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/softPwm.h
@@ -0,0 +1,35 @@
+/*
+ * softPwm.h:
+ *	Provide 2 channels of software driven PWM.
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int  softPwmCreate (int pin, int value, int range) ;
+extern void softPwmWrite  (int pin, int value) ;
+extern void softPwmStop   (int pin) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/softPwm.o b/modules/catkin_ws/src/wiringPi/wiringPi/softPwm.o
new file mode 100644
index 0000000000000000000000000000000000000000..f461408e648898946498f0eaf4c0523e9488d203
GIT binary patch
literal 3704
zcmbW4O>7fK6oALE18#s#fFNk0%1R9=w6L{lh=59!*AB@NOi7yr)E00TdmS79%3h14
z>aWrutsGNM6^9BT(V|M_)Kg9n2@36@RSrdJRUuG&Fja~QYLyGL?t8N{@nmIR`jXw5
z_sx56-n^OJO+MHk9%ym72p1Q5h14}p3E8u%-Ve}jfUF^HL_Mk=xz++e9aBfcmEAZr
zHWIGv#Ev%g$EKK8_H6Az#p>_&`seQBfaU3?t!Djt6`eKfmaUgtaroMsa0^G}Tcid;
zM-Exlg^lf9B=t{>>eIiJe5uEFKUCgvIaEIO1=+qZ{lL6)74z@6Y`?m_IqzTObm2yO
z*T*;$`KVfR6EeLxu}!PcxwUAm?3vwrv;FWxMy%f1>v3++n12!Ma6mnR3m*$dt0P+F
zS&Rsa?r<(TSoU0+o@<}}6vkBx(x}oTRqHlg3?^2ky#Z^-C9Q17Vfj=xod360^M40Z
zTGauo_hP^G9JQT#xn_N1Zh+MKp=7vdj!TcUa%VS7b;#<xXWiGz;cjnCducV@i_%7I
z>PE*~$JJx%arMM?sOv0Ndf{gpA$~5d@b%i;x)m2THljuUgw=V~vggY5T&WXcc<mVV
z`mmk19v>*b`@l|!_WX-9w0g^P1!JMBb=P+GFaC~*(9O1c!hJ9l+9&snoh)U|lDu2#
zReU@9N>uZ|@9$H5y~^J0HkWt#{C&PY-(K|YWFcJdyiQyb9j?u*S9;GujeNkju(4Te
zgHp#QEkSA1S@)nMS3E(fXQow?d}mgu(w?c62c=;`I=~DXDgmL5vHp+PLY%W0r{WGu
z@{C87dd{@=OTMWU2c<yE<u=I&M3rQ)0L!4{?O#PSaQl+QIK^UAFvg5qljJiPW2$vf
z@`c-|tIA!6R;8q#kR&ew7Nb#v$HGG%)f$bt8$RiTxZ$UfxFJ#_aTEIFEE~etMT-!h
z)*9H;aJeuJZUhPz7o-a=%4O6*7{`-GIfZbOc?a`cSyzOfn|KAS-gT1|b%pitJ;kP4
zHWq5a@y*o8e!K~P5BOT4p1gt|H?f~-!Y?%8UjbhS6`F$<B|z_lV7-y!FA6=Q(B6cr
zQT{(P;dh$w-<t5hf#baQ*u3;y1H(KT&D-9DlVUDz4xi2_QQjL(6bwB^GI}9ZBn3S?
zZV;2AB8d!!4+qt7<nX}2$o|pDs2U9KkC0+CVZ<Wih8f8hlDR_CoQ!1j36i(HB1Iz|
z7Zj74=k<b~Az9<}a578sNi8{CNRpV5)+Y}oqlH}2h~~1fB8er(lct_N3PBB?-!dfx
zxx!FBnLU(?LCfZh+L#6;kx0?hqp3(Vk&49iWSR#WF?0F4hn|fZ=_U144)Q|bwZyL{
zo~b7<BDJ3{Y?nAbSRlLXhT2Nde}eCOkbMGg7x<9CaV~EE8spDHyH?;a#xa+50yhP|
zUf>@#;hzb-Q?UPB;9{Jw1uoiu&$zP=cb%No?XM<WV&~WyM`aw>yAdv4pMwGy^Etw}
zvu?+o@mW5ng*cmp_-6%<?@~VR1!o+4du#K8{WF4n)oIVp$$DHU$kKXQoG!+3z4-m)
z^S&T({IiAg0fCEkkiiB8hnWf0N9n!J=a`;waQ;4{e?`C;kHg<LL@7>YO#LLZX2EU~
zyjOtdSTT(WlPEFW)QNJkSR@oErEEHxGSZVoiRLmHBMT<koM|Y7ua51cPbpETw~>g%
z;SFK1tp0x^gDY-<^NSP!hB71;2Xy|t(?Pgxh70#10GBAU?2|al{P8=C^YAYso+XrR
za3Obo>1UW9#umk??|?y!>GZ$I^A3pKgviTP;s?Fa`j`A2_Gl|g02E|C5kjB)(|<&S
zG49XX12D$>f*HBZ^A}+Q+Y^jA&3|Ixp~IiopW`>6(`f(lZMMbR%n<hveYrp1KYaH(
vYmYAT%s+vOAkMX-?#vy{zhyz^+2CqmYv6Lu{}ixB^Pgu2dW&O1hf4kf><nBf

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/softServo.c b/modules/catkin_ws/src/wiringPi/wiringPi/softServo.c
new file mode 100644
index 00000000..9de9f4fa
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/softServo.c
@@ -0,0 +1,211 @@
+/*
+ * softServo.c:
+ *	Provide N channels of software driven PWM suitable for RC
+ *	servo motors.
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+//#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <sys/time.h>
+#include <pthread.h>
+
+#include "wiringPi.h"
+#include "softServo.h"
+
+// RC Servo motors are a bit of an oddity - designed in the days when 
+//	radio control was experimental and people were tryin to make
+//	things as simple as possible as it was all very expensive...
+//
+// So... To drive an RC Servo motor, you need to send it a modified PWM
+//	signal - it needs anything from 1ms to 2ms - with 1ms meaning
+//	to move the server fully left, and 2ms meaning to move it fully
+//	right. Then you need a long gap before sending the next pulse.
+//	The reason for this is that you send a multiplexed stream of these
+//	pulses up the radio signal into the reciever which de-multiplexes
+//	them into the signals for each individual servo. Typically there
+//	might be 8 channels, so you need at least 8 "slots" of 2mS pulses
+//	meaning the entire frame must fit into a 16mS slot - which would
+//	then be repeated...
+//
+// In practice we have a total slot width of about 20mS - so we're sending 50
+//	updates per second to each servo.
+//
+// In this code, we don't need to be too fussy about the gap as we're not doing
+//	the multipexing, but it does need to be at least 10mS, and preferably 16
+//	from what I've been able to determine.
+
+// WARNING:
+//	This code is really experimental. It was written in response to some people
+//	asking for a servo driver, however while it works, there is too much
+//	jitter to successfully drive a small servo - I have tried it with a micro
+//	servo and it worked, but the servo ran hot due to the jitter in the signal
+//	being sent to it.
+//
+//	If you want servo control for the Pi, then use the servoblaster kernel
+//	module.
+
+#define	MAX_SERVOS	8
+
+static int pinMap     [MAX_SERVOS] ;	// Keep track of our pins
+static int pulseWidth [MAX_SERVOS] ;	// microseconds
+
+
+/*
+ * softServoThread:
+ *	Thread to do the actual Servo PWM output
+ *********************************************************************************
+ */
+
+static PI_THREAD (softServoThread)
+{
+  register int i, j, k, m, tmp ;
+  int lastDelay, pin, servo ;
+
+  int myDelays [MAX_SERVOS] ;
+  int myPins   [MAX_SERVOS] ;
+
+  struct timeval  tNow, tStart, tPeriod, tGap, tTotal ;
+  struct timespec tNs ;
+
+  tTotal.tv_sec  =    0 ;
+  tTotal.tv_usec = 8000 ;
+
+  piHiPri (50) ;
+
+  for (;;)
+  {
+    gettimeofday (&tStart, NULL) ;
+
+    memcpy (myDelays, pulseWidth, sizeof (myDelays)) ;
+    memcpy (myPins,   pinMap,     sizeof (myPins)) ;
+
+// Sort the delays (& pins), shortest first
+
+    for (m = MAX_SERVOS / 2 ; m > 0 ; m /= 2 )
+      for (j = m ; j < MAX_SERVOS ; ++j)
+	for (i = j - m ; i >= 0 ; i -= m)
+	{
+	  k = i + m ;
+	  if (myDelays [k] >= myDelays [i])
+	    break ;
+	  else // Swap
+	  {
+	    tmp = myDelays [i] ; myDelays [i] = myDelays [k] ; myDelays [k] = tmp ;
+	    tmp = myPins   [i] ; myPins   [i] = myPins   [k] ; myPins   [k] = tmp ;
+	  }
+	}
+
+// All on
+
+    lastDelay = 0 ;
+    for (servo = 0 ; servo < MAX_SERVOS ; ++servo)
+    {
+      if ((pin = myPins [servo]) == -1)
+	continue ;
+
+      digitalWrite (pin, HIGH) ;
+      myDelays [servo] = myDelays [servo] - lastDelay ;
+      lastDelay += myDelays [servo] ;
+    }
+
+// Now loop, turning them all off as required
+
+    for (servo = 0 ; servo < MAX_SERVOS ; ++servo)
+    {
+      if ((pin = myPins [servo]) == -1)
+	continue ;
+
+      delayMicroseconds (myDelays [servo]) ;
+      digitalWrite (pin, LOW) ;
+    }
+
+// Wait until the end of an 8mS time-slot
+
+    gettimeofday (&tNow, NULL) ;
+    timersub (&tNow, &tStart, &tPeriod) ;
+    timersub (&tTotal, &tPeriod, &tGap) ;
+    tNs.tv_sec  = tGap.tv_sec ;
+    tNs.tv_nsec = tGap.tv_usec * 1000 ;
+    nanosleep (&tNs, NULL) ;
+  }
+
+  return NULL ;
+}
+
+
+/*
+ * softServoWrite:
+ *	Write a Servo value to the given pin
+ *********************************************************************************
+ */
+
+void softServoWrite (int servoPin, int value)
+{
+  int servo ;
+
+  servoPin &= 63 ;
+
+  /**/ if (value < -250)
+    value = -250 ;
+  else if (value > 1250)
+    value = 1250 ;
+
+  for (servo = 0 ; servo < MAX_SERVOS ; ++servo)
+    if (pinMap [servo] == servoPin)
+      pulseWidth [servo] = value + 1000 ; // uS
+}
+
+
+/*
+ * softServoSetup:
+ *	Setup the software servo system
+ *********************************************************************************
+ */
+
+int softServoSetup (int p0, int p1, int p2, int p3, int p4, int p5, int p6, int p7)
+{
+  int servo ;
+
+  if (p0 != -1) { pinMode (p0, OUTPUT) ; digitalWrite (p0, LOW) ; }
+  if (p1 != -1) { pinMode (p1, OUTPUT) ; digitalWrite (p1, LOW) ; }
+  if (p2 != -1) { pinMode (p2, OUTPUT) ; digitalWrite (p2, LOW) ; }
+  if (p3 != -1) { pinMode (p3, OUTPUT) ; digitalWrite (p3, LOW) ; }
+  if (p4 != -1) { pinMode (p4, OUTPUT) ; digitalWrite (p4, LOW) ; }
+  if (p5 != -1) { pinMode (p5, OUTPUT) ; digitalWrite (p5, LOW) ; }
+  if (p6 != -1) { pinMode (p6, OUTPUT) ; digitalWrite (p6, LOW) ; }
+  if (p7 != -1) { pinMode (p7, OUTPUT) ; digitalWrite (p7, LOW) ; }
+
+  pinMap [0] = p0 ;
+  pinMap [1] = p1 ;
+  pinMap [2] = p2 ;
+  pinMap [3] = p3 ;
+  pinMap [4] = p4 ;
+  pinMap [5] = p5 ;
+  pinMap [6] = p6 ;
+  pinMap [7] = p7 ;
+
+  for (servo = 0 ; servo < MAX_SERVOS ; ++servo)
+    pulseWidth [servo] = 1500 ;		// Mid point
+  
+  return piThreadCreate (softServoThread) ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/softServo.h b/modules/catkin_ws/src/wiringPi/wiringPi/softServo.h
new file mode 100644
index 00000000..794cf552
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/softServo.h
@@ -0,0 +1,35 @@
+/*
+ * softServo.h:
+ *	Provide N channels of software driven PWM suitable for RC
+ *	servo motors.
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void softServoWrite  (int pin, int value) ;
+extern int softServoSetup   (int p0, int p1, int p2, int p3, int p4, int p5, int p6, int p7) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/softTone.c b/modules/catkin_ws/src/wiringPi/wiringPi/softTone.c
new file mode 100644
index 00000000..e2fb7371
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/softTone.c
@@ -0,0 +1,150 @@
+/*
+ * softTone.c:
+ *	For that authentic retro sound...
+ *	Er... A little experiment to produce tones out of a Pi using
+ *	one (or 2) GPIO pins and a piezeo "speaker" element.
+ *	(Or a high impedance speaker, but don'y blame me if you blow-up
+ *	the GPIO pins!)
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <pthread.h>
+
+#include "wiringPi.h"
+#include "softTone.h"
+
+#define	MAX_PINS	64
+
+#define	PULSE_TIME	100
+
+static int freqs         [MAX_PINS] ;
+static pthread_t threads [MAX_PINS] ;
+
+static int newPin = -1 ;
+
+
+/*
+ * softToneThread:
+ *	Thread to do the actual PWM output
+ *********************************************************************************
+ */
+
+static PI_THREAD (softToneThread)
+{
+  int pin, freq, halfPeriod ;
+  struct sched_param param ;
+
+  param.sched_priority = sched_get_priority_max (SCHED_RR) ;
+  pthread_setschedparam (pthread_self (), SCHED_RR, &param) ;
+
+  pin    = newPin ;
+  newPin = -1 ;
+
+  piHiPri (50) ;
+
+  for (;;)
+  {
+    freq = freqs [pin] ;
+    if (freq == 0)
+      delay (1) ;
+    else
+    {
+      halfPeriod = 500000 / freq ;
+
+      digitalWrite (pin, HIGH) ;
+      delayMicroseconds (halfPeriod) ;
+
+      digitalWrite (pin, LOW) ;
+      delayMicroseconds (halfPeriod) ;
+    }
+  }
+
+  return NULL ;
+}
+
+
+/*
+ * softToneWrite:
+ *	Write a frequency value to the given pin
+ *********************************************************************************
+ */
+
+void softToneWrite (int pin, int freq)
+{
+  pin &= 63 ;
+
+  /**/ if (freq < 0)
+    freq = 0 ;
+  else if (freq > 5000)	// Max 5KHz
+    freq = 5000 ;
+
+  freqs [pin] = freq ;
+}
+
+
+/*
+ * softToneCreate:
+ *	Create a new tone thread.
+ *********************************************************************************
+ */
+
+int softToneCreate (int pin)
+{
+  int res ;
+  pthread_t myThread ;
+
+  pinMode      (pin, OUTPUT) ;
+  digitalWrite (pin, LOW) ;
+
+  if (threads [pin] != 0)
+    return -1 ;
+
+  freqs [pin] = 0 ;
+
+  newPin = pin ;
+  res    = pthread_create (&myThread, NULL, softToneThread, NULL) ;
+
+  while (newPin != -1)
+    delay (1) ;
+
+  threads [pin] = myThread ;
+
+  return res ;
+}
+
+
+/*
+ * softToneStop:
+ *	Stop an existing softTone thread
+ *********************************************************************************
+ */
+
+void softToneStop (int pin)
+{
+  if (threads [pin] != 0)
+  {
+    pthread_cancel (threads [pin]) ;
+    pthread_join   (threads [pin], NULL) ;
+    threads [pin] = 0 ;
+    digitalWrite (pin, LOW) ;
+  }
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/softTone.h b/modules/catkin_ws/src/wiringPi/wiringPi/softTone.h
new file mode 100644
index 00000000..a93c5af3
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/softTone.h
@@ -0,0 +1,39 @@
+/*
+ * softTone.c:
+ *	For that authentic retro sound...
+ *	Er... A little experiment to produce tones out of a Pi using
+ *	one (or 2) GPIO pins and a piezeo "speaker" element.
+ *	(Or a high impedance speaker, but don'y blame me if you blow-up
+ *	the GPIO pins!)
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int  softToneCreate (int pin) ;
+extern void softToneStop   (int pin) ;
+extern void softToneWrite  (int pin, int freq) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/softTone.o b/modules/catkin_ws/src/wiringPi/wiringPi/softTone.o
new file mode 100644
index 0000000000000000000000000000000000000000..5bbf1c7fbb3051776cc147c16ef3962ba19bb443
GIT binary patch
literal 3496
zcmbW4Z%iCT6u{qc*FvFP5UZjz;f&N^Qr5dlF*Q~1fWktrh481w*t$LL_Ig*2JG|SA
zU`(w!Y1mMj#`r<w2kkdwqS2TrMpH;ILH+0lV`5^pNrOfz=m#Xh6yKYjIi|~9VtizF
z=KbcqH#2W$c8^z%hC0h!E)e2^r(jDH6d+!?)ef*`0QNv71WyKs=E@KR2Zus4hp1;D
z_@(!1IcWLiny5DI+24drvpO0p{PVw3zvXFUwPxM8MxL6r$n;R8nY!l=;$v|KH8)Z0
zF6&lx!v#X^)B8T0{4rNMN0VfIHZlLWM#NfSti$^Gt-m*{MQeen){1}4Zd_;8@1Mu2
z8(yPu@apZUy8&kDQQf<mUwV3$=;T_pwyMprNmwnj3o%vL<1)3#$^aiMG_#+~OD@&F
z#wXOBKe7z7w4Pi)kE_kxGk1G))BlZsO|zCPw)REOdlZjNGXEqsH?0Np-s%R}S}*6h
zTbSF%Zp*W5{h&<`HdaKn$M&*Z=XPoNuWFt<9Xw^P9=-3J{|p-|6j>VRneMm=+T?t$
zf|;YGwIQ~nXZq!v!1LC#h;}5_b^jWf{zeKd2fEtZpYS#f4d+s3&U;90QGLy=Ii~r~
z`&(6Ci+cDGn|lxX{H?xL-(m9IOAi#+Oa0&)uW{AyF0Z(PJ9q%uKGp;98P#n{&E>K-
zrEbRErFbuSf=biH9h&0H@9a?m*j<AqgoWf`y8<89XL$P)sxii;vY=9T(cPhV^PYai
zS9YaR@gfN-HEl{ounJnx><#Y2;%)gHBcEfH!nmU<Dw^EBSVf1?1AlH7>vI>qVE}IY
zD<*D?R7~8!4(J_SyHP8X;<FqgtH<J^ICSGkXo4sYVsT01ijkTa7aA(U51Vc%$LDr&
zL&bK8#0@*QaoQu=JEwFaD8^5h;O9#43nlne34XZ*f4c<#0C_EDZXRnAarVBzHt|(P
z0oeJ&_P1Dyt?RoI{Ff5^FXR;eBffv)?9)Lj7GFWTVjQyRm^qkE8ET}^9E@j-a1>%0
z<Ap4wj2HV7DKHt!g5DMCZ3~9<-p<Z}ql5Zjuq|{{hioKnMD??VsgGq6=}f|$&_~1L
zFlKw{StA*f6qA{cg)`w%7)xl0zDxq5Mlw7B(Ztz=8BRWf5eyq0Ped~5tPx44qS?X(
z?S3)ycAPDmk0nya(^0JXpb;DEde#g_M)XL0M303N$wH6;Gd;Ft98N`yWI;Wb#w9bU
zwkvk*=@$IM^Zh92#1!K65=41i;^ZrMm&9ow1V6z!T`Rivf<Nov>vs6fVa{pXyCnPb
z60eo`>k`LrTOs~ciPJk+jQhUCW&4jMF5CaaIn7_rkN7E3;C%iM@cfbOeOSb}4@q1e
zx0Ulk9Ip3BT+Z7`DNdaf|CGaigU=@=*~@t|OW407+21e4|5UPPdEoKCm+a}?E7p5M
z;`E&pd|l#l9=vEnLV2Jfq>ncQpXYki!B@Hdrh|+32dLSJQ8PS@wVAQ&xM*eYZmOm+
zZh{&On_*Cgvsqw3&83ow5hFPPY9u{6YNXI4l{O8v>%>qqyLX^6ZzHb9@VXm(^#5OZ
z(Unr<{E`Hak%;?gYun#>v<I|50b#)FI{qn};>oQ-PUDC#8J#5(dcPBQexZ+WKZ-4j
zQ$K*66w~P+;Qr1IuN(~9ek?`TFZ><$WGhPm6=FUaVq1*Qez{A1!e7+g*eBYO8RY)s
z_|J2Hr};PsU&}$UE%Glgy%&q^-@ChPi!<Di_K$ppzt}%|XF7AwT=@Srai(lNoNFcB
iId`%S@SwB2lYW2g!QvdBrde$Kb^a5s-Z7v<g?|A86heIf

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/sr595.c b/modules/catkin_ws/src/wiringPi/wiringPi/sr595.c
new file mode 100644
index 00000000..87210c28
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/sr595.c
@@ -0,0 +1,109 @@
+/*
+ * sr595.c:
+ *	Extend wiringPi with the 74x595 shift register as a GPIO
+ *	expander chip.
+ *	Note that the code can cope with a number of 595's
+ *	daisy-chained together - up to 4 for now as we're storing
+ *	the output "register" in a single unsigned int.
+ *
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+
+#include "wiringPi.h"
+
+#include "sr595.h"
+
+
+/*
+ * myDigitalWrite:
+ *********************************************************************************
+ */
+
+static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value)
+{
+  unsigned int mask ;
+  int  dataPin, clockPin, latchPin ;
+  int  bit, bits, output ;
+
+  pin     -= node->pinBase ;				// Normalise pin number
+  bits     = node->pinMax - node->pinBase + 1 ;		// ie. number of clock pulses
+  dataPin  = node->data0 ;
+  clockPin = node->data1 ;
+  latchPin = node->data2 ;
+  output   = node->data3 ;
+
+  mask = 1 << pin ;
+
+  if (value == LOW)
+    output &= (~mask) ;
+  else
+    output |=   mask ;
+
+  node->data3 = output ;
+
+// A low -> high latch transition copies the latch to the output pins
+
+  digitalWrite (latchPin, LOW) ; delayMicroseconds (1) ;
+    for (bit = bits - 1 ; bit >= 0 ; --bit)
+    {
+      digitalWrite (dataPin, output & (1 << bit)) ;
+
+      digitalWrite (clockPin, HIGH) ; delayMicroseconds (1) ;
+      digitalWrite (clockPin, LOW) ;  delayMicroseconds (1) ;
+    }
+  digitalWrite (latchPin, HIGH) ; delayMicroseconds (1) ;
+}
+
+
+/*
+ * sr595Setup:
+ *	Create a new instance of a 74x595 shift register GPIO expander.
+ *********************************************************************************
+ */
+
+int sr595Setup (const int pinBase, const int numPins,
+	const int dataPin, const int clockPin, const int latchPin) 
+{
+  struct wiringPiNodeStruct *node ;
+
+  node = wiringPiNewNode (pinBase, numPins) ;
+
+  node->data0           = dataPin ;
+  node->data1           = clockPin ;
+  node->data2           = latchPin ;
+  node->data3           = 0 ;		// Output register
+  node->digitalWrite    = myDigitalWrite ;
+
+// Initialise the underlying hardware
+
+  digitalWrite (dataPin,  LOW) ;
+  digitalWrite (clockPin, LOW) ;
+  digitalWrite (latchPin, HIGH) ;
+
+  pinMode (dataPin,  OUTPUT) ;
+  pinMode (clockPin, OUTPUT) ;
+  pinMode (latchPin, OUTPUT) ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/sr595.h b/modules/catkin_ws/src/wiringPi/wiringPi/sr595.h
new file mode 100644
index 00000000..4a26dc7c
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/sr595.h
@@ -0,0 +1,34 @@
+/*
+ * sr595.h:
+ *	Extend wiringPi with the 74x595 shift registers.
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int sr595Setup (const int pinBase, const int numPins,
+	const int dataPin, const int clockPin, const int latchPin) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/sr595.o b/modules/catkin_ws/src/wiringPi/wiringPi/sr595.o
new file mode 100644
index 0000000000000000000000000000000000000000..c78ae47e4c011e43ccc8f804e6fb4f8cdecbcde7
GIT binary patch
literal 2456
zcmbuAO>7%Q6vv<Kv~i2s8Wbc;MZ!IR5~*EzQ4=K~kjGgkMkHxO5*id*<Je2QN^D2=
zT8TN(N>(aHZfTF4IdkN|r4STLT&NULE(jqwwM8I8FX;g!^WJ(!9<99+f@jUno8SE3
zo7wqTUrW!;1Oow(7J%2G*OC-q^<>Xax^5DlhSR_<v$y$Uw!)TImNL!X!>!>~cF1ha
z#?01Eq*aNUt!pD=UymJpK}qlblICr8s=fDJJ^bX5@pk%L+c-A)M$F`$N0jv|lCit=
zblZDB?q<%sU;^+TO#X+-pWJ`Y{4HRfd*JqdNjiSii*!BXxDPe|>eTPz7;b<o$~4<y
zcd)f9>|J(+U1ix{F&W@{F#i1#zi0A;uJG1#u}-IB^7kUV80D)Y-y~xsH2K2}Uz{|K
zT@^o)&d<FuP||DgBgI!lYsNm#-~eW)r(cPWuB_L~PCY)ZU(^#9ChBg>_|TZp6BqTV
zu`Z9loG>O56NxFB#t1#o0w25uf!%1}Y-Bim2bTqx44!v;01l~6Y0=xklotCqWNPtS
zLn&?a<_V@HZk%M=WOLZmlEKfk$r&xdw9%9nM<E8JwD5ThEr>k3BG1hr(_%L$Pje`^
zsl}#Ur4ad4v{OUyxHG6bH1Na$gzz`WLYQfgh2TUVK7}Nx<agIXs6sH@rza4Cun$)*
zfl$y{hz?NeKKxZ5K9BraoTr?hyVl57ee^{i4z=p|)VQ99Qp2=2Y$vyMxoSHWWM}6t
zrPy5d(#*_KdO5qyQgi7n6jVvU+R8QN?R>RTv+|X4q1Mf{WI6S1*s-g2d1KLDuyz(I
z1q-(A@;udV;ylP`N1np+H{KPpHG*iwBUmJF5JdCp_qw=`-&VMq=M#mi<9@1eRsXrd
zRsBy2*U*>q4AFr_^UgEk!(%@DMTMWid@{e`!(a2^-@3EuU(dMUL9D4rqw_%~xja{(
z*BT`!w~n<_?bb!<Rq+7mj<xH6UdTB)(AR4<aDiSgZ`qsHRs-~WrBt%YC@EJQOP^g>
zxlnU*`AyK>XseigznUvq-NFCIGmf#e6y6(`L`Ieo>(p)a-@&ukL3@{!0#PRkqFop9
zbQZ{!H=gb@*-Kc6d%r**dB!CznHQf&Mmhg$ydiRW-~Zo^pA_*4tW}fo<0?d7&R^DV
zC`^^Qf6XcozKoMySJ5G+o=NK47s5N#P)x4BMDL(8X#e)bCtki6?H|R;c)5SiAoH$0
sBKT9p7pb9`cm9LsPVz<ZLf1tAePd2z@s3abJA=kQ6mT2+Rr8Mj57BIOX#fBK

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringPi.c b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPi.c
new file mode 100755
index 00000000..6d1c1104
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPi.c
@@ -0,0 +1,3152 @@
+/*
+ * wiringPi:
+ *	Arduino compatable (ish) Wiring library for the Raspberry Pi
+ *	Copyright (c) 2012 Gordon Henderson
+ *	Additional code for pwmSetClock by Chris Hall <chris@kchall.plus.com>
+ *
+ *	Thanks to code samples from Gert Jan van Loo and the
+ *	BCM2835 ARM Peripherals manual, however it's missing
+ *	the clock section /grr/mutter/
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+// Revisions:
+//	19 Jul 2012:
+//		Moved to the LGPL
+//		Added an abstraction layer to the main routines to save a tiny
+//		bit of run-time and make the clode a little cleaner (if a little
+//		larger)
+//		Added waitForInterrupt code
+//		Added piHiPri code
+//
+//	 9 Jul 2012:
+//		Added in support to use the /sys/class/gpio interface.
+//	 2 Jul 2012:
+//		Fixed a few more bugs to do with range-checking when in GPIO mode.
+//	11 Jun 2012:
+//		Fixed some typos.
+//		Added c++ support for the .h file
+//		Added a new function to allow for using my "pin" numbers, or native
+//			GPIO pin numbers.
+//		Removed my busy-loop delay and replaced it with a call to delayMicroseconds
+//
+//	02 May 2012:
+//		Added in the 2 UART pins
+//		Change maxPins to numPins to more accurately reflect purpose
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <poll.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <time.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <sys/time.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <sys/ioctl.h>
+#include <sys/utsname.h>
+
+#include "softPwm.h"
+#include "softTone.h"
+
+#include "wiringPi.h"
+
+#ifndef	TRUE
+#define	TRUE	(1==1)
+#define	FALSE	(1==2)
+#endif
+
+#ifndef ARRAY_SIZE
+#define ARRAY_SIZE(x)	(sizeof(x) / sizeof((x)[0]))
+#endif
+
+// Environment Variables
+
+#define	ENV_DEBUG	"WIRINGPI_DEBUG"
+#define	ENV_CODES	"WIRINGPI_CODES"
+
+
+// Mask for the bottom 64 pins which belong to the Raspberry Pi
+//	The others are available for the other devices
+
+#define	PI_GPIO_MASK	(0xFFFFFFC0)
+
+struct wiringPiNodeStruct *wiringPiNodes = NULL ;
+
+// BCM Magic
+
+#define	BCM_PASSWORD		0x5A000000
+
+
+// The BCM2835 has 54 GPIO pins.
+//	BCM2835 data sheet, Page 90 onwards.
+//	There are 6 control registers, each control the functions of a block
+//	of 10 pins.
+//	Each control register has 10 sets of 3 bits per GPIO pin - the ALT values
+//
+//	000 = GPIO Pin X is an input
+//	001 = GPIO Pin X is an output
+//	100 = GPIO Pin X takes alternate function 0
+//	101 = GPIO Pin X takes alternate function 1
+//	110 = GPIO Pin X takes alternate function 2
+//	111 = GPIO Pin X takes alternate function 3
+//	011 = GPIO Pin X takes alternate function 4
+//	010 = GPIO Pin X takes alternate function 5
+//
+// So the 3 bits for port X are:
+//	X / 10 + ((X % 10) * 3)
+
+// Port function select bits
+
+#define	FSEL_INPT		0b000
+#define	FSEL_OUTP		0b001
+#define	FSEL_ALT0		0b100
+#define	FSEL_ALT1		0b101
+#define	FSEL_ALT2		0b110
+#define	FSEL_ALT3		0b111
+#define	FSEL_ALT4		0b011
+#define	FSEL_ALT5		0b010
+
+// Access from ARM Running Linux
+//	Taken from Gert/Doms code. Some of this is not in the manual
+//	that I can find )-:
+
+#define BCM2708_PERI_BASE   0x20000000
+#define GPIO_PADS   (BCM2708_PERI_BASE + 0x00100000)
+#define CLOCK_BASE  (BCM2708_PERI_BASE + 0x00101000)
+#define GPIO_BASE   (BCM2708_PERI_BASE + 0x00200000)
+#define GPIO_TIMER  (BCM2708_PERI_BASE + 0x0000B000)
+#define GPIO_PWM    (BCM2708_PERI_BASE + 0x0020C000)
+
+#define	PAGE_SIZE   (4*1024)
+#define	BLOCK_SIZE  (4*1024)
+
+// PWM
+//	Word offsets into the PWM control region
+
+#define	PWM_CONTROL 0
+#define	PWM_STATUS  1
+#define	PWM0_RANGE  4
+#define	PWM0_DATA   5
+#define	PWM1_RANGE  8
+#define	PWM1_DATA   9
+
+//	Clock regsiter offsets
+
+#define	PWMCLK_CNTL	40
+#define	PWMCLK_DIV	41
+
+#define	PWM0_MS_MODE    0x0080  // Run in MS mode
+#define	PWM0_USEFIFO    0x0020  // Data from FIFO
+#define	PWM0_REVPOLAR   0x0010  // Reverse polarity
+#define	PWM0_OFFSTATE   0x0008  // Ouput Off state
+#define	PWM0_REPEATFF   0x0004  // Repeat last value if FIFO empty
+#define	PWM0_SERIAL     0x0002  // Run in serial mode
+#define	PWM0_ENABLE     0x0001  // Channel Enable
+
+#define	PWM1_MS_MODE    0x8000  // Run in MS mode
+#define	PWM1_USEFIFO    0x2000  // Data from FIFO
+#define	PWM1_REVPOLAR   0x1000  // Reverse polarity
+#define	PWM1_OFFSTATE   0x0800  // Ouput Off state
+#define	PWM1_REPEATFF   0x0400  // Repeat last value if FIFO empty
+#define	PWM1_SERIAL     0x0200  // Run in serial mode
+#define	PWM1_ENABLE     0x0100  // Channel Enable
+
+// Timer
+//	Word offsets
+
+#define	TIMER_LOAD      (0x400 >> 2)
+#define	TIMER_VALUE     (0x404 >> 2)
+#define	TIMER_CONTROL   (0x408 >> 2)
+#define	TIMER_IRQ_CLR   (0x40C >> 2)
+#define	TIMER_IRQ_RAW   (0x410 >> 2)
+#define	TIMER_IRQ_MASK  (0x414 >> 2)
+#define	TIMER_RELOAD    (0x418 >> 2)
+#define	TIMER_PRE_DIV   (0x41C >> 2)
+#define	TIMER_COUNTER   (0x420 >> 2)
+
+// Locals to hold pointers to the hardware
+
+static volatile uint32_t *gpio, *gpio1;
+static volatile uint32_t *pwm ;
+static volatile uint32_t *clk ;
+static volatile uint32_t *pads ;
+
+#ifdef	USE_TIMER
+static volatile uint32_t *timer ;
+static volatile uint32_t *timerIrqRaw ;
+#endif
+
+
+// Data for use with the boardId functions.
+//	The order of entries here to correspond with the PI_MODEL_X
+//	and PI_VERSION_X defines in wiringPi.h
+//	Only intended for the gpio command - use at your own risk!
+
+const char *piModelNames [9] =
+{
+  "Unknown",
+  "Model A",
+  "Model B",
+  "Model B+",
+  "Compute Module",
+  "Model A+",
+  "ODROID-C1/C1+",
+  "ODROID-XU3/4",
+  "ODROID-C2",
+} ;
+
+const char *piRevisionNames [5] =
+{
+  "Unknown",
+  "1",
+  "1.1",
+  "1.2",
+  "2",
+} ;
+
+const char *piMakerNames [5] =
+{
+  "Unknown",
+  "Egoman",
+  "Sony",
+  "Qusda",
+  "Hardkernel",
+} ;
+
+
+// Time for easy calculations
+
+static uint64_t epochMilli, epochMicro ;
+
+// Misc
+
+static int wiringPiMode = WPI_MODE_UNINITIALISED ;
+static volatile int    pinPass = -1 ;
+static pthread_mutex_t pinMutex ;
+
+// Debugging & Return codes
+
+int wiringPiDebug       = FALSE ;
+int wiringPiReturnCodes = FALSE ;
+
+// sysFds:
+//	Map a file descriptor from the /sys/class/gpio/gpioX/value
+
+static int sysFds [64] =
+{
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+} ;
+
+// ISR Data
+
+static void (*isrFunctions [64])(void) ;
+
+
+// Doing it the Arduino way with lookup tables...
+//	Yes, it's probably more innefficient than all the bit-twidling, but it
+//	does tend to make it all a bit clearer. At least to me!
+
+// pinToGpio:
+//	Take a Wiring pin (0 through X) and re-map it to the BCM_GPIO pin
+//	Cope for 3 different board revisions here.
+
+static int *pinToGpio ;
+static int pin_array_count;
+
+// Revision 1, 1.1:
+
+static int pinToGpioR1 [64] =
+{
+  17, 18, 21, 22, 23, 24, 25, 4,	// From the Original Wiki - GPIO 0 through 7:	wpi  0 -  7
+   0,  1,				// I2C  - SDA1, SCL1				wpi  8 -  9
+   8,  7,				// SPI  - CE1, CE0				wpi 10 - 11
+  10,  9, 11, 				// SPI  - MOSI, MISO, SCLK			wpi 12 - 14
+  14, 15,				// UART - Tx, Rx				wpi 15 - 16
+
+// Padding:
+
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 31
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 47
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 63
+} ;
+
+// Revision 2:
+
+static int pinToGpioR2 [64] =
+{
+  17, 18, 27, 22, 23, 24, 25, 4,	// From the Original Wiki - GPIO 0 through 7:	wpi  0 -  7
+   2,  3,				// I2C  - SDA0, SCL0				wpi  8 -  9
+   8,  7,				// SPI  - CE1, CE0				wpi 10 - 11
+  10,  9, 11, 				// SPI  - MOSI, MISO, SCLK			wpi 12 - 14
+  14, 15,				// UART - Tx, Rx				wpi 15 - 16
+  28, 29, 30, 31,			// Rev 2: New GPIOs 8 though 11			wpi 17 - 20
+   5,  6, 13, 19, 26,			// B+						wpi 21, 22, 23, 24, 25
+  12, 16, 20, 21,			// B+						wpi 26, 27, 28, 29
+   0,  1,				// B+						wpi 30, 31
+
+// Padding:
+
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 47
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 63
+} ;
+
+
+// physToGpio:
+//	Take a physical pin (1 through 26) and re-map it to the BCM_GPIO pin
+//	Cope for 2 different board revisions here.
+//	Also add in the P5 connector, so the P5 pins are 3,4,5,6, so 53,54,55,56
+
+static int *physToGpio ;
+
+static int physToGpioR1 [64] =
+{
+  -1,		// 0
+  -1, -1,	// 1, 2
+   0, -1,
+   1, -1,
+   4, 14,
+  -1, 15,
+  17, 18,
+  21, -1,
+  22, 23,
+  -1, 24,
+  10, -1,
+   9, 25,
+  11,  8,
+  -1,  7,	// 25, 26
+
+                                              -1, -1, -1, -1, -1,	// ... 31
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 47
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 63
+} ;
+
+static int physToGpioR2 [64] =
+{
+  -1,		// 0
+  -1, -1,	// 1, 2
+   2, -1,
+   3, -1,
+   4, 14,
+  -1, 15,
+  17, 18,
+  27, -1,
+  22, 23,
+  -1, 24,
+  10, -1,
+   9, 25,
+  11,  8,
+  -1,  7,	// 25, 26
+
+// B+
+
+   0,  1,
+   5, -1,
+   6, 12,
+  13, -1,
+  19, 16,
+  26, 20,
+  -1, 21,
+
+// the P5 connector on the Rev 2 boards:
+
+  -1, -1,
+  -1, -1,
+  -1, -1,
+  -1, -1,
+  -1, -1,
+  28, 29,
+  30, 31,
+  -1, -1,
+  -1, -1,
+  -1, -1,
+  -1, -1,
+} ;
+
+// gpioToGPFSEL:
+//	Map a BCM_GPIO pin to it's Function Selection
+//	control port. (GPFSEL 0-5)
+//	Groups of 10 - 3 bits per Function - 30 bits per port
+
+static uint8_t gpioToGPFSEL [] =
+{
+  0,0,0,0,0,0,0,0,0,0,
+  1,1,1,1,1,1,1,1,1,1,
+  2,2,2,2,2,2,2,2,2,2,
+  3,3,3,3,3,3,3,3,3,3,
+  4,4,4,4,4,4,4,4,4,4,
+  5,5,5,5,5,5,5,5,5,5,
+} ;
+
+
+// gpioToShift
+//	Define the shift up for the 3 bits per pin in each GPFSEL port
+
+static uint8_t gpioToShift [] =
+{
+  0,3,6,9,12,15,18,21,24,27,
+  0,3,6,9,12,15,18,21,24,27,
+  0,3,6,9,12,15,18,21,24,27,
+  0,3,6,9,12,15,18,21,24,27,
+  0,3,6,9,12,15,18,21,24,27,
+} ;
+
+
+// gpioToGPSET:
+//	(Word) offset to the GPIO Set registers for each GPIO pin
+
+static uint8_t gpioToGPSET [] =
+{
+   7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+} ;
+
+// gpioToGPCLR:
+//	(Word) offset to the GPIO Clear registers for each GPIO pin
+
+static uint8_t gpioToGPCLR [] =
+{
+  10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+  11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+} ;
+
+
+// gpioToGPLEV:
+//	(Word) offset to the GPIO Input level registers for each GPIO pin
+
+static uint8_t gpioToGPLEV [] =
+{
+  13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+  14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
+} ;
+
+
+#ifdef notYetReady
+// gpioToEDS
+//	(Word) offset to the Event Detect Status
+
+static uint8_t gpioToEDS [] =
+{
+  16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+  17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+} ;
+
+// gpioToREN
+//	(Word) offset to the Rising edge ENable register
+
+static uint8_t gpioToREN [] =
+{
+  19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+  20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
+} ;
+
+// gpioToFEN
+//	(Word) offset to the Falling edgde ENable register
+
+static uint8_t gpioToFEN [] =
+{
+  22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
+  23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
+} ;
+#endif
+
+
+// GPPUD:
+//	GPIO Pin pull up/down register
+
+#define	GPPUD	37
+
+// gpioToPUDCLK
+//	(Word) offset to the Pull Up Down Clock regsiter
+
+static uint8_t gpioToPUDCLK [] =
+{
+  38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
+  39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
+} ;
+
+
+// gpioToPwmALT
+//	the ALT value to put a GPIO pin into PWM mode
+
+static uint8_t gpioToPwmALT [] =
+{
+          0,         0,         0,         0,         0,         0,         0,         0,	//  0 ->  7
+          0,         0,         0,         0, FSEL_ALT0, FSEL_ALT0,         0,         0, 	//  8 -> 15
+          0,         0, FSEL_ALT5, FSEL_ALT5,         0,         0,         0,         0, 	// 16 -> 23
+          0,         0,         0,         0,         0,         0,         0,         0,	// 24 -> 31
+          0,         0,         0,         0,         0,         0,         0,         0,	// 32 -> 39
+  FSEL_ALT0, FSEL_ALT0,         0,         0,         0, FSEL_ALT0,         0,         0,	// 40 -> 47
+          0,         0,         0,         0,         0,         0,         0,         0,	// 48 -> 55
+          0,         0,         0,         0,         0,         0,         0,         0,	// 56 -> 63
+} ;
+
+
+// gpioToPwmPort
+//	The port value to put a GPIO pin into PWM mode
+
+static uint8_t gpioToPwmPort [] =
+{
+          0,         0,         0,         0,         0,         0,         0,         0,	//  0 ->  7
+          0,         0,         0,         0, PWM0_DATA, PWM1_DATA,         0,         0, 	//  8 -> 15
+          0,         0, PWM0_DATA, PWM1_DATA,         0,         0,         0,         0, 	// 16 -> 23
+          0,         0,         0,         0,         0,         0,         0,         0,	// 24 -> 31
+          0,         0,         0,         0,         0,         0,         0,         0,	// 32 -> 39
+  PWM0_DATA, PWM1_DATA,         0,         0,         0, PWM1_DATA,         0,         0,	// 40 -> 47
+          0,         0,         0,         0,         0,         0,         0,         0,	// 48 -> 55
+          0,         0,         0,         0,         0,         0,         0,         0,	// 56 -> 63
+
+} ;
+
+// gpioToGpClkALT:
+//	ALT value to put a GPIO pin into GP Clock mode.
+//	On the Pi we can really only use BCM_GPIO_4 and BCM_GPIO_21
+//	for clocks 0 and 1 respectively, however I'll include the full
+//	list for completeness - maybe one day...
+
+#define	GPIO_CLOCK_SOURCE	1
+
+// gpioToGpClkALT0:
+
+static uint8_t gpioToGpClkALT0 [] =
+{
+          0,         0,         0,         0, FSEL_ALT0, FSEL_ALT0, FSEL_ALT0,         0,	//  0 ->  7
+          0,         0,         0,         0,         0,         0,         0,         0, 	//  8 -> 15
+          0,         0,         0,         0, FSEL_ALT5, FSEL_ALT5,         0,         0, 	// 16 -> 23
+          0,         0,         0,         0,         0,         0,         0,         0,	// 24 -> 31
+  FSEL_ALT0,         0, FSEL_ALT0,         0,         0,         0,         0,         0,	// 32 -> 39
+          0,         0, FSEL_ALT0, FSEL_ALT0, FSEL_ALT0,         0,         0,         0,	// 40 -> 47
+          0,         0,         0,         0,         0,         0,         0,         0,	// 48 -> 55
+          0,         0,         0,         0,         0,         0,         0,         0,	// 56 -> 63
+} ;
+
+// gpioToClk:
+//	(word) Offsets to the clock Control and Divisor register
+
+static uint8_t gpioToClkCon [] =
+{
+         -1,        -1,        -1,        -1,        28,        30,        32,        -1,	//  0 ->  7
+         -1,        -1,        -1,        -1,        -1,        -1,        -1,        -1, 	//  8 -> 15
+         -1,        -1,        -1,        -1,        28,        30,        -1,        -1, 	// 16 -> 23
+         -1,        -1,        -1,        -1,        -1,        -1,        -1,        -1,	// 24 -> 31
+         28,        -1,        28,        -1,        -1,        -1,        -1,        -1,	// 32 -> 39
+         -1,        -1,        28,        30,        28,        -1,        -1,        -1,	// 40 -> 47
+         -1,        -1,        -1,        -1,        -1,        -1,        -1,        -1,	// 48 -> 55
+         -1,        -1,        -1,        -1,        -1,        -1,        -1,        -1,	// 56 -> 63
+} ;
+
+static uint8_t gpioToClkDiv [] =
+{
+         -1,        -1,        -1,        -1,        29,        31,        33,        -1,	//  0 ->  7
+         -1,        -1,        -1,        -1,        -1,        -1,        -1,        -1, 	//  8 -> 15
+         -1,        -1,        -1,        -1,        29,        31,        -1,        -1, 	// 16 -> 23
+         -1,        -1,        -1,        -1,        -1,        -1,        -1,        -1,	// 24 -> 31
+         29,        -1,        29,        -1,        -1,        -1,        -1,        -1,	// 32 -> 39
+         -1,        -1,        29,        31,        29,        -1,        -1,        -1,	// 40 -> 47
+         -1,        -1,        -1,        -1,        -1,        -1,        -1,        -1,	// 48 -> 55
+         -1,        -1,        -1,        -1,        -1,        -1,        -1,        -1,	// 56 -> 63
+} ;
+
+//
+// For ODROID-C Board
+//
+#define ODROIDC_GPIO_MASK (0xFFFFFF80)
+
+#define ODROIDC_PERI_BASE 0xC1100000
+#define GPIO_REG_OFFSET   0x8000
+#define ODROID_GPIO_BASE  (ODROIDC_PERI_BASE + GPIO_REG_OFFSET)
+
+#define GPIO_PIN_BASE           80
+#define GPIOY_PIN_START         80
+#define GPIOY_PIN_END           96
+#define GPIOX_PIN_START         97
+#define GPIOX_PIN_END           118
+
+#define GPIOX_FSEL_REG_OFFSET   0x0C
+#define GPIOX_OUTP_REG_OFFSET   0x0D
+#define GPIOX_INP_REG_OFFSET    0x0E
+#define GPIOX_PUPD_REG_OFFSET   0x3E
+#define GPIOX_PUEN_REG_OFFSET   0x4C
+
+#define GPIOY_FSEL_REG_OFFSET   0x0F
+#define GPIOY_OUTP_REG_OFFSET   0x10
+#define GPIOY_INP_REG_OFFSET    0x11
+#define GPIOY_PUPD_REG_OFFSET   0x3D
+#define GPIOY_PUEN_REG_OFFSET   0x4B
+
+#define piAinNode0   "/sys/class/saradc/saradc_ch0"
+#define piAinNode1   "/sys/class/saradc/saradc_ch1"
+
+static int adcFds [2] = {
+    -1, -1,
+} ;
+
+//
+// For ODROID-C2 Board
+//
+#define ODROIDC2_GPIO_MASK		(0xFFFFFF00)
+#define ODROIDC2_GPIO_BASE		0xC8834000
+
+#define C2_GPIO_PIN_BASE           136
+#define C2_GPIOY_PIN_START         (C2_GPIO_PIN_BASE + 75)
+#define C2_GPIOY_PIN_END           (C2_GPIO_PIN_BASE + 91)
+#define C2_GPIOX_PIN_START         (C2_GPIO_PIN_BASE + 92)
+#define C2_GPIOX_PIN_END           (C2_GPIO_PIN_BASE + 114)
+
+#define C2_GPIOX_FSEL_REG_OFFSET   0x118
+#define C2_GPIOX_OUTP_REG_OFFSET   0x119
+#define C2_GPIOX_INP_REG_OFFSET    0x11A
+#define C2_GPIOX_PUPD_REG_OFFSET   0x13E
+#define C2_GPIOX_PUEN_REG_OFFSET   0x14C
+
+#define C2_GPIOY_FSEL_REG_OFFSET   0x10F
+#define C2_GPIOY_OUTP_REG_OFFSET   0x110
+#define C2_GPIOY_INP_REG_OFFSET    0x111
+#define C2_GPIOY_PUPD_REG_OFFSET   0x13B
+#define C2_GPIOY_PUEN_REG_OFFSET   0x149
+
+#define C2_piAinNode0   "/sys/class/saradc/ch0"
+#define C2_piAinNode1   "/sys/class/saradc/ch1"
+
+//
+// For ODROID-XU3/4 Board
+//
+#define ODROIDXU_GPIO_MASK  (0xFFFFFF00)
+
+#define ODROIDXU_GPX_BASE   0x13400000  // GPX0,1,2,3
+#define ODROIDXU_GPA_BASE   0x14010000  // GPA0,1,2, GPB0,1,2,3,4
+
+#define GPIO_X1_START       16
+#define GPIO_X1_CON_OFFSET  0x0C20
+#define GPIO_X1_DAT_OFFSET  0x0C24
+#define GPIO_X1_PUD_OFFSET  0x0C28
+#define GPIO_X1_END         23
+
+#define GPIO_X2_START       24
+#define GPIO_X2_CON_OFFSET  0x0C40
+#define GPIO_X2_DAT_OFFSET  0x0C44
+#define GPIO_X2_PUD_OFFSET  0x0C48
+#define GPIO_X2_END         31
+
+#define GPIO_X3_START       32
+#define GPIO_X3_CON_OFFSET  0x0C60
+#define GPIO_X3_DAT_OFFSET  0x0C64
+#define GPIO_X3_PUD_OFFSET  0x0C68
+#define GPIO_X3_END         39
+
+#define GPIO_A0_START       171
+#define GPIO_A0_CON_OFFSET  0x0000
+#define GPIO_A0_DAT_OFFSET  0x0004
+#define GPIO_A0_PUD_OFFSET  0x0008
+#define GPIO_A0_END         178
+
+#define GPIO_A2_START       185
+#define GPIO_A2_CON_OFFSET  0x0040
+#define GPIO_A2_DAT_OFFSET  0x0044
+#define GPIO_A2_PUD_OFFSET  0x0048
+#define GPIO_A2_END         192
+
+#define GPIO_B3_START       207
+#define GPIO_B3_CON_OFFSET  0x00C0
+#define GPIO_B3_DAT_OFFSET  0x00C4
+#define GPIO_B3_PUD_OFFSET  0x00C8
+#define GPIO_B3_END         214
+
+static char *piAinNode0_xu;
+static char *piAinNode1_xu;
+
+static int  piModel = PI_MODEL_UNKNOWN;
+
+static int sysFdData [64] = {
+    -1, -1, -1, -1, -1, -1, -1, -1, // 0...7
+    -1, -1, -1, -1, -1, -1, -1, -1, // 8...15
+    -1, -1, -1, -1, -1, -1, -1, -1, // 16...23
+    -1, -1, -1, -1, -1, -1, -1, -1, // 24...31
+    -1, -1, -1, -1, -1, -1, -1, -1, // 32...39
+    -1, -1, -1, -1, -1, -1, -1, -1, // 40...47
+    -1, -1, -1, -1, -1, -1, -1, -1, // 48...55
+    -1, -1, -1, -1, -1, -1, -1, -1, // 56...63
+};
+
+static int sysFdIrqType [64] = {
+    -1, -1, -1, -1, -1, -1, -1, -1, // 0...7
+    -1, -1, -1, -1, -1, -1, -1, -1, // 8...15
+    -1, -1, -1, -1, -1, -1, -1, -1, // 16...23
+    -1, -1, -1, -1, -1, -1, -1, -1, // 24...31
+    -1, -1, -1, -1, -1, -1, -1, -1, // 32...39
+    -1, -1, -1, -1, -1, -1, -1, -1, // 40...47
+    -1, -1, -1, -1, -1, -1, -1, -1, // 48...55
+    -1, -1, -1, -1, -1, -1, -1, -1, // 56...63
+};
+
+static int gpioToPin(int gpio)
+{
+	int pin;
+
+	if (pinToGpio == NULL) {
+		(void)wiringPiFailure (WPI_FATAL, "%s: wiringPi is not initialized yet\n", __func__);
+		return -1;
+	}
+
+	for (pin = 0; pin < pin_array_count; ++pin) {
+		if (pinToGpio[pin] == gpio)
+			return pin;
+	}
+
+	(void)wiringPiFailure (WPI_FATAL, "%s: could not find the pin of %d gpio\n", __func__, gpio);
+	return -1;
+}
+
+//
+// sysfs FD offset
+//
+static int  gpioFdOffsetXU34(int pin)
+{
+    int offset = -1;
+
+    switch(pin) {
+        case  GPIO_X1_START...GPIO_X1_END:  offset = (pin - GPIO_X1_START) + 0;     break;
+        case  GPIO_X2_START...GPIO_X2_END:  offset = (pin - GPIO_X2_START) + 8;     break;
+        case  GPIO_X3_START...GPIO_X3_END:  offset = (pin - GPIO_X3_START) + 16;    break;
+        case  GPIO_A0_START...GPIO_A0_END:  offset = (pin - GPIO_A0_START) + 24;    break;
+        case  GPIO_A2_START...GPIO_A2_END:  offset = (pin - GPIO_A2_START) + 32;    break;
+        case  GPIO_B3_START...GPIO_B3_END:  offset = (pin - GPIO_B3_START) + 40;    break;
+        default :                           offset = -1;                            break;
+    }
+    return  offset;
+}
+
+//
+// offset to the GPIO Set regsiter
+//
+static int  gpioToGPSETReg (int pin)
+{
+    if(piModel == PI_MODEL_ODROIDXU_34) {
+        switch(pin) {
+            case    GPIO_X1_START...GPIO_X1_END:
+                return  (GPIO_X1_DAT_OFFSET >> 2);
+            case    GPIO_X2_START...GPIO_X2_END:
+                return  (GPIO_X2_DAT_OFFSET >> 2);
+            case    GPIO_X3_START...GPIO_X3_END:
+                return  (GPIO_X3_DAT_OFFSET >> 2);
+            case    GPIO_A0_START...GPIO_A0_END:
+                return  (GPIO_A0_DAT_OFFSET >> 2);
+            case    GPIO_A2_START...GPIO_A2_END:
+                return  (GPIO_A2_DAT_OFFSET >> 2);
+            case    GPIO_B3_START...GPIO_B3_END:
+                return  (GPIO_B3_DAT_OFFSET >> 2);
+            default:
+                break;
+        }
+    }
+    else if (piModel == PI_MODEL_ODROIDC2)	{
+        if(pin >= C2_GPIOX_PIN_START && pin <= C2_GPIOX_PIN_END)
+		return  C2_GPIOX_OUTP_REG_OFFSET;
+        if(pin >= C2_GPIOY_PIN_START && pin <= C2_GPIOY_PIN_END)
+		return  C2_GPIOY_OUTP_REG_OFFSET;
+    }
+    else    {
+        if(pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
+		return  GPIOX_OUTP_REG_OFFSET;
+        if(pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
+		return  GPIOY_OUTP_REG_OFFSET;
+    }
+
+    return  -1;
+}
+
+//
+// offset to the GPIO Input regsiter
+//
+static int  gpioToGPLEVReg (int pin)
+{
+    if(piModel == PI_MODEL_ODROIDXU_34) {
+        switch(pin) {
+            case    GPIO_X1_START...GPIO_X1_END:
+                return  (GPIO_X1_DAT_OFFSET >> 2);
+            case    GPIO_X2_START...GPIO_X2_END:
+                return  (GPIO_X2_DAT_OFFSET >> 2);
+            case    GPIO_X3_START...GPIO_X3_END:
+                return  (GPIO_X3_DAT_OFFSET >> 2);
+            case    GPIO_A0_START...GPIO_A0_END:
+                return  (GPIO_A0_DAT_OFFSET >> 2);
+            case    GPIO_A2_START...GPIO_A2_END:
+                return  (GPIO_A2_DAT_OFFSET >> 2);
+            case    GPIO_B3_START...GPIO_B3_END:
+                return  (GPIO_B3_DAT_OFFSET >> 2);
+            default:
+                break;
+        }
+    }
+    else if (piModel == PI_MODEL_ODROIDC2)	{
+        if(pin >= C2_GPIOX_PIN_START && pin <= C2_GPIOX_PIN_END)
+		return  C2_GPIOX_INP_REG_OFFSET;
+        if(pin >= C2_GPIOY_PIN_START && pin <= C2_GPIOY_PIN_END)
+		return  C2_GPIOY_INP_REG_OFFSET;
+    }
+    else    {
+        if(pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
+		return  GPIOX_INP_REG_OFFSET;
+        if(pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
+		return  GPIOY_INP_REG_OFFSET;
+    }
+
+    return  -1;
+}
+
+//
+// offset to the GPIO Pull up/down enable regsiter
+//
+static int  gpioToPUENReg (int pin)
+{
+	if(piModel == PI_MODEL_ODROIDC2)	{
+		if(pin >= C2_GPIOX_PIN_START && pin <= C2_GPIOX_PIN_END)
+			return  C2_GPIOX_PUEN_REG_OFFSET;
+		if(pin >= C2_GPIOY_PIN_START && pin <= C2_GPIOY_PIN_END)
+			return  C2_GPIOY_PUEN_REG_OFFSET;
+	}
+	else	{
+		if(pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
+			return  GPIOX_PUEN_REG_OFFSET;
+		if(pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
+			return  GPIOY_PUEN_REG_OFFSET;
+	}
+
+    return  -1;
+}
+
+//
+// offset to the GPIO Pull up/down regsiter
+//
+static int  gpioToPUPDReg (int pin)
+{
+    if(piModel == PI_MODEL_ODROIDXU_34) {
+        switch(pin) {
+            case    GPIO_X1_START...GPIO_X1_END:
+                return  (GPIO_X1_PUD_OFFSET >> 2);
+            case    GPIO_X2_START...GPIO_X2_END:
+                return  (GPIO_X2_PUD_OFFSET >> 2);
+            case    GPIO_X3_START...GPIO_X3_END:
+                return  (GPIO_X3_PUD_OFFSET >> 2);
+            case    GPIO_A0_START...GPIO_A0_END:
+                return  (GPIO_A0_PUD_OFFSET >> 2);
+            case    GPIO_A2_START...GPIO_A2_END:
+                return  (GPIO_A2_PUD_OFFSET >> 2);
+            case    GPIO_B3_START...GPIO_B3_END:
+                return  (GPIO_B3_PUD_OFFSET >> 2);
+            default:
+                break;
+        }
+    }
+    else if (piModel == PI_MODEL_ODROIDC2)	{
+        if(pin >= C2_GPIOX_PIN_START && pin <= C2_GPIOX_PIN_END)
+		return	C2_GPIOX_PUPD_REG_OFFSET;
+        if(pin >= C2_GPIOY_PIN_START && pin <= C2_GPIOY_PIN_END)
+		return  C2_GPIOY_PUPD_REG_OFFSET;
+    }
+    else    {
+        if(pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
+		return  GPIOX_PUPD_REG_OFFSET;
+        if(pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
+		return  GPIOY_PUPD_REG_OFFSET;
+    }
+
+    return  -1;
+}
+
+//
+// offset to the GPIO bit
+//
+static int  gpioToShiftReg (int pin)
+{
+    if(piModel == PI_MODEL_ODROIDXU_34) {
+        switch(pin) {
+            case    GPIO_X1_START...GPIO_X1_END:
+                return  (pin - GPIO_X1_START);
+            case    GPIO_X2_START...GPIO_X2_END:
+                return  (pin - GPIO_X2_START);
+            case    GPIO_X3_START...GPIO_X3_END:
+                return  (pin - GPIO_X3_START);
+            case    GPIO_A0_START...GPIO_A0_END:
+                return  (pin - GPIO_A0_START);
+            case    GPIO_A2_START...GPIO_A2_END:
+                return  (pin - GPIO_A2_START);
+            case    GPIO_B3_START...GPIO_B3_END:
+                return  (pin - GPIO_B3_START);
+            default:
+                break;
+        }
+    }
+    else if (piModel == PI_MODEL_ODROIDC2)	{
+        if(pin >= C2_GPIOX_PIN_START && pin <= C2_GPIOX_PIN_END)
+		return  pin - C2_GPIOX_PIN_START;
+        if(pin >= C2_GPIOY_PIN_START && pin <= C2_GPIOY_PIN_END)
+		return  pin - C2_GPIOY_PIN_START;
+    }
+    else    {
+        if(pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
+		return  pin - GPIOX_PIN_START;
+        if(pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
+		return  pin - GPIOY_PIN_START;
+    }
+
+    return  -1;
+}
+
+//
+// offset to the GPIO Function register
+//
+static int  gpioToGPFSELReg (int pin)
+{
+    if(piModel == PI_MODEL_ODROIDXU_34) {
+        switch(pin) {
+            case    GPIO_X1_START...GPIO_X1_END:
+                return  (GPIO_X1_CON_OFFSET >> 2);
+            case    GPIO_X2_START...GPIO_X2_END:
+                return  (GPIO_X2_CON_OFFSET >> 2);
+            case    GPIO_X3_START...GPIO_X3_END:
+                return  (GPIO_X3_CON_OFFSET >> 2);
+            case    GPIO_A0_START...GPIO_A0_END:
+                return  (GPIO_A0_CON_OFFSET >> 2);
+            case    GPIO_A2_START...GPIO_A2_END:
+                return  (GPIO_A2_CON_OFFSET >> 2);
+            case    GPIO_B3_START...GPIO_B3_END:
+                return  (GPIO_B3_CON_OFFSET >> 2);
+            default:
+                break;
+        }
+    }
+    else if (piModel == PI_MODEL_ODROIDC2)	{
+        if(pin >= C2_GPIOX_PIN_START && pin <= C2_GPIOX_PIN_END)
+		return  C2_GPIOX_FSEL_REG_OFFSET;
+        if(pin >= C2_GPIOY_PIN_START && pin <= C2_GPIOY_PIN_END)
+		return  C2_GPIOY_FSEL_REG_OFFSET;
+    }
+    else    {
+        if(pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
+		return  GPIOX_FSEL_REG_OFFSET;
+        if(pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
+		return  GPIOY_FSEL_REG_OFFSET;
+    }
+
+    return  -1;
+}
+
+//
+// pinToGpio:
+//	Take a Wiring pin (0 through X) and re-map it to the ODROID_GPIO pin
+//
+static int pinToGpioOdroidC [64] = {
+    88,  87, 116, 115, 104, 102, 103,  83, // 0..7
+    -1,  -1, 117, 118, 107, 106, 105,  -1, // 8..16
+    -1,  -1,  -1,  -1,  -1, 101, 100, 108, // 16..23
+    97,  -1,  99,  98,  -1,  -1,  -1,  -1, // 24..31
+// Padding:
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 47
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 63
+};
+
+//
+// physToGpio:
+//	Take a physical pin (1 through 40) and re-map it to the ODROID_GPIO pin
+//
+static int physToGpioOdroidC [64] =
+{
+  -1,       // 0
+  -1,  -1,	// 1, 2
+  -1,  -1,
+  -1,  -1,
+  83,  -1,
+  -1,  -1,
+  88,  87,
+ 116,  -1,
+ 115, 104,
+  -1, 102,
+ 107,  -1,
+ 106, 103,
+ 105, 117,
+  -1, 118,	// 25, 26
+
+  -1,  -1,
+ 101,  -1,
+ 100,  99,
+ 108,  -1,
+  97,  98,
+  -1,  -1,
+  -1,  -1, // 39, 40
+
+// Not used
+  -1, -1, -1, -1, -1, -1, -1, -1,
+  -1, -1, -1, -1, -1, -1, -1, -1,
+  -1, -1, -1, -1, -1, -1,
+} ;
+
+//
+// pinToGpio:
+//	Take a Wiring pin (0 through X) and re-map it to the ODROIDC2_GPIO pin
+//
+static int pinToGpioOdroidC2_Rev1_1 [64] = {
+   247, 238, 239, 237, 236, 233, 231, 249, // 0..7
+    -1,  -1, 229, 225, 235, 232, 230,  -1, // 8..15
+    -1,  -1,  -1,  -1,  -1, 228, 219, 234, // 16..23
+   214,  -1, 224, 218,  -1,  -1,  -1,  -1, // 24..31
+// Padding:
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 47
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 63
+};
+
+
+static int pinToGpioOdroidC2_Rev1_0 [64] = {
+   219, 218, 247,  -1, 235, 233, 234, 214, // 0..7
+    -1,  -1, 248, 249, 238, 237, 236,  -1, // 8..15
+    -1,  -1,  -1,  -1,  -1, 232, 231, 239, // 16..23
+   228,  -1, 230, 229,  -1,  -1,  -1,  -1, // 24..31
+// Padding:
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 47
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 63
+};
+
+//
+// physToGpio:
+//	Take a physical pin (1 through 40) and re-map it to the ODROIDC2_GPIO pin
+//
+static int physToGpioOdroidC2_Rev1_1 [64] =
+{
+  -1,       // 0
+  -1,  -1,	// 1, 2
+  -1,  -1,
+  -1,  -1,
+ 249,  -1,
+  -1,  -1,
+ 247, 238,
+ 239,  -1,
+ 237, 236,
+  -1, 233,
+ 235,  -1,
+ 232, 231,
+ 230, 229,
+  -1, 225,	// 25, 26
+
+  -1,  -1,
+ 228,  -1,
+ 219, 224,
+ 234,  -1,
+ 214, 218,
+  -1,  -1,
+  -1,  -1, // 39, 40
+
+// Not used
+  -1, -1, -1, -1, -1, -1, -1, -1,
+  -1, -1, -1, -1, -1, -1, -1, -1,
+  -1, -1, -1, -1, -1, -1,
+} ;
+
+
+static int physToGpioOdroidC2_Rev1_0 [64] =
+{
+  -1,       // 0
+  -1,  -1,	// 1, 2
+  -1,  -1,
+  -1,  -1,
+ 214,  -1,
+  -1,  -1,
+ 219, 218,
+ 247,  -1,
+  -1, 235,
+  -1, 233,
+ 238,  -1,
+ 237, 234,
+ 236, 248,
+  -1, 249,	// 25, 26
+
+  -1,  -1,
+ 232,  -1,
+ 231, 230,
+ 239,  -1,
+ 228, 229,
+  -1,  -1,
+  -1,  -1, // 39, 40
+
+// Not used
+  -1, -1, -1, -1, -1, -1, -1, -1,
+  -1, -1, -1, -1, -1, -1, -1, -1,
+  -1, -1, -1, -1, -1, -1,
+} ;
+
+//
+// pinToGpio:
+//	Take a Wiring pin (0 through X) and re-map it to the ODROIDXU_GPIO pin
+//
+static int pinToGpioOdroidXU [64] = {
+   174, 173,    //  0 |  1 : GPA0.3(UART_0.CTSN), GPA0.2(UART_0.RTSN)
+    21,  22,    //  2 |  3 : GPX1.5, GPX1.6
+    19,  23,    //  4 |  5 : GPX1.3, GPX1.7
+    24,  18,    //  6 |  7 : GPX2.0, GPX1.2
+
+   209, 210,    //  8 |  9 : GPB3.2(I2C_1.SDA), GPB3.3(I2C_1.SCL)
+   190,  25,    // 10 | 11 : GPA2.5(SPI_1.CSN), GPX2.1
+   192, 191,    // 12 | 13 : GPA2.7(SPI_1.MOSI), GPA2.6(SPI_1.MISO)
+   189, 172,    // 14 | 15 : GPA2.4(SPI_1.SCLK), GPA0.1(UART_0.TXD)
+   171,  -1,    // 16 | 17 : GPA0.0(UART_0.RXD),
+    -1,  -1,    // 18 | 19
+    -1,  28,    // 20 | 21 :  , GPX2.4
+    30,  31,    // 22 | 23 : GPX2.6, GPX2.7
+    -1,  -1,    // 24 | 25   PWR_ON(INPUT), ADC_0.AIN0
+    29,  33,    // 26 | 27 : GPX2.5, GPX3.1
+    -1,  -1,    // 28 | 29 : REF1.8V OUT, ADC_0.AIN3
+   187, 188,    // 30 | 31 : GPA2.2(I2C_5.SDA), GPA2.3(I2C_5.SCL)
+
+    // Padding:
+    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// 32...47
+    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// 48...63
+};
+
+//
+// physToGpio:
+//	Take a physical pin (1 through 40) and re-map it to the ODROIDXU_GPIO pin
+//
+static int physToGpioOdroidXU [64] =
+{
+    -1,         //  0
+    -1,  -1,	//  1 |  2 : 3.3V, 5.0V
+   209,  -1,    //  3 |  4 : GPB3.2(I2C_1.SDA), 5.0V
+   210,  -1,    //  5 |  6 : GPB3.3(I2C_1.SCL), GND
+    18, 172,    //  7 |  8 : GPX1.2, GPA0.1(UART_0.TXD)
+    -1, 171,    //  9 | 10 : GND, GPA0.0(UART_0.RXD)
+   174, 173,    // 11 | 12 : GPA0.3(UART_0.CTSN), GPA0.2(UART_0.RTSN)
+    21,  -1,    // 13 | 14 : GPX1.5, GND
+    22,  19,    // 15 | 16 : GPX1.6, GPX1.3
+    -1,  23,    // 17 | 18 : 3.3V, GPX1.7
+   192,  -1,    // 19 | 20 : GPA2.7(SPI_1.MOSI), GND
+   191,  24,    // 21 | 22 : GPA2.6(SPI_1.MISO), GPX2.0
+   189, 190,    // 23 | 24 : GPA2.4(SPI_1.SCLK), GPA2.5(SPI_1.CSN)
+    -1,  25,    // 25 | 26 : GND, GPX2.1
+   187, 188,    // 27 | 28 : GPA2.2(I2C_5.SDA), GPA2.4(I2C_5.SCL)
+    28,  -1,    // 29 | 30 : GPX2.4, GND
+    30,  29,    // 31 | 32 : GPX2.6, GPX2.5
+    31,  -1,    // 33 | 34 : GPX2.7, GND
+    -1,  33,    // 35 | 36 : PWR_ON(INPUT), GPX3.1
+    -1,  -1,    // 37 | 38 : ADC_0.AIN0, 1.8V REF OUT
+    -1,  -1,    // 39 | 40 : GND, AADC_0.AIN3
+
+    // Not used
+    -1, -1, -1, -1, -1, -1, -1, -1, // 41...48
+    -1, -1, -1, -1, -1, -1, -1, -1, // 49...56
+    -1, -1, -1, -1, -1, -1, -1      // 57...63
+} ;
+
+
+/*
+ * Functions
+ *********************************************************************************
+ */
+
+
+/*
+ * wiringPiFailure:
+ *	Fail. Or not.
+ *********************************************************************************
+ */
+
+int wiringPiFailure (int fatal, const char *message, ...)
+{
+  va_list argp ;
+  char buffer [1024] ;
+
+  if (!fatal && wiringPiReturnCodes)
+    return -1 ;
+
+  va_start (argp, message) ;
+    vsnprintf (buffer, 1023, message, argp) ;
+  va_end (argp) ;
+
+  fprintf (stderr, "%s", buffer) ;
+  exit (EXIT_FAILURE) ;
+
+  return 0 ;
+}
+
+const char wpi_mode_str[4][20] = {
+	"WPI_MODE_PINS",
+	"WPI_MODE_GPIO",
+	"WPI_MODE_GPIO_SYS",
+	"WPI_MODE_PHYS",
+};
+
+void wiringPiGpioCheck (const char *call_func, int origPin, int pin)
+{
+    if (wiringPiMode == WPI_MODE_PINS || wiringPiMode == WPI_MODE_PHYS)
+    {
+	// maybe pin is not gpio.
+	if ( pin < 0 ) {
+		(void)wiringPiFailure (WPI_FATAL,
+			"\n**************** %s ****************\n"	\
+			"\nCall Function = %s, wiringPiMode = %s\n"	\
+			"\nError gpio control (OrigPin = %d, pin = %d)\n\n",
+			__func__, call_func, wpi_mode_str[wiringPiMode],
+			origPin, pin);
+	}
+    }
+    else {
+	int i;
+	for(i = 0; i < 64; i++)	{
+		if (origPin == pinToGpio[i])	break;
+	}
+	if (i == 64) {
+		(void)wiringPiFailure (WPI_FATAL,
+			"\n**************** %s ****************\n"	\
+			"\nCall Function = %s, wiringPiMode = %s\n"	\
+			"\nCannot found gpio pin! (OrigPin = %d)\n\n",
+			__func__, call_func, wpi_mode_str[wiringPiMode],
+			origPin);
+	}
+    }
+}
+
+/*
+ * piBoardRev:
+ *	Return a number representing the hardware revision of the board.
+ *
+ *	Revision 1 really means the early Model B's.
+ *	Revision 2 is everything else - it covers the B, B+ and CM.
+ *
+ *	Seems there are some boards with 0000 in them (mistake in manufacture)
+ *	So the distinction between boards that I can see is:
+ *	0000 - Error
+ *	0001 - Not used 
+ *	0002 - Model B,  Rev 1,   256MB, Egoman
+ *	0003 - Model B,  Rev 1.1, 256MB, Egoman, Fuses/D14 removed.
+ *	0004 - Model B,  Rev 2,   256MB, Sony
+ *	0005 - Model B,  Rev 2,   256MB, Qisda
+ *	0006 - Model B,  Rev 2,   256MB, Egoman
+ *	0007 - Model A,  Rev 2,   256MB, Egoman
+ *	0008 - Model A,  Rev 2,   256MB, Sony
+ *	0009 - Model A,  Rev 2,   256MB, Qisda
+ *	000d - Model B,  Rev 2,   512MB, Egoman
+ *	000e - Model B,  Rev 2,   512MB, Sony
+ *	000f - Model B,  Rev 2,   512MB, Qisda
+ *	0010 - Model B+, Rev 1.2, 512MB, Sony
+ *	0011 - Pi CM,    Rev 1.2, 512MB, Sony
+ *	0012 - Model A+  Rev 1.2, 256MB, Sony
+ *
+ *  added :
+ *  000a - Model ODROID C1/C1+, Rev 1.0, 1024M, Hardkernel
+ *  added :
+ *  0100 - Model ODROID XU3/4, Rev 1.0, 2048M, Hardkernel
+ *  added :
+ *  02xx - Model ODROID C2, 2048M, Hardkernel
+ *         Rev 1.0 : /sys/class/odroid/boardrev value is 0 (Dev board)
+ *         Rev 1.1 : /sys/class/odroid/boardrev value is 1 (Mass board)
+ *
+ *	A small thorn is the olde style overvolting - that will add in
+ *		1000000
+ *
+ *	The Pi compute module has an revision of 0011 - since we only check the
+ *	last digit, then it's 1, therefore it'll default to not 2 or 3 for a
+ *	Rev 1, so will appear as a Rev 2. This is fine for the most part, but
+ *	we'll properly detect the Compute Module later and adjust accordingly.
+ *
+ *********************************************************************************
+ */
+
+static void piBoardRevOops (const char *why)
+{
+  fprintf (stderr, "piBoardRev: Unable to determine board revision from /proc/cpuinfo\n") ;
+  fprintf (stderr, " -> %s\n", why) ;
+  fprintf (stderr, " ->  You may want to check:\n") ;
+  fprintf (stderr, " ->  http://www.raspberrypi.org/phpBB3/viewtopic.php?p=184410#p184410\n") ;
+  exit (EXIT_FAILURE) ;
+}
+
+int piBoardRev (void)
+{
+  FILE *cpuFd ;
+  char line [120] ;
+  char *c ;
+  static int  boardRev = -1 ;
+
+  if (boardRev != -1)	// No point checking twice
+    return boardRev ;
+
+  if ((cpuFd = fopen ("/proc/cpuinfo", "r")) == NULL)
+    piBoardRevOops ("Unable to open /proc/cpuinfo") ;
+
+  while (fgets (line, 120, cpuFd) != NULL)
+    if (strncmp (line, "Revision", 8) == 0)
+      break ;
+
+  fclose (cpuFd) ;
+
+  if (strncmp (line, "Revision", 8) != 0)
+    piBoardRevOops ("No \"Revision\" line") ;
+
+// Chomp trailing CR/NL
+
+  for (c = &line [strlen (line) - 1] ; (*c == '\n') || (*c == '\r') ; --c)
+    *c = 0 ;
+  
+  if (wiringPiDebug)
+    printf ("piboardRev: Revision string: %s\n", line) ;
+
+// Scan to first digit
+
+  for (c = line ; *c ; ++c)
+    if (isdigit (*c))
+      break ;
+
+  if (!isdigit (*c))
+    piBoardRevOops ("No numeric revision string") ;
+
+// Make sure its long enough
+
+  if (strlen (c) < 4)
+    piBoardRevOops ("Bogus \"Revision\" line (too small)") ;
+  
+// If you have overvolted the Pi, then it appears that the revision
+//	has 100000 added to it!
+// The actual condition for it being set is:
+//	 (force_turbo || current_limit_override || temp_limit>85) && over_voltage>0
+
+  if (wiringPiDebug)
+    if (strlen (c) != 4)
+      printf ("piboardRev: This Pi has/is (force_turbo || current_limit_override || temp_limit>85) && over_voltage>0\n") ;
+
+// Isolate  last 4 characters:
+
+  c = c + strlen (c) - 4 ;
+
+  if (wiringPiDebug)
+    printf ("piboardRev: last4Chars are: \"%s\"\n", c) ;
+
+  if ( (strcmp (c, "0002") == 0) || (strcmp (c, "0003") == 0) ||
+       (strcmp (c, "000a") == 0) || (strcmp (c, "0100") == 0) )
+    boardRev = 1;
+  else
+    boardRev = 2;
+
+  if (strncmp (c, "02", 2) == 0) {
+	int fd = 0;
+	char buf[2];
+
+	if ((fd = open ("/sys/class/odroid/boardrev", O_RDONLY)) < 0) {
+		printf ("ERROR : file not found.(boardrev)\n");
+		boardRev = 1;
+	}
+	else {
+		read (fd, buf, sizeof(buf));
+		close(fd);
+		boardRev = atoi(buf) + 1;
+	}
+  }
+
+  if (wiringPiDebug)
+    printf ("piBoardRev: Returning revision: %d\n", boardRev) ;
+
+  return boardRev ;
+}
+
+
+/*
+ * piBoardId:
+ *	Do more digging into the board revision string as above, but return
+ *	as much details as we can.
+ *	This is undocumented and really only intended for the GPIO command.
+ *	Use at your own risk!
+ *********************************************************************************
+ */
+
+void piBoardId (int *model, int *rev, int *mem, int *maker, int *overVolted)
+{
+  FILE *cpuFd ;
+  char line [120] ;
+  char *c ;
+
+  (void)piBoardRev () ;	// Call this first to make sure all's OK. Don't care about the result.
+
+  if ((cpuFd = fopen ("/proc/cpuinfo", "r")) == NULL)
+    piBoardRevOops ("Unable to open /proc/cpuinfo") ;
+
+  while (fgets (line, 120, cpuFd) != NULL)
+    if (strncmp (line, "Revision", 8) == 0)
+      break ;
+
+  fclose (cpuFd) ;
+
+  if (strncmp (line, "Revision", 8) != 0)
+    piBoardRevOops ("No \"Revision\" line") ;
+
+// Chomp trailing CR/NL
+
+  for (c = &line [strlen (line) - 1] ; (*c == '\n') || (*c == '\r') ; --c)
+    *c = 0 ;
+  
+  if (wiringPiDebug)
+    printf ("piboardId: Revision string: %s\n", line) ;
+
+// Scan to first digit
+
+  for (c = line ; *c ; ++c)
+    if (isdigit (*c))
+      break ;
+
+// Make sure its long enough
+
+  if (strlen (c) < 4)
+    piBoardRevOops ("Bogus \"Revision\" line") ;
+
+// If longer than 4, we'll assume it's been overvolted
+
+  *overVolted = strlen (c) > 4 ;
+  
+// Extract last 4 characters:
+
+  c = c + strlen (c) - 4 ;
+
+// Fill out the replys as appropriate
+
+  /**/ if (strcmp (c, "0002") == 0) { *model = PI_MODEL_B  ; *rev = PI_VERSION_1   ; *mem = 256 ; *maker = PI_MAKER_EGOMAN ; }
+  else if (strcmp (c, "0003") == 0) { *model = PI_MODEL_B  ; *rev = PI_VERSION_1_1 ; *mem = 256 ; *maker = PI_MAKER_EGOMAN ; }
+  else if (strcmp (c, "0004") == 0) { *model = PI_MODEL_B  ; *rev = PI_VERSION_2   ; *mem = 256 ; *maker = PI_MAKER_SONY   ; }
+  else if (strcmp (c, "0005") == 0) { *model = PI_MODEL_B  ; *rev = PI_VERSION_2   ; *mem = 256 ; *maker = PI_MAKER_QISDA  ; }
+  else if (strcmp (c, "0006") == 0) { *model = PI_MODEL_B  ; *rev = PI_VERSION_2   ; *mem = 256 ; *maker = PI_MAKER_EGOMAN ; }
+  else if (strcmp (c, "0007") == 0) { *model = PI_MODEL_A  ; *rev = PI_VERSION_2   ; *mem = 256 ; *maker = PI_MAKER_EGOMAN ; }
+  else if (strcmp (c, "0008") == 0) { *model = PI_MODEL_A  ; *rev = PI_VERSION_2   ; *mem = 256 ; *maker = PI_MAKER_SONY ; ; }
+  else if (strcmp (c, "0009") == 0) { *model = PI_MODEL_B  ; *rev = PI_VERSION_2   ; *mem = 256 ; *maker = PI_MAKER_QISDA  ; }
+  else if (strcmp (c, "000d") == 0) { *model = PI_MODEL_B  ; *rev = PI_VERSION_2   ; *mem = 512 ; *maker = PI_MAKER_EGOMAN ; }
+  else if (strcmp (c, "000e") == 0) { *model = PI_MODEL_B  ; *rev = PI_VERSION_2   ; *mem = 512 ; *maker = PI_MAKER_SONY   ; }
+  else if (strcmp (c, "000f") == 0) { *model = PI_MODEL_B  ; *rev = PI_VERSION_2   ; *mem = 512 ; *maker = PI_MAKER_EGOMAN ; }
+  else if (strcmp (c, "0010") == 0) { *model = PI_MODEL_BP ; *rev = PI_VERSION_1_2 ; *mem = 512 ; *maker = PI_MAKER_SONY   ; }
+  else if (strcmp (c, "0011") == 0) { *model = PI_MODEL_CM ; *rev = PI_VERSION_1_2 ; *mem = 512 ; *maker = PI_MAKER_SONY   ; }
+  else if (strcmp (c, "0012") == 0) { *model = PI_MODEL_AP ; *rev = PI_VERSION_1_2 ; *mem = 256 ; *maker = PI_MAKER_SONY   ; }
+  else if (strcmp (c, "000a") == 0) {
+    *model = PI_MODEL_ODROIDC;  *rev = PI_VERSION_1;  *mem = 1024;  *maker = PI_MAKER_HARDKERNEL;
+  }
+  else if (strcmp (c, "0100") == 0) {
+    *model = PI_MODEL_ODROIDXU_34;  *rev = PI_VERSION_1;  *mem = 2048;  *maker = PI_MAKER_HARDKERNEL;
+  }
+  else if (strncmp (c, "02", 2) == 0)	{
+    *model = PI_MODEL_ODROIDC2; *mem = 2048;  *maker = PI_MAKER_HARDKERNEL;
+    *rev = piBoardRev ();
+  }
+  else  {
+    *model = 0; *rev = 0; *mem = 0; *maker = 0 ;
+  }
+  piModel = *model;
+}
+
+
+/*
+ * wpiPinToGpio:
+ *	Translate a wiringPi Pin number to native GPIO pin number.
+ *	Provided for external support.
+ *********************************************************************************
+ */
+
+int wpiPinToGpio (int wpiPin)
+{
+  return pinToGpio [wpiPin & 63] ;
+}
+
+
+/*
+ * physPinToGpio:
+ *	Translate a physical Pin number to native GPIO pin number.
+ *	Provided for external support.
+ *********************************************************************************
+ */
+
+int physPinToGpio (int physPin)
+{
+  return physToGpio [physPin & 63] ;
+}
+
+
+/*
+ * setPadDrive:
+ *	Set the PAD driver value
+ *********************************************************************************
+ */
+
+void setPadDrive (int group, int value)
+{
+  uint32_t wrVal ;
+
+  if ( 	piModel == PI_MODEL_ODROIDC  ||
+	piModel == PI_MODEL_ODROIDC2 ||
+	piModel == PI_MODEL_ODROIDXU_34)  {
+	fprintf (stderr, "%s : Unsupport function on %s model\n",
+		__func__, piModelNames [piModel]);
+	exit (EXIT_FAILURE) ;
+  }
+
+  if ((wiringPiMode == WPI_MODE_PINS) || (wiringPiMode == WPI_MODE_PHYS) || (wiringPiMode == WPI_MODE_GPIO))
+  {
+    if ((group < 0) || (group > 2))
+      return ;
+
+    wrVal = BCM_PASSWORD | 0x18 | (value & 7) ;
+    *(pads + group + 11) = wrVal ;
+
+    if (wiringPiDebug)
+    {
+      printf ("setPadDrive: Group: %d, value: %d (%08X)\n", group, value, wrVal) ;
+      printf ("Read : %08X\n", *(pads + group + 11)) ;
+    }
+  }
+}
+
+
+/*
+ * getAlt:
+ *	Returns the ALT bits for a given port. Only really of-use
+ *	for the gpio readall command (I think)
+ *********************************************************************************
+ */
+
+int getAlt (int pin)
+{
+  int fSel, shift, alt ;
+
+  if     ( piModel == PI_MODEL_ODROIDC )
+    pin &= 0x7F;
+  else if( piModel == PI_MODEL_ODROIDXU_34 || piModel == PI_MODEL_ODROIDC2 )
+    pin &= 0xFF;
+  else
+    pin &= 63 ;
+
+  /**/ if (wiringPiMode == WPI_MODE_PINS)
+    pin = pinToGpio [pin] ;
+  else if (wiringPiMode == WPI_MODE_PHYS)
+    pin = physToGpio [pin] ;
+  else if (wiringPiMode != WPI_MODE_GPIO)
+    return 0 ;
+
+  if     ( piModel == PI_MODEL_ODROIDC || piModel == PI_MODEL_ODROIDC2 )  {
+
+    if(pin < 0)   return  2;  // ALT
+
+    return    (*(gpio + gpioToGPFSELReg(pin)) & (1 << gpioToShiftReg(pin))) ? 0 : 1;
+  }
+  else if ( piModel == PI_MODEL_ODROIDXU_34 )   {
+
+    if(pin < 0)   return  2;  // ALT
+
+    shift = (gpioToShiftReg(pin) * 4);
+
+    if(pin < 100)   // GPX0,1,2,3
+        fSel = (*(gpio  + gpioToGPFSELReg(pin)) & (0xF << shift));
+    else            // GPA0,1,2, GPB0,1,2,3,4
+        fSel = (*(gpio1 + gpioToGPFSELReg(pin)) & (0xF << shift));
+
+    if(fSel & (0xE << shift))   return  2;
+
+    return  (fSel & (0x1 << shift)) ?   1 : 0;
+  }
+  else  {
+    fSel    = gpioToGPFSEL [pin] ;
+    shift   = gpioToShift  [pin] ;
+
+    alt = (*(gpio + fSel) >> shift) & 7 ;
+
+    return alt ;
+  }
+}
+
+
+/*
+ * pwmSetMode:
+ *	Select the native "balanced" mode, or standard mark:space mode
+ *********************************************************************************
+ */
+
+void pwmSetMode (int mode)
+{
+  if ( 	piModel == PI_MODEL_ODROIDC  ||
+	piModel == PI_MODEL_ODROIDC2 ||
+	piModel == PI_MODEL_ODROIDXU_34)  {
+	fprintf (stderr, "%s : Unsupport function on %s model\n",
+		__func__, piModelNames [piModel]);
+	exit (EXIT_FAILURE) ;
+  }
+
+  if ((wiringPiMode == WPI_MODE_PINS) || (wiringPiMode == WPI_MODE_PHYS) || (wiringPiMode == WPI_MODE_GPIO))
+  {
+    if (mode == PWM_MODE_MS)
+      *(pwm + PWM_CONTROL) = PWM0_ENABLE | PWM1_ENABLE | PWM0_MS_MODE | PWM1_MS_MODE ;
+    else
+      *(pwm + PWM_CONTROL) = PWM0_ENABLE | PWM1_ENABLE ;
+  }
+}
+
+
+/*
+ * pwmSetRange:
+ *	Set the PWM range register. We set both range registers to the same
+ *	value. If you want different in your own code, then write your own.
+ *********************************************************************************
+ */
+
+void pwmSetRange (unsigned int range)
+{
+  if ( 	piModel == PI_MODEL_ODROIDC  ||
+	piModel == PI_MODEL_ODROIDC2 ||
+	piModel == PI_MODEL_ODROIDXU_34)  {
+	fprintf (stderr, "%s : Unsupport function on %s model\n",
+		__func__, piModelNames [piModel]);
+	exit (EXIT_FAILURE) ;
+  }
+
+  if ((wiringPiMode == WPI_MODE_PINS) || (wiringPiMode == WPI_MODE_PHYS) || (wiringPiMode == WPI_MODE_GPIO))
+  {
+    *(pwm + PWM0_RANGE) = range ; delayMicroseconds (10) ;
+    *(pwm + PWM1_RANGE) = range ; delayMicroseconds (10) ;
+  }
+}
+
+
+/*
+ * pwmSetClock:
+ *	Set/Change the PWM clock. Originally my code, but changed
+ *	(for the better!) by Chris Hall, <chris@kchall.plus.com>
+ *	after further study of the manual and testing with a 'scope
+ *********************************************************************************
+ */
+
+void pwmSetClock (int divisor)
+{
+  uint32_t pwm_control ;
+  divisor &= 4095 ;
+
+  if ( 	piModel == PI_MODEL_ODROIDC  ||
+	piModel == PI_MODEL_ODROIDC2 ||
+	piModel == PI_MODEL_ODROIDXU_34)  {
+	fprintf (stderr, "%s : Unsupport function on %s model\n",
+		__func__, piModelNames [piModel]);
+	exit (EXIT_FAILURE) ;
+  }
+
+  if ((wiringPiMode == WPI_MODE_PINS) || (wiringPiMode == WPI_MODE_PHYS) || (wiringPiMode == WPI_MODE_GPIO))
+  {
+    if (wiringPiDebug)
+      printf ("Setting to: %d. Current: 0x%08X\n", divisor, *(clk + PWMCLK_DIV));
+
+    pwm_control = *(pwm + PWM_CONTROL) ;		// preserve PWM_CONTROL
+
+// We need to stop PWM prior to stopping PWM clock in MS mode otherwise BUSY
+// stays high.
+
+    *(pwm + PWM_CONTROL) = 0 ;				// Stop PWM
+
+// Stop PWM clock before changing divisor. The delay after this does need to
+// this big (95uS occasionally fails, 100uS OK), it's almost as though the BUSY
+// flag is not working properly in balanced mode. Without the delay when DIV is
+// adjusted the clock sometimes switches to very slow, once slow further DIV
+// adjustments do nothing and it's difficult to get out of this mode.
+
+    *(clk + PWMCLK_CNTL) = BCM_PASSWORD | 0x01 ;	// Stop PWM Clock
+      delayMicroseconds (110) ;			// prevents clock going sloooow
+
+    while ((*(clk + PWMCLK_CNTL) & 0x80) != 0)	// Wait for clock to be !BUSY
+      delayMicroseconds (1) ;
+
+    *(clk + PWMCLK_DIV)  = BCM_PASSWORD | (divisor << 12) ;
+
+    *(clk + PWMCLK_CNTL) = BCM_PASSWORD | 0x11 ;	// Start PWM clock
+    *(pwm + PWM_CONTROL) = pwm_control ;		// restore PWM_CONTROL
+
+    if (wiringPiDebug)
+      printf ("Set     to: %d. Now    : 0x%08X\n", divisor, *(clk + PWMCLK_DIV));
+  }
+}
+
+
+/*
+ * gpioClockSet:
+ *	Set the freuency on a GPIO clock pin
+ *********************************************************************************
+ */
+
+void gpioClockSet (int pin, int freq)
+{
+  int divi, divr, divf ;
+
+  if ( 	piModel == PI_MODEL_ODROIDC  ||
+	piModel == PI_MODEL_ODROIDC2 ||
+	piModel == PI_MODEL_ODROIDXU_34)  {
+	fprintf (stderr, "%s : Unsupport function on %s model\n",
+		__func__, piModelNames [piModel]);
+	exit (EXIT_FAILURE) ;
+  }
+
+  pin &= 63 ;
+
+  /**/ if (wiringPiMode == WPI_MODE_PINS)
+    pin = pinToGpio [pin] ;
+  else if (wiringPiMode == WPI_MODE_PHYS)
+    pin = physToGpio [pin] ;
+  else if (wiringPiMode != WPI_MODE_GPIO)
+    return ;
+  
+  divi = 19200000 / freq ;
+  divr = 19200000 % freq ;
+  divf = (int)((double)divr * 4096.0 / 19200000.0) ;
+
+  if (divi > 4095)
+    divi = 4095 ;
+
+  *(clk + gpioToClkCon [pin]) = BCM_PASSWORD | GPIO_CLOCK_SOURCE ;		// Stop GPIO Clock
+  while ((*(clk + gpioToClkCon [pin]) & 0x80) != 0)				// ... and wait
+    ;
+
+  *(clk + gpioToClkDiv [pin]) = BCM_PASSWORD | (divi << 12) | divf ;		// Set dividers
+  *(clk + gpioToClkCon [pin]) = BCM_PASSWORD | 0x10 | GPIO_CLOCK_SOURCE ;	// Start Clock
+}
+
+
+/*
+ * wiringPiFindNode:
+ *      Locate our device node
+ *********************************************************************************
+ */
+
+struct wiringPiNodeStruct *wiringPiFindNode (int pin)
+{
+  struct wiringPiNodeStruct *node = wiringPiNodes ;
+
+  while (node != NULL)
+    if ((pin >= node->pinBase) && (pin <= node->pinMax))
+      return node ;
+    else
+      node = node->next ;
+
+  return NULL ;
+}
+
+
+/*
+ * wiringPiNewNode:
+ *	Create a new GPIO node into the wiringPi handling system
+ *********************************************************************************
+ */
+
+static void pinModeDummy             (struct wiringPiNodeStruct *node, int pin, int mode)  { return ; }
+static void pullUpDnControlDummy     (struct wiringPiNodeStruct *node, int pin, int pud)   { return ; }
+static int  digitalReadDummy         (struct wiringPiNodeStruct *node, int pin)            { return LOW ; }
+static void digitalWriteDummy        (struct wiringPiNodeStruct *node, int pin, int value) { return ; }
+static void pwmWriteDummy            (struct wiringPiNodeStruct *node, int pin, int value) { return ; }
+static int  analogReadDummy          (struct wiringPiNodeStruct *node, int pin)            { return 0 ; }
+static void analogWriteDummy         (struct wiringPiNodeStruct *node, int pin, int value) { return ; }
+
+struct wiringPiNodeStruct *wiringPiNewNode (int pinBase, int numPins)
+{
+  int    pin ;
+  struct wiringPiNodeStruct *node ;
+
+  if      ( piModel == PI_MODEL_ODROIDC )  {
+    // Minimum pin base is 128
+    if (pinBase < 128)
+        (void)wiringPiFailure (WPI_FATAL, "wiringPiNewNode: pinBase of %d is < 128\n", pinBase) ;
+  }
+  else if ( piModel == PI_MODEL_ODROIDXU_34 || piModel == PI_MODEL_ODROIDC2 )   {
+    // Minimum pin base is 256
+    if (pinBase < 256)
+        (void)wiringPiFailure (WPI_FATAL, "wiringPiNewNode: pinBase of %d is < 256\n", pinBase) ;
+  }
+  else  {
+    // Minimum pin base is 64
+    if (pinBase < 64)
+        (void)wiringPiFailure (WPI_FATAL, "wiringPiNewNode: pinBase of %d is < 64\n", pinBase) ;
+  }
+
+// Check all pins in-case there is overlap:
+  for (pin = pinBase ; pin < (pinBase + numPins) ; ++pin)
+    if (wiringPiFindNode (pin) != NULL)
+      (void)wiringPiFailure (WPI_FATAL, "wiringPiNewNode: Pin %d overlaps with existing definition\n", pin) ;
+
+  node = (struct wiringPiNodeStruct *)calloc (sizeof (struct wiringPiNodeStruct), 1) ;	// calloc zeros
+  if (node == NULL)
+    (void)wiringPiFailure (WPI_FATAL, "wiringPiNewNode: Unable to allocate memory: %s\n", strerror (errno)) ;
+
+  node->pinBase         = pinBase ;
+  node->pinMax          = pinBase + numPins - 1 ;
+  node->pinMode         = pinModeDummy ;
+  node->pullUpDnControl = pullUpDnControlDummy ;
+  node->digitalRead     = digitalReadDummy ;
+  node->digitalWrite    = digitalWriteDummy ;
+  node->pwmWrite        = pwmWriteDummy ;
+  node->analogRead      = analogReadDummy ;
+  node->analogWrite     = analogWriteDummy ;
+  node->next            = wiringPiNodes ;
+  wiringPiNodes         = node ;
+
+  return node ;
+}
+
+
+#ifdef notYetReady
+/*
+ * pinED01:
+ * pinED10:
+ *	Enables edge-detect mode on a pin - from a 0 to a 1 or 1 to 0
+ *	Pin must already be in input mode with appropriate pull up/downs set.
+ *********************************************************************************
+ */
+
+void pinEnableED01Pi (int pin)
+{
+  pin = pinToGpio [pin & 63] ;
+}
+#endif
+
+
+/*
+ *********************************************************************************
+ * Core Functions
+ *********************************************************************************
+ */
+
+/*
+ * pinModeAlt:
+ *	This is an un-documented special to let you set any pin to any mode
+ *********************************************************************************
+ */
+
+void pinModeAlt (int pin, int mode)
+{
+  int fSel, shift ;
+
+  if (	piModel == PI_MODEL_ODROIDC  ||
+	piModel == PI_MODEL_ODROIDC2 ||
+	piModel == PI_MODEL_ODROIDXU_34)  {
+	fprintf (stderr, "%s : Unsupport function on %s model\n",
+		__func__, piModelNames [piModel]);
+	exit (EXIT_FAILURE) ;
+  }
+
+  if ((pin & PI_GPIO_MASK) == 0)		// On-board pin
+  {
+    /**/ if (wiringPiMode == WPI_MODE_PINS)
+      pin = pinToGpio [pin] ;
+    else if (wiringPiMode == WPI_MODE_PHYS)
+      pin = physToGpio [pin] ;
+    else if (wiringPiMode != WPI_MODE_GPIO)
+      return ;
+
+    fSel  = gpioToGPFSEL [pin] ;
+    shift = gpioToShift  [pin] ;
+
+    *(gpio + fSel) = (*(gpio + fSel) & ~(7 << shift)) | ((mode & 0x7) << shift) ;
+  }
+}
+
+
+/*
+ * pinMode:
+ *	Sets the mode of a pin to be input, output or PWM output
+ *********************************************************************************
+ */
+
+void pinMode (int pin, int mode)
+{
+  int    fSel, shift, alt ;
+  struct wiringPiNodeStruct *node = wiringPiNodes ;
+  int origPin = pin ;
+  unsigned int  gpio_mask = PI_GPIO_MASK;
+
+  if ( piModel == PI_MODEL_ODROIDC  )      gpio_mask = ODROIDC_GPIO_MASK;
+  if ( piModel == PI_MODEL_ODROIDC2 )      gpio_mask = ODROIDC2_GPIO_MASK;
+  if ( piModel == PI_MODEL_ODROIDXU_34 )   gpio_mask = ODROIDXU_GPIO_MASK;
+
+  if ((pin & gpio_mask) == 0)		// On-board pin
+  {
+    /**/ if (wiringPiMode == WPI_MODE_PINS)
+      pin = pinToGpio [pin] ;
+    else if (wiringPiMode == WPI_MODE_PHYS)
+      pin = physToGpio [pin] ;
+    else if (wiringPiMode != WPI_MODE_GPIO)
+      return ;
+
+    wiringPiGpioCheck (__func__, origPin, pin);
+
+    softPwmStop  (origPin) ;
+    softToneStop (origPin) ;
+
+    fSel    = gpioToGPFSEL [pin] ;
+    shift   = gpioToShift  [pin] ;
+
+    if (mode == INPUT) {
+      if      ( piModel == PI_MODEL_ODROIDC || piModel == PI_MODEL_ODROIDC2 )
+        *(gpio + gpioToGPFSELReg(pin)) = (*(gpio + gpioToGPFSELReg(pin)) |  (1 << gpioToShiftReg(pin)));
+      else if ( piModel == PI_MODEL_ODROIDXU_34 )   {
+        shift = (gpioToShiftReg(pin) * 4);
+        if(pin < 100)
+            *(gpio  + gpioToGPFSELReg(pin)) &= ~(0xF << shift);
+        else
+            *(gpio1 + gpioToGPFSELReg(pin)) &= ~(0xF << shift);
+      }
+      else
+        *(gpio + fSel) = (*(gpio + fSel) & ~(7 << shift)); // Sets bits to zero = input
+    }
+    else if (mode == OUTPUT)  {
+      if      ( piModel == PI_MODEL_ODROIDC || piModel == PI_MODEL_ODROIDC2 )
+        *(gpio + gpioToGPFSELReg(pin)) = (*(gpio + gpioToGPFSELReg(pin)) & ~(1 << gpioToShiftReg(pin)));
+      else if ( piModel == PI_MODEL_ODROIDXU_34 )   {
+        shift = (gpioToShiftReg(pin) * 4);
+        if(pin < 100)   {
+            *(gpio  + gpioToGPFSELReg(pin)) &= ~(0xF << shift);
+            *(gpio  + gpioToGPFSELReg(pin)) |=  (0x1 << shift);
+        }
+        else    {
+            *(gpio1 + gpioToGPFSELReg(pin)) &= ~(0xF << shift);
+            *(gpio1 + gpioToGPFSELReg(pin)) |=  (0x1 << shift);
+        }
+      }
+      else
+        *(gpio + fSel) = (*(gpio + fSel) & ~(7 << shift)) | (1 << shift);
+    }
+    else if (mode == SOFT_PWM_OUTPUT) {
+      if (piModel == PI_MODEL_ODROIDC  ||
+	  piModel == PI_MODEL_ODROIDC2 ||
+	  piModel == PI_MODEL_ODROIDXU_34 )
+            softPwmCreate (pin,     0, 100);
+      else
+            softPwmCreate (origPin, 0, 100);
+    }
+    else if (mode == SOFT_TONE_OUTPUT)  {
+      if (piModel == PI_MODEL_ODROIDC  ||
+	  piModel == PI_MODEL_ODROIDC2 ||
+	  piModel == PI_MODEL_ODROIDXU_34 )
+            softToneCreate (pin);
+      else
+            softToneCreate (origPin);
+    }
+    else if (mode == PWM_TONE_OUTPUT)
+    {
+      if (piModel == PI_MODEL_ODROIDC  ||
+	  piModel == PI_MODEL_ODROIDC2 ||
+	  piModel == PI_MODEL_ODROIDXU_34 )
+        return;
+
+      pinMode (origPin, PWM_OUTPUT) ;	// Call myself to enable PWM mode
+      pwmSetMode (PWM_MODE_MS) ;
+    }
+    else if (mode == PWM_OUTPUT)
+    {
+      if (piModel == PI_MODEL_ODROIDC  ||
+	  piModel == PI_MODEL_ODROIDC2 ||
+	  piModel == PI_MODEL_ODROIDXU_34 )
+        return;
+
+      if ((alt = gpioToPwmALT [pin]) == 0)	// Not a hardware capable PWM pin
+        return ;
+
+// Set pin to PWM mode
+
+      *(gpio + fSel) = (*(gpio + fSel) & ~(7 << shift)) | (alt << shift) ;
+      delayMicroseconds (110) ;		// See comments in pwmSetClockWPi
+
+      pwmSetMode  (PWM_MODE_BAL) ;	// Pi default mode
+      pwmSetRange (1024) ;		// Default range of 1024
+      pwmSetClock (32) ;		// 19.2 / 32 = 600KHz - Also starts the PWM
+    }
+    else if (mode == GPIO_CLOCK)
+    {
+      if (piModel == PI_MODEL_ODROIDC  ||
+	  piModel == PI_MODEL_ODROIDC2 ||
+	  piModel == PI_MODEL_ODROIDXU_34 )
+        return;
+
+      if ((alt = gpioToGpClkALT0 [pin]) == 0)	// Not a GPIO_CLOCK pin
+        return ;
+
+// Set pin to GPIO_CLOCK mode and set the clock frequency to 100KHz
+
+      *(gpio + fSel) = (*(gpio + fSel) & ~(7 << shift)) | (alt << shift) ;
+      delayMicroseconds (110) ;
+      gpioClockSet      (pin, 100000) ;
+    }
+  }
+  else
+  {
+    if ((node = wiringPiFindNode (pin)) != NULL)
+      node->pinMode (node, pin, mode) ;
+    return ;
+  }
+}
+
+
+/*
+ * pullUpDownCtrl:
+ *	Control the internal pull-up/down resistors on a GPIO pin
+ *	The Arduino only has pull-ups and these are enabled by writing 1
+ *	to a port when in input mode - this paradigm doesn't quite apply
+ *	here though.
+ *********************************************************************************
+ */
+
+void pullUpDnControl (int pin, int pud)
+{
+  struct wiringPiNodeStruct *node = wiringPiNodes ;
+  unsigned int  gpio_mask = PI_GPIO_MASK;
+  int origPin = pin;
+
+  if ( piModel == PI_MODEL_ODROIDC )        gpio_mask = ODROIDC_GPIO_MASK;
+  if ( piModel == PI_MODEL_ODROIDC2 )       gpio_mask = ODROIDC2_GPIO_MASK;
+  if ( piModel == PI_MODEL_ODROIDXU_34 )    gpio_mask = ODROIDXU_GPIO_MASK;
+
+  if ((pin & gpio_mask) == 0)		// On-Board Pin
+  {
+    /**/ if (wiringPiMode == WPI_MODE_PINS)
+      pin = pinToGpio [pin] ;
+    else if (wiringPiMode == WPI_MODE_PHYS)
+      pin = physToGpio [pin] ;
+    else if (wiringPiMode != WPI_MODE_GPIO)
+      return ;
+
+    wiringPiGpioCheck (__func__, origPin, pin);
+
+    if( piModel == PI_MODEL_ODROIDC || piModel == PI_MODEL_ODROIDC2 ) {
+
+      if(pud) {
+        // Enable Pull/Pull-down resister
+        *(gpio + gpioToPUENReg(pin)) = (*(gpio + gpioToPUENReg(pin)) | (1 << gpioToShiftReg(pin)));
+
+        if(pud == PUD_UP)
+          *(gpio + gpioToPUPDReg(pin)) = (*(gpio + gpioToPUPDReg(pin)) |  (1 << gpioToShiftReg(pin)));
+        else
+          *(gpio + gpioToPUPDReg(pin)) = (*(gpio + gpioToPUPDReg(pin)) & ~(1 << gpioToShiftReg(pin)));
+      }
+      else    // Disable Pull/Pull-down resister
+        *(gpio + gpioToPUENReg(pin)) = (*(gpio + gpioToPUENReg(pin)) & ~(1 << gpioToShiftReg(pin)));
+    }
+    else if ( piModel == PI_MODEL_ODROIDXU_34)  {
+      int shift = 0;
+
+      shift = (gpioToShiftReg(pin) * 2);
+
+      if(pud) {
+        if(pin < 100)   {
+            *(gpio  + gpioToPUPDReg(pin)) &= ~(0x3 << shift);
+            if(pud == PUD_UP)
+                *(gpio  + gpioToPUPDReg(pin)) |= (0x3 << shift);
+            else
+                *(gpio  + gpioToPUPDReg(pin)) |= (0x1 << shift);
+        }
+        else    {
+            *(gpio1 + gpioToPUPDReg(pin)) &= ~(0x3 << shift);
+            if(pud == PUD_UP)
+                *(gpio1 + gpioToPUPDReg(pin)) |= (0x3 << shift);
+            else
+                *(gpio1 + gpioToPUPDReg(pin)) |= (0x1 << shift);
+        }
+      }
+      else  {
+        // Disable Pull/Pull-down resister
+        if(pin < 100)
+            *(gpio  + gpioToPUPDReg(pin)) &= ~(0x3 << shift);
+        else
+            *(gpio1 + gpioToPUPDReg(pin)) &= ~(0x3 << shift);
+      }
+    }
+    else  {
+      *(gpio + GPPUD)              = pud & 3;		delayMicroseconds (5) ;
+      *(gpio + gpioToPUDCLK [pin]) = 1 << (pin & 31);	delayMicroseconds (5) ;
+
+      *(gpio + GPPUD)              = 0 ;		delayMicroseconds (5) ;
+      *(gpio + gpioToPUDCLK [pin]) = 0 ;		delayMicroseconds (5) ;
+    }
+  }
+  else  // Extension module
+  {
+    if ((node = wiringPiFindNode (pin)) != NULL)
+      node->pullUpDnControl (node, pin, pud) ;
+    return ;
+  }
+}
+
+
+/*
+ * digitalRead:
+ *	Read the value of a given Pin, returning HIGH or LOW
+ *********************************************************************************
+ */
+
+int digitalRead (int pin)
+{
+  char c ;
+  struct wiringPiNodeStruct *node = wiringPiNodes ;
+  unsigned int  gpio_mask = PI_GPIO_MASK;
+  int origPin = pin;
+
+  if ( piModel == PI_MODEL_ODROIDC )        gpio_mask = ODROIDC_GPIO_MASK;
+  if ( piModel == PI_MODEL_ODROIDC2 )       gpio_mask = ODROIDC2_GPIO_MASK;
+  if ( piModel == PI_MODEL_ODROIDXU_34 )    gpio_mask = ODROIDXU_GPIO_MASK;
+
+  if ((pin & gpio_mask) == 0)		// On-Board Pin
+  {
+    /**/ if (wiringPiMode == WPI_MODE_GPIO_SYS)	// Sys mode
+    {
+      int   fd_pos = gpioToPin(pin);
+
+      if ( sysFds [fd_pos] == -1)
+        return LOW ;
+
+      lseek  (sysFds [fd_pos], 0L, SEEK_SET) ;
+      read   (sysFds [fd_pos], &c, 1) ;
+      return (c == '0') ? LOW : HIGH ;
+    }
+    else if (wiringPiMode == WPI_MODE_PINS)
+      pin = pinToGpio [pin] ;
+    else if (wiringPiMode == WPI_MODE_PHYS)
+      pin = physToGpio [pin] ;
+    else if (wiringPiMode != WPI_MODE_GPIO)
+      return LOW ;
+
+    wiringPiGpioCheck (__func__, origPin, pin);
+
+    if      ( piModel == PI_MODEL_ODROIDC || piModel == PI_MODEL_ODROIDC2 )  {
+      if ((*(gpio + gpioToGPLEVReg(pin)) & (1 << gpioToShiftReg(pin))) != 0)
+        return HIGH ;
+      else
+        return LOW ;
+    }
+    else if ( piModel == PI_MODEL_ODROIDXU_34 ) {
+      if (pin < 100)
+        return  *(gpio  + gpioToGPLEVReg(pin)) & (1 << gpioToShiftReg(pin)) ? HIGH : LOW;
+      else
+        return  *(gpio1 + gpioToGPLEVReg(pin)) & (1 << gpioToShiftReg(pin)) ? HIGH : LOW;
+    }
+    else  {
+      if ((*(gpio + gpioToGPLEV [pin]) & (1 << (pin & 31))) != 0)
+        return HIGH ;
+      else
+        return LOW ;
+    }
+  }
+  else
+  {
+    if ((node = wiringPiFindNode (pin)) == NULL)
+      return LOW ;
+    return node->digitalRead (node, pin) ;
+  }
+}
+
+
+/*
+ * digitalWrite:
+ *	Set an output bit
+ *********************************************************************************
+ */
+
+void digitalWrite (int pin, int value)
+{
+  struct wiringPiNodeStruct *node = wiringPiNodes ;
+  unsigned int  gpio_mask = PI_GPIO_MASK;
+  int origPin = pin;
+
+  if ( piModel == PI_MODEL_ODROIDC )        gpio_mask = ODROIDC_GPIO_MASK;
+  if ( piModel == PI_MODEL_ODROIDC2 )       gpio_mask = ODROIDC2_GPIO_MASK;
+  if ( piModel == PI_MODEL_ODROIDXU_34 )    gpio_mask = ODROIDXU_GPIO_MASK;
+
+  if ((pin & gpio_mask) == 0)		// On-Board Pin
+  {
+    /**/ if (wiringPiMode == WPI_MODE_GPIO_SYS)	// Sys mode
+    {
+      int   fd_pos = gpioToPin(pin);
+
+      if (sysFds [fd_pos] != -1)
+      {
+        if (value == LOW)
+          write (sysFds [fd_pos], "0\n", 2) ;
+        else
+          write (sysFds [fd_pos], "1\n", 2) ;
+      }
+      return ;
+    }
+    else if (wiringPiMode == WPI_MODE_PINS)
+      pin = pinToGpio [pin] ;
+    else if (wiringPiMode == WPI_MODE_PHYS)
+      pin = physToGpio [pin] ;
+    else if (wiringPiMode != WPI_MODE_GPIO)
+      return ;
+
+    wiringPiGpioCheck (__func__, origPin, pin);
+
+    if      ( piModel == PI_MODEL_ODROIDC || piModel == PI_MODEL_ODROIDC2 )  {
+      if (value == LOW)
+        *(gpio + gpioToGPSETReg(pin)) &= ~(1 << gpioToShiftReg(pin));
+      else
+        *(gpio + gpioToGPSETReg(pin)) |=  (1 << gpioToShiftReg(pin));
+    }
+    else if ( piModel == PI_MODEL_ODROIDXU_34 ) {
+      if (pin < 100)    {
+        if (value == LOW)
+            *(gpio  + gpioToGPLEVReg(pin)) &= ~(1 << gpioToShiftReg(pin));
+        else
+            *(gpio  + gpioToGPLEVReg(pin)) |=  (1 << gpioToShiftReg(pin));
+      }
+      else  {
+        if (value == LOW)
+            *(gpio1 + gpioToGPLEVReg(pin)) &= ~(1 << gpioToShiftReg(pin));
+        else
+            *(gpio1 + gpioToGPLEVReg(pin)) |=  (1 << gpioToShiftReg(pin));
+      }
+    }
+  }
+  else
+  {
+    if ((node = wiringPiFindNode (pin)) != NULL)
+        node->digitalWrite (node, pin, value) ;
+  }
+}
+
+
+/*
+ * pwmWrite:
+ *	Set an output PWM value
+ *********************************************************************************
+ */
+
+void pwmWrite (int pin, int value)
+{
+  struct wiringPiNodeStruct *node = wiringPiNodes ;
+  unsigned int  gpio_mask = PI_GPIO_MASK;
+
+  if (	piModel == PI_MODEL_ODROIDC  ||
+	piModel == PI_MODEL_ODROIDC2 ||
+	piModel == PI_MODEL_ODROIDXU_34)  {
+	fprintf (stderr, "%s : Unsupport function on %s model\n",
+		__func__, piModelNames [piModel]);
+	exit (EXIT_FAILURE) ;
+  }
+
+  if ((pin & gpio_mask) == 0)		// On-Board Pin
+  {
+    /**/ if (wiringPiMode == WPI_MODE_PINS)
+      pin = pinToGpio [pin] ;
+    else if (wiringPiMode == WPI_MODE_PHYS)
+      pin = physToGpio [pin] ;
+    else if (wiringPiMode != WPI_MODE_GPIO)
+      return ;
+
+    *(pwm + gpioToPwmPort [pin]) = value ;
+  }
+  else
+  {
+    if ((node = wiringPiFindNode (pin)) != NULL)
+      node->pwmWrite (node, pin, value) ;
+  }
+}
+
+
+/*
+ * analogRead:
+ *	Read the analog value of a given Pin. 
+ *	There is no on-board Pi analog hardware,
+ *	so this needs to go to a new node.
+ *********************************************************************************
+ */
+
+int analogRead (int pin)
+{
+  struct wiringPiNodeStruct *node = wiringPiNodes ;
+  unsigned char value[5] = {0,};
+
+  if (  piModel == PI_MODEL_ODROIDC  ||
+	piModel == PI_MODEL_ODROIDC2 ||
+	piModel == PI_MODEL_ODROIDXU_34 )  {
+    if(pin < 2)   {
+      if (adcFds [pin] == -1)
+        return 0;
+      lseek (adcFds [pin], 0L, SEEK_SET);
+      read  (adcFds [pin], &value[0], 4);
+      return  atoi(value);
+    }
+  }
+
+  if ((node = wiringPiFindNode (pin)) == NULL)
+    return 0 ;
+  else
+    return node->analogRead (node, pin) ;
+}
+
+
+/*
+ * analogWrite:
+ *	Write the analog value to the given Pin. 
+ *	There is no on-board Pi analog hardware,
+ *	so this needs to go to a new node.
+ *********************************************************************************
+ */
+
+void analogWrite (int pin, int value)
+{
+  struct wiringPiNodeStruct *node = wiringPiNodes ;
+
+  if ((node = wiringPiFindNode (pin)) == NULL)
+    return ;
+
+  node->analogWrite (node, pin, value) ;
+}
+
+
+/*
+ * pwmToneWrite:
+ *	Pi Specific.
+ *      Output the given frequency on the Pi's PWM pin
+ *********************************************************************************
+ */
+
+void pwmToneWrite (int pin, int freq)
+{
+  int range ;
+
+  if (	piModel == PI_MODEL_ODROIDC  ||
+	piModel == PI_MODEL_ODROIDC2 ||
+	piModel == PI_MODEL_ODROIDXU_34)  {
+	fprintf (stderr, "%s : Unsupport function on %s model\n",
+		__func__, piModelNames [piModel]);
+	exit (EXIT_FAILURE) ;
+  }
+
+  if (freq == 0)
+    pwmWrite (pin, 0) ;             // Off
+  else
+  {
+    range = 600000 / freq ;
+    pwmSetRange (range) ;
+    pwmWrite    (pin, freq / 2) ;
+  }
+}
+
+
+
+/*
+ * digitalWriteByte:
+ *	Pi Specific
+ *	Write an 8-bit byte to the first 8 GPIO pins - try to do it as
+ *	fast as possible.
+ *	However it still needs 2 operations to set the bits, so any external
+ *	hardware must not rely on seeing a change as there will be a change 
+ *	to set the outputs bits to zero, then another change to set the 1's
+ *********************************************************************************
+ */
+
+union	reg_bitfield {
+	unsigned int	wvalue;
+	struct {
+		unsigned int	bit0  : 1;
+		unsigned int	bit1  : 1;
+		unsigned int	bit2  : 1;
+		unsigned int	bit3  : 1;
+		unsigned int	bit4  : 1;
+		unsigned int	bit5  : 1;
+		unsigned int	bit6  : 1;
+		unsigned int	bit7  : 1;
+		unsigned int	bit8  : 1;
+		unsigned int	bit9  : 1;
+		unsigned int	bit10 : 1;
+		unsigned int	bit11 : 1;
+		unsigned int	bit12 : 1;
+		unsigned int	bit13 : 1;
+		unsigned int	bit14 : 1;
+		unsigned int	bit15 : 1;
+		unsigned int	bit16 : 1;
+		unsigned int	bit17 : 1;
+		unsigned int	bit18 : 1;
+		unsigned int	bit19 : 1;
+		unsigned int	bit20 : 1;
+		unsigned int	bit21 : 1;
+		unsigned int	bit22 : 1;
+		unsigned int	bit23 : 1;
+		unsigned int	bit24 : 1;
+		unsigned int	bit25 : 1;
+		unsigned int	bit26 : 1;
+		unsigned int	bit27 : 1;
+		unsigned int	bit28 : 1;
+		unsigned int	bit29 : 1;
+		unsigned int	bit30 : 1;
+		unsigned int	bit31 : 1;
+	} bits;
+};
+
+void digitalWriteByte_XU(int value)
+{
+	union	reg_bitfield	gpx1, gpx2, gpa0;
+
+	/* Read data register */
+	gpx1.wvalue = *(gpio  + (GPIO_X1_DAT_OFFSET >> 2));
+	gpx2.wvalue = *(gpio  + (GPIO_X2_DAT_OFFSET >> 2));
+	gpa0.wvalue = *(gpio1 + (GPIO_A0_DAT_OFFSET >> 2));
+
+	/* Wiring PI GPIO0 = XU3/4 GPA0.3 */
+	gpa0.bits.bit3 = (value & 0x01);
+	/* Wiring PI GPIO1 = XU3/4 GPA0.2 */
+	gpa0.bits.bit2 = (value & 0x02);
+	/* Wiring PI GPIO2 = XU3/4 GPX1.5 */
+	gpx1.bits.bit5 = (value & 0x04);
+	/* Wiring PI GPIO3 = XU3/4 GPX1.6 */
+	gpx1.bits.bit6 = (value & 0x08);
+	/* Wiring PI GPIO4 = XU3/4 GPX1.3 */
+	gpx1.bits.bit3 = (value & 0x10);
+	/* Wiring PI GPIO5 = XU3/4 GPX1.7 */
+	gpx1.bits.bit7 = (value & 0x20);
+	/* Wiring PI GPIO6 = XU3/4 GPX2.0 */
+	gpx2.bits.bit0 = (value & 0x40);
+	/* Wiring PI GPIO7 = XU3/4 GPX1.2 */
+	gpx1.bits.bit2 = (value & 0x80);
+
+	/* update data register */
+	*(gpio  + (GPIO_X1_DAT_OFFSET >> 2)) = gpx1.wvalue;
+	*(gpio  + (GPIO_X2_DAT_OFFSET >> 2)) = gpx2.wvalue;
+	*(gpio1 + (GPIO_A0_DAT_OFFSET >> 2)) = gpa0.wvalue;
+}
+
+void digitalWriteByte_C(int value)
+{
+	union	reg_bitfield	gpiox, gpioy;
+
+	gpiox.wvalue = *(gpio + GPIOX_INP_REG_OFFSET);
+	gpioy.wvalue = *(gpio + GPIOY_INP_REG_OFFSET);
+
+	/* Wiring PI GPIO0 = C1 GPIOY.8 */
+	gpioy.bits.bit8 = (value & 0x01);
+	/* Wiring PI GPIO1 = C1 GPIOY.7 */
+	gpioy.bits.bit7 = (value & 0x02);
+	/* Wiring PI GPIO2 = C1 GPIOX.19 */
+	gpiox.bits.bit19 = (value & 0x04);
+	/* Wiring PI GPIO3 = C1 GPIOX.18 */
+	gpiox.bits.bit18 = (value & 0x08);
+	/* Wiring PI GPIO4 = C1 GPIOX.7 */
+	gpiox.bits.bit7 = (value & 0x10);
+	/* Wiring PI GPIO5 = C1 GPIOX.5 */
+	gpiox.bits.bit5 = (value & 0x20);
+	/* Wiring PI GPIO6 = C1 GPIOX.6 */
+	gpiox.bits.bit6 = (value & 0x40);
+	/* Wiring PI GPIO7 = C1 GPIOY.3 */
+	gpioy.bits.bit3 = (value & 0x80);
+
+	*(gpio + GPIOX_OUTP_REG_OFFSET) = gpiox.wvalue;
+	*(gpio + GPIOY_OUTP_REG_OFFSET) = gpioy.wvalue;
+}
+
+void digitalWriteByte_C2(int value)
+{
+	union	reg_bitfield	gpiox;
+
+	gpiox.wvalue = *(gpio + C2_GPIOX_INP_REG_OFFSET);
+
+	/* Wiring PI GPIO0 = C1 GPIOX.19 */
+	gpiox.bits.bit19 = (value & 0x01);
+	/* Wiring PI GPIO1 = C1 GPIOX.10 */
+	gpiox.bits.bit10 = (value & 0x02);
+	/* Wiring PI GPIO2 = C1 GPIOX.11 */
+	gpiox.bits.bit11 = (value & 0x04);
+	/* Wiring PI GPIO3 = C1 GPIOX.9 */
+	gpiox.bits.bit9 = (value & 0x08);
+	/* Wiring PI GPIO4 = C1 GPIOX.8 */
+	gpiox.bits.bit8 = (value & 0x10);
+	/* Wiring PI GPIO5 = C1 GPIOX.5 */
+	gpiox.bits.bit5 = (value & 0x20);
+	/* Wiring PI GPIO6 = C1 GPIOX.3 */
+	gpiox.bits.bit3 = (value & 0x40);
+	/* Wiring PI GPIO7 = C1 GPIOX.21 */
+	gpiox.bits.bit21 = (value & 0x80);
+
+	*(gpio + C2_GPIOX_OUTP_REG_OFFSET) = gpiox.wvalue;
+}
+
+void digitalWriteByte (int value)
+{
+  uint32_t pinSet = 0 ;
+  uint32_t pinClr = 0 ;
+  int mask = 1 ;
+  int pin ;
+
+  /**/ if (wiringPiMode == WPI_MODE_GPIO_SYS)
+  {
+    for (pin = 0 ; pin < 8 ; ++pin)
+    {
+      digitalWrite (pinToGpio[pin], value & mask) ;
+      mask <<= 1 ;
+    }
+    return ;
+  }
+  else
+  {
+    switch(piModel) {
+    case PI_MODEL_ODROIDC:
+      digitalWriteByte_C(value);
+      return;
+    case PI_MODEL_ODROIDC2:
+      digitalWriteByte_C2(value);
+      return;
+    case PI_MODEL_ODROIDXU_34:
+      digitalWriteByte_XU(value);
+      return;
+    default :
+      break;
+    }
+    for (pin = 0 ; pin < 8 ; ++pin)
+    {
+      if ((value & mask) == 0)
+        pinClr |= (1 << pinToGpio [pin]) ;
+      else
+        pinSet |= (1 << pinToGpio [pin]) ;
+
+      mask <<= 1 ;
+    }
+
+    *(gpio + gpioToGPCLR [0]) = pinClr ;
+    *(gpio + gpioToGPSET [0]) = pinSet ;
+  }
+}
+
+
+/*
+ * waitForInterrupt:
+ *	Pi Specific.
+ *	Wait for Interrupt on a GPIO pin.
+ *	This is actually done via the /sys/class/gpio interface regardless of
+ *	the wiringPi access mode in-use. Maybe sometime it might get a better
+ *	way for a bit more efficiency.
+ *********************************************************************************
+ */
+
+
+int waitForInterrupt (int pin, int mS)
+{
+  int fd, x ;
+  uint8_t c ;
+  struct pollfd polls ;
+
+    if ((fd = sysFds [pin]) == -1)
+      return -2 ;
+
+    // Setup poll structure
+    polls.fd     = fd ;
+    polls.events = POLLPRI ;	// Urgent data!
+
+
+// Wait for it ...
+wait:
+  x = poll (&polls, 1, mS) ;
+
+// Do a dummy read to clear the interrupt
+//	A one character read appars to be enough.
+//	Followed by a seek to reset it.
+
+  (void)read (fd, &c, 1) ;
+  lseek (fd, 0, SEEK_SET) ;
+
+  return x ;
+}
+
+
+/*
+ * interruptHandler:
+ *	This is a thread and gets started to wait for the interrupt we're
+ *	hoping to catch. It will call the user-function when the interrupt
+ *	fires.
+ *********************************************************************************
+ */
+
+static void *interruptHandler (void *arg)
+{
+  int myPin ;
+
+  (void)piHiPri (55) ;	// Only effective if we run as root
+
+  myPin   = pinPass ;
+  pinPass = -1 ;
+
+    for (;;)
+      if (waitForInterrupt (myPin, -1) > 0)
+        isrFunctions [myPin] () ;
+
+  return NULL ;
+}
+
+
+/*
+ * wiringPiISR:
+ *	Pi Specific.
+ *	Take the details and create an interrupt handler that will do a call-
+ *	back to the user supplied function.
+ *********************************************************************************
+ */
+
+int wiringPiISR (int pin, int mode, void (*function)(void))
+{
+  pthread_t threadId ;
+  const char *modeS ;
+  char fName   [64] ;
+  char  pinS [8] ;
+  pid_t pid ;
+  int   count, i ;
+  char  c ;
+  int   bcmGpioPin ;
+
+  /**/ if (wiringPiMode == WPI_MODE_UNINITIALISED)
+    return wiringPiFailure (WPI_FATAL, "wiringPiISR: wiringPi has not been initialised. Unable to continue.\n") ;
+  else if (wiringPiMode == WPI_MODE_PINS)
+    bcmGpioPin = pinToGpio [pin & 63] ;
+  else if (wiringPiMode == WPI_MODE_PHYS)
+    bcmGpioPin = physToGpio [pin & 63] ;
+  else
+    bcmGpioPin = pin ;
+
+  if ( piModel == PI_MODEL_ODROIDC )  {
+    if ((pin < 0) || (pin > 128))
+      return wiringPiFailure (WPI_FATAL, "wiringPiISR: pin must be 0-128 (%d)\n", pin) ;
+  }
+  else if ( piModel == PI_MODEL_ODROIDXU_34 || piModel == PI_MODEL_ODROIDC2 )   {
+    if ((pin < 0) || (pin > 256))
+      return wiringPiFailure (WPI_FATAL, "wiringPiISR: pin must be 0-256 (%d)\n", pin) ;
+  }
+  else  {
+    if ((pin < 0) || (pin > 63))
+      return wiringPiFailure (WPI_FATAL, "wiringPiISR: pin must be 0-63 (%d)\n", pin) ;
+  }
+
+// Now export the pin and set the right edge
+//	We're going to use the gpio program to do this, so it assumes
+//	a full installation of wiringPi. It's a bit 'clunky', but it
+//	is a way that will work when we're running in "Sys" mode, as
+//	a non-root user. (without sudo)
+
+  if (mode != INT_EDGE_SETUP)
+  {
+    /**/ if (mode == INT_EDGE_FALLING)
+      modeS = "falling" ;
+    else if (mode == INT_EDGE_RISING)
+      modeS = "rising" ;
+    else
+      modeS = "both" ;
+
+    sprintf (pinS, "%d", bcmGpioPin) ;
+
+    if ((pid = fork ()) < 0)	// Fail
+      return wiringPiFailure (WPI_FATAL, "wiringPiISR: fork failed: %s\n", strerror (errno)) ;
+
+    if (pid == 0)	// Child, exec
+    {
+      /**/ if (access ("/usr/local/bin/gpio", X_OK) == 0)
+      {
+        execl ("/usr/local/bin/gpio", "gpio", "edge", pinS, modeS, (char *)NULL) ;
+        return wiringPiFailure (WPI_FATAL, "wiringPiISR: execl failed: %s\n", strerror (errno)) ;
+      }
+      else if (access ("/usr/bin/gpio", X_OK) == 0)
+      {
+        execl ("/usr/bin/gpio", "gpio", "edge", pinS, modeS, (char *)NULL) ;
+        return wiringPiFailure (WPI_FATAL, "wiringPiISR: execl failed: %s\n", strerror (errno)) ;
+      }
+      else
+        return wiringPiFailure (WPI_FATAL, "wiringPiISR: Can't find gpio program\n") ;
+    }
+    else		// Parent, wait
+      wait (NULL) ;
+  }
+
+// Now pre-open the /sys/class node - but it may already be open if
+//	we are in Sys mode...
+
+    if (sysFds [pin] == -1)
+    {
+      sprintf (fName, "/sys/class/gpio/gpio%d/value", bcmGpioPin) ;
+
+      if ((sysFds [pin] = open (fName, O_RDWR)) < 0)
+        return wiringPiFailure (WPI_FATAL, "wiringPiISR: unable to open %s: %s\n", fName, strerror (errno)) ;
+      sysFdIrqType [pin] = mode;
+    }
+
+  // Clear any initial pending interrupt
+
+    ioctl (sysFds [pin], FIONREAD, &count) ;
+    for (i = 0 ; i < count ; ++i)
+      read (sysFds [pin], &c, 1) ;
+
+    isrFunctions [pin] = function ;
+
+  pthread_mutex_lock (&pinMutex) ;
+    pinPass = pin ;
+    pthread_create (&threadId, NULL, interruptHandler, NULL) ;
+    while (pinPass != -1)
+      delay (1) ;
+  pthread_mutex_unlock (&pinMutex) ;
+
+  return 0 ;
+}
+
+
+/*
+ * initialiseEpoch:
+ *	Initialise our start-of-time variable to be the current unix
+ *	time in milliseconds and microseconds.
+ *********************************************************************************
+ */
+
+static void initialiseEpoch (void)
+{
+  struct timeval tv ;
+
+  gettimeofday (&tv, NULL) ;
+  epochMilli = (uint64_t)tv.tv_sec * (uint64_t)1000    + (uint64_t)(tv.tv_usec / 1000) ;
+  epochMicro = (uint64_t)tv.tv_sec * (uint64_t)1000000 + (uint64_t)(tv.tv_usec) ;
+}
+
+
+/*
+ * delay:
+ *	Wait for some number of milliseconds
+ *********************************************************************************
+ */
+
+void delay (unsigned int howLong)
+{
+  struct timespec sleeper, dummy ;
+
+  sleeper.tv_sec  = (time_t)(howLong / 1000) ;
+  sleeper.tv_nsec = (long)(howLong % 1000) * 1000000 ;
+
+  nanosleep (&sleeper, &dummy) ;
+}
+
+
+/*
+ * delayMicroseconds:
+ *	This is somewhat intersting. It seems that on the Pi, a single call
+ *	to nanosleep takes some 80 to 130 microseconds anyway, so while
+ *	obeying the standards (may take longer), it's not always what we
+ *	want!
+ *
+ *	So what I'll do now is if the delay is less than 100uS we'll do it
+ *	in a hard loop, watching a built-in counter on the ARM chip. This is
+ *	somewhat sub-optimal in that it uses 100% CPU, something not an issue
+ *	in a microcontroller, but under a multi-tasking, multi-user OS, it's
+ *	wastefull, however we've no real choice )-:
+ *
+ *      Plan B: It seems all might not be well with that plan, so changing it
+ *      to use gettimeofday () and poll on that instead...
+ *********************************************************************************
+ */
+
+void delayMicrosecondsHard (unsigned int howLong)
+{
+  struct timeval tNow, tLong, tEnd ;
+
+  gettimeofday (&tNow, NULL) ;
+  tLong.tv_sec  = howLong / 1000000 ;
+  tLong.tv_usec = howLong % 1000000 ;
+  timeradd (&tNow, &tLong, &tEnd) ;
+
+  while (timercmp (&tNow, &tEnd, <))
+    gettimeofday (&tNow, NULL) ;
+}
+
+void delayMicroseconds (unsigned int howLong)
+{
+  struct timespec sleeper ;
+  unsigned int uSecs = howLong % 1000000 ;
+  unsigned int wSecs = howLong / 1000000 ;
+
+  /**/ if (howLong ==   0)
+    return ;
+  else if (howLong  < 100)
+    delayMicrosecondsHard (howLong) ;
+  else
+  {
+    sleeper.tv_sec  = wSecs ;
+    sleeper.tv_nsec = (long)(uSecs * 1000L) ;
+    nanosleep (&sleeper, NULL) ;
+  }
+}
+
+
+/*
+ * millis:
+ *	Return a number of milliseconds as an unsigned int.
+ *********************************************************************************
+ */
+
+unsigned int millis (void)
+{
+  struct timeval tv ;
+  uint64_t now ;
+
+  gettimeofday (&tv, NULL) ;
+  now  = (uint64_t)tv.tv_sec * (uint64_t)1000 + (uint64_t)(tv.tv_usec / 1000) ;
+
+  return (uint32_t)(now - epochMilli) ;
+}
+
+
+/*
+ * micros:
+ *	Return a number of microseconds as an unsigned int.
+ *********************************************************************************
+ */
+
+unsigned int micros (void)
+{
+  struct timeval tv ;
+  uint64_t now ;
+
+  gettimeofday (&tv, NULL) ;
+  now  = (uint64_t)tv.tv_sec * (uint64_t)1000000 + (uint64_t)tv.tv_usec ;
+
+  return (uint32_t)(now - epochMicro) ;
+}
+
+
+/*
+ * wiringPiSetup:
+ *	Must be called once at the start of your program execution.
+ *
+ * Default setup: Initialises the system into wiringPi Pin mode and uses the
+ *	memory mapped hardware directly.
+ *
+ * Changed now to revert to "gpio" mode if we're running on a Compute Module.
+ *********************************************************************************
+ */
+
+int wiringPiSetup (void)
+{
+  int   fd ;
+  int   boardRev ;
+  int   model, rev, mem, maker, overVolted ;
+
+  if (getenv (ENV_DEBUG) != NULL)
+    wiringPiDebug = TRUE ;
+
+  if (getenv (ENV_CODES) != NULL)
+    wiringPiReturnCodes = TRUE ;
+
+  // Open the master /dev/memory device
+  if (access("/dev/gpiomem",0) == 0) {
+    if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
+      return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: Unable to open /dev/gpiomem: %s\n", strerror (errno)) ;
+  }
+  else {
+    if (geteuid () != 0)
+      (void)wiringPiFailure (WPI_FATAL, "wiringPiSetup: Must be root. (Did you forget sudo?)\n") ;
+
+    if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
+      return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: Unable to open /dev/mem: %s\n", strerror (errno)) ;
+  }
+
+  if (wiringPiDebug)
+    printf ("wiringPi: wiringPiSetup called\n") ;
+
+  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
+
+  if ( model == PI_MODEL_ODROIDC )  {
+
+     pinToGpio =  pinToGpioOdroidC;
+    pin_array_count = ARRAY_SIZE(pinToGpioOdroidC);
+    physToGpio = physToGpioOdroidC;
+
+  // GPIO:
+
+    gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, ODROID_GPIO_BASE) ;
+    if ((int32_t)gpio == -1)
+      return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (GPIO) failed: %s\n", strerror (errno)) ;
+
+  // ADC
+  // ADC sysfs open (/sys/class/saradc/saradc_ch0, ch1)
+    adcFds [0] = open (piAinNode0, O_RDONLY) ;
+    adcFds [1] = open (piAinNode1, O_RDONLY) ;
+  }
+  else if ( model == PI_MODEL_ODROIDC2 )	{
+
+    if(rev == PI_VERSION_1) {
+	 pinToGpio =  pinToGpioOdroidC2_Rev1_0;
+	 pin_array_count = ARRAY_SIZE(pinToGpioOdroidC2_Rev1_0);
+	physToGpio = physToGpioOdroidC2_Rev1_0;
+    }
+    else {
+	 pinToGpio =  pinToGpioOdroidC2_Rev1_1;
+	 pin_array_count = ARRAY_SIZE(pinToGpioOdroidC2_Rev1_1);
+	physToGpio = physToGpioOdroidC2_Rev1_1;
+    }
+
+  // GPIO:
+    gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, ODROIDC2_GPIO_BASE) ;
+    if ((int32_t)gpio == -1)
+      return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (GPIO) failed: %s\n", strerror (errno)) ;
+
+  // ADC
+  // ADC sysfs open (/sys/class/saradc/saradc_ch0, ch1)
+    adcFds [0] = open (C2_piAinNode0, O_RDONLY) ;
+    adcFds [1] = open (C2_piAinNode1, O_RDONLY) ;
+  }
+  else if ( model == PI_MODEL_ODROIDXU_34 ) {
+  // Check the kernel version and then set the ADC files
+    struct utsname uname_buf;
+
+    uname(&uname_buf);
+    if (strncmp(uname_buf.release, "4.14", 4) == 0) {
+        piAinNode0_xu = "/sys/devices/platform/soc/12d10000.adc/iio:device0/in_voltage0_raw";
+        piAinNode1_xu = "/sys/devices/platform/soc/12d10000.adc/iio:device0/in_voltage3_raw";
+    } else if (strncmp(uname_buf.release, "4.9", 3) == 0) {
+        piAinNode0_xu = "/sys/devices/platform/soc:/12d10000.adc:/iio:device0/in_voltage0_raw";
+        piAinNode1_xu = "/sys/devices/platform/soc:/12d10000.adc:/iio:device0/in_voltage3_raw";
+    } else { // 3.10 kernel
+        piAinNode0_xu = "/sys/devices/12d10000.adc/iio:device0/in_voltage0_raw";
+        piAinNode1_xu = "/sys/devices/12d10000.adc/iio:device0/in_voltage3_raw";
+    }
+
+     pinToGpio =  pinToGpioOdroidXU;
+     pin_array_count = ARRAY_SIZE(pinToGpioOdroidXU);
+    physToGpio = physToGpioOdroidXU;
+
+  // GPIO:
+  //#define ODROIDXU_GPX_BASE   0x13400000  // GPX0,1,2,3
+    gpio  = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, ODROIDXU_GPX_BASE) ;
+    if ((int32_t)gpio == -1)
+      return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (GPIO) failed: %s\n", strerror (errno)) ;
+
+  //#define ODROIDXU_GPA_BASE   0x14010000  // GPA0,1,2, GPB0,1,2,3,4
+    gpio1 = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, ODROIDXU_GPA_BASE) ;
+    if ((int32_t)gpio1 == -1)
+      return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (GPIO) failed: %s\n", strerror (errno)) ;
+
+  // ADC
+  // ADC Fds[0] = ("/sys/devices/12d10000.adc/iio:device0/in_voltage0_raw")
+  // ADC Fds[1] = ("/sys/devices/12d10000.adc/iio:device0/in_voltage3_raw")
+    adcFds [0] = open (piAinNode0_xu, O_RDONLY) ;
+    adcFds [1] = open (piAinNode1_xu, O_RDONLY) ;
+  }
+  else  {
+  // GPIO:
+    boardRev = piBoardRev () ;
+
+    /**/ if (boardRev == 1)	// A, B, Rev 1, 1.1
+    {
+       pinToGpio =  pinToGpioR1 ;
+      physToGpio = physToGpioR1 ;
+    }
+    else 				// A, B, Rev 2, B+, CM
+    {
+       pinToGpio =  pinToGpioR2 ;
+      physToGpio = physToGpioR2 ;
+    }
+
+    gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_BASE) ;
+    if ((int32_t)gpio == -1)
+      return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (GPIO) failed: %s\n", strerror (errno)) ;
+
+  // PWM
+
+    pwm = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_PWM) ;
+    if ((int32_t)pwm == -1)
+      return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (PWM) failed: %s\n", strerror (errno)) ;
+
+  // Clock control (needed for PWM)
+
+    clk = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, CLOCK_BASE) ;
+    if ((int32_t)clk == -1)
+      return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (CLOCK) failed: %s\n", strerror (errno)) ;
+
+  // The drive pads
+
+    pads = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_PADS) ;
+    if ((int32_t)pads == -1)
+      return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (PADS) failed: %s\n", strerror (errno)) ;
+  }
+
+#ifdef	USE_TIMER
+// The system timer
+
+  timer = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_TIMER) ;
+  if ((int32_t)timer == -1)
+    return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (TIMER) failed: %s\n", strerror (errno)) ;
+
+// Set the timer to free-running, 1MHz.
+//	0xF9 is 249, the timer divide is base clock / (divide+1)
+//	so base clock is 250MHz / 250 = 1MHz.
+
+  *(timer + TIMER_CONTROL) = 0x0000280 ;
+  *(timer + TIMER_PRE_DIV) = 0x00000F9 ;
+  timerIrqRaw = timer + TIMER_IRQ_RAW ;
+#endif
+
+  initialiseEpoch () ;
+
+// If we're running on a compute module, then wiringPi pin numbers don't really many anything...
+
+  if (model == PI_MODEL_CM)
+    wiringPiMode = WPI_MODE_GPIO ;
+  else
+    wiringPiMode = WPI_MODE_PINS ;
+
+  return 0 ;
+}
+
+
+/*
+ * wiringPiSetupGpio:
+ *	Must be called once at the start of your program execution.
+ *
+ * GPIO setup: Initialises the system into GPIO Pin mode and uses the
+ *	memory mapped hardware directly.
+ *********************************************************************************
+ */
+
+int wiringPiSetupGpio (void)
+{
+  (void)wiringPiSetup () ;
+
+  if (wiringPiDebug)
+    printf ("wiringPi: wiringPiSetupGpio called\n") ;
+
+  wiringPiMode = WPI_MODE_GPIO ;
+
+  return 0 ;
+}
+
+
+/*
+ * wiringPiSetupPhys:
+ *	Must be called once at the start of your program execution.
+ *
+ * Phys setup: Initialises the system into Physical Pin mode and uses the
+ *	memory mapped hardware directly.
+ *********************************************************************************
+ */
+
+int wiringPiSetupPhys (void)
+{
+  (void)wiringPiSetup () ;
+
+  if (wiringPiDebug)
+    printf ("wiringPi: wiringPiSetupPhys called\n") ;
+
+  wiringPiMode = WPI_MODE_PHYS ;
+
+  return 0 ;
+}
+
+
+/*
+ * wiringPiSetupSys:
+ *	Must be called once at the start of your program execution.
+ *
+ * Initialisation (again), however this time we are using the /sys/class/gpio
+ *	interface to the GPIO systems - slightly slower, but always usable as
+ *	a non-root user, assuming the devices are already exported and setup correctly.
+ */
+
+int wiringPiSetupSys (void)
+{
+  int boardRev ;
+  int model, rev, mem, maker, overVolted ;
+  int pin, offset;
+  char fName [128] ;
+
+  if (getenv (ENV_DEBUG) != NULL)
+    wiringPiDebug = TRUE ;
+
+  if (getenv (ENV_CODES) != NULL)
+    wiringPiReturnCodes = TRUE ;
+
+  if (wiringPiDebug)
+    printf ("wiringPi: wiringPiSetupSys called\n") ;
+
+  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
+
+  if ( model == PI_MODEL_ODROIDC )  {
+     pinToGpio =  pinToGpioOdroidC ;
+     pin_array_count = ARRAY_SIZE(pinToGpioOdroidC);
+    physToGpio = physToGpioOdroidC ;
+
+  // ADC sysfs open (/sys/class/saradc/saradc_ch0, ch1)
+
+    adcFds [0] = open (piAinNode0, O_RDONLY) ;
+    adcFds [1] = open (piAinNode1, O_RDONLY) ;
+  }
+  else if ( model == PI_MODEL_ODROIDC2 )	{
+    if(rev == PI_VERSION_1) {
+	 pinToGpio =  pinToGpioOdroidC2_Rev1_0;
+	 pin_array_count = ARRAY_SIZE(pinToGpioOdroidC2_Rev1_0);
+	physToGpio = physToGpioOdroidC2_Rev1_0;
+    }
+    else {
+	 pinToGpio =  pinToGpioOdroidC2_Rev1_1;
+	 pin_array_count = ARRAY_SIZE(pinToGpioOdroidC2_Rev1_1);
+	physToGpio = physToGpioOdroidC2_Rev1_1;
+    }
+
+  // ADC sysfs open (/sys/class/saradc/saradc_ch0, ch1)
+
+    adcFds [0] = open (C2_piAinNode0, O_RDONLY) ;
+    adcFds [1] = open (C2_piAinNode1, O_RDONLY) ;
+  }
+  else if ( model == PI_MODEL_ODROIDXU_34 ) {
+  // Check the kernel version and then set the ADC files
+    struct utsname uname_buf;
+
+    uname(&uname_buf);
+    if (strncmp(uname_buf.release, "4.14", 4) == 0) {
+        piAinNode0_xu = "/sys/devices/platform/soc/12d10000.adc/iio:device0/in_voltage0_raw";
+        piAinNode1_xu = "/sys/devices/platform/soc/12d10000.adc/iio:device0/in_voltage3_raw";
+    } else if (strncmp(uname_buf.release, "4.9", 3) == 0) {
+        piAinNode0_xu = "/sys/devices/platform/soc:/12d10000.adc:/iio:device0/in_voltage0_raw";
+        piAinNode1_xu = "/sys/devices/platform/soc:/12d10000.adc:/iio:device0/in_voltage3_raw";
+    } else { // 3.10 kernel
+        piAinNode0_xu = "/sys/devices/12d10000.adc/iio:device0/in_voltage0_raw";
+        piAinNode1_xu = "/sys/devices/12d10000.adc/iio:device0/in_voltage3_raw";
+    }
+
+     pinToGpio =  pinToGpioOdroidXU ;
+     pin_array_count = ARRAY_SIZE(pinToGpioOdroidXU);
+    physToGpio = physToGpioOdroidXU ;
+
+  // ADC
+  // ADC Fds[0] = ("/sys/devices/12d10000.adc/iio:device0/in_voltage0_raw")
+  // ADC Fds[1] = ("/sys/devices/12d10000.adc/iio:device0/in_voltage3_raw")
+    adcFds [0] = open (piAinNode0_xu, O_RDONLY) ;
+    adcFds [1] = open (piAinNode1_xu, O_RDONLY) ;
+  }
+
+// Open and scan the directory, looking for exported GPIOs, and pre-open
+//	the 'value' interface to speed things up for later
+    for (pin = 0 ; pin < 64 ; ++pin)
+    {
+      sprintf (fName, "/sys/class/gpio/gpio%d/value", pinToGpio[pin]) ;
+      sysFds [pin] = open (fName, O_RDWR) ;
+    }
+
+  initialiseEpoch () ;
+
+  wiringPiMode = WPI_MODE_GPIO_SYS ;
+
+  return 0 ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringPi.h b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPi.h
new file mode 100755
index 00000000..63461546
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPi.h
@@ -0,0 +1,229 @@
+/*
+ * wiringPi:
+ *	Arduino compatable (ish) Wiring library for the Raspberry Pi
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifndef	__WIRING_PI_H__
+#define	__WIRING_PI_H__
+
+// Handy defines
+
+// Deprecated
+#define	NUM_PINS	17
+
+#define	WPI_MODE_PINS		 0
+#define	WPI_MODE_GPIO		 1
+#define	WPI_MODE_GPIO_SYS	 2
+#define	WPI_MODE_PHYS		 3
+#define	WPI_MODE_PIFACE		 4
+#define	WPI_MODE_UNINITIALISED	-1
+
+// Pin modes
+
+#define	INPUT			 0
+#define	OUTPUT			 1
+#define	PWM_OUTPUT		 2
+#define	GPIO_CLOCK		 3
+#define	SOFT_PWM_OUTPUT		 4
+#define	SOFT_TONE_OUTPUT	 5
+#define	PWM_TONE_OUTPUT		 6
+
+#define	LOW			 0
+#define	HIGH			 1
+
+// Pull up/down/none
+
+#define	PUD_OFF			 0
+#define	PUD_DOWN		 1
+#define	PUD_UP			 2
+
+// PWM
+
+#define	PWM_MODE_MS		0
+#define	PWM_MODE_BAL		1
+
+// Interrupt levels
+
+#define	INT_EDGE_SETUP		0
+#define	INT_EDGE_FALLING	1
+#define	INT_EDGE_RISING		2
+#define	INT_EDGE_BOTH		3
+
+// Pi model types and version numbers
+//	Intended for the GPIO program Use at your own risk.
+
+#define	PI_MODEL_UNKNOWN  0
+#define	PI_MODEL_A        1
+#define	PI_MODEL_B        2
+#define	PI_MODEL_BP       3
+#define	PI_MODEL_CM       4
+#define	PI_MODEL_AP       5
+#define	PI_MODEL_ODROIDC  6
+#define PI_MODEL_ODROIDXU_34    7
+#define	PI_MODEL_ODROIDC2	8
+
+#define	PI_VERSION_UNKNOWN	0
+#define	PI_VERSION_1        1
+#define	PI_VERSION_1_1      2
+#define	PI_VERSION_1_2      3
+#define	PI_VERSION_2        4
+
+#define	PI_MAKER_UNKNOWN    0
+#define	PI_MAKER_EGOMAN     1
+#define	PI_MAKER_SONY       2
+#define	PI_MAKER_QISDA      3
+#define	PI_MAKER_HARDKERNEL 4
+
+extern const char *piModelNames    [9] ;
+extern const char *piRevisionNames [5] ;
+extern const char *piMakerNames    [5] ;
+
+
+//	Intended for the GPIO program Use at your own risk.
+
+// Threads
+
+#define	PI_THREAD(X)	void *X (void *dummy)
+
+// Failure modes
+
+#define	WPI_FATAL	(1==1)
+#define	WPI_ALMOST	(1==2)
+
+
+// wiringPiNodeStruct:
+//	This describes additional device nodes in the extended wiringPi
+//	2.0 scheme of things.
+//	It's a simple linked list for now, but will hopefully migrate to 
+//	a binary tree for efficiency reasons - but then again, the chances
+//	of more than 1 or 2 devices being added are fairly slim, so who
+//	knows....
+
+struct wiringPiNodeStruct
+{
+  int     pinBase ;
+  int     pinMax ;
+
+  int          fd ;	// Node specific
+  unsigned int data0 ;	//  ditto
+  unsigned int data1 ;	//  ditto
+  unsigned int data2 ;	//  ditto
+  unsigned int data3 ;	//  ditto
+
+  void   (*pinMode)         (struct wiringPiNodeStruct *node, int pin, int mode) ;
+  void   (*pullUpDnControl) (struct wiringPiNodeStruct *node, int pin, int mode) ;
+  int    (*digitalRead)     (struct wiringPiNodeStruct *node, int pin) ;
+  void   (*digitalWrite)    (struct wiringPiNodeStruct *node, int pin, int value) ;
+  void   (*pwmWrite)        (struct wiringPiNodeStruct *node, int pin, int value) ;
+  int    (*analogRead)      (struct wiringPiNodeStruct *node, int pin) ;
+  void   (*analogWrite)     (struct wiringPiNodeStruct *node, int pin, int value) ;
+
+  struct wiringPiNodeStruct *next ;
+} ;
+
+extern struct wiringPiNodeStruct *wiringPiNodes ;
+
+
+// Function prototypes
+//	c++ wrappers thanks to a comment by Nick Lott
+//	(and others on the Raspberry Pi forums)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Data
+
+//extern const char *piModelNames [] ;
+//extern const char *piRevisionNames[] ;
+
+// Internal
+
+extern int wiringPiFailure (int fatal, const char *message, ...) ;
+
+// Core wiringPi functions
+
+extern struct wiringPiNodeStruct *wiringPiFindNode (int pin) ;
+extern struct wiringPiNodeStruct *wiringPiNewNode  (int pinBase, int numPins) ;
+
+extern int  wiringPiSetup       (void) ;
+extern int  wiringPiSetupSys    (void) ;
+extern int  wiringPiSetupGpio   (void) ;
+extern int  wiringPiSetupPhys   (void) ;
+
+extern void pinModeAlt          (int pin, int mode) ;
+extern void pinMode             (int pin, int mode) ;
+extern void pullUpDnControl     (int pin, int pud) ;
+extern int  digitalRead         (int pin) ;
+extern void digitalWrite        (int pin, int value) ;
+extern void pwmWrite            (int pin, int value) ;
+extern int  analogRead          (int pin) ;
+extern void analogWrite         (int pin, int value) ;
+
+// PiFace specifics 
+//	(Deprecated)
+
+extern int  wiringPiSetupPiFace (void) ;
+extern int  wiringPiSetupPiFaceForGpioProg (void) ;	// Don't use this - for gpio program only
+
+// On-Board Raspberry Pi hardware specific stuff
+
+extern int  piBoardRev          (void) ;
+extern void piBoardId           (int *model, int *rev, int *mem, int *maker, int *overVolted) ;
+extern int  wpiPinToGpio        (int wpiPin) ;
+extern int  physPinToGpio       (int physPin) ;
+extern void setPadDrive         (int group, int value) ;
+extern int  getAlt              (int pin) ;
+extern void pwmToneWrite        (int pin, int freq) ;
+extern void digitalWriteByte    (int value) ;
+extern void pwmSetMode          (int mode) ;
+extern void pwmSetRange         (unsigned int range) ;
+extern void pwmSetClock         (int divisor) ;
+extern void gpioClockSet        (int pin, int freq) ;
+
+// Interrupts
+//	(Also Pi hardware specific)
+
+extern int  waitForInterrupt    (int pin, int mS) ;
+extern int  wiringPiISR         (int pin, int mode, void (*function)(void)) ;
+
+// Threads
+
+extern int  piThreadCreate      (void *(*fn)(void *)) ;
+extern void piLock              (int key) ;
+extern void piUnlock            (int key) ;
+
+// Schedulling priority
+
+extern int piHiPri (const int pri) ;
+
+// Extras from arduino land
+
+extern void         delay             (unsigned int howLong) ;
+extern void         delayMicroseconds (unsigned int howLong) ;
+extern unsigned int millis            (void) ;
+extern unsigned int micros            (void) ;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringPi.o b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPi.o
new file mode 100644
index 0000000000000000000000000000000000000000..6cabfb0928e2a5a3bcc12437b7e42a0ff5c2d40a
GIT binary patch
literal 53744
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
Jx=7CY{|}zIg#Z8m

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiI2C.c b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiI2C.c
new file mode 100755
index 00000000..2a121165
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiI2C.c
@@ -0,0 +1,240 @@
+/*
+ * wiringPiI2C.c:
+ *	Simplified I2C access routines
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+/*
+ * Notes:
+ *	The Linux I2C code is actually the same (almost) as the SMBus code.
+ *	SMBus is System Management Bus - and in essentially I2C with some
+ *	additional functionality added, and stricter controls on the electrical
+ *	specifications, etc. however I2C does work well with it and the
+ *	protocols work over both.
+ *
+ *	I'm directly including the SMBus functions here as some Linux distros
+ *	lack the correct header files, and also some header files are GPLv2
+ *	rather than the LGPL that wiringPi is released under - presumably because
+ *	originally no-one expected I2C/SMBus to be used outside the kernel -
+ *	however enter the Raspberry Pi with people now taking directly to I2C
+ *	devices without going via the kernel...
+ *
+ *	This may ultimately reduce the flexibility of this code, but it won't be
+ *	hard to maintain it and keep it current, should things change.
+ *
+ *	Information here gained from: kernel/Documentation/i2c/dev-interface
+ *	as well as other online resources.
+ *********************************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <errno.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+
+#include "wiringPi.h"
+#include "wiringPiI2C.h"
+
+// I2C definitions
+
+#define I2C_SLAVE	0x0703
+#define I2C_SMBUS	0x0720	/* SMBus-level access */
+
+#define I2C_SMBUS_READ	1
+#define I2C_SMBUS_WRITE	0
+
+// SMBus transaction types
+
+#define I2C_SMBUS_QUICK		    0
+#define I2C_SMBUS_BYTE		    1
+#define I2C_SMBUS_BYTE_DATA	    2 
+#define I2C_SMBUS_WORD_DATA	    3
+#define I2C_SMBUS_PROC_CALL	    4
+#define I2C_SMBUS_BLOCK_DATA	    5
+#define I2C_SMBUS_I2C_BLOCK_BROKEN  6
+#define I2C_SMBUS_BLOCK_PROC_CALL   7		/* SMBus 2.0 */
+#define I2C_SMBUS_I2C_BLOCK_DATA    8
+
+// SMBus messages
+
+#define I2C_SMBUS_BLOCK_MAX	32	/* As specified in SMBus standard */	
+#define I2C_SMBUS_I2C_BLOCK_MAX	32	/* Not specified but we use same structure */
+
+// Structures used in the ioctl() calls
+
+union i2c_smbus_data
+{
+  uint8_t  byte ;
+  uint16_t word ;
+  uint8_t  block [I2C_SMBUS_BLOCK_MAX + 2] ;	// block [0] is used for length + one more for PEC
+} ;
+
+struct i2c_smbus_ioctl_data
+{
+  char read_write ;
+  uint8_t command ;
+  int size ;
+  union i2c_smbus_data *data ;
+} ;
+
+static inline int i2c_smbus_access (int fd, char rw, uint8_t command, int size, union i2c_smbus_data *data)
+{
+  struct i2c_smbus_ioctl_data args ;
+
+  args.read_write = rw ;
+  args.command    = command ;
+  args.size       = size ;
+  args.data       = data ;
+  return ioctl (fd, I2C_SMBUS, &args) ;
+}
+
+
+/*
+ * wiringPiI2CRead:
+ *	Simple device read
+ *********************************************************************************
+ */
+
+int wiringPiI2CRead (int fd)
+{
+  union i2c_smbus_data data ;
+
+  if (i2c_smbus_access (fd, I2C_SMBUS_READ, 0, I2C_SMBUS_BYTE, &data))
+    return -1 ;
+  else
+    return data.byte & 0xFF ;
+}
+
+
+/*
+ * wiringPiI2CReadReg8: wiringPiI2CReadReg16:
+ *	Read an 8 or 16-bit value from a regsiter on the device
+ *********************************************************************************
+ */
+
+int wiringPiI2CReadReg8 (int fd, int reg)
+{
+  union i2c_smbus_data data;
+
+  if (i2c_smbus_access (fd, I2C_SMBUS_READ, reg, I2C_SMBUS_BYTE_DATA, &data))
+    return -1 ;
+  else
+    return data.byte & 0xFF ;
+}
+
+int wiringPiI2CReadReg16 (int fd, int reg)
+{
+  union i2c_smbus_data data;
+
+  if (i2c_smbus_access (fd, I2C_SMBUS_READ, reg, I2C_SMBUS_WORD_DATA, &data))
+    return -1 ;
+  else
+    return data.word & 0xFFFF ;
+}
+
+
+/*
+ * wiringPiI2CWrite:
+ *	Simple device write
+ *********************************************************************************
+ */
+
+int wiringPiI2CWrite (int fd, int data)
+{
+  return i2c_smbus_access (fd, I2C_SMBUS_WRITE, data, I2C_SMBUS_BYTE, NULL) ;
+}
+
+
+/*
+ * wiringPiI2CWriteReg8: wiringPiI2CWriteReg16:
+ *	Write an 8 or 16-bit value to the given register
+ *********************************************************************************
+ */
+
+int wiringPiI2CWriteReg8 (int fd, int reg, int value)
+{
+  union i2c_smbus_data data ;
+
+  data.byte = value ;
+  return i2c_smbus_access (fd, I2C_SMBUS_WRITE, reg, I2C_SMBUS_BYTE_DATA, &data) ;
+}
+
+int wiringPiI2CWriteReg16 (int fd, int reg, int value)
+{
+  union i2c_smbus_data data ;
+
+  data.word = value ;
+  return i2c_smbus_access (fd, I2C_SMBUS_WRITE, reg, I2C_SMBUS_WORD_DATA, &data) ;
+}
+
+
+/*
+ * wiringPiI2CSetupInterface:
+ *	Undocumented access to set the interface explicitly - might be used
+ *	for the Pi's 2nd I2C interface...
+ *********************************************************************************
+ */
+
+int wiringPiI2CSetupInterface (const char *device, int devId)
+{
+  int fd ;
+
+  if ((fd = open (device, O_RDWR)) < 0)
+    return wiringPiFailure (WPI_ALMOST, "Unable to open I2C device: %s\n", strerror (errno)) ;
+
+  if (ioctl (fd, I2C_SLAVE, devId) < 0)
+    return wiringPiFailure (WPI_ALMOST, "Unable to select I2C device: %s\n", strerror (errno)) ;
+
+  return fd ;
+}
+
+
+/*
+ * wiringPiI2CSetup:
+ *	Open the I2C device, and regsiter the target device
+ *********************************************************************************
+ */
+
+int wiringPiI2CSetup (const int devId)
+{
+  const char *device ;
+  int model, rev, mem, maker, overVolted ;
+
+  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
+
+  if      ( model == PI_MODEL_ODROIDC || model == PI_MODEL_ODROIDC2 )
+    device = "/dev/i2c-1" ;
+  else if ( model == PI_MODEL_ODROIDXU_34 )
+    device = "/dev/i2c-4" ;	/* update 2016/feb/12 Linux */
+  else  {
+    rev = piBoardRev () ;
+
+    if (rev == 1)
+      device = "/dev/i2c-0" ;
+    else
+      device = "/dev/i2c-1" ;
+  }
+
+  return wiringPiI2CSetupInterface (device, devId) ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiI2C.h b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiI2C.h
new file mode 100644
index 00000000..6db8c688
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiI2C.h
@@ -0,0 +1,42 @@
+/*
+ * wiringPiI2C.h:
+ *	Simplified I2C access routines
+ *	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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int wiringPiI2CRead           (int fd) ;
+extern int wiringPiI2CReadReg8       (int fd, int reg) ;
+extern int wiringPiI2CReadReg16      (int fd, int reg) ;
+
+extern int wiringPiI2CWrite          (int fd, int data) ;
+extern int wiringPiI2CWriteReg8      (int fd, int reg, int data) ;
+extern int wiringPiI2CWriteReg16     (int fd, int reg, int data) ;
+
+extern int wiringPiI2CSetupInterface (const char *device, int devId) ;
+extern int wiringPiI2CSetup          (const int devId) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiI2C.o b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiI2C.o
new file mode 100644
index 0000000000000000000000000000000000000000..a46271c7aa58b14656a1a82a36e900c20ca04174
GIT binary patch
literal 4520
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
Fe*hQ50k!}D

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiSPI.c b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiSPI.c
new file mode 100755
index 00000000..749045cd
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiSPI.c
@@ -0,0 +1,144 @@
+/*
+ * wiringPiSPI.c:
+ *	Simplified SPI access routines
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+
+#include <stdint.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <linux/spi/spidev.h>
+
+#include "wiringPi.h"
+
+#include "wiringPiSPI.h"
+
+
+// The SPI bus parameters
+//	Variables as they need to be passed as pointers later on
+
+const static char       *spiDev0  = "/dev/spidev0.0" ;
+const static char       *spiDev1  = "/dev/spidev0.1" ;
+const static char       *spiDev0_XU = "/dev/spidev1.0";
+const static uint8_t     spiMode  = 0 ;
+const static uint8_t     spiBPW   = 8 ;
+const static uint16_t    spiDelay = 0 ;
+
+static uint32_t    spiSpeeds [2] ;
+static int         spiFds [2] ;
+
+
+/*
+ * wiringPiSPIGetFd:
+ *	Return the file-descriptor for the given channel
+ *********************************************************************************
+ */
+
+int wiringPiSPIGetFd (int channel)
+{
+  return spiFds [channel & 1] ;
+}
+
+
+/*
+ * wiringPiSPIDataRW:
+ *	Write and Read a block of data over the SPI bus.
+ *	Note the data ia being read into the transmit buffer, so will
+ *	overwrite it!
+ *	This is also a full-duplex operation.
+ *********************************************************************************
+ */
+
+int wiringPiSPIDataRW (int channel, unsigned char *data, int len)
+{
+  struct spi_ioc_transfer spi ;
+
+  channel &= 1 ;
+
+  spi.tx_buf        = (unsigned long)data ;
+  spi.rx_buf        = (unsigned long)data ;
+  spi.len           = len ;
+  spi.delay_usecs   = spiDelay ;
+  spi.speed_hz      = spiSpeeds [channel] ;
+  spi.bits_per_word = spiBPW ;
+
+  return ioctl (spiFds [channel], SPI_IOC_MESSAGE(1), &spi) ;
+}
+
+
+/*
+ * wiringPiSPISetup:
+ *	Open the SPI device, and set it up, etc.
+ *********************************************************************************
+ */
+
+int wiringPiSPISetup (int channel, int speed)
+{
+  int fd ;
+  int model, rev, mem, maker, overVolted ;
+
+  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
+
+  channel &= 1 ;
+
+  if (model == PI_MODEL_ODROIDXU_34)    {
+    if (channel)
+      return wiringPiFailure (WPI_ALMOST, "ODROID-XU3/4 cannot support spi-channel 1.\n") ;
+
+    if ((fd = open (spiDev0_XU, O_RDWR)) < 0)
+      return wiringPiFailure (WPI_ALMOST, "Unable to open SPI device: %s\n", strerror (errno)) ;
+  }
+  else if (model == PI_MODEL_ODROIDC)  {
+    if (channel)
+      return wiringPiFailure (WPI_ALMOST, "ODROID-C1/C1+ cannot support spi-channel 1.\n") ;
+
+    if ((fd = open (spiDev0, O_RDWR)) < 0)
+      return wiringPiFailure (WPI_ALMOST, "Unable to open SPI device: %s\n", strerror (errno)) ;
+  }
+  else if (model == PI_MODEL_ODROIDC2)	{
+      return wiringPiFailure (WPI_ALMOST, "ODROID-C2 cannot support spi-channel\n") ;
+  }
+  else  {
+    if ((fd = open (channel == 0 ? spiDev0 : spiDev1, O_RDWR)) < 0)
+      return wiringPiFailure (WPI_ALMOST, "Unable to open SPI device: %s\n", strerror (errno)) ;
+  }
+
+  spiSpeeds [channel] = speed ;
+  spiFds    [channel] = fd ;
+
+// Set SPI parameters.
+//	Why are we reading it afterwriting it? I've no idea, but for now I'm blindly
+//	copying example code I've seen online...
+
+  if (ioctl (fd, SPI_IOC_WR_MODE, &spiMode)         < 0)
+    return wiringPiFailure (WPI_ALMOST, "SPI Mode Change failure: %s\n", strerror (errno)) ;
+  
+  if (ioctl (fd, SPI_IOC_WR_BITS_PER_WORD, &spiBPW) < 0)
+    return wiringPiFailure (WPI_ALMOST, "SPI BPW Change failure: %s\n", strerror (errno)) ;
+
+  if (ioctl (fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed)   < 0)
+    return wiringPiFailure (WPI_ALMOST, "SPI Speed Change failure: %s\n", strerror (errno)) ;
+
+  return fd ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiSPI.h b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiSPI.h
new file mode 100644
index 00000000..f53697d1
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiSPI.h
@@ -0,0 +1,35 @@
+/*
+ * wiringPiSPI.h:
+ *	Simplified SPI access routines
+ *	Copyright (c) 2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int wiringPiSPIGetFd  (int channel) ;
+int wiringPiSPIDataRW (int channel, unsigned char *data, int len) ;
+int wiringPiSPISetup  (int channel, int speed) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiSPI.o b/modules/catkin_ws/src/wiringPi/wiringPi/wiringPiSPI.o
new file mode 100644
index 0000000000000000000000000000000000000000..73772d7ad792ef86508a25dfff54c2e6db1059b3
GIT binary patch
literal 4616
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

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringSerial.c b/modules/catkin_ws/src/wiringPi/wiringPi/wiringSerial.c
new file mode 100644
index 00000000..ca976a99
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/wiringSerial.c
@@ -0,0 +1,213 @@
+/*
+ * wiringSerial.c:
+ *	Handle a serial port
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdarg.h>
+#include <string.h>
+#include <termios.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "wiringSerial.h"
+
+/*
+ * serialOpen:
+ *	Open and initialise the serial port, setting all the right
+ *	port parameters - or as many as are required - hopefully!
+ *********************************************************************************
+ */
+
+int serialOpen (const char *device, const int baud)
+{
+  struct termios options ;
+  speed_t myBaud ;
+  int     status, fd ;
+
+  switch (baud)
+  {
+    case     50:	myBaud =     B50 ; break ;
+    case     75:	myBaud =     B75 ; break ;
+    case    110:	myBaud =    B110 ; break ;
+    case    134:	myBaud =    B134 ; break ;
+    case    150:	myBaud =    B150 ; break ;
+    case    200:	myBaud =    B200 ; break ;
+    case    300:	myBaud =    B300 ; break ;
+    case    600:	myBaud =    B600 ; break ;
+    case   1200:	myBaud =   B1200 ; break ;
+    case   1800:	myBaud =   B1800 ; break ;
+    case   2400:	myBaud =   B2400 ; break ;
+    case   4800:	myBaud =   B4800 ; break ;
+    case   9600:	myBaud =   B9600 ; break ;
+    case  19200:	myBaud =  B19200 ; break ;
+    case  38400:	myBaud =  B38400 ; break ;
+    case  57600:	myBaud =  B57600 ; break ;
+    case 115200:	myBaud = B115200 ; break ;
+    case 230400:	myBaud = B230400 ; break ;
+
+    default:
+      return -2 ;
+  }
+
+  if ((fd = open (device, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK)) == -1)
+    return -1 ;
+
+  fcntl (fd, F_SETFL, O_RDWR) ;
+
+// Get and modify current options:
+
+  tcgetattr (fd, &options) ;
+
+    cfmakeraw   (&options) ;
+    cfsetispeed (&options, myBaud) ;
+    cfsetospeed (&options, myBaud) ;
+
+    options.c_cflag |= (CLOCAL | CREAD) ;
+    options.c_cflag &= ~PARENB ;
+    options.c_cflag &= ~CSTOPB ;
+    options.c_cflag &= ~CSIZE ;
+    options.c_cflag |= CS8 ;
+    options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG) ;
+    options.c_oflag &= ~OPOST ;
+
+    options.c_cc [VMIN]  =   0 ;
+    options.c_cc [VTIME] = 100 ;	// Ten seconds (100 deciseconds)
+
+  tcsetattr (fd, TCSANOW | TCSAFLUSH, &options) ;
+
+  ioctl (fd, TIOCMGET, &status);
+
+  status |= TIOCM_DTR ;
+  status |= TIOCM_RTS ;
+
+  ioctl (fd, TIOCMSET, &status);
+
+  usleep (10000) ;	// 10mS
+
+  return fd ;
+}
+
+
+/*
+ * serialFlush:
+ *	Flush the serial buffers (both tx & rx)
+ *********************************************************************************
+ */
+
+void serialFlush (const int fd)
+{
+  tcflush (fd, TCIOFLUSH) ;
+}
+
+
+/*
+ * serialClose:
+ *	Release the serial port
+ *********************************************************************************
+ */
+
+void serialClose (const int fd)
+{
+  close (fd) ;
+}
+
+
+/*
+ * serialPutchar:
+ *	Send a single character to the serial port
+ *********************************************************************************
+ */
+
+void serialPutchar (const int fd, const unsigned char c)
+{
+  write (fd, &c, 1) ;
+}
+
+
+/*
+ * serialPuts:
+ *	Send a string to the serial port
+ *********************************************************************************
+ */
+
+void serialPuts (const int fd, const char *s)
+{
+  write (fd, s, strlen (s)) ;
+}
+
+/*
+ * serialPrintf:
+ *	Printf over Serial
+ *********************************************************************************
+ */
+
+void serialPrintf (const int fd, const char *message, ...)
+{
+  va_list argp ;
+  char buffer [1024] ;
+
+  va_start (argp, message) ;
+    vsnprintf (buffer, 1023, message, argp) ;
+  va_end (argp) ;
+
+  serialPuts (fd, buffer) ;
+}
+
+
+/*
+ * serialDataAvail:
+ *	Return the number of bytes of data avalable to be read in the serial port
+ *********************************************************************************
+ */
+
+int serialDataAvail (const int fd)
+{
+  int result ;
+
+  if (ioctl (fd, FIONREAD, &result) == -1)
+    return -1 ;
+
+  return result ;
+}
+
+
+/*
+ * serialGetchar:
+ *	Get a single character from the serial device.
+ *	Note: Zero is a valid character and this function will time-out after
+ *	10 seconds.
+ *********************************************************************************
+ */
+
+int serialGetchar (const int fd)
+{
+  uint8_t x ;
+
+  if (read (fd, &x, 1) != 1)
+    return -1 ;
+
+  return ((int)x) & 0xFF ;
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringSerial.h b/modules/catkin_ws/src/wiringPi/wiringPi/wiringSerial.h
new file mode 100644
index 00000000..430dc731
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/wiringSerial.h
@@ -0,0 +1,38 @@
+/*
+ * wiringSerial.h:
+ *	Handle a serial port
+ ***********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int   serialOpen      (const char *device, const int baud) ;
+extern void  serialClose     (const int fd) ;
+extern void  serialFlush     (const int fd) ;
+extern void  serialPutchar   (const int fd, const unsigned char c) ;
+extern void  serialPuts      (const int fd, const char *s) ;
+extern void  serialPrintf    (const int fd, const char *message, ...) ;
+extern int   serialDataAvail (const int fd) ;
+extern int   serialGetchar   (const int fd) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringSerial.o b/modules/catkin_ws/src/wiringPi/wiringPi/wiringSerial.o
new file mode 100644
index 0000000000000000000000000000000000000000..e7cad0a25271a775178c20858327c8aa15f620b5
GIT binary patch
literal 4504
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
MfUKw)u%^lW10h5&M*si-

literal 0
HcmV?d00001

diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringShift.c b/modules/catkin_ws/src/wiringPi/wiringPi/wiringShift.c
new file mode 100644
index 00000000..3df94e8a
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/wiringShift.c
@@ -0,0 +1,83 @@
+/*
+ * wiringShift.c:
+ *	Emulate some of the Arduino wiring functionality. 
+ *
+ * Copyright (c) 2009-2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdint.h>
+
+#include "wiringPi.h"
+#include "wiringShift.h"
+
+/*
+ * shiftIn:
+ *	Shift data in from a clocked source
+ *********************************************************************************
+ */
+
+uint8_t shiftIn (uint8_t dPin, uint8_t cPin, uint8_t order)
+{
+  uint8_t value = 0 ;
+  int8_t  i ;
+ 
+  if (order == MSBFIRST)
+    for (i = 7 ; i >= 0 ; --i)
+    {
+      digitalWrite (cPin, HIGH) ;
+      value |= digitalRead (dPin) << i ;
+      digitalWrite (cPin, LOW) ;
+    }
+  else
+    for (i = 0 ; i < 8 ; ++i)
+    {
+      digitalWrite (cPin, HIGH) ;
+      value |= digitalRead (dPin) << i ;
+      digitalWrite (cPin, LOW) ;
+    }
+
+  return value;
+}
+
+/*
+ * shiftOut:
+ *	Shift data out to a clocked source
+ *********************************************************************************
+ */
+
+void shiftOut (uint8_t dPin, uint8_t cPin, uint8_t order, uint8_t val)
+{
+  int8_t i;
+
+  if (order == MSBFIRST)
+    for (i = 7 ; i >= 0 ; --i)
+    {
+      digitalWrite (dPin, val & (1 << i)) ;
+      digitalWrite (cPin, HIGH) ;
+      digitalWrite (cPin, LOW) ;
+    }
+  else
+    for (i = 0 ; i < 8 ; ++i)
+    {
+      digitalWrite (dPin, val & (1 << i)) ;
+      digitalWrite (cPin, HIGH) ;
+      digitalWrite (cPin, LOW) ;
+    }
+}
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringShift.h b/modules/catkin_ws/src/wiringPi/wiringPi/wiringShift.h
new file mode 100644
index 00000000..419ade41
--- /dev/null
+++ b/modules/catkin_ws/src/wiringPi/wiringPi/wiringShift.h
@@ -0,0 +1,41 @@
+/*
+ * wiringShift.h:
+ *	Emulate some of the Arduino wiring functionality. 
+ *
+ * Copyright (c) 2009-2012 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 <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#define	LSBFIRST	0
+#define	MSBFIRST	1
+
+#ifndef	_STDINT_H
+#  include <stdint.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern uint8_t shiftIn      (uint8_t dPin, uint8_t cPin, uint8_t order) ;
+extern void    shiftOut     (uint8_t dPin, uint8_t cPin, uint8_t order, uint8_t val) ;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/catkin_ws/src/wiringPi/wiringPi/wiringShift.o b/modules/catkin_ws/src/wiringPi/wiringPi/wiringShift.o
new file mode 100644
index 0000000000000000000000000000000000000000..5f83a176a82e8accfc7468ff19e0627daf10c387
GIT binary patch
literal 2336
zcmbW1&ubG=5XUFk{zzNhR1qvx=z5U|c1ffyD5%+VlcrGG(l-7;Ye?H|6HHS`HrRU5
zLZldIMeyREAf7ylAb4r7f>I9_FFlC0C>9U)pkkfbyl0=AU6oGQ%zK|V^L_Jv?B0s@
z#k?L5aPz=f*zIu&uwJ{{4qMGI?1x6s652>K^e!<RdK>mX`K<e&Y{g5TeDmKtrtWVG
z!*dcVZ+)N?o%!-wXuG_%x?WoLXbmgYQ0cp`_&Q!%@#*FD%cI&AZFG6k-=+gRtH(r~
zz~6S8B>t}VQPA6Q*3-^o#a2<;NCK<f#KN&yY;92e<~e`cJk3*H)63g>d1LiGR;eHT
zY*i^PhL-TV^jDRdwX4fky_E^9`URbj|I*nh?&?5KclT)}kQgiG%%ak%cBsMjuA<co
z-3)c9!4CD*@d{T?218xJuHY%E`w;!1d2S4WXSUhXy06}M56>Wu?1(i2@Q8dwZeH?6
z<d#KAmz9MYO%9Z5`{m$VqZ~k>$t@TVk$pW)-teCUU=Y*OOzR=jx=UJ1Qe0LRNo%1t
zDhEq--WbYhvVvn3In9z23Da?NbbV^z%Z}5y<akp7B>Xv<gi1~(fpEEn014>wRhtC9
zYKTOFx+?BRa!{z#+IwV&@oBD#255KTr(JjqIq5%UTGn|``+6py$xRKXGn1w|4h8bP
zIY{>O4MeoQ<UlMo934rHXpz2X5+*WJ88el=kk6O~?+h8KiAvf)(F6!EecHh$e17ay
zEGY1O0`C^M7(eU6=LIh6+!wg0v+2UWy6~SaJj6bB_H~_c;V~DkFnuq2dbnj-gL8gP
zpcdw)&D0orGhgv(-pU)<lxiBYCa4oBGX?5cp#T<8i@9v(nvtCYb$n)e+Q?x@ZpJj!
zp8iC8!Ay-`1J%kl(#gquYTDps?Aa@rNlUih>@YI2i)=qCz3MyNiUYK_VIIJIfW3+e
z%crxYCV#V9Slltj?Qir0+q^8?(%^0KC-5Q7z2=87m!`6>|9|HXvwZ%ZVAnF9-^l^<
zd|BN0BIj)}^o0|2h`q{~cqd8cCCh(G9l`kib94zCPUjbApG>|kIzP(g`TYD2AhYj1
rBA8|QY3c}OUl#T4wNv;V1_xOJeKQ*HvCmJ;Y5q414&b<G_W6GSkZ@iT

literal 0
HcmV?d00001

-- 
GitLab