We are looking for an embedded C++ developer to create a small library for a specific USB functionality for the LPC17xx family of MCUs ( Cortex-M3 ).
User-side functionality :
The library must allow the LPC17xx chip, when connected to the PC via it’s USB pins, to show up as TWO usb devices :
* One USB Serial (CDC) device
* One USB MSC (Mass Storage Controller) device
Showing up as one or the other is very simple, example source code is available on the internet to do so ( example : [url removed, login to view] ). The complicated feature here is to have both devices at the same time on the same USB cable ( Composite ). However this is known to be possible ( Search Google, examples : [url removed, login to view], [url removed, login to view], [url removed, login to view], [url removed, login to view] ).
This functionality must work when connected to PCs under Windows, Mac, and Linux.
Developer-side functionality :
We have very strict requirements as to what the API to this library should look like.
Basically your work on a Composite device will be used to replace two currently separate libraries we use, so your library will have to provide exactly the same interface in order to be a drop-in replacement inside our current code.
* On the Serial side, your code will have to implement the same interface as this : [url removed, login to view], including all methods, and interrupt handling. Your library will have to be in Object-Oriented form, extending the same object as mBed’s Serial object : the Stream object ( [url removed, login to view] ).
* On the Mass Storage side, you will have to implement several interrupt handlers ( for when a file is opened, closed, etc ... using [url removed, login to view] ), and must access the various possible file systems using the standard mBed file interface ( of which you can see an example here : [url removed, login to view] ).
Your code will have to be provided with a simple example covering all functionality. It will have to compile with CodeSourcery’s free GCC Toolchain, and run on both mBed ( LPC1768 ) and LPCXpresso ( LPC1769 ). In order to interface with mBed functionality you will have to use the GCC4MBED project ( [url removed, login to view] ).
You will be provided with all required materials, namely : An LPCXpresso-LPC1769, a Serial-to-USB converter cable for debugging, an USB-B Breakout board, a SD-Card breakout board, a SD Card, and wires. They will have to be returned upon completion of the project.
Code quality :
You are expected to
* Write Object-Oriented, well commented code
* Be available for any question on your code
* Thoroughly test your code
* Be available for bug correction even after the project has been completed
* Communicate in a regular fashion ( disappearing for several days, not answering emails, etc ... will result in project cancellation ). This includes emailing even if you are late or have not made progress. This is extremely important.
* Re-use as much of existing open source code as possible, knowing that the final code will itself be open source. This is very important to reduce the quantity of required work.
* Write code that achieves maximal possible performance. This includes using DMA if possible.
* Ideally you should have previous experience with coding for USB on Cortex-M3 devices. If you do please mention it in your bid.
Please ask by Private Message if you have any question.
The bid that will be chosen will be the lowest bid amongst those that prove they understand what is needed and demonstrate they are capable of doing it.