#ifndef _UDI_H_
#define _UDI_H_
-// Use the core acess file to use the specific size types (plus va_arg)
-#include <acess.h>
+#include <stdint.h>
+#include <stdarg.h>
+typedef int8_t udi_sbit8_t; /* signed 8-bit: -2^7..2^7-1 */
+typedef int16_t udi_sbit16_t; /* signed 16-bit: -2^15..2^15-1 */
+typedef int32_t udi_sbit32_t; /* signed 32-bit: -2^31..2^31-1 */
+typedef uint8_t udi_ubit8_t; /* unsigned 8-bit: 0..28-1 */
+typedef uint16_t udi_ubit16_t; /* unsigned 16-bit: 0..216-1 */
+typedef uint32_t udi_ubit32_t; /* unsigned 32-bit: 0..232-1 */
+
+#ifndef NULL
+# define NULL ((void*)0)
+#endif
+
+#if UDI_ABI_is_ia32
#include "udi/arch/x86.h"
+#else
+#error "Unknown UDI ABI"
+#endif
/**
* \name Values and Flags for udi_status_t
*/
+typedef struct udi_init_s udi_init_t;
+typedef struct udi_primary_init_s udi_primary_init_t;
+typedef struct udi_secondary_init_s udi_secondary_init_t;
+typedef struct udi_ops_init_s udi_ops_init_t;
+typedef struct udi_cb_init_s udi_cb_init_t;
+typedef struct udi_cb_select_s udi_cb_select_t;
+typedef struct udi_gcb_init_s udi_gcb_init_t;
+
+typedef struct udi_init_context_s udi_init_context_t;
+typedef struct udi_limits_s udi_limits_t;
+typedef struct udi_chan_context_s udi_chan_context_t;
+typedef struct udi_child_chan_context_s udi_child_chan_context_t;
+
+typedef void udi_op_t(void);
+typedef udi_op_t * const udi_ops_vector_t;
+
// === INCLUDE SUB-SECTIONS ===
#include "udi/cb.h" // Control Blocks
+#include "udi/time.h" // Timer Services
#include "udi/log.h" // Logging
#include "udi/attr.h" // Attributes
#include "udi/strmem.h" // String/Memory
+#include "udi/queues.h" // Queues
#include "udi/buf.h" // Buffers
#include "udi/mem.h" // Memory Management
#include "udi/imc.h" // Inter-module Communication