chiark / gitweb /
Quite a few changes here.
authorGordon Henderson <projects@drogon.net>
Mon, 28 Jan 2013 13:00:47 +0000 (13:00 +0000)
committerGordon Henderson <projects@drogon.net>
Mon, 28 Jan 2013 13:00:47 +0000 (13:00 +0000)
Added in generic 'blink' programs in the examples in C, RTB and Shell.
Updated wiringPi with a little big-file on the millis() function and
added in a new micros() function too.
Updated the examples with standard LGPL headers.
Added a new isr-osc.c test program - just for ISR timing purposes.

27 files changed:
examples/Makefile
examples/README.TXT
examples/blink.c [new file with mode: 0644]
examples/blink.rtb [new file with mode: 0644]
examples/blink.sh [new file with mode: 0644]
examples/delayTest.c
examples/gertboard.c
examples/header.h [new file with mode: 0644]
examples/isr-osc.c [new file with mode: 0644]
examples/nes.c
examples/okLed.c
examples/piface.c
examples/pwm.c
examples/serialRead.c
examples/serialTest.c
examples/servo.c
examples/speed.c
examples/test1.c
examples/test2.c
examples/tone.c
gpio/Makefile
gpio/gpio.1
gpio/gpio.c
wiringPi/lcd.c
wiringPi/lcd.h
wiringPi/wiringPi.c
wiringPi/wiringPi.h

index e1d29a01a571e3fb8163707acac95fbf688ef1fb..defd510bb69f6a51634845129c69d3b361c4ca27 100644 (file)
@@ -35,27 +35,26 @@ LDLIBS    = -lwiringPi -lpthread -lm
 # Should not alter anything below this line
 ###############################################################################
 
-SRC    =       test1.c test2.c speed.c lcd.c wfi.c isr.c       \
-               piface.c gertboard.c nes.c                      \
-               pwm.c tone.c servo.c                            \
+SRC    =       blink.c test1.c test2.c speed.c lcd.c wfi.c isr.c isr-osc.c     \
+               piface.c gertboard.c nes.c                                      \
+               pwm.c tone.c servo.c                                            \
                delayTest.c serialRead.c serialTest.c okLed.c
 
 OBJ    =       $(SRC:.c=.o)
 
 BINS   =       $(SRC:.c=)
 
-# Note:
-#      Please don't waste your time by emailling me or doing a
-#      pull request with changes to make all these targets. It
-#      is intentional that I do it this way as it now takes too
-#      long to compile them all and most people will not run
-#      them anyway... -GH-
-
 all:   
        @cat README.TXT
        @echo "    $(BINS)" | fmt
        @echo ""
 
+really-all:    $(BINS)
+
+blink: blink.o
+       @echo [link]
+       @$(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS)
+
 test1: test1.o
        @echo [link]
        @$(CC) -o $@ test1.o $(LDFLAGS) $(LDLIBS)
@@ -80,6 +79,10 @@ 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)
+
 piface:        piface.o
        @echo [link]
        @$(CC) -o $@ piface.o $(LDFLAGS) $(LDLIBS)
index 2bf6f1e94277bdf349e72163f2400a6d9a2ca7ac..33263b1c57ff3667a55f4258b6654a1783f902d0 100644 (file)
@@ -10,5 +10,9 @@ To compile an individual example, just type
 
     make exampleName
 
-Where exampleName is one of:
+To really compile everything:
+
+    make really-all
+
+The individual tests are:
 
