mirror of
https://gitea.tendokyu.moe/Hay1tsme/segatools.git
synced 2026-05-06 05:15:42 -05:00
aimeio-vfd: Add VFD text forwarding and state callbacks to AIME IO (#90)
## Summary - feat(aimeio): add VFD text forwarding API and wire through DLL/VFD backend - feat(aimeio): add VFD state callback and export symbols across hooks - refactor(aimeio): rename VFD callbacks and align VFD parsing - feat(aimeio): extend VFD state fields for richer reporting ## Description This PR expands the AIME IO VFD interface by adding text forwarding and a VFD state callback, then wires them through the AIME DLL and VFD backend. It also renames VFD callbacks to align parsing behavior, updates all hook exports accordingly, and extends VFD state fields to carry more detailed state data. Reviewed-on: https://gitea.tendokyu.moe/TeamTofuShop/segatools/pulls/90 Co-authored-by: グローランプ <130208311+Gl0w1amp@users.noreply.github.com> Co-committed-by: グローランプ <130208311+Gl0w1amp@users.noreply.github.com>
This commit is contained in:
parent
ff28d4ff09
commit
bf8f3dd6f9
|
|
@ -218,7 +218,7 @@ static HRESULT aime_io_generate_aime(
|
|||
|
||||
uint16_t aime_io_get_api_version(void)
|
||||
{
|
||||
return 0x0100;
|
||||
return 0x0101;
|
||||
}
|
||||
|
||||
HRESULT aime_io_init(void)
|
||||
|
|
@ -351,3 +351,18 @@ HRESULT aime_io_nfc_get_felica_id(uint8_t unit_no, uint64_t *IDm)
|
|||
|
||||
void aime_io_led_set_color(uint8_t unit_no, uint8_t r, uint8_t g, uint8_t b)
|
||||
{}
|
||||
|
||||
void aime_io_vfd_set_text(
|
||||
const uint8_t *text,
|
||||
size_t text_len,
|
||||
const struct aime_io_vfd_state *state)
|
||||
{
|
||||
(void) text;
|
||||
(void) text_len;
|
||||
(void) state;
|
||||
}
|
||||
|
||||
void aime_io_vfd_set_state(const struct aime_io_vfd_state *state)
|
||||
{
|
||||
(void) state;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
version and the low byte is the minor version (as defined by the Semantic
|
||||
Versioning standard).
|
||||
|
||||
The latest API version as of this writing is 0x0100.
|
||||
The latest API version as of this writing is 0x0101.
|
||||
*/
|
||||
uint16_t aime_io_get_api_version(void);
|
||||
|
||||
|
|
@ -85,3 +85,47 @@ HRESULT aime_io_nfc_get_felica_id(uint8_t unit_no, uint64_t *IDm);
|
|||
Minimum API version: 0x0100
|
||||
*/
|
||||
void aime_io_led_set_color(uint8_t unit_no, uint8_t r, uint8_t g, uint8_t b);
|
||||
|
||||
/*
|
||||
VFD text forwarding. This is intended to pass through the text payload
|
||||
plus the most recent VFD state so external handlers can emulate scrolling
|
||||
or layout if desired.
|
||||
|
||||
- text: Pointer to raw text bytes (not null-terminated)
|
||||
- text_len: Length of the text buffer
|
||||
- state: Current VFD state at the time of rendering
|
||||
|
||||
The encoding field uses VFD encoding values (0=GB2312, 1=Big5,
|
||||
2=Shift-JIS, 3=KSC5601).
|
||||
|
||||
Minimum API version: 0x0101
|
||||
*/
|
||||
struct aime_io_vfd_state {
|
||||
uint8_t encoding;
|
||||
uint8_t text_speed;
|
||||
uint8_t scroll_enabled;
|
||||
uint16_t h_scroll;
|
||||
uint16_t cursor_x;
|
||||
uint8_t cursor_y;
|
||||
uint16_t wnd_x0;
|
||||
uint8_t wnd_y0;
|
||||
uint16_t wnd_x1;
|
||||
uint8_t wnd_y1;
|
||||
uint8_t rotate;
|
||||
uint8_t brightness;
|
||||
uint8_t screen_on;
|
||||
uint32_t clear_seq;
|
||||
};
|
||||
|
||||
void aime_io_vfd_set_text(
|
||||
const uint8_t *text,
|
||||
size_t text_len,
|
||||
const struct aime_io_vfd_state *state);
|
||||
|
||||
/*
|
||||
VFD state change notification. Called when the VFD state changes even
|
||||
when no text is written.
|
||||
|
||||
Minimum API version: 0x0101
|
||||
*/
|
||||
void aime_io_vfd_set_state(const struct aime_io_vfd_state *state);
|
||||
|
|
|
|||
|
|
@ -8,6 +8,11 @@
|
|||
#include "util/dll-bind.h"
|
||||
#include "util/dprintf.h"
|
||||
|
||||
enum {
|
||||
AIME_DLL_SYM_COUNT_V100 = 5,
|
||||
AIME_DLL_SYM_COUNT_V101 = 7,
|
||||
};
|
||||
|
||||
const struct dll_bind_sym aime_dll_syms[] = {
|
||||
{
|
||||
.sym = "aime_io_init",
|
||||
|
|
@ -24,7 +29,13 @@ const struct dll_bind_sym aime_dll_syms[] = {
|
|||
}, {
|
||||
.sym = "aime_io_led_set_color",
|
||||
.off = offsetof(struct aime_dll, led_set_color),
|
||||
}
|
||||
}, {
|
||||
.sym = "aime_io_vfd_set_text",
|
||||
.off = offsetof(struct aime_dll, vfd_set_text),
|
||||
}, {
|
||||
.sym = "aime_io_vfd_set_state",
|
||||
.off = offsetof(struct aime_dll, vfd_set_state),
|
||||
},
|
||||
};
|
||||
|
||||
struct aime_dll aime_dll;
|
||||
|
|
@ -42,6 +53,7 @@ HRESULT aime_dll_init(const struct aime_dll_config *cfg, HINSTANCE self)
|
|||
HINSTANCE owned;
|
||||
HINSTANCE src;
|
||||
HRESULT hr;
|
||||
size_t sym_count;
|
||||
|
||||
assert(cfg != NULL);
|
||||
assert(self != NULL);
|
||||
|
|
@ -86,7 +98,10 @@ HRESULT aime_dll_init(const struct aime_dll_config *cfg, HINSTANCE self)
|
|||
}
|
||||
|
||||
sym = aime_dll_syms;
|
||||
hr = dll_bind(&aime_dll, src, &sym, _countof(aime_dll_syms));
|
||||
sym_count = (aime_dll.api_version < 0x0101)
|
||||
? AIME_DLL_SYM_COUNT_V100
|
||||
: AIME_DLL_SYM_COUNT_V101;
|
||||
hr = dll_bind(&aime_dll, src, &sym, sym_count);
|
||||
|
||||
if (FAILED(hr)) {
|
||||
if (src != self) {
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@ struct aime_dll {
|
|||
size_t luid_size);
|
||||
HRESULT (*nfc_get_felica_id)(uint8_t unit_no, uint64_t *IDm);
|
||||
void (*led_set_color)(uint8_t unit_no, uint8_t r, uint8_t g, uint8_t b);
|
||||
void (*vfd_set_text)(
|
||||
const uint8_t *text,
|
||||
size_t text_len,
|
||||
const struct aime_io_vfd_state *state);
|
||||
void (*vfd_set_state)(const struct aime_io_vfd_state *state);
|
||||
};
|
||||
|
||||
struct aime_dll_config {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#include "board/vfd-frame.h"
|
||||
|
||||
enum {
|
||||
VFD_CMD_WRITE_STATIC = 0x00,
|
||||
VFD_CMD_GET_VERSION = 0x5B,
|
||||
VFD_CMD_RESET = 0x0B,
|
||||
VFD_CMD_CLEAR_SCREEN = 0x0C,
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#include <stdlib.h>
|
||||
|
||||
#include "board/config.h"
|
||||
#include "board/aime-dll.h"
|
||||
#include "board/vfd.h"
|
||||
#include "board/vfd-cmd.h"
|
||||
|
||||
|
|
@ -22,6 +23,7 @@
|
|||
#include "util/dump.h"
|
||||
|
||||
#define SUPER_VERBOSE 0
|
||||
#define VFD_BRIGHTNESS_MAX 4
|
||||
|
||||
static HRESULT vfd_handle_irp(struct irp *irp);
|
||||
|
||||
|
|
@ -29,7 +31,7 @@ static struct uart vfd_uart;
|
|||
static uint8_t vfd_written[4096];
|
||||
static uint8_t vfd_readable[4096];
|
||||
|
||||
static int encoding = VFD_ENC_SHIFT_JIS;
|
||||
static struct aime_io_vfd_state vfd_state;
|
||||
|
||||
HRESULT vfd_handle_get_version(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart);
|
||||
HRESULT vfd_handle_reset(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart);
|
||||
|
|
@ -51,6 +53,13 @@ HRESULT vfd_handle_create_char2(struct const_iobuf* reader, struct iobuf* writer
|
|||
|
||||
static bool utf_enabled;
|
||||
|
||||
static void vfd_publish_state(void)
|
||||
{
|
||||
if (aime_dll.vfd_set_state != NULL) {
|
||||
aime_dll.vfd_set_state(&vfd_state);
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT vfd_hook_init(struct vfd_config *cfg, unsigned int default_port_no)
|
||||
{
|
||||
if (!cfg->enable){
|
||||
|
|
@ -58,6 +67,9 @@ HRESULT vfd_hook_init(struct vfd_config *cfg, unsigned int default_port_no)
|
|||
}
|
||||
|
||||
utf_enabled = cfg->utf_conversion;
|
||||
memset(&vfd_state, 0, sizeof(vfd_state));
|
||||
vfd_state.encoding = VFD_ENC_SHIFT_JIS;
|
||||
vfd_publish_state();
|
||||
|
||||
unsigned int port_no = cfg->port_no;
|
||||
if (port_no == 0){
|
||||
|
|
@ -93,13 +105,13 @@ void print_vfd_text(const char* str, int len){
|
|||
memset(encoded, 0, 1024 * sizeof(wchar_t));
|
||||
|
||||
int codepage = 0;
|
||||
if (encoding == VFD_ENC_GB2312){
|
||||
if (vfd_state.encoding == VFD_ENC_GB2312){
|
||||
codepage = 936;
|
||||
} else if (encoding == VFD_ENC_BIG5){
|
||||
} else if (vfd_state.encoding == VFD_ENC_BIG5){
|
||||
codepage = 950;
|
||||
} else if (encoding == VFD_ENC_SHIFT_JIS){
|
||||
} else if (vfd_state.encoding == VFD_ENC_SHIFT_JIS){
|
||||
codepage = 932;
|
||||
} else if (encoding == VFD_ENC_KSC5601) {
|
||||
} else if (vfd_state.encoding == VFD_ENC_KSC5601) {
|
||||
codepage = 949;
|
||||
}
|
||||
|
||||
|
|
@ -114,6 +126,37 @@ void print_vfd_text(const char* str, int len){
|
|||
dprintf("VFD: Text: %s\n", str);
|
||||
|
||||
}
|
||||
|
||||
if (aime_dll.vfd_set_text != NULL) {
|
||||
aime_dll.vfd_set_text((const uint8_t *) str, len, &vfd_state);
|
||||
}
|
||||
}
|
||||
|
||||
static void vfd_read_text_until_sync(struct const_iobuf *reader)
|
||||
{
|
||||
int len;
|
||||
|
||||
if (reader->pos >= reader->nbytes) {
|
||||
return;
|
||||
}
|
||||
|
||||
len = 0;
|
||||
while (reader->pos + len < reader->nbytes &&
|
||||
reader->bytes[reader->pos + len] != VFD_SYNC_BYTE &&
|
||||
reader->bytes[reader->pos + len] != VFD_SYNC_BYTE2) {
|
||||
len++;
|
||||
}
|
||||
|
||||
if (len <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
char *str = malloc((size_t) len + 1);
|
||||
memset(str, 0, (size_t) len + 1);
|
||||
iobuf_read(reader, str, len);
|
||||
str[len] = '\0';
|
||||
print_vfd_text(str, len);
|
||||
free(str);
|
||||
}
|
||||
|
||||
static HRESULT vfd_handle_irp(struct irp *irp)
|
||||
|
|
@ -178,6 +221,10 @@ static HRESULT vfd_handle_irp(struct irp *irp)
|
|||
hr = vfd_handle_set_text_wnd(&reader, writer, &vfd_uart);
|
||||
} else if (cmd == VFD_CMD_SET_TEXT_SPEED) {
|
||||
hr = vfd_handle_set_text_speed(&reader, writer, &vfd_uart);
|
||||
} else if (cmd == VFD_CMD_WRITE_STATIC) {
|
||||
dprintf("VFD: Write Static Text\n");
|
||||
vfd_read_text_until_sync(&reader);
|
||||
hr = S_FALSE;
|
||||
} else if (cmd == VFD_CMD_WRITE_TEXT) {
|
||||
hr = vfd_handle_write_text(&reader, writer, &vfd_uart);
|
||||
} else if (cmd == VFD_CMD_ENABLE_SCROLL) {
|
||||
|
|
@ -199,22 +246,7 @@ static HRESULT vfd_handle_irp(struct irp *irp)
|
|||
|
||||
// if no sync byte is sent, we are just getting plain text...
|
||||
|
||||
if (reader.pos < reader.nbytes){
|
||||
int len = 0;
|
||||
|
||||
// read chars until we hit a new sync byte or the data ends
|
||||
while (reader.pos + len + 1 < reader.nbytes && reader.bytes[reader.pos + len] != VFD_SYNC_BYTE && reader.bytes[reader.pos + len] != VFD_SYNC_BYTE2){
|
||||
len++;
|
||||
}
|
||||
|
||||
char* str = malloc(len);
|
||||
memset(str, 0, len);
|
||||
iobuf_read(&reader, str, len);
|
||||
print_vfd_text(str, len);
|
||||
free(str);
|
||||
|
||||
reader.pos += len;
|
||||
}
|
||||
vfd_read_text_until_sync(&reader);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -230,7 +262,16 @@ static HRESULT vfd_handle_irp(struct irp *irp)
|
|||
}
|
||||
|
||||
HRESULT vfd_handle_get_version(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
dprintf("VFD: Get Version\n");
|
||||
uint8_t subcmd;
|
||||
|
||||
if (reader->pos < reader->nbytes &&
|
||||
reader->bytes[reader->pos] != VFD_SYNC_BYTE &&
|
||||
reader->bytes[reader->pos] != VFD_SYNC_BYTE2) {
|
||||
iobuf_read_8(reader, &subcmd);
|
||||
dprintf("VFD: Get Version (0x%02x)\n", subcmd);
|
||||
} else {
|
||||
dprintf("VFD: Get Version\n");
|
||||
}
|
||||
|
||||
struct vfd_resp_board_info resp;
|
||||
|
||||
|
|
@ -244,12 +285,39 @@ HRESULT vfd_handle_get_version(struct const_iobuf* reader, struct iobuf* writer,
|
|||
HRESULT vfd_handle_reset(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
dprintf("VFD: Reset\n");
|
||||
|
||||
encoding = VFD_ENC_SHIFT_JIS;
|
||||
memset(&vfd_state, 0, sizeof(vfd_state));
|
||||
vfd_state.encoding = VFD_ENC_SHIFT_JIS;
|
||||
vfd_publish_state();
|
||||
|
||||
return S_FALSE;
|
||||
}
|
||||
HRESULT vfd_handle_clear_screen(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
if (reader->pos + 1 <= reader->nbytes) {
|
||||
uint8_t next = reader->bytes[reader->pos];
|
||||
bool next_is_sync = (next == VFD_SYNC_BYTE || next == VFD_SYNC_BYTE2);
|
||||
|
||||
if (!next_is_sync && next <= VFD_BRIGHTNESS_MAX) {
|
||||
bool end_or_sync = (reader->pos + 1 >= reader->nbytes);
|
||||
|
||||
if (!end_or_sync) {
|
||||
uint8_t follow = reader->bytes[reader->pos + 1];
|
||||
end_or_sync = (follow == VFD_SYNC_BYTE || follow == VFD_SYNC_BYTE2);
|
||||
}
|
||||
|
||||
if (end_or_sync) {
|
||||
uint8_t b;
|
||||
iobuf_read_8(reader, &b);
|
||||
dprintf("VFD: Brightness (compat), %d\n", b);
|
||||
vfd_state.brightness = b;
|
||||
vfd_publish_state();
|
||||
return S_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dprintf("VFD: Clear Screen\n");
|
||||
vfd_state.clear_seq++;
|
||||
vfd_publish_state();
|
||||
|
||||
return S_FALSE;
|
||||
}
|
||||
|
|
@ -257,12 +325,14 @@ HRESULT vfd_handle_set_brightness(struct const_iobuf* reader, struct iobuf* writ
|
|||
uint8_t b;
|
||||
iobuf_read_8(reader, &b);
|
||||
|
||||
if (b > 4){
|
||||
if (b > VFD_BRIGHTNESS_MAX){
|
||||
dprintf("VFD: Brightness, invalid argument\n");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
dprintf("VFD: Brightness, %d\n", b);
|
||||
vfd_state.brightness = b;
|
||||
vfd_publish_state();
|
||||
|
||||
return S_FALSE;
|
||||
}
|
||||
|
|
@ -276,30 +346,49 @@ HRESULT vfd_handle_set_screen_on(struct const_iobuf* reader, struct iobuf* write
|
|||
}
|
||||
|
||||
dprintf("VFD: Screen Power, %d\n", b);
|
||||
vfd_state.screen_on = b;
|
||||
vfd_publish_state();
|
||||
return S_FALSE;
|
||||
}
|
||||
HRESULT vfd_handle_set_h_scroll(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
uint8_t x;
|
||||
iobuf_read_8(reader, &x);
|
||||
uint16_t x;
|
||||
iobuf_read_be16(reader, &x);
|
||||
|
||||
dprintf("VFD: Horizontal Scroll, X=%d\n", x);
|
||||
vfd_state.h_scroll = x;
|
||||
vfd_publish_state();
|
||||
return S_FALSE;
|
||||
}
|
||||
HRESULT vfd_handle_draw_image(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
int w, h;
|
||||
uint16_t x0, x1;
|
||||
uint16_t x0;
|
||||
uint16_t w;
|
||||
uint16_t h_lines;
|
||||
uint16_t h_pixels;
|
||||
uint8_t y0, y1;
|
||||
uint8_t image[2048];
|
||||
size_t payload;
|
||||
size_t remaining;
|
||||
|
||||
iobuf_read_be16(reader, &x0);
|
||||
iobuf_read_8(reader, &y0);
|
||||
iobuf_read_be16(reader, &x1);
|
||||
iobuf_read_be16(reader, &w);
|
||||
iobuf_read_8(reader, &y1);
|
||||
w = x1 - x0;
|
||||
h = y1 - y0;
|
||||
iobuf_read(reader, image, w*h);
|
||||
|
||||
dprintf("VFD: Draw image, %dx%d\n", w, h);
|
||||
if (y1 >= y0) {
|
||||
h_lines = (uint16_t) (y1 - y0 + 1);
|
||||
} else {
|
||||
h_lines = 0;
|
||||
}
|
||||
|
||||
h_pixels = (uint16_t) (h_lines * 8);
|
||||
dprintf("VFD: Draw image, %dx%d @%d,%d\n", w, h_pixels, x0, y0);
|
||||
|
||||
payload = (size_t) w * (size_t) h_pixels;
|
||||
remaining = reader->nbytes - reader->pos;
|
||||
if (payload > remaining) {
|
||||
payload = remaining;
|
||||
}
|
||||
|
||||
reader->pos += payload;
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -311,6 +400,9 @@ HRESULT vfd_handle_set_cursor(struct const_iobuf* reader, struct iobuf* writer,
|
|||
iobuf_read_8(reader, &y);
|
||||
|
||||
dprintf("VFD: Set Cursor, x=%d,y=%d\n", x, y);
|
||||
vfd_state.cursor_x = x;
|
||||
vfd_state.cursor_y = y;
|
||||
vfd_publish_state();
|
||||
|
||||
return S_FALSE;
|
||||
}
|
||||
|
|
@ -326,20 +418,31 @@ HRESULT vfd_handle_set_encoding(struct const_iobuf* reader, struct iobuf* writer
|
|||
return E_FAIL;
|
||||
}
|
||||
|
||||
encoding = b;
|
||||
vfd_state.encoding = b;
|
||||
vfd_publish_state();
|
||||
|
||||
return S_FALSE;
|
||||
}
|
||||
HRESULT vfd_handle_set_text_wnd(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
uint16_t x0, x1;
|
||||
uint8_t y0, y1;
|
||||
uint16_t x0, w;
|
||||
uint8_t y0, h;
|
||||
uint16_t x1;
|
||||
uint8_t y1;
|
||||
|
||||
iobuf_read_be16(reader, &x0);
|
||||
iobuf_read_8(reader, &y0);
|
||||
iobuf_read_be16(reader, &x1);
|
||||
iobuf_read_8(reader, &y1);
|
||||
iobuf_read_be16(reader, &w);
|
||||
iobuf_read_8(reader, &h);
|
||||
|
||||
dprintf("VFD: Set Text Window, p0:%d,%d, p1:%d,%d\n", x0, y0, x1, y1);
|
||||
x1 = (uint16_t) (x0 + w);
|
||||
y1 = (uint8_t) (y0 + h);
|
||||
|
||||
dprintf("VFD: Set Text Window, x=%d,y=%d,w=%d,h=%d\n", x0, y0, w, h);
|
||||
vfd_state.wnd_x0 = x0;
|
||||
vfd_state.wnd_y0 = y0;
|
||||
vfd_state.wnd_x1 = x1;
|
||||
vfd_state.wnd_y1 = y1;
|
||||
vfd_publish_state();
|
||||
return S_FALSE;
|
||||
}
|
||||
HRESULT vfd_handle_set_text_speed(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
|
|
@ -347,14 +450,17 @@ HRESULT vfd_handle_set_text_speed(struct const_iobuf* reader, struct iobuf* writ
|
|||
iobuf_read_8(reader, &b);
|
||||
|
||||
dprintf("VFD: Set Text Speed, %d\n", b);
|
||||
vfd_state.text_speed = b;
|
||||
vfd_publish_state();
|
||||
return S_FALSE;
|
||||
}
|
||||
HRESULT vfd_handle_write_text(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
uint8_t len;
|
||||
iobuf_read_8(reader, &len);
|
||||
|
||||
char* str = malloc(len);
|
||||
char* str = malloc((size_t) len + 1);
|
||||
iobuf_read(reader, str, len);
|
||||
str[len] = '\0';
|
||||
|
||||
print_vfd_text(str, len);
|
||||
free(str);
|
||||
|
|
@ -363,10 +469,14 @@ HRESULT vfd_handle_write_text(struct const_iobuf* reader, struct iobuf* writer,
|
|||
}
|
||||
HRESULT vfd_handle_enable_scroll(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
dprintf("VFD: Enable Scrolling\n");
|
||||
vfd_state.scroll_enabled = 1;
|
||||
vfd_publish_state();
|
||||
return S_FALSE;
|
||||
}
|
||||
HRESULT vfd_handle_disable_scroll(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
dprintf("VFD: Disable Scrolling\n");
|
||||
vfd_state.scroll_enabled = 0;
|
||||
vfd_publish_state();
|
||||
return S_FALSE;
|
||||
}
|
||||
HRESULT vfd_handle_rotate(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
|
|
@ -374,6 +484,8 @@ HRESULT vfd_handle_rotate(struct const_iobuf* reader, struct iobuf* writer, stru
|
|||
iobuf_read_8(reader, &b);
|
||||
|
||||
dprintf("VFD: Rotate, %d\n", b);
|
||||
vfd_state.rotate = b;
|
||||
vfd_publish_state();
|
||||
return S_FALSE;
|
||||
}
|
||||
HRESULT vfd_handle_create_char(struct const_iobuf* reader, struct iobuf* writer, struct uart* vfd_uart){
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ EXPORTS
|
|||
aime_io_get_api_version
|
||||
aime_io_init
|
||||
aime_io_led_set_color
|
||||
aime_io_vfd_set_text
|
||||
aime_io_vfd_set_state
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user