summaryrefslogtreecommitdiffstats
path: root/sw/programmer/linux/src/main.c
diff options
context:
space:
mode:
authorNao Pross <naopross@thearcway.org>2017-10-05 12:17:37 +0200
committerNao Pross <naopross@thearcway.org>2017-10-05 12:17:37 +0200
commitf000d406809d8a7a0e71c388ebfb15d7564728e4 (patch)
tree2284c66b0459e9456fb451feaa4290e5d99e4349 /sw/programmer/linux/src/main.c
parentMerge remote-tracking branch 'origin/atlas' into naopross (diff)
downloadz80uPC-f000d406809d8a7a0e71c388ebfb15d7564728e4.tar.gz
z80uPC-f000d406809d8a7a0e71c388ebfb15d7564728e4.zip
Test units are now in their own folder 'z80_test', add programmer cli interface
Diffstat (limited to 'sw/programmer/linux/src/main.c')
-rw-r--r--sw/programmer/linux/src/main.c58
1 files changed, 56 insertions, 2 deletions
diff --git a/sw/programmer/linux/src/main.c b/sw/programmer/linux/src/main.c
index 769992a..1bfd359 100644
--- a/sw/programmer/linux/src/main.c
+++ b/sw/programmer/linux/src/main.c
@@ -4,10 +4,64 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
+#include <unistd.h>
+#include <errno.h>
+
+void out(const char *msg)
+{
+ printf("%s", msg);
+}
int main(int argc, char *argv[])
{
- ui_init(&argc, &argv);
+ int opt;
+ int use_ui = 0;
+
+ unsigned long baudrate;
+ char *file, *device, *baud;
+
+ file = device = baud = NULL;
+
+ while ((opt = getopt(argc, argv, "gf:d:b:")) != -1) {
+ switch (opt) {
+ case 'g':
+ use_ui = 1;
+ break;
+ case 'f':
+ file = optarg;
+ break;
+ case 'd':
+ device = optarg;
+ break;
+ case 'b':
+ baud = optarg;
+ break;
+ }
+ }
+
+ if (use_ui) {
+ ui_init(&argc, &argv);
+ return 0;
+ }
+
+ if (file == NULL || device == NULL || baud == NULL) {
+ perror("Missing argument\n");
+ return -1;
+ }
+
+ baudrate = strtoul(baud, NULL, 0);
+ if (errno == ERANGE) {
+ perror("Invalid baudrate\n");
+ return -1;
+ }
+
+ if (flash_open(device, baudrate) < 0) {
+ perror("Failed to open device\n");
+ return -2;
+ }
+
+ flash_write(file, out);
+ flash_close();
+
return 0;
}
-