diff --git a/examples/blink.c b/examples/blink.c
new file mode 100644 (file)
index 0000000..bb9f856
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * 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") ;
+
+  if (wiringPiSetup () == -1)
+    return 1 ;
+
+  pinMode (LED, OUTPUT) ;
+
+  for (;;)
+  {
+    digitalWrite (LED, 1) ;    // On
+    delay (500) ;              // mS
+    digitalWrite (LED, 0) ;    // Off
+    delay (500) ;
+  }
+  return 0 ;
+}
diff --git a/examples/blink.rtb b/examples/blink.rtb
new file mode 100644 (file)
index 0000000..eb7d26c
--- /dev/null
@@ -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/examples/blink.sh b/examples/blink.sh
new file mode 100644 (file)
index 0000000..2aa378a
--- /dev/null
@@ -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.
+
+LED=0
+
+gpio mode $PIN out
+
+while true; do
+  gpio write $PIN 1
+  sleep 0.5
+  gpio write $PIN 0
+  sleep 0.5
+done
index d05f3ffc28dcc65e7bbf558331454278c6165c72..4c8b6ca40495b362be10241364bef35f186c9d98 100644 (file)
@@ -1,3 +1,27 @@
+/*
+ * 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>
index 8f26dd45105afa4f597d603bb670212540a8d41b..f02e27db5eacfba5ae026a4b64523aa19fb48403 100644 (file)
@@ -1,4 +1,3 @@
-
 /*
  * gertboard.c:
  *     Simple test for the SPI bus on the Gertboard
@@ -10,6 +9,24 @@
  *     copy this value to D/A port 1 and use a 'scope on both D/A ports
  *     to check all's well.
  *
+ * 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>
diff --git a/examples/header.h b/examples/header.h
new file mode 100644 (file)
index 0000000..82f723d
--- /dev/null
@@ -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/examples/isr-osc.c b/examples/isr-osc.c
new file mode 100644 (file)
index 0000000..a872ee3
--- /dev/null
@@ -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 ;
+}
index 1a485bdf21f7ddce0f8aa1446f9c09c7227e1e44..31908e8a0efbe5ff0e149731039a7cd4cdda3bd1 100644 (file)
@@ -1,3 +1,26 @@
+/*
+ * 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>
index 02f0b2274b17697ca9ac84aa3d16b1d6c8b9ae9f..9b3a170ca3200caedcac70f2d22d2310bacfcbd5 100644 (file)
@@ -1,7 +1,6 @@
 /*
- * okLed:
+ * okLed.c:
  *      Make the OK LED on the Pi Pulsate...
- *    Copyright (c) 2012 gordon Henderson, but please Share and Enjoy!
  *
  * Originally posted to the Raspberry Pi forums:
  *  http://www.raspberrypi.org/phpBB3/viewtopic.php?p=162581#p162581
@@ -10,6 +9,24 @@
  *    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>
index 3305bf9bff0b7a6a0f1b83b4399cba7758596d91..0f00960c3c9c35c05f922ef9bcc820c07dc9b26d 100644 (file)
@@ -1,9 +1,27 @@
-
 /*
- * piface.c:
- *     Simple test for the PiFace
+ * piFace.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 <wiringPi.h>
index 09b4ae0d6c2bfe9455464f7775cf94c14fd1dc53..c1fc3317c79912eefab0498dc935fd95c2975e92 100644 (file)
@@ -1,3 +1,27 @@
+/*
+ * pwm.c:
+ *     Test of the software PWM driver. Needs 12 LEDs 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>
index 34b9bad45debbf762b20e3ddae7504d1c9c01145..9ee11ac290938cb7a1a1006b64319e6b1fb5f4a7 100644 (file)
@@ -1,8 +1,25 @@
-
 /*
- * serialRead.c:
+ * 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>
index 85a1a66b4047d8693c203a631a73c580849e6f6c..0d6da5f08c752cf09e0e23792affdfc2eafa52eb 100644 (file)
@@ -3,6 +3,24 @@
  *     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>
index 023783261f279c506c23e31b74725685383e2710..aa1ab05245293a12254832bef6083af957021e8b 100644 (file)
@@ -1,3 +1,27 @@
+/*
+ * 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>
index 2f5d9904a7e2c46127eba44f13220ba575ad22d5..863317ee25bdc55fff2a5b0f2f16f1a5d1a25d32 100644 (file)
@@ -1,8 +1,26 @@
-
 /*
  * 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>
index 7eb0abd1a1f63bf1e8bb3e3d63bc278d1da11666..4c75711f16b8d99e590397080c393c3f4e97e6bd 100644 (file)
@@ -1,7 +1,27 @@
-
 /*
  * test1.c:
  *     Simple test program to test the wiringPi functions
+ *     This is a sequencer to make a patter appear on 8 LEDs
+ *     connected to the GPIO pins.
+ *
+ * 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>
index e34013ca7ee9dd2f04629d104ab90b7cf9ad1615..580591e98b09f409eadf62d3ee9be3ec6ef4e067 100644 (file)
@@ -1,8 +1,25 @@
-
 /*
  * test2.c:
- *     Simple test program to test the wiringPi functions
- *     PWM test
+ *     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>
index 8b1fcd7125e7a8677939c3d54cd337feda7c8617..0e8a47d85a842eb090270ba64d3876401de4f23a 100644 (file)
@@ -1,3 +1,27 @@
+/*
+ * tone.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 <wiringPi.h>
 #include <softTone.h>
 
-#define RANGE          100
-#define        NUM_LEDS         12
+#define        PIN     3
 
 int scale [8] = { 262, 294, 330, 349, 392, 440, 494, 525 } ;
 
 int main ()
 {
-  int i, j ;
-  char buf [80] ;
+  int i ;
 
   if (wiringPiSetup () == -1)
   {
@@ -22,14 +44,14 @@ int main ()
     return 1 ;
   }
 
-  softToneCreate (3) ;
+  softToneCreate (PIN) ;
 
   for (;;)
   {
     for (i = 0 ; i < 8 ; ++i)
     {
       printf ("%3d\n", i) ;
-      softToneWrite (3, scale [i]) ;
+      softToneWrite (PIN, scale [i]) ;
       delay (500) ;
     }
   }
index 623096c58d4072fb9261f11cfc7356094659e205..a04396218f32c67ca1131fdebb63d5cab353215a 100644 (file)
@@ -70,8 +70,8 @@ install:
 .PHONEY:       uninstall
 uninstall:
        @echo "[UnInstall]"
-       rm -f /usr/local/bin/gpio
-       rm -f /usr/local/man/man1/gpio.1
+       @rm -f /usr/local/bin/gpio
+       @rm -f /usr/local/man/man1/gpio.1
 
 .PHONEY:       depend
 depend:
index a83cf9f864a93590116f0ef906e51f5ad39070f7..e816e22abc67fb9ab2b7a5c4f64eb1a6d2aaa5de 100644 (file)
@@ -38,7 +38,7 @@ group value
 range
 .PP
 .B gpio
-.B load \ i2c/spi
+.B load \ i2c/spi ...
 .PP
 .B gpio
 .B gbr
@@ -168,9 +168,18 @@ Change the PWM mode to balanced (the default) or mark:space ratio (traditional)
 Change the PWM range register. The default is 1024.
 
 .TP
-.B load i2c/spi
-This loads the i2c or the spi drivers into the system and changes the permissions on
-the associated /dev/ entries so that the current user has access to them.
+.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 (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 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
@@ -275,4 +284,5 @@ 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.
+Raspberry Pi is a trademark of the Raspberry Pi Foundation. See
+http://raspberrypi.org/ for full details.
index 326dd2d9558e87c9514e2e18544f263538b12649..5eef5d855212919c3a91b4fe11836187f21d1448 100644 (file)
@@ -42,7 +42,7 @@ extern int wiringPiDebug ;
 #  define      FALSE   (1==2)
 #endif
 
-#define        VERSION "1.8"
+#define        VERSION "1.10"
 
 static int wpMode ;
 
@@ -129,7 +129,7 @@ static int moduleLoaded (char *modName)
 
 static void _doLoadUsage (char *argv [])
 {
-  fprintf (stderr, "Usage: %s load <spi/i2c> [bufferSize in KB for spi]\n", argv [0]) ;
+  fprintf (stderr, "Usage: %s load <spi/i2c> [SPI bufferSize in KB | I2C baudrate in Kb/sec]\n", argv [0]) ;
   exit (1) ;
 }
 
@@ -138,12 +138,12 @@ static void doLoad (int argc, char *argv [])
   char *module1, *module2 ;
   char cmd [80] ;
   char *file1, *file2 ;
-  char spiBuf [32] ;
+  char args1 [32], args2 [32] ;
 
   if (argc < 3)
     _doLoadUsage (argv) ;
 
-  spiBuf [0] = 0 ;
+  args1 [0] = args2 [0] = 0 ;
 
   /**/ if (strcasecmp (argv [2], "spi") == 0)
   {
@@ -152,10 +152,9 @@ static void doLoad (int argc, char *argv [])
     file1  = "/dev/spidev0.0" ;
     file2  = "/dev/spidev0.1" ;
     if (argc == 4)
-      sprintf (spiBuf, " bufsize=%d", atoi (argv [3]) * 1024) ;
+      sprintf (args1, " bufsize=%d", atoi (argv [3]) * 1024) ;
     else if (argc > 4)
       _doLoadUsage (argv) ;
-    
   }
   else if (strcasecmp (argv [2], "i2c") == 0)
   {
@@ -163,19 +162,23 @@ static void doLoad (int argc, char *argv [])
     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 (!moduleLoaded (module1))
   {
-    sprintf (cmd, "modprobe %s%s", module1, spiBuf) ;
+    sprintf (cmd, "modprobe %s%s", module1, args1) ;
     system (cmd) ;
   }
 
   if (!moduleLoaded (module2))
   {
-    sprintf (cmd, "modprobe %s", module2) ;
+    sprintf (cmd, "modprobe %s%s", module2, args2) ;
     system (cmd) ;
   }
 
@@ -200,55 +203,39 @@ static void doLoad (int argc, char *argv [])
 
 static char *pinNames [] =
 {
-  "GPIO 0",
-  "GPIO 1",
-  "GPIO 2",
-  "GPIO 3",
-  "GPIO 4",
-  "GPIO 5",
-  "GPIO 6",
-  "GPIO 7",
-  "SDA   ",
-  "SCL   ",
-  "CE0   ",
-  "CE1   ",
-  "MOSI  ",
-  "MISO  ",
-  "SCLK  ",
-  "TxD   ",
-  "RxD   ",
-  "GPIO 8",
-  "GPIO 9",
-  "GPIO10",
-  "GPIO11",
+  "GPIO 0", "GPIO 1", "GPIO 2", "GPIO 3", "GPIO 4", "GPIO 5", "GPIO 6", "GPIO 7",
+  "SDA   ", "SCL   ",
+  "CE0   ", "CE1   ", "MOSI  ", "MISO  ", "SCLK  ",
+  "TxD   ", "RxD   ",
+  "GPIO 8", "GPIO 9", "GPIO10", "GPIO11",
+} ;
+
+static char *alts [] =
+{
+  "IN  ", "OUT ", "ALT0", "ALT1", "ALT2", "ALT3", "ALT4", "ALT5", "XXXX"
 } ;
 
 static void doReadall (void)
 {
   int pin ;
 
-  printf ("+----------+------+--------+-------+\n") ;
-  printf ("| wiringPi | GPIO | Name   | Value |\n") ;
-  printf ("+----------+------+--------+-------+\n") ;
+  printf ("+----------+------+--------+------+------+\n") ;
+  printf ("| wiringPi | GPIO | Name   | Mode | Value |\n") ;
+  printf ("+----------+------+--------+------+------+\n") ;
 
-  for (pin = 0 ; pin < NUM_PINS ; ++pin)
-    printf ("| %6d   | %3d  | %s | %s  |\n",
-       pin, wpiPinToGpio (pin),
-       pinNames [pin], 
-       digitalRead (pin) == HIGH ? "High" : "Low ") ;
-
-  printf ("+----------+------+--------+-------+\n") ;
-
-  if (piBoardRev () == 1)
-    return ;
+  for (pin = 0 ; pin < 64 ; ++pin)
+  {
+    if (wpiPinToGpio (pin) == -1)
+      continue ;
 
-  for (pin = 17 ; pin <= 20 ; ++pin)
-    printf ("| %6d   | %3d  | %s | %s  |\n",
+    printf ("| %6d   | %3d  | %s | %s | %s  |\n",
        pin, wpiPinToGpio (pin),
        pinNames [pin], 
+       alts [getAlt (pin)], 
        digitalRead (pin) == HIGH ? "High" : "Low ") ;
+  }
 
-  printf ("+----------+------+--------+-------+\n") ;
+  printf ("+----------+------+--------+------+------+\n") ;
 }
 
 
index aa58cab1c83e4ff21ff9bd102916e41638777be8..f123db28af813c6ebedf947b72c3ab14aaf04004 100644 (file)
@@ -174,6 +174,18 @@ void lcdClear (int fd)
 }
 
 
+/*
+ * lcdSendCommand:
+ *     Send any arbitary command to the display
+ *********************************************************************************
+ */
+
+void lcdSendCommand (int fd, uint8_t command)
+{
+  struct lcdDataStruct *lcd = lcds [fd] ;
+  putCommand (lcd, command) ;
+}
+
 /*
  * lcdPosition:
  *     Update the position of the cursor on the display
index ecd1d25bee72918405783edebcd8feab0c4771c4..beebb7545fe91d4ac83956a9afa168effb4fba6b 100644 (file)
 extern "C" {
 #endif
 
-extern void lcdHome     (int fd) ;
-extern void lcdClear    (int fd) ;
-extern void lcdPosition (int fd, int x, int y) ;
-extern void lcdPutchar  (int fd, uint8_t data) ;
-extern void lcdPuts     (int fd, char *string) ;
-extern void lcdPrintf   (int fd, char *message, ...) ;
+extern void lcdHome        (int fd) ;
+extern void lcdClear       (int fd) ;
+extern void lcdSendCommand (int fd, uint8_t command) ;
+extern void lcdPosition    (int fd, int x, int y) ;
+extern void lcdPutchar     (int fd, uint8_t data) ;
+extern void lcdPuts        (int fd, char *string) ;
+extern void lcdPrintf      (int fd, char *message, ...) ;
 
 extern int  lcdInit (int rows, int cols, int bits, int rs, int strb,
        int d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7) ;
index 9655db25d705a292dc08608f12d54c3fa8d64f8b..bb22de6c1ddef8d31c2f7020d451c34b3d301767 100644 (file)
@@ -51,9 +51,6 @@
 //             Added in the 2 UART pins
 //             Change maxPins to numPins to more accurately reflect purpose
 
-// Pad drive current fiddling
-
-#undef DEBUG_PADS
 
 #include <stdio.h>
 #include <stdint.h>
 #include <pthread.h>
 #include <sys/time.h>
 #include <sys/mman.h>
-#include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/wait.h>
+#include <sys/ioctl.h>
 
 #include "wiringPi.h"
 
 // Function stubs
 
 void (*pinMode)           (int pin, int mode) ;
+int  (*getAlt)            (int pin) ;
 void (*pullUpDnControl)   (int pin, int pud) ;
 void (*digitalWrite)      (int pin, int value) ;
 void (*digitalWriteByte)  (int value) ;
@@ -84,7 +82,6 @@ void (*pwmWrite)          (int pin, int value) ;
 void (*setPadDrive)       (int group, int value) ;
 int  (*digitalRead)       (int pin) ;
 int  (*waitForInterrupt)  (int pin, int mS) ;
-void (*delayMicroseconds) (unsigned int howLong) ;
 void (*pwmSetMode)        (int mode) ;
 void (*pwmSetRange)       (unsigned int range) ;
 void (*pwmSetClock)       (int divisor) ;
@@ -177,7 +174,7 @@ static volatile uint32_t *timerIrqRaw ;
 
 // Time for easy calculations
 
-static unsigned long long epoch ;
+static uint64_t epochMilli, epochMicro ;
 
 // Misc
 
@@ -586,6 +583,38 @@ void pinModeSys (int pin, int mode)
 }
 
 
+/*
+ * getAlt:
+ *     Returns the ALT bits for a given port. Only really of-use
+ *     for the gpio readall command (I think)
+ *********************************************************************************
+ */
+
+int getAltGpio (int pin)
+{
+  int fSel, shift, alt ;
+
+  pin &= 63 ;
+
+  fSel    = gpioToGPFSEL [pin] ;
+  shift   = gpioToShift  [pin] ;
+
+  alt = (*(gpio + fSel) >> shift) & 7 ;
+
+  return alt ;
+}
+
+int getAltWPi (int pin)
+{
+  return getAltGpio (pinToGpio [pin & 63]) ;
+}
+
+int getAltSys (int pin)
+{
+  return 0 ;
+}
+
+
 /*
  * pwmControl:
  *     Allow the user to control some of the PWM functions
@@ -627,7 +656,7 @@ void pwmSetRangeSys (unsigned int range)
 
 void pwmSetClockWPi (int divisor)
 {
-  unsigned int pwm_control ;
+  uint32_t pwm_control ;
   divisor &= 4095 ;
 
   if (wiringPiDebug)
@@ -811,10 +840,11 @@ void setPadDriveWPi (int group, int value)
   wrVal = BCM_PASSWORD | 0x18 | (value & 7) ;
   *(pads + group + 11) = wrVal ;
 
-#ifdef DEBUG_PADS
-  printf ("setPadDrive: Group: %d, value: %d (%08X)\n", group, value, wrVal) ;
-  printf ("Read : %08X\n", *(pads + group + 11)) ;
-#endif
+  if (wiringPiDebug)
+  {
+    printf ("setPadDrive: Group: %d, value: %d (%08X)\n", group, value, wrVal) ;
+    printf ("Read : %08X\n", *(pads + group + 11)) ;
+  }
 }
 
 void setPadDriveGpio (int group, int value)
@@ -913,22 +943,12 @@ void pullUpDnControlSys (int pin, int pud)
 int waitForInterruptSys (int pin, int mS)
 {
   int fd, x ;
-  char buf [8] ;
+  uint8_t c ;
   struct pollfd polls ;
 
   if ((fd = sysFds [pin & 63]) == -1)
     return -2 ;
 
-// Do a dummy read
-
-  x = read (fd, buf, 6) ;
-  if (x < 0)
-    return x ;
-
-// And seek
-
-  lseek (fd, 0, SEEK_SET) ;
-
 // Setup poll structure
 
   polls.fd     = fd ;
@@ -936,7 +956,14 @@ int waitForInterruptSys (int pin, int mS)
 
 // Wait for it ...
 
-  return poll (&polls, 1, mS) ;
+  x = poll (&polls, 1, mS) ;
+
+// Do a dummy read to clear the interrupt
+//     A one character read appars to be enough.
+
+  (void)read (fd, &c, 1) ;
+
+  return x ;
 }
 
 int waitForInterruptWPi (int pin, int mS)
@@ -986,6 +1013,8 @@ int wiringPiISR (int pin, int mode, void (*function)(void))
   char *modeS ;
   char  pinS [8] ;
   pid_t pid ;
+  int   count, i ;
+  uint8_t c ;
 
   pin &= 63 ;
 
@@ -1027,12 +1056,18 @@ int wiringPiISR (int pin, int mode, void (*function)(void))
   }
 
 // Now pre-open the /sys/class node - it may already be open if
-//     we had set it up earlier, but this will do no harm.
+//     we are in Sys mode, but this will do no harm.
 
   sprintf (fName, "/sys/class/gpio/gpio%d/value", pin) ;
   if ((sysFds [pin] = open (fName, O_RDWR)) < 0)
     return -1 ;
 
+// 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_create (&threadId, NULL, interruptHandler, &pin) ;
@@ -1043,6 +1078,22 @@ int wiringPiISR (int pin, int mode, void (*function)(void))
 }
 
 
+/*
+ * initialiseEpoch:
+ *     Initialise our start-of-time variable to be the current unix
+ *     time in milliseconds.
+ *********************************************************************************
+ */
+
+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 milli seconds
@@ -1078,28 +1129,8 @@ void delay (unsigned int howLong)
  *********************************************************************************
  */
 
-void delayMicrosecondsSys (unsigned int howLong)
-{
-  struct timespec sleeper, dummy ;
-
-  sleeper.tv_sec  = 0 ;
-  sleeper.tv_nsec = (long)(howLong * 1000) ;
-
-  nanosleep (&sleeper, &dummy) ;
-}
-
 void delayMicrosecondsHard (unsigned int howLong)
 {
-#ifdef  HARD_TIMER
-  volatile unsigned int dummy ;
-
-  *(timer + TIMER_LOAD)    = howLong ;
-  *(timer + TIMER_IRQ_CLR) = 0 ;
-
-  dummy = *timerIrqRaw ;
-  while (dummy == 0)
-    dummy = *timerIrqRaw ;
-#else
   struct timeval tNow, tLong, tEnd ;
 
   gettimeofday (&tNow, NULL) ;
@@ -1109,10 +1140,9 @@ void delayMicrosecondsHard (unsigned int howLong)
 
   while (timercmp (&tNow, &tEnd, <))
     gettimeofday (&tNow, NULL) ;
-#endif
 }
 
-void delayMicrosecondsWPi (unsigned int howLong)
+void delayMicroseconds (unsigned int howLong)
 {
   struct timespec sleeper ;
 
@@ -1138,13 +1168,30 @@ void delayMicrosecondsWPi (unsigned int howLong)
 unsigned int millis (void)
 {
   struct timeval tv ;
-  unsigned long long t1 ;
+  uint64_t now ;
 
   gettimeofday (&tv, NULL) ;
+  now  = (uint64_t)tv.tv_sec * (uint64_t)1000 + (uint64_t)(tv.tv_usec / 1000) ;
 
-  t1 = (tv.tv_sec * 1000000 + tv.tv_usec) / 1000 ;
+  return (uint32_t)(now - epochMilli) ;
+}
+
+
+/*
+ * micros:
+ *     Return a number of microseconds as an unsigned int.
+ *********************************************************************************
+ */
 
-  return (uint32_t)(t1 - epoch) ;
+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) ;
 }
 
 
