pigpio library
pigpio pigpio C I/F pigpiod pigpiod C I/F Python pigs piscope Misc Examples Download FAQ Site Map

Socket Interface

pigpio provides a socket interface to many of its functions.

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.

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 gpioCfgInterfaces if they wish to disable the socket interface.

pigpio listens for connections on port 8888 by default.  This default may be overridden when pigpio starts by the gpioCfgSocketPort function call.  The pigpio daemon uses this function to provide an option to change the port number.

The pigs utility is an example of using the socket interface from C.

Request

pigpio expects messages of type cmdCmd_t immediately followed with an extension for a few commands.

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.

The cmdCmd_t is echoed back with the result, if any, in p3/res, and an extension immediately afterwards for a few commands.

COMMAND cmd
p1 p2 p3 Extension
MODES 0 gpio mode 0 -
MODEG 1 gpio 0 0 -
PUD 2 gpio pud 0 -
READ 3 gpio 0 0 -
WRITE 4 gpio level 0 -
PWM 5 gpio dutycycle 0 -
PRS 6 gpio range 0 -
PFS 7 gpio frequency 0 -
SERVO 8 gpio pulsewidth 0 -
WDOG 9 gpio timeout 0 -
BR1 10 0 0 0 -
BR2 11 0 0 0 -
BC1 12 bits 0 0 -
BC2 13 bits 0 0 -
BS1 14 bits 0 0 -
BS2 15 bits 0 0 -
TICK 16 0 0 0 -
HWVER 17 0 0 0 -
NO 18 0 0 0 -
NB 19 handle bits 0 -
NP 20 handle 0 0 -
NC 21 handle 0 0 -
PRG 22 gpio 0 0 -
PFG 23 gpio 0 0 -
PRRG 24 gpio 0 0 -
HELP
25 N/A
N/A
N/A
N/A
PIGPV 26 0 0 0 -
WVCLR 27 0 0 0 -
WVAG 28 0 0 12*X gpioPulse_t pulse[X]
WVAS 29 gpio baud 12+X uint32_t databits
uint32_t stophalfbits
uint32_t offset
uint8_t data[X]
N/A
30 0 0 0 -
N/A
31 0 0 0 -
WVBSY 32 0 0 0 -
WVHLT 33 0 0 0 -
WVSM 34 subcmd 0 0 -
WVSP 35 subcmd 0 0 -
WVSC 36 subcmd 0 0 -
TRIG 37 gpio pulselen 4 uint32_t level
PROC 38 0 0 X uint8_t text[X]
PROCD 39 script_id 0 0 -
PROCR 40 script_id 0 4*X
uint32_t pars[X]
PROCS 41 script_id 0 0 -
SLRO 42 gpio baud 4 uint32_t databits
SLR 43 gpio count 0 -
SLRC 44 gpio 0 0 -
PROCP 45 script_id 0 0 -
MICS 46 micros 0 0 -
MILS 47 millis 0 0 -
PARSE 48 N/A N/A
N/A
N/A
WVCRE 49 0 0 0 -
WVDEL 50 wave_id 0 0 -
WVTX 51 wave_id 0 0 -
WVTXR 52 wave_id 0 0 -
WVNEW 53 0 0 0 -
I2CO 54 bus device 4 uint32_t flags
I2CC 55 handle 0 0 -
I2CRD 56 handle count 0 -
I2CWD 57 handle 0 X uint8_t data[X]
I2CWQ 58 handle bit 0 -
I2CRS 59 handle 0 0 -
I2CWS 60 handle byte 0 -
I2CRB 61 handle register 0 -
I2CWB 62 handle register 4 uint32_t byte
I2CRW 63 handle register 0 -
I2CWW 64 handle register 4 uint32_t word
I2CRK 65 handle register
0 -
I2CWK 66 handle register
X uint8_t bvs[X]
I2CRI 67 handle register
4 uint32_t num
I2CWI 68 handle register
X
uint8_t bvs[X]
I2CPC 69 handle register
4 uint32_t word
I2CPK 70 handle register
X
uint8_t data[X]
SPIO
71 channel baud 4 uint32_t flags
SPIC 72 handle 0 0 -
SPIR 73 handle count 0 -
SPIW 74 handle 0 X uint8_t data[X]
SPIX 75 handle 0 X uint8_t data[X]
SERO 76 baud flags X uint8_t device[X]
SERC 77 handle 0 0 -
SERRB 78 handle 0 0 -
SERWB 79 handle byte 0 -
SERR 80 handle count 0 -
SERW 81 handle 0 X uint8_t data[X]
SERDA 82 handle 0 0 -
GDC
83
gpio
0
0
-
GPW
84
gpio
0
0
-
HC
85
gpio
frequency
0
-
HP
86
gpio
frequency
4
uint32_t dutycycle
CF1
87
arg1
arg2
X
uint8_t argx[X]
CF2
88
arg1
retMax
X
uint8_t argx[X]
BI2CC
89
sda
0
0
-
BI2CO
90
sda
scl
4
uint32_t baud
BI2CZ
91
sda
0
X
uint8_t data[X]
I2CZ
92
handle
0
X
uint8_t data[X]
WVCHA
93
0
0
X
uint8_t data[X]
SLRI
94
gpio
invert
0
-
CGI
95
0
0
0
-
CSI
96
config
0
0
-
FG
97
gpio
steady
0
-
FN
98
gpio
steady
4
uint32_t active
NOIB 99 0 0 0 -
WVTXM
100
wave_id
mode
0
-
WVTAT
101
0
0
0
-
PADS
102
pad
strength
0
-
PADG
103
pad
0
0
-
FO
104
mode
0
X
uint8_t file[X]
FC
105
handle
0
0
-
FR
106
handle
count
0
-
FW
107
handle
0
X
uint8_t data[X]
FS
108
handle
offset
4
uint32_t from
FL
109
count
0
X
uint8_t pattern[X]
SHELL
110
len(name)
0
len(name)+
1+
len(string)
uint8_t name[len(name)]
uint8_t null (0)
uint8_t string[len(string)]
BSPIC
111
CS
0
0
-
BSPIO
112
CS
0
20
uint32_t MISO
uint32_t MOSI
uint32_t SCLK
uint32_t baud
uint32_t spi_flags
BSPIX
113
CS
0
X
uint8_t data[X]
BSCX
114
control
0
X
uint8_t data[X]
EVM
115
handle
bits
0
-
EVT
116
event
0
0
-

