113 lines
2.9 KiB
C
Executable File
113 lines
2.9 KiB
C
Executable File
// WiringPi test program: I2C functions (need PCF8574)
|
|
// Compile: gcc -Wall wiringpi_i2c_test1.c -o wiringpi_i2c_test1 -lwiringPi
|
|
|
|
#include "wpi_test.h"
|
|
#include "pcf8574.h"
|
|
#include "wiringPiI2C.h"
|
|
|
|
const int pinBase = 1020;
|
|
const int i2cAdress = 0x20;
|
|
|
|
int ShowAll() {
|
|
int in;
|
|
int value = 0;
|
|
|
|
printf("pin: 0 1 2 3 4 5 6 7\nval: ");
|
|
for (int pin=0; pin<=7; ++pin) {
|
|
in = digitalRead(pinBase + pin);
|
|
printf("%d ", in);
|
|
if(in==HIGH) { value |= (0x01<<pin); }
|
|
}
|
|
printf(" = 0x%02X\n", value);
|
|
return value;
|
|
}
|
|
|
|
|
|
void testPin(const char* msg, int fd, int pin , int value) {
|
|
printf("%s:\n", msg);
|
|
int in = digitalRead(pinBase + pin);
|
|
CheckSame("digitalRead", in, value);
|
|
|
|
int expect = HIGH==value ? (0x1<<pin) : 0;
|
|
int pinmask = 0x01<<pin;
|
|
int i2cread = wiringPiI2CRead(fd);
|
|
CheckSame("wiringPiI2CRead", i2cread & pinmask, expect);
|
|
//printf("Value = 0x%X\n",i2cread);
|
|
|
|
uint8_t i2cvalue = HIGH==value ? 0x00 : 0xFF;
|
|
int result = wiringPiI2CRawRead(fd, &i2cvalue, 1);
|
|
CheckSame("wiringPiI2CRawRead result", result, 1);
|
|
CheckSame("wiringPiI2CRawRead", i2cvalue & pinmask, expect);
|
|
//printf("Value = 0x%X\n",i2cvalue);
|
|
}
|
|
|
|
|
|
int main (void) {
|
|
int major, minor;
|
|
|
|
wiringPiVersion(&major, &minor);
|
|
printf("Testing I2C functions with PCF8574 (WiringPi %d.%d)\n",major, minor);
|
|
printf("-------------------------------------------------\n\n");
|
|
|
|
|
|
int ret = pcf8574Setup (pinBase, i2cAdress);
|
|
if (ret!=1) {
|
|
FailAndExitWithErrno("pcf8574Setup", ret);
|
|
}
|
|
int fd = wiringPiI2CSetup (i2cAdress);
|
|
if (fd<=0) {
|
|
FailAndExitWithErrno("wiringPiI2CSetup", fd);
|
|
}
|
|
CheckSame("I2C fd", fd, 4);
|
|
|
|
ShowAll();
|
|
|
|
int pin = 3;
|
|
testPin("Test pin 3 high", fd, pin , HIGH);
|
|
testPin("Test pin 4 high", fd, pin+1, HIGH);
|
|
|
|
digitalWrite(pinBase + pin, LOW);
|
|
testPin("Test pin 3 low", fd, pin , LOW);
|
|
testPin("Test pin 4 high", fd, pin+1, HIGH);
|
|
|
|
ShowAll();
|
|
|
|
digitalWrite(pinBase + pin, HIGH);
|
|
testPin("Test pin 3 high", fd, pin , HIGH);
|
|
testPin("Test pin 4 high", fd, pin+1, HIGH);
|
|
|
|
ShowAll();
|
|
|
|
printf("\nwiringPiI2CReadReg8:\n");
|
|
int i2cin, expect;
|
|
i2cin = wiringPiI2CReadReg8(fd, 0x00);
|
|
expect = ShowAll();
|
|
CheckSame("all low wiringPiI2CReadReg8", i2cin, expect);
|
|
|
|
i2cin = wiringPiI2CReadReg8(fd, 0xFF);
|
|
expect =ShowAll();
|
|
CheckSame("all high wiringPiI2CReadReg8", i2cin, expect);
|
|
|
|
printf("\nwiringPiI2CReadBlockData:\n");
|
|
uint8_t value;
|
|
int result;
|
|
value = 0xFF;
|
|
result = wiringPiI2CReadBlockData(fd, 0x00, &value, 1);
|
|
CheckSame("wiringPiI2CReadBlockData result", result, 1);
|
|
expect = ShowAll();
|
|
CheckSame("all high wiringPiI2CReadBlockData", value, expect);
|
|
|
|
printf("\n");
|
|
value = 0x00;
|
|
result = wiringPiI2CReadBlockData(fd, 0xFF, &value, 1);
|
|
CheckSame("wiringPiI2CReadBlockData result", result, 1);
|
|
expect = ShowAll();
|
|
CheckSame("all low wiringPiI2CReadBlockData", value, expect);
|
|
|
|
return UnitTestState();
|
|
}
|
|
|
|
|
|
|
|
|