summaryrefslogtreecommitdiff
path: root/x_pigpio.c
diff options
context:
space:
mode:
authorjoan <joan@abyz.me.uk>2014-06-12 18:31:00 +0100
committerjoan <joan@abyz.me.uk>2014-06-12 18:31:00 +0100
commita99255ed9ab6f53498a1ef4030ac2ec81f4294fb (patch)
tree5d80a994b7c68ab8eea3477a24f57206727702ce /x_pigpio.c
parent590274dc7fd148d0edd74e329f926217ce161aad (diff)
V16
Diffstat (limited to 'x_pigpio.c')
-rw-r--r--x_pigpio.c223
1 files changed, 220 insertions, 3 deletions
diff --git a/x_pigpio.c b/x_pigpio.c
index c827a7b..b12092d 100644
--- a/x_pigpio.c
+++ b/x_pigpio.c
@@ -17,6 +17,7 @@ sudo ./x_pigpio
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
+#include <ctype.h>
#include "pigpio.h"
@@ -623,10 +624,214 @@ void t9()
CHECK(9, 4, e, 0, 0, "delete script");
}
+void ta()
+{
+ int h, b, e;
+ char *TEXT;
+ char text[2048];
+
+ printf("Serial link tests.\n");
+
+ /* this test needs RXD and TXD to be connected */
+
+ h = serOpen("/dev/ttyAMA0", 57600, 0);
+
+ CHECK(10, 1, h, 0, 0, "serial open");
+
+ b = serRead(h, text, sizeof(text)); /* flush buffer */
+
+ b = serDataAvailable(h);
+ CHECK(10, 2, b, 0, 0, "serial data available");
+
+ TEXT = "\
+To be, or not to be, that is the question-\
+Whether 'tis Nobler in the mind to suffer\
+The Slings and Arrows of outrageous Fortune,\
+Or to take Arms against a Sea of troubles,\
+";
+ e = serWrite(h, TEXT, strlen(TEXT));
+ CHECK(10, 3, e, 0, 0, "serial write");
+
+ e = serWriteByte(h, 0xAA);
+ e = serWriteByte(h, 0x55);
+ e = serWriteByte(h, 0x00);
+ e = serWriteByte(h, 0xFF);
+
+ CHECK(10, 4, e, 0, 0, "serial write byte");
+
+ time_sleep(0.1); /* allow time for transmission */
+
+ b = serDataAvailable(h);
+ CHECK(10, 5, b, strlen(TEXT)+4, 0, "serial data available");
+
+ b = serRead(h, text, strlen(TEXT));
+ CHECK(10, 6, b, strlen(TEXT), 0, "serial read");
+ if (b >= 0) text[b] = 0;
+ CHECK(10, 7, strcmp(TEXT, text), 0, 0, "serial read");
+
+ b = serReadByte(h);
+ CHECK(10, 8, b, 0xAA, 0, "serial read byte");
+
+ b = serReadByte(h);
+ CHECK(10, 9, b, 0x55, 0, "serial read byte");
+
+ b = serReadByte(h);
+ CHECK(10, 10, b, 0x00, 0, "serial read byte");
+
+ b = serReadByte(h);
+ CHECK(10, 11, b, 0xFF, 0, "serial read byte");
+
+ b = serDataAvailable(h);
+ CHECK(10, 12, b, 0, 0, "serial data availabe");
+
+ e = serClose(h);
+ CHECK(10, 13, e, 0, 0, "serial close");
+}
+
+void tb()
+{
+ int h, e, b, len;
+ char *exp;
+ char buf[128];
+
+ printf("SMBus / I2C tests.");
+
+ /* this test requires an ADXL345 on I2C bus 1 addr 0x53 */
+
+ h = i2cOpen(1, 0x53, 0);
+ CHECK(11, 1, h, 0, 0, "i2cOpen");
+
+ e = i2cWriteDevice(h, "\x00", 1); /* move to known register */
+ CHECK(11, 2, e, 0, 0, "i2cWriteDevice");
+
+ b = i2cReadDevice(h, buf, 1);
+ CHECK(11, 3, b, 1, 0, "i2cReadDevice");
+ CHECK(11, 4, buf[0], 0xE5, 0, "i2cReadDevice");
+
+ b = i2cReadByte(h);
+ CHECK(11, 5, b, 0xE5, 0, "i2cReadByte");
+
+ b = i2cReadByteData(h, 0);
+ CHECK(11, 6, b, 0xE5, 0, "i2cReadByteData");
+
+ b = i2cReadByteData(h, 48);
+ CHECK(11, 7, b, 2, 0, "i2cReadByteData");
+
+ exp = "\x1D[aBcDeFgHjKM]";
+ len = strlen(exp);
+
+ e = i2cWriteDevice(h, exp, len);
+ CHECK(11, 8, e, 0, 0, "i2cWriteDevice");
+
+ e = i2cWriteDevice(h, "\x1D", 1);
+ b = i2cReadDevice(h, buf, len-1);
+ CHECK(11, 9, b, len-1, 0, "i2cReadDevice");
+ CHECK(11, 10, strncmp(buf, exp+1, len-1), 0, 0, "i2cReadDevice");
+
+ if (strncmp(buf, exp+1, len-1))
+ printf("got [%.*s] expected [%.*s]\n", len-1, buf, len-1, exp+1);
+
+ e = i2cWriteByteData(h, 0x1d, 0xAA);
+ CHECK(11, 11, e, 0, 0, "i2cWriteByteData");
+
+ b = i2cReadByteData(h, 0x1d);
+ CHECK(11, 12, b, 0xAA, 0, "i2cReadByteData");
+
+ e = i2cWriteByteData(h, 0x1d, 0x55);
+ CHECK(11, 13, e, 0, 0, "i2cWriteByteData");
+
+ b = i2cReadByteData(h, 0x1d);
+ CHECK(11, 14, b, 0x55, 0, "i2cReadByteData");
+
+ exp = "[1234567890#]";
+ len = strlen(exp);
+
+ e = i2cWriteBlockData(h, 0x1C, exp, len);
+ CHECK(11, 15, e, 0, 0, "i2c writeBlockData");
+
+ e = i2cWriteDevice(h, "\x1D", 1);
+ b = i2cReadDevice(h, buf, len);
+ CHECK(11, 16, b, len, 0, "i2cReadDevice");
+ CHECK(11, 17, strncmp(buf, exp, len), 0, 0, "i2cReadDevice");
+
+ if (strncmp(buf, exp, len))
+ printf("got [%.*s] expected [%.*s]\n", len, buf, len, exp);
+
+ b = i2cReadI2CBlockData(h, 0x1D, buf, len);
+ CHECK(11, 18, b, len, 0, "i2cReadI2CBlockData");
+ CHECK(11, 19, strncmp(buf, exp, len), 0, 0, "i2cReadI2CBlockData");
+
+ if (strncmp(buf, exp, len))
+ printf("got [%.*s] expected [%.*s]\n", len, buf, len, exp);
+
+ exp = "(-+=;:,<>!%)";
+ len = strlen(exp);
+
+ e = i2cWriteI2CBlockData(h, 0x1D, exp, len);
+ CHECK(11, 20, e, 0, 0, "i2cWriteI2CBlockData");
+
+ b = i2cReadI2CBlockData(h, 0x1D, buf, len);
+ CHECK(11, 21, b, len, 0, "i2cReadI2CBlockData");
+ CHECK(11, 22, strncmp(buf, exp, len), 0, 0, "i2cReadI2CBlockData");
+
+ if (strncmp(buf, exp, len))
+ printf("got [%.*s] expected [%.*s]\n", len, buf, len, exp);
+
+ e = i2cClose(h);
+ CHECK(11, 23, e, 0, 0, "i2cClose");
+}
+
+void tc()
+{
+ int h, x, b, e;
+ char txBuf[8], rxBuf[8];
+
+ printf("SPI tests.");
+
+ /* this test requires a MCP3202 on SPI channel 1 */
+
+ h = spiOpen(1, 50000, 0);
+ CHECK(12, 1, h, 0, 0, "spiOpen");
+
+ sprintf(txBuf, "\x01\x80");
+
+ for (x=0; x<5; x++)
+ {
+ b = spiXfer(h, txBuf, rxBuf, 3);
+ CHECK(12, 2, b, 3, 0, "spiXfer");
+ if (b == 3)
+ {
+ time_sleep(1.0);
+ printf("%d ", ((rxBuf[1]&0x0F)*256)|rxBuf[2]);
+ }
+ }
+
+ e = spiClose(h);
+ CHECK(12, 99, e, 0, 0, "spiClose");
+}
+
int main(int argc, char *argv[])
{
- int t, status;
- void (*test[])(void) = {t0, t1, t2, t3, t4, t5, t6, t7, t8, t9};
+ int i, t, c, status;
+
+ char test[64];
+
+ if (argc > 1)
+ {
+ t = 0;
+
+ for (i=0; i<strlen(argv[1]); i++)
+ {
+ c = tolower(argv[1][i]);
+
+ if (!strchr(test, c))
+ {
+ test[t++] = c;
+ test[t] = 0;
+ }
+ }
+ }
+ else strcat(test, "0123456789");
status = gpioInitialise();
@@ -636,7 +841,19 @@ int main(int argc, char *argv[])
return 1;
}
- for (t=0; t<10; t++) test[t]();
+ if (strchr(test, '0')) t0();
+ if (strchr(test, '1')) t1();
+ if (strchr(test, '2')) t2();
+ if (strchr(test, '3')) t3();
+ if (strchr(test, '4')) t4();
+ if (strchr(test, '5')) t5();
+ if (strchr(test, '6')) t6();
+ if (strchr(test, '7')) t7();
+ if (strchr(test, '8')) t8();
+ if (strchr(test, '9')) t9();
+ if (strchr(test, 'a')) ta();
+ if (strchr(test, 'b')) tb();
+ if (strchr(test, 'c')) tc();
gpioTerminate();