usb.h: Mark API unstable.

The USB API is heavily reliant on the ST stack, and additionally
assumes that all USB is the USB FS peripheral.  As such, it's going to
have to change as we go forward.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
USB: API cleanups.

Remove usbSuspend(), usbResumeInit(), usbResume(), the USB
low-priority IRQ, and usbWaitReset() from usb.h.  Also remove
RESUME_STATE since it was only there for usbResume().

These functions don't need to be seen by anybody except for usb.c and
usb_cdcacm.c, so move them there (altering their names to fit with
libmaple style guidelines) and mark them static.

Clean up includes in usb.c while we're there.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
USB: API cleanups.

Modify usb.h functions (changing their names in some cases) to also
take a usblib_dev* argument, to fit in better with the rest of
libmaple.

Store an rcc_clk_id in struct usblib_dev for the same reason.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
usb.h: Move to libmaple/.

Apart from having an unstable API, usb.h is now a fairly good citizen
of libmaple, so move it to live with the rest of the libmaple headers.

Its device struct is still "struct usblib_dev".  Leave that there; the
asymmetry with the rest of the library is a good reminder that the API
isn't really on equal footing with the rest of the library.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
usb: Rename descriptors.h -> usb_descriptors.h.

Modify its include guard, and the files that include it, appropriately.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
usb_descriptors.h: Whitespace and column cleanups.

Untabify, make (mostly) 80-column clean.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
usb_descriptors.h: Remove usbVcomDescriptor[...] values.

These are CDC ACM-specific.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Make vector table symbols family-specific during linking.

- support/make/target-config.mk: add LD_FAMILY_PATH, the directory to
  search for STM32 family-specific link configuration files. For now,
  this is just a stub which points to support/ld/stm32/f1/performance,
  since that's all we currently support. We can add the logic to
  support different STM32 families here later.

- Makefile: Pass -L $(LD_FAMILY_PATH) to linker.

- Rename support/ld/names.inc to
  support/ld/stm32/f1/performance/vector_symbols.inc.

- common.inc: INCLUDE vector_symbols.inc instead of names.inc.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
copy-to-ide: Remove references to libcs3_stm32_*_density.a.

These no longer exist.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Remove CS3-style initialization.

Remove libcs3-related bits from support/ld. Break them out into
libmaple proper and Wirish as appropriate: vector table definition and
ISR declarations go into libmaple proper, and startup code goes into
Wirish. Vector table symbols are included into common.inc from an
STM32 family-specific directory under support/ld/stm32.

This is a combination of 5 commits. Individual commit messages follow:

libcs3_stm32_src: Don't depend on cs3.h.

So we can use the existing toolchain.

Move ISR decls/vector table into libmaple proper.

This allows us to configure the vector table on a per-family basis.

- Move
        support/ld/libcs3_stm32_src/stm32_isrs.S
                                    stm32_vector_table.S
  to
        libmaple/stm32f1/isrs_performance.S
                         vector_table_performance.S,
  respectively.

  The directory libmaple/stm32f1/ is intended to hold all
  STM32F1-specific code within libmaple. Obviously, there's a lot of
  work to do before this becomes true.

- support/ld/libcs3_stm32_src/Makefile: Don't try to compile
  stm32_isrs.S and stm32_vector_table.S anymore.

- Add libmaple/stm32f1/rules.mk to include these new files in the
  standard libmaple build.

- support/make/target-config.mk: Add LIBMAPLE_MODULE_FAMILY, which
  selects a directory to use as a family-specific libmaple
  submodule.

- Makefile: Add LIBMAPLE_MODULE_FAMILY to LIBMAPLE_MODULES.

Remove support/ld/libcs3_stm32_src and derived object files.

From support/ld/libcs3_stm32_src, move start.S and start_c.c into
Wirish. Modify wirish/rules.mk accordingly.

Delete support/ld/libcs3_stm32_*_density.a. These are no longer
necessary, as the relevant objects are included in the standard Wirish
build. Remove the GROUP statements from the board linker scripts
accordingly.

Remove SEARCH_DIR(.) from common.inc; it's no longer necessary. Also
fix up some comments that are now out of date.

wirish/start_c.c: Don't use CS3-style memory initialization.

Switch memory initialization to a simpler style of initializing .data
if necessary, then zeroing .bss. Initializing .data is only necessary
during Flash builds, since during RAM builds, LOADADDR(.data) ==
ADDR(.data).

This makes libmaple completely incompatible with the CS3 startup
sequence. Subsequent commits will clean up the namespace to reflect
that fact.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Remove "CS3" prefix from libmaple symbol names.

We're no longer even marginally compatible with CS3, so it's
inappropriate to use that prefix in our names.

