From 0bb03c0a1d96c23689cc420238a37b9fd15b739c Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Tue, 14 Feb 2017 11:48:19 +0100 Subject: sw: copied flash tool source from gameboymod --- sw/linux/configure.ac | 23 +++++ sw/linux/makefile.am | 2 + sw/linux/reading_links.txt | 4 + sw/linux/src/main.c | 13 +++ sw/linux/src/makefile.am | 7 ++ sw/linux/src/serial.c | 22 +++++ sw/linux/src/serial.h | 17 ++++ sw/linux/src/ui.c | 90 ++++++++++++++++++ sw/linux/src/ui.h | 17 ++++ sw/linux/src/z80prog.ui | 222 +++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 417 insertions(+) create mode 100644 sw/linux/configure.ac create mode 100644 sw/linux/makefile.am create mode 100644 sw/linux/reading_links.txt create mode 100644 sw/linux/src/main.c create mode 100644 sw/linux/src/makefile.am create mode 100644 sw/linux/src/serial.c create mode 100644 sw/linux/src/serial.h create mode 100644 sw/linux/src/ui.c create mode 100644 sw/linux/src/ui.h create mode 100644 sw/linux/src/z80prog.ui (limited to 'sw/linux') diff --git a/sw/linux/configure.ac b/sw/linux/configure.ac new file mode 100644 index 0000000..a5c4b3b --- /dev/null +++ b/sw/linux/configure.ac @@ -0,0 +1,23 @@ +AC_CONFIG_SRCDIR([src]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_AUX_DIR([build-aux]) + +AC_INIT([z80prog], [0.1], [naopross@tharcway.org]) +AM_INIT_AUTOMAKE([-Wall -Werror foreign]) + +AC_PROG_CC + +#### +# Check for required packages / libraries +# +LIBGTK_REQUIRED=2.91 + +PKG_CHECK_MODULES(gtk3, [gtk+-3.0 >= $LIBGTK_REQUIRED]) + +AC_CONFIG_FILES([ + makefile + src/makefile +]) + +AC_OUTPUT diff --git a/sw/linux/makefile.am b/sw/linux/makefile.am new file mode 100644 index 0000000..4d27cea --- /dev/null +++ b/sw/linux/makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = src +CLEANFILES = *~ diff --git a/sw/linux/reading_links.txt b/sw/linux/reading_links.txt new file mode 100644 index 0000000..83c62f4 --- /dev/null +++ b/sw/linux/reading_links.txt @@ -0,0 +1,4 @@ +https://developer.gnome.org/gtk3/stable/ch01s04.html#id-1.2.3.12.5 +https://developer.gnome.org/gio/unstable/GApplication.html +https://git.gnome.org/browse/gnome-hello/tree/src/app.c + diff --git a/sw/linux/src/main.c b/sw/linux/src/main.c new file mode 100644 index 0000000..769992a --- /dev/null +++ b/sw/linux/src/main.c @@ -0,0 +1,13 @@ +#include "config.h" +#include "ui.h" + +#include +#include +#include + +int main(int argc, char *argv[]) +{ + ui_init(&argc, &argv); + return 0; +} + diff --git a/sw/linux/src/makefile.am b/sw/linux/src/makefile.am new file mode 100644 index 0000000..492c3ec --- /dev/null +++ b/sw/linux/src/makefile.am @@ -0,0 +1,7 @@ +bin_PROGRAMS = z80prog +z80prog_SOURCES = main.c ui.c serial.c + +z80prog_CFLAGS = -Wall -Werror -g $(gtk3_CFLAGS) +z80prog_LDADD = $(gtk3_LIBS) + +CLEANFILES = *~ diff --git a/sw/linux/src/serial.c b/sw/linux/src/serial.c new file mode 100644 index 0000000..a13ef45 --- /dev/null +++ b/sw/linux/src/serial.c @@ -0,0 +1,22 @@ +#include "serial.h" + +int serial_connect(const char *devpath, long baudrate) +{ + int fd; + struct termios tty; + // struct termios tty_old; + + // open device + if ((fd = open(devpath, O_RDWR | O_NOCTTY)) < 0) { + return -1; + } + + // set parameters + if (tcgetattr(fd, &tty) != 0) { + return -1; + } + + // cfsetospeed(&tty, + + return fd; +} diff --git a/sw/linux/src/serial.h b/sw/linux/src/serial.h new file mode 100644 index 0000000..6123e42 --- /dev/null +++ b/sw/linux/src/serial.h @@ -0,0 +1,17 @@ +#ifndef __Z80PROG_SERIAL_H__ +#define __Z80PROG_SERIAL_H__ + +#include +#include +#include +#include +#include +#include + +int serial_connect(const char *devpath, long baudrate); +void serial_close(int fd); + +void serial_program(const char *rompath); +void serial_read_rom(const char *rom); + +#endif diff --git a/sw/linux/src/ui.c b/sw/linux/src/ui.c new file mode 100644 index 0000000..b33aa04 --- /dev/null +++ b/sw/linux/src/ui.c @@ -0,0 +1,90 @@ +#include "ui.h" + +static bool ui_connected, ui_fileset; +static GtkTextBuffer *ui_logbuf; +static GtkBuilder *ui_builder; + +void ui_init(int *argc, char **argv[]) +{ + GtkWindow *window; + GtkTextView *logview; + GtkFileChooserButton *filechoosebtn; + GtkButton *connectbtn, *flashbtn; + + /* set ui global variables */ + ui_connected = ui_fileset = false; + + /* start gtk */ + gtk_init(argc, argv); + + /* load glade gtk ui */ + ui_builder = gtk_builder_new(); + gtk_builder_add_from_file(ui_builder, "gbprog.ui", NULL); + + /* connect logger buffer (extern variable) */ + ui_logbuf = gtk_text_buffer_new(NULL); + logview = GTK_TEXT_VIEW(gtk_builder_get_object(ui_builder, "logview")); + + gtk_text_view_set_buffer(logview, ui_logbuf); + + /* connect objects to function calls */ + // window + window = GTK_WINDOW(gtk_builder_get_object(ui_builder, "window")); + g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); + + // connectbtn + connectbtn = GTK_BUTTON(gtk_builder_get_object(ui_builder, "flashbtn")); + g_signal_connect(connectbtn, "clicked", + G_CALLBACK(ui_connect_clicked), NULL); + + // flashbtn + flashbtn = GTK_BUTTON(gtk_builder_get_object(ui_builder, "flashbtn")); + g_signal_connect(flashbtn, "clicked", G_CALLBACK(ui_flash_clicked), NULL); + + // file chooser + filechoosebtn = GTK_FILE_CHOOSER_BUTTON( + gtk_builder_get_object(ui_builder, "filechoosebtn")); + g_signal_connect(filechoosebtn, "file-set", G_CALLBACK(ui_file_set), NULL); + + /* start gtk window */ + gtk_main(); +} + +void ui_log(const char *msg, char type) +{ + GtkTextIter end; + gchar typech[4] = "[ ] "; + + switch (type) { + case 'm': typech[1] = '@'; break; // message + case 'w': typech[1] = '#'; break; // warning + case 'e': typech[1] = '!'; break; // error + } + + gtk_text_buffer_get_end_iter(ui_logbuf, &end); + gtk_text_buffer_insert(ui_logbuf, &end, typech, 4); + gtk_text_buffer_get_end_iter(ui_logbuf, &end); + gtk_text_buffer_insert(ui_logbuf, &end, (const gchar *) msg, strlen(msg)); +} + +void ui_file_set(GtkFileChooserButton *btn, gpointer user_data) +{ + GtkEntry *filepath = + GTK_ENTRY(gtk_builder_get_object(ui_builder, "filepath")); + + gtk_entry_set_text(filepath, + gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(btn))); + + ui_log("File set\n", 'm'); + ui_fileset = true; +} + +void ui_connect_clicked(void) +{ + +} + +void ui_flash_clicked(void) +{ + +} diff --git a/sw/linux/src/ui.h b/sw/linux/src/ui.h new file mode 100644 index 0000000..44314d6 --- /dev/null +++ b/sw/linux/src/ui.h @@ -0,0 +1,17 @@ +#ifndef __Z80PROG_UI_H__ +#define __Z80PROG_UI_H_ + +#include +#include + +#include + +void ui_init(int *argc, char **argv[]); +void ui_log(const char *msg, char type); + +void ui_file_set(GtkFileChooserButton *btn, gpointer user_data); + +void ui_connect_clicked(void); +void ui_flash_clicked(void); + +#endif diff --git a/sw/linux/src/z80prog.ui b/sw/linux/src/z80prog.ui new file mode 100644 index 0000000..3735efa --- /dev/null +++ b/sw/linux/src/z80prog.ui @@ -0,0 +1,222 @@ + + + + + + 1000000 + 9600 + 1 + 10 + + + + *.bin + *.gb + *.gba + *.gbc + *.hex + + + + 450 + 250 + True + False + Z80 ROM Programmer + 450 + 200 + + + True + False + 10 + 10 + 10 + 10 + vertical + 10 + + + True + False + 10 + + + True + True + Enter path + + + True + True + 0 + + + + + True + True + 0 + 7 + True + 9600 + number + baudrateadjust + 10 + True + True + if-valid + 9600 + + + False + True + 1 + + + + + gtk-connect + True + True + True + True + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + 10 + + + True + True + Binary Path + + + True + True + 0 + + + + + True + False + gbbinfilter + + + + False + True + 1 + + + + + False + True + 1 + + + + + True + False + vertical + 10 + + + True + False + True + start + + + True + True + 0 + + + + + Flash + True + False + True + True + + + False + True + 1 + + + + + False + True + 2 + + + + + True + True + in + + + True + False + + + True + True + True + True + True + + + True + True + True + True + False + True + + + + + True + False + Logs + + + + + + + + + True + True + 4 + + + + + + -- cgit v1.2.1