diff options
Diffstat (limited to 'DOC/src/html')
-rw-r--r-- | DOC/src/html/download.html | 68 | ||||
-rw-r--r-- | DOC/src/html/ex_LDR.html | 150 | ||||
-rw-r--r-- | DOC/src/html/ex_ir_remote.html | 253 | ||||
-rw-r--r-- | DOC/src/html/ex_motor_shield.html | 254 | ||||
-rw-r--r-- | DOC/src/html/ex_rotary_encoder.html | 185 | ||||
-rw-r--r-- | DOC/src/html/ex_sonar_ranger.html | 164 | ||||
-rw-r--r-- | DOC/src/html/faq.html | 462 | ||||
-rw-r--r-- | DOC/src/html/index.html | 659 | ||||
-rw-r--r-- | DOC/src/html/misc.html | 33 | ||||
-rw-r--r-- | DOC/src/html/pif.html | 30 | ||||
-rw-r--r-- | DOC/src/html/piscope.html | 216 | ||||
-rw-r--r-- | DOC/src/html/sif.html | 2004 |
12 files changed, 4478 insertions, 0 deletions
diff --git a/DOC/src/html/download.html b/DOC/src/html/download.html new file mode 100644 index 0000000..740a3c8 --- /dev/null +++ b/DOC/src/html/download.html @@ -0,0 +1,68 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta name="generator" content="Bluefish 2.2.11" > +<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> +<title>download</title> +</head> +<body> +If the pigpio daemon is running it should be killed (sudo killall +pigpiod) before make install and restarted afterwards (sudo +pigpiod).<br> +<br> +<span style="font-weight: bold;">The initial part of the make, the +compilation of pigpio.c, takes 100 seconds on early model +Pis. Be patient. The overall install takes just over 3 +minutes.</span><br style="font-weight: bold;"> +<h3>Download and install latest version<br></h3> +<code> +wget https://github.com/joan2937/pigpio/archive/master.zip<br> +unzip master.zip<br> +cd pigpio-master<br> +make<br> +sudo make install<br> +</code> +<br> +If the Python part of the install fails it may be because you need +the setup tools.<br> +<br> +<code>sudo apt install python-setuptools +python3-setuptools<br></code><br> +<br> +<h3>To check the library</h3> +These tests make extensive use of GPIO 25 (pin 22). Make sure +nothing, or only a LED, is connected to the GPIO before running the +tests. Most tests are statistical in nature and so may on +occasion fail. Repeated failures on the same test or many +failures in a group of tests indicate a problem.<br> +<code><br> +sudo ./x_pigpio # check C I/F<br> +<br> +sudo pigpiod # start daemon<br> +<br> +./x_pigpiod_if2 # check C I/F to +daemon<br> +./x_pigpio.py # check Python I/F to daemon<br> +./x_pigs # check +pigs I/F to daemon<br> +./x_pipe # check +pipe I/F to daemon<br> +<br> +<br></code> +<h3>To compile, link, and run a C program</h3> +<code>gcc -Wall -pthread -o foobar foobar.c -lpigpio -lrt<br> +sudo ./foobar</code><code><br></code><br> +<h3>To start the pigpio daemon<br></h3> +<code>sudo pigpiod<br></code> +<h3>To stop the pigpio daemon<br></h3> +<code>sudo killall pigpiod<br></code><br> +<h3>github</h3> +<code>git clone https://github.com/joan2937/pigpio</code><br> +<h3>Raspbian (raspberrypi.org image)</h3> +<p>This may not be the most recent version. You can check the +version with the command pigpiod -v.<br></p> +<code>sudo apt-get update<br> +sudo apt-get install pigpio python-pigpio python3-pigpio</code><br> +<br> +</body> +</html> diff --git a/DOC/src/html/ex_LDR.html b/DOC/src/html/ex_LDR.html new file mode 100644 index 0000000..3c54c68 --- /dev/null +++ b/DOC/src/html/ex_LDR.html @@ -0,0 +1,150 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta name="generator" content="Bluefish 2.2.10" > +<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> +<title>LDR example</title> +</head> +<body> +<p>The following code shows a method of reading analogue sensors on +the digital input only Pi. A Light Dependent Resistor (LDR) +varies its resistance according to the incident light +intensisty.</p> +<h3>SETUP</h3> +<img src="images/LDR-fritz.png" alt="fritzing diagram" style= +"width: 200px; height: 300px;" align="left" hspace="10">The LDR +used is a Cadmium Sulphide device with a 1MOhm dark resistance and +2-4KOhm at 100 lux. The capacitor is a 104 +ceramic.<span itemprop="name"><br> +<br> +One end of the capacitor is connected to Pi ground.<br> +<br> +One end of the LDR is connected to Pi 3V3.<br> +<br> +The other ends of the capacitor and LDR are connected to a spare +gpio.</span><br> +<p>Here P1-1 is used for 3V3, P1-20 is used for ground, and gpio 18 +(P1-12) is used for the gpio.<br clear="all"></p> +<p><img src="images/LDR-photo.jpg" style= +"width: 500px; height: 667px;" alt="photo of set-up"></p> +<h3>CODE</h3> +<code>#include <stdio.h><br> +<br> +#include <pigpio.h><br> +<br> +/* +-----------------------------------------------------------------------<br> + +<br> + 3V3 ----- Light Dependent Resistor --+-- Capacitor +----- Ground<br> + +|<br> + ++-- gpio<br> +<br> +<br> + cc -o LDR LDR.c -lpigpio -lpthread -lrt<br> + sudo ./LDR<br> +<br> +*/<br> +<br> +#define LDR 18<br> +<br> +/* forward declaration */<br> +<br> +void alert(int pin, int level, uint32_t tick);<br> +<br> +int main (int argc, char *argv[])<br> +{<br> + if (gpioInitialise()<0) return 1;<br> +<br> + gpioSetAlertFunc(LDR, alert); /* call alert when LDR +changes state */<br> + <br> + while (1)<br> + {<br> + gpioSetMode(LDR, PI_OUTPUT); /* +drain capacitor */<br> +<br> + gpioWrite(LDR, PI_OFF);<br> +<br> + gpioDelay(200); /* 50 micros is +enough, 200 is overkill */<br> +<br> + gpioSetMode(LDR, PI_INPUT); /* start +capacitor recharge */<br> +<br> + gpioDelay(10000); /* nominal 100 +readings per second */<br> + }<br> +<br> + gpioTerminate();<br> +}<br> +<br> +void alert(int pin, int level, uint32_t tick)<br> +{<br> + static uint32_t inited = 0;<br> + static uint32_t lastTick, firstTick;<br> +<br> + uint32_t diffTick;<br> +<br> + if (inited)<br> + {<br> + diffTick = tick - lastTick;<br> + lastTick = tick;<br> +<br> + if (level == 1) printf("%u %d\ ", +tick-firstTick, diffTick);<br> + }<br> + else<br> + {<br> + inited = 1;<br> + firstTick = tick;<br> + lastTick = firstTick;<br> + }<br> +}<br></code> +<h3>BUILD</h3> +<code>cc -o LDR LDR.c -lpigpio -lrt -lpthread<br></code> +<h3>RUN</h3> +<code>sudo ./LDR >LDR.dat &</code><br> +<br> +While the program is running you can capture the waveform using the +notification feature built in to pigpio. Issue the following +commands on the Pi.<br> +<br> +<code>pigs no<br> +pig2vcd </dev/pigpio0 >LDR.vcd &<br> +pigs nb 0 0x40000 # set bit for gpio 18<br></code> +<p>Change the light falling on the LDR for a few seconds (e.g. +shine a torch on it or shade it with your hands).<br></p> +<code>pigs nc 0</code><br> +<p>The file LDR.vcd will contain the captured waveform, which can +be viewed using GTKWave.</p> +<p>Overview</p> +<img src="images/LDR-wave-1.png" style= +"width: 600px; height: 100px;" alt="LDR waveform 1"><br> +<p>Reading circa every 10ms<br></p> +<img src="images/LDR-wave-2.png" style= +"width: 600px; height: 100px;" alt="LDR waveform 2"><br> +<p>One reading, circa 400us<br></p> +<img src="images/LDR-wave-3.png" style= +"width: 600px; height: 100px;" alt="LDR waveform 3"><br> +<p>The file LDR.dat will contain pairs of timestamps and recharge +time (in us). The following script will convert the +timestamps into seconds.<span style= +"font-style: italic;"><br></span></p> +<p><code>awk '{print $1/1000000, $2}' LDR.dat +>LDR-secs.dat</code></p> +<p>Gnuplot is a useful tool to graph data.<br></p> +plot [14:24] 'LDR-secs.dat' with lines title 'LDR' +<p>Gnuplot readings 14-24 seconds<br></p> +<p><img src="images/LDR-gnup-1.png" style= +"width: 600px; height: 321px;" alt="gnuplot 1"></p> +plot [18:21] 'LDR-secs.dat' with lines title 'LDR'<br> +<br> +Gnuplot readings 18-21 seconds +<p><img src="images/LDR-gnup-2.png" style= +"width: 600px; height: 321px;" alt="Gnuplot 2"></p> +</body> +</html> diff --git a/DOC/src/html/ex_ir_remote.html b/DOC/src/html/ex_ir_remote.html new file mode 100644 index 0000000..2400a11 --- /dev/null +++ b/DOC/src/html/ex_ir_remote.html @@ -0,0 +1,253 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta name="generator" content="Bluefish 2.2.10" > +<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> +<title>IR remote example</title> +</head> +<body> +<p>The following code shows one way to read an infrared remote +control device (the sort used in TVs and stereo systems).</p> +<h3>SETUP</h3> +<img alt="fritzing diagram" style="width: 200px; height: 317px;" +src="images/ir-fritz.png" align="left" hspace="10">The device used +is a <span itemprop="name">SFH5110 (IR Receiver for remote control, +carrier 38 kHz).<br> +<br></span> Pin 1 (left from front) may be connected to any spare +gpio. Here it's connected via a 4K7 current limiting +resistor. This isn't really needed as the device has an +internal 23K resistor in-line. It does no harm though.<br> +<br> +Pin 2 should be connected to a Pi ground pin.<br> +<br> +Pin 3 should be connected to a Pi 5V pin.<br> +<p>Here pin 1 to gpio7 (P1-26) via a 4K7 resistor, pin 2 to ground +(P1-14), and pin 3 to 5V (P1-2).<br clear="all"></p> +<p><img src="images/ir-photo.jpg" style= +"width: 500px; height: 500px;" alt="photo of set-up"></p> +<h3>CODE</h3> +<code>#include <stdio.h><br> +<br> +#include <pigpio.h><br> +<br> +#define IR_PIN 7<br> +<br> +#define OUTSIDE_CODE 0<br> +#define INSIDE_CODE 1<br> +<br> +#define MIN_MESSAGE_GAP 3000<br> +#define MAX_MESSAGE_END 3000<br> +<br> +#define MAX_TRANSITIONS 500<br> +<br> +/*<br> + using the FNV-1a +hash <br> + + from +http://isthe.com/chongo/tech/comp/fnv/#FNV-param<br> +*/<br> +<br> +#define FNV_PRIME_32 16777619<br> +#define FNV_BASIS_32 2166136261U<br> +<br> +static volatile uint32_t ir_hash = 0;<br> +<br> +typedef struct<br> +{<br> + int state;<br> + int count;<br> + int level;<br> + uint16_t micros[MAX_TRANSITIONS];<br> +} decode_t;<br> +<br> +/* forward declarations */<br> +<br> +void alert(int gpio, int level, uint32_t +tick);<br> +uint32_t getHash(decode_t * decode);<br> +void updateState(decode_t * decode, int +level, uint32_t micros);<br> +<br> +int main(int argc, char * argv[])<br> +{<br> + if (gpioInitialise()<0)<br> + {<br> + return 1 ;<br> + }<br> +<br> + /* IR pin as input */<br> +<br> + gpioSetMode(IR_PIN, PI_INPUT);<br> +<br> + /* 5ms max gap after last pulse */<br> +<br> + gpioSetWatchdog(IR_PIN, 5);<br> +<br> + /* monitor IR level changes */<br> +<br> + gpioSetAlertFunc(IR_PIN, alert);<br> +<br> + while (1)<br> + {<br> + if (ir_hash)<br> + {<br> + /* non-zero means +new decode */<br> + printf("ir code is +%u\ ", ir_hash);<br> + ir_hash = 0;<br> + }<br> +<br> + gpioDelay(100000); /* check remote +10 times per second */<br> + }<br> +<br> + gpioTerminate();<br> +}<br> +<br> +void alert(int gpio, int level, uint32_t tick)<br> +{<br> + static int inited = 0;<br> +<br> + static decode_t activeHigh, activeLow;<br> +<br> + static uint32_t lastTick;<br> +<br> + uint32_t diffTick;<br> +<br> + if (!inited)<br> + {<br> + inited = 1;<br> +<br> + activeHigh.state = OUTSIDE_CODE; +activeHigh.level = PI_LOW;<br> + activeLow.state = +OUTSIDE_CODE; activeLow.level = PI_HIGH;<br> +<br> + lastTick = tick;<br> + return;<br> + }<br> +<br> + diffTick = tick - lastTick;<br> +<br> + if (level != PI_TIMEOUT) lastTick = tick;<br> +<br> + updateState(&activeHigh, level, diffTick);<br> + updateState(&activeLow, level, diffTick);<br> +}<br> +<br> +void updateState(decode_t * decode, int level, uint32_t micros)<br> +{<br> + /*<br> + We are dealing with active high as +well as active low<br> + remotes. Abstract the common +functionality.<br> + */<br> +<br> + if (decode->state == OUTSIDE_CODE)<br> + {<br> + if (level == decode->level)<br> + {<br> + if (micros > +MIN_MESSAGE_GAP)<br> + {<br> + +decode->state = INSIDE_CODE;<br> + +decode->count = 0;<br> + }<br> + }<br> + }<br> + else<br> + {<br> + if (micros > MAX_MESSAGE_END)<br> + {<br> + /* end of message +*/<br> +<br> + /* ignore if last +code not consumed */<br> +<br> + if (!ir_hash) +ir_hash = getHash(decode);<br> +<br> + decode->state = +OUTSIDE_CODE;<br> + }<br> + else<br> + {<br> + if +(decode->count < (MAX_TRANSITIONS-1))<br> + {<br> + +if (level != PI_TIMEOUT)<br> + +decode->micros[decode->count++] = micros;<br> + }<br> + }<br> + }<br> +}<br> +<br> +int compare(unsigned int oldval, unsigned int newval)<br> +{<br> + if (newval < (oldval +* 0.75)) {return 1;}<br> + else if (oldval < (newval * 0.75)) {return 2;}<br> + +else +{return 4;}<br> +}<br> +<br> +uint32_t getHash(decode_t * decode)<br> +{<br> + /* use FNV-1a */<br> +<br> + uint32_t hash;<br> + int i, value;<br> +<br> + if (decode->count < 6) {return 0;}<br> +<br> + hash = FNV_BASIS_32;<br> +<br> + for (i=0; i<(decode->count-2); i++)<br> + {<br> + value = +compare(decode->micros[i], decode->micros[i+2]);<br> +<br> + hash = hash ^ value;<br> + hash = (hash * FNV_PRIME_32);<br> + }<br> +<br> + return hash;<br> +}<br></code> +<h3>BUILD</h3> +<code>cc -o ir_remote ir_remote.c -lpigpio -lrt +-lpthread<br></code> +<h3>RUN</h3> +<code>sudo ./ir_remote</code><br> +<p>A hash code is formed from the level transitions detected during +a remote key press. This is likely to be unique over multiple +remotes and keys.</p> +<p>While the program is running you can capture the waveform using +the notification feature built in to pigpio. Issue the +following commands on the Pi.</p> +<code>pigs no<br> +pig2vcd </dev/pigpio0 >ir.vcd &<br> +pigs nb 0 0x80 # set bits for gpios 7 (0x80)<br></code> +<p>Press a few different remotes and keys. Then enter<br></p> +<code>pigs nc 0</code><br> +<p>The file ir.vcd will contain the captured waveform, which can be +viewed using GTKWave.</p> +<p>Overview</p> +<img src="images/ir-wave-1.png" style= +"width: 600px; height: 100px;" alt="ir remote waveform 1"><br> +<p>Remote A typical waveform</p> +<img src="images/ir-wave-2.png" style= +"width: 600px; height: 100px;" alt="ir remote waveform 2"><br> +<p>Remote B typical waveform</p> +<img style="width: 600px; height: 100px;" alt= +"ir remote waveform 3" src="images/ir-wave-3.png"> +</body> +</html> diff --git a/DOC/src/html/ex_motor_shield.html b/DOC/src/html/ex_motor_shield.html new file mode 100644 index 0000000..777ba9e --- /dev/null +++ b/DOC/src/html/ex_motor_shield.html @@ -0,0 +1,254 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta name="generator" content="Bluefish 2.2.10" > +<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> +<title>Arduino motor shield example</title> +</head> +<body> +The following example demonstrates the use of an Arduino shield +from the Rasperry Pi.<br> +<br> +The shield used is a clone of the Adafruit motor shield. See +<a href="http://shieldlist.org/adafruit/motor">shieldlist.org</a> +for details.<br> +<br> +For the demonstration DC motors 3 and 4 are being driven forwards +and backwards with changing speeds (speeds are controlled via +PWM).<br> +<br> +Seven connections are made between the Pi and the shield. +Four to latch the motor states (latch, enable, data, clock); Two to +control motor speed (PWM 3 and 4); and ground.<br> +<br> +The code used was ported from the Adafruit Arduino code and +converted to use the pigpio library. Only the DC motor code +was ported.<br> +<br> +A video of the shield in use is available at <a href= +"http://youtu.be/Z_l3C246oVI">youtube.com</a><br> +<code><br> +#include <stdio.h></code> <code><br> +<br> +#include <pigpio.h><br> +<br> +/*<br> + This code may be used to drive the Adafruit (or +clones) Motor Shield.<br> +<br> + The code as written only supports DC motors.<br> +<br> + http://shieldlist.org/adafruit/motor<br> +<br> + The shield pinouts are<br> +<br> + D12 MOTORLATCH<br> + D11 PMW motor 1<br> + D10 Servo 1<br> + D9 Servo 2<br> + D8 MOTORDATA<br> +<br> + D7 MOTORENABLE<br> + D6 PWM motor 4<br> + D5 PWM motor 3<br> + D4 MOTORCLK<br> + D3 PWM motor 2<br> +<br> + The motor states (forward, backward, brake, release) +are encoded using the<br> + MOTOR_ latch pins. This saves four gpios.<br> +*/<br> +<br> +typedef unsigned char uint8_t;<br> +<br> +#define BIT(bit) (1 << (bit))<br> +<br> +/* assign gpios to drive the shield pins */<br> +<br> +/* +Shield Pi */<br> +<br> +#define MOTORLATCH 14<br> +#define MOTORCLK 24<br> +#define MOTORENABLE 25<br> +#define MOTORDATA 15<br> +<br> +#define MOTOR_3_PWM 7<br> +#define MOTOR_4_PWM 8<br> +<br> +/*<br> + The only other connection needed between the Pi and +the shield<br> + is ground to ground. I used Pi P1-6 to shield gnd +(next to D13).<br> +*/<br> +<br> +/* assignment of motor states to latch */<br> +<br> +#define MOTOR1_A 2<br> +#define MOTOR1_B 3<br> +#define MOTOR2_A 1<br> +#define MOTOR2_B 4<br> +#define MOTOR4_A 0<br> +#define MOTOR4_B 6<br> +#define MOTOR3_A 5<br> +#define MOTOR3_B 7<br> +<br> +#define FORWARD 1<br> +#define BACKWARD 2<br> +#define BRAKE 3<br> +#define RELEASE 4<br> +<br> +static uint8_t latch_state;<br> +<br> +void latch_tx(void)<br> +{<br> + unsigned char i;<br> +<br> + gpioWrite(MOTORLATCH, PI_LOW);<br> +<br> + gpioWrite(MOTORDATA, PI_LOW);<br> +<br> + for (i=0; i<8; i++)<br> + {<br> + gpioDelay(10); // 10 micros +delay<br> +<br> + gpioWrite(MOTORCLK, PI_LOW);<br> +<br> + if (latch_state & BIT(7-i)) +gpioWrite(MOTORDATA, PI_HIGH);<br> + +else +gpioWrite(MOTORDATA, PI_LOW);<br> +<br> + gpioDelay(10); // 10 micros +delay<br> +<br> + gpioWrite(MOTORCLK, PI_HIGH);<br> + }<br> +<br> + gpioWrite(MOTORLATCH, PI_HIGH);<br> +}<br> +<br> +void init(void)<br> +{<br> + latch_state = 0;<br> +<br> + latch_tx();<br> +<br> + gpioWrite(MOTORENABLE, PI_LOW);<br> +}<br> +<br> +void DCMotorInit(uint8_t num)<br> +{<br> + switch (num)<br> + {<br> + case 1: latch_state &= +~BIT(MOTOR1_A) & ~BIT(MOTOR1_B); break;<br> + case 2: latch_state &= +~BIT(MOTOR2_A) & ~BIT(MOTOR2_B); break;<br> + case 3: latch_state &= +~BIT(MOTOR3_A) & ~BIT(MOTOR3_B); break;<br> + case 4: latch_state &= +~BIT(MOTOR4_A) & ~BIT(MOTOR4_B); break;<br> + default: return;<br> + }<br> +<br> + latch_tx();<br> +<br> + printf("Latch=%08X\ ", latch_state);<br> +}<br> +<br> +void DCMotorRun(uint8_t motornum, uint8_t cmd)<br> +{<br> + uint8_t a, b;<br> +<br> + switch (motornum)<br> + {<br> + case 1: a = MOTOR1_A; b = MOTOR1_B; +break;<br> + case 2: a = MOTOR2_A; b = MOTOR2_B; +break;<br> + case 3: a = MOTOR3_A; b = MOTOR3_B; +break;<br> + case 4: a = MOTOR4_A; b = MOTOR4_B; +break;<br> + default: return;<br> + }<br> + <br> + switch (cmd)<br> + {<br> + case FORWARD: latch_state +|= BIT(a); latch_state &= ~BIT(b); break;<br> + case BACKWARD: latch_state &= +~BIT(a); latch_state |= BIT(b); break;<br> + case RELEASE: latch_state +&= ~BIT(a); latch_state &= ~BIT(b); break;<br> + default: return;<br> + }<br> +<br> + latch_tx();<br> +<br> + printf("Latch=%08X\ ", latch_state);<br> +}<br> +<br> +int main (int argc, char *argv[])<br> +{<br> + int i;<br> +<br> + if (gpioInitialise()<0) return 1;<br> +<br> + gpioSetMode(MOTORLATCH, PI_OUTPUT);<br> + gpioSetMode(MOTORENABLE, PI_OUTPUT);<br> + gpioSetMode(MOTORDATA, PI_OUTPUT);<br> + gpioSetMode(MOTORCLK, +PI_OUTPUT);<br> +<br> + gpioSetMode(MOTOR_3_PWM, PI_OUTPUT);<br> + gpioSetMode(MOTOR_4_PWM, PI_OUTPUT);<br> +<br> + gpioPWM(MOTOR_3_PWM, 0);<br> + gpioPWM(MOTOR_4_PWM, 0);<br> +<br> + init();<br> +<br> + for (i=60; i<160; i+=20)<br> + {<br> + gpioPWM(MOTOR_3_PWM, i);<br> + gpioPWM(MOTOR_4_PWM, 220-i);<br> +<br> + DCMotorRun(3, FORWARD);<br> + DCMotorRun(4, BACKWARD);<br> +<br> + sleep(2);<br> +<br> + DCMotorRun(3, RELEASE);<br> + DCMotorRun(4, RELEASE);<br> +<br> + sleep(2);<br> +<br> + gpioPWM(MOTOR_4_PWM, i);<br> + gpioPWM(MOTOR_3_PWM, 220-i);<br> +<br> + DCMotorRun(3, BACKWARD);<br> + DCMotorRun(4, FORWARD);<br> +<br> + sleep(2);<br> +<br> + DCMotorRun(3, RELEASE);<br> + DCMotorRun(4, RELEASE);<br> +<br> + sleep(2);<br> + }<br> +<br> + gpioPWM(MOTOR_4_PWM, 0);<br> + gpioPWM(MOTOR_3_PWM, 0);<br> +<br> + DCMotorRun(3, RELEASE);<br> + DCMotorRun(4, RELEASE);<br> +<br> + gpioTerminate();<br> +}<br></code> +</body> +</html> diff --git a/DOC/src/html/ex_rotary_encoder.html b/DOC/src/html/ex_rotary_encoder.html new file mode 100644 index 0000000..b95711e --- /dev/null +++ b/DOC/src/html/ex_rotary_encoder.html @@ -0,0 +1,185 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta name="generator" content="Bluefish 2.2.10" > +<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> +<title>Rotary encoder sample</title> +</head> +<body> +<p>The following code shows one way to read an incremental +mechanical rotary enoder (the sort used for volume control in audio +systems). These rotary encoders have two switches A and B +which return a quadrature output, i.e. they are 90 degrees out of +phase.</p> +<h3>SETUP</h3> +<img alt="fritzing diagram" style="width: 200px; height: 300px;" +src="images/re-fritz.png" align="left" hspace="10">The common +(centre) terminal should be connected to a Pi ground. +<p>The A and B terminals may be connected to any spare gpios.</p> +<p>Here A to gpio18 (P1-12), common to ground (P1-20), B to gpio7 +(P1-26).<br clear="all"></p> +<p><img src="images/re-photo.jpg" style= +"width: 400px; height: 300px;" alt="photo of set-up"></p> +<h3>CODE</h3> +<code>#include <stdio.h><br> +<br> +#include <pigpio.h><br> +<br> +/*<br> + Rotary encoder connections:<br> +<br> + Encoder A - gpio +18 (pin P1-12)<br> + Encoder B - gpio +7 (pin P1-26)<br> + Encoder Common - Pi ground (pin P1-20)<br> +*/<br> +<br> +#define ENCODER_A 18<br> +#define ENCODER_B 7<br> +<br> +static volatile int encoderPos;<br> +<br> +/* forward declaration */<br> +<br> +void encoderPulse(int gpio, int lev, uint32_t tick);<br> +<br> +int main(int argc, char * argv[])<br> +{<br> + int pos=0;<br> +<br> + if (gpioInitialise()<0) return 1;<br> +<br> + gpioSetMode(ENCODER_A, PI_INPUT);<br> + gpioSetMode(ENCODER_B, PI_INPUT);<br> +<br> + /* pull up is needed as encoder common is grounded +*/<br> +<br> + gpioSetPullUpDown(ENCODER_A, PI_PUD_UP);<br> + gpioSetPullUpDown(ENCODER_B, PI_PUD_UP);<br> +<br> + encoderPos = pos;<br> +<br> + /* monitor encoder level changes */<br> +<br> + gpioSetAlertFunc(ENCODER_A, encoderPulse);<br> + gpioSetAlertFunc(ENCODER_B, encoderPulse);<br> +<br> + while (1)<br> + {<br> + if (pos != encoderPos)<br> + {<br> + pos = +encoderPos;<br> + printf("pos=%d\ ", +pos);<br> + }<br> + gpioDelay(20000); /* check pos 50 +times per second */<br> + }<br> +<br> + gpioTerminate();<br> +}<br> +<br> +void encoderPulse(int gpio, int level, uint32_t tick)<br> +{<br> + /*<br> +<br> + ++---------+ ++---------+ 0<br> + +| +| +| |<br> + A +| +| +| |<br> + +| +| +| |<br> + ++---------+ ++---------+ +----- +1<br> +<br> + ++---------+ ++---------+ +0<br> + +| +| +| |<br> + B +| +| +| |<br> + +| +| +| |<br> + ----+ ++---------+ ++---------+ 1<br> +<br> + */<br> +<br> + static int levA=0, levB=0, lastGpio = -1;<br> +<br> + if (gpio == ENCODER_A) levA = level; else levB = +level;<br> +<br> + if (gpio != lastGpio) /* debounce */<br> + {<br> + lastGpio = gpio;<br> +<br> + if ((gpio == ENCODER_A) && +(level == 0))<br> + {<br> + if (!levB) +++encoderPos;<br> + }<br> + else if ((gpio == ENCODER_B) +&& (level == 1))<br> + {<br> + if (levA) +--encoderPos;<br> + }<br> + }<br> +}<br></code> +<h3>BUILD</h3> +<code>cc -o rotary_encoder rotary_encoder.c -lpigpio -lrt +-lpthread<br></code> +<h3>RUN</h3> +<code>sudo ./rotary_encoder</code><br> +<p>While the program is running you can capture the waveform using +the notification feature built in to pigpio. Issue the +following commands on the Pi.</p> +<code>pigs no<br> +pig2vcd </dev/pigpio0 >re.vcd &<br> +pigs nb 0 0x40080 # set bits for gpios 7 (0x80) and 18 +(0x40000)<br></code> +<p>Twiddle the rotary encoder forwards and backwards for a few +seconds. Then enter<br></p> +<code>pigs nc 0</code><br> +<p>The file re.vcd will contain the captured waveform, which can be +viewed using GTKWave.</p> +<br> +Overview<br> +<br> +<img src="images/re-wave-1.png" style= +"width: 600px; height: 100px;" alt= +"rotary encoder waveform overview"><br> +<br> +Detail of switch bounce. Contact A bounces for circa 700 us +before completing the level transition<br> +<br> +<img src="images/re-wave-2.png" style= +"width: 600px; height: 100px;" alt= +"rotary encoder waveform detail"><br> +</body> +</html> diff --git a/DOC/src/html/ex_sonar_ranger.html b/DOC/src/html/ex_sonar_ranger.html new file mode 100644 index 0000000..8edb9c2 --- /dev/null +++ b/DOC/src/html/ex_sonar_ranger.html @@ -0,0 +1,164 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta name="generator" content="Bluefish 2.2.10" > +<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> +<title>Sonar ranger example</title> +</head> +<body> +<p>The following code shows a method of reading a class of sonar +rangers. These rangers requires a trigger pulse. +Shortly after receiving a trigger they transmit a noise pulse and +set the echo line high. When the echo is received the echo +line is set low.<br></p> +<h3>SETUP</h3> +<img src="images/son-fritz.png" alt="fritzing diagram" style= +"width: 200px; height: 600px;" align="left" hspace="10"><br> +<br> +<br> +<br> +<br> +The ranger used is a SRF05 (check the pinouts, there are many +variants).<br> +<br> +The fritzing diagram shows the back of the ranger, i.e. pin 1 is +the rightmost.<br> +<br> +Pin 1 is 5V.<br> +Pin 2 is the trigger line.<br> +Pin 3 is the echo line.<br> +Pin 4 is out (unused).<br> +Pin 5 is ground.<br> +<br clear="all"> +<p><img src="images/son-photo.jpg" style= +"width: 500px; height: 376px;" alt="photo of set-up"></p> +<h3>CODE</h3> +<code>#include <stdio.h><br> +<br> +#include <pigpio.h><br> +<br> +/*<br> +<br> +P1 Name gpio used for<br> +<br> + 2 5V --- +5V<br> + 6 GND --- +Ground<br> +24 CE0 8 +Sonar echo<br> +26 CE1 7 +Sonar trigger<br> +<br> +*/<br> +<br> +#define SONAR_TRIGGER 7<br> +#define SONAR_ECHO 8<br> +<br> +/* forward prototypes */<br> +<br> +void sonarTrigger(void);<br> +<br> +void sonarEcho(int gpio, int level, uint32_t tick);<br> +<br> +int main(int argc, char *argv[])<br> +{<br> + if (gpioInitialise()<0) return 1;<br> +<br> + gpioSetMode(SONAR_TRIGGER, PI_OUTPUT);<br> + gpioWrite (SONAR_TRIGGER, PI_OFF);<br> +<br> + gpioSetMode(SONAR_ECHO, +PI_INPUT);<br> +<br> + /* update sonar 20 times a second, timer #0 */<br> +<br> + gpioSetTimerFunc(0, 50, sonarTrigger); /* every 50ms +*/<br> +<br> + /* monitor sonar echos */<br> +<br> + gpioSetAlertFunc(SONAR_ECHO, sonarEcho);<br> +<br> + while (1) sleep(1);<br> +<br> + gpioTerminate();<br> +<br> + return 0;<br> +}<br> +<br> +void sonarTrigger(void)<br> +{<br> + /* trigger a sonar reading */<br> +<br> + gpioWrite(SONAR_TRIGGER, PI_ON);<br> +<br> + gpioDelay(10); /* 10us trigger pulse */<br> +<br> + gpioWrite(SONAR_TRIGGER, PI_OFF);<br> +}<br> +<br> +void sonarEcho(int gpio, int level, uint32_t tick)<br> +{<br> + static uint32_t startTick, firstTick=0;<br> +<br> + int diffTick;<br> +<br> + if (!firstTick) firstTick = tick;<br> +<br> + if (level == PI_ON)<br> + {<br> + startTick = tick;<br> + }<br> + else if (level == PI_OFF)<br> + {<br> + diffTick = tick - startTick;<br> +<br> + printf("%u %u\ ", tick-firstTick, +diffTick);<br> + }<br> +}<br></code> +<h3>BUILD</h3> +<code>cc -o sonar sonar.c -lpigpio -lrt -lpthread<br></code> +<h3>RUN</h3> +<code>sudo ./sonar >sonar.dat &</code><br> +<br> +While the program is running you can capture the waveform using the +notification feature built in to pigpio. Issue the following +commands on the Pi.<br> +<br> +<code>pigs no<br> +pig2vcd </dev/pigpio0 >sonar.vcd &<br> +pigs nb 0 0x180 # set bits for gpios 7 and 8<br></code> +<p>Move an object in front of the sonar ranger for a few +seconds.<br></p> +<code>pigs nc 0</code><br> +<p>The file sonar.vcd will contain the captured waveform, which can +be viewed using GTKWave.</p> +<p>Overview</p> +<img src="images/son-wave-1.png" style= +"width: 600px; height: 100px;" alt="LDR waveform 1"><br> +<p>Reading circa every 10ms<br></p> +<img src="images/son-wave-2.png" style= +"width: 600px; height: 100px;" alt="Sonar waveform 2"><br> +<p>One reading, circa 400us<br></p> +<img src="images/son-wave-3.png" style= +"width: 600px; height: 100px;" alt="Sonar waveform 3"><br> +<p>another</p> +<img style="width: 600px; height: 100px;" alt="Sonar waveform 4" +src="images/son-wave-4.png"><br> +<p>The file sonar.dat will contain pairs of timestamps and echo +length (in us). The following script will convert the +timestamps into seconds.<span style= +"font-style: italic;"><br></span></p> +<p><code>awk '{print $1/1000000, $2}' sonar.dat +>sonar-secs.dat</code></p> +<p>Gnuplot is a useful tool to graph data.<br></p> +plot 'sonar-secs.dat' title 'Sonar'<br> +<p><img src="images/son-gnup-1.png" style= +"width: 600px; height: 321px;" alt="gnuplot 1"><br> + plot [10:25] 'sonar-secs.dat' title 'Sonar'<br></p> +<p><img src="images/son-gnup-2.png" style= +"width: 600px; height: 321px;" alt="gnuplot 1"></p> +</body> +</html> diff --git a/DOC/src/html/faq.html b/DOC/src/html/faq.html new file mode 100644 index 0000000..b8d6df5 --- /dev/null +++ b/DOC/src/html/faq.html @@ -0,0 +1,462 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta name="generator" content= +"HTML Tidy for HTML5 for Linux version 5.6.0"> +<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> +<title>faq</title> +</head> +<body> +<a href="#Are_my_GPIO_broken">Are my GPIO broken?</a><br> +<br> +<a href="#Audio_is_broken">Audio is broken</a><br> +<br> +<a href="#Cant_initialise_pigpio_library">Can´t initialise pigpio +library</a><br> +<br> +<a href="#Cant_lock_varrunpigpio.pid">Can´t lock +var/run/pigpio.pid</a><br> +<br> +<a href="#Hello_World">Hello World!</a><br> +<br> +<a href="#make_fails">Clock skew, make fails</a><br> +<br> +<a href="#Have_I_fried_my_GPIO">Have I fried my GPIO?</a><br> +<br> +<a href="#How_do_I_debounce_inputs">How do I debounce +inputs?</a><br> +<br> +<a href="#How_fast_is_SPI">How fast is SPI?</a><br> +<br> +<a href="#Library_update_fails">Library update didn't work</a><br> +<br> +<a href="#make_fails">make fails with clock skew</a><br> +<br> +<a href="#Porting_pigpio">Porting pigpio to another CPU/SoC</a><br> +<br> +<a href="#Sound_isnt_working">Sound isn't working</a><br> +<br> +<a href="#Library_update_fails">Symbol not found</a><br> +<br> +<a href="#What_is_I2C">What is I2C?</a><br> +<br> +<a href="#What_is_Serial">What is Serial?</a><br> +<br> +<a href="#What_is_SPI">What is SPI?</a><br> +<br> +<a href="#Which_library">Which library should I use?</a><br> +<br> +<h3><a name="Are_my_GPIO_broken" id="Are_my_GPIO_broken"></a>Are my +GPIO broken?</h3> +<p>See <a href="#Have_I_fried_my_GPIO">Have I fried my +GPIO?</a><br></p> +<h3><a name="Audio_is_broken" id="Audio_is_broken"></a>Audio is +broken</h3> +<p>See <a href="#Sound_isnt_working">Sound isn't +working</a><br></p> +<h3><a name="Cant_lock_varrunpigpio.pid" id= +"Cant_lock_varrunpigpio.pid"></a>Can´t lock +/var/run/pigpio.pid</h3> +<p>See <a href= +"#Cant_initialise_pigpio_library">Can´t_initialise_pigpio_library</a><br> +</p> +<h3><a name="Cant_initialise_pigpio_library" id= +"Cant_initialise_pigpio_library"></a>Can´t initialise pigpio +library</h3> +<p>This message means the pigpio daemon is already running.<br></p> +<p>The default daemon is called pigpiod and may be removed as +follows.<br></p> +Check that it is running with the command +<p><code>ps aux | grep pigpiod</code></p> +<p>Kill the daemon with<br></p> +<p><code>sudo killall pigpiod</code></p> +<p>If your own program is acting as the daemon it may be removed as +follows.</p> +<p>Find its process id (<span style= +"font-style: italic;">pid</span>).<br></p> +<p><code>cat /var/run/pigpio.pid</code><br></p> +<p>Kill the program with<br></p> +<p><code>sudo kill -9 <span style= +"font-style: italic;">pid</span></code><br></p> +If the above doesn't work do the following and try starting the +daemon again +<p><code>sudo rm /var/run/pigpio.pid<br></code></p> +<p>To start the daemon do</p> +<p><code>sudo pigpiod</code></p> +<h3><a name="Have_I_fried_my_GPIO" id= +"Have_I_fried_my_GPIO"></a>Have I fried my GPIO?</h3> +<p>If you think you have damaged one or more GPIO you can carry out +a diagnostic test.</p> +<p>The test is a command line script called <a rel="nofollow" +class="external text" href= +"http://abyz.me.uk/rpi/pigpio/code/gpiotest.zip">gpiotest</a></p> +For the duration of the test nothing must be connected to the GPIO +(no LEDs, wires, ribbon cables etc.). +<p>The test checks that each GPIO may be read and written and that +the internal resistor pull-ups and pull-downs are functional.</p> +<p>A <a rel="nofollow" class="external text" href= +"https://www.youtube.com/watch?v=sCJFLKWaxHo&feature=youtu.be">video</a> +showing what happens to the GPIO during a test.</p> +<p>A test with all GPIO okay.</p> +<pre>This program checks the Pi's (user) gpios. + +The program reads and writes all the gpios. Make sure NOTHING +is connected to the gpios during this test. + +The program uses the pigpio daemon which must be running. + +To start the daemon use the command sudo pigpiod. + +Press the ENTER key to continue or ctrl-C to abort... + +Testing... +Skipped non-user gpios: 0 1 28 29 30 31 +Tested user gpios: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18<br> 19 20 21 22 23 24 25 26 27 +Failed user gpios: None +</pre> +<p>A test showing failed GPIO.</p> +<pre>This program checks the Pi's (user) gpios. + +The program reads and writes all the gpios. Make sure NOTHING +is connected to the gpios during this test. + +The program uses the pigpio daemon which must be running. + +To start the daemon use the command sudo pigpiod. + +Press the ENTER key to continue or ctrl-C to abort... + +Testing... +Write 1 to gpio 17 failed. +Pull up on gpio 17 failed. +Write 1 to gpio 18 failed. +Pull up on gpio 18 failed. +Write 0 to gpio 23 failed. +Pull down on gpio 23 failed. +Write 0 to gpio 24 failed. +Pull down on gpio 24 failed. +Write 1 to gpio 27 failed. +Pull up on gpio 27 failed. +Skipped non-user gpios: 0 1 28 29 30 31 +Tested user gpios: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18<br> 19 20 21 22 23 24 25 26 27 +Failed user gpios: 17 18 23 24 27 +</pre> +<h3><a name="How_do_I_debounce_inputs" id= +"How_do_I_debounce_inputs"></a>How do I debounce inputs?</h3> +<p>Some devices like mechanical switches can generate multiple +interrupts as they bounce between on and off. It is possible +to debounce the inputs in hardware by the correct use of resistors +and capacitors.<br></p> +<p>In software use the glitch filter which ignores all events +shorter than a set number of microseconds. C <a href= +"cif.html#gpioGlitchFilter">gpioGlitchFilter</a>, Python <a href= +"python.html#set_glitch_filter">set_glitch_filter</a>.<br></p> +<h3><a name="How_fast_is_SPI" id="How_fast_is_SPI"></a>How fast is +SPI?</h3> +The SPI throughput in samples per second depends on a number of +factors.<br> +<br> +<ul> +<li>The SPI bit rate (transfer rate in bits per second)</li> +</ul> +<ul> +<li>The number of bytes transferred per sample (a 12 bit ADC sample +may require 3 bytes to transfer)</li> +</ul> +<ul> +<li>The driver used</li> +</ul> +<p>Two of those factors are fixed, the variable is the driver +used.</p> +<p>The pigpio driver is considerably faster than the Linux SPI +driver as is demonstrated by the following graphs.<br></p> +<p>Each graph shows the SPI bit rate in bits per second along the +horizontal axis. The samples per second achieved is shown on +the vertical axis. Each graph contains plots assuming 1 to 5 +bytes per transfer.<br></p> +<p>The source code used for the tests is <a href= +"code/spi-driver-speed.c">spi-driver-speed.c</a> and <a href= +"code/spi-pigpio-speed.c">spi-pigpio-speed.c</a><br></p> +<p><img alt="spi-lnx-pibr1.png" src="images/spi-lnx-pibr1.png"></p> +<hr> +<p><img alt="spi-pig-pibr1.png" src="images/spi-pig-pibr1.png"></p> +<hr> +<p><img alt="spi-lnx-pi3b.png" src="images/spi-lnx-pi3b.png"></p> +<hr> +<p><img alt="spi-pig-pi3b.png" src="images/spi-pig-pi3b.png"></p> +<h3><a name="Library_update_fails" id= +"Library_update_fails"></a>Library update didn't work</h3> +<p>pigpio places files in the following locations<br></p> +<p>/usr/local/include (pigpio.h, pigpiod_if.h, pigpiod_if2.h)<br> +/usr/local/lib (libpigpio.so, libpigpiod_if.so, +libpigpiod_if2.so)<br> +/usr/local/bin (pig2vcd, pigpiod, pigs)<br> +/usr/local/man (man pages)<br></p> +The raspberrypi.org image containing pigpio uses different +locations.<br> +<p>/usr/include (pigpio.h, pigpiod_if.h, pigpiod_if2.h)<br> +/usr/lib (libpigpio.so, libpigpiod_if.so, libpigpiod_if2.so)<br> +/usr/bin (pig2vcd, pigpiod, pigs)<br> +/usr/man (man pages)<br></p> +<p>Mostly this doesn't matter as the /usr/local directories will +generally be earlier in the search path. The pigpio built +includes, binaries, and manuals are normally found first.<br></p> +<p>However the wrong libraries may be linked during the +compilation. If this is the case remove the /usr/lib entries +for libpigpio.so , libpigpiod_if.so, and libpigpiod_if2.so</p> +<h3><a name="Hello_World" id="Hello_World"></a>Hello World!</h3> +<p>The following examples show how to use the various components of +the pigpio library.</p> +<p>Each example shows how to read the level of a GPIO.</p> +<h4>C</h4> +read_cif.c +<pre> +#include <stdio.h> +#include <pigpio.h> + +int main(int argc, char *argv[]) +{ + int GPIO=4; + int level; + + if (gpioInitialise() < 0) return 1; + + level = gpioRead(GPIO); + + printf("GPIO %d is %d\n", GPIO, level); + + gpioTerminate(); +} + </pre> +<p>Build</p> +<code>gcc -pthread -o read_cif read_cif.c -lpigpio</code> +<p>Run</p> +<code>sudo ./read_cif</code> +<h4>C via pigpio daemon</h4> +read_pdif.c +<pre> +#include <stdio.h> +#include <pigpiod_if2.h> + +int main(int argc, char *argv[]) +{ + int pi; + int GPIO=4; + int level; + + pi = pigpio_start(0, 0); /* Connect to local Pi. */ + + if (pi < 0) + { + printf("Can't connect to pigpio daemon\n"); + return 1; + } + + level = gpio_read(pi, GPIO); + + printf("GPIO %d is %d\n", GPIO, level); + + pigpio_stop(pi); /* Disconnect from local Pi. */ + + return 0; +} +</pre> +<p>Build</p> +<code>gcc -pthread -o read_pdif read_pdif.c -lpigpiod_if2</code> +<p>Run</p> +<code>./read_pdif</code> +<h4>Python</h4> +read_gpio.py +<pre> +#!/usr/bin/env python + +import pigpio + +GPIO=4 + +pi = pigpio.pi() +if not pi.connected: + exit() + +level = pi.read(GPIO) + +print("GPIO {} is {}".format(GPIO, level)) + +pi.stop() + </pre> +<p>Run</p> +<code>python read_gpio.py</code> +<h4>pigs</h4> +<pre> +pigs r 4 + </pre> +<h4>pipe I/F</h4> +<pre> +echo "r 4" >/dev/pigpio +cat /dev/pigout + </pre> +<h3><a name="make_fails" id="make_fails"></a>make fails with clock +skew</h3> +<p>If make fails with one of the following messages it is probably +because the Pi's clock is wrong.<br></p> +<p><code>make: Warning: File 'xxx' has modification time x s in the +future<br> +make: warning: Clock skew detected. Your build may be +incomplete.</code></p> +<p>make uses the current time to work out which files need to be +rebuilt (a file is rebuilt if it depends on other files which have +a later time-stamp).<br></p> +<p>The solution is to make sure the system clock is correct. +If the Pi is networked this will not normally be a problem.<br></p> +<p>To set the date and time use the date command as in the +following example.</p> +<p><code>sudo date -d "2017-03-01 18:47:00"</code></p> +<h3><a name="Porting_pigpio" id="Porting_pigpio"></a>Porting pigpio +to another CPU/SoC</h3> +<h3><a name="Sound_isnt_working" id="Sound_isnt_working"></a>Sound +isn't working</h3> +<p>The Pi contains two pieces of hardware, a PWM peripheral and a +PCM peripheral, to generate sound. The PWM peripheral is +normally used and generates medium quality audio out of the +headphone jack. The PCM peripheral may be used by add-ons +such as HATs and generates high quality audio.<br></p> +<p>pigpio uses at least one of these peripherals during normal +operation (for timing DMA transfers). pigpio will use both +peripherals if waves or the hardware PWM function is used.<br></p> +<p>By default pigpio uses the PCM peripheral leaving the PWM +peripheral free for medium quality audio.<br></p> +<p>You can change the default with a configuration option. +For C use <a href="cif.html#gpioCfgClock">gpioCfgClock</a>, for the +<a href="pigpiod.html">pigpio daemon</a> use the -t option.</p> +<h3><a name="What_is_I2C" id="What_is_I2C"></a>What is I2C?</h3> +<p>I2C is a data link between the Pi (master) and one or more +slaves.</p> +<p>Data may be sent and received but the Pi initiates all +transfers.<br></p> +<p>I2C is a medium speed link. On the Pi the default speed is +100 kbps, but 400 kbps also works.<br></p> +<p>I2C is implemented as a bus with two lines called<br></p> +<ul> +<li>SDA - for data</li> +<li>SCL - for a clock</li> +</ul> +On the Pi bus 1 is used which uses GPIO 2 (pin 3) for SDA and GPIO +3 (pin 5) for SCL.<br> +<br> +Only one slave device may be communicated with at a time. +Each message from the Pi includes the slave to be addressed and +whether a read or write is to be performed.<br> +<br> +When the Pi (master) wishes to talk to a slave it begins by issuing +a start sequence on the I2C bus. A start sequence is one of two +special sequences defined for the I2C bus, the other being the stop +sequence. The start sequence and stop sequence are special in that +these are the only places where the SDA (data line) is allowed to +change while the SCL (clock line) is high. When data is being +transferred, SDA must remain stable and not change whilst SCL is +high. The start and stop sequences mark the beginning and end of a +transaction with the slave device.<br> +<br> +<img style="width: 600px;" alt="I2C start and stop sequences" src= +"images/faq-i2c-ss.png"><br> +<br> +Data is transferred in 8-bit bytes. The bytes are placed on the SDA +line starting with the most significant bit. The SCL line is then +pulsed high, then low. For every byte transferred, the device +receiving the data sends back an acknowledge bit, so there are +actually 9 SCL clock pulses to transfer each 8-bit byte of data. If +the receiving device sends back a low ACK bit, then it has received +the data and is ready to accept another byte. If it sends back a +high then it is indicating it cannot accept any further data and +the master should terminate the transfer by sending a stop +sequence.<br> +<br> +<p><img style="width: 600px;" alt="I2C waveform" src= +"images/faq-i2c.jpg"><br></p> +<h3><a name="What_is_Serial" id="What_is_Serial"></a>What is +Serial?</h3> +<p>Serial is a data link between the Pi and one other +device.<br></p> +<p>Data may be sent and received. Either the Pi or the device +can initiate a transfer.<br></p> +<p>Serial is a low to medium speed link. On the Pi speeds of +50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, +19200, 38400, 57600, 115200, and 230400 bps may be used.<br></p> +<p>Serial is implemented with one line for transmit called TXD and +one line for receive called RXD.<br></p> +<p>If only receive or transmit are required the other line need not +be connected.<br></p> +<p>The Pi uses GPIO 14 (pin 8) for TXD and GPIO 15 (pin 10) for +RXD.<br></p> +<p>Data is normally transmitted in 8-bit bytes with a start bit, +eight data bits, no parity, and one stop bit. This is +represented as 8N1. The number of transmitted bits per second +(bps) is called the baud rate. The time for each bit, +<span style="font-style: italic;">1 / baud rate</span> seconds, is +referred to as the bit period.<br></p> +<p>The lines are in the high state when no data is being +transmitted. The start of a byte is signalled by the line +going low for one bit period (the start bit). The data bits +are then sent least significant bit firsts (low if the bit is 0, +high if the bit is 1). The data bits are followed by the +optional parity bit. Finally the line is set high for at +least the number of stop bit periods. The line will stay high +if there are no more bytes to be transmitted.<br></p> +<p><img style="width: 600px;" alt="Serial waveform" src= +"images/faq-serial.jpg"><br></p> +<h3><a name="What_is_SPI" id="What_is_SPI"></a>What is SPI?</h3> +<p>SPI is a data link between the Pi (master) and one or more +slaves.</p> +<p>Data may be sent and received but the Pi initiates all +transfers.<br></p> +<p>SPI is a medium to high speed link. On the Pi speeds of 32 +kbps to 8 Mbps may be used.<br></p> +<p>SPI is implemented as a bus with three lines called<br></p> +<ul> +<li>MOSI - for data from the Pi to the slave</li> +<li>MISO - for data from the slave to the Pi</li> +<li>SCLK - for a clock</li> +</ul> +Only one slave device may be communicated with at a time. An +additional line per slave called slave select is used to identify +the slave to be addressed. +<p>The Pi has two SPI buses<br></p> +<ol> +<li>the main SPI bus +<ul> +<li>MOSI GPIO 10 (pin 19)</li> +<li>MISO GPIO 9 (pin 21)</li> +<li>SCLK GPIO 11 (pin 23)</li> +<li>Slave selects</li> +<li style="list-style: none; display: inline"> +<ul> +<li>CE0 GPIO 8 (pin 24)</li> +<li>CE1 GPIO 7 (pin 26)</li> +</ul> +</li> +</ul> +</li> +<li>the auxiliary SPI bus +<ul> +<li>MOSI GPIO 20 (pin 38)</li> +<li>MISO GPIO 19 (pin 35)</li> +<li>SCLK GPIO 21 (pin 40)</li> +<li>Slave selects</li> +<li style="list-style: none; display: inline"> +<ul> +<li>CE0 GPIO 18 (pin 12)</li> +<li>CE1 GPIO 17 (pin 11)</li> +<li>CE2 GPIO 16 (pin 36)<br></li> +</ul> +</li> +</ul> +</li> +</ol> +<p><img style="width: 600px;" alt="SPI waveform" src= +"images/faq-spi.jpg"><br></p> +<p><br></p> +<h3><a name="Which_library" id="Which_library"></a>Which library +should I use?</h3> +<p><br></p> +</body> +</html> diff --git a/DOC/src/html/index.html b/DOC/src/html/index.html new file mode 100644 index 0000000..0b8e33c --- /dev/null +++ b/DOC/src/html/index.html @@ -0,0 +1,659 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" +"http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<meta name="generator" content="Bluefish 2.2.10" > +<meta content="text/html; charset=utf-8" http-equiv="content-type"> +<title>pigpio</title> +</head> +<body> +pigpio is a library for the Raspberry which allows control of the +General Purpose Input Outputs (GPIO). pigpio works on all +versions of the Pi. +<p><a href="download.html">Download</a><br></p> +<h3>Features<br></h3> +<ul> +<li> +<p>hardware timed sampling and time-stamping of GPIO 0-31 every 5 +us<br></p> +</li> +<li> +<p>hardware timed PWM on all of GPIO 0-31<br></p> +</li> +<li> +<p>hardware timed servo pulses on all of GPIO 0-31</p> +</li> +<li> +<p>callbacks on GPIO 0-31 level change (time accurate to a few +us)</p> +</li> +<li> +<p>notifications via pipe on GPIO 0-31 level change<br></p> +</li> +<li> +<p>callbacks at timed intervals</p> +</li> +<li> +<p>reading/writing all of the GPIO in a bank (0-31, 32-53) as a +single operation</p> +</li> +<li> +<p>GPIO reading, writing, modes, and internal pulls<br></p> +</li> +<li> +<p>socket and pipe interfaces for the bulk of the functionality</p> +</li> +<li> +<p>waveforms to generate GPIO level changes (time accurate to a few +us)</p> +</li> +<li> +<p>software serial links using any user GPIO</p> +</li> +<li> +<p>rudimentary permission control through the socket and pipe +interfaces<br></p> +</li> +<li>creating and running scripts on the pigpio daemon</li> +</ul> +<h3>General</h3> +The pigpio <a href="cif.html">library</a> is written in the C +programming language.<br> +<br> +The <a href="pigpiod.html">pigpio daemon</a> offers a <a href= +"sif.html">socket</a> and <a href="pif.html">pipe</a> interface to +the underlying C library.<br> +<br> +A <a href="pdif2.html">C library</a> and a <a href= +"python.html">Python module</a> allow control of the GPIO via the +pigpio daemon.<br> +<br> +There is third party support for a number of <a href= +"index.html#Other_Languages">other languages</a>. +<h3>piscope</h3> +<p><a href="piscope.html">piscope</a> is a logic analyser (digital +waveform viewer).<br></p> +piscope is a GTK+3 application and uses pigpio to provide raw GPIO +level data. piscope may be run on a Pi or on any machine +capable of compiling a GTK+3 application. +<h3><a name="GPIO" id="GPIO"></a>GPIO</h3> +<p><span style="font-weight: bold;">ALL GPIO</span> are identified +by their <span style="font-weight: bold;">Broadcom +number</span>. See <a href= +"http://elinux.org/RPi_Low-level_peripherals#General_Purpose_Input.2FOutput_.28GPIO.29"> +elinux.org</a><br></p> +There are 54 GPIO in total, arranged in two banks.<br> +<p>Bank 1 contains GPIO 0-31. Bank 2 contains GPIO +32-53.<br></p> +For all types of Pi it is safe to read all the GPIO. If you try to +write a system GPIO or change its mode you can crash the Pi or +corrupt the data on the SD card.<br> +<br> +There are several types of board, each with different expansion +headers, giving physical access to different GPIO. +<ul> +<li><a href="#Type_1">Type 1</a> - Model B (original model)</li> +<li><a href="#Type_2">Type 2</a> - Model A, B (revision 2)</li> +<li><a href="#Type_3">Type 3</a> - Model A+, B+, Pi Zero, Pi2B, +Pi3B</li> +<li><a href="#CM">Compute Module</a> - Compute Module</li> +</ul> +<h4><a name="Type_1" id="Type_1"></a>Type 1 - Model B (original +model)</h4> +<ul> +<li>26 pin header (P1).</li> +</ul> +<ul> +<li>Hardware revision numbers of 2 and 3.</li> +</ul> +<ul> +<li>User GPIO 0-1, 4, 7-11, 14-15, 17-18, 21-25.</li> +</ul> +<table summary="" style="width: 60%; text-align: left;" +cellspacing="0" cellpadding="0" border="0"> +<tbody> +<tr> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +<br></td> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +GPIO</td> +<td style="font-weight: bold; text-align: center;">pin</td> +<td style="font-weight: bold; text-align: center;">pin</td> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +GPIO</td> +<td style="font-weight: bold; text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">3V3</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">1</td> +<td style="text-align: center;">2</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">5V</td> +</tr> +<tr> +<td style="text-align: center;">SDA</td> +<td style="text-align: center;">0<br></td> +<td style="text-align: center;">3</td> +<td style="text-align: center;">4</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">5V</td> +</tr> +<tr> +<td style="text-align: center;">SCL</td> +<td style="text-align: center;">1<br></td> +<td style="text-align: center;">5</td> +<td style="text-align: center;">6</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">Ground</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">4</td> +<td style="text-align: center;">7</td> +<td style="text-align: center;">8</td> +<td style="text-align: center;">14</td> +<td style="text-align: center;">TXD</td> +</tr> +<tr> +<td style="text-align: center;">Ground</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">9</td> +<td style="text-align: center;">10</td> +<td style="text-align: center;">15</td> +<td style="text-align: center;">RXD</td> +</tr> +<tr> +<td style="text-align: center;">ce1</td> +<td style="text-align: center;">17</td> +<td style="text-align: center;">11</td> +<td style="text-align: center;">12</td> +<td style="text-align: center;">18</td> +<td style="text-align: center;">ce0</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">21</td> +<td style="text-align: center;">13</td> +<td style="text-align: center;">14</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">Ground</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">22</td> +<td style="text-align: center;">15</td> +<td style="text-align: center;">16</td> +<td style="text-align: center;">23</td> +<td style="text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">3V3</td> +<td style="text-align: center;">-<br></td> +<td style="text-align: center;">17</td> +<td style="text-align: center;">18</td> +<td style="text-align: center;">24</td> +<td style="text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">MOSI</td> +<td style="text-align: center;">10</td> +<td style="text-align: center;">19</td> +<td style="text-align: center;">20</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">Ground</td> +</tr> +<tr> +<td style="text-align: center;">MISO</td> +<td style="text-align: center;">9</td> +<td style="text-align: center;">21</td> +<td style="text-align: center;">22</td> +<td style="text-align: center;">25</td> +<td style="text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">SCLK</td> +<td style="text-align: center;">11</td> +<td style="text-align: center;">23</td> +<td style="text-align: center;">24</td> +<td style="text-align: center;">8</td> +<td style="text-align: center;">CE0</td> +</tr> +<tr> +<td style="text-align: center;">Ground</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">25</td> +<td style="text-align: center;">26</td> +<td style="text-align: center;">7</td> +<td style="text-align: center;">CE1</td> +</tr> +</tbody> +</table> +<br> +<h4><a name="Type_2" id="Type_2"></a>Type 2 - Model A, B (revision +2)</h4> +26 pin header (P1) and an additional 8 pin header (P5). +<ul> +<li>Hardware revision numbers of 4, 5, 6 (B), 7, 8, 9 (A), and 13, +14, 15 (B).</li> +</ul> +<ul> +<li>User GPIO 2-4, 7-11, 14-15, 17-18, 22-25, 27-31.<br></li> +</ul> +<table summary="" style="width: 60%; text-align: left;" +cellspacing="0" cellpadding="0" border="0"> +<tbody> +<tr> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +<br></td> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +GPIO</td> +<td style="font-weight: bold; text-align: center;">pin</td> +<td style="font-weight: bold; text-align: center;">pin</td> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +GPIO</td> +<td style="font-weight: bold; text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">3V3</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">1</td> +<td style="text-align: center;">2</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">5V</td> +</tr> +<tr> +<td style="text-align: center;">SDA</td> +<td style="text-align: center;">2</td> +<td style="text-align: center;">3</td> +<td style="text-align: center;">4</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">5V</td> +</tr> +<tr> +<td style="text-align: center;">SCL</td> +<td style="text-align: center;">3</td> +<td style="text-align: center;">5</td> +<td style="text-align: center;">6</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">Ground</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">4</td> +<td style="text-align: center;">7</td> +<td style="text-align: center;">8</td> +<td style="text-align: center;">14</td> +<td style="text-align: center;">TXD</td> +</tr> +<tr> +<td style="text-align: center;">Ground</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">9</td> +<td style="text-align: center;">10</td> +<td style="text-align: center;">15</td> +<td style="text-align: center;">RXD</td> +</tr> +<tr> +<td style="text-align: center;">ce1</td> +<td style="text-align: center;">17</td> +<td style="text-align: center;">11</td> +<td style="text-align: center;">12</td> +<td style="text-align: center;">18</td> +<td style="text-align: center;">ce0</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">27</td> +<td style="text-align: center;">13</td> +<td style="text-align: center;">14</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">Ground</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">22</td> +<td style="text-align: center;">15</td> +<td style="text-align: center;">16</td> +<td style="text-align: center;">23</td> +<td style="text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">3V3</td> +<td style="text-align: center;">-<br></td> +<td style="text-align: center;">17</td> +<td style="text-align: center;">18</td> +<td style="text-align: center;">24</td> +<td style="text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">MOSI</td> +<td style="text-align: center;">10</td> +<td style="text-align: center;">19</td> +<td style="text-align: center;">20</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">Ground</td> +</tr> +<tr> +<td style="text-align: center;">MISO</td> +<td style="text-align: center;">9</td> +<td style="text-align: center;">21</td> +<td style="text-align: center;">22</td> +<td style="text-align: center;">25</td> +<td style="text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">SCLK</td> +<td style="text-align: center;">11</td> +<td style="text-align: center;">23</td> +<td style="text-align: center;">24</td> +<td style="text-align: center;">8</td> +<td style="text-align: center;">CE0</td> +</tr> +<tr> +<td style="text-align: center;">Ground</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">25</td> +<td style="text-align: center;">26</td> +<td style="text-align: center;">7</td> +<td style="text-align: center;">CE1</td> +</tr> +</tbody> +</table> +<br> +<table summary="" style="width: 60%; text-align: left;" +cellspacing="0" cellpadding="0" border="0"> +<tbody> +<tr> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +<br></td> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +GPIO</td> +<td style="font-weight: bold; text-align: center;">pin</td> +<td style="font-weight: bold; text-align: center;">pin</td> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +GPIO</td> +<td style="font-weight: bold; text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">5V<br></td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">1</td> +<td style="text-align: center;">2</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">3V3</td> +</tr> +<tr> +<td style="text-align: center;">SDA<br></td> +<td style="text-align: center;">28</td> +<td style="text-align: center;">3</td> +<td style="text-align: center;">4</td> +<td style="text-align: center;">29</td> +<td style="text-align: center;">SCL</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">30</td> +<td style="text-align: center;">5</td> +<td style="text-align: center;">6</td> +<td style="text-align: center;">31</td> +<td style="text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">Ground<br></td> +<td style="text-align: center;">-<br></td> +<td style="text-align: center;">7</td> +<td style="text-align: center;">8</td> +<td style="text-align: center;">-<br></td> +<td style="text-align: center;">Ground</td> +</tr> +</tbody> +</table> +<br> +<h4><a name="Type_3" id="Type_3"></a>Type 3 - Model A+, B+, Pi +Zero, Pi Zero W, Pi2B, Pi3B, Pi4B<br></h4> +<ul> +<li>40 pin expansion header (J8).</li> +</ul> +<ul> +<li>Hardware revision numbers of 16 or greater.</li> +</ul> +<ul> +<li>User GPIO 2-27 (0 and 1 are reserved).<br></li> +</ul> +<table summary="" style="width: 60%; text-align: left;" +cellspacing="0" cellpadding="0" border="0"> +<tbody> +<tr> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +<br></td> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +GPIO</td> +<td style="font-weight: bold; text-align: center;">pin</td> +<td style="font-weight: bold; text-align: center;">pin</td> +<td style= +"vertical-align: top; font-weight: bold; text-align: center;"> +GPIO</td> +<td style="font-weight: bold; text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">3V3</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">1</td> +<td style="text-align: center;">2</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">5V</td> +</tr> +<tr> +<td style="text-align: center;">SDA</td> +<td style="text-align: center;">2</td> +<td style="text-align: center;">3</td> +<td style="text-align: center;">4</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">5V</td> +</tr> +<tr> +<td style="text-align: center;">SCL</td> +<td style="text-align: center;">3</td> +<td style="text-align: center;">5</td> +<td style="text-align: center;">6</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">Ground</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">4</td> +<td style="text-align: center;">7</td> +<td style="text-align: center;">8</td> +<td style="text-align: center;">14</td> +<td style="text-align: center;">TXD</td> +</tr> +<tr> +<td style="text-align: center;">Ground</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">9</td> +<td style="text-align: center;">10</td> +<td style="text-align: center;">15</td> +<td style="text-align: center;">RXD</td> +</tr> +<tr> +<td style="text-align: center;">ce1</td> +<td style="text-align: center;">17</td> +<td style="text-align: center;">11</td> +<td style="text-align: center;">12</td> +<td style="text-align: center;">18</td> +<td style="text-align: center;">ce0</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">27</td> +<td style="text-align: center;">13</td> +<td style="text-align: center;">14</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">Ground</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">22</td> +<td style="text-align: center;">15</td> +<td style="text-align: center;">16</td> +<td style="text-align: center;">23</td> +<td style="text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">3V3</td> +<td style="text-align: center;">-<br></td> +<td style="text-align: center;">17</td> +<td style="text-align: center;">18</td> +<td style="text-align: center;">24</td> +<td style="text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">MOSI</td> +<td style="text-align: center;">10</td> +<td style="text-align: center;">19</td> +<td style="text-align: center;">20</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">Ground</td> +</tr> +<tr> +<td style="text-align: center;">MISO</td> +<td style="text-align: center;">9</td> +<td style="text-align: center;">21</td> +<td style="text-align: center;">22</td> +<td style="text-align: center;">25</td> +<td style="text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;">SCLK</td> +<td style="text-align: center;">11</td> +<td style="text-align: center;">23</td> +<td style="text-align: center;">24</td> +<td style="text-align: center;">8</td> +<td style="text-align: center;">CE0</td> +</tr> +<tr> +<td style="text-align: center;">Ground</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">25</td> +<td style="text-align: center;">26</td> +<td style="text-align: center;">7</td> +<td style="text-align: center;">CE1</td> +</tr> +<tr> +<td style="text-align: center;">ID_SD</td> +<td style="text-align: center;">0</td> +<td style="text-align: center;">27</td> +<td style="text-align: center;">28</td> +<td style="text-align: center;">1</td> +<td style="text-align: center;">ID_SC</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">5</td> +<td style="text-align: center;">29</td> +<td style="text-align: center;">30</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">Ground</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">6</td> +<td style="text-align: center;">31</td> +<td style="text-align: center;">32</td> +<td style="text-align: center;">12</td> +<td style="text-align: center;"><br></td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">13</td> +<td style="text-align: center;">33</td> +<td style="text-align: center;">34</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">Ground</td> +</tr> +<tr> +<td style="text-align: center;">miso</td> +<td style="text-align: center;">19</td> +<td style="text-align: center;">35</td> +<td style="text-align: center;">36</td> +<td style="text-align: center;">16</td> +<td style="text-align: center;">ce2</td> +</tr> +<tr> +<td style="text-align: center;"><br></td> +<td style="text-align: center;">26</td> +<td style="text-align: center;">37</td> +<td style="text-align: center;">38</td> +<td style="text-align: center;">20</td> +<td style="text-align: center;">mosi</td> +</tr> +<tr> +<td style="text-align: center;">Ground</td> +<td style="text-align: center;">-</td> +<td style="text-align: center;">39</td> +<td style="text-align: center;">40</td> +<td style="text-align: center;">21</td> +<td style="text-align: center;">sclk</td> +</tr> +</tbody> +</table> +<br> +<h4><a name="CM" id="CM"></a>Compute Module</h4> +<p>All 54 GPIO may be physically accessed. Some are reserved +for system use - refer to the Compute Module documentation.<br></p> +<p>Only GPIO 0-31 are supported for hardware timed sampling, PWM, +servo pulses, alert callbacks, waves, and software serial +links.<br></p> +<h3><a name="Other_Languages" id="Other_Languages"></a>Other +Languages</h3> +<p>There are several third party projects which provide wrappers +for pigpio.<br></p> +<p>Some are listed here:<br></p> +<ul> +<li><a href="https://github.com/skvamme/pigpio">Erlang</a> +(skvamme)</li> +<li><a href="https://github.com/mattjlewis/pigpioj">Java</a> JNI +wrapper around the pigpio C library (mattlewis)</li> +<li><a href="https://github.com/mattjlewis/diozero">Java</a> via +diozero, a high level wrapper around pigpio, Pi4J, wiringPi etc +(mattlewis)</li> +<li><a href="https://github.com/nkolban/jpigpio">Java</a> +(nkolban)</li> +<li><a href= +"https://github.com/unosquare/pigpio-dotnet">.NET/mono</a> +(unosquare)</li> +<li><a href="https://github.com/fivdi/pigpio">Node.js</a> +A wrapper for the pigpio C library (fivdi)</li> +<li><a href="https://github.com/guymcswain/pigpio-client">Node.js</a> +A client for pigpio socket interface (guymcswain)</li> +<li><a href="https://metacpan.org/pod/RPi::PIGPIO">Perl</a> (Gligan +Calin Horea)</li> +<li><a href= +"https://github.com/nak1114/ruby-extension-pigpio">Ruby</a> +(Nak)</li> +<li><a href= +"https://github.com/vasmalltalk/pigpio-vast">Smalltalk</a>(Instantiations)</li> +<li><a href= +"https://github.com/UBogun/Xojo-pigpio">Xojo</a>(UBogun)</li> +<li><a href= +"https://github.com/eugenedakin/pigpio-GPIO">Xojo</a>(Eugene Dakin)</li> +</ul> +<hr style="width: 100%; height: 2px;"> +<p><font size="-2">The PWM and servo pulses are timed using the DMA +and PWM/PCM peripherals. This use was inspired by Richard +Hirst's <a href="https://github.com/richardghirst/PiBits" target= +"_blank">servoblaster</a> kernel module.</font></p> +</body> +</html> diff --git a/DOC/src/html/misc.html b/DOC/src/html/misc.html new file mode 100644 index 0000000..4c6f305 --- /dev/null +++ b/DOC/src/html/misc.html @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta name="generator" content="Bluefish 2.2.10" > +<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> +<title>Miscellaneous</title> +</head> +<body> +There are two C libraries which provide a socket interface to the +pigpio daemon. They provide an interface very similar to the +pigpio Python module.<br> +<ul> +<li>The original <a href="./pdif.html">pigpiod_if</a> library is +now deprecated and will no longer be updated. This library is +limited to controlling one Pi at a time.</li> +</ul> +<ul> +<li>The new <a href="./pdif2.html">pigpiod_if2</a> library which +should be used for new code. This library allows multiple Pis +to be controlled at one time.</li> +</ul> +Additional details of the pigpio <a href="./sif.html">socket</a> +interface.<br> +<br> +Additional details of the pigpio <a href="./pif.html">pipe</a> +interface.<br> +<br> +<a href="pig2vcd.html">pig2vcd</a> is a utility which converts +pigpio notifications into the VCD (Value Change Dump) format. +VCD can be read by many programs, in particular <a href= +"http://gtkwave.sourceforge.net/">GTKWave</a>. +</body> +</html> diff --git a/DOC/src/html/pif.html b/DOC/src/html/pif.html new file mode 100644 index 0000000..bc924ff --- /dev/null +++ b/DOC/src/html/pif.html @@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta name="generator" content="Bluefish 2.2.10" > +<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> +<title>Pipe interface</title> +</head> +<body> +pigpio provides a pipe interface to many of its functions.<br> +<br> +The pipe interface is available whenever pigpio is running, either +because it has been started as a daemon, or it has been linked in +to a running user program. The pipe interface can be disabled +by the program which initialises the library. pigpiod offers +the -f option to disable the pipe interface. User programs +should call <a href= +"http://abyz.me.uk/rpi/pigpio/cif.html#gpioCfgInterfaces">gpioCfgInterfaces</a> +if they wish to disable the pipe interface.<br> +<br> +pigpio listens for commands on pipe /dev/pigpio. The commands +consist of a command identifier with, depending on the command, +zero, one, or two parameters. The result, if any, may be read +from pipe /dev/pigout. If any errors are detected a message +will be written to pipe /dev/pigerr.<br> +<br> +<br> +The format of the commands is identical to those used by <a href= +"pigs.html">pigs</a>. +</body> +</html> diff --git a/DOC/src/html/piscope.html b/DOC/src/html/piscope.html new file mode 100644 index 0000000..c381057 --- /dev/null +++ b/DOC/src/html/piscope.html @@ -0,0 +1,216 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" +"http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<meta name="generator" content= +"HTML Tidy for HTML5 for Linux version 5.6.0"> +<meta content="text/html; charset=utf-8" http-equiv="content-type"> +<title>piscope</title> +</head> +<body> +<h2>Introduction<br></h2> +<a href="piscope.tar">piscope</a> is a logic analyser (digital +waveform viewer) for the Raspberry. It shows the state (high +or low) of selected GPIO in real-time.<br> +<br> +See <a href="http://youtu.be/2apqOiLHEzs">video</a>.<br> +<br> +piscope uses the services of the pigpio <a href= +"download.html">library</a>. pigpio needs to be running on +the Pi whose GPIO are to be monitored.<br> +<br> +The pigpio library may be started as a daemon (background process) +by the following command.<br> +<br> +<code>sudo pigpiod<br></code><br> +piscope may be invoked in several different ways<br> +<br> +<table summary="" style= +"text-align: left; width: 90%; height: 246px;" cellspacing="2" +cellpadding="2" border="1"> +<tbody> +<tr> +<td style="width: 15%;"><small>Pi<br></small></td> +<td style="vertical-align: top; width: 55%;"><small><span style= +"font-style: italic;">pi_host</span> ~ $ piscope +&<br></small></td> +<td style="vertical-align: top; width: 30%;"><small>Pi captures +data<br> +Pi processes data<br> +Pi displays data<br></small></td> +</tr> +<tr> +<td style="vertical-align: top;"><small>Pi plus Linux PC<br> +<br> +(with the<br> +display on a remote<br> + Linux PC)<br></small></td> +<td style="vertical-align: top;"><small><span style= +"font-style: italic;">remote_host</span> ~ $ ssh -X <span style= +"font-style: italic;">pi_host</span><br></small><small><span style= +"font-style: italic;">pi_host</span> ~ $ piscope +&</small><small><br></small></td> +<td style="vertical-align: top;"><small>Pi captures data<br> +Pi processes data<br> +Remote Linux PC displays data<br></small></td> +</tr> +<tr> +<td style="vertical-align: top;"><small>Pi plus Windows PC<br> +<br> +(with the<br> +display on a remote<br> + Windows PC)</small></td> +<td style="vertical-align: top;"><small>You need to install an SSH +client (putty suggested) and a X11 server (xming suggested).<br> +<br> +Run Program Files -> Xming -> XLaunch and accept the +defaults.<br> +<br> +Run putty and enter the Pi's host name or IP address. Click +on SSH X11 and tick Enable X11 forwarding and then select +Open.</small><br> +<small><br></small> <small><span style= +"font-style: italic;">pi_host</span> ~ $ piscope +&</small><br></td> +<td style="vertical-align: top;"><small>Pi captures data<br> +Pi processes data<br> +Remote Windows PC displays data</small></td> +</tr> +<tr> +<td style="vertical-align: top;"><small>Pi plus Linux PC<br> +<br> +(with the display and processing on a remote Linux +PC)<br></small></td> +<td style="vertical-align: top;"><small><span style= +"font-style: italic;">remote_host</span> ~ $ export +PIGPIO_ADDR=<span style="font-style: italic;">pi_host</span><br> +<span style="font-style: italic;">remote_host</span> ~ $ piscope +&<br></small></td> +<td style="vertical-align: top;"><small>Pi captures data<br> +Remote processes data<br> +Remote displays data<br></small></td> +</tr> +</tbody> +</table> +<br> +piscope operates in one of three modes<br> +<br> +<table summary="" style="text-align: left; width: 90%;" +cellspacing="2" cellpadding="2" border="1"> +<tbody> +<tr> +<td style="vertical-align: top;">Live<br></td> +<td style="vertical-align: top;">The latest GPIO samples are +displayed.<br> +<br> +The mode will automatically change to Pause if a sampling trigger +is detected.<br> +<br> +There are four triggers. Each trigger is made up of a +combination of GPIO states (one of don't care, low, high, edge, +falling, or rising per GPIO). Triggers are always +counted. In addition a trigger may be sample to, sample +around, or sample from, a so called sampling trigger.<br></td> +<td style="vertical-align: top;">New samples are added to the +sample buffer.<br> +<br> +Once the sample buffer is full the <span style= +"font-weight: bold;">oldest</span> samples are discarded.</td> +</tr> +<tr> +<td style="vertical-align: top;">Play<br></td> +<td style="vertical-align: top;">Recorded GPIO samples are +displayed.<br> +<br> +The play speed may be varied between 64 times real-time to 1/32768 +of real-time.<br> +<br> +The page up key increases the play speed by a factor of 2. +The page down key decreases the play speed by a factor of 2. +The home key sets the play speed to 1X.<br></td> +<td style="vertical-align: top;">New samples are added to the +sample buffer.<br> +<br> +Once the sample buffer is full <span style= +"font-weight: bold;">new</span> samples are discarded.</td> +</tr> +<tr> +<td style="vertical-align: top;">Pause<br></td> +<td style="vertical-align: top;">Recorded GPIO samples are +displayed.<br> +<br> +The left and right cursor keys move the blue marker to the previous +or next edge. By default all GPIO edges are considered. +Clicking on a GPIO name will limit edge searches to the highlighted +GPIO only.<br> +<br> +The left and right square bracket keys move the blue marker to the +previous or next trigger.<br> +<br> +The time between the blue and gold markers is displayed. The +gold marker is set to the blue marker by a press of the 'g' +key.<br></td> +<td style="vertical-align: top;">New samples are added to the +sample buffer.<br> +<br> +Once the sample buffer is full <span style= +"font-weight: bold;">new</span> samples are discarded.</td> +</tr> +</tbody> +</table> +<br> +In all modes the down and up cursor keys zoom the time scale in and +out.<br> +<br> +Samples can be saved with File Save All Samples or File Save +Selected Samples. +<p>To select samples enter pause mode. Press 1 to specify the start +of the samples (green marker) and 2 to specify the end of the +samples (red marker).</p> +<p>The samples may be saved in the native piscope format or in VCD +format.</p> +<p>Data saved in VCD format may be viewed and further processed +with GTKWave.</p> +<p>Data saved in the native piscope format may be restored later +with File Restore Saved Data.</p> +<h2>Installation</h2> +<p>To download and install piscope.</p> +<h3>Pi (pre-built image)</h3> +<code>wget abyz.me.uk/rpi/pigpio/piscope.tar<br> +tar xvf piscope.tar<br> +cd PISCOPE<br> +make hf<br> +make install</code><span style="font-weight: bold;"><br></span> +<h3>Linux 64 bit X86/AMD (pre-built image)</h3> +<code>wget abyz.me.uk/rpi/pigpio/piscope.tar<br> +tar xvf piscope.tar<br> +cd PISCOPE<br> +make x86_64<br> +make install<br></code> +<h3>All machines (building from source)</h3> +You only need to perform this step if you want to build the +executable from the source files. This is not needed if you +use a pre-built image.<br> +<span style="font-weight: bold;"><br> +WARNING</span>: Installing gtk+-3.0 uses a lot of SD card +space.<br> +<br> +Most of the space used by gtk+-3.0 is taken up by unneeded *-dbg +packages.<br> +<br> +With *-dbg packages an additional 3753MB SD space is required.<br> +<br> +If you edit the list of packages to be downloaded and remove the +*-dbg packages only 134MB of additional SD space is needed (as at +the time of writing).<br> +<br> +<code>#<br></code> <code># *** This may take a lot of time and use +a lot of SD card space ***<br></code> <code>#<br> +sudo apt-get install gtk+-3.0<br></code> <code>#<br></code> +<code>wget abyz.me.uk/rpi/pigpio/piscope.tar<br> +tar xvf piscope.tar<br> +cd PISCOPE<br> +make<br> +make install<br></code><br> +</body> +</html> diff --git a/DOC/src/html/sif.html b/DOC/src/html/sif.html new file mode 100644 index 0000000..67b880b --- /dev/null +++ b/DOC/src/html/sif.html @@ -0,0 +1,2004 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" +"http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<meta name="generator" content="Bluefish 2.2.10" > +<meta content="text/html; charset=utf-8" http-equiv="content-type"> +<title>Socket interface</title> +</head> +<body> +pigpio provides a socket interface to many of its functions.<br> +<br> +The socket interface is available whenever pigpio is running, +either because it has been started as a daemon, or it has been +linked in to a running user program.<br> +<br> +The socket interface can be disabled by the program which +initialises the library. pigpiod offers the -k option to +disable the socket interface. User programs should call +<a href="cif.html#gpioCfgInterfaces">gpioCfgInterfaces</a> if they +wish to disable the socket interface.<br> +<br> +pigpio listens for connections on port 8888 by default. This +default may be overridden when pigpio starts by the <a href= +"cif.html#gpioCfgSocketPort">gpioCfgSocketPort</a> function +call. The pigpio daemon uses this function to provide an +option to change the port number.<br> +<br> +The pigs utility is an example of using the socket interface from +C.<span style="font-weight: bold;"><br></span> +<h3><a name="Request" id="Request"></a>Request</h3> +<p>pigpio expects messages of type <a href= +"sif.html#cmdCmd_t">cmdCmd_t</a> immediately followed with an +extension for a few commands.<br> +<br> +The caller should fill in cmd, p1, p2, p3/res, and any extension as +needed. p3 will always be zero unless the command requires an +extension in which case p3 will be the length in bytes of the +extension.<br> +<br> +The <a href="sif.html#cmdCmd_t">cmdCmd_t</a> is echoed back with +the result, if any, in p3/res, and an extension immediately +afterwards for a few commands.<br></p> +<table summary="" style="width: 80%;" cellspacing="2" cellpadding= +"2" border="1"> +<tbody> +<tr> +<td style="font-weight: bold;">COMMAND</td> +<td style="font-weight: bold;">cmd<br></td> +<td style="font-weight: bold;">p1</td> +<td style="font-weight: bold;">p2</td> +<td style="font-weight: bold;">p3</td> +<td style="font-weight: bold;">Extension<br></td> +</tr> +<tr> +<td>MODES</td> +<td>0</td> +<td>gpio</td> +<td>mode</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>MODEG</td> +<td>1</td> +<td>gpio</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PUD</td> +<td>2</td> +<td>gpio</td> +<td>pud</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>READ</td> +<td>3</td> +<td>gpio</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WRITE</td> +<td>4</td> +<td>gpio</td> +<td>level</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PWM</td> +<td>5</td> +<td>gpio</td> +<td>dutycycle</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PRS</td> +<td>6</td> +<td>gpio</td> +<td>range</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PFS</td> +<td>7</td> +<td>gpio</td> +<td>frequency</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SERVO</td> +<td>8</td> +<td>gpio</td> +<td>pulsewidth</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WDOG</td> +<td>9</td> +<td>gpio</td> +<td>timeout</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>BR1</td> +<td>10</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>BR2</td> +<td>11</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>BC1</td> +<td>12</td> +<td>bits</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>BC2</td> +<td>13</td> +<td>bits</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>BS1</td> +<td>14</td> +<td>bits</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>BS2</td> +<td>15</td> +<td>bits</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>TICK</td> +<td>16</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>HWVER</td> +<td>17</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>NO</td> +<td>18</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>NB</td> +<td>19</td> +<td>handle</td> +<td>bits</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>NP</td> +<td>20</td> +<td>handle</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>NC</td> +<td>21</td> +<td>handle</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PRG</td> +<td>22</td> +<td>gpio</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PFG</td> +<td>23</td> +<td>gpio</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PRRG</td> +<td>24</td> +<td>gpio</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>HELP<br></td> +<td>25</td> +<td>N/A<br></td> +<td>N/A<br></td> +<td>N/A<br></td> +<td>N/A<br></td> +</tr> +<tr> +<td>PIGPV</td> +<td>26</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVCLR</td> +<td>27</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVAG</td> +<td>28</td> +<td>0</td> +<td>0</td> +<td>12*X</td> +<td>gpioPulse_t pulse[X]</td> +</tr> +<tr> +<td>WVAS</td> +<td>29</td> +<td>gpio</td> +<td>baud</td> +<td>12+X</td> +<td>uint32_t databits<br> +uint32_t stophalfbits<br> +uint32_t offset<br> +uint8_t data[X]</td> +</tr> +<tr> +<td>N/A<br></td> +<td>30</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>N/A<br></td> +<td>31</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVBSY</td> +<td>32</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVHLT</td> +<td>33</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVSM</td> +<td>34</td> +<td>subcmd</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVSP</td> +<td>35</td> +<td>subcmd</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVSC</td> +<td>36</td> +<td>subcmd</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>TRIG</td> +<td>37</td> +<td>gpio</td> +<td>pulselen</td> +<td>4</td> +<td>uint32_t level</td> +</tr> +<tr> +<td>PROC</td> +<td>38</td> +<td>0</td> +<td>0</td> +<td>X</td> +<td>uint8_t text[X]</td> +</tr> +<tr> +<td>PROCD</td> +<td>39</td> +<td>script_id</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PROCR</td> +<td>40</td> +<td>script_id</td> +<td>0</td> +<td>4*X<br></td> +<td>uint32_t pars[X]<br></td> +</tr> +<tr> +<td>PROCS</td> +<td>41</td> +<td>script_id</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SLRO</td> +<td>42</td> +<td>gpio</td> +<td>baud</td> +<td>4</td> +<td>uint32_t databits<br></td> +</tr> +<tr> +<td>SLR</td> +<td>43</td> +<td>gpio</td> +<td>count</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SLRC</td> +<td>44</td> +<td>gpio</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PROCP</td> +<td>45</td> +<td>script_id</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>MICS</td> +<td>46</td> +<td>micros</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>MILS</td> +<td>47</td> +<td>millis</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PARSE</td> +<td>48</td> +<td>N/A</td> +<td>N/A<br></td> +<td>N/A<br></td> +<td>N/A</td> +</tr> +<tr> +<td>WVCRE</td> +<td>49</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVDEL</td> +<td>50</td> +<td>wave_id</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVTX</td> +<td>51</td> +<td>wave_id</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVTXR</td> +<td>52</td> +<td>wave_id</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVNEW</td> +<td>53</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CO</td> +<td>54</td> +<td>bus</td> +<td>device</td> +<td>4</td> +<td>uint32_t flags</td> +</tr> +<tr> +<td>I2CC</td> +<td>55</td> +<td>handle</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CRD</td> +<td>56</td> +<td>handle</td> +<td>count</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CWD</td> +<td>57</td> +<td>handle</td> +<td>0</td> +<td>X</td> +<td>uint8_t data[X]</td> +</tr> +<tr> +<td>I2CWQ</td> +<td>58</td> +<td>handle</td> +<td>bit</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CRS</td> +<td>59</td> +<td>handle</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CWS</td> +<td>60</td> +<td>handle</td> +<td>byte</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CRB</td> +<td>61</td> +<td>handle</td> +<td>register</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CWB</td> +<td>62</td> +<td>handle</td> +<td>register</td> +<td>4</td> +<td>uint32_t byte</td> +</tr> +<tr> +<td>I2CRW</td> +<td>63</td> +<td>handle</td> +<td>register</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CWW</td> +<td>64</td> +<td>handle</td> +<td>register</td> +<td>4</td> +<td>uint32_t word</td> +</tr> +<tr> +<td>I2CRK</td> +<td>65</td> +<td>handle</td> +<td>register<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CWK</td> +<td>66</td> +<td>handle</td> +<td>register<br></td> +<td>X</td> +<td>uint8_t bvs[X]<br></td> +</tr> +<tr> +<td>I2CRI</td> +<td>67</td> +<td>handle</td> +<td>register<br></td> +<td>4</td> +<td>uint32_t num<br></td> +</tr> +<tr> +<td>I2CWI</td> +<td>68</td> +<td>handle</td> +<td>register<br></td> +<td>X<br></td> +<td>uint8_t bvs[X]<br></td> +</tr> +<tr> +<td>I2CPC</td> +<td>69</td> +<td>handle</td> +<td>register<br></td> +<td>4</td> +<td>uint32_t word<br></td> +</tr> +<tr> +<td>I2CPK</td> +<td>70</td> +<td>handle</td> +<td>register<br></td> +<td>X<br></td> +<td>uint8_t data[X]<br></td> +</tr> +<tr> +<td>SPIO<br></td> +<td>71</td> +<td>channel</td> +<td>baud</td> +<td>4</td> +<td>uint32_t flags</td> +</tr> +<tr> +<td>SPIC</td> +<td>72</td> +<td>handle</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SPIR</td> +<td>73</td> +<td>handle</td> +<td>count</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SPIW</td> +<td>74</td> +<td>handle</td> +<td>0</td> +<td>X</td> +<td>uint8_t data[X]</td> +</tr> +<tr> +<td>SPIX</td> +<td>75</td> +<td>handle</td> +<td>0</td> +<td>X</td> +<td>uint8_t data[X]</td> +</tr> +<tr> +<td>SERO</td> +<td>76</td> +<td>baud</td> +<td>flags</td> +<td>X</td> +<td>uint8_t device[X]</td> +</tr> +<tr> +<td>SERC</td> +<td>77</td> +<td>handle</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SERRB</td> +<td>78</td> +<td>handle</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SERWB</td> +<td>79</td> +<td>handle</td> +<td>byte</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SERR</td> +<td>80</td> +<td>handle</td> +<td>count</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SERW</td> +<td>81</td> +<td>handle</td> +<td>0</td> +<td>X</td> +<td>uint8_t data[X]</td> +</tr> +<tr> +<td>SERDA</td> +<td>82</td> +<td>handle</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">GDC<br></td> +<td style="vertical-align: top;">83<br></td> +<td style="vertical-align: top;">gpio<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">GPW<br></td> +<td style="vertical-align: top;">84<br></td> +<td style="vertical-align: top;">gpio<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">HC<br></td> +<td style="vertical-align: top;">85<br></td> +<td style="vertical-align: top;">gpio<br></td> +<td style="vertical-align: top;">frequency<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">HP<br></td> +<td style="vertical-align: top;">86<br></td> +<td style="vertical-align: top;">gpio<br></td> +<td style="vertical-align: top;">frequency<br></td> +<td style="vertical-align: top;">4<br></td> +<td style="vertical-align: top;">uint32_t dutycycle<br></td> +</tr> +<tr> +<td style="vertical-align: top;">CF1<br></td> +<td style="vertical-align: top;">87<br></td> +<td style="vertical-align: top;">arg1<br></td> +<td style="vertical-align: top;">arg2<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t argx[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">CF2<br></td> +<td style="vertical-align: top;">88<br></td> +<td style="vertical-align: top;">arg1<br></td> +<td style="vertical-align: top;">retMax<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t argx[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BI2CC<br></td> +<td style="vertical-align: top;">89<br></td> +<td style="vertical-align: top;">sda<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BI2CO<br></td> +<td style="vertical-align: top;">90<br></td> +<td style="vertical-align: top;">sda<br></td> +<td style="vertical-align: top;">scl<br></td> +<td style="vertical-align: top;">4<br></td> +<td style="vertical-align: top;">uint32_t baud<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BI2CZ<br></td> +<td style="vertical-align: top;">91<br></td> +<td style="vertical-align: top;">sda<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t data[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">I2CZ<br></td> +<td style="vertical-align: top;">92<br></td> +<td style="vertical-align: top;">handle<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t data[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">WVCHA<br></td> +<td style="vertical-align: top;">93<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t data[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">SLRI<br></td> +<td style="vertical-align: top;">94<br></td> +<td style="vertical-align: top;">gpio<br></td> +<td style="vertical-align: top;">invert<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">CGI<br></td> +<td style="vertical-align: top;">95<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">CSI<br></td> +<td style="vertical-align: top;">96<br></td> +<td style="vertical-align: top;">config<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FG<br></td> +<td style="vertical-align: top;">97<br></td> +<td style="vertical-align: top;">gpio<br></td> +<td style="vertical-align: top;">steady<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FN<br></td> +<td style="vertical-align: top;">98<br></td> +<td style="vertical-align: top;">gpio<br></td> +<td style="vertical-align: top;">steady<br></td> +<td style="vertical-align: top;">4<br></td> +<td style="vertical-align: top;">uint32_t active<br></td> +</tr> +<tr> +<td>NOIB</td> +<td>99</td> +<td>0</td> +<td>0</td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">WVTXM<br></td> +<td style="vertical-align: top;">100<br></td> +<td style="vertical-align: top;">wave_id<br></td> +<td style="vertical-align: top;">mode<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">WVTAT<br></td> +<td style="vertical-align: top;">101<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">PADS<br></td> +<td style="vertical-align: top;">102<br></td> +<td style="vertical-align: top;">pad<br></td> +<td style="vertical-align: top;">strength<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">PADG<br></td> +<td style="vertical-align: top;">103<br></td> +<td style="vertical-align: top;">pad<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FO<br></td> +<td style="vertical-align: top;">104<br></td> +<td style="vertical-align: top;">mode<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t file[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FC<br></td> +<td style="vertical-align: top;">105<br></td> +<td style="vertical-align: top;">handle<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FR<br></td> +<td style="vertical-align: top;">106<br></td> +<td style="vertical-align: top;">handle<br></td> +<td style="vertical-align: top;">count<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FW<br></td> +<td style="vertical-align: top;">107<br></td> +<td style="vertical-align: top;">handle<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t data[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FS<br></td> +<td style="vertical-align: top;">108<br></td> +<td style="vertical-align: top;">handle<br></td> +<td style="vertical-align: top;">offset<br></td> +<td style="vertical-align: top;">4<br></td> +<td style="vertical-align: top;">uint32_t from<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FL<br></td> +<td style="vertical-align: top;">109<br></td> +<td style="vertical-align: top;">count<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t pattern[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">SHELL<br></td> +<td style="vertical-align: top;">110<br></td> +<td style="vertical-align: top;">len(name)<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">len(name)+<br> +1+<br> +len(string)<br></td> +<td style="vertical-align: top;">uint8_t name[len(name)]<br> +uint8_t null (0)<br> +uint8_t string[len(string)]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BSPIC<br></td> +<td style="vertical-align: top;">111<br></td> +<td style="vertical-align: top;">CS<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BSPIO<br></td> +<td style="vertical-align: top;">112<br></td> +<td style="vertical-align: top;">CS<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">20<br></td> +<td style="vertical-align: top;">uint32_t MISO<br> +uint32_t MOSI<br> +uint32_t SCLK<br> +uint32_t baud<br> +uint32_t spi_flags<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BSPIX<br></td> +<td style="vertical-align: top;">113<br></td> +<td style="vertical-align: top;">CS<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t data[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BSCX<br></td> +<td style="vertical-align: top;">114<br></td> +<td style="vertical-align: top;">control<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t data[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">EVM<br></td> +<td style="vertical-align: top;">115<br></td> +<td style="vertical-align: top;">handle<br></td> +<td style="vertical-align: top;">bits<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">EVT<br></td> +<td style="vertical-align: top;">116<br></td> +<td style="vertical-align: top;">event<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td valign="top">PROCU<br></td> +<td valign="top">117<br></td> +<td valign="top">script_id<br></td> +<td valign="top">0<br></td> +<td valign="top">4*X<br></td> +<td valign="top">uint32_t pars[X]<br></td> +</tr> +</tbody> +</table> +<h3><a name="Response" id="Response"></a>Response</h3> +<p>The response has cmd/p1/p2 as in the request. p3/res holds +the return value. If the command returns additional values +they will be in the immediately following extension.<br></p> +Normally res should be treated as a 32 bit signed value and will be +greater than or equal to zero. Upon failure res will be less +than 0 and contains an error code.<br> +<p>There are a few commands where the returned value should be +treated as a 32 bit unsigned value. These commands can not +fail. They are indicated with a * after the command +name.<br></p> +<p>Commands with an extension have the size of the extension in +bytes returned in res (or <0 on error as above).</p> +<table summary="" style="width: 80%;" cellspacing="2" cellpadding= +"2" border="1"> +<tbody> +<tr> +<td style="font-weight: bold;">COMMAND</td> +<td style="font-weight: bold;">cmd<br></td> +<td style="vertical-align: top; font-weight: bold;">p1<br></td> +<td style="vertical-align: top; font-weight: bold;">p2<br></td> +<td style="font-weight: bold;">res<br></td> +<td style="font-weight: bold;">Extension<br></td> +</tr> +<tr> +<td>MODES</td> +<td>0</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>MODEG</td> +<td>1</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>mode<br></td> +<td>-<br></td> +</tr> +<tr> +<td>PUD</td> +<td>2</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>READ</td> +<td>3</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>level<br></td> +<td>-<br></td> +</tr> +<tr> +<td>WRITE</td> +<td>4</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PWM</td> +<td>5</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PRS</td> +<td>6</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PFS</td> +<td>7</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SERVO</td> +<td>8</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WDOG</td> +<td>9</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>BR1 *</td> +<td>10</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>bits<br></td> +<td>-<br></td> +</tr> +<tr> +<td>BR2 *</td> +<td>11</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>bits<br></td> +<td>-<br></td> +</tr> +<tr> +<td>BC1</td> +<td>12</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>BC2</td> +<td>13</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>BS1</td> +<td>14</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>BS2</td> +<td>15</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>TICK *<br></td> +<td>16</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>tick<br></td> +<td>-<br></td> +</tr> +<tr> +<td>HWVER *<br></td> +<td>17</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>version<br></td> +<td>-<br></td> +</tr> +<tr> +<td>NO</td> +<td>18</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>handle<br></td> +<td>-<br></td> +</tr> +<tr> +<td>NB</td> +<td>19</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>NP</td> +<td>20</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>NC</td> +<td>21</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PRG</td> +<td>22</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>range<br></td> +<td>-<br></td> +</tr> +<tr> +<td>PFG</td> +<td>23</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>frequency<br></td> +<td>-<br></td> +</tr> +<tr> +<td>PRRG</td> +<td>24</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>real range<br></td> +<td>-<br></td> +</tr> +<tr> +<td>HELP</td> +<td>25</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>N/A<br></td> +<td>N/A<br></td> +</tr> +<tr> +<td>PIGPV *<br></td> +<td>26</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>version<br></td> +<td>-<br></td> +</tr> +<tr> +<td>WVCLR</td> +<td>27</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVAG</td> +<td>28</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>wave pulses<br></td> +<td>-<br></td> +</tr> +<tr> +<td>WVAS</td> +<td>29</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>wave pulses<br></td> +<td>-<br></td> +</tr> +<tr> +<td>N/A<br></td> +<td>30</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>-<br></td> +<td>-<br></td> +</tr> +<tr> +<td>N/A<br></td> +<td>31</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>-<br></td> +<td>-<br></td> +</tr> +<tr> +<td>WVBSY</td> +<td>32</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>busy (1) or not busy (0)<br></td> +<td>-<br></td> +</tr> +<tr> +<td>WVHLT</td> +<td>33</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVSM</td> +<td>34</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>wave micros<br> +wave micros - high<br> +wave micros - max<br></td> +<td>-<br></td> +</tr> +<tr> +<td>WVSP</td> +<td>35</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>wave pulses<br> +wave pulses - high<br> +wave pulses - max<br></td> +<td>-<br></td> +</tr> +<tr> +<td>WVSC</td> +<td>36</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>wave DMA CBs<br> +wave DMA CBs - high<br> +wave DMA CBs - max<br></td> +<td>-<br></td> +</tr> +<tr> +<td>TRIG</td> +<td>37</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0<br></td> +<td>-</td> +</tr> +<tr> +<td>PROC</td> +<td>38</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>script id<br></td> +<td>-<br></td> +</tr> +<tr> +<td>PROCD</td> +<td>39</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PROCR</td> +<td>40</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>script status<br></td> +<td>-</td> +</tr> +<tr> +<td>PROCS</td> +<td>41</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SLRO</td> +<td>42</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0<br></td> +<td>-<br></td> +</tr> +<tr> +<td>SLR</td> +<td>43</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>X<br></td> +<td>uint8_t data[X]<br></td> +</tr> +<tr> +<td>SLRC</td> +<td>44</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PROCP</td> +<td>45</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>44</td> +<td>uint32_t script_status<br> +uint32_t pars[10]<br></td> +</tr> +<tr> +<td>MICS</td> +<td>46</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>MILS</td> +<td>47</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>PARSE</td> +<td>48</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>N/A<br></td> +<td>-</td> +</tr> +<tr> +<td>WVCRE</td> +<td>49</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>wave id<br></td> +<td>-<br></td> +</tr> +<tr> +<td>WVDEL</td> +<td>50</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>WVTX</td> +<td>51</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>wave DMA CBs<br></td> +<td>-<br></td> +</tr> +<tr> +<td>WVTXR</td> +<td>52</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>wave DMA CBs<br></td> +<td>-<br></td> +</tr> +<tr> +<td>WVNEW</td> +<td>53</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CO</td> +<td>54</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>handle</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CC</td> +<td>55</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CRD</td> +<td>56</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>X<br></td> +<td>uint8_t data[X]<br></td> +</tr> +<tr> +<td>I2CWD</td> +<td>57</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0<br></td> +<td>-<br></td> +</tr> +<tr> +<td>I2CWQ</td> +<td>58</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CRS</td> +<td>59</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>byte value<br></td> +<td>-<br></td> +</tr> +<tr> +<td>I2CWS</td> +<td>60</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CRB</td> +<td>61</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>byte value<br></td> +<td>-<br></td> +</tr> +<tr> +<td>I2CWB</td> +<td>62</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0<br></td> +<td>-<br></td> +</tr> +<tr> +<td>I2CRW</td> +<td>63</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>word value<br></td> +<td>-<br></td> +</tr> +<tr> +<td>I2CWW</td> +<td>64</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0<br></td> +<td>-<br></td> +</tr> +<tr> +<td>I2CRK</td> +<td>65</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>I2CWK</td> +<td>66</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0<br></td> +<td>-<br></td> +</tr> +<tr> +<td>I2CRI</td> +<td>67</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>X<br></td> +<td>uint8_t data[X]<br></td> +</tr> +<tr> +<td>I2CWI</td> +<td>68</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0<br></td> +<td>-<br></td> +</tr> +<tr> +<td>I2CPC</td> +<td>69</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>word value<br></td> +<td>-<br></td> +</tr> +<tr> +<td>I2CPK</td> +<td>70</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>X<br></td> +<td>uint8_t data[X]<br></td> +</tr> +<tr> +<td>SPIO<br></td> +<td>71</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>handle<br></td> +<td>-<br></td> +</tr> +<tr> +<td>SPIC</td> +<td>72</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SPIR</td> +<td>73</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>X<br></td> +<td>uint8_t data[X]<br></td> +</tr> +<tr> +<td>SPIW</td> +<td>74</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0<br></td> +<td>-<br></td> +</tr> +<tr> +<td>SPIX</td> +<td>75</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>X</td> +<td>uint8_t data[X]</td> +</tr> +<tr> +<td>SERO</td> +<td>76</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>handle<br></td> +<td>-</td> +</tr> +<tr> +<td>SERC</td> +<td>77</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SERRB</td> +<td>78</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>byte value<br></td> +<td>-<br></td> +</tr> +<tr> +<td>SERWB</td> +<td>79</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td>SERR</td> +<td>80</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>X<br></td> +<td>uint8_t data[X]<br></td> +</tr> +<tr> +<td>SERW</td> +<td>81</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0<br></td> +<td>-<br></td> +</tr> +<tr> +<td>SERDA</td> +<td>82</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>data ready count<br></td> +<td>-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">GDC<br></td> +<td style="vertical-align: top;">83<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">dutycycle<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">GPW<br></td> +<td style="vertical-align: top;">84<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">pulsewidth<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">HC<br></td> +<td style="vertical-align: top;">85<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">HP<br></td> +<td style="vertical-align: top;">86<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">CF1<br></td> +<td style="vertical-align: top;">87<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">value<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">CF2<br></td> +<td style="vertical-align: top;">88<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t retBuf[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BI2CC<br></td> +<td style="vertical-align: top;">89<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BI2CO<br></td> +<td style="vertical-align: top;">90<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">handle<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BI2CZ<br></td> +<td style="vertical-align: top;">91<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t data[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">I2CZ<br></td> +<td style="vertical-align: top;">92<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t data[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">WVCHA<br></td> +<td style="vertical-align: top;">93<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">SLRI<br></td> +<td style="vertical-align: top;">94<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">CGI<br></td> +<td style="vertical-align: top;">95<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">config<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">CSI<br></td> +<td style="vertical-align: top;">96<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FG<br></td> +<td style="vertical-align: top;">97<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FN<br></td> +<td style="vertical-align: top;">98<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td>NOIB</td> +<td>99</td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td>0</td> +<td>-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">WVTXM<br></td> +<td style="vertical-align: top;">100<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">wave DMA CBs<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">WVTAT<br></td> +<td style="vertical-align: top;">101<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">wave id<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">PADS<br></td> +<td style="vertical-align: top;">102<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">PADG<br></td> +<td style="vertical-align: top;">103<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">strength<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FO<br></td> +<td style="vertical-align: top;">104<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">handle<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FC<br></td> +<td style="vertical-align: top;">105<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FR<br></td> +<td style="vertical-align: top;">106<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t data[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FW<br></td> +<td style="vertical-align: top;">107<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FS<br></td> +<td style="vertical-align: top;">108<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">position<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">FL<br></td> +<td style="vertical-align: top;">109<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t filenames[X]<br></td> +</tr> +<tr> +<td style="vertical-align: top;">SHELL<br></td> +<td style="vertical-align: top;">110<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">exit status<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BSPIC<br></td> +<td style="vertical-align: top;">111<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BSPIO<br></td> +<td style="vertical-align: top;">112<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">BSPIX<br></td> +<td style="vertical-align: top;">113<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">X<br></td> +<td style="vertical-align: top;">uint8_t data[X]</td> +</tr> +<tr> +<td style="vertical-align: top;">BSCX<br></td> +<td style="vertical-align: top;">114<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">X+4<br></td> +<td style="vertical-align: top;">uint32_t status<br> +uint8_t data[X]</td> +</tr> +<tr> +<td style="vertical-align: top;">EVM<br></td> +<td style="vertical-align: top;">115<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td style="vertical-align: top;">EVT<br></td> +<td style="vertical-align: top;">116<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">-<br></td> +<td style="vertical-align: top;">0<br></td> +<td style="vertical-align: top;">-<br></td> +</tr> +<tr> +<td valign="top">PROCU<br></td> +<td valign="top">117<br></td> +<td valign="top">-<br></td> +<td valign="top">-<br></td> +<td valign="top">0<br></td> +<td valign="top">-<br></td> +</tr> +</tbody> +</table> +<code><br></code> +<h3><a name="cmdCmd_t" id="cmdCmd_t"></a>cmdCmd_t</h3> +<code>typedef struct<br> +{<br> + uint32_t cmd;<br> + uint32_t p1;<br> + uint32_t p2;<br> + union<br> + {<br> + uint32_t p3;<br> + uint32_t ext_len;<br> + uint32_t res;<br> + };<br> +} cmdCmd_t;<br></code><br> +</body> +</html> |