summaryrefslogtreecommitdiffstats
path: root/src/raw1394.h
diff options
context:
space:
mode:
authorGravatar abombe 1999-12-02 23:07:38 +0000
committerGravatar abombe 1999-12-02 23:07:38 +0000
commit0f5ef10baaba0890f7e9bed6545e0614b65e7884 (patch)
tree115fc38dea3113e5937f33fba540764e0802c80b /src/raw1394.h
Initial revision
git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@1 53a565d1-3bb7-0310-b661-cf11e63c67ab
Diffstat (limited to 'src/raw1394.h')
-rw-r--r--src/raw1394.h132
1 files changed, 132 insertions, 0 deletions
diff --git a/src/raw1394.h b/src/raw1394.h
new file mode 100644
index 0000000..de9dcb7
--- /dev/null
+++ b/src/raw1394.h
@@ -0,0 +1,132 @@
+
+#ifndef _LIBRAW1394_RAW1394_H
+#define _LIBRAW1394_RAW1394_H
+
+#include <sys/types.h>
+typedef u_int32_t quadlet_t;
+typedef u_int64_t octlet_t;
+typedef u_int64_t nodeaddr_t;
+typedef u_int16_t nodeid_t;
+
+
+typedef struct raw1394_handle *raw1394handle_t;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Required as initialization. One handle can control one port, it is possible
+ * to use multiple handles. raw1394_get_handle returns NULL for failure,
+ * raw1394_destroy_handle accepts NULL. If raw1394_get_handle returns NULL and
+ * errno is 0, this version of libraw1394 is incompatible with the kernel.
+ */
+raw1394handle_t raw1394_get_handle(void);
+void raw1394_destroy_handle(raw1394handle_t handle);
+
+/*
+ * Get the fd of this handle to select()/poll() on it. Don't try to mess around
+ * with it any other way. Valid only after the handle got attached to a port.
+ */
+int raw1394_get_fd(raw1394handle_t handle);
+
+unsigned int raw1394_get_generation(raw1394handle_t handle);
+nodeid_t raw1394_get_local_id(raw1394handle_t handle);
+
+/* Get number of nodes on bus. */
+int raw1394_get_nodecount(raw1394handle_t handle);
+
+/*
+ * Returns number of available ports (port == one IEEE 1394 card or onboard
+ * chip). A maximum number of maxport raw1394_portinfos will be filled out at
+ * *pinf, zero is valid if you're only interested in the number of ports (which
+ * is returned).
+ */
+struct raw1394_portinfo {
+ int nodes;
+ char name[32];
+};
+
+int raw1394_get_port_info(raw1394handle_t handle, struct raw1394_portinfo *pinf,
+ int maxports);
+
+/*
+ * Attach handle to port (counted from zero). Returns zero for success or -1
+ * for failure. If in the case of failure errno is set to ESTALE the generation
+ * number has changed and you should reget the port info.
+ */
+int raw1394_set_port(raw1394handle_t handle, int port);
+
+
+/*
+ * Get one new message through handle and process it. See below for handler
+ * registering functions. This function will return -1 for an error or the
+ * return value of the handler which got executed. Default handlers always
+ * return zero.
+ */
+int raw1394_loop_iterate(raw1394handle_t handle);
+
+/*
+ * Set the handler that will be called when a bus reset message is encountered.
+ * The default action is to do nothing. Returns old handler.
+ */
+typedef int (*bus_reset_handler_t)(raw1394handle_t);
+bus_reset_handler_t raw1394_set_bus_reset_handler(raw1394handle_t handle,
+ bus_reset_handler_t new);
+
+/*
+ * Set the handler that will be called when an async read/write/lock returns.
+ * The default action is to call the callback in the raw1394_reqhandle pointed
+ * to by tag. Returns old handler.
+ */
+typedef int (*tag_handler_t)(raw1394handle_t, unsigned long tag, int errcode);
+tag_handler_t raw1394_set_tag_handler(raw1394handle_t handle,
+ tag_handler_t new);
+
+/*
+ * Set the handler that will be called when an iso packet arrives (data points
+ * to the iso packet header). The default action is to do nothing. Returns old
+ * handler.
+ *
+ * Iso receive is not implemented yet.
+ */
+typedef int (*iso_handler_t)(raw1394handle_t, int channel, size_t length,
+ quadlet_t *data);
+iso_handler_t raw1394_set_iso_handler(raw1394handle_t handle,
+ iso_handler_t new);
+
+
+/*
+ * This is the general request handle. It is used by the default tag handler
+ * when a request completes, it calls the callback and passes it the data
+ * pointer and the error code of the request.
+ */
+typedef int (*req_callback_t)(raw1394handle_t, void *data, int errcode);
+struct raw1394_reqhandle {
+ req_callback_t callback;
+ void *data;
+};
+
+/*
+ * Passes custom tag. Use pointer to raw1394_reqhandle if you use the standard
+ * tag handler.
+ */
+int raw1394_start_read(struct raw1394_handle *handle, nodeid_t node,
+ nodeaddr_t addr, size_t length, quadlet_t *buffer,
+ unsigned long tag);
+
+/*
+ * This does the complete transaction and will return when it's finished. It
+ * will call raw1394_loop_iterate() as often as necessary, return values of
+ * handlers called will be lost.
+ */
+int raw1394_read(struct raw1394_handle *handle, nodeid_t node, nodeaddr_t addr,
+ size_t length, quadlet_t *buffer);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBRAW1394_RAW1394_H */