Rename:
    __cs3_stm32_vector_table -> __stm32_vector_table.
    __cs3_stack              -> __msp_init
    __cs3_reset              -> __exc_reset
    __cs3_start_c            -> start_c

Also add an MIT license header and assert LeafLabs copyright over
wirish/start.S and wirish/start_c.c.  These files are modified from
the original CodeSourcery versions, which were distributed under a
license that permits modifications to be distributed under a different
copyright and licensing terms than the originals.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Cosmetics.

Convert wirish/start.S and wirish/start_c.c to libmaple coding
conventions.

Whitespace and brace insertion changes only.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Tweak family-specific linker file layout.

Move
        support/ld/stm32/f1/performance/vector_symbols.inc
to
        support/ld/stm32/family/f1/performance/vector_symbols.inc

Creating directory "family" under support/ld/stm32 will allow parallel
directories (e.g. support/ld/stm32/mcu) to exist, which allows an
eventual linker script cleanup to go much more smoothly.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Move public headers to include directories; related cleanups.

Move libmaple/*.h to (new) libmaple/include/libmaple/. The new
accepted way to include a libmaple header foo.h is with:

    #include <libmaple/foo.h>

This is more polite in terms of the include namespace. It also allows
us to e.g. implement the Arduino SPI library at all (which has header
SPI.h; providing it was previously impossible on case-insensitive
filesystems due to libmaple's spi.h).

Similarly for Wirish.

The old include style (#include "header.h") is now deprecated.

libmaple/*.h:

- Change include guard #defines from _FOO_H_ to _LIBMAPLE_FOO_H_.
- Add license headers where they're missing
- Add conditional extern "C" { ... } blocks where they're missing
  (they aren't always necessary, but we might was well do it against
  the future, while we're at it.).
- Change includes from #include "foo.h" to #include <libmaple/foo.h>.
- Move includes after extern "C".
- Remove extra trailing newlines

Note that this doesn't include the headers under libmaple/usb/ or
libmaple/usb/usb_lib. These will get fixed later.

libmaple/*.c:

- Change includes from #include "foo.h" to #include <libmaple/foo.h>.

Makefile:

- Add I$(LIBMAPLE_PATH)/include/libmaple to GLOBAL_FLAGS.  This allows
  for users (including Wirish) to migrate their code, but should go
  away ASAP, since it slows down compilation.

Wirish:

- Move wirish/**/*.h to (new) wirish/include/wirish/.  This ignores
  the USB headers, which, as usual, are getting handled after
  everything else.

- Similarly generify wirish/boards/ structure. For each supported
  board "foo", move wirish/boards/foo.h and wirish/boards/foo.cpp to
  wirish/boards/foo/include/board/board.h and
  wirish/boards/foo/board.cpp, respectively. Also remove the #ifdef
  hacks around the .cpp files.

- wirish/rules.mk: put wirish/boards/foo/include in the include path
  (and add wirish/boards/foo/board.cpp to the list of sources to be
  compiled). This allows saying:

      #include <board/board.h>

  instead of the hack currently in place. We can allow the user to
  override this setting later to make adding custom board definitions
  easier.

- Disable -Werror in libmaple/rules.mk, as the current USB warnings
  don't let the olimex_stm32_h103 board compile. We can re-enable
  -Werror once we've moved the board-specific bits out of libmaple
  proper.

libraries, examples:

- Update includes accordingly.
- Miscellaneous cosmetic fixups.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Move wirish/comm/*.cpp into wirish.

The wirish/comm/ directory is stupid.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
target-config.mk: Remove FLASH_SIZE, SRAM_SIZE settings.

Unused.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Fix linking and C runtime initialization on F1.

Reorder the .data and .rodata sections in common.inc. This seems
necessary to get the linker to place the data ROM disk and the pointer
to it in the right places.

Switch from long long to int in start_c.c. I have no idea why this
helps, but it does. F1 will crash if you don't do this. It will
probably slow things down unnecessarily on F2, but I don't care.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
usb_cdcacm.c: Fix warning for non-LeafLabs boards.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Revert "Added libs in libraries/ to the include path"

This reverts commit 628750bf82135cc1ca25784c8b39eb771ae87024.

Don't mess with LIBMAPLE_INCLUDES. This variable comprises include
directories for libmaple proper, not for libraries that depend upon
libmaple.
Make USB its own submodule.

Add libmaple/usb/rules.mk, which compiles the USB FS device firmware
submodule. Move the logic for compiling the USB stack from
libmaple/rules.mk into libmaple/usb/rules.mk.

Move libmaple/usb/usb_cdacm.h to libmaple/include/libmaple/. Its API
is sufficiently general that we'll be able to port it over to USB
OTG (either FS or HS) eventually, and that lets us include it from
Wirish using the new style for libmaple headers.

Fix the includes for public libmaple headers within libmaple/usb.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>