@@ -1161,8 +1208,6 @@ int wiringPiSetup (void)
 {
   int      fd ;
   int      boardRev ;
-  //uint8_t *gpioMem, *pwmMem, *clkMem, *padsMem, *timerMem ;
-  struct timeval tv ;
 
   if (geteuid () != 0)
   {
@@ -1180,6 +1225,7 @@ int wiringPiSetup (void)
     printf ("wiringPi: wiringPiSetup called\n") ;
 
             pinMode =           pinModeWPi ;
+             getAlt =            getAltWPi ;
     pullUpDnControl =   pullUpDnControlWPi ;
        digitalWrite =      digitalWriteWPi ;
    digitalWriteByte = digitalWriteByteGpio ;   // Same code
@@ -1187,7 +1233,6 @@ int wiringPiSetup (void)
         setPadDrive =       setPadDriveWPi ;
         digitalRead =       digitalReadWPi ;
    waitForInterrupt =  waitForInterruptWPi ;
-  delayMicroseconds = delayMicrosecondsWPi ;
          pwmSetMode =        pwmSetModeWPi ;
         pwmSetRange =       pwmSetRangeWPi ;
         pwmSetClock =       pwmSetClockWPi ;
@@ -1268,11 +1313,6 @@ int wiringPiSetup (void)
     return -1 ;
   }
 
-#ifdef DEBUG_PADS
-  printf ("Checking pads @ 0x%08X\n", (unsigned int)pads) ;
-  printf (" -> %08X %08X %08X\n", *(pads + 11), *(pads + 12), *(pads + 13)) ;
-#endif
-
 // The system timer
 
   timer = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_TIMER) ;