Response

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.

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.

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.

Commands with an extension have the size of the extension in bytes returned in res (or <0 on error as above).

COMMAND cmd
p1
p2
res
Extension
MODES 0 -
-
0 -
MODEG 1 -
-
mode
-
PUD 2 -
-
0 -
READ 3 -
-
level
-
WRITE 4 -
-
0 -
PWM 5 -
-
0 -
PRS 6 -
-
0 -
PFS 7 -
-
0 -
SERVO 8 -
-
0 -
WDOG 9 -
-
0 -
BR1 * 10 -
-
bits
-
BR2 * 11 -
-
bits
-
BC1 12 -
-
0 -
BC2 13 -
-
0 -
BS1 14 -
-
0 -
BS2 15 -
-
0 -
TICK *
16 -
-
tick
-
HWVER *
17 -
-
version
-
NO 18 -
-
handle
-
NB 19 -
-
0 -
NP 20 -
-
0 -
NC 21 -
-
0 -
PRG 22 -
-
range
-
PFG 23 -
-
frequency
-
PRRG 24 -
-
real range
-
HELP 25 -
-
N/A
N/A
PIGPV *
26 -
-
version
-
WVCLR 27 -
-
0 -
WVAG 28 -
-
wave pulses
-
WVAS 29 -
-
wave pulses
-
N/A
30 -
-
-
-
N/A
31 -
-
-
-
WVBSY 32 -
-
busy (1) or not busy (0)
-
WVHLT 33 -
-
0 -
WVSM 34 -
-
wave micros
wave micros - high
wave micros - max
-
WVSP 35 -
-
wave pulses
wave pulses - high
wave pulses - max
-
WVSC 36 -
-
wave DMA CBs
wave DMA CBs - high
wave DMA CBs - max
-
TRIG 37 -
-
0
-
PROC 38 -
-
script id
-
PROCD 39 -
-
0 -
PROCR 40 -
-
script status
-
PROCS 41 -
-
0 -
SLRO 42 -
-
0
-
SLR 43 -
-
X
uint8_t data[X]
SLRC 44 -
-
0 -
PROCP 45 -
-
44 uint32_t script_status
uint32_t pars[10]
MICS 46 -
-
0 -
MILS 47 -
-
0 -
PARSE 48 -
-
N/A
-
WVCRE 49 -
-
wave id
-
WVDEL 50 -
-
0 -
WVTX 51 -
-
wave DMA CBs
-
WVTXR 52 -
-
wave DMA CBs
-
WVNEW 53 -
-
0 -
I2CO 54 -
-
handle -
I2CC 55 -
-
0 -
I2CRD 56 -
-
X
uint8_t data[X]
I2CWD 57 -
-
0
-
I2CWQ 58 -
-
0 -
I2CRS 59 -
-
byte value
-
I2CWS 60 -
-
0 -
I2CRB 61 -
-
byte value
-
I2CWB 62 -
-
0
-
I2CRW 63 -
-
word value
-
I2CWW 64 -
-
0
-
I2CRK 65 -
-
0 -
I2CWK 66 -
-
0
-
I2CRI 67 -
-
X
uint8_t data[X]
I2CWI 68 -
-
0
-
I2CPC 69 -
-
word value
-
I2CPK 70 -
-
X
uint8_t data[X]
SPIO
71 -
-
handle
-
SPIC 72 -
-
0 -
SPIR 73 -
-
X
uint8_t data[X]
SPIW 74 -
-
0
-
SPIX 75 -
-
X uint8_t data[X]
SERO 76 -
-
handle
-
SERC 77 -
-
0 -
SERRB 78 -
-
byte value
-
SERWB 79 -
-
0 -
SERR 80 -
-
X
uint8_t data[X]
SERW 81 -
-
0
-
SERDA 82 -
-
data ready count
-
GDC
83
-
-
dutycycle
-
GPW
84
-
-
pulsewidth
-
HC
85
-
-
0
-
HP
86
-
-
0
-
CF1
87
-
-
value
-
CF2
88
-
-
X
uint8_t retBuf[X]
BI2CC
89
-
-
0
-
BI2CO
90
-
-
handle
-
BI2CZ
91
-
-
X
uint8_t data[X]
I2CZ
92
-
-
X
uint8_t data[X]
WVCHA
93
-
-
0
-
SLRI
94
-
-
0
-
CGI
95
-
-
config
-
CSI
96
-
-
0
-
FG
97
-
-
0
-
FN
98
-
-
0
-
NOIB 99 -
-
0 -
WVTXM
100
-
-
wave DMA CBs
-
WVTAT
101
-
-
wave id
-
PADS
102
-
-
0
-
PADG
103
-
-
strength
-
FO
104
-
-
handle
-
FC
105
-
-
0
-
FR
106
-
-
X
uint8_t data[X]
FW
107
-
-
0
-
FS
108
-
-
position
-
FL
109
-
-
X
uint8_t filenames[X]
SHELL
110
-
-
exit status
-
BSPIC
111
-
-
0
-
BSPIO
112
-
-
0
-
BSPIX
113
-
-
X
uint8_t data[X]
BSCX
114
-
-
X+4
uint32_t status
uint8_t data[X]
EVM
115
-
-
0
-
EVT
116
-
-
0
-

cmdCmd_t

typedef struct
{
   uint32_t cmd;
   uint32_t p1;
   uint32_t p2;
   union
   {
      uint32_t p3;
      uint32_t ext_len;
      uint32_t res;
   };
} cmdCmd_t;

|pigpio| |pigpio C I/F| |pigpiod| |pigpiod C I/F| |Python| |pigs| |piscope| |Misc| |Examples| |Download| |FAQ| |Site Map|
© 2012-2017
e-mail: pigpio @ abyz.co.uk
Updated: 14/05/2017