# HG changeset patch # User Paul Boddie # Date 1360603989 0 # Node ID f40addd6c8cd5694c8b5575f0b636afa53180fc1 # Parent 592b63226b52a188e66888fa87c476be8c5f9218 Fixed interrupt detection by testing for INT being low, not high. Removed various verbose diagnostic statements. Added a signal handler to attempt a clean shutdown when the program is interrupted. diff -r 592b63226b52 -r f40addd6c8cd test.c --- a/test.c Mon Feb 11 16:48:30 2013 +0000 +++ b/test.c Mon Feb 11 17:33:09 2013 +0000 @@ -17,6 +17,8 @@ #include #include #include +#include +#include /* Pin assignments: * @@ -252,11 +254,20 @@ return !(result & MAX_HCTL_SAMPLEBUS); } +void shutdown(int signum) +{ + printf("Closing...\n"); + ubb_close(0); + exit(1); +} + int main(int argc, char *argv[]) { - uint8_t status = 0, revision = 0, hrsl = 0; + uint8_t status = 0, revision = 0; uint16_t count; + signal(SIGINT, &shutdown); + if (ubb_open(0) < 0) { perror("ubb_open"); return 1; @@ -299,15 +310,12 @@ printf("Setting mode...\n"); status = max_write(MAX_REG_MODE, MAX_MODE_HOST | MAX_MODE_SEPIRQ_OFF | MAX_MODE_DMPULLDN | MAX_MODE_DPPULLDN); - printf("Status = %x\n", status); printf("Setting INT signalling...\n"); status = max_write(MAX_REG_CPUCTL, MAX_CPUCTL_IE); - printf("Status = %x\n", status); printf("Setting connection signalling...\n"); status = max_write(MAX_REG_HIEN, MAX_HIEN_CONDETIE); - printf("Status = %x\n", status); /* Check various registers. */ @@ -323,26 +331,22 @@ printf("Reading...\n"); revision = max_read(MAX_REG_REVISION, &status); - printf("Status = %x\n", status); printf("Revision = %x\n", revision); - for (count = 0; count < 10; count++) + for (count = 0; count <= 65535; count++) { - printf("INT? %d\n", PIN(MAX_INT)); - printf("Status = %x\n", status); - - if (PIN(MAX_INT)) + if (!PIN(MAX_INT)) { - if (status & (MAX_HIRQ_SUSDNIRQ | MAX_HIRQ_CONDETIRQ)) - { - printf("HRSL...\n"); - hrsl = max_read(MAX_REG_HRSL, &status); - printf("Status = %x\n", status); - printf("HRSL = %x\n", hrsl); - } + if (status & MAX_HIRQ_CONDETIRQ) + printf("Device connected.\n"); + if (status & MAX_HIRQ_SUSDNIRQ) + printf("Suspend done.\n"); + if (status & MAX_HIRQ_BUSEVENTIRQ) + printf("Bus event.\n"); + if (status & MAX_HIRQ_RCVDAVIRQ) + printf("Data received.\n"); - printf("Clearing status...\n"); - max_write(MAX_REG_HIRQ, status & (MAX_HIRQ_SUSDNIRQ | MAX_HIRQ_SNDBAVIRQ | MAX_HIRQ_BUSEVENTIRQ)); + max_write(MAX_REG_HIRQ, status); } }