@@ -1295,10 +1335,7 @@ int wiringPiSetup (void)
   *(timer + TIMER_PRE_DIV) = 0x00000F9 ;
   timerIrqRaw = timer + TIMER_IRQ_RAW ;
 
-// Initialise our epoch for millis()
-
-  gettimeofday (&tv, NULL) ;
-  epoch = (tv.tv_sec * 1000000 + tv.tv_usec) / 1000 ;
+  initialiseEpoch () ;
 
   wiringPiMode = WPI_MODE_PINS ;
 
@@ -1332,6 +1369,7 @@ int wiringPiSetupGpio (void)
     printf ("wiringPi: wiringPiSetupGpio called\n") ;
 
             pinMode =           pinModeGpio ;
+             getAlt =            getAltGpio ;
     pullUpDnControl =   pullUpDnControlGpio ;
        digitalWrite =      digitalWriteGpio ;
    digitalWriteByte =  digitalWriteByteGpio ;
@@ -1339,7 +1377,6 @@ int wiringPiSetupGpio (void)
         setPadDrive =       setPadDriveGpio ;
         digitalRead =       digitalReadGpio ;
    waitForInterrupt =  waitForInterruptGpio ;
-  delayMicroseconds = delayMicrosecondsWPi ;   // Same
          pwmSetMode =        pwmSetModeWPi ;
         pwmSetRange =       pwmSetRangeWPi ;
         pwmSetClock =       pwmSetClockWPi ;
