summaryrefslogtreecommitdiffstats
path: root/tools/testlibraw.c
diff options
context:
space:
mode:
authorGravatar aeb 2001-06-08 00:31:12 +0000
committerGravatar aeb 2001-06-08 00:31:12 +0000
commit135babee19a43abe7fb48cddf334473de0322643 (patch)
tree91d9da667ace98f196a175912a9d68766800c2e2 /tools/testlibraw.c
parentdebian: Remove a now useless substvar. (diff)
Moved testlibraw.c from src to tools directory.
Added sendiso and dumpiso programs in tools directory. Added man pages for sendiso and dumpiso in doc directory. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@66 53a565d1-3bb7-0310-b661-cf11e63c67ab
Diffstat (limited to 'tools/testlibraw.c')
-rw-r--r--tools/testlibraw.c171
1 files changed, 171 insertions, 0 deletions
diff --git a/tools/testlibraw.c b/tools/testlibraw.c
new file mode 100644
index 0000000..21c2de2
--- /dev/null
+++ b/tools/testlibraw.c
@@ -0,0 +1,171 @@
+/*
+ * libraw1394 - library for raw access to the 1394 bus with the Linux subsystem.
+ *
+ * Copyright (C) 1999,2000 Andreas Bombe
+ *
+ * This library is licensed under the GNU Lesser General Public License (LGPL),
+ * version 2.1 or later. See the file COPYING.LIB in the distribution for
+ * details.
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/poll.h>
+
+#include "../src/raw1394.h"
+#include "../src/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(raw1394handle_t handle, unsigned long tag,
+ raw1394_errcode_t errcode)
+{
+ int err = raw1394_errcode_to_errno(errcode);
+
+ if (err) {
+ printf("failed with error: %s\n", strerror(err));
+ } else {
+ printf("completed with value 0x%08x\n", buffer);
+ }
+
+ return 0;
+}
+
+int my_fcp_handler(raw1394handle_t handle, nodeid_t nodeid, int response,
+ size_t length, unsigned char *data)
+{
+ printf("got fcp %s from node %d of %d bytes:",
+ (response ? "response" : "command"), nodeid & 0x3f, length);
+
+ while (length) {
+ printf(" %02x", *data);
+ data++;
+ length--;
+ }
+
+ printf("\n");
+
+ 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;
+
+ struct pollfd pfd;
+ unsigned char fcp_test[] = { 0x1, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
+
+ handle = raw1394_new_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, IRM is %d\n",
+ raw1394_get_nodecount(handle),
+ raw1394_get_local_id(handle) & 0x3f,
+ raw1394_get_irm_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) {
+ perror("failed with error");
+ } else {
+ printf("completed with value 0x%08x\n", buffer);
+ }
+ }
+
+ printf("\ntesting FCP monitoring on local node\n");
+ raw1394_set_fcp_handler(handle, my_fcp_handler);
+ raw1394_start_fcp_listen(handle);
+ raw1394_write(handle, raw1394_get_local_id(handle),
+ CSR_REGISTER_BASE + CSR_FCP_COMMAND, sizeof(fcp_test),
+ (quadlet_t *)fcp_test);
+ raw1394_write(handle, raw1394_get_local_id(handle),
+ CSR_REGISTER_BASE + CSR_FCP_RESPONSE, sizeof(fcp_test),
+ (quadlet_t *)fcp_test);
+
+ printf("\npolling for leftover messages\n");
+ pfd.fd = raw1394_get_fd(handle);
+ pfd.events = POLLIN;
+ pfd.revents = 0;
+ while (1) {
+ retval = poll(&pfd, 1, 10);
+ if (retval < 1) break;
+ raw1394_loop_iterate(handle);
+ }
+
+ if (retval < 0) perror("poll failed");
+ exit(0);
+}