diff --git a/command.c b/command.c
index 32619ba..eb7c47e 100644
--- a/command.c
+++ b/command.c
@@ -26,7 +26,7 @@ For more information, please refer to
*/
/*
-This version is for pigpio version 47+
+This version is for pigpio version 48+
*/
#include
@@ -394,7 +394,7 @@ static errInfo_t errInfo[]=
{PI_BAD_CHANNEL , "DMA channel not 0-14"},
{PI_BAD_SOCKET_PORT , "socket port not 1024-30000"},
{PI_BAD_FIFO_COMMAND , "unknown fifo command"},
- {PI_BAD_SECO_CHANNEL , "DMA secondary channel not 0-6"},
+ {PI_BAD_SECO_CHANNEL , "DMA secondary channel not 0-14"},
{PI_NOT_INITIALISED , "function called before gpioInitialise"},
{PI_INITIALISED , "function called after gpioInitialise"},
{PI_BAD_WAVE_MODE , "waveform mode not 0-1"},
@@ -455,7 +455,7 @@ static errInfo_t errInfo[]=
{PI_UNKNOWN_COMMAND , "unknown command"},
{PI_SPI_XFER_FAILED , "spi xfer/read/write failed"},
{PI_BAD_POINTER , "bad (NULL) pointer"},
- {PI_NO_AUX_SPI , "need a B+ for auxiliary SPI"},
+ {PI_NO_AUX_SPI , "no auxiliary SPI on Pi A or B"},
{PI_NOT_PWM_GPIO , "GPIO is not in use for PWM"},
{PI_NOT_SERVO_GPIO , "GPIO is not in use for servo pulses"},
{PI_NOT_HCLK_GPIO , "GPIO has no hardware clock"},
diff --git a/pigpio.3 b/pigpio.3
index cc7264d..7f06865 100644
--- a/pigpio.3
+++ b/pigpio.3
@@ -5260,7 +5260,7 @@ Configures pigpio to use the specified DMA channels.
.EX
primaryChannel: 0-14
.br
-secondaryChannel: 0-6
+secondaryChannel: 0-14
.br
.EE
@@ -5269,7 +5269,27 @@ secondaryChannel: 0-6
.br
The default setting is to use channel 14 for the primary channel and
-channel 5 for the secondary channel.
+channel 6 for the secondary channel.
+
+.br
+
+.br
+The secondary channel is only used for the transmission of waves.
+
+.br
+
+.br
+If possible use one of channels 0 to 6 for the secondary channel
+(a full channel).
+
+.br
+
+.br
+A full channel only requires one DMA control block regardless of the
+length of a pulse delay. Channels 7 to 14 (lite channels) require
+one DMA control block for each 16383 microseconds of delay. I.e.
+a 10 second pulse delay requires one control block on a full channel
+and 611 control blocks on a lite channel.
.IP "\fBint gpioCfgPermissions(uint64_t updateMask)\fP"
.IP "" 4
@@ -5289,22 +5309,26 @@ updateMask: bit (1<
*/
-/* pigpio version 47 */
+/* pigpio version 48 */
/* include ------------------------------------------------------- */
@@ -365,9 +365,11 @@ bit 0 READ_LAST_NOT_SET_ERROR
#define DMA_BURST_LENGTH(x) ((x)<<12)
#define DMA_SRC_IGNORE (1<<11)
#define DMA_SRC_DREQ (1<<10)
+#define DMA_SRC_WIDTH (1<< 9)
#define DMA_SRC_INC (1<< 8)
#define DMA_DEST_IGNORE (1<< 7)
#define DMA_DEST_DREQ (1<< 6)
+#define DMA_DEST_WIDTH (1<< 5)
#define DMA_DEST_INC (1<< 4)
#define DMA_WAIT_RESP (1<< 3)
@@ -375,6 +377,9 @@ bit 0 READ_LAST_NOT_SET_ERROR
#define DMA_DEBUG_FIFO_ERR (1<<1)
#define DMA_DEBUG_RD_LST_NOT_SET_ERR (1<<0)
+#define DMA_LITE_FIRST 7
+#define DMA_LITE_MAX 0xfffc
+
#define PWM_CTL 0
#define PWM_STA 1
#define PWM_DMAC 2
@@ -742,6 +747,8 @@ Assumes two counters per block. Each counter 4 * 16 (16^4=65536)
#define PI_WF_MICROS 1
+#define BPD 4
+
#define MAX_REPORT 120
#define MAX_SAMPLE 4000
@@ -1123,7 +1130,7 @@ typedef struct
/* initialise once then preserve */
-static volatile uint32_t piModel = 1;
+static volatile uint32_t piCores = 0;
static volatile uint32_t pi_peri_phys = 0x20000000;
static volatile uint32_t pi_dram_bus = 0x40000000;
static volatile uint32_t pi_mem_flag = 0x0C;
@@ -1655,7 +1662,7 @@ static void spinWhileStarting(void)
{
while (runState == PI_STARTING)
{
- if (piModel == 1) myGpioDelay(1000);
+ if (piCores == 1) myGpioDelay(1000);
else flushMemory();
}
}
@@ -2603,6 +2610,17 @@ static void waveBitDelay
bitDelay[i] = diff;
}
+static int waveDelayCBs(uint32_t delay)
+{
+ uint32_t cbs;
+
+ if (!delay) return 0;
+ if (gpioCfg.DMAsecondaryChannel < DMA_LITE_FIRST) return 1;
+ cbs = BPD * delay / DMA_LITE_MAX;
+ if ((BPD * delay) % DMA_LITE_MAX) cbs++;
+ return cbs;
+}
+
/* ----------------------------------------------------------------------- */
static void waveCBsOOLs(int *numCBs, int *numBOOLs, int *numTOOLs)
@@ -2628,7 +2646,8 @@ static void waveCBsOOLs(int *numCBs, int *numBOOLs, int *numTOOLs)
if (waves[i].gpioOff) {numCB++; numBOOL++;}
if (waves[i].flags & WAVE_FLAG_READ) {numCB++; numTOOL++;}
if (waves[i].flags & WAVE_FLAG_TICK) {numCB++; numTOOL++;}
- if (waves[i].usDelay) {numCB++; }
+
+ numCB += waveDelayCBs(waves[i].usDelay);
}
*numCBs = numCB;
@@ -2646,17 +2665,19 @@ static int wave2Cbs(unsigned wave_mode, int *CB, int *BOOL, int *TOOL)
rawCbs_t *p=NULL;
- unsigned i, half, repeatCB;
+ unsigned i, repeatCB;
unsigned numWaves;
+ unsigned delayCBs, dcb;
+
+ uint32_t delayLeft;
+
rawWave_t * waves;
numWaves = wfc[wfcur];
waves = wf [wfcur];
- half = PI_WF_MICROS/2;
-
/* add delay cb at start of DMA */
p = rawWaveCBAdr(botCB++);
@@ -2675,7 +2696,7 @@ static int wave2Cbs(unsigned wave_mode, int *CB, int *BOOL, int *TOOL)
}
p->src = (uint32_t) (&dmaOBus[0]->periphData);
- p->length = 4 * 20 / PI_WF_MICROS; /* 20 micros delay */
+ p->length = BPD * 20 / PI_WF_MICROS; /* 20 micros delay */
p->next = waveCbPOadr(botCB);
repeatCB = botCB;
@@ -2732,24 +2753,41 @@ static int wave2Cbs(unsigned wave_mode, int *CB, int *BOOL, int *TOOL)
if (waves[i].usDelay)
{
- p = rawWaveCBAdr(botCB++);
+ delayLeft = waves[i].usDelay;
- /* use the secondary clock */
+ delayCBs = waveDelayCBs(delayLeft);
- if (gpioCfg.clockPeriph != PI_CLOCK_PCM)
+ for (dcb=0; dcbinfo = NORMAL_DMA | TIMED_DMA(2);
- p->dst = PCM_TIMER;
- }
- else
- {
- p->info = NORMAL_DMA | TIMED_DMA(5);
- p->dst = PWM_TIMER;
- }
+ p = rawWaveCBAdr(botCB++);
- p->src = (uint32_t) (&dmaOBus[0]->periphData);
- p->length = 4 * ((waves[i].usDelay+half)/PI_WF_MICROS);
- p->next = waveCbPOadr(botCB);
+ /* use the secondary clock */
+
+ if (gpioCfg.clockPeriph != PI_CLOCK_PCM)
+ {
+ p->info = NORMAL_DMA | TIMED_DMA(2);
+ p->dst = PCM_TIMER;
+ }
+ else
+ {
+ p->info = NORMAL_DMA | TIMED_DMA(5);
+ p->dst = PWM_TIMER;
+ }
+
+ p->src = (uint32_t) (&dmaOBus[0]->periphData);
+
+ p->length = BPD * delayLeft / PI_WF_MICROS;
+
+ if ((gpioCfg.DMAsecondaryChannel >= DMA_LITE_FIRST) &&
+ (p->length > DMA_LITE_MAX))
+ {
+ p->length = DMA_LITE_MAX;
+ }
+
+ delayLeft -= (p->length / BPD);
+
+ p->next = waveCbPOadr(botCB);
+ }
}
}
@@ -2940,7 +2978,7 @@ int rawWaveAddGeneric(unsigned numIn1, rawWave_t *in1)
out[outPos].usDelay = tDelay;
- cbs++; /* one cb for delay */
+ cbs += waveDelayCBs(tDelay);
if (out[outPos].gpioOn) cbs++; /* one cb if gpio on */
@@ -4301,7 +4339,7 @@ int spiOpen(unsigned spiChan, unsigned baud, unsigned spiFlags)
if (PI_SPI_FLAGS_GET_AUX_SPI(spiFlags))
{
if (gpioHardwareRevision() < 16)
- SOFT_ERROR(PI_NO_AUX_SPI, "no auxiliary SPI, need a A+/B+");
+ SOFT_ERROR(PI_NO_AUX_SPI, "no auxiliary SPI on Pi A or B");
i = PI_NUM_AUX_SPI_CHANNEL;
}
@@ -5567,7 +5605,6 @@ static void alertEmit(
}
else
{
- gpioCfg.internals |= PI_CFG_STATS;
gpioStats.shortPipeWrite++;
DBG(DBG_ALWAYS, "emitted %d, asked for %d",
err/sizeof(gpioReport_t), max_emits);
@@ -5608,7 +5645,6 @@ static void alertEmit(
}
else
{
- gpioCfg.internals |= PI_CFG_STATS;
gpioStats.shortPipeWrite++;
DBG(DBG_ALWAYS, "emitted %d, asked for %d",
err/sizeof(gpioReport_t), emit);
@@ -7505,7 +7541,7 @@ static void initReleaseResources(void)
int initInitialise(void)
{
- int rev, i;
+ int rev, i, model;
struct sockaddr_in server;
char * portStr;
unsigned port;
@@ -7531,11 +7567,32 @@ int initInitialise(void)
if (!gpioMaskSet)
{
- if (rev == 0) gpioMask = PI_DEFAULT_UPDATE_MASK_R0;
+ if (rev == 0) gpioMask = PI_DEFAULT_UPDATE_MASK_UNKNOWN;
else if (rev == 17) gpioMask = PI_DEFAULT_UPDATE_MASK_COMPUTE;
- else if (rev < 4) gpioMask = PI_DEFAULT_UPDATE_MASK_R1;
- else if (rev < 16) gpioMask = PI_DEFAULT_UPDATE_MASK_R2;
- else gpioMask = PI_DEFAULT_UPDATE_MASK_R3;
+ else if (rev < 4) gpioMask = PI_DEFAULT_UPDATE_MASK_B1;
+ else if (rev < 16) gpioMask = PI_DEFAULT_UPDATE_MASK_A_B2;
+ else
+ {
+ model = (rev >> 4) & 0xFF;
+
+ /* model
+ 0=A 1=B
+ 2=A+ 3=B+
+ 4=Pi2B
+ 5=Alpha
+ 6=Compute Module
+ 7=Unknown
+ 8=Pi3B
+ 9=Zero
+ */
+ if (model < 2) gpioMask = PI_DEFAULT_UPDATE_MASK_A_B2;
+ else if (model < 4) gpioMask = PI_DEFAULT_UPDATE_MASK_APLUS_BPLUS;
+ else if (model == 4) gpioMask = PI_DEFAULT_UPDATE_MASK_PI2B;
+ else if (model == 6) gpioMask = PI_DEFAULT_UPDATE_MASK_COMPUTE;
+ else if (model == 8) gpioMask = PI_DEFAULT_UPDATE_MASK_PI3B;
+ else if (model == 9) gpioMask = PI_DEFAULT_UPDATE_MASK_ZERO;
+ else gpioMask = PI_DEFAULT_UPDATE_MASK_UNKNOWN;
+ }
gpioMaskSet = 1;
}
@@ -9118,7 +9175,7 @@ int gpioWaveChain(char *buf, unsigned bufSize)
int cb, chaincb;
rawCbs_t *p;
int i, wid, cmd, loop, counters;
- unsigned cycles;
+ unsigned cycles, delayCBs, dcb, delayLeft;
uint32_t repeat, next, *endPtr;
int stk_pos[10], stk_lev=0;
@@ -9159,7 +9216,7 @@ int gpioWaveChain(char *buf, unsigned bufSize)
}
p->src = (uint32_t) (&dmaOBus[0]->periphData);
- p->length = 4 * 20 / PI_WF_MICROS; /* 20 micros delay */
+ p->length = BPD * 20 / PI_WF_MICROS; /* 20 micros delay */
p->next = waveCbPOadr(chainGetCB(cb));
counters = 0;
@@ -9275,29 +9332,45 @@ int gpioWaveChain(char *buf, unsigned bufSize)
if (cycles)
{
- chaincb = chainGetCB(cb++);
-
- if (chaincb < 0)
- SOFT_ERROR(PI_CHAIN_TOO_BIG, "chain is too long (%d)", cb);
-
- p = rawWaveCBAdr(chaincb);
-
- /* use the secondary clock */
-
- if (gpioCfg.clockPeriph != PI_CLOCK_PCM)
+ delayLeft = cycles;
+ delayCBs = waveDelayCBs(delayLeft);
+ for (dcb=0; dcbinfo = NORMAL_DMA | TIMED_DMA(2);
- p->dst = PCM_TIMER;
- }
- else
- {
- p->info = NORMAL_DMA | TIMED_DMA(5);
- p->dst = PWM_TIMER;
- }
+ chaincb = chainGetCB(cb++);
- p->src = (uint32_t) (&dmaOBus[0]->periphData);
- p->length = 4 * cycles / PI_WF_MICROS;
- p->next = waveCbPOadr(chainGetCB(cb));
+ if (chaincb < 0)
+ SOFT_ERROR(
+ PI_CHAIN_TOO_BIG, "chain is too long (%d)", cb);
+
+ p = rawWaveCBAdr(chaincb);
+
+ /* use the secondary clock */
+
+ if (gpioCfg.clockPeriph != PI_CLOCK_PCM)
+ {
+ p->info = NORMAL_DMA | TIMED_DMA(2);
+ p->dst = PCM_TIMER;
+ }
+ else
+ {
+ p->info = NORMAL_DMA | TIMED_DMA(5);
+ p->dst = PWM_TIMER;
+ }
+
+ p->src = (uint32_t) (&dmaOBus[0]->periphData);
+
+ p->length = BPD * delayLeft / PI_WF_MICROS;
+
+ if ((gpioCfg.DMAsecondaryChannel >= DMA_LITE_FIRST) &&
+ (p->length > DMA_LITE_MAX))
+ {
+ p->length = DMA_LITE_MAX;
+ }
+
+ delayLeft -= (p->length / BPD);
+
+ p->next = waveCbPOadr(chainGetCB(cb));
+ }
}
}
else if (cmd == 3) /* repeat loop forever */
@@ -11506,6 +11579,28 @@ unsigned gpioVersion(void)
/* ----------------------------------------------------------------------- */
+/*
+2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
+5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+
+W W S M M M B B B B P P P P T T T T T T T T R R R R
+
+W warranty void if either bit is set
+
+S 0=old (bits 0-22 are revision number) 1=new (following fields apply)
+
+M 0=256 1=512 2=1024
+
+B 0=Sony 1=Egoman 2=Embest 3=Unknown 4=Embest
+
+P 0=2835, 1=2836, 2=2837
+
+T 0=A 1=B 2=A+ 3=B+ 4=Pi2B 5=Alpha 6=Compute Module 7=Unknown 8=Pi3B 9=Zero
+
+R PCB board revision
+
+*/
+
unsigned gpioHardwareRevision(void)
{
static unsigned rev = 0;
@@ -11513,13 +11608,12 @@ unsigned gpioHardwareRevision(void)
FILE * filp;
char buf[512];
char term;
- int chars=4; /* number of chars in revision string */
DBG(DBG_USER, "");
if (rev) return rev;
- piModel = 0;
+ piCores = 0;
filp = fopen ("/proc/cpuinfo", "r");
@@ -11527,22 +11621,27 @@ unsigned gpioHardwareRevision(void)
{
while (fgets(buf, sizeof(buf), filp) != NULL)
{
- if (piModel == 0)
+ if (piCores == 0)
{
if (!strncasecmp("model name", buf, 10))
{
if (strstr (buf, "ARMv6") != NULL)
{
- piModel = 1;
- chars = 4;
+ piCores = 1;
pi_peri_phys = 0x20000000;
pi_dram_bus = 0x40000000;
pi_mem_flag = 0x0C;
}
else if (strstr (buf, "ARMv7") != NULL)
{
- piModel = 2;
- chars = 6;
+ piCores = 4;
+ pi_peri_phys = 0x3F000000;
+ pi_dram_bus = 0xC0000000;
+ pi_mem_flag = 0x04;
+ }
+ else if (strstr (buf, "ARMv8") != NULL)
+ {
+ piCores = 4;
pi_peri_phys = 0x3F000000;
pi_dram_bus = 0xC0000000;
pi_mem_flag = 0x04;
@@ -11550,10 +11649,9 @@ unsigned gpioHardwareRevision(void)
}
}
- if (!strncasecmp("revision", buf, 8))
+ if (!strncasecmp("revision\t:", buf, 10))
{
- if (sscanf(buf+strlen(buf)-(chars+1),
- "%x%c", &rev, &term) == 2)
+ if (sscanf(buf+10, "%x%c", &rev, &term) == 2)
{
if (term != '\n') rev = 0;
}
@@ -11633,11 +11731,12 @@ int gpioCfgDMAchannels(unsigned primaryChannel, unsigned secondaryChannel)
CHECK_NOT_INITED;
- if (primaryChannel > PI_MAX_PRIMARY_CHANNEL)
+ if (primaryChannel > PI_MAX_DMA_CHANNEL)
SOFT_ERROR(PI_BAD_PRIM_CHANNEL, "bad primary channel (%d)",
primaryChannel);
- if (secondaryChannel > PI_MAX_SECONDARY_CHANNEL)
+ if ((secondaryChannel > PI_MAX_DMA_CHANNEL) ||
+ (secondaryChannel == primaryChannel))
SOFT_ERROR(PI_BAD_SECO_CHANNEL, "bad secondary channel (%d)",
secondaryChannel);
diff --git a/pigpio.h b/pigpio.h
index b759488..7cbf9b7 100644
--- a/pigpio.h
+++ b/pigpio.h
@@ -31,7 +31,7 @@ For more information, please refer to
#include
#include
-#define PIGPIO_VERSION 47
+#define PIGPIO_VERSION 48
/*TEXT
@@ -726,9 +726,6 @@ typedef void *(gpioThreadFunc_t) (void *);
#define PI_MIN_DMA_CHANNEL 0
#define PI_MAX_DMA_CHANNEL 14
-#define PI_MAX_PRIMARY_CHANNEL 14
-#define PI_MAX_SECONDARY_CHANNEL 6
-
/* port */
#define PI_MIN_SOCKET_PORT 1024
@@ -3705,11 +3702,22 @@ Configures pigpio to use the specified DMA channels.
. .
primaryChannel: 0-14
-secondaryChannel: 0-6
+secondaryChannel: 0-14
. .
The default setting is to use channel 14 for the primary channel and
-channel 5 for the secondary channel.
+channel 6 for the secondary channel.
+
+The secondary channel is only used for the transmission of waves.
+
+If possible use one of channels 0 to 6 for the secondary channel
+(a full channel).
+
+A full channel only requires one DMA control block regardless of the
+length of a pulse delay. Channels 7 to 14 (lite channels) require
+one DMA control block for each 16383 microseconds of delay. I.e.
+a 10 second pulse delay requires one control block on a full channel
+and 611 control blocks on a lite channel.
D*/
@@ -3723,13 +3731,14 @@ GPIO specified by the mask.
updateMask: bit (1<
*/
/*
-This version is for pigpio version 43+
+This version is for pigpio version 48+
*/
#include
@@ -90,7 +90,7 @@ void usage()
" -b value, gpio sample buffer in milliseconds, default 120\n" \
" -c value, library internal settings, default 0\n" \
" -d value, primary DMA channel, 0-14, default 14\n" \
- " -e value, secondary DMA channel, 0-6, default 5\n" \
+ " -e value, secondary DMA channel, 0-14, default 6\n" \
" -f, disable fifo interface, default enabled\n" \
" -k, disable socket interface, default enabled\n" \
" -l, localhost socket only default all interfaces\n" \
@@ -149,14 +149,14 @@ static void initOpts(int argc, char *argv[])
case 'd':
i = getNum(optarg, &err);
- if ((i >= PI_MIN_DMA_CHANNEL) && (i <= PI_MAX_PRIMARY_CHANNEL))
+ if ((i >= PI_MIN_DMA_CHANNEL) && (i <= PI_MAX_DMA_CHANNEL))
DMAprimaryChannel = i;
else fatal("invalid -d option (%d)", i);
break;
case 'e':
i = getNum(optarg, &err);
- if ((i >= PI_MIN_DMA_CHANNEL) && (i <= PI_MAX_SECONDARY_CHANNEL))
+ if ((i >= PI_MIN_DMA_CHANNEL) && (i <= PI_MAX_DMA_CHANNEL))
DMAsecondaryChannel = i;
else fatal("invalid -e option (%d)", i);
break;
diff --git a/setup.py b/setup.py
index e7ae279..16a18fa 100644
--- a/setup.py
+++ b/setup.py
@@ -3,7 +3,7 @@
from distutils.core import setup
setup(name='pigpio',
- version='1.29',
+ version='1.30',
author='joan',
author_email='joan@abyz.co.uk',
maintainer='joan',
diff --git a/x_pigpio.c b/x_pigpio.c
index 50212b0..5431301 100644
--- a/x_pigpio.c
+++ b/x_pigpio.c
@@ -1,5 +1,5 @@
/*
-gcc -o x_pigpio x_pigpio.c -lpigpio -lrt -lpthread
+gcc -Wall -pthread -o x_pigpio x_pigpio.c -lpigpio
sudo ./x_pigpio
*** WARNING ************************************************
@@ -45,7 +45,7 @@ void CHECK(int t, int st, int got, int expect, int pc, char *desc)
void t0()
{
- printf("Version.\n");
+ printf("\nTesting pigpio C I/F\n");
printf("pigpio version %d.\n", gpioVersion());
@@ -392,7 +392,8 @@ To the lascivious pleasing of a lute.\n\
wid = gpioWaveCreate();
e = gpioWaveTxSend(wid, PI_WAVE_MODE_REPEAT);
- CHECK(5, 3, e, 9, 0, "wave tx repeat");
+ if (e < 14) CHECK(5, 3, e, 9, 0, "wave tx repeat");
+ else CHECK(5, 3, e, 19, 0, "wave tx repeat");
oc = t5_count;
time_sleep(5);
@@ -413,7 +414,8 @@ To the lascivious pleasing of a lute.\n\
wid = gpioWaveCreate();
e = gpioWaveTxSend(wid, PI_WAVE_MODE_ONE_SHOT);
- CHECK(5, 8, e, 6811, 0, "wave tx start");
+ if (e < 6964) CHECK(5, 8, e, 6811, 0, "wave tx start");
+ else CHECK(5, 8, e, 7116, 0, "wave tx start");
CHECK(5, 9, 0, 0, 0, "NOT APPLICABLE");
@@ -447,10 +449,12 @@ To the lascivious pleasing of a lute.\n\
CHECK(5, 18, c, 12000, 0, "wave get max pulses");
c = gpioWaveGetCbs();
- CHECK(5, 19, c, 6810, 0, "wave get cbs");
+ if (e < 6963) CHECK(5, 19, c, 6810, 0, "wave get cbs");
+ else CHECK(5, 19, c, 7115, 0, "wave get cbs");
c = gpioWaveGetHighCbs();
- CHECK(5, 20, c, 6810, 0, "wave get high cbs");
+ if (e < 6963) CHECK(5, 20, c, 6810, 0, "wave get high cbs");
+ else CHECK(5, 20, c, 7115, 0, "wave get high cbs");
c = gpioWaveGetMaxCbs();
CHECK(5, 21, c, 25016, 0, "wave get max cbs");
diff --git a/x_pigpio.py b/x_pigpio.py
index 9136f48..37459d3 100755
--- a/x_pigpio.py
+++ b/x_pigpio.py
@@ -45,14 +45,14 @@ def CHECK(t, st, got, expect, pc, desc):
def t0():
- print("Version.")
+ print("\nTesting pigpio Python module {}".format(pigpio.VERSION))
+
+ print("Python {}".format(sys.version.replace("\n", " ")))
print("pigpio version {}.".format(pi.get_pigpio_version()))
print("Hardware revision {}.".format(pi.get_hardware_revision()))
- print("Python version {}.".format(sys.version.replace("\n", " ")))
-
def t1():
print("Mode/PUD/read/write tests.")
@@ -361,7 +361,10 @@ To the lascivious pleasing of a lute.
wid = pi.wave_create()
e = pi.wave_send_repeat(wid)
- CHECK(5, 3, e, 9, 0, "wave send repeat")
+ if e < 14:
+ CHECK(5, 3, e, 9, 0, "wave send repeat")
+ else:
+ CHECK(5, 3, e, 19, 0, "wave send repeat")
oc = t5_count
time.sleep(5)
@@ -380,7 +383,10 @@ To the lascivious pleasing of a lute.
wid = pi.wave_create()
e = pi.wave_send_once(wid)
- CHECK(5, 8, e, 6811, 0, "wave send once")
+ if e < 6964:
+ CHECK(5, 8, e, 6811, 0, "wave send once")
+ else:
+ CHECK(5, 8, e, 7116, 0, "wave send once")
oc = t5_count
time.sleep(3)
@@ -417,7 +423,10 @@ To the lascivious pleasing of a lute.
CHECK(5, 18, c, 12000, 0, "wave get max pulses")
c = pi.wave_get_cbs()
- CHECK(5, 19, c, 6810, 0, "wave get cbs")
+ if c < 6963:
+ CHECK(5, 19, c, 6810, 0, "wave get cbs")
+ else:
+ CHECK(5, 19, c, 7115, 0, "wave get cbs")
CHECK(5, 20, 0, 0, 0, "NOT APPLICABLE")
@@ -434,7 +443,10 @@ To the lascivious pleasing of a lute.
CHECK(5, 24, w1, 0, 0, "wave create")
e = pi.wave_send_repeat(w1)
- CHECK(5, 25, e, 9, 0, "wave send repeat")
+ if e < 14:
+ CHECK(5, 25, e, 9, 0, "wave send repeat")
+ else:
+ CHECK(5, 25, e, 19, 0, "wave send repeat")
oc = t5_count
time.sleep(5)
@@ -451,7 +463,10 @@ To the lascivious pleasing of a lute.
CHECK(5, 29, w2, 1, 0, "wave create")
e = pi.wave_send_once(w2)
- CHECK(5, 30, e, 6811, 0, "wave send once")
+ if e < 6964:
+ CHECK(5, 30, e, 6811, 0, "wave send once")
+ else:
+ CHECK(5, 30, e, 7116, 0, "wave send once")
oc = t5_count
time.sleep(3)
diff --git a/x_pigpiod_if.c b/x_pigpiod_if.c
index df2af4b..cc58d2f 100644
--- a/x_pigpiod_if.c
+++ b/x_pigpiod_if.c
@@ -1,5 +1,5 @@
/*
-gcc -o x_pigpiod_if x_pigpiod_if.c -lpigpiod_if -lrt -lpthread
+gcc -Wall -pthread -o x_pigpiod_if x_pigpiod_if.c -lpigpiod_if
./x_pigpiod_if
*** WARNING ************************************************
@@ -42,7 +42,7 @@ void CHECK(int t, int st, int got, int expect, int pc, char *desc)
void t0()
{
- printf("Version.\n");
+ printf("\nTesting pigpiod C I/F 1\n");
printf("pigpio version %d.\n", get_pigpio_version());
@@ -360,7 +360,8 @@ To the lascivious pleasing of a lute.\n\
wid = wave_create();
e = wave_send_repeat(wid);
- CHECK(5, 3, e, 9, 0, "wave tx repeat");
+ if (e < 14) CHECK(5, 3, e, 9, 0, "wave tx repeat");
+ else CHECK(5, 3, e, 19, 0, "wave tx repeat");
oc = t5_count;
time_sleep(5.05);
@@ -379,7 +380,8 @@ To the lascivious pleasing of a lute.\n\
wid = wave_create();
e = wave_send_once(wid);
- CHECK(5, 8, e, 6811, 0, "wave tx start");
+ if (e < 6964) CHECK(5, 8, e, 6811, 0, "wave tx start");
+ else CHECK(5, 8, e, 7116, 0, "wave tx start");
oc = t5_count;
time_sleep(3);
@@ -419,10 +421,12 @@ To the lascivious pleasing of a lute.\n\
CHECK(5, 18, c, 12000, 0, "wave get max pulses");
c = wave_get_cbs();
- CHECK(5, 19, c, 6810, 0, "wave get cbs");
+ if (c < 6963) CHECK(5, 19, c, 6810, 0, "wave get cbs");
+ else CHECK(5, 19, c, 7115, 0, "wave get cbs");
c = wave_get_high_cbs();
- CHECK(5, 20, c, 6810, 0, "wave get high cbs");
+ if (c < 6963) CHECK(5, 20, c, 6810, 0, "wave get high cbs");
+ else CHECK(5, 20, c, 7115, 0, "wave get high cbs");
c = wave_get_max_cbs();
CHECK(5, 21, c, 25016, 0, "wave get max cbs");
diff --git a/x_pigpiod_if2.c b/x_pigpiod_if2.c
index 5e18469..8747c1a 100644
--- a/x_pigpiod_if2.c
+++ b/x_pigpiod_if2.c
@@ -1,5 +1,5 @@
/*
-gcc -o x_pigpiod_if2 x_pigpiod_if2.c -lpigpiod_if2 -lpthread
+gcc -Wall -pthread -o x_pigpiod_if2 x_pigpiod_if2.c -lpigpiod_if2
./x_pigpiod_if2
*** WARNING ************************************************
@@ -42,7 +42,7 @@ void CHECK(int t, int st, int got, int expect, int pc, char *desc)
void t0(int pi)
{
- printf("Version.\n");
+ printf("\nTesting pigpiod C I/F 2\n");
printf("pigpio version %d.\n", get_pigpio_version(pi));
@@ -364,7 +364,8 @@ To the lascivious pleasing of a lute.\n\
wid = wave_create(pi);
e = wave_send_repeat(pi, wid);
- CHECK(5, 3, e, 9, 0, "wave tx repeat");
+ if (e < 14) CHECK(5, 3, e, 9, 0, "wave tx repeat");
+ else CHECK(5, 3, e, 19, 0, "wave tx repeat");
oc = t5_count;
time_sleep(5.05);
@@ -383,7 +384,8 @@ To the lascivious pleasing of a lute.\n\
wid = wave_create(pi);
e = wave_send_once(pi, wid);
- CHECK(5, 8, e, 6811, 0, "wave tx start");
+ if (e < 6964) CHECK(5, 8, e, 6811, 0, "wave tx start");
+ else CHECK(5, 8, e, 7116, 0, "wave tx start");
oc = t5_count;
time_sleep(3);
@@ -423,10 +425,12 @@ To the lascivious pleasing of a lute.\n\
CHECK(5, 18, c, 12000, 0, "wave get max pulses");
c = wave_get_cbs(pi);
- CHECK(5, 19, c, 6810, 0, "wave get cbs");
+ if (c < 6963) CHECK(5, 19, c, 6810, 0, "wave get cbs");
+ else CHECK(5, 19, c, 7115, 0, "wave get cbs");
c = wave_get_high_cbs(pi);
- CHECK(5, 20, c, 6810, 0, "wave get high cbs");
+ if (c < 6963) CHECK(5, 20, c, 6810, 0, "wave get high cbs");
+ else CHECK(5, 20, c, 7115, 0, "wave get high cbs");
c = wave_get_max_cbs(pi);
CHECK(5, 21, c, 25016, 0, "wave get max cbs");
diff --git a/x_pigs b/x_pigs
index adaa1eb..1435493 100755
--- a/x_pigs
+++ b/x_pigs
@@ -19,7 +19,8 @@ GPIO=25
# of tests indicate a problem.
#
-echo "Testing pigs I/F"
+echo
+echo "Testing pigpio pigs"
s=$(pigs pigpv)
echo "pigpio version $s"
@@ -250,8 +251,13 @@ s=$(pigs wvag 16 0 5000000 0 16 5000000)
if [[ $s = 310 ]]; then echo "WVAG ok"; else echo "WVAG fail ($s)"; fi
w=$(pigs wvcre)
if [[ $w -ge 0 ]]; then echo "WVCRE ok"; else echo "WVCRE fail ($s)"; fi
+
s=$(pigs wvtx $w)
-if [[ $s = 621 ]]; then echo "WVTX ok"; else echo "WVTX fail ($s)"; fi
+if [[ ($s = 621) || ($s = 1137) ]]
+then echo "WVTX ok"
+else echo "WVTX fail ($s)"
+fi
+
s=$(pigs wvbsy)
if [[ $s = 1 ]]; then echo "WVBSY-a ok"; else echo "WVBSY-a fail ($s)"; fi
sleep 1
@@ -262,7 +268,11 @@ if [[ $s = "" ]]; then echo "WVHLT ok"; else echo "WVHLT fail ($s)"; fi
s=$(pigs wvbsy)
if [[ $s = 0 ]]; then echo "WVBSY-c ok"; else echo "WVBSY-c fail ($s)"; fi
s=$(pigs wvtxr $w)
-if [[ $s = 621 ]]; then echo "WVTXR ok"; else echo "WVTXR fail ($s)"; fi
+if [[ ($s = 621) || ($s = 1137) ]]
+then echo "WVTXR ok"
+else echo "WVTXR fail ($s)"
+fi
+
s=$(pigs wvbsy)
if [[ $s = 1 ]]; then echo "WVBSY-d ok"; else echo "WVBSY-d fail ($s)"; fi
s=$(pigs wvhlt)
@@ -271,7 +281,11 @@ s=$(pigs wvbsy)
if [[ $s = 0 ]]; then echo "WVBSY-e ok"; else echo "WVBSY-e fail ($s)"; fi
s=$(pigs wvsc 0)
-if [[ $s = 620 ]]; then echo "WVSC-a ok"; else echo "WVSC-a fail ($s)"; fi
+if [[ ($s = 620) || ($s = 933) ]]
+then echo "WVSC-a ok"
+else echo "WVSC-a fail ($s)"
+fi
+
s=$(pigs wvsc 1)
if [[ $s -ge 620 ]]; then echo "WVSC-b ok"; else echo "WVSC-b fail ($s)"; fi
s=$(pigs wvsc 2)
diff --git a/x_pipe b/x_pipe
index 4b39afc..b74f523 100755
--- a/x_pipe
+++ b/x_pipe
@@ -18,7 +18,8 @@ GPIO=25
# of tests indicate a problem.
#
-echo "Testing pipe I/F"
+echo
+echo "Testing pigpio pipe I/F"
echo "pigpv" >/dev/pigpio
read -t 1 s /dev/pigpio
read -t 1 s /dev/pigpio
read -t 1 s /dev/pigpio
read -t 1 s /dev/pigpio
read -t 1 s /dev/pigpio
read -t 1 s /dev/pigpio
read -t 1 s