diff options
| author | 1999-12-02 23:07:38 +0000 | |
|---|---|---|
| committer | 1999-12-02 23:07:38 +0000 | |
| commit | 0f5ef10baaba0890f7e9bed6545e0614b65e7884 (patch) | |
| tree | 115fc38dea3113e5937f33fba540764e0802c80b /src/testlibraw.c | |
Initial revision
git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@1 53a565d1-3bb7-0310-b661-cf11e63c67ab
Diffstat (limited to 'src/testlibraw.c')
| -rw-r--r-- | src/testlibraw.c | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/testlibraw.c b/src/testlibraw.c new file mode 100644 index 0000000..59f0ada --- /dev/null +++ b/src/testlibraw.c @@ -0,0 +1,119 @@ + +#include <stdio.h> +#include <errno.h> + +#include "raw1394.h" +#include "csr.h" + + +#define TESTADDR (CSR_REGISTER_BASE + CSR_CYCLE_TIME) + +const char not_compatible[] = "\ +This libraw1394 does not work with your version of Linux. You need a different +version that matches your kernel (see kernel help text for the raw1394 option to +find out which is the correct version).\n"; + +const char not_loaded[] = "\ +This probably means that you don't have raw1394 support in the kernel or that +you haven't loaded the raw1394 module.\n"; + + +quadlet_t buffer; + +int my_tag_handler(struct raw1394_handle *handle, unsigned long tag, int error) +{ + if (error < 0) { + printf("completed with error %d\n", error); + } else { + printf("completed with 0x%08x, value 0x%08x\n", error, buffer); + } + + return 0; +} + + + +int main(int argc, char **argv) +{ + raw1394handle_t handle; + int i, numcards; + struct raw1394_portinfo pinf[16]; + + tag_handler_t std_handler; + int retval; + + + handle = raw1394_get_handle(); + + if (!handle) { + if (!errno) { + printf(not_compatible); + } else { + perror("couldn't get handle"); + printf(not_loaded); + } + exit(1); + } + + printf("successfully got handle\n"); + printf("current generation number: %d\n", raw1394_get_generation(handle)); + + numcards = raw1394_get_port_info(handle, pinf, 16); + if (numcards < 0) { + perror("couldn't get card info"); + exit(1); + } else { + printf("%d card(s) found\n", numcards); + } + + if (!numcards) { + exit(0); + } + + for (i = 0; i < numcards; i++) { + printf(" nodes on bus: %2d, card name: %s\n", pinf[i].nodes, + pinf[i].name); + } + + if (raw1394_set_port(handle, 0) < 0) { + perror("couldn't set port"); + exit(1); + } + + printf("using first card found: %d nodes on bus, local ID is %d\n", + raw1394_get_nodecount(handle), + raw1394_get_local_id(handle) & 0x3f); + + printf("\ndoing transactions with custom tag handler\n"); + std_handler = raw1394_set_tag_handler(handle, my_tag_handler); + for (i = 0; i < pinf[0].nodes; i++) { + printf("trying to send read request to node %d... ", i); + fflush(stdout); + buffer = 0; + + if (raw1394_start_read(handle, 0xffc0 | i, TESTADDR, 4, + &buffer, 0) < 0) { + perror("failed"); + continue; + } + raw1394_loop_iterate(handle); + } + + printf("\nusing standard tag handler and synchronous calls\n"); + raw1394_set_tag_handler(handle, std_handler); + for (i = 0; i < pinf[0].nodes; i++) { + printf("trying to read from node %d... ", i); + fflush(stdout); + buffer = 0; + + retval = raw1394_read(handle, 0xffc0 | i, TESTADDR, 4, &buffer); + if (retval < 0) { + printf("failed with error %d\n", retval); + } else { + printf("completed with 0x%08x, value 0x%08x\n", retval, + buffer); + } + } + + exit(0); +} |
