summaryrefslogtreecommitdiffstats
path: root/apps/plugins/lib/kbd_helper.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/lib/kbd_helper.c')
-rw-r--r--apps/plugins/lib/kbd_helper.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/apps/plugins/lib/kbd_helper.c b/apps/plugins/lib/kbd_helper.c
new file mode 100644
index 0000000000..00191c3532
--- /dev/null
+++ b/apps/plugins/lib/kbd_helper.c
@@ -0,0 +1,63 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2020 William Wilgus
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include "plugin.h"
+#include "kbd_helper.h"
+
+/* USAGE:
+ unsigned short kbd[64];
+ unsigned short *kbd_p = kbd;
+ if (!kbd_create_layout("ABCD1234\n", kbd, sizeof(kbd)))
+ kbd_p = NULL;
+
+ rb->kbd_input(buf,sizeof(buf), kbd_p);
+*/
+
+/* create a custom keyboard layout for kbd_input
+ * success returns size of buffer used
+ * failure returns 0
+*/
+int kbd_create_layout(char *layout, unsigned short *buf, int bufsz)
+{
+ unsigned short *pbuf;
+ const unsigned char *p = layout;
+ int len = 0;
+ pbuf = buf;
+ while (*p && (pbuf - buf + 8) < bufsz)
+ {
+ p = rb->utf8decode(p, &pbuf[len+1]);
+ if (pbuf[len+1] == '\n')
+ {
+ *pbuf = len;
+ pbuf += len+1;
+ len = 0;
+ }
+ else
+ len++;
+ }
+
+ if (len+1 < bufsz)
+ {
+ *pbuf = len;
+ pbuf[len+1] = 0xFEFF; /* mark end of characters */
+ return len + 1;
+ }
+ return 0;
+}