@@ -1363,7 +1400,6 @@ int wiringPiSetupSys (void)
 {
   int boardRev ;
   int pin ;
-  struct timeval tv ;
   char fName [128] ;
 
   if (getenv ("WIRINGPI_DEBUG") != NULL)
@@ -1373,6 +1409,7 @@ int wiringPiSetupSys (void)
     printf ("wiringPi: wiringPiSetupSys called\n") ;
 
             pinMode =           pinModeSys ;
+             getAlt =            getAltSys ;
     pullUpDnControl =   pullUpDnControlSys ;
        digitalWrite =      digitalWriteSys ;
    digitalWriteByte =  digitalWriteByteSys ;
@@ -1380,7 +1417,6 @@ int wiringPiSetupSys (void)
         setPadDrive =       setPadDriveSys ;
         digitalRead =       digitalReadSys ;
    waitForInterrupt =  waitForInterruptSys ;
-  delayMicroseconds = delayMicrosecondsSys ;
          pwmSetMode =        pwmSetModeSys ;
         pwmSetRange =       pwmSetRangeSys ;
         pwmSetClock =       pwmSetClockSys ;
@@ -1401,10 +1437,7 @@ int wiringPiSetupSys (void)
     sysFds [pin] = open (fName, O_RDWR) ;
   }
 
