mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-08 05:39:09 -07:00
* adding smartrider_parser * adding SmartRider parser new parser for SmartRider cards, a public transport smart card system used in Western Australia. extracts and interprets key information from the card, including: -Current balance -Card serial number -Concession type -Purchase cost -Details of the last two trips (including tag on/off status, cost, route, transaction number, and journey number) * optimising - removed all logging to simplify output. - used early returns for clearer error handling. - optimized setups outside loops to improve memory use. - simplified flows by removing unnecessary loops. - placed variables closer to their use for better readability. - cached data blocks to streamline data handling. - added a helper function for parsing trips, reducing redundancy. - corrected loop counter types to avoid compile-time errors. * cleaning displayed data - removed transaction (txn) and journey (jrn) numbers to declutter the trip details. - shortened "previous trip" to "prev trip" to optimize screen space usage. * added and refined displayed data added auto load field "threshold amount / reload amount" changed serial to display first two digits as SR0 for consistency with physical card. * Format * Improved Verification Process - Added definitions for STANDARD_KEY_2 and STANDARD_KEY_3 - Enhanced smartrider_verify function to check for all three specific keys: - STANDARD_KEY_1 in Sector 0 as Key A - STANDARD_KEY_2 in Sector 6 as Key A - STANDARD_KEY_3 in Sector 6 as Key B - Implemented read operations to verify actual key values stored on the card - Added comparisons between read key data and expected key values - Improved debug logging for each step of the verification process * Integrated Verification into Parse Function - Added key verification for sectors 0 and 6 - Implemented do-while loop structure for early exit on verification failure - Moved block readability checks inside verification process - Added parsed flag to indicate successful parsing - Updated return value to reflect parsing success - Maintained existing parsing logic and output format * fixed false positives recieved some cuid cards today so was able to test for myself can confirm works... finally changes made: -updated key assignment in smartrider_read -simplified key verification in smartrider_parse -improved error handling and logging -streamlined data parsing process -corrected key checking logic -added checks for required block readability -improved flow control with strategic breaks -adjusted block data access method * small optimizations - refactored `smartrider_verify` and `smartrider_read` by abstracting repeated key operations into `authenticate_and_read` function for improved code maintainability. - optimized `smartrider_read` by introducing a loop for key setup, reducing redundancy and improving efficiency. - streamlined error handling in `smartrider_read` by replacing do-while loop with conditional checks. - changed standard key references to use `standard_keys` array indices * formatting * Delete duplicate smartrider.c * updated smartrider.c * found 'fbt format' * transaction parsing updates -removed last trip/prev trip wording and replaced with "Trip History" header -added date in front of each transaction -only shows transaction cost if it's higher than 0 -changed tag on/tag off to +/- to save room -added 8 more transactions to Trip History -verified still working and formatted with fbt * fixed reboot with partially unlocked card -added bounds checking for all block accesses to prevent out-of-range memory access -implemented improved error handling with an error_occurred flag -introduced a maximum iteration count for date calculation to prevent infinite loops -used snprintf with size limits for all string operations to avoid buffer overflows -added validation for trip count to ensure it doesn't exceed the maximum allowed -implemented checks to skip unread or out-of-range blocks during trip parsing -added safeguards against corrupted or invalid timestamp data * optimized SmartRider card parsing and verification - replaced do-while loop with direct error checks in smartrider_parse - optimized key verification using direct memcmp in smartrider_verify - introduced inline functions for common operations (e.g., set_key, read_le16) - replaced bubble sort with insertion sort for trip data - simplified date calculation using a lookup table for days in month - used uint_fast8_t for loop counters to allow compiler optimization - added __attribute__((hot)) to key functions for aggressive optimization - removed redundant variable declarations and function calls - optimized memory usage with static const arrays for required blocks - simplified error handling in smartrider_read and authenticate_and_read - used __builtin_memcpy and __builtin_memcmp for potential compiler optimizations - tested and formatted with fbt * small fixes -renamed "Trip History" to "Tag On/Off History" -fixed date calculation to account for leap years -misc changes * Update changelog --------- Co-authored-by: Willy-JL <49810075+Willy-JL@users.noreply.github.com>