The Buck Stops in Software
So now there's a green board with a bunch of components. That might be what it is, but software makes it do what it does, and that is what we're really really good at.

Sometimes the algorithms come easily, as 90% of a job are usually variations of projects past.

Many times, it's that 10% that makes or breaks a design. In some cases, that slice represents the competitve edge and rightfully falls under the rules of intellectual property.

But sometimes... Sometimes even the most basic information is so generic and yet so hard won, it should be shared.

Below are some projects and observations that we share with permission. To the right person, these might just hold the keys to successful development.





PRNEXP -- A simple printer project in MSVC that illustrates text placement and paper tray selection using regular Win32 APIs and standard GDI calls. We've recently extended this program to access not just local printers but also those printers connected across a LAN. To make this work required the study of the now venerable Petzold books, the Win32 Programming book by Rector & Newcomer, the 1998 MSDN, and the fully modern MSDN online. Printing might be easy in Word, but you just try to do it on a Windows platform with your own application in C... (project)
Developer's Commentary on TinyOS & NesC-- We've been working with TinyOS for about two years now. More often than not, we spend more time hunting for an API or "component" would have spent just writing the given function ourselves in regular C.

That having been said, we do like one aspect of TinyOS as it came with the Crossbow Mica2 development kits--they come with a packaged interface to the CC1000 radio control chip. But that is where the appreciation ends, and if were any more difficult we would build our own driver using the demo software provided by Chipcon.

We are people of action as much as words, so have written a new foundation for TinyOS and deployed it in several projects over the last year. The foundation seizes control of the familiar void main (void) and dominates the scheduler, giving the software engineer access to the system at its very core. Any experienced embedded programmer can now take this core and begin developing applications in a familiar way.

If you are an experienced embedded C programmer who is also chafing against TinyOS, feel free to drop us an Email so we can compare notes. Also feel free to download and examine the project source code as provided on the Articles & Papers page.


BAG -- Windows has the Registry, but an 8-bit controller sure doesn't. Here is a storage object written in C that allows you to easily save a retrieve data of arbitrary lengths.  A bag allows you to associate data with a key or "magic cookie."  Simply call BAG_PutTag to save your data, and BAG_GetTag to retrieve your data.  This software module is particularly useful with configurable embedded devices. 

                 Public Member Functions:

                           BOOL BAG_ClearAll(void);
                           BOOL BAG_DelTag(BYTE Tag);
                           BOOL BAG_PutTag(BYTE Tag,void* Buf,BYTE Len);
                           BOOL BAG_GetTag(BYTE Tag,void* Buf,BYTE BufLen);
                           BOOL BAG_Save(void);
                           BOOL BAG_Init(void);

            Click HERE to view the source code of the bag.
            Click HERE to download the bag project, which includes a sample program, header files, and sources.


EPRINTF.C -- The complete source code for an embeddable version of printf.  You will 
                          no longer need bulky libraries in your applications if you simply want printf
                          functionality.  Also, you can modifiy eprintf's behavior according to your needs. 
                         
(Source)


ENUM.EXE -- A command line utility for Win32 platforms is used to sequentially
                          rename a folder's contents.  This is used for file collections such
                          as graphics libraries, form letters, etc...
(Source)

   SYNTAX: ENUM type [preamble]

     

      EXAMPLE: enum jpg

      (This would enumerate all the jpeg files in a

       given directory as 1.jpg to n.jpg)

   

      EXAMPLE: enum jpg HIST

      (This would enumerate all the jpeg files in a

       given directory as HIST1.jpg to HISTn.jpg)




Oregon Embedded Development
Eugene, Oregon
Tel: 541-517-1210
Email Us

(C) 2006 Oregon Embedded Development