From 21090fa778a0ed28ef5bfd81ad8c9d046034fc6a Mon Sep 17 00:00:00 2001 From: "ambrop7@gmail.com" Date: Wed, 27 Aug 2014 12:51:21 +0200 Subject: Add BOSSA. BOSSA is a flash programming utility for Atmel's SAM family of flash-based ARM microcontrollers. The motivation behind BOSSA is to create a simple, easy-to-use, open source utility to replace Atmel's SAM-BA software. BOSSA is an acronym for Basic Open Source SAM-BA Application to reflect that goal. --- pkgs/development/tools/misc/bossa/bin2c.c | 122 ++++++++++++++++++++++++++ pkgs/development/tools/misc/bossa/default.nix | 49 +++++++++++ 2 files changed, 171 insertions(+) create mode 100644 pkgs/development/tools/misc/bossa/bin2c.c create mode 100644 pkgs/development/tools/misc/bossa/default.nix (limited to 'pkgs/development/tools/misc/bossa') diff --git a/pkgs/development/tools/misc/bossa/bin2c.c b/pkgs/development/tools/misc/bossa/bin2c.c new file mode 100644 index 000000000000..f0b915de540a --- /dev/null +++ b/pkgs/development/tools/misc/bossa/bin2c.c @@ -0,0 +1,122 @@ +// bin2c.c +// +// convert a binary file into a C source vector +// +// THE "BEER-WARE LICENSE" (Revision 3.1415): +// sandro AT sigala DOT it wrote this file. As long as you retain this notice you can do +// whatever you want with this stuff. If we meet some day, and you think this stuff is +// worth it, you can buy me a beer in return. Sandro Sigala +// +// syntax: bin2c [-c] [-z] +// +// -c add the "const" keyword to definition +// -z terminate the array with a zero (useful for embedded C strings) +// +// examples: +// bin2c -c myimage.png myimage_png.cpp +// bin2c -z sometext.txt sometext_txt.cpp + +#include +#include +#include +#include + +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif + +int useconst = 0; +int zeroterminated = 0; + +int myfgetc(FILE *f) +{ + int c = fgetc(f); + if (c == EOF && zeroterminated) + { + zeroterminated = 0; + return 0; + } + return c; +} + +void process(const char *ifname, const char *ofname) +{ + FILE *ifile, *ofile; + ifile = fopen(ifname, "rb"); + if (ifile == NULL) + { + fprintf(stderr, "cannot open %s for reading\n", ifname); + exit(1); + } + ofile = fopen(ofname, "wb"); + if (ofile == NULL) + { + fprintf(stderr, "cannot open %s for writing\n", ofname); + exit(1); + } + char buf[PATH_MAX], *p; + const char *cp; + if ((cp = strrchr(ifname, '/')) != NULL) + { + ++cp; + } else { + if ((cp = strrchr(ifname, '\\')) != NULL) + ++cp; + else + cp = ifname; + } + strcpy(buf, cp); + for (p = buf; *p != '\0'; ++p) + { + if (!isalnum(*p)) + *p = '_'; + } + fprintf(ofile, "static %sunsigned char %s[] = {\n", useconst ? "const " : "", buf); + int c, col = 1; + while ((c = myfgetc(ifile)) != EOF) + { + if (col >= 78 - 6) + { + fputc('\n', ofile); + col = 1; + } + fprintf(ofile, "0x%.2x, ", c); + col += 6; + } + fprintf(ofile, "\n};\n"); + + fclose(ifile); + fclose(ofile); +} + +void usage(void) +{ + fprintf(stderr, "usage: bin2c [-cz] \n"); + exit(1); +} + +int main(int argc, char **argv) +{ + while (argc > 3) + { + if (!strcmp(argv[1], "-c")) + { + useconst = 1; + --argc; + ++argv; + } else if (!strcmp(argv[1], "-z")) + { + zeroterminated = 1; + --argc; + ++argv; + } else { + usage(); + } + } + if (argc != 3) + { + usage(); + } + process(argv[1], argv[2]); + return 0; +} diff --git a/pkgs/development/tools/misc/bossa/default.nix b/pkgs/development/tools/misc/bossa/default.nix new file mode 100644 index 000000000000..f0b6d81e69eb --- /dev/null +++ b/pkgs/development/tools/misc/bossa/default.nix @@ -0,0 +1,49 @@ +{ stdenv, fetchgit, wxGTK, libX11, readline }: + +let + # BOSSA needs a "bin2c" program to embed images. + # Source taken from: + # http://wiki.wxwidgets.org/Embedding_PNG_Images-Bin2c_In_C + bin2c = stdenv.mkDerivation { + name = "bossa-bin2c"; + src = ./bin2c.c; + unpackPhase = "true"; + buildPhase = ''cc $src -o bin2c''; + installPhase = ''mkdir -p $out/bin; cp bin2c $out/bin/''; + }; + +in +stdenv.mkDerivation rec { + name = "bossa"; + + src = fetchgit { + url = https://github.com/shumatech/BOSSA; + rev = "0f0a41cb1c3a65e909c5c744d8ae664e896a08ac"; /* arduino branch */ + sha256 = "01y8r45fw02rps9q995mv82bxrm6p0mysv4wir5glpagrhnyw7md"; + }; + + nativeBuildInputs = [ bin2c ]; + buildInputs = [ wxGTK libX11 readline ]; + + # Explicitly specify targets so they don't get stripped. + makeFlags = [ "bin/bossac" "bin/bossash" "bin/bossa" ]; + + installPhase = '' + mkdir -p $out/bin + cp bin/bossa{c,sh,} $out/bin/ + ''; + + meta = with stdenv.lib; { + description = "A flash programming utility for Atmel's SAM family of flash-based ARM microcontrollers"; + longDescription = '' + BOSSA is a flash programming utility for Atmel's SAM family of + flash-based ARM microcontrollers. The motivation behind BOSSA is + to create a simple, easy-to-use, open source utility to replace + Atmel's SAM-BA software. BOSSA is an acronym for Basic Open + Source SAM-BA Application to reflect that goal. + ''; + homepage = http://www.shumatech.com/web/products/bossa; + license = licenses.bsd3; + platforms = platforms.linux; + }; +} -- cgit 1.4.1