diff options
Diffstat (limited to 'src/host/layer23/include/osmocom/bb')
4 files changed, 116 insertions, 1 deletions
diff --git a/src/host/layer23/include/osmocom/bb/Makefile.am b/src/host/layer23/include/osmocom/bb/Makefile.am index 58a5f7fb..a8791fe4 100644 --- a/src/host/layer23/include/osmocom/bb/Makefile.am +++ b/src/host/layer23/include/osmocom/bb/Makefile.am @@ -1 +1 @@ -SUBDIRS = common misc mobile +SUBDIRS = common misc ui mobile diff --git a/src/host/layer23/include/osmocom/bb/ui/Makefile.am b/src/host/layer23/include/osmocom/bb/ui/Makefile.am new file mode 100644 index 00000000..b010e53c --- /dev/null +++ b/src/host/layer23/include/osmocom/bb/ui/Makefile.am @@ -0,0 +1,2 @@ +noinst_HEADERS = ui.h telnet_interface.h + diff --git a/src/host/layer23/include/osmocom/bb/ui/telnet_interface.h b/src/host/layer23/include/osmocom/bb/ui/telnet_interface.h new file mode 100644 index 00000000..b35b47f9 --- /dev/null +++ b/src/host/layer23/include/osmocom/bb/ui/telnet_interface.h @@ -0,0 +1,17 @@ +#ifndef _LIBUI_TELNET_IF_H +#define _LIBUI_TELNET_IF_H + +struct ui_telnet_connection { + struct llist_head entry; + void *priv; + struct osmo_fd fd; + struct ui_inst *ui; + struct buffer *obuf; + int iac, sb, esc; +}; + +int ui_telnet_init(struct ui_inst *ui, void *tall_ctx, int port); +int ui_telnet_puts(struct ui_inst *ui, const char *text); +void ui_telnet_exit(struct ui_inst *ui); + +#endif /* _LIBUI_TELNET_IF_H */ diff --git a/src/host/layer23/include/osmocom/bb/ui/ui.h b/src/host/layer23/include/osmocom/bb/ui/ui.h new file mode 100644 index 00000000..75e2fad7 --- /dev/null +++ b/src/host/layer23/include/osmocom/bb/ui/ui.h @@ -0,0 +1,96 @@ +#ifndef _libui_h +#define _libui_h + +#define UI_ROWS 8 +#define UI_COLS 12 +#define UI_TARGET 0 + +enum ui_key { + UI_KEY_0 = '0', + UI_KEY_1 = '1', + UI_KEY_2 = '2', + UI_KEY_3 = '3', + UI_KEY_4 = '4', + UI_KEY_5 = '5', + UI_KEY_6 = '6', + UI_KEY_7 = '7', + UI_KEY_8 = '8', + UI_KEY_9 = '9', + UI_KEY_STAR = '*', + UI_KEY_HASH = '#', + UI_KEY_F1 = 1, + UI_KEY_F2 = 2, + UI_KEY_PICKUP = 26, + UI_KEY_HANGUP = 27, + UI_KEY_UP = 28, + UI_KEY_DOWN = 29, + UI_KEY_LEFT = 30, + UI_KEY_RIGHT = 31, +}; + +union ui_view_data { + struct { + int lines; + const char **text; + int vpos; + } listview; + struct { + int lines; + const char **text; + int vpos; + int cursor; + } selectview; + struct { + char *number; + int num_len; + int pos; + int options; + int options_pos; + } stringview; + struct { + unsigned int value; + int sign; + int min, max; + } intview; +}; + +struct ui_inst; + +struct ui_view { + const char *name; + int (*init)(struct ui_view *uv, union ui_view_data *ud); + int (*keypad)(struct ui_inst *ui, struct ui_view *uv, + union ui_view_data *ud, enum ui_key kp); + int (*display)(struct ui_inst *ui, union ui_view_data *ud); +}; + +struct ui_inst { + struct ui_view *uv; + const char *title; + const char *bottom_line; + union ui_view_data ud; + int (*key_cb)(struct ui_inst *ui, enum ui_key kp); + int (*beep_cb)(struct ui_inst *ui); + /* display */ + char buffer[(UI_COLS + 1) * UI_ROWS]; + int cursor_on, cursor_x, cursor_y; + /* telnet */ + void *tall_telnet_ctx; + struct osmo_fd server_socket; + struct llist_head active_connections; + int (*telnet_cb)(struct ui_inst *ui); +}; + +extern struct ui_view ui_listview; +extern struct ui_view ui_selectview; +extern struct ui_view ui_stringview; +extern struct ui_view ui_intview; + +int ui_inst_init(struct ui_inst *ui, struct ui_view *uv, + int (*key_cb)(struct ui_inst *ui, enum ui_key kp), + int (*beep_cb)(struct ui_inst *ui), + int (*telnet_cb)(struct ui_inst *ui)); +int ui_inst_keypad(struct ui_inst *ui, enum ui_key kp); +int ui_inst_refresh(struct ui_inst *ui); + +#endif /* _libui_h */ |