= 2.19.0 = * Broadcast logging start/stop message to connected apps to trigger external logging * Fix little endian CAN bus mapping when in bit mode = 2.18.6 = * Fix edge case where firmware may crash if GPS data does not change while interpolating points = 2.18.4 = * Enable pit-to-car alert message CAN bus broadcast for app-based telemetry = 2.18.2 = * Predictive Timer: Fix time jumping at the end of a lap * OBDII: match PID responses to the configured CAN mapping ID, to account for standard as well as extended mapping responses * CAN: Set factory default CAN baud rate to 500K for CAN1, and 1MB for remaning CAN bus networks. * Lua: Add function to retrieve GPS X,Y,Z velocity to lua binding * Lua: Add hex formatting to string format function * API: Add txCan / rxCan for sending / receiving CAN messages directly from the RaceCapture app = 2.18.0= * IMU: Enable GSumPctMax and GSumMax channels to act as performance indicators within session * IMU: Offset Z axis to zero to compensate for gravity * IMU: Update Gsum calculation to include Z-axis, to account for hills / banked conditions * Core: Increment ElapsedTime on every sample to maximize analysis resolution * Telemetry: Enable 'reverse telemetry' to allow Podium to push timing/scoring data and more to device, to blend with regular telemetry * Lua: Fix issue with getAnalog not adding the offset for 'linear' mode inputs * Lua: Avoid nil on getChannelByName, if channel name exists * Lua: Expose GPS DOP to Lua * WiFi: Also perform a factory reset on WiFi module if user performs a factory reset on device * WiFi: help prevent WiFi from being stuck in a loop, preventing initializaton * Logging: Fix case where 10Hz sample rate logs at 5hz under certain circumstances * CAN: Broadcast pit-to-car alert message on CAN bus = 2.17.8= * Telemetry: Disable +URAT feature on 4G as it is not be supported by all carriers = 2.17.6= * Lua: Ensure factory reset also resets script, even in out of memory conditions * TrackMap: Ensure Lap target radius is within reasonable bounds * LapConfig: Ensure sample rates are consistent for Lap Timing * Core: Expand IMU device support * Telemetry: Configure 4G module based on settings from SIM card, for faster connection = 2.17.4= * Telemetry: Fix issue with telemetry failing if buffering is enabled + virtual channels present = 2.17.2= * Telemetry: Ensure telemetry stream starts correctly if no SD card is installed = 2.17.0= * Telemetry: Add telemetry buffering via SD card to account for marginal cellular conditions. * Core: improve testSD command = 2.16.0= * IMU: Add real-time Gsum channel * Core: Add metric/imperial switches for calculated Distance, GPS Speed, GPS Altitude * Core: Add ability to reset lap session via Lua or API (RaceCaptureApp) * Core: API to reset lap stats (via RaceCapture app) * Lua: Add resetLapStats() function to resetLapStats via scripting * LapStats: Add SessionTime channel * Telemetry: Add support for SARA R4 Cat M1 LTE * Telemetry: Speed up telemetry re-connect by not immediately power-cycling modem after a disconnect. * OBDII: Honor the CAN bus channel selected for OBDII broadcast and receive = 2.15.1= * Core: Ensure ShiftX configuration happens after ShiftX is booted and ready = 2.15.0= * Core: add support for ShiftX2/3 lua functions * Core: broadcast button events from ShiftX2/3 to connected clients for dashboard navigation * Lua: Reduce default memory limit back to safe level, add lua function to override limit * Lua: Add Gear calculation helper function * Lua: Add functions to support ShiftX3 * Config: Ensure we can configure maximum number of CAN channels without crashing firmware * Config: Fix error updating Track database under certain high memory usage conditions. (Reduce track DB to 50 tracks) * Config: Add ability to configure a fixed delay between OBDII queries to slow down OBDII engine, used for diagnostic purposes * GPS: Filter out GPS speed spikes = 2.14.0= * Core: Add support for pit-to-car alerting = 2.13.9= * lapStats: Prevent edge cases where incorrect timestamp prevents proper lap timing * lapStats: Require a minimum lap distance of 0.1Km to prevent false lap completion = 2.13.8= * GPS: Prevent coarse updating of distance for channel data * GPS: Limit interpolation to reasonable value = 2.13.7= * GPS: Upsample GPS if GPS source is slower than 10Hz, to improve lap timing accuracy and reliability = 2.13.6= * Builds for RaceCapture/Apex and PodiumConnect = 2.13.5 = * Core: Restore 2.12.x bit mode little endian behavior to resolve regression with E46 CAN bus * Core: Resolve logger crashing randomly when lap is completed * Core: Clean up Command Line Interface options, remove obsolete functions * Core: Add internal test function for stimulating lap timer = 2.13.4= * Builds for PodiumConnect = 2.13.3 = * GPS: Get UTC time directly from GPS driver * WiFi: Fix wifi initialization problem on WiFi modules running older firmware * Lua: prevent a critical Lua error if getchannel fails to find a channel by name; return nil instead. * Analog: Increase smoothing range by 2x = 2.13.1 = * Builds for RaceCapture/Apex and PodiumConnect = 2.13.0 = * Core: Ensure Distance channel is always enabled, even if hardware GPS is disabled * Core: Improve debouncing of front panel Action button * Core: Update firmware friendly name for RaceCapture/Track to RaceCapture/Track (was just RaceCapture) * Core: Properly Disable IMU channels if device does not support it * Core: Fix periodic crash/resets when uploading full configuration via bluetooth * Logging: Add GoPro camera control (experimental) * Logging: Ensure action button remains active if GPIO hardware isn't present * Logging: Enable auto-logger by default * Lua: current channel values in Lua (inc. direct CAN mapping) * Lua: Increase Lua memory availability by 20% * CAN Mapping: Properly decode bit mode little endian values * CAN Mapping: Add sub-id CAN mapping capabilities * OBDII: Ensure OBDII PID mode is returned as unsigned value * OBDII: Support additional OBDII modes * Telemetry: Set UTC time from telemetry link if UTC time isn't locally available * Cellular: Improve cell module connection time by reducing time lingering when cell module is in a bad state * Cellular: read signal strength after registered on network to ensure getting a valid value * Cellular: Switch default APN to FreedomPop = 2.12.0 = * Added obd2 channels capacity in getCapabilities API #940 * Increase number of OBDII channels from 5 to 10 for RaceCapture/Track; 10 to 20 for RaceCapture/Pro #936 * Increase number of direct CAN mapping channels from 5 to 10 for RaceCapture/Track #936 * Switch to newlib nano toolchain to conserve memory #904 * Increased memory savings in RAM and flash #904 * Allow any OBDII mode, treating any mode not 0x01 as an 'enhanced data request', enabling mode 0x23, etc. #915 * Support 32 bit PID requests #924 * Auto detection of 29 bit OBDII vehicles to support Honda, and similar #890 * Add lua function to expose current predictive time #929 * Ensure RELEASE_TYPE_BETA correctly enables watchdog #935 * Ensure direct CAN mapping channels are initialized to 0 after they are added #930 * Resolve pulse per revolution < 1 issue with Lua bindings around getTimerRPM and related functions #928 * Ensure direct CAN channels are registered correctly when uploaded to unit #927 * Fix incorrect direct can mapping with bit mode and big endian #926 * Complete missing implementation of slow counter mode for timer channels #925 * Prevent false-positive error reading phone number from SIM before cell module is ready #923 * Increase OBDII query timeout to 500ms to account for certain ECUs that require longer queries #922 * Complete missing implementation for passive mode OBDII #920 * Increase robustness of GPS initialization #919 * Rename .zip artifact for RaceCapture/Track to RaceCaptureTrack to correctly identify product #914 * Improve debounce logic for new switch on RCP MK3 #901 = 2.11.0 = * Fixed Backwards X/Y IMU channel for RaceCapture/Track * Make precision on gyro channels (yaw / pitch / roll ) zero position * Final updates / bug fixes on OBDII channel mapping = 2.11.0 RC1 = * RCP MK3 support * direct CAN mapping support * OBDII PID mapping support * Predictive timer requires high quality GPS data = 2.10.2 = * Fixed OBDII Stack Smash issue on RCT * Fixed version printing information to reflect git tags * Fixed LUA Raw character handling regression * Fixed LUA readSer regression = 2.10.1 = * Fixed SIM900 failure to connect issue. * Fix below sea level altitude issue. * Fix AT parsing bug in cellular for IMEI. * Fix battery voltage reading issue in RaceCapture devices. * Improve handling of invalid JSON characters when both encoding and decoding JSON messages. * Fix SD card logging bug where we could log sample out of order at the beginning of the log file. * Improve track selection algorithm upon track detection . = 2.10.0 = * RaceCapture supported! * Reduction of stack sizes to improve RAM usage * WiFi support * TCP socket support * Streaming telemetry over Wifi Support * IOCTL support for all communications channels * Added support for Bluetooth baud rate to adjust to 230400. Will become default in 2.11.0 * Changed distance calculation to integration of speed over time instead of point to point measurement. * Improved usage of newlib libc to reduce code duplication internally. * Upgraded SD card driver and FATFS subsystem. Result is a very stable SD card system. * Created new AT subsystem for use with all AT modems (ESP8266, U-Blox). Used with ESP8266 currently. * Audited and fixed all IRQ values to be lower than those of FreeRTOS to ensure no interrupt conflicts. * Added debug builds for all dev builds with ASSERT support to help find hidden bugs early. * Moved all UART communication to DMA, reducing interrupt rates as much as 32x. * Improved testing on API calls to help avoid future regressions. * Boot loader fixes to work around small bugs in USB. * LUA now supports scripts without the `onTick` method as one time only * Make builds binary identical across platform to help with debugging. * Add `setActiveTrack` API to allow app to override active track to improve user experience. * Adjusted timer to support measuring of slow rotation rates (down to 1/10 Hz) * Added auto-logger support, a new subsystem that start/stops file logging based on speed and time parameters * Added basic metric support to GPS page for European customers. * Added Serial Logging support to be able to debug any serial port during run time. * Added capabilites flags to firmware. Useful for determining what the firmware supports. = 2.9.2 = * Reduce the size of the DMA buffer to ensure small GPS messages are received. * Add 'break;' statements in timer init to use user setting and not fall into the default value of "medium". * Improve the processing of GPS stream data to not require start of message to be aligned on even bytes. * Added delays to GPS command responses so we can be sure the GPS chips is caught up before the next command is sent. Otherwise we see sporadic failures. * Fix a bitwise bug logic in the USART init code. This would incorretly enable usart interrupts on usart channels where DMA was used. * Fixed compilation on GCC 6 toolchain. * Verified that USB only power no longer causes the unit to hang. = 2.9.1 = * Added CHAP support for APN authentication on 3G modem. This is activated when user provides an APN password. https://github.com/autosportlabs/RaceCapture-Pro_firmware/issues/619 * Improved SD Card operations by removing duplicate initialization issue and removing unnecessary critical task guards which lead to long system pauses. Other pauses remain, but the SD card logging no longer blocks preemption. https://github.com/autosportlabs/RaceCapture-Pro_firmware/issues/571 * Back ported fix for the dual malloc issue. We were unintentionally running both the FreeRTOS allocator and the glibc allocator. Fortunately this did not cause issues because we made very limited use of the glibc allocator. This patch adds the code so that we always use the FreeRTOS allocator, even if we use glibc malloc/realloc/calloc/free calls. https://github.com/autosportlabs/RaceCapture-Pro_firmware/issues/565 * Fixed issue in USART on MK2 where an improper clearing of the ORE flag could cause the system to lock up and watchdog. https://github.com/autosportlabs/RaceCapture-Pro_firmware/issues/562 * Removed unused CAN TX queues in MK2 hal to improve memory https://github.com/autosportlabs/RaceCapture-Pro_firmware/issues/553 * Fixed invalid status return value when timeout = 0 on CAN TX invocation. Now we return a useful status, informing the caller of whether or not the message was added to the mailbox to send. https://github.com/autosportlabs/RaceCapture-Pro_firmware/issues/549 * Drastically improved Lua GC behavior; built Lua Test script to prove it. https://github.com/autosportlabs/RaceCapture-Pro_firmware/issues/476 = 2.9.0 = * Fixed Lua stack overflow bug by increasing Lua Stack size (Issue #411) * Fixed timer input so it resets to 0 when no input detected (Issue #418) * Added RPM filtering in software to get rid of unrealistic engine speed values (Issue #430). NOTE: The new quiet period logic uses your maximum and pulse per revolution values to calculate the quiet period. Ensure your maximum RPM and pulse per revolution values are set correctly. * Fixed Lua onTick timing bug that was causing Lua to wait longer than it should between onTick events. (Issue #433) * Quieted various Lua memory alloc/free messages (Issue #410) * Fixed virtual channel issue where if the virtual channel sample rate was faster than other channels, it would not record. (Issue #444) * Added new OBD-II PIDs into our OBD-II system. Special thanks to Justin Imhoff (https://github.com/imhoffj) for the patch. * Improved `addChannel` method in Lua environment to validate all inputs. Now it will error with detailed information if a user supplies an invalid input parameter or an invalid sample rate. (Issue #424) * Fix USB suspend bug that causes device to go non-responsive when put into suspend mode. (Issue #426) * Fixed timer prescalar skew caused by varying timer speeds settings. Now all timer speeds report correct values (when frequency is within the timer measurement range of course. A good test is 100Hz). (Issue #435) * Fixed telemetry destination. Currently set to telemetry.race-capture.com (Issue #341) * Removed MK1 platform from build tree. * Improve unit test infrastructure to compile all firmware code strictly in C (was C compiled as C++) and test accordingly. * Improved unit test platform to be able to directly include C files to test static methods and other non-visible methods as part of the unit test suite. * Fixed serial device pass-through watchdog event. (Issue #352) * Remove obd2SampleRate structure from LoggerConfig since deprecated (Issue #164) * Standardized accelerometer on SAE J670E vector axis spec and adjusted internal mappings of RCP units to ensure that default orientation of MK2 matches this exactly. * Added Lua method to get GPS altitude in Lua runtime. (Issue #397) * Fixed timeout support on Lua CAN tx method. (Issue #404) * Merged RaceCapture codebase into this mainline project. * Add dynamic cellular modem support. This allows us to support both our current sim900 card and the new ublox-sara 3G cards. (Issue #182) * Added support for up to 100 virtual channels in Lua. Up from 30. (Issue #414) * Adjusted internal process priorities so that the logging snapshot process runs with this highest priority. This is to ensure that we never miss time a snap-shot operation. * Improve `onTick` method in Lua to be able to run at 1000Hz maximum rate. Not gauranteed to run at that rate (depends on how much Lua code there is to parse) but local testing shows its possible to do if code is optimized. (Issue #423) * Added a new `getChannel` method in Lua so users don't have to maintain virtual channel values in Lua environment variables if they want to later calculate additional channels using the recorded virtual channel values. (Issue #456) * Add additional version information to the firmware. Now include build type (release, beta, dev) and a git description string. (Issue #436) * Fixed up LED mappings, added deterministic LED control code to firmware. This prevents us from turning the wrong LED on or off due to different LED mappings between RaceCapture platforms. (Issue #437) * Fixed up Lua setLed method to be consistent on which LED is set and to also allow the user to specify an LED based on a string identifier to be able to control it. (Issue #437) * Improved our timer by adding support for selecting which edge we want to use for timing measurements (Default is falling). Also allows the user to specify the a quiet period for filtering if they wish to override the automatically calculated value. A value of 0 will disable the filtering altogether. A value < 0 sets the code into automatic calculation mode. (Issue #464) * Fixed OBD-II speed conversion from kph to mph === 2.8.7 === * Properly handle analog linear scaling offset value. * Report correct min/max values in logfile. * Updated telemetry destination to work better with caching services. * Remove MK1 code from mainstream dev tree and migrate to legacy branch. * Fixes a bug in start logic in the lap_stats code and adds 12 new unit tests to better ensure the stability of that code. * Fix predictive time unit by having it return 0 when not in operation. Otherwise it can return invalid data. * Converted Lua base number to double from float (allows 29 bit CAN IDs to work correctly). * Added Lua bitOp bitwise operations * Fixes a bug in start logic in the lap_stats code and adds 12 new unit tests to better ensure the stability of that code. === 2.8.6 === * Make OBD-II engine report temperature and speed that match channel defaults (deg. F / MPH) * Improved accuracy of IMU === 2.8.5 === * Increased GPS task stack size from 200 to 256 to prevent HULK smash. * Increased printing precision in LUA from 3 to 6 decimal places (as needed). * Fixed a bug in LUA libraries. Now functions like `math.sin()` no longer cause the interpreter to crash. * Prevent OBD-II channels from being included if OBD-II is disabled * Expanded track detection radius from 1 KM to 5 KM to handle cases when users are pitted far away from start/finish * Release more RAM up by disabling LUA prior to flashing script. This fixes many MK1 issues reported by customers when resetting or programming LUA. * Fix intermittent hang due to USART receive overflow interrupt storm * Add in LUA garbage collection parameters to help LUA work in high memory pressure situations * Reduce max LUA script size on MK1 to 4K for stability reasons and increased max script size on MK2 to 16K. This will result in the LUA script being restored to the default. Please back up your scripts prior to upgrading. * Fix sector bug with no sector definitions. Now sectors will not arbitrarily count up. === 2.8.4 === * Background streaming switch only affects telemetry link; Wireless (Bluetooth) link always streams * Fixed duplicate log file issue * Fixed filtering of 500 and 1000 Hz sample rates when config is applied * Improved tolerance and recovery to SD card write/eject/reinsertion * Reset CPU after we load factory defaults * Reduce MK1 firmware size by over 15K by removing unneeded symbols in LUA lib. * Fixed handling of extended CAN IDs * Added Lua serial api for initializing serial port and character based reading / writing * Added getUptime LUA method to get system uptime * Added getDateTime LUA method to get date and time info. Returns in format year, month, day, hour, minute, second, millisecond. * Fixed invalid data print out bug during slow SD Card init * Fixed meta fields in log file being corrupted during printout. * Fixed no SPI lock issue on MK1 hardware for f_write call. === 2.8.3 === * Read cell module stats before checking if on network * Extend heartbeat timeout to 60 seconds to allow more margin * Correctly handle threshold for bad telemetry messsages, preventing unnecessary re-connects === 2.8.2 === * Improved reliability of GPS initialization === 2.8.1 === * Improved reliability of BT initialization process === 2.8.0 === * Refactor stage logic to support multiple stage runs without restarting unit. * Add support for predictive timing in stage runs (same restrictions & rules apply as in circuit racing). * Replace start/finish cool off timer with geoTrigger to prevent false start/finish events when driver is stuck at start/finish for whatever reason. * Add the elapsed channel. This channel provides the time elapsed since the lap first began in minutes. Useful for seeing current lap time of the driver. * Add the CurrentLap channel. Increments when lap timing starts; as opposed to LapCount which increments when the lap completes. * Configure GPS module to select native upate rate to match selected sample rate * Lua script automatically re-runs when re-written and flashed * Fixed virtual channel name overrun * Enhanced re-connection logic via heartbeat message ===2.7.9=== * Improved GPS processing performance, reduced chances of dropped packets from module. * Bumped fast-link telemetry (i.e. Bluetooth link) to 50Hz. * Reduced delay between PID querying for MK2 * Fixed OBD-II PID configuration message handling for PID counts > 8. PIDs limited to 10 until app supports sending PID configuration in batches * IMU calibration correctly accounts for physical channel re-mapping * Guard against floating point overflow for setting configuration options * Fixed issue where writing IMU config caused subsequent errors in IMU output ===2.7.8=== * Fixed start/finish line detection for MK1 * Added getGpsSats as a Lua function * Make max virtual channels configurable betwen MK1 (10 max) and MK2 (30 max) * Fix sector bug so sector now goes to 0 when start/finish is crossed the first time. ===2.7.7=== * Allow cell module to connect to roaming network (roaming charges may apply) * MK1: fix RPM stuck at zero if RPM signal is applied before RCP unit is powered up * PWM clock frequency now settable via Lua script, was fixed at 20KHz before. ===2.7.6=== * Ensure timestamps show on every sample, regardless of sample rate combinations * Fixes / updates for MK1 release * 2nd CAN channel not set correctly via API * IMU channel filtering was resetting Pitch and Roll physical mappings to Yaw channel ===2.7.5=== * Allow watchdog reset to prevent Lua from running script in case lua script was responsible for watchdog * Adjusted USB and I2C interrupt priority to reduce the chance of hard faults * Virtual Channel: encoding of sample rate incorrect, preventing SD logging in many cases * Virtual Channel: if re-adding a virtual channel with the same name, update the standing channel with updated settings ===2.7.4=== * Fixed addChannel() return value upon successful creation of channel ===2.7.3=== * Padded all OBDII PID requests with 0x55 to the full 8 byte message for maximum ECU compatibility. * Corrected Lua initCAN() api call to match documentation * Fixed GPS Distance bug. Now provided in Miles instead of Km (Because I get 40 rods to the Hogs head and that's the way I likes it...) ===2.7.2=== Only disconnect telemetry upon sustained (10) malformed API message. Resend metadata if telemetry connection is restarted. ===2.7.1=== Initial release of MK2 firmware =======MK2 Release======= ===2.0.8=== Switched Analog Raw mode to a more meaningful 0-5v mode Cellular telemetry mode off with default config ===2.0.7=== Updates for UNIX epoch timestamp initialization Fixed default script flashing ===2.0.6=== Source Code organization ===2.0.5=== If Lua Script crashes firmware and watchdog timer resets, prevent script from running again enabling a recovery mode. When recovery mode is activated, Red LED is activated. ===2.0.4=== removed trivial optimization that prevented correct logging at 10Hz and possibly other Hz. ===2.0.0=== Major release - new JSON API, predictive timing, virtual channels, CAN and OBD2 support. ===1.2.7=== RPM/Timer input value now goes to zero when input signal goes away (i.e. when internal timer counter overflows) Fixed problem where zero values in log file were not being recorded (treated as nulls) Optimized code that read channels and populated the sample record object. Auto file recovery attempt if file write error occurs; falls back to creating a new log file if it cannot auto-recover. Improved SD performance/reliability when writing at high logging rates (>=100Hz) Updated to ChanFS 0.10 ===1.2.6=== Fixed problem where saving an empty lua script caused garbage script to be saved Trimmed clock frequency to make logging more accurate (was about 1% off) Fixed error around omitting samples if samples did not fall on even sample boundaries (specific problem with 30Hz sampling rate) Implemented experimental 200Hz logging rate Switched OS preemption tick rate from 300Hz to 200Hz (performance optimization) Only poll the ADCs when the sample record needs to be written (performance optimziation) Removed AccelInstalled configuration feature (Accelerometer is always installed) ===1.2.5=== Implemented smoothing algorithm for accelerometer channels using Exponential Moving Average IIR filter Continuous streaming via connectivity port - added start/stop logging messages Implemented rate limiting for cellular telemetry & bluetooth - bluetooth limited to 50Hz, Cellular 10Hz. SD still logs at configured rate. Various code improvements / internal architecture ===1.2.4=== Bluetooth provisioning only attempts once before falling through - to deal with cases if Bluetooth is already connected and can't respond to AT commands ===1.2.3=== Added support for RaceCapture Mobile app and Petrel Data Solo Storm Redesigned Bluetooth / telemetry streaming API to 2.2 ===1.1.14=== Added - and : characters as allowed characters in filtered text fields ===1.1.13=== Fixed 10% too fast logging rate (improved dramatically but still seems about 0.5 - 1% off; needs measurement on scope for fine tuning) Fixed analog scaling divide by zero issue with raw values outside of configured scaling map Fixed accelerometer mappings for invert settings and changed mapping to match industry standards More JSON APIs implemented ===1.1.12=== Fixed regression in cellular APN initialization Additional JSON API Additional fixes around scaling value on timer channels ===1.1.11=== Fixed issue where timer scaling was not being recalculated upon changes to pulse per revolution Work in progress for new JSON API to enable mobile app Initial work for making cellular modem APN configurable ===1.1.10=== Fixed periodic glitch in accelerometer readings Fixed periodic SD card file corruption Disabled accelerometer averaging based on user feedback Added beginning of logging infrastructure ===1.1.9=== Fixed corrupted data in analog and timer channels when logging precision is zero ===1.1.8=== PWM fixes (logical -> hardware channel mapping was wrong) and general refactoring Various changes to support testability Fixed up modp_ftoa temporarily to deal with overflow condition (0xDEADBEEF) Added lua garbage collect before processing interactive command ===1.1.7=== added metadata preamble to telemetry stream expanded default GPS target radius to 0.0004 degrees ===1.1.6=== fixed bug in split time data logging (float vs int) ===1.1.5=== removed gps quality field added split time configuration, detection and logging field fixed usb comm race issue ===1.1.3=== Fixed lua binding range check issues ===1.1.2=== Fixed accelerometer calibration issues ===1.1.1=== * changed to use new bootloader. install bootloader using SAM-BA then use bootloader to flash RaceCapture/Pro firmware * Fixed SD card compatibility issue * added metadata in header for CSV file format ===0.4.0=== * added bluetooth module telemetry/connectivity * fixed yaw sensor calibration * other fixes ===0.3.4=== - Handles no telemetry authorizations scenario correctly ===0.3.3=== - Added wait for telemetry authorization in cellTelemetry.c ===0.3.2=== - Fixed bug where telemetry task would not start ===0.3.1=== - Select telemetry logging mode at strup based on configuration - Fixed SD card detection / init bug - Removed extraneous debug code - Removed activation of LED3 during cellular initialization ===0.3.0=== - initial cut of cellular telemetry - refactored P2P telemetry into it's own module - removed a stray debug output in the SD writing routine ===0.2.0=== - Various fixes/ updates to support RaceAnalyzer application - Fixed script flashing routine - Added sample runtime channels