Initial Commit - Copy from Altus Metrum AltOS

This commit is contained in:
2024-06-25 19:03:04 +02:00
commit 13fc49c923
2048 changed files with 1206748 additions and 0 deletions

1
ao-tools/ao-rawload/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
ccload

View File

@@ -0,0 +1,12 @@
bin_PROGRAMS=ao-rawload
AM_CFLAGS=$(WARN_CFLAGS) -I$(top_srcdir)/ao-tools/lib $(LIBUSB_CFLAGS)
AO_RAWLOAD_LIBS=$(top_builddir)/ao-tools/lib/libao-tools.a
ao_rawload_DEPENDENCIES = $(AO_RAWLOAD_LIBS)
ao_rawload_LDADD=$(AO_RAWLOAD_LIBS) $(LIBUSB_LIBS)
ao_rawload_SOURCES = ao-rawload.c
man_MANS=ao-rawload.1

View File

@@ -0,0 +1,65 @@
.\"
.\" Copyright © 2009 Keith Packard <keithp@keithp.com>
.\"
.\" 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 program is distributed in the hope that it will be useful, but
.\" WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
.\" General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public License along
.\" with this program; if not, write to the Free Software Foundation, Inc.,
.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
.\"
.\"
.TH AO-RAWLOAD 1 "ao-rawload" ""
.SH NAME
ao-rawload \- flash a program to a AltOS device
.SH SYNOPSIS
.B "ao-rawload"
[\-T \fItty-device\fP]
[\--tty \fItty-device\fP]
[\-D \fIaltos-device\fP]
[\--device \fIaltos-device\fP]
\fIfile.ihx\fP
.SH DESCRIPTION
.I ao-rawload
loads the specified .ihx file, without modification, into the target
device flash or ram (depending on the base address of the .ihx file).
.SH OPTIONS
.TP
\-T tty-device | --tty tty-device
This selects which tty device the debugger uses to communicate with
the target device. The special name 'BITBANG' directs ao-dbg to use
the cp2103 connection, otherwise this should be a usb serial port
connected to a suitable cc1111 debug node.
.TP
\-D AltOS-device | --device AltOS-device
Search for a connected device. This requires an argument of one of the
following forms:
.IP
TeleMetrum:2
.br
TeleMetrum
.br
2
.IP
Leaving out the product name will cause the tool to select a suitable
product, leaving out the serial number will cause the tool to match
one of the available devices.
.TP
\-r | --run
After the file has been loaded, set the PC to the base address of the
image and resume execution there.
the .ihx file.
.SH USAGE
.I ao-rawload
reads the specified .ihx file into memory. It then connects to the
specified target device and writes the program to the target device
memory and, optionally, starts the program executing.
.SH AUTHOR
Keith Packard

View File

@@ -0,0 +1,118 @@
/*
* Copyright © 2008 Keith Packard <keithp@keithp.com>
*
* 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 program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
#include <unistd.h>
#include <getopt.h>
#include "ccdbg.h"
#include "cc.h"
static const struct option options[] = {
{ .name = "tty", .has_arg = 1, .val = 'T' },
{ .name = "device", .has_arg = 1, .val = 'D' },
{ .name = "run", .has_arg = 0, .val = 'r' },
{ 0, 0, 0, 0},
};
static void usage(char *program)
{
fprintf(stderr, "usage: %s [--tty <tty-name>] [--device <device-name>] [--run] file.ihx\n", program);
exit(1);
}
int
main (int argc, char **argv)
{
struct ccdbg *dbg;
struct ao_hex_file *hex;
struct ao_hex_image *image;
char *filename;
FILE *file;
char *tty = NULL;
char *device = NULL;
int c;
int run = 0;
while ((c = getopt_long(argc, argv, "rT:D:", options, NULL)) != -1) {
switch (c) {
case 'T':
tty = optarg;
break;
case 'D':
device = optarg;
break;
case 'r':
run = 1;
break;
default:
usage(argv[0]);
break;
}
}
filename = argv[optind];
if (filename == NULL) {
usage(argv[0]);
exit(1);
}
file = fopen(filename, "r");
if (!file) {
perror(filename);
exit(1);
}
hex = ao_hex_file_read(file, filename);
fclose(file);
if (!hex)
exit (1);
image = ao_hex_image_create(hex);
if (!image) {
fprintf(stderr, "image create failed\n");
exit (1);
}
ao_hex_file_free(hex);
if (!tty)
tty = cc_usbdevs_find_by_arg(device, "TIDongle");
dbg = ccdbg_open(tty);
if (!dbg)
exit (1);
ccdbg_add_debug(CC_DEBUG_FLASH);
ccdbg_debug_mode(dbg);
ccdbg_halt(dbg);
if (image->address == 0xf000) {
printf("Loading %d bytes to execute from RAM\n",
image->length);
ccdbg_write_hex_image(dbg, image, 0);
} else if (image->address == 0x0000) {
printf("Loading %d bytes to execute from FLASH\n",
image->length);
ccdbg_flash_hex_image(dbg, image);
} else {
printf("Cannot load code to 0x%04x\n",
image->address);
ao_hex_image_free(image);
ccdbg_close(dbg);
exit(1);
}
if (run) {
ccdbg_set_pc(dbg, image->address);
ccdbg_resume(dbg);
}
ccdbg_close(dbg);
exit (0);
}