From ed780522a07d8c00257182a7b32134951752100d Mon Sep 17 00:00:00 2001 From: joan Date: Sun, 30 Aug 2015 10:31:56 +0100 Subject: [PATCH] V37 --- MakeRemote | 42 +++++++------ Makefile | 64 ++++++++++---------- command.c | 5 +- pigpio.3 | 81 ++++++++++++++++--------- pigpio.c | 6 +- pigpio.h | 28 +++++---- pigpio.py | 149 ++++++++++++++++++++++++++++++++++----------- pigpiod_if.3 | 166 ++++++++++++++++++++++++++++++++++++++++++++++----- pigpiod_if.c | 2 +- pigpiod_if.h | 90 ++++++++++++++++++++++++---- pigs.1 | 99 +++++++++++++++--------------- setup.py | 2 +- x_pigs | 2 +- 13 files changed, 527 insertions(+), 209 deletions(-) diff --git a/MakeRemote b/MakeRemote index 40ee70c..14dd622 100644 --- a/MakeRemote +++ b/MakeRemote @@ -24,26 +24,32 @@ clean: rm -f *.o *.i *.s *~ $(ALL) install: $(LIB) - sudo install -m 0755 -d /usr/local/include - sudo install -m 0644 pigpio.h /usr/local/include - sudo install -m 0644 pigpiod_if.h /usr/local/include - sudo install -m 0755 -d /usr/local/lib - sudo install -m 0644 libpigpiod_if.so /usr/local/lib - sudo install -m 0755 -d /usr/local/bin - sudo install -m 0755 pigs /usr/local/bin - sudo python2 setup.py install - sudo python3 setup.py install - sudo install -m 0755 -d /usr/local/man/man1 - sudo install -m 0644 *.1 /usr/local/man/man1 - sudo install -m 0755 -d /usr/local/man/man3 - sudo install -m 0644 *.3 /usr/local/man/man3 + install -m 0755 -d /usr/local/include + install -m 0644 pigpio.h /usr/local/include + install -m 0644 pigpiod_if.h /usr/local/include + install -m 0755 -d /usr/local/lib + install -m 0644 libpigpiod_if.so /usr/local/lib + install -m 0755 -d /usr/local/bin + install -m 0755 pigs /usr/local/bin + python2 setup.py install + python3 setup.py install + install -m 0755 -d /usr/local/man/man1 + install -m 0644 *.1 /usr/local/man/man1 + install -m 0755 -d /usr/local/man/man3 + install -m 0644 *.3 /usr/local/man/man3 uninstall: - sudo rm -f /usr/local/include/pigpio.h - sudo rm -f /usr/local/lib/libpigpiod_if.so - sudo rm -f /usr/local/bin/pigs - sudo rm -f /usr/local/man/man1/pig*.1 - sudo rm -f /usr/local/man/man3/pig*.3 + rm -f /usr/local/include/pigpio.h + rm -f /usr/local/lib/libpigpiod_if.so + echo removing python2 files + python2 setup.py install --record /tmp/pigpio >/dev/null + xargs rm -f < /tmp/pigpio >/dev/null + echo removing python3 files + python3 setup.py install --record /tmp/pigpio >/dev/null + xargs rm -f < /tmp/pigpio >/dev/null + rm -f /usr/local/bin/pigs + rm -f /usr/local/man/man1/pig*.1 + rm -f /usr/local/man/man3/pig*.3 LIB = libpigpiod_if.so OBJ = pigpiod_if.o command.o diff --git a/Makefile b/Makefile index ea7951f..5bbe2af 100644 --- a/Makefile +++ b/Makefile @@ -52,42 +52,42 @@ clean: rm -f *.o *.i *.s *~ $(ALL) install: $(ALL) - sudo install -m 0755 -d /opt/pigpio/cgi - sudo install -m 0755 -d /usr/local/include - sudo install -m 0644 pigpio.h /usr/local/include - sudo install -m 0644 pigpiod_if.h /usr/local/include - sudo install -m 0755 -d /usr/local/lib - sudo install -m 0755 libpigpio.so /usr/local/lib - sudo install -m 0755 libpigpiod_if.so /usr/local/lib - sudo install -m 0755 -d /usr/local/bin - sudo install -m 0755 -s pig2vcd /usr/local/bin - sudo install -m 0755 -s pigpiod /usr/local/bin - sudo install -m 0755 -s pigs /usr/local/bin - sudo python2 setup.py install - sudo python3 setup.py install - sudo install -m 0755 -d /usr/local/man/man1 - sudo install -m 0644 *.1 /usr/local/man/man1 - sudo install -m 0755 -d /usr/local/man/man3 - sudo install -m 0644 *.3 /usr/local/man/man3 - sudo ldconfig + install -m 0755 -d /opt/pigpio/cgi + install -m 0755 -d /usr/local/include + install -m 0644 pigpio.h /usr/local/include + install -m 0644 pigpiod_if.h /usr/local/include + install -m 0755 -d /usr/local/lib + install -m 0755 libpigpio.so /usr/local/lib + install -m 0755 libpigpiod_if.so /usr/local/lib + install -m 0755 -d /usr/local/bin + install -m 0755 -s pig2vcd /usr/local/bin + install -m 0755 -s pigpiod /usr/local/bin + install -m 0755 -s pigs /usr/local/bin + python2 setup.py install + python3 setup.py install + install -m 0755 -d /usr/local/man/man1 + install -m 0644 *.1 /usr/local/man/man1 + install -m 0755 -d /usr/local/man/man3 + install -m 0644 *.3 /usr/local/man/man3 + ldconfig uninstall: - sudo rm -f /usr/local/include/pigpio.h - sudo rm -f /usr/local/include/pigpiod_if.h - sudo rm -f /usr/local/lib/libpigpio.so - sudo rm -f /usr/local/lib/libpigpiod_if.so - sudo rm -f /usr/local/bin/pig2vcd - sudo rm -f /usr/local/bin/pigpiod - sudo rm -f /usr/local/bin/pigs + rm -f /usr/local/include/pigpio.h + rm -f /usr/local/include/pigpiod_if.h + rm -f /usr/local/lib/libpigpio.so + rm -f /usr/local/lib/libpigpiod_if.so + rm -f /usr/local/bin/pig2vcd + rm -f /usr/local/bin/pigpiod + rm -f /usr/local/bin/pigs echo removing python2 files - sudo python2 setup.py install --record /tmp/pigpio >/dev/null - sudo xargs rm -f < /tmp/pigpio >/dev/null + python2 setup.py install --record /tmp/pigpio >/dev/null + xargs rm -f < /tmp/pigpio >/dev/null echo removing python3 files - sudo python3 setup.py install --record /tmp/pigpio >/dev/null - sudo xargs rm -f < /tmp/pigpio >/dev/null - sudo rm -f /usr/local/man/man1/pig*.1 - sudo rm -f /usr/local/man/man3/pig*.3 - sudo ldconfig + python3 setup.py install --record /tmp/pigpio >/dev/null + xargs rm -f < /tmp/pigpio >/dev/null + rm -f /usr/local/man/man1/pig*.1 + rm -f /usr/local/man/man3/pig*.3 + ldconfig $(LIB1): $(OBJ1) $(SHLIB) -o $(LIB1) $(OBJ1) diff --git a/command.c b/command.c index 4b52bec..1981fa5 100644 --- a/command.c +++ b/command.c @@ -26,7 +26,7 @@ For more information, please refer to */ /* -This version is for pigpio version 35+ +This version is for pigpio version 37+ */ #include @@ -468,8 +468,7 @@ static errInfo_t errInfo[]= {PI_CHAIN_NESTING , "chain counters nested too deeply"}, {PI_CHAIN_TOO_BIG , "chain is too long"}, {PI_DEPRECATED , "deprecated function removed"}, - {PI_NOT_IN_SER_MODE , "gpio not opened for bit-bang serial"}, - {PI_BAD_SER_INVERT , "bit-bang serial invert not 0 or 1"}, + {PI_BAD_SER_INVERT , "bit bang serial invert not 0 or 1"}, }; diff --git a/pigpio.3 b/pigpio.3 index 9675778..ad68887 100644 --- a/pigpio.3 +++ b/pigpio.3 @@ -1295,24 +1295,30 @@ typedef struct .br .br -seqno starts at 0 each time the handle is opened and then increments +seqno: starts at 0 each time the handle is opened and then increments by one for each report. .br .br -flags, if bit 5 is set then bits 0-4 of the flags indicate a gpio -which has had a watchdog timeout. +flags: two flags are defined, PI_NTFY_FLAGS_WDOG and PI_NTFY_FLAGS_ALIVE. +If bit 5 is set (PI_NTFY_FLAGS_WDOG) then bits 0-4 of the flags +indicate a gpio which has had a watchdog timeout; if bit 6 is set +(PI_NTFY_FLAGS_ALIVE) this indicates a keep alive signal on the +pipe/socket and is sent once a minute in the absence of other +notification activity. .br .br -tick is the number of microseconds since system boot. +tick: the number of microseconds since system boot. It wraps around +after 1h12m. .br .br -level indicates the level of each gpio. +level: indicates the level of each gpio. If bit 1< */ -/* pigpio version 35 */ +/* pigpio version 37 */ /* include ------------------------------------------------------- */ @@ -9338,12 +9338,12 @@ int gpioSerialReadInvert(unsigned gpio, unsigned invert) SOFT_ERROR(PI_BAD_USER_GPIO, "bad gpio (%d)", gpio); if (wfRx[gpio].mode != PI_WFRX_SERIAL) - SOFT_ERROR(PI_NOT_IN_SER_MODE, "gpio %d is not in serial mode", gpio); + SOFT_ERROR(PI_NOT_SERIAL_GPIO, "no serial read on gpio (%d)", gpio); if ((invert < PI_BB_SER_NORMAL) || (invert > PI_BB_SER_INVERT)) SOFT_ERROR(PI_BAD_SER_INVERT, - "gpio %d, invert (%d)", gpio, invert); + "bad invert level for gpio %d (%d)", gpio, invert); wfRx[gpio].s.invert = invert; diff --git a/pigpio.h b/pigpio.h index 3a69e07..bbeb710 100644 --- a/pigpio.h +++ b/pigpio.h @@ -31,7 +31,7 @@ For more information, please refer to #include #include -#define PIGPIO_VERSION 36 +#define PIGPIO_VERSION 37 /*TEXT @@ -1317,15 +1317,21 @@ typedef struct } gpioReport_t; . . -seqno starts at 0 each time the handle is opened and then increments +seqno: starts at 0 each time the handle is opened and then increments by one for each report. -flags, if bit 5 is set then bits 0-4 of the flags indicate a gpio -which has had a watchdog timeout. +flags: two flags are defined, PI_NTFY_FLAGS_WDOG and PI_NTFY_FLAGS_ALIVE. +If bit 5 is set (PI_NTFY_FLAGS_WDOG) then bits 0-4 of the flags +indicate a gpio which has had a watchdog timeout; if bit 6 is set +(PI_NTFY_FLAGS_ALIVE) this indicates a keep alive signal on the +pipe/socket and is sent once a minute in the absence of other +notification activity. -tick is the number of microseconds since system boot. +tick: the number of microseconds since system boot. It wraps around +after 1h12m. -level indicates the level of each gpio. +level: indicates the level of each gpio. If bit 1<= 0: @@ -2143,6 +2156,23 @@ class pi(): you will always run on the local Pi use the standard SMBus module instead. + For the SMBus commands the low level transactions are shown + at the end of the function description. The following + abbreviations are used. + + . . + S (1 bit) : Start bit + P (1 bit) : Stop bit + Rd/Wr (1 bit) : Read/Write bit. Rd equals 1, Wr equals 0. + A, NA (1 bit) : Accept and not accept bit. + Addr (7 bits): I2C 7 bit address. + Comm (8 bits): Command byte, which often selects a register. + Data (8 bits): A data byte. + Count (8 bits): A byte containing the length of a block operation. + + [..]: Data sent by the device. + . . + ... h = pi.i2c_open(1, 0x53) # open device at address 0x53 on bus 1 ... @@ -2172,11 +2202,14 @@ class pi(): """ Sends a single bit to the device associated with handle. - SMBus 2.0 5.5.1 - Quick command. - handle:= >=0 (as returned by a prior call to [*i2c_open*]). bit:= 0 or 1, the value to write. + SMBus 2.0 5.5.1 - Quick command. + . . + S Addr Rd/Wr [A] P + . . + ... pi.i2c_write_quick(0, 1) # send 1 to device 0 pi.i2c_write_quick(3, 0) # send 0 to device 3 @@ -2188,11 +2221,14 @@ class pi(): """ Sends a single byte to the device associated with handle. - SMBus 2.0 5.5.2 - Send byte. - handle:= >=0 (as returned by a prior call to [*i2c_open*]). byte_val:= 0-255, the value to write. + SMBus 2.0 5.5.2 - Send byte. + . . + S Addr Wr [A] Data [A] P + . . + ... pi.i2c_write_byte(1, 17) # send byte 17 to device 1 pi.i2c_write_byte(2, 0x23) # send byte 0x23 to device 2 @@ -2205,10 +2241,13 @@ class pi(): """ Reads a single byte from the device associated with handle. - SMBus 2.0 5.5.3 - Receive byte. - handle:= >=0 (as returned by a prior call to [*i2c_open*]). + SMBus 2.0 5.5.3 - Receive byte. + . . + S Addr Rd [A] [Data] NA P + . . + ... b = pi.i2c_read_byte(2) # read a byte from device 2 ... @@ -2220,12 +2259,15 @@ class pi(): Writes a single byte to the specified register of the device associated with handle. - SMBus 2.0 5.5.4 - Write byte. - handle:= >=0 (as returned by a prior call to [*i2c_open*]). reg:= >=0, the device register. byte_val:= 0-255, the value to write. + SMBus 2.0 5.5.4 - Write byte. + . . + S Addr Wr [A] Comm [A] Data [A] P + . . + ... # send byte 0xC5 to reg 2 of device 1 pi.i2c_write_byte_data(1, 2, 0xC5) @@ -2248,12 +2290,15 @@ class pi(): Writes a single 16 bit word to the specified register of the device associated with handle. - SMBus 2.0 5.5.4 - Write word. - handle:= >=0 (as returned by a prior call to [*i2c_open*]). reg:= >=0, the device register. word_val:= 0-65535, the value to write. + SMBus 2.0 5.5.4 - Write word. + . . + S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] P + . . + ... # send word 0xA0C5 to reg 5 of device 4 pi.i2c_write_word_data(4, 5, 0xA0C5) @@ -2276,11 +2321,14 @@ class pi(): Reads a single byte from the specified register of the device associated with handle. - SMBus 2.0 5.5.5 - Read byte. - handle:= >=0 (as returned by a prior call to [*i2c_open*]). reg:= >=0, the device register. + SMBus 2.0 5.5.5 - Read byte. + . . + S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P + . . + ... # read byte from reg 17 of device 2 b = pi.i2c_read_byte_data(2, 17) @@ -2296,11 +2344,14 @@ class pi(): Reads a single 16 bit word from the specified register of the device associated with handle. - SMBus 2.0 5.5.5 - Read word. - handle:= >=0 (as returned by a prior call to [*i2c_open*]). reg:= >=0, the device register. + SMBus 2.0 5.5.5 - Read word. + . . + S Addr Wr [A] Comm [A] S Addr Rd [A] [DataLow] A [DataHigh] NA P + . . + ... # read word from reg 2 of device 3 w = pi.i2c_read_word_data(3, 2) @@ -2316,12 +2367,16 @@ class pi(): Writes 16 bits of data to the specified register of the device associated with handle and reads 16 bits of data in return. - SMBus 2.0 5.5.6 - Process call. - handle:= >=0 (as returned by a prior call to [*i2c_open*]). reg:= >=0, the device register. word_val:= 0-65535, the value to write. + SMBus 2.0 5.5.6 - Process call. + . . + S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] + S Addr Rd [A] [DataLow] A [DataHigh] NA P + . . + ... r = pi.i2c_process_call(h, 4, 0x1231) r = pi.i2c_process_call(h, 6, 0) @@ -2341,12 +2396,16 @@ class pi(): Writes up to 32 bytes to the specified register of the device associated with handle. - SMBus 2.0 5.5.7 - Block write. - handle:= >=0 (as returned by a prior call to [*i2c_open*]). reg:= >=0, the device register. data:= the bytes to write. + SMBus 2.0 5.5.7 - Block write. + . . + S Addr Wr [A] Comm [A] Count [A] Data [A] Data [A] ... [A] + Data [A] P + . . + ... pi.i2c_write_block_data(4, 5, b'hello') @@ -2373,11 +2432,15 @@ class pi(): Reads a block of up to 32 bytes from the specified register of the device associated with handle. - SMBus 2.0 5.5.7 - Block read. - handle:= >=0 (as returned by a prior call to [*i2c_open*]). reg:= >=0, the device register. + SMBus 2.0 5.5.7 - Block read. + . . + S Addr Wr [A] Comm [A] + S Addr Rd [A] [Count] A [Data] A [Data] A ... A [Data] NA P + . . + The amount of returned data is set by the device. The returned value is a tuple of the number of bytes read and a @@ -2408,8 +2471,6 @@ class pi(): associated with handle and reads a device specified number of bytes of data in return. - SMBus 2.0 5.5.8 - Block write-block read. - handle:= >=0 (as returned by a prior call to [*i2c_open*]). reg:= >=0, the device register. data:= the bytes to write. @@ -2418,6 +2479,12 @@ class pi(): be sent and a minimum of 1 byte may be received. The total number of bytes sent/received must be 32 or less. + SMBus 2.0 5.5.8 - Block write-block read. + . . + S Addr Wr [A] Comm [A] Count [A] Data [A] ... + S Addr Rd [A] [Count] A [Data] ... A P + . . + The returned value is a tuple of the number of bytes read and a bytearray containing the bytes. If there was an error the number of bytes read will be less than zero (and will contain @@ -2458,6 +2525,11 @@ class pi(): reg:= >=0, the device register. data:= the bytes to write. + . . + S Addr Wr [A] Comm [A] + S Addr Rd [A] [Data] A [Data] A ... A [Data] NA P + . . + ... pi.i2c_write_i2c_block_data(4, 5, 'hello') @@ -2488,6 +2560,10 @@ class pi(): reg:= >=0, the device register. count:= >0, the number of bytes to read. + . . + S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P + . . + The returned value is a tuple of the number of bytes read and a bytearray containing the bytes. If there was an error the number of bytes read will be less than zero (and will contain @@ -3342,7 +3418,7 @@ class pi(): status = pi.bb_serial_invert(17, 1) ... """ - return _u2i(_pigpio_command(self.sl, _PI_CMD_SLRI, user_gpio, invert, 0)) + return _u2i(_pigpio_command(self.sl, _PI_CMD_SLRI, user_gpio, invert)) def custom_1(self, arg1=0, arg2=0, argx=[]): """ @@ -3738,8 +3814,7 @@ def xref(): PI_CHAIN_NESTING = -118 PI_CHAIN_TOO_BIG = -119 PI_DEPRECATED = -120 - PI_NOT_IN_SER_MODE =-121 - PI_BAD_SER_INVERT =-122 + PI_BAD_SER_INVERT = -121 . . frequency: 0-40000 @@ -3809,6 +3884,10 @@ def xref(): i2c_flags: 32 bit No I2C flags are currently defined. + invert: 0-1 + A flag used to set normal or inverted bit bang serial data + level logic. + level: 0-1 (2) CLEAR = 0 HIGH = 1 diff --git a/pigpiod_if.3 b/pigpiod_if.3 index fff471d..77eddcf 100644 --- a/pigpiod_if.3 +++ b/pigpiod_if.3 @@ -2189,7 +2189,7 @@ Returns 0 if OK, otherwise PI_BAD_USER_GPIO, or PI_NOT_SERIAL_GPIO. .IP "\fBint bb_serial_invert(unsigned user_gpio, unsigned invert)\fP" .IP "" 4 -This function inverts the serial logic for bit bang reading of serial data. +This function inverts serial logic for big bang serial reads. .br @@ -2197,7 +2197,8 @@ This function inverts the serial logic for bit bang reading of serial data. .EX user_gpio: 0-31, previously opened with \fBbb_serial_read_open\fP. - invert: 0-1, 1 invert , 0 normal. +.br + invert: 0-1, 1 invert, 0 normal. .br .EE @@ -2205,7 +2206,7 @@ user_gpio: 0-31, previously opened with \fBbb_serial_read_open\fP. .br .br -Returns 0 if OK, otherwise PI_NOT_IN_SER_MODE or PI_BAD_SER_INVERT. +Returns 0 if OK, otherwise PI_NOT_SERIAL_GPIO or PI_BAD_SER_INVERT. .IP "\fBint i2c_open(unsigned i2c_bus, unsigned i2c_addr, unsigned i2c_flags)\fP" .IP "" 4 @@ -2236,6 +2237,42 @@ No flags are currently defined. This parameter should be set to zero. Returns a handle (>=0) if OK, otherwise PI_BAD_I2C_BUS, PI_BAD_I2C_ADDR, PI_BAD_FLAGS, PI_NO_HANDLE, or PI_I2C_OPEN_FAILED. +.br + +.br +For the SMBus commands the low level transactions are shown at the end +of the function description. The following abbreviations are used. + +.br + +.br + +.EX +S (1 bit) : Start bit +.br +P (1 bit) : Stop bit +.br +Rd/Wr (1 bit) : Read/Write bit. Rd equals 1, Wr equals 0. +.br +A, NA (1 bit) : Accept and not accept bit. +.br +.br +.br +Addr (7 bits): I2C 7 bit address. +.br +Comm (8 bits): Command byte, a data byte which often selects a register. +.br +Data (8 bits): A data byte. +.br +Count (8 bits): A data byte containing the length of a block operation. +.br + +.br +[..]: Data sent by the device. +.br + +.EE + .IP "\fBint i2c_close(unsigned handle)\fP" .IP "" 4 This closes the I2C device associated with the handle. @@ -2281,7 +2318,13 @@ PI_I2C_WRITE_FAILED. .br .br -Quick command. smbus 2.0 5.5.1 +Quick command. SMBus 2.0 5.5.1 + +.EX +S Addr Rd/Wr [A] P +.br + +.EE .IP "\fBint i2c_write_byte(unsigned handle, unsigned bVal)\fP" .IP "" 4 @@ -2308,7 +2351,13 @@ PI_I2C_WRITE_FAILED. .br .br -Send byte. smbus 2.0 5.5.2 +Send byte. SMBus 2.0 5.5.2 + +.EX +S Addr Wr [A] Data [A] P +.br + +.EE .IP "\fBint i2c_read_byte(unsigned handle)\fP" .IP "" 4 @@ -2333,7 +2382,13 @@ or PI_I2C_READ_FAILED. .br .br -Receive byte. smbus 2.0 5.5.3 +Receive byte. SMBus 2.0 5.5.3 + +.EX +S Addr Rd [A] [Data] NA P +.br + +.EE .IP "\fBint i2c_write_byte_data(unsigned handle, unsigned i2c_reg, unsigned bVal)\fP" .IP "" 4 @@ -2363,7 +2418,13 @@ PI_I2C_WRITE_FAILED. .br .br -Write byte. smbus 2.0 5.5.4 +Write byte. SMBus 2.0 5.5.4 + +.EX +S Addr Wr [A] Comm [A] Data [A] P +.br + +.EE .IP "\fBint i2c_write_word_data(unsigned handle, unsigned i2c_reg, unsigned wVal)\fP" .IP "" 4 @@ -2393,7 +2454,13 @@ PI_I2C_WRITE_FAILED. .br .br -Write word. smbus 2.0 5.5.4 +Write word. SMBus 2.0 5.5.4 + +.EX +S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] P +.br + +.EE .IP "\fBint i2c_read_byte_data(unsigned handle, unsigned i2c_reg)\fP" .IP "" 4 @@ -2421,7 +2488,13 @@ PI_BAD_PARAM, or PI_I2C_READ_FAILED. .br .br -Read byte. smbus 2.0 5.5.5 +Read byte. SMBus 2.0 5.5.5 + +.EX +S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P +.br + +.EE .IP "\fBint i2c_read_word_data(unsigned handle, unsigned i2c_reg)\fP" .IP "" 4 @@ -2449,7 +2522,13 @@ PI_BAD_PARAM, or PI_I2C_READ_FAILED. .br .br -Read word. smbus 2.0 5.5.5 +Read word. SMBus 2.0 5.5.5 + +.EX +S Addr Wr [A] Comm [A] S Addr Rd [A] [DataLow] A [DataHigh] NA P +.br + +.EE .IP "\fBint i2c_process_call(unsigned handle, unsigned i2c_reg, unsigned wVal)\fP" .IP "" 4 @@ -2479,7 +2558,15 @@ PI_BAD_PARAM, or PI_I2C_READ_FAILED. .br .br -Process call. smbus 2.0 5.5.6 +Process call. SMBus 2.0 5.5.6 + +.EX +S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] +.br + S Addr Rd [A] [DataLow] A [DataHigh] NA P +.br + +.EE .IP "\fBint i2c_write_block_data(unsigned handle, unsigned i2c_reg, char *buf, unsigned count)\fP" .IP "" 4 @@ -2511,7 +2598,13 @@ PI_I2C_WRITE_FAILED. .br .br -Block write. smbus 2.0 5.5.7 +Block write. SMBus 2.0 5.5.7 + +.EX +S Addr Wr [A] Comm [A] Count [A] Data [A] Data [A] ... [A] Data [A] P +.br + +.EE .IP "\fBint i2c_read_block_data(unsigned handle, unsigned i2c_reg, char *buf)\fP" .IP "" 4 @@ -2546,7 +2639,15 @@ PI_BAD_PARAM, or PI_I2C_READ_FAILED. .br .br -Block read. smbus 2.0 5.5.7 +Block read. SMBus 2.0 5.5.7 + +.EX +S Addr Wr [A] Comm [A] +.br + S Addr Rd [A] [Count] A [Data] A [Data] A ... A [Data] NA P +.br + +.EE .IP "\fBint i2c_block_process_call(unsigned handle, unsigned i2c_reg, char *buf, unsigned count)\fP" .IP "" 4 @@ -2590,7 +2691,15 @@ bytes sent/received must be 32 or less. .br .br -Block write-block read. smbus 2.0 5.5.8 +Block write-block read. SMBus 2.0 5.5.8 + +.EX +S Addr Wr [A] Comm [A] Count [A] Data [A] ... +.br + S Addr Rd [A] [Count] A [Data] ... A P +.br + +.EE .IP "\fBint i2c_read_i2c_block_data(unsigned handle, unsigned i2c_reg, char *buf, unsigned count)\fP" .IP "" 4 @@ -2619,6 +2728,18 @@ i2c_reg: 0-255, the register to read. Returns the number of bytes read (>0) if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_READ_FAILED. +.br + +.br + +.EX +S Addr Wr [A] Comm [A] +.br + S Addr Rd [A] [Data] A [Data] A ... A [Data] NA P +.br + +.EE + .IP "\fBint i2c_write_i2c_block_data(unsigned handle, unsigned i2c_reg, char *buf, unsigned count)\fP" .IP "" 4 This writes 1 to 32 bytes to the specified register of the device @@ -2646,6 +2767,16 @@ i2c_reg: 0-255, the register to write. Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_WRITE_FAILED. +.br + +.br + +.EX +S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P +.br + +.EE + .IP "\fBint i2c_read_device(unsigned handle, char *buf, unsigned count)\fP" .IP "" 4 This reads count bytes from the raw device into buf. @@ -4010,6 +4141,13 @@ A whole number, negative or positive. .br +.IP "\fBinvert\fP" 0 +A flag used to set normal or inverted bit bang serial data level logic. + +.br + +.br + .IP "\fBlevel\fP" 0 The level of a gpio. Low or High. diff --git a/pigpiod_if.c b/pigpiod_if.c index 79a4f03..93b83e4 100644 --- a/pigpiod_if.c +++ b/pigpiod_if.c @@ -25,7 +25,7 @@ OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to */ -/* PIGPIOD_IF_VERSION 17 */ +/* PIGPIOD_IF_VERSION 18 */ #include #include diff --git a/pigpiod_if.h b/pigpiod_if.h index ddb298f..ed68a99 100644 --- a/pigpiod_if.h +++ b/pigpiod_if.h @@ -30,7 +30,7 @@ For more information, please refer to #include "pigpio.h" -#define PIGPIOD_IF_VERSION 17 +#define PIGPIOD_IF_VERSION 18 /*TEXT @@ -1512,7 +1512,7 @@ user_gpio: 0-31, previously opened with [*bb_serial_read_open*]. invert: 0-1, 1 invert, 0 normal. . . -Returns 0 if OK, otherwise PI_NOT_IN_SER_MODE or PI_BAD_SER_INVERT. +Returns 0 if OK, otherwise PI_NOT_SERIAL_GPIO or PI_BAD_SER_INVERT. D*/ /*F*/ @@ -1530,6 +1530,22 @@ No flags are currently defined. This parameter should be set to zero. Returns a handle (>=0) if OK, otherwise PI_BAD_I2C_BUS, PI_BAD_I2C_ADDR, PI_BAD_FLAGS, PI_NO_HANDLE, or PI_I2C_OPEN_FAILED. + +For the SMBus commands the low level transactions are shown at the end +of the function description. The following abbreviations are used. + +. . +S (1 bit) : Start bit +P (1 bit) : Stop bit +Rd/Wr (1 bit) : Read/Write bit. Rd equals 1, Wr equals 0. +A, NA (1 bit) : Accept and not accept bit. +Addr (7 bits): I2C 7 bit address. +Comm (8 bits): Command byte, a data byte which often selects a register. +Data (8 bits): A data byte. +Count (8 bits): A data byte containing the length of a block operation. + +[..]: Data sent by the device. +. . D*/ /*F*/ @@ -1558,7 +1574,10 @@ handle: >=0, as returned by a call to [*i2c_open*]. Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_WRITE_FAILED. -Quick command. smbus 2.0 5.5.1 +Quick command. SMBus 2.0 5.5.1 +. . +S Addr Rd/Wr [A] P +. . D*/ /*F*/ @@ -1574,7 +1593,10 @@ handle: >=0, as returned by a call to [*i2c_open*]. Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_WRITE_FAILED. -Send byte. smbus 2.0 5.5.2 +Send byte. SMBus 2.0 5.5.2 +. . +S Addr Wr [A] Data [A] P +. . D*/ /*F*/ @@ -1589,7 +1611,10 @@ handle: >=0, as returned by a call to [*i2c_open*]. Returns the byte read (>=0) if OK, otherwise PI_BAD_HANDLE, or PI_I2C_READ_FAILED. -Receive byte. smbus 2.0 5.5.3 +Receive byte. SMBus 2.0 5.5.3 +. . +S Addr Rd [A] [Data] NA P +. . D*/ /*F*/ @@ -1607,7 +1632,10 @@ i2c_reg: 0-255, the register to write. Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_WRITE_FAILED. -Write byte. smbus 2.0 5.5.4 +Write byte. SMBus 2.0 5.5.4 +. . +S Addr Wr [A] Comm [A] Data [A] P +. . D*/ /*F*/ @@ -1625,7 +1653,10 @@ i2c_reg: 0-255, the register to write. Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_WRITE_FAILED. -Write word. smbus 2.0 5.5.4 +Write word. SMBus 2.0 5.5.4 +. . +S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] P +. . D*/ /*F*/ @@ -1642,7 +1673,10 @@ i2c_reg: 0-255, the register to read. Returns the byte read (>=0) if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_READ_FAILED. -Read byte. smbus 2.0 5.5.5 +Read byte. SMBus 2.0 5.5.5 +. . +S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P +. . D*/ /*F*/ @@ -1659,7 +1693,10 @@ i2c_reg: 0-255, the register to read. Returns the word read (>=0) if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_READ_FAILED. -Read word. smbus 2.0 5.5.5 +Read word. SMBus 2.0 5.5.5 +. . +S Addr Wr [A] Comm [A] S Addr Rd [A] [DataLow] A [DataHigh] NA P +. . D*/ /*F*/ @@ -1677,7 +1714,11 @@ i2c_reg: 0-255, the register to write/read. Returns the word read (>=0) if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_READ_FAILED. -Process call. smbus 2.0 5.5.6 +Process call. SMBus 2.0 5.5.6 +. . +S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] + S Addr Rd [A] [DataLow] A [DataHigh] NA P +. . D*/ /*F*/ @@ -1697,7 +1738,10 @@ i2c_reg: 0-255, the register to write. Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_WRITE_FAILED. -Block write. smbus 2.0 5.5.7 +Block write. SMBus 2.0 5.5.7 +. . +S Addr Wr [A] Comm [A] Count [A] Data [A] Data [A] ... [A] Data [A] P +. . D*/ /*F*/ @@ -1717,7 +1761,11 @@ The amount of returned data is set by the device. Returns the number of bytes read (>=0) if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_READ_FAILED. -Block read. smbus 2.0 5.5.7 +Block read. SMBus 2.0 5.5.7 +. . +S Addr Wr [A] Comm [A] + S Addr Rd [A] [Count] A [Data] A [Data] A ... A [Data] NA P +. . D*/ /*F*/ @@ -1743,7 +1791,11 @@ The smbus 2.0 documentation states that a minimum of 1 byte may be sent and a minimum of 1 byte may be received. The total number of bytes sent/received must be 32 or less. -Block write-block read. smbus 2.0 5.5.8 +Block write-block read. SMBus 2.0 5.5.8 +. . +S Addr Wr [A] Comm [A] Count [A] Data [A] ... + S Addr Rd [A] [Count] A [Data] ... A P +. . D*/ /*F*/ @@ -1762,6 +1814,11 @@ i2c_reg: 0-255, the register to read. Returns the number of bytes read (>0) if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_READ_FAILED. + +. . +S Addr Wr [A] Comm [A] + S Addr Rd [A] [Data] A [Data] A ... A [Data] NA P +. . D*/ @@ -1781,6 +1838,10 @@ i2c_reg: 0-255, the register to write. Returns 0 if OK, otherwise PI_BAD_HANDLE, PI_BAD_PARAM, or PI_I2C_WRITE_FAILED. + +. . +S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P +. . D*/ /*F*/ @@ -2518,6 +2579,9 @@ The number of bytes of data in a buffer. int:: A whole number, negative or positive. +invert:: +A flag used to set normal or inverted bit bang serial data level logic. + level:: The level of a gpio. Low or High. diff --git a/pigs.1 b/pigs.1 index cdaa36d..544d52e 100644 --- a/pigs.1 +++ b/pigs.1 @@ -645,7 +645,7 @@ The gpio must be one of the following. 5 clock 1 A+/B+/Pi2 and compute module only (reserved for system use) 6 clock 2 A+/B+/Pi2 and compute module only 20 clock 0 A+/B+/Pi2 and compute module only -21 clock 1 All models but Type 2 B (reserved for system use) +21 clock 1 All models but Type 2 (reserved for system use) .EE @@ -742,7 +742,7 @@ The gpio must be one of the following. This command returns the hardware revision of the Pi. .br -The hardware revision is found in the last 4 characters on the Type sion +The hardware revision is found in the last 4 characters on the revision line of /proc/cpuinfo. .br @@ -2570,6 +2570,35 @@ ERROR: no serial read in progress on gpio .br +.IP "\fBSLRI u v\fP - Sets bit bang serial data logic levels" +.IP "" 4 + +.br +This command sets the logic level for reading bit bang serial data +on gpio \fBu\fP. + +.br +Upon success nothing is returned. On error a negative status code +will be returned. + +.br +The invert parameter \fBv\fP is 1 for inverted signal, 0 for normal. + +\fBExample\fP +.br + +.EX +$ pigs slri 17 1 # invert logic on gpio 17 +.br + +.br +$ pigs slri 23 0 # use normal logic on gpio 23 +.br + +.EE + +.br + .IP "\fBSLRO u b db\fP - Open gpio for bit bang serial data" .IP "" 4 @@ -2612,36 +2641,6 @@ ERROR: gpio already in use .br -.IP "\fBSLRI u i\fP - Invert serial logic for bit bang serial data" -.IP "" 4 - -.br -This command inverts the serial logic when reading bit bang serial data. - -.br -Upon success nothing is returned. On error a negative status code -will be returned. - -.br -The invert parameter is 1 for inverted signal, 0 for normal. - -.br - -\fBExample\fP -.br - -.EX -$ pigs slri 17 1 -.br - -.br -$ pigs slri 17 0 -.br - -.EE - -.br - .IP "\fBSPIC h\fP - SPI close handle" .IP "" 4 @@ -3246,35 +3245,35 @@ done .br .br -pigs wvcha \\ +pigs wvcha \ .br - ${w[4]} ${w[3]} ${w[2]} \\ + ${w[4]} ${w[3]} ${w[2]} \ .br - 255 0 \\ + 255 0 \ .br - ${w[0]} ${w[0]} ${w[0]} \\ + ${w[0]} ${w[0]} ${w[0]} \ .br - 255 0 \\ + 255 0 \ .br - ${w[0]} ${w[1]} \\ + ${w[0]} ${w[1]} \ .br - 255 2 0x88 0x13 \\ + 255 2 0x88 0x13 \ .br - 255 1 30 0 \\ + 255 1 30 0 \ .br - 255 0 \\ + 255 0 \ .br - ${w[2]} ${w[3]} ${w[0]} \\ + ${w[2]} ${w[3]} ${w[0]} \ .br - ${w[3]} ${w[1]} ${w[2]} \\ + ${w[3]} ${w[1]} ${w[2]} \ .br - 255 1 10 0 \\ + 255 1 10 0 \ .br - 255 1 5 0 \\ + 255 1 5 0 \ .br - ${w[4]} ${w[4]} ${w[4]} \\ + ${w[4]} ${w[4]} ${w[4]} \ .br - 255 2 0x20 0x4E \\ + 255 2 0x20 0x4E \ .br ${w[0]} ${w[0]} ${w[0]} .br @@ -3399,7 +3398,7 @@ ERROR: attempt to create an empty waveform .br -.IP "\fBWVDEL wid\fP - Delete selected waveforms" +.IP "\fBWVDEL wid\fP - Delete selected waveform" .IP "" 4 .br @@ -4123,7 +4122,7 @@ Again, ignore the details for now. .br .EX -time (pigs procr 0 10000000; while a=$(pigs procp 0); [[ ${a::1} -eq 2 ]];\\ +time (pigs procr 0 10000000; while a=$(pigs procp 0); [[ ${a::1} -eq 2 ]];\ .br do sleep 0.2; done) .br @@ -4163,7 +4162,7 @@ jp 999 jumps to tag 999 if the result is positive. .br .EX -time (pigs procr 0 10000000; while a=$(pigs procp 0); [[ ${a::1} -eq 2 ]];\\ +time (pigs procr 0 10000000; while a=$(pigs procp 0); [[ ${a::1} -eq 2 ]];\ .br do sleep 0.2; done) .br diff --git a/setup.py b/setup.py index 15bcf6d..19a1a32 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ from distutils.core import setup setup(name='pigpio', - version='1.20', + version='1.21', author='joan', author_email='joan@abyz.co.uk', maintainer='joan', diff --git a/x_pigs b/x_pigs index 1f4f36b..923734a 100755 --- a/x_pigs +++ b/x_pigs @@ -49,7 +49,7 @@ s=$(pigs bs2 0) if [[ $s = "" ]]; then echo "BS2 ok"; else echo "BS2 fail ($s)"; fi s=$(pigs h) -if [[ ${#s} = 4263 ]]; then echo "HELP ok"; else echo "HELP fail (${#s})"; fi +if [[ ${#s} = 4321 ]]; then echo "HELP ok"; else echo "HELP fail (${#s})"; fi s=$(pigs hwver) if [[ $s -ne 0 ]]; then echo "HWVER ok"; else echo "HWVER fail ($s)"; fi