diff options
author | joan <joan@abyz.me.uk> | 2014-06-12 18:31:00 +0100 |
---|---|---|
committer | joan <joan@abyz.me.uk> | 2014-06-12 18:31:00 +0100 |
commit | a99255ed9ab6f53498a1ef4030ac2ec81f4294fb (patch) | |
tree | 5d80a994b7c68ab8eea3477a24f57206727702ce /x_pigpio.c | |
parent | 590274dc7fd148d0edd74e329f926217ce161aad (diff) |
V16
Diffstat (limited to 'x_pigpio.c')
-rw-r--r-- | x_pigpio.c | 223 |
1 files changed, 220 insertions, 3 deletions
@@ -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(); |