wiringpi 1.0.2 → 1.1.0
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.
- data/ext/wiringpi/wiringPi.c +132 -17
- data/ext/wiringpi/wiringPi.h +7 -2
- data/ext/wiringpi/wiringpi_wrap.c +154 -2
- data/lib/wiringpi.rb +20 -13
- metadata +1 -1
data/ext/wiringpi/wiringPi.c
CHANGED
@@ -26,6 +26,8 @@
|
|
26
26
|
*/
|
27
27
|
|
28
28
|
// Revisions:
|
29
|
+
// 2 Jul 2012:
|
30
|
+
// Fixed a few more bugs to do with range-checking when in GPIO mode.
|
29
31
|
// 11 Jun 2012:
|
30
32
|
// Fixed some typos.
|
31
33
|
// Added c++ support for the .h file
|
@@ -43,12 +45,17 @@
|
|
43
45
|
|
44
46
|
#include <stdio.h>
|
45
47
|
#include <stdint.h>
|
48
|
+
#include <unistd.h>
|
46
49
|
#include <errno.h>
|
47
50
|
#include <string.h>
|
48
51
|
#include <time.h>
|
49
52
|
#include <fcntl.h>
|
50
53
|
#include <sys/time.h>
|
51
54
|
#include <sys/mman.h>
|
55
|
+
#include <sys/types.h>
|
56
|
+
#include <sys/stat.h>
|
57
|
+
|
58
|
+
|
52
59
|
|
53
60
|
#include "wiringPi.h"
|
54
61
|
|
@@ -59,15 +66,15 @@
|
|
59
66
|
|
60
67
|
// Port function select bits
|
61
68
|
|
62
|
-
#define FSEL_INPT
|
63
|
-
#define FSEL_OUTP
|
64
|
-
#define FSEL_ALT0
|
65
|
-
#define FSEL_ALT0
|
66
|
-
#define FSEL_ALT1
|
67
|
-
#define FSEL_ALT2
|
68
|
-
#define FSEL_ALT3
|
69
|
-
#define FSEL_ALT4
|
70
|
-
#define FSEL_ALT5
|
69
|
+
#define FSEL_INPT 0b000
|
70
|
+
#define FSEL_OUTP 0b001
|
71
|
+
#define FSEL_ALT0 0b100
|
72
|
+
#define FSEL_ALT0 0b100
|
73
|
+
#define FSEL_ALT1 0b101
|
74
|
+
#define FSEL_ALT2 0b110
|
75
|
+
#define FSEL_ALT3 0b111
|
76
|
+
#define FSEL_ALT4 0b011
|
77
|
+
#define FSEL_ALT5 0b010
|
71
78
|
|
72
79
|
// Access from ARM Running Linux
|
73
80
|
// Take from Gerts code. Some of this is not in the manual
|
@@ -135,7 +142,12 @@ static volatile uint32_t *clk ;
|
|
135
142
|
// So the 3 bits for port X are:
|
136
143
|
// X / 10 + ((X % 10) * 3)
|
137
144
|
|
138
|
-
//
|
145
|
+
// sysFds:
|
146
|
+
// Map a file descriptor from the /sys/class/gpio/gpioX/value file
|
147
|
+
|
148
|
+
static int sysFds [64] ;
|
149
|
+
|
150
|
+
// Mode
|
139
151
|
|
140
152
|
static int gpioPinMode ;
|
141
153
|
|
@@ -267,6 +279,9 @@ void wiringPiGpioMode (int mode)
|
|
267
279
|
/*
|
268
280
|
* wiringPiSetup:
|
269
281
|
* Must be called once at the start of your program execution.
|
282
|
+
*
|
283
|
+
* Default setup: Initialises the system into wiringPi Pin mode and uses the
|
284
|
+
* memory mapped hardware directly.
|
270
285
|
*********************************************************************************
|
271
286
|
*/
|
272
287
|
|
@@ -386,6 +401,65 @@ int wiringPiSetup (void)
|
|
386
401
|
}
|
387
402
|
|
388
403
|
|
404
|
+
/*
|
405
|
+
* wiringPiSetupGpio:
|
406
|
+
* Must be called once at the start of your program execution.
|
407
|
+
*
|
408
|
+
* GPIO setup: Initialises the system into GPIO Pin mode and uses the
|
409
|
+
* memory mapped hardware directly.
|
410
|
+
*********************************************************************************
|
411
|
+
*/
|
412
|
+
|
413
|
+
int wiringPiSetupGpio (void)
|
414
|
+
{
|
415
|
+
int x = wiringPiSetup () ;
|
416
|
+
|
417
|
+
if (x != 0)
|
418
|
+
return x ;
|
419
|
+
|
420
|
+
wiringPiGpioMode (WPI_MODE_GPIO) ;
|
421
|
+
return 0 ;
|
422
|
+
}
|
423
|
+
|
424
|
+
|
425
|
+
/*
|
426
|
+
* wiringPiSetupSys:
|
427
|
+
* Must be called once at the start of your program execution.
|
428
|
+
*
|
429
|
+
* Initialisation (again), however this time we are using the /sys/class/gpio
|
430
|
+
* interface to the GPIO systems - slightly slower, but always usable as
|
431
|
+
* a non-root user, assuming the devices are already exported and setup correctly.
|
432
|
+
*/
|
433
|
+
|
434
|
+
int wiringPiSetupSys (void)
|
435
|
+
{
|
436
|
+
int fd, pin ;
|
437
|
+
struct timeval tv ;
|
438
|
+
char fName [128] ;
|
439
|
+
|
440
|
+
// Set GPIO_SYS mode by default
|
441
|
+
|
442
|
+
wiringPiGpioMode (WPI_MODE_GPIO_SYS) ;
|
443
|
+
|
444
|
+
// Open and scan the directory, looking for exported GPIOs, and pre-open
|
445
|
+
// the 'value' part to speed things up for later
|
446
|
+
|
447
|
+
for (pin = 0 ; pin < 64 ; ++pin)
|
448
|
+
{
|
449
|
+
sysFds [pin] = -1 ;
|
450
|
+
sprintf (fName, "/sys/class/gpio/gpio%d/value", pin) ;
|
451
|
+
if ((fd = open (fName, O_RDWR)) == -1)
|
452
|
+
continue ;
|
453
|
+
sysFds [pin] = fd ;
|
454
|
+
}
|
455
|
+
|
456
|
+
gettimeofday (&tv, NULL) ;
|
457
|
+
epoch = (tv.tv_sec * 1000000 + tv.tv_usec) / 1000 ;
|
458
|
+
|
459
|
+
return 0 ;
|
460
|
+
}
|
461
|
+
|
462
|
+
|
389
463
|
/*
|
390
464
|
* pinMode:
|
391
465
|
* Sets the mode of a pin to be input, output or PWM output
|
@@ -399,6 +473,10 @@ void pinMode (int pin, int mode)
|
|
399
473
|
int gpioPin, fSel, shift ;
|
400
474
|
int alt ;
|
401
475
|
|
476
|
+
// We can't change the mode in GPIO_SYS mode
|
477
|
+
|
478
|
+
if (gpioPinMode == WPI_MODE_GPIO_SYS)
|
479
|
+
return ;
|
402
480
|
|
403
481
|
if (gpioPinMode == WPI_MODE_PINS)
|
404
482
|
{
|
@@ -412,7 +490,6 @@ void pinMode (int pin, int mode)
|
|
412
490
|
fSel = gpioToGPFSEL [gpioPin] ;
|
413
491
|
shift = gpioToShift [gpioPin] ;
|
414
492
|
|
415
|
-
|
416
493
|
/**/ if (mode == INPUT)
|
417
494
|
*(gpio + fSel) = (*(gpio + fSel) & ~(7 << shift)) ; // Sets bits to zero = input
|
418
495
|
else if (mode == OUTPUT)
|
@@ -480,10 +557,23 @@ void digitalWrite (int pin, int value)
|
|
480
557
|
else
|
481
558
|
gpioPin = pin ;
|
482
559
|
|
483
|
-
if (
|
484
|
-
|
560
|
+
if (gpioPinMode == WPI_MODE_GPIO_SYS)
|
561
|
+
{
|
562
|
+
if (sysFds [gpioPin] != -1)
|
563
|
+
{
|
564
|
+
if (value == LOW)
|
565
|
+
write (sysFds [gpioPin], "0\n", 2) ;
|
566
|
+
else
|
567
|
+
write (sysFds [gpioPin], "1\n", 2) ;
|
568
|
+
}
|
569
|
+
}
|
485
570
|
else
|
486
|
-
|
571
|
+
{
|
572
|
+
if (value == LOW)
|
573
|
+
*(gpio + gpioToGPCLR [gpioPin]) = 1 << gpioPin ;
|
574
|
+
else
|
575
|
+
*(gpio + gpioToGPSET [gpioPin]) = 1 << gpioPin ;
|
576
|
+
}
|
487
577
|
}
|
488
578
|
|
489
579
|
|
@@ -497,6 +587,11 @@ void pwmWrite (int pin, int value)
|
|
497
587
|
{
|
498
588
|
int port, gpioPin ;
|
499
589
|
|
590
|
+
// We can't do this in GPIO_SYS mode
|
591
|
+
|
592
|
+
if (gpioPinMode == WPI_MODE_GPIO_SYS)
|
593
|
+
return ;
|
594
|
+
|
500
595
|
if (gpioPinMode == WPI_MODE_PINS)
|
501
596
|
{
|
502
597
|
if ((pin < 0) || (pin >= NUM_PINS))
|
@@ -521,6 +616,7 @@ void pwmWrite (int pin, int value)
|
|
521
616
|
int digitalRead (int pin)
|
522
617
|
{
|
523
618
|
int gpioPin ;
|
619
|
+
char c ;
|
524
620
|
|
525
621
|
if (gpioPinMode == WPI_MODE_PINS)
|
526
622
|
{
|
@@ -531,10 +627,24 @@ int digitalRead (int pin)
|
|
531
627
|
else
|
532
628
|
gpioPin = pin ;
|
533
629
|
|
534
|
-
if (
|
535
|
-
|
630
|
+
if (gpioPinMode == WPI_MODE_GPIO_SYS)
|
631
|
+
{
|
632
|
+
if (sysFds [gpioPin] == -1)
|
633
|
+
return 0 ;
|
634
|
+
else
|
635
|
+
{
|
636
|
+
lseek (sysFds [gpioPin], 0L, SEEK_SET) ;
|
637
|
+
read (sysFds [gpioPin], &c, 1) ;
|
638
|
+
return (c == '0') ? 0 : 1 ;
|
639
|
+
}
|
640
|
+
}
|
536
641
|
else
|
537
|
-
|
642
|
+
{
|
643
|
+
if ((*(gpio + gpioToGPLEV [gpioPin]) & (1 << gpioPin)) != 0)
|
644
|
+
return HIGH ;
|
645
|
+
else
|
646
|
+
return LOW ;
|
647
|
+
}
|
538
648
|
}
|
539
649
|
|
540
650
|
/*
|
@@ -550,6 +660,11 @@ void pullUpDnControl (int pin, int pud)
|
|
550
660
|
{
|
551
661
|
int gpioPin ;
|
552
662
|
|
663
|
+
// We can't do this in GPIO_SYS mode
|
664
|
+
|
665
|
+
if (gpioPinMode == WPI_MODE_GPIO_SYS)
|
666
|
+
return ;
|
667
|
+
|
553
668
|
if (gpioPinMode == WPI_MODE_PINS)
|
554
669
|
{
|
555
670
|
if ((pin < 0) || (pin >= NUM_PINS))
|
data/ext/wiringpi/wiringPi.h
CHANGED
@@ -25,8 +25,9 @@
|
|
25
25
|
|
26
26
|
#define NUM_PINS 17
|
27
27
|
|
28
|
-
#define WPI_MODE_PINS
|
29
|
-
#define WPI_MODE_GPIO
|
28
|
+
#define WPI_MODE_PINS 0
|
29
|
+
#define WPI_MODE_GPIO 1
|
30
|
+
#define WPI_MODE_GPIO_SYS 2
|
30
31
|
|
31
32
|
#define INPUT 0
|
32
33
|
#define OUTPUT 1
|
@@ -48,7 +49,11 @@ extern "C" {
|
|
48
49
|
#endif
|
49
50
|
|
50
51
|
extern int wiringPiSetup (void) ;
|
52
|
+
extern int wiringPiSetupSys (void) ;
|
53
|
+
extern int wiringPiSetupGpio (void) ;
|
54
|
+
|
51
55
|
extern void wiringPiGpioMode (int mode) ;
|
56
|
+
|
52
57
|
extern void pullUpDnControl (int pin, int pud) ;
|
53
58
|
extern void pinMode (int pin, int mode) ;
|
54
59
|
extern void digitalWrite (int pin, int value) ;
|
@@ -1841,7 +1841,7 @@ SWIG_ruby_failed(void)
|
|
1841
1841
|
}
|
1842
1842
|
|
1843
1843
|
|
1844
|
-
/*@SWIG:/usr/share/
|
1844
|
+
/*@SWIG:/usr/local/share/swig/2.0.7/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
|
1845
1845
|
SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE *args)
|
1846
1846
|
{
|
1847
1847
|
VALUE obj = args[0];
|
@@ -1886,7 +1886,7 @@ SWIG_AsVal_int (VALUE obj, int *val)
|
|
1886
1886
|
}
|
1887
1887
|
|
1888
1888
|
|
1889
|
-
/*@SWIG:/usr/share/
|
1889
|
+
/*@SWIG:/usr/local/share/swig/2.0.7/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
|
1890
1890
|
SWIGINTERN VALUE SWIG_AUX_NUM2ULONG(VALUE *args)
|
1891
1891
|
{
|
1892
1892
|
VALUE obj = args[0];
|
@@ -1945,6 +1945,29 @@ SWIG_From_unsigned_SS_char (unsigned char value)
|
|
1945
1945
|
}
|
1946
1946
|
|
1947
1947
|
|
1948
|
+
SWIGINTERN int
|
1949
|
+
SWIG_AsVal_unsigned_SS_int (VALUE obj, unsigned int *val)
|
1950
|
+
{
|
1951
|
+
unsigned long v;
|
1952
|
+
int res = SWIG_AsVal_unsigned_SS_long (obj, &v);
|
1953
|
+
if (SWIG_IsOK(res)) {
|
1954
|
+
if ((v > UINT_MAX)) {
|
1955
|
+
return SWIG_OverflowError;
|
1956
|
+
} else {
|
1957
|
+
if (val) *val = (unsigned int)(v);
|
1958
|
+
}
|
1959
|
+
}
|
1960
|
+
return res;
|
1961
|
+
}
|
1962
|
+
|
1963
|
+
|
1964
|
+
SWIGINTERNINLINE VALUE
|
1965
|
+
SWIG_From_unsigned_SS_int (unsigned int value)
|
1966
|
+
{
|
1967
|
+
return SWIG_From_unsigned_SS_long (value);
|
1968
|
+
}
|
1969
|
+
|
1970
|
+
|
1948
1971
|
SWIGINTERN swig_type_info*
|
1949
1972
|
SWIG_pchar_descriptor(void)
|
1950
1973
|
{
|
@@ -2019,6 +2042,38 @@ fail:
|
|
2019
2042
|
}
|
2020
2043
|
|
2021
2044
|
|
2045
|
+
SWIGINTERN VALUE
|
2046
|
+
_wrap_wiringPiSetupSys(int argc, VALUE *argv, VALUE self) {
|
2047
|
+
int result;
|
2048
|
+
VALUE vresult = Qnil;
|
2049
|
+
|
2050
|
+
if ((argc < 0) || (argc > 0)) {
|
2051
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
|
2052
|
+
}
|
2053
|
+
result = (int)wiringPiSetupSys();
|
2054
|
+
vresult = SWIG_From_int((int)(result));
|
2055
|
+
return vresult;
|
2056
|
+
fail:
|
2057
|
+
return Qnil;
|
2058
|
+
}
|
2059
|
+
|
2060
|
+
|
2061
|
+
SWIGINTERN VALUE
|
2062
|
+
_wrap_wiringPiSetupGpio(int argc, VALUE *argv, VALUE self) {
|
2063
|
+
int result;
|
2064
|
+
VALUE vresult = Qnil;
|
2065
|
+
|
2066
|
+
if ((argc < 0) || (argc > 0)) {
|
2067
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
|
2068
|
+
}
|
2069
|
+
result = (int)wiringPiSetupGpio();
|
2070
|
+
vresult = SWIG_From_int((int)(result));
|
2071
|
+
return vresult;
|
2072
|
+
fail:
|
2073
|
+
return Qnil;
|
2074
|
+
}
|
2075
|
+
|
2076
|
+
|
2022
2077
|
SWIGINTERN VALUE
|
2023
2078
|
_wrap_wiringPiGpioMode(int argc, VALUE *argv, VALUE self) {
|
2024
2079
|
int arg1 ;
|
@@ -2265,6 +2320,64 @@ fail:
|
|
2265
2320
|
}
|
2266
2321
|
|
2267
2322
|
|
2323
|
+
SWIGINTERN VALUE
|
2324
|
+
_wrap_delay(int argc, VALUE *argv, VALUE self) {
|
2325
|
+
unsigned int arg1 ;
|
2326
|
+
unsigned int val1 ;
|
2327
|
+
int ecode1 = 0 ;
|
2328
|
+
|
2329
|
+
if ((argc < 1) || (argc > 1)) {
|
2330
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
|
2331
|
+
}
|
2332
|
+
ecode1 = SWIG_AsVal_unsigned_SS_int(argv[0], &val1);
|
2333
|
+
if (!SWIG_IsOK(ecode1)) {
|
2334
|
+
SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "unsigned int","delay", 1, argv[0] ));
|
2335
|
+
}
|
2336
|
+
arg1 = (unsigned int)(val1);
|
2337
|
+
delay(arg1);
|
2338
|
+
return Qnil;
|
2339
|
+
fail:
|
2340
|
+
return Qnil;
|
2341
|
+
}
|
2342
|
+
|
2343
|
+
|
2344
|
+
SWIGINTERN VALUE
|
2345
|
+
_wrap_delayMicroseconds(int argc, VALUE *argv, VALUE self) {
|
2346
|
+
unsigned int arg1 ;
|
2347
|
+
unsigned int val1 ;
|
2348
|
+
int ecode1 = 0 ;
|
2349
|
+
|
2350
|
+
if ((argc < 1) || (argc > 1)) {
|
2351
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
|
2352
|
+
}
|
2353
|
+
ecode1 = SWIG_AsVal_unsigned_SS_int(argv[0], &val1);
|
2354
|
+
if (!SWIG_IsOK(ecode1)) {
|
2355
|
+
SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "unsigned int","delayMicroseconds", 1, argv[0] ));
|
2356
|
+
}
|
2357
|
+
arg1 = (unsigned int)(val1);
|
2358
|
+
delayMicroseconds(arg1);
|
2359
|
+
return Qnil;
|
2360
|
+
fail:
|
2361
|
+
return Qnil;
|
2362
|
+
}
|
2363
|
+
|
2364
|
+
|
2365
|
+
SWIGINTERN VALUE
|
2366
|
+
_wrap_millis(int argc, VALUE *argv, VALUE self) {
|
2367
|
+
unsigned int result;
|
2368
|
+
VALUE vresult = Qnil;
|
2369
|
+
|
2370
|
+
if ((argc < 0) || (argc > 0)) {
|
2371
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
|
2372
|
+
}
|
2373
|
+
result = (unsigned int)millis();
|
2374
|
+
vresult = SWIG_From_unsigned_SS_int((unsigned int)(result));
|
2375
|
+
return vresult;
|
2376
|
+
fail:
|
2377
|
+
return Qnil;
|
2378
|
+
}
|
2379
|
+
|
2380
|
+
|
2268
2381
|
SWIGINTERN VALUE
|
2269
2382
|
_wrap_serialOpen(int argc, VALUE *argv, VALUE self) {
|
2270
2383
|
char *arg1 = (char *) 0 ;
|
@@ -2430,6 +2543,39 @@ fail:
|
|
2430
2543
|
}
|
2431
2544
|
|
2432
2545
|
|
2546
|
+
SWIGINTERN VALUE
|
2547
|
+
_wrap_serialPrintf(int argc, VALUE *argv, VALUE self) {
|
2548
|
+
int arg1 ;
|
2549
|
+
char *arg2 = (char *) 0 ;
|
2550
|
+
void *arg3 = 0 ;
|
2551
|
+
int val1 ;
|
2552
|
+
int ecode1 = 0 ;
|
2553
|
+
int res2 ;
|
2554
|
+
char *buf2 = 0 ;
|
2555
|
+
int alloc2 = 0 ;
|
2556
|
+
|
2557
|
+
if (argc < 2) {
|
2558
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
|
2559
|
+
}
|
2560
|
+
ecode1 = SWIG_AsVal_int(argv[0], &val1);
|
2561
|
+
if (!SWIG_IsOK(ecode1)) {
|
2562
|
+
SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","serialPrintf", 1, argv[0] ));
|
2563
|
+
}
|
2564
|
+
arg1 = (int)(val1);
|
2565
|
+
res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
|
2566
|
+
if (!SWIG_IsOK(res2)) {
|
2567
|
+
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char *","serialPrintf", 2, argv[1] ));
|
2568
|
+
}
|
2569
|
+
arg2 = (char *)(buf2);
|
2570
|
+
serialPrintf(arg1,arg2,arg3);
|
2571
|
+
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
|
2572
|
+
return Qnil;
|
2573
|
+
fail:
|
2574
|
+
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
|
2575
|
+
return Qnil;
|
2576
|
+
}
|
2577
|
+
|
2578
|
+
|
2433
2579
|
|
2434
2580
|
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
|
2435
2581
|
|
@@ -2704,6 +2850,8 @@ SWIGEXPORT void Init_wiringpi(void) {
|
|
2704
2850
|
|
2705
2851
|
SWIG_RubyInitializeTrackings();
|
2706
2852
|
rb_define_module_function(mWiringpi, "wiringPiSetup", _wrap_wiringPiSetup, -1);
|
2853
|
+
rb_define_module_function(mWiringpi, "wiringPiSetupSys", _wrap_wiringPiSetupSys, -1);
|
2854
|
+
rb_define_module_function(mWiringpi, "wiringPiSetupGpio", _wrap_wiringPiSetupGpio, -1);
|
2707
2855
|
rb_define_module_function(mWiringpi, "wiringPiGpioMode", _wrap_wiringPiGpioMode, -1);
|
2708
2856
|
rb_define_module_function(mWiringpi, "pullUpDnControl", _wrap_pullUpDnControl, -1);
|
2709
2857
|
rb_define_module_function(mWiringpi, "pinMode", _wrap_pinMode, -1);
|
@@ -2712,11 +2860,15 @@ SWIGEXPORT void Init_wiringpi(void) {
|
|
2712
2860
|
rb_define_module_function(mWiringpi, "digitalRead", _wrap_digitalRead, -1);
|
2713
2861
|
rb_define_module_function(mWiringpi, "shiftOut", _wrap_shiftOut, -1);
|
2714
2862
|
rb_define_module_function(mWiringpi, "shiftIn", _wrap_shiftIn, -1);
|
2863
|
+
rb_define_module_function(mWiringpi, "delay", _wrap_delay, -1);
|
2864
|
+
rb_define_module_function(mWiringpi, "delayMicroseconds", _wrap_delayMicroseconds, -1);
|
2865
|
+
rb_define_module_function(mWiringpi, "millis", _wrap_millis, -1);
|
2715
2866
|
rb_define_module_function(mWiringpi, "serialOpen", _wrap_serialOpen, -1);
|
2716
2867
|
rb_define_module_function(mWiringpi, "serialClose", _wrap_serialClose, -1);
|
2717
2868
|
rb_define_module_function(mWiringpi, "serialPutchar", _wrap_serialPutchar, -1);
|
2718
2869
|
rb_define_module_function(mWiringpi, "serialPuts", _wrap_serialPuts, -1);
|
2719
2870
|
rb_define_module_function(mWiringpi, "serialDataAvail", _wrap_serialDataAvail, -1);
|
2720
2871
|
rb_define_module_function(mWiringpi, "serialGetchar", _wrap_serialGetchar, -1);
|
2872
|
+
rb_define_module_function(mWiringpi, "serialPrintf", _wrap_serialPrintf, -1);
|
2721
2873
|
}
|
2722
2874
|
|
data/lib/wiringpi.rb
CHANGED
@@ -2,6 +2,7 @@ require 'wiringpi/wiringpi'
|
|
2
2
|
|
3
3
|
WPI_MODE_PINS = 0 # Use sane pin numbering
|
4
4
|
WPI_MODE_GPIO = 1 # Use Broadcom barmy GPIO pin numbering
|
5
|
+
WPI_MODE_SYS = 2 # Use /sys/class/gpio method
|
5
6
|
|
6
7
|
# Constants for mode()
|
7
8
|
INPUT = 0
|
@@ -103,13 +104,19 @@ module WiringPi
|
|
103
104
|
|
104
105
|
def wiringPiSetup
|
105
106
|
|
106
|
-
begin
|
107
|
-
|
107
|
+
begin
|
108
|
+
if @mode == WPI_MODE_PINS
|
109
|
+
Wiringpi.wiringPiSetup
|
110
|
+
elsif @mode == WPI_MODE_GPIO
|
111
|
+
Wiringpi.wiringPiSetupGpio
|
112
|
+
elsif @mode == WPI_MODE_SYS
|
113
|
+
Wiringpi.wiringPiSetupSys
|
114
|
+
end
|
108
115
|
rescue Exception=>e
|
109
116
|
raise e
|
110
117
|
end
|
111
118
|
|
112
|
-
Wiringpi.wiringPiGpioMode( @mode )
|
119
|
+
#Wiringpi.wiringPiGpioMode( @mode )
|
113
120
|
@@init = true
|
114
121
|
|
115
122
|
end
|
@@ -170,13 +177,13 @@ and handing to Wiringpi.shiftOut, must contain only 1s or 0s
|
|
170
177
|
raise ArgumentError, "invalid clock pin, available gpio pins: #{PINS}" unless checkPin(clockPin)
|
171
178
|
raise ArgumentError, "invalid latch pin, available gpio pins: #{PINS}" unless checkPin(latchPin)
|
172
179
|
|
173
|
-
|
180
|
+
Wiringpi.digitalWrite( latchPin, LOW )
|
174
181
|
|
175
182
|
bits.each_slice(8) do |slice|
|
176
183
|
Wiringpi.shiftOut(dataPin, clockPin, LSBFIRST, slice.reverse.join.to_i(2))
|
177
184
|
end
|
178
185
|
|
179
|
-
|
186
|
+
Wiringpi.digitalWrite( latchPin, HIGH )
|
180
187
|
|
181
188
|
end
|
182
189
|
|
@@ -184,17 +191,17 @@ and handing to Wiringpi.shiftOut, must contain only 1s or 0s
|
|
184
191
|
shiftOut int dataPin, int clockPin, int latchPin, char
|
185
192
|
Shift out a single 8-bit integer 0-255
|
186
193
|
=end
|
187
|
-
def shiftOut(dataPin, clockPin,
|
194
|
+
def shiftOut(dataPin, clockPin, byteOrder, char)
|
188
195
|
|
189
|
-
raise ArgumentError, "invalid data pin, available gpio pins: #{PINS}" unless checkPin(dataPin)
|
190
|
-
raise ArgumentError, "invalid clock pin, available gpio pins: #{PINS}" unless checkPin(clockPin)
|
191
|
-
raise ArgumentError, "invalid latch pin, available gpio pins: #{PINS}" unless checkPin(latchPin)
|
196
|
+
#raise ArgumentError, "invalid data pin, available gpio pins: #{PINS}" unless checkPin(dataPin)
|
197
|
+
#raise ArgumentError, "invalid clock pin, available gpio pins: #{PINS}" unless checkPin(clockPin)
|
198
|
+
#raise ArgumentError, "invalid latch pin, available gpio pins: #{PINS}" unless checkPin(latchPin)
|
192
199
|
|
193
|
-
|
200
|
+
#Wiringpi.digitalWrite( latchPin, LOW )
|
194
201
|
|
195
|
-
Wiringpi.shiftOut(dataPin, clockPin,
|
202
|
+
Wiringpi.shiftOut(dataPin, clockPin, byteOrder, char)
|
196
203
|
|
197
|
-
|
204
|
+
#Wiringpi.digitalWrite( latchPin, HIGH )
|
198
205
|
|
199
206
|
end
|
200
207
|
|
@@ -230,4 +237,4 @@ Reads values of all pins and returns them as a hash
|
|
230
237
|
|
231
238
|
end
|
232
239
|
|
233
|
-
end
|
240
|
+
end
|