Hardware Abstraction

If done correctly, I think any libraries written for the base Arduino (currently the Duemilanove) should port up or down gracefully to other boards based on AVR chips. I'm about to start digging into this deeper, and think it really depends on the support within the IDE.

There should be, if there isn't already, a well defined method to add support for boards with both less and more hardware features. Things such as maximum number of I/O pins, mappings to current Arduino pins, etc, should all be in hardware dependent files that are selected when a board is selected in the IDE. The same would be true for the type of pins (UARTTX, UARTRX, UARTCTS, I2CSDA, I2CSCL, etc). It should be possible to abstract all of this even if it involves a lot of rework of the IDE. If mappings are done right, it should be pretty intuitive to work with different boards, even if the hardware features are a real superset of what the Arduino has.

If the above is already true, then writing libraries to be hardware dependent should not be difficult. While I think the current Arduino IDE is a bit less than it really needs to be, it's in the right ball park for the targeted audience.

As for writing libraries, I believe each major hardware component should have support in a separate library that does not have any other dependencies. These hardware libraries should be able to stand completely alone unless some core routines are reasonable to share between things, such as UARTs, SSPs, etc for functions like I2C and SPI. Those core routines should be part of the native development environment that are included with it. This would allow different libraries thing such as I2C, SPI, serial communication, digital I/O, analog I/O, etc to be easily written, without worries of colliding with any other current user accessible library.

8-Dale