I’ve got a several page design document that lays out how the system will work, various commands, etc., so I’m going to try to condense it a bit for you.
Regarding exploiting the WiFi: I’m not building the Graphics Backpack around the Spark Core, because it doesn’t have enough I/O for a 16bit bus. The plan is for the MCU on the Backpack to be an MSP430F5529 @ 25MHz, if I can squeeze enough performance out of it. Otherwise I’ll use a Tiva C or STM32.
I had thought about making a version of the Backpack with a CC3000 on it, which would essentially turn it into a wireless display, but I could add a footprint on the Backpack for the Core. That way you could plug it in and boom, fully wireless display! Perhaps add a Lithium Ion charger and gas gauge as well, plus the standard pack connector (or at least the footprint for the parts). So the backpack would still have its own MCU, but the core would dock right onto the board and be a fully self contained unit!
Regarding the backpack programming features: Essentially, instead of using software like 4D Systems does, I’ll setup a nice little HTML5/CSS3/AJAX webpage where you’ll be able to do all the design and configuration at. Like the Visi-Genie objects, I’ll have a good number of pre-made widgets available; buttons, text input blocks, keyboards, text displays, dials, gauges, bar graphs, 7-segment number displays, analog & digital clocks, popup menus plus some other stuff I’m probably forgetting. In addition you’ll be able to upload static and animated PNG files (which will be converted server side to [most likely] RLE encoded arrays), plus you’ll be able to draw basic shapes (circles, squares, rectangles and lines).
Each widget/object will have unique ID (user editable) assigned to it so that the host MCU (Arduino, Launchpad, Spark Core) can change any property of it (text/number, color, size, position, opacity and whether it’s displayed or hidden). Each “screen” will also have a unique ID so the host can switch between them; I think layer is a better term for it.
So, each layer will contain widgets and objects, all of which can be hidden, shown and fully modified on the fly by the host MCU. When you download your finished design from the webpage, each layer will be a separate file (most likely they’ll all be zipped together for you server side). At this point you’ll dump the files onto an SD card, put it in the display and one of two things will happen—(A) You’ll keep the card installed and the display’s MCU will load the active layer into its own memory on the fly—or—(B) The MCU will copy all the files into onboard FRAM and pull the active layer from there. Option B should be a lot faster but will require a parallel bus (plus the timers to handle it) so it might not be feasible; A might have to suffice, I’ll just have to do some testing.
Something just occurred to me, if you have a Spark Core plugged into the Backpack, you could download all the data directly from the editor website to the Backpack! You make all your screens and stuff, enter your Core’s ID and then the website would install some special firmware that would allow it to pass the data straight through to the Backpack’s MCU, which would write it directly to the onboard SD Card. Damn, that would be killer.
Okay, this post has gotten a bit long (hey, you asked for it) so I’ll just talk about one more thing real quick: User Input. Since most of these inexpensive eBay TFT displays include resistive touch panels, I plan to fully support them on the Backpack itself. Any widget/object can be flagged as touchable; since the Backpack already knows the coordinates of the various widgets and objects on the screen, it takes nothing for it to respond when those areas are tapped.
The host MCU will talk to the Backpack via Serial, I2C and SPI plus I’ll also have an optional IRQ line so the user doesn’t have to continually poll an interrupt register on the Backpack.
Okay, I think that about covers the basics. Seem like a good, sane set of features? I’d be happy to go into more specifics if you have any questions.