-// Initialise the epoch for mills() ...
-
-  gettimeofday (&tv, NULL) ;
-  epoch = (tv.tv_sec * 1000000 + tv.tv_usec) / 1000 ;
+  initialiseEpoch () ;
 
   wiringPiMode = WPI_MODE_GPIO_SYS ;
 
index 7626d284db7e1f4775ec73788bda844f430ad3dc..47d8cc55a4025e111bcc43fce9be80f02b87d533 100644 (file)
@@ -81,13 +81,13 @@ extern int  wpiPinToGpio        (int wpiPin) ;
 extern int  wiringPiSetupPiFaceForGpioProg (void) ;    // Don't use this - for gpio program only
 
 extern void (*pinMode)           (int pin, int mode) ;
+extern int  (*getAlt)            (int pin) ;
 extern void (*pullUpDnControl)   (int pin, int pud) ;
 extern void (*digitalWrite)      (int pin, int value) ;
 extern void (*digitalWriteByte)  (int value) ;
 extern void (*pwmWrite)          (int pin, int value) ;
 extern void (*setPadDrive)       (int group, int value) ;
 extern int  (*digitalRead)       (int pin) ;
-extern void (*delayMicroseconds) (unsigned int howLong) ;
 extern void (*pwmSetMode)        (int mode) ;
 extern void (*pwmSetRange)       (unsigned int range) ;
 extern void (*pwmSetClock)       (int divisor) ;
@@ -111,7 +111,9 @@ extern int piHiPri (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
 }