summaryrefslogtreecommitdiffstats
path: root/fire-pit
diff options
context:
space:
mode:
authorLibravatar bigfoot547 <[email protected]>2026-06-27 22:53:26 -0500
committerLibravatar bigfoot547 <[email protected]>2026-06-27 22:53:26 -0500
commit40724faccacf055cd9f9bba4615b9f930be9b76b (patch)
tree8df1806ef766f14a935e98ad1a04e47714f5f858 /fire-pit
initial commit
Diffstat (limited to 'fire-pit')
-rw-r--r--fire-pit/test.c49
-rw-r--r--fire-pit/test.h77
2 files changed, 126 insertions, 0 deletions
diff --git a/fire-pit/test.c b/fire-pit/test.c
new file mode 100644
index 0000000..822db4f
--- /dev/null
+++ b/fire-pit/test.c
@@ -0,0 +1,49 @@
+#include "test.h"
+
+static int identify_setup(struct et_test *test, void *work, int exi_channel)
+{
+ int *pexi_channel = work;
+ *pexi_channel = exi_channel;
+ return 1;
+}
+
+static int identify_tick(struct et_test *test, void *work)
+{
+ int exi_channel = *((int *)work);
+
+ EXI_Lock(exi_channel, EXI_DEVICE_0, NULL);
+}
+
+static et_status identify_finish(struct et_test *test, void *work)
+{
+
+}
+
+static const char *identify_translate(struct et_test *test, char *out, size_t outbuf_sz, et_status status)
+{
+
+}
+
+#define DEF_TEST(_flags, _name, _work_t, _setup, _tick, _finish, ...) { \
+ .flags = _flags, \
+ .name = _name, \
+ .work_size = sizeof(_work_t), \
+ .setup_f = _setup, \
+ .tick_f = _tick, \
+ .finish_f = _finish, \
+ __VA_ARGS__ \
+}
+
+#define msg_table priv_data[0]
+#define TEST_MSGS(_msg_table) .msg_table = _msg_table
+
+#define TEST_TRANSLATE_DEFAULT .trans_f = &et_translate_default,
+#define TEST_TRANSLATE(_t) .trans_f = _t,
+
+const struct et_test et_tests[] = {
+ DEF_TEST(ET_TEST_ESSENTIAL, "Identify_Gecko", int, identify_setup, identify_tick, identify_finish, TEST_TRANSLATE(identify_translate)),
+};
+
+
+const size_t et_ntests = sizeof(et_tests) / sizeof(et_tests[0]);
+
diff --git a/fire-pit/test.h b/fire-pit/test.h
new file mode 100644
index 0000000..c907530
--- /dev/null
+++ b/fire-pit/test.h
@@ -0,0 +1,77 @@
+#ifndef EXITEST_TEST_H_INCLUDED
+#define EXITEST_TEST_H_INCLUDED
+
+#include <gccore.h>
+
+struct et_test;
+
+typedef u32 et_status;
+
+/* Test passed. */
+#define ET_STATUS_PASS (et_status)0x00
+
+/* Test failed. */
+#define ET_STATUS_FAIL (et_status)0x01
+
+/* Test skipped or not applicable. */
+#define ET_STATUS_SKIP (et_status)0x02
+
+/* Internal error during testing. */
+#define ET_STATUS_ERROR (et_status)0x03
+
+#define ET_STATUS_MASK (et_status)0x03
+
+#define ET_STATUS_GET_BASE(_status) ((et_status)(_status) & ~((1u << ET_STATUS_ERRCODE_SHIFT) - 1))
+
+#define ET_STATUS_ERRCODE_SHIFT 2u
+#define ET_STATUS_ERRCODE_MASK (((1u << ET_STATUS_PRIVATE_SHIFT) - 1) & ~ET_STATUS_MASK)
+#define ET_STATUS_MAKE_ERRCODE(_code) (((et_status)(_code) << ET_STATUS_ERRCODE_SHIFT) & ET_STATUS_ERRCODE_MASK)
+#define ET_STATUS_GET_ERRCODE(_status) (((et_status)(_status) & ET_STATUS_ERRCODE_MASK) >> ET_STATUS_ERRCODE_SHIFT)
+
+#define ET_STATUS_PRIVATE_SHIFT 8u
+#define ET_STATUS_GET_PRIVATE(_status) ((et_status)(_status) >> ET_STATUS_PRIVATE_SHIFT)
+#define ET_STATUS_MAKE_PRIVATE(_exp) ((et_status)(_exp) << ET_STATUS_PRIVATE_SHIFT)
+#define ET_STATUS_PRIVATE_MASK (ET_STATUS_MAKE_PRIVATE(~0u))
+
+typedef enum {
+ ET_TEST_INTERACTIVE = 0x0001u,
+ ET_TEST_ESSENTIAL = 0x0002u
+} et_test_flags;
+
+typedef enum {
+ ET_ERRCODE_NONE = ET_STATUS_MAKE_ERRCODE(0),
+ ET_ERRCODE_BAD_ALLOC = ET_STATUS_MAKE_ERRCODE(0x01u),
+
+ /* Error code is test-specific */
+ ET_ERRCODE_PRIVATE = ET_STATUS_MAKE_ERRCODE(~0u),
+} et_status_errcode;
+
+/* returns 1 to continue testing, 0 when test is complete (call finish for status) */
+typedef int (et_test_setup_proc)(struct et_test *test, void *work, int exi_channel);
+typedef int (et_test_tick_proc)(struct et_test *test, void *work);
+typedef et_status (et_test_finish_proc)(struct et_test *test, void *work);
+
+/* translates a status code into a readable message. The returned pointer is a static string, and may not have all the information
+ * as if a writeable buffer is passed into the function.
+ *
+ * Tests: do not write into out if outbuf_sz is too small. Try to keep the max message length within 256 bytes. */
+typedef const char *(et_test_translate_proc)(struct et_test *test, char *out, size_t outbuf_sz, et_status status);
+
+struct et_test {
+ et_test_flags flags;
+ const char *name;
+ size_t work_size;
+
+ et_test_setup_proc *setup_f;
+ et_test_tick_proc *tick_f;
+ et_test_finish_proc *finish_f;
+ et_test_translate_proc *trans_f;
+
+ const void *priv_data[4];
+};
+
+/* Array of tests. */
+extern const struct et_test et_tests[];
+extern const size_t et_ntests;
+
+#endif /* include guard */