wiringpi-ruby 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/wiringpi/WiringPi/devLib/ds1302.c +240 -0
- data/ext/wiringpi/WiringPi/devLib/ds1302.h +44 -0
- data/ext/wiringpi/WiringPi/devLib/font.h +2577 -0
- data/ext/wiringpi/WiringPi/devLib/gertboard.c +164 -0
- data/ext/wiringpi/WiringPi/devLib/gertboard.h +45 -0
- data/ext/wiringpi/WiringPi/devLib/lcd.c +495 -0
- data/ext/wiringpi/WiringPi/devLib/lcd.h +52 -0
- data/ext/wiringpi/WiringPi/devLib/lcd128x64.c +673 -0
- data/ext/wiringpi/WiringPi/devLib/lcd128x64.h +39 -0
- data/ext/wiringpi/WiringPi/devLib/maxdetect.c +238 -0
- data/ext/wiringpi/WiringPi/devLib/maxdetect.h +40 -0
- data/ext/wiringpi/WiringPi/devLib/piFace.c +112 -0
- data/ext/wiringpi/WiringPi/devLib/piFace.h +32 -0
- data/ext/wiringpi/WiringPi/devLib/piFaceOld.c +177 -0
- data/ext/wiringpi/WiringPi/devLib/piGlow.c +118 -0
- data/ext/wiringpi/WiringPi/devLib/piGlow.h +45 -0
- data/ext/wiringpi/WiringPi/devLib/piNes.c +113 -0
- data/ext/wiringpi/WiringPi/devLib/piNes.h +45 -0
- data/ext/wiringpi/WiringPi/devLib/scrollPhat.c +430 -0
- data/ext/wiringpi/WiringPi/devLib/scrollPhat.h +39 -0
- data/ext/wiringpi/WiringPi/devLib/scrollPhatFont.h +544 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/7segments.c +221 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/buttons.c +83 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/gertboard.c +96 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/record.c +60 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/temperature.c +78 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/voltmeter.c +73 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/vumeter.c +152 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/blink.c +59 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/buttons.c +103 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/ladder.c +337 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/metro.c +111 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/motor.c +120 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/reaction.c +194 -0
- data/ext/wiringpi/WiringPi/examples/PiGlow/piGlow0.c +51 -0
- data/ext/wiringpi/WiringPi/examples/PiGlow/piGlow1.c +258 -0
- data/ext/wiringpi/WiringPi/examples/PiGlow/piglow.c +176 -0
- data/ext/wiringpi/WiringPi/examples/blink-thread.c +61 -0
- data/ext/wiringpi/WiringPi/examples/blink.c +48 -0
- data/ext/wiringpi/WiringPi/examples/blink12.c +111 -0
- data/ext/wiringpi/WiringPi/examples/blink12drcs.c +125 -0
- data/ext/wiringpi/WiringPi/examples/blink6drcs.c +115 -0
- data/ext/wiringpi/WiringPi/examples/blink8-drcn.c +61 -0
- data/ext/wiringpi/WiringPi/examples/blink8.c +57 -0
- data/ext/wiringpi/WiringPi/examples/clock.c +201 -0
- data/ext/wiringpi/WiringPi/examples/delayTest.c +102 -0
- data/ext/wiringpi/WiringPi/examples/ds1302.c +238 -0
- data/ext/wiringpi/WiringPi/examples/header.h +23 -0
- data/ext/wiringpi/WiringPi/examples/isr-osc.c +118 -0
- data/ext/wiringpi/WiringPi/examples/isr.c +110 -0
- data/ext/wiringpi/WiringPi/examples/lcd-adafruit.c +347 -0
- data/ext/wiringpi/WiringPi/examples/lcd.c +286 -0
- data/ext/wiringpi/WiringPi/examples/lowPower.c +68 -0
- data/ext/wiringpi/WiringPi/examples/max31855.c +60 -0
- data/ext/wiringpi/WiringPi/examples/nes.c +67 -0
- data/ext/wiringpi/WiringPi/examples/okLed.c +82 -0
- data/ext/wiringpi/WiringPi/examples/pwm.c +58 -0
- data/ext/wiringpi/WiringPi/examples/q2w/binary.c +79 -0
- data/ext/wiringpi/WiringPi/examples/q2w/blink-io.c +61 -0
- data/ext/wiringpi/WiringPi/examples/q2w/blink.c +50 -0
- data/ext/wiringpi/WiringPi/examples/q2w/bright.c +59 -0
- data/ext/wiringpi/WiringPi/examples/q2w/button.c +63 -0
- data/ext/wiringpi/WiringPi/examples/q2w/volts.c +62 -0
- data/ext/wiringpi/WiringPi/examples/rht03.c +86 -0
- data/ext/wiringpi/WiringPi/examples/scrollPhat/scphat.c +230 -0
- data/ext/wiringpi/WiringPi/examples/scrollPhat/test.c +115 -0
- data/ext/wiringpi/WiringPi/examples/serialRead.c +48 -0
- data/ext/wiringpi/WiringPi/examples/serialTest.c +75 -0
- data/ext/wiringpi/WiringPi/examples/servo.c +57 -0
- data/ext/wiringpi/WiringPi/examples/softPwm.c +89 -0
- data/ext/wiringpi/WiringPi/examples/softTone.c +54 -0
- data/ext/wiringpi/WiringPi/examples/speed.c +95 -0
- data/ext/wiringpi/WiringPi/examples/spiSpeed.c +118 -0
- data/ext/wiringpi/WiringPi/examples/wfi.c +161 -0
- data/ext/wiringpi/WiringPi/gpio/gpio.c +1538 -0
- data/ext/wiringpi/WiringPi/gpio/readall.c +403 -0
- data/ext/wiringpi/WiringPi/version.h +3 -0
- data/ext/wiringpi/WiringPi/wiringPi/ads1115.c +293 -0
- data/ext/wiringpi/WiringPi/wiringPi/ads1115.h +55 -0
- data/ext/wiringpi/WiringPi/wiringPi/bmp180.c +237 -0
- data/ext/wiringpi/WiringPi/wiringPi/bmp180.h +34 -0
- data/ext/wiringpi/WiringPi/wiringPi/drcNet.c +405 -0
- data/ext/wiringpi/WiringPi/wiringPi/drcNet.h +42 -0
- data/ext/wiringpi/WiringPi/wiringPi/drcSerial.c +196 -0
- data/ext/wiringpi/WiringPi/wiringPi/drcSerial.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/ds18b20.c +146 -0
- data/ext/wiringpi/WiringPi/wiringPi/ds18b20.h +34 -0
- data/ext/wiringpi/WiringPi/wiringPi/htu21d.c +150 -0
- data/ext/wiringpi/WiringPi/wiringPi/htu21d.h +34 -0
- data/ext/wiringpi/WiringPi/wiringPi/max31855.c +99 -0
- data/ext/wiringpi/WiringPi/wiringPi/max31855.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/max5322.c +84 -0
- data/ext/wiringpi/WiringPi/wiringPi/max5322.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23008.c +149 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23008.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23016.c +164 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23016.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23016reg.h +48 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23017.c +195 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23017.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23s08.c +188 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23s08.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23s17.c +235 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23s17.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23x08.h +73 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23x0817.h +87 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3002.c +76 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3002.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3004.c +76 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3004.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3422.c +125 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3422.h +43 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp4802.c +76 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp4802.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/pcf8574.c +126 -0
- data/ext/wiringpi/WiringPi/wiringPi/pcf8574.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/pcf8591.c +90 -0
- data/ext/wiringpi/WiringPi/wiringPi/pcf8591.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/piHiPri.c +51 -0
- data/ext/wiringpi/WiringPi/wiringPi/piThread.c +63 -0
- data/ext/wiringpi/WiringPi/wiringPi/pseudoPins.c +95 -0
- data/ext/wiringpi/WiringPi/wiringPi/pseudoPins.h +26 -0
- data/ext/wiringpi/WiringPi/wiringPi/rht03.c +252 -0
- data/ext/wiringpi/WiringPi/wiringPi/rht03.h +25 -0
- data/ext/wiringpi/WiringPi/wiringPi/sn3218.c +75 -0
- data/ext/wiringpi/WiringPi/wiringPi/sn3218.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/softPwm.c +186 -0
- data/ext/wiringpi/WiringPi/wiringPi/softPwm.h +35 -0
- data/ext/wiringpi/WiringPi/wiringPi/softServo.c +211 -0
- data/ext/wiringpi/WiringPi/wiringPi/softServo.h +35 -0
- data/ext/wiringpi/WiringPi/wiringPi/softTone.c +150 -0
- data/ext/wiringpi/WiringPi/wiringPi/softTone.h +39 -0
- data/ext/wiringpi/WiringPi/wiringPi/sr595.c +109 -0
- data/ext/wiringpi/WiringPi/wiringPi/sr595.h +34 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPi.c +2507 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPi.h +269 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPiI2C.c +233 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPiI2C.h +42 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPiSPI.c +144 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPiSPI.h +36 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringSerial.c +225 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringSerial.h +38 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringShift.c +83 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringShift.h +41 -0
- data/ext/wiringpi/WiringPi/wiringPi/wpiExtensions.c +928 -0
- data/ext/wiringpi/WiringPi/wiringPi/wpiExtensions.h +26 -0
- data/ext/wiringpi/WiringPi/wiringPiD/daemonise.c +82 -0
- data/ext/wiringpi/WiringPi/wiringPiD/daemonise.h +9 -0
- data/ext/wiringpi/WiringPi/wiringPiD/drcNetCmd.h +43 -0
- data/ext/wiringpi/WiringPi/wiringPiD/network.c +330 -0
- data/ext/wiringpi/WiringPi/wiringPiD/network.h +31 -0
- data/ext/wiringpi/WiringPi/wiringPiD/runRemote.c +126 -0
- data/ext/wiringpi/WiringPi/wiringPiD/runRemote.h +29 -0
- data/ext/wiringpi/WiringPi/wiringPiD/wiringpid.c +382 -0
- metadata +155 -1
@@ -0,0 +1,45 @@
|
|
1
|
+
/*
|
2
|
+
* piNes.h:
|
3
|
+
* Driver for the NES Joystick controller on the Raspberry Pi
|
4
|
+
* Copyright (c) 2012 Gordon Henderson
|
5
|
+
***********************************************************************
|
6
|
+
* This file is part of wiringPi:
|
7
|
+
* https://projects.drogon.net/raspberry-pi/wiringpi/
|
8
|
+
*
|
9
|
+
* wiringPi is free software: you can redistribute it and/or modify
|
10
|
+
* it under the terms of the GNU Lesser General Public License as
|
11
|
+
* published by the Free Software Foundation, either version 3 of the
|
12
|
+
* License, or (at your option) any later version.
|
13
|
+
*
|
14
|
+
* wiringPi is distributed in the hope that it will be useful,
|
15
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
* GNU Lesser General Public License for more details.
|
18
|
+
*
|
19
|
+
* You should have received a copy of the GNU Lesser General Public
|
20
|
+
* License along with wiringPi.
|
21
|
+
* If not, see <http://www.gnu.org/licenses/>.
|
22
|
+
***********************************************************************
|
23
|
+
*/
|
24
|
+
|
25
|
+
#define MAX_NES_JOYSTICKS 8
|
26
|
+
|
27
|
+
#define NES_RIGHT 0x01
|
28
|
+
#define NES_LEFT 0x02
|
29
|
+
#define NES_DOWN 0x04
|
30
|
+
#define NES_UP 0x08
|
31
|
+
#define NES_START 0x10
|
32
|
+
#define NES_SELECT 0x20
|
33
|
+
#define NES_B 0x40
|
34
|
+
#define NES_A 0x80
|
35
|
+
|
36
|
+
#ifdef __cplusplus
|
37
|
+
extern "C" {
|
38
|
+
#endif
|
39
|
+
|
40
|
+
extern int setupNesJoystick (int dPin, int cPin, int lPin) ;
|
41
|
+
extern unsigned int readNesJoystick (int joystick) ;
|
42
|
+
|
43
|
+
#ifdef __cplusplus
|
44
|
+
}
|
45
|
+
#endif
|
@@ -0,0 +1,430 @@
|
|
1
|
+
/*
|
2
|
+
* scrollPhat.c:
|
3
|
+
* Simple driver for the Pimoroni Scroll Phat device
|
4
|
+
*
|
5
|
+
* Copyright (c) 2015 Gordon Henderson.
|
6
|
+
***********************************************************************
|
7
|
+
* This file is part of wiringPi:
|
8
|
+
* https://projects.drogon.net/raspberry-pi/wiringpi/
|
9
|
+
*
|
10
|
+
* wiringPi is free software: you can redistribute it and/or modify
|
11
|
+
* it under the terms of the GNU Lesser General Public License as published by
|
12
|
+
* the Free Software Foundation, either version 3 of the License, or
|
13
|
+
* (at your option) any later version.
|
14
|
+
*
|
15
|
+
* wiringPi is distributed in the hope that it will be useful,
|
16
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
17
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
18
|
+
* GNU Lesser General Public License for more details.
|
19
|
+
*
|
20
|
+
* You should have received a copy of the GNU Lesser General Public License
|
21
|
+
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
|
22
|
+
***********************************************************************
|
23
|
+
*/
|
24
|
+
|
25
|
+
#include <stdio.h>
|
26
|
+
#include <stdlib.h>
|
27
|
+
#include <stdarg.h>
|
28
|
+
#include <string.h>
|
29
|
+
#include <time.h>
|
30
|
+
|
31
|
+
#include <wiringPiI2C.h>
|
32
|
+
|
33
|
+
#include "scrollPhatFont.h"
|
34
|
+
#include "scrollPhat.h"
|
35
|
+
|
36
|
+
// Size
|
37
|
+
|
38
|
+
#define SP_WIDTH 11
|
39
|
+
#define SP_HEIGHT 5
|
40
|
+
|
41
|
+
// I2C
|
42
|
+
|
43
|
+
#define PHAT_I2C_ADDR 0x60
|
44
|
+
|
45
|
+
// Software copy of the framebuffer
|
46
|
+
// it's 8-bit deep although the display itself is only 1-bit deep.
|
47
|
+
|
48
|
+
static unsigned char frameBuffer [SP_WIDTH * SP_HEIGHT] ;
|
49
|
+
|
50
|
+
static int lastX, lastY ;
|
51
|
+
static int printDelayFactor ;
|
52
|
+
static int scrollPhatFd ;
|
53
|
+
|
54
|
+
static int putcharX ;
|
55
|
+
|
56
|
+
#undef DEBUG
|
57
|
+
|
58
|
+
|
59
|
+
/*
|
60
|
+
* delay:
|
61
|
+
* Wait for some number of milliseconds.
|
62
|
+
* This taken from wiringPi as there is no-need to include the whole of
|
63
|
+
* wiringPi just for the delay function.
|
64
|
+
*********************************************************************************
|
65
|
+
*/
|
66
|
+
|
67
|
+
static void delay (unsigned int howLong)
|
68
|
+
{
|
69
|
+
struct timespec sleeper, dummy ;
|
70
|
+
|
71
|
+
sleeper.tv_sec = (time_t)(howLong / 1000) ;
|
72
|
+
sleeper.tv_nsec = (long)(howLong % 1000) * 1000000 ;
|
73
|
+
|
74
|
+
nanosleep (&sleeper, &dummy) ;
|
75
|
+
}
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
/*
|
80
|
+
* scrollPhatUpdate:
|
81
|
+
* Copy our software version to the real display
|
82
|
+
*********************************************************************************
|
83
|
+
*/
|
84
|
+
|
85
|
+
void scrollPhatUpdate (void)
|
86
|
+
{
|
87
|
+
register int x, y ;
|
88
|
+
register unsigned char data, pixel ;
|
89
|
+
unsigned char pixels [SP_WIDTH] ;
|
90
|
+
|
91
|
+
#ifdef DEBUG
|
92
|
+
printf ("+-----------+\n") ;
|
93
|
+
for (y = 0 ; y < SP_HEIGHT ; ++y)
|
94
|
+
{
|
95
|
+
putchar ('|') ;
|
96
|
+
for (x = 0 ; x < SP_WIDTH ; ++x)
|
97
|
+
{
|
98
|
+
pixel = frameBuffer [x + y * SP_WIDTH] ;
|
99
|
+
putchar (pixel == 0 ? ' ' : '*') ;
|
100
|
+
}
|
101
|
+
printf ("|\n") ;
|
102
|
+
}
|
103
|
+
printf ("+-----------+\n") ;
|
104
|
+
#endif
|
105
|
+
|
106
|
+
for (x = 0 ; x < SP_WIDTH ; ++x)
|
107
|
+
{
|
108
|
+
data = 0 ;
|
109
|
+
for (y = 0 ; y < SP_HEIGHT ; ++y)
|
110
|
+
{
|
111
|
+
pixel = frameBuffer [x + y * SP_WIDTH] ;
|
112
|
+
data = (data << 1) | ((pixel == 0) ? 0 : 1) ;
|
113
|
+
}
|
114
|
+
pixels [x] = data ;
|
115
|
+
}
|
116
|
+
|
117
|
+
for (x = 0 ; x < SP_WIDTH ; ++x)
|
118
|
+
wiringPiI2CWriteReg8 (scrollPhatFd, 1 + x, pixels [x]) ;
|
119
|
+
|
120
|
+
wiringPiI2CWriteReg8 (scrollPhatFd, 0x0C, 0) ;
|
121
|
+
}
|
122
|
+
|
123
|
+
|
124
|
+
/*
|
125
|
+
*********************************************************************************
|
126
|
+
* Standard Graphical Functions
|
127
|
+
*********************************************************************************
|
128
|
+
*/
|
129
|
+
|
130
|
+
|
131
|
+
/*
|
132
|
+
* scrollPhatPoint:
|
133
|
+
* Plot a pixel. Crude clipping - speed is not the essence here.
|
134
|
+
*********************************************************************************
|
135
|
+
*/
|
136
|
+
|
137
|
+
void scrollPhatPoint (int x, int y, int colour)
|
138
|
+
{
|
139
|
+
lastX = x ;
|
140
|
+
lastY = y ;
|
141
|
+
|
142
|
+
if ((x < 0) || (x >= SP_WIDTH) || (y < 0) || (y >= SP_HEIGHT))
|
143
|
+
return ;
|
144
|
+
|
145
|
+
frameBuffer [x + y * SP_WIDTH] = colour ;
|
146
|
+
}
|
147
|
+
|
148
|
+
|
149
|
+
/*
|
150
|
+
* scrollPhatLine: scrollPhatLineTo:
|
151
|
+
* Classic Bressenham Line code - rely on the point function to do the
|
152
|
+
* clipping for us here.
|
153
|
+
*********************************************************************************
|
154
|
+
*/
|
155
|
+
|
156
|
+
void scrollPhatLine (int x0, int y0, int x1, int y1, int colour)
|
157
|
+
{
|
158
|
+
int dx, dy ;
|
159
|
+
int sx, sy ;
|
160
|
+
int err, e2 ;
|
161
|
+
|
162
|
+
lastX = x1 ;
|
163
|
+
lastY = y1 ;
|
164
|
+
|
165
|
+
dx = abs (x1 - x0) ;
|
166
|
+
dy = abs (y1 - y0) ;
|
167
|
+
|
168
|
+
sx = (x0 < x1) ? 1 : -1 ;
|
169
|
+
sy = (y0 < y1) ? 1 : -1 ;
|
170
|
+
|
171
|
+
err = dx - dy ;
|
172
|
+
|
173
|
+
for (;;)
|
174
|
+
{
|
175
|
+
scrollPhatPoint (x0, y0, colour) ;
|
176
|
+
|
177
|
+
if ((x0 == x1) && (y0 == y1))
|
178
|
+
break ;
|
179
|
+
|
180
|
+
e2 = 2 * err ;
|
181
|
+
|
182
|
+
if (e2 > -dy)
|
183
|
+
{
|
184
|
+
err -= dy ;
|
185
|
+
x0 += sx ;
|
186
|
+
}
|
187
|
+
|
188
|
+
if (e2 < dx)
|
189
|
+
{
|
190
|
+
err += dx ;
|
191
|
+
y0 += sy ;
|
192
|
+
}
|
193
|
+
}
|
194
|
+
|
195
|
+
}
|
196
|
+
|
197
|
+
void scrollPhatLineTo (int x, int y, int colour)
|
198
|
+
{
|
199
|
+
scrollPhatLine (lastX, lastY, x, y, colour) ;
|
200
|
+
}
|
201
|
+
|
202
|
+
|
203
|
+
/*
|
204
|
+
* scrollPhatRectangle:
|
205
|
+
* A rectangle is a spoilt days fishing
|
206
|
+
*********************************************************************************
|
207
|
+
*/
|
208
|
+
|
209
|
+
void scrollPhatRectangle (int x1, int y1, int x2, int y2, int colour, int filled)
|
210
|
+
{
|
211
|
+
register int x ;
|
212
|
+
|
213
|
+
if (filled)
|
214
|
+
{
|
215
|
+
/**/ if (x1 == x2)
|
216
|
+
scrollPhatLine (x1, y1, x2, y2, colour) ;
|
217
|
+
else if (x1 < x2)
|
218
|
+
for (x = x1 ; x <= x2 ; ++x)
|
219
|
+
scrollPhatLine (x, y1, x, y2, colour) ;
|
220
|
+
else
|
221
|
+
for (x = x2 ; x <= x1 ; ++x)
|
222
|
+
scrollPhatLine (x, y1, x, y2, colour) ;
|
223
|
+
}
|
224
|
+
else
|
225
|
+
{
|
226
|
+
scrollPhatLine (x1, y1, x2, y1, colour) ;
|
227
|
+
scrollPhatLineTo (x2, y2, colour) ;
|
228
|
+
scrollPhatLineTo (x1, y2, colour) ;
|
229
|
+
scrollPhatLineTo (x1, y1, colour) ;
|
230
|
+
}
|
231
|
+
}
|
232
|
+
|
233
|
+
|
234
|
+
/*
|
235
|
+
* scrollPhatPutchar:
|
236
|
+
* Print a single character to the screen then advance the pointer by an
|
237
|
+
* appropriate ammount (variable width font).
|
238
|
+
* We rely on the clipping done by the pixel plot function to keep us
|
239
|
+
* out of trouble.
|
240
|
+
* Return the width + space
|
241
|
+
*********************************************************************************
|
242
|
+
*/
|
243
|
+
|
244
|
+
int scrollPhatPutchar (int c)
|
245
|
+
{
|
246
|
+
register int x, y ;
|
247
|
+
|
248
|
+
unsigned char line ;
|
249
|
+
unsigned char *fontPtr ;
|
250
|
+
unsigned char *p2 ;
|
251
|
+
int lineWidth, width, mask ;
|
252
|
+
|
253
|
+
// The font is printable characters, uppercase only...
|
254
|
+
// and somewhat varaible width...
|
255
|
+
|
256
|
+
c &= 0x7F ;
|
257
|
+
if (c > 0x60)
|
258
|
+
c -= 64 ;
|
259
|
+
else
|
260
|
+
c -= 32 ;
|
261
|
+
|
262
|
+
fontPtr = scrollPhatFont + c * fontHeight ;
|
263
|
+
|
264
|
+
// Work out width of this character
|
265
|
+
// There probably is a more efficient way to do this, but...
|
266
|
+
|
267
|
+
p2 = fontPtr ;
|
268
|
+
width = 0 ;
|
269
|
+
for (y = 0 ; y < fontHeight ; ++y)
|
270
|
+
{
|
271
|
+
mask = 0x80 ;
|
272
|
+
for (lineWidth = 8 ; lineWidth > 0 ; --lineWidth)
|
273
|
+
{
|
274
|
+
if ((*p2 & mask) != 0)
|
275
|
+
break ;
|
276
|
+
mask >>= 1 ;
|
277
|
+
}
|
278
|
+
if (lineWidth > width)
|
279
|
+
width = lineWidth ;
|
280
|
+
|
281
|
+
++p2 ;
|
282
|
+
}
|
283
|
+
|
284
|
+
if (width == 0) // Likely to be a blank or space character
|
285
|
+
width = 3 ;
|
286
|
+
|
287
|
+
for (y = fontHeight - 1 ; y >= 0 ; --y)
|
288
|
+
{
|
289
|
+
x = 0 ;
|
290
|
+
line = *fontPtr++ ;
|
291
|
+
for (mask = 1 << (width - 1) ; mask != 0 ; mask >>= 1)
|
292
|
+
{
|
293
|
+
scrollPhatPoint (putcharX + x, y, (line & mask)) ;
|
294
|
+
++x ;
|
295
|
+
}
|
296
|
+
}
|
297
|
+
|
298
|
+
// make a line of space
|
299
|
+
|
300
|
+
for (y = fontHeight - 1 ; y >= 0 ; --y)
|
301
|
+
scrollPhatPoint (putcharX + width, y, 0) ;
|
302
|
+
|
303
|
+
putcharX = putcharX + width + 1 ;
|
304
|
+
|
305
|
+
return width + 1 ;
|
306
|
+
}
|
307
|
+
|
308
|
+
|
309
|
+
/*
|
310
|
+
* scrollPhatPuts:
|
311
|
+
* Send a string to the display - and scroll it across.
|
312
|
+
* This is somewhat of a hack in that we print the entire string to the
|
313
|
+
* display and let the point clipping take care of what's off-screen...
|
314
|
+
*********************************************************************************
|
315
|
+
*/
|
316
|
+
|
317
|
+
void scrollPhatPuts (const char *str)
|
318
|
+
{
|
319
|
+
int i ;
|
320
|
+
int movingX = 0 ;
|
321
|
+
const char *s ;
|
322
|
+
int pixelLen ;
|
323
|
+
|
324
|
+
// Print it once, then we know the width in pixels...
|
325
|
+
|
326
|
+
putcharX = 0 ;
|
327
|
+
s = str ;
|
328
|
+
while (*s)
|
329
|
+
scrollPhatPutchar (*s++) ;
|
330
|
+
|
331
|
+
pixelLen = putcharX ;
|
332
|
+
|
333
|
+
// Now scroll it by printing it and moving left one pixel
|
334
|
+
|
335
|
+
movingX = 0 ;
|
336
|
+
for (i = 0 ; i < pixelLen ; ++i)
|
337
|
+
{
|
338
|
+
putcharX = movingX ;
|
339
|
+
s = str ;
|
340
|
+
while (*s)
|
341
|
+
scrollPhatPutchar (*s++) ;
|
342
|
+
--movingX ;
|
343
|
+
scrollPhatUpdate () ;
|
344
|
+
delay (printDelayFactor) ;
|
345
|
+
}
|
346
|
+
}
|
347
|
+
|
348
|
+
|
349
|
+
/*
|
350
|
+
* scrollPhatPrintf:
|
351
|
+
* Does what it says
|
352
|
+
*********************************************************************************
|
353
|
+
*/
|
354
|
+
|
355
|
+
void scrollPhatPrintf (const char *message, ...)
|
356
|
+
{
|
357
|
+
va_list argp ;
|
358
|
+
char buffer [1024] ;
|
359
|
+
|
360
|
+
va_start (argp, message) ;
|
361
|
+
vsnprintf (buffer, 1023, message, argp) ;
|
362
|
+
va_end (argp) ;
|
363
|
+
|
364
|
+
scrollPhatPuts (buffer) ;
|
365
|
+
}
|
366
|
+
|
367
|
+
|
368
|
+
/*
|
369
|
+
* scrollPhatPrintSpeed:
|
370
|
+
* Change the print speed - mS per shift by 1 pixel
|
371
|
+
*********************************************************************************
|
372
|
+
*/
|
373
|
+
|
374
|
+
void scrollPhatPrintSpeed (const int pps)
|
375
|
+
{
|
376
|
+
if (pps < 0)
|
377
|
+
printDelayFactor = 0 ;
|
378
|
+
else
|
379
|
+
printDelayFactor = pps ;
|
380
|
+
}
|
381
|
+
|
382
|
+
|
383
|
+
/*
|
384
|
+
* scrollPhatClear:
|
385
|
+
* Clear the display
|
386
|
+
*********************************************************************************
|
387
|
+
*/
|
388
|
+
|
389
|
+
void scrollPhatClear (void)
|
390
|
+
{
|
391
|
+
register int i ;
|
392
|
+
register unsigned char *ptr = frameBuffer ;
|
393
|
+
|
394
|
+
for (i = 0 ; i < (SP_WIDTH * SP_HEIGHT) ; ++i)
|
395
|
+
*ptr++ = 0 ;
|
396
|
+
|
397
|
+
scrollPhatUpdate () ;
|
398
|
+
}
|
399
|
+
|
400
|
+
|
401
|
+
/*
|
402
|
+
* scrollPhatIntensity:
|
403
|
+
* Set the display brightness - percentage
|
404
|
+
*********************************************************************************
|
405
|
+
*/
|
406
|
+
|
407
|
+
void scrollPhatIntensity (const int percent)
|
408
|
+
{
|
409
|
+
wiringPiI2CWriteReg8 (scrollPhatFd, 0x19, (127 * percent) / 100) ;
|
410
|
+
}
|
411
|
+
|
412
|
+
|
413
|
+
/*
|
414
|
+
* scrollPhatSetup:
|
415
|
+
* Initialise the Scroll Phat display
|
416
|
+
*********************************************************************************
|
417
|
+
*/
|
418
|
+
|
419
|
+
int scrollPhatSetup (void)
|
420
|
+
{
|
421
|
+
if ((scrollPhatFd = wiringPiI2CSetup (PHAT_I2C_ADDR)) < 0)
|
422
|
+
return scrollPhatFd ;
|
423
|
+
|
424
|
+
wiringPiI2CWriteReg8 (scrollPhatFd, 0x00, 0x03) ; // Enable display, set to 5x11 mode
|
425
|
+
scrollPhatIntensity (10) ;
|
426
|
+
scrollPhatClear () ;
|
427
|
+
scrollPhatPrintSpeed (100) ;
|
428
|
+
|
429
|
+
return 0 ;
|
430
|
+
}
|