Designing and developing the complete ecosystem for a product in four months is no easy task. Hell, most people would struggle to get just the hardware to a production ready point in that time frame. This is why it is so important to make smart decisions about how you scope and design a product when you have very limited resources.
To this end, I'm starting with a working reference design's firmware and adding my special sauce on top. As mentioned previously, I'm using the TI SensorTag as my foundation. This board has a really great firmware that allows users to read all of the sensors as well as control IOs over a BLE link. You can find the original firmware in the BLE Stack from TI.
Since I'm using someone else's software, it's very important to understand how the software is licensed. Like much of TI's software, the BLE stack and it's examples are licensed under a "TI Commercial" license. Let's take a look at the meat and potatoes of it:
"The License limits your use, and you acknowledge, that the Software may not be modified, copied or distributed unless embedded on a Texas Instruments microcontroller or used solely and exclusively in conjunction with a Texas Instruments radio frequency transceiver, which is integrated into your product. Other than for the foregoing purpose, you may not use, reproduce, copy, prepare derivative works of, modify, distribute, perform, display or sell this Software and/or its documentation for any purpose."
If we boil this down to normal english, it basically says "as long as you're using this software on a TI device, you can do whatever you want with this code". Since, I'm building an ecosystem of software designed to run on a single device (which uses TI silicon), I should be OK. Additionally, any code I write myself on top of this code base I can license with a more standard open source license.
To finish up this first post on firmware, I've renamed the project, configured the board.h file, trimmed down the BLE stack package, and thrown it on github for everyone's enjoyment. You can find it here.
Please note that while this code was originally written for a TI SensorTag I have since modified it for the Polymorphic Dot. If compiled and flashed this code will not work with TI SensorTag EVM.