Release v0.4.12: Emergency bug fixes, filesystem access

A few quick bug fixes related to issues found in 0.4.11.

New features:

* `STO` and `RCL` to file (#375)
* Parsing of text containing quotes (#562)

Improvements:

* Rework file load/save dialog boxes
* Preliminary plumbing for statistics functions

Bugs:

* Error loading state files that contain directories (#559)
* Font setting for result was taken from editor font (#560)
* Crash running the `Shapes` demo (#563)

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
This commit is contained in:
Christophe de Dinechin 2023-11-13 09:55:35 +01:00
parent d04638f0f8
commit 5a2c710e49
6 changed files with 452 additions and 59 deletions

View file

@ -96,7 +96,7 @@ Vector and matrices follow their own arithmetic rules. Vectors are
one-dimensional, matrices are two-dimensional. DB48X also supports tables with a
higher number of dimensions, but only offers limited operations on them.
DB48X implements vector addition, subtraction, multipplication and division,
DB48X implements vector addition, subtraction, multiplication and division,
which apply component-wise. Multiplication and division are an extension
compared to the HP48.
@ -144,13 +144,15 @@ separated values, and is a common interchange format for spreadsheet data.
Here is an example of file that would let you have a units menu called `Money`
to convert between various monetary units:
`"Money"`
`"USD", "1_USD"`
`"EUR", "1.07_USD"`
`"GBP", "1.24_USD"`
`"CAD", "0.73_USD"`
`"AUD", "0.65_USD"`
`"CHF", "1.11_USD"`
```
"Money"
"USD", "1_USD"
"EUR", "1.07_USD"
"GBP", "1.24_USD"
"CAD", "0.73_USD"
"AUD", "0.65_USD"
"CHF", "1.11_USD"
```
* All values must be placed between quotes. Separators between text values are
mostly ignored.
@ -194,12 +196,14 @@ The menu name `"=Cycle"` is reserved to define sequences of units that the
`Cycle` command (bound to the _EEX_ key) will recognize as special. For example,
you can ensure that `mm` and `in` convert to one another as follows:
`"=Cycle"`
`"in", "mm"`
`"mm", "in"`
`"USD", "EUR"`
`"EUR", "CHF"`
`"CHF", "USD"`
```
"=Cycle"
"in", "mm"
"mm", "in"
"USD", "EUR"
"EUR", "CHF"
"CHF", "USD"
```
If you do provide a `Cycle` customization for a unit, other normal behaviours of
the `Cycle` command for units are disabled, notably conversion between various
@ -207,4 +211,6 @@ relevant scales and conversion between fractions and decimal. To force a
particular conversion to happen in decimal, you can override the definition of
the corresponding unit in the units file, for example:
`"in", "25.4_mm"`
```
"in", "25.4_mm"
```

View file

@ -1,12 +1,34 @@
# Release notes
Release 0.4.11: Debugging, Units, Settings
## Release v0.4.12: Emergency bug fixes
Release v0.4.12: Emergency bug fixes, filesystem access
A few quick bug fixes related to issues found in 0.4.11.
### New features
* `STO` and `RCL` to file (#375)
* Parsing of text containing quotes (#562)
### Improvements
* Rework file load/save dialog boxes
* Preliminary plumbing for statistics functions
### Bugs
* Error loading state files that contain directories (#559)
* Font setting for result was taken from editor font (#560)
* Crash running the `Shapes` demo (#563)
## Release 0.4.11: Debugging, Units, Settings
This release implements debugging, infinite RPL recursion, mixed
fractions, customizable units cycling, and restores missing entries in
the units menu.
## New features
### New features
* Allow customization of `Cycle` for units (#534)
* Allow infinite recursion in RPL code (#537)
@ -15,13 +37,13 @@ the units menu.
* `BeepOn` and `SilentBeepOn` features (#280)
* `ScreenCapture` and keyboard shortcut (#434)
## Bugs
### Bugs
* Accept `2.3 FIX` and `#0 Background` (#557)
* Do not parse `67.200525` as a `decimal32` (#551)
* Bump low battery voltage to 2.550V (#553)
## Improvements
### Improvements
* Catalog shows all commands *containing* typed text (#556)
* Reorganize the units menu (#550) and restore missing units
@ -33,3 +55,106 @@ the units menu.
* Remove the `execute()` RPL callback, rely on `evaluate()`
* Optimize allocation of 1-byte vs 2-byte opcodes
* Render `abs` as `abs` and not `norm` (accept `norm` while parsing)
## Release v0.4.10: Performance and units file
This release focuses on display performance optimization and support
for unit data files.
### New features
* Cycle command for units (#517)
* Possibility to load units from config/units.csv file (#496, #544)
* Internal: debug_printf facility (#541)
* ShowBuiltinUnits and HideBuiltinUnits settings (#542)
* Provide config/units.csv example file (#543)
* Build units menu from units file (#544)
### Bugs
* Possible memory corruption in expressions
* Calculator lock-up trying with unit conversions in numeric mode (#529)
* Numerator and divisor no longer truncated to 32-bit (#539)
* Correctly save LastArg for interactive operations (#540)
### Improvements
* Optimize the font cache, makes stack drawing faster in SCI mode (#526)
* Add TypeName to object menu (#527)
* Regroup units in units menu by scale (#528)
* Status of implementation and performance data in documentation (#530)
* Performance: Reduce frequency of busy cursor drawing (#531)
* Performance: Reimplement range-based type checkig (#532)
* Performance: Focused -O3 optimizations on DM42 (#533)
* Makefile: Install target installs demo and config (#547)
* Garbage collector for menu labels (#548)
## Release 0.4.9 - Support for units
This release focuses on support for units, but also adds a large number of other
fixes and improvements.
### New features
* Power-off message indicating low-battery situation (#521)
* Add ConvertToUnixPrefix command and SI prefix menu keys (#513)
* Recognize all units that exist in the HP48, and a few more (#491)
* UFACT (FactorUnit) command (#512)
* Unit simplification, e.g. turn 1_m^2*s/s/m into 1_m (#506)
* Converting unity units to numbers (#502)
* →Unit command (#501)
* UnitValue (UVAL) command (#493)
* Implement "kibibytes" (KiB) and power-of-two SI prefixes (#492)
* Unit arithmetic (#481)
* Add B->R and R->B to BasesMenu (#488)
* Implement term reordering capability in rewrite (#484)
* BaseUnits (UBase) command (#483)
* Unit parsing for complex units, e.g. 1_cm^2 (#482)
* Unit arithmetic (#481) including automatic conversions (#480)
* Convert command (#480)
* Implement the Cycle command for unit objects
* Add Å character for angstroem (#477)
* Add Merge state to State system menu (#475)
* Use Unicode font to display the name of a program when executing it (#469)
* Allow incremental search to find digits and Unicode (#468)
* Add tool glyph to user interface font
### Bug fixes
* Do not parse symbols beyond input buffer (#524)
* Parse unit menu entries as expressions, not symbols (#523)
* Fix reduced-precision arithmetic (#521)
* Do not parse empty denominator as zero, e.g. 2/s (#520)
* Do not parse a fraction inside a power, e.g. X^2/3 (#519)
* Convert fractions to decimal in numeric mode (#516)
* Do not emit mantissa_error for valid numbers (#515)
* Apply negation correctly on unit objects (#500)
* Do not emit separator after trailing 0 in integer decimals (#489)
* Do not emit extra spacing before decimal separator (#485)
* Fix stack depth in one error case of evaluate_function()
* Fix display of next/previous icons for large menus (#478)
* Clear settings when loading a state (#474)
* Fix separators in whole part of decimal numbers when setting is not 3 (#464)
* Parse (sin x)²+(cos x)² correctly, as well as HP67 Mach example (#427)
### Improvements
* Rename equation as expression (#518) and labelText as label_text
* Do not update LastArg except for command line (#511)
* ToolsMenu: Connect units to the UnitsConversionMenu (#514)
* Display unit using / and ·, e.g. 1_m·s^2/A (#507)
* Show units menu for inverse units as mm⁻¹ (#503)
* Display battery level more accurately, i.e. consider 2.6V "low" (#476)
* No longer acccept empty equations or parentheses, e.g. 1+() (#487)
* Make StandardDisplay mode obey MinimumSignificantDigits (#462)
* Add algebraic evaluation function for easier evaluation in C++ code
* Reimplement unit type as a derivative of complex (#471)
* documentation: Use 🟨 and 🟦 for more commands (#467)
* Swap Search and Copy commands in EditorMenu (#466)
* STO stores variables at beginning of directory (#462)
* documentation: Add quickstart guide, used for video recording
* documentation: Add links to YouTube videos
* documentation: Add release notes
* documentation: Some typos and other improvements
* documentation: Rework section on keyboard mappings

View file

@ -1599,7 +1599,7 @@ Vector and matrices follow their own arithmetic rules. Vectors are
one-dimensional, matrices are two-dimensional. DB48X also supports tables with a
higher number of dimensions, but only offers limited operations on them.
DB48X implements vector addition, subtraction, multipplication and division,
DB48X implements vector addition, subtraction, multiplication and division,
which apply component-wise. Multiplication and division are an extension
compared to the HP48.
@ -1647,13 +1647,15 @@ separated values, and is a common interchange format for spreadsheet data.
Here is an example of file that would let you have a units menu called `Money`
to convert between various monetary units:
`"Money"`
`"USD", "1_USD"`
`"EUR", "1.07_USD"`
`"GBP", "1.24_USD"`
`"CAD", "0.73_USD"`
`"AUD", "0.65_USD"`
`"CHF", "1.11_USD"`
```
"Money"
"USD", "1_USD"
"EUR", "1.07_USD"
"GBP", "1.24_USD"
"CAD", "0.73_USD"
"AUD", "0.65_USD"
"CHF", "1.11_USD"
```
* All values must be placed between quotes. Separators between text values are
mostly ignored.
@ -1697,12 +1699,14 @@ The menu name `"=Cycle"` is reserved to define sequences of units that the
`Cycle` command (bound to the _EEX_ key) will recognize as special. For example,
you can ensure that `mm` and `in` convert to one another as follows:
`"=Cycle"`
`"in", "mm"`
`"mm", "in"`
`"USD", "EUR"`
`"EUR", "CHF"`
`"CHF", "USD"`
```
"=Cycle"
"in", "mm"
"mm", "in"
"USD", "EUR"
"EUR", "CHF"
"CHF", "USD"
```
If you do provide a `Cycle` customization for a unit, other normal behaviours of
the `Cycle` command for units are disabled, notably conversion between various
@ -1710,16 +1714,40 @@ relevant scales and conversion between fractions and decimal. To force a
particular conversion to happen in decimal, you can override the definition of
the corresponding unit in the units file, for example:
`"in", "25.4_mm"`
```
"in", "25.4_mm"
```
# Release notes
Release 0.4.11: Debugging, Units, Settings
## Release v0.4.12: Emergency bug fixes
Release v0.4.12: Emergency bug fixes, filesystem access
A few quick bug fixes related to issues found in 0.4.11.
### New features
* `STO` and `RCL` to file (#375)
* Parsing of text containing quotes (#562)
### Improvements
* Rework file load/save dialog boxes
* Preliminary plumbing for statistics functions
### Bugs
* Error loading state files that contain directories (#559)
* Font setting for result was taken from editor font (#560)
* Crash running the `Shapes` demo (#563)
## Release 0.4.11: Debugging, Units, Settings
This release implements debugging, infinite RPL recursion, mixed
fractions, customizable units cycling, and restores missing entries in
the units menu.
## New features
### New features
* Allow customization of `Cycle` for units (#534)
* Allow infinite recursion in RPL code (#537)
@ -1728,13 +1756,13 @@ the units menu.
* `BeepOn` and `SilentBeepOn` features (#280)
* `ScreenCapture` and keyboard shortcut (#434)
## Bugs
### Bugs
* Accept `2.3 FIX` and `#0 Background` (#557)
* Do not parse `67.200525` as a `decimal32` (#551)
* Bump low battery voltage to 2.550V (#553)
## Improvements
### Improvements
* Catalog shows all commands *containing* typed text (#556)
* Reorganize the units menu (#550) and restore missing units
@ -1746,6 +1774,109 @@ the units menu.
* Remove the `execute()` RPL callback, rely on `evaluate()`
* Optimize allocation of 1-byte vs 2-byte opcodes
* Render `abs` as `abs` and not `norm` (accept `norm` while parsing)
## Release v0.4.10: Performance and units file
This release focuses on display performance optimization and support
for unit data files.
### New features
* Cycle command for units (#517)
* Possibility to load units from config/units.csv file (#496, #544)
* Internal: debug_printf facility (#541)
* ShowBuiltinUnits and HideBuiltinUnits settings (#542)
* Provide config/units.csv example file (#543)
* Build units menu from units file (#544)
### Bugs
* Possible memory corruption in expressions
* Calculator lock-up trying with unit conversions in numeric mode (#529)
* Numerator and divisor no longer truncated to 32-bit (#539)
* Correctly save LastArg for interactive operations (#540)
### Improvements
* Optimize the font cache, makes stack drawing faster in SCI mode (#526)
* Add TypeName to object menu (#527)
* Regroup units in units menu by scale (#528)
* Status of implementation and performance data in documentation (#530)
* Performance: Reduce frequency of busy cursor drawing (#531)
* Performance: Reimplement range-based type checkig (#532)
* Performance: Focused -O3 optimizations on DM42 (#533)
* Makefile: Install target installs demo and config (#547)
* Garbage collector for menu labels (#548)
## Release 0.4.9 - Support for units
This release focuses on support for units, but also adds a large number of other
fixes and improvements.
### New features
* Power-off message indicating low-battery situation (#521)
* Add ConvertToUnixPrefix command and SI prefix menu keys (#513)
* Recognize all units that exist in the HP48, and a few more (#491)
* UFACT (FactorUnit) command (#512)
* Unit simplification, e.g. turn 1_m^2*s/s/m into 1_m (#506)
* Converting unity units to numbers (#502)
* →Unit command (#501)
* UnitValue (UVAL) command (#493)
* Implement "kibibytes" (KiB) and power-of-two SI prefixes (#492)
* Unit arithmetic (#481)
* Add B->R and R->B to BasesMenu (#488)
* Implement term reordering capability in rewrite (#484)
* BaseUnits (UBase) command (#483)
* Unit parsing for complex units, e.g. 1_cm^2 (#482)
* Unit arithmetic (#481) including automatic conversions (#480)
* Convert command (#480)
* Implement the Cycle command for unit objects
* Add Å character for angstroem (#477)
* Add Merge state to State system menu (#475)
* Use Unicode font to display the name of a program when executing it (#469)
* Allow incremental search to find digits and Unicode (#468)
* Add tool glyph to user interface font
### Bug fixes
* Do not parse symbols beyond input buffer (#524)
* Parse unit menu entries as expressions, not symbols (#523)
* Fix reduced-precision arithmetic (#521)
* Do not parse empty denominator as zero, e.g. 2/s (#520)
* Do not parse a fraction inside a power, e.g. X^2/3 (#519)
* Convert fractions to decimal in numeric mode (#516)
* Do not emit mantissa_error for valid numbers (#515)
* Apply negation correctly on unit objects (#500)
* Do not emit separator after trailing 0 in integer decimals (#489)
* Do not emit extra spacing before decimal separator (#485)
* Fix stack depth in one error case of evaluate_function()
* Fix display of next/previous icons for large menus (#478)
* Clear settings when loading a state (#474)
* Fix separators in whole part of decimal numbers when setting is not 3 (#464)
* Parse (sin x)²+(cos x)² correctly, as well as HP67 Mach example (#427)
### Improvements
* Rename equation as expression (#518) and labelText as label_text
* Do not update LastArg except for command line (#511)
* ToolsMenu: Connect units to the UnitsConversionMenu (#514)
* Display unit using / and ·, e.g. 1_m·s^2/A (#507)
* Show units menu for inverse units as mm⁻¹ (#503)
* Display battery level more accurately, i.e. consider 2.6V "low" (#476)
* No longer acccept empty equations or parentheses, e.g. 1+() (#487)
* Make StandardDisplay mode obey MinimumSignificantDigits (#462)
* Add algebraic evaluation function for easier evaluation in C++ code
* Reimplement unit type as a derivative of complex (#471)
* documentation: Use 🟨 and 🟦 for more commands (#467)
* Swap Search and Copy commands in EditorMenu (#466)
* STO stores variables at beginning of directory (#462)
* documentation: Add quickstart guide, used for video recording
* documentation: Add links to YouTube videos
* documentation: Add release notes
* documentation: Some typos and other improvements
* documentation: Rework section on keyboard mappings
# Implementation status
This section documents the implementation status for all HP50 RPL commands as

View file

@ -1599,7 +1599,7 @@ Vector and matrices follow their own arithmetic rules. Vectors are
one-dimensional, matrices are two-dimensional. DB50X also supports tables with a
higher number of dimensions, but only offers limited operations on them.
DB50X implements vector addition, subtraction, multipplication and division,
DB50X implements vector addition, subtraction, multiplication and division,
which apply component-wise. Multiplication and division are an extension
compared to the HP48.
@ -1647,13 +1647,15 @@ separated values, and is a common interchange format for spreadsheet data.
Here is an example of file that would let you have a units menu called `Money`
to convert between various monetary units:
`"Money"`
`"USD", "1_USD"`
`"EUR", "1.07_USD"`
`"GBP", "1.24_USD"`
`"CAD", "0.73_USD"`
`"AUD", "0.65_USD"`
`"CHF", "1.11_USD"`
```
"Money"
"USD", "1_USD"
"EUR", "1.07_USD"
"GBP", "1.24_USD"
"CAD", "0.73_USD"
"AUD", "0.65_USD"
"CHF", "1.11_USD"
```
* All values must be placed between quotes. Separators between text values are
mostly ignored.
@ -1697,12 +1699,14 @@ The menu name `"=Cycle"` is reserved to define sequences of units that the
`Cycle` command (bound to the _EEX_ key) will recognize as special. For example,
you can ensure that `mm` and `in` convert to one another as follows:
`"=Cycle"`
`"in", "mm"`
`"mm", "in"`
`"USD", "EUR"`
`"EUR", "CHF"`
`"CHF", "USD"`
```
"=Cycle"
"in", "mm"
"mm", "in"
"USD", "EUR"
"EUR", "CHF"
"CHF", "USD"
```
If you do provide a `Cycle` customization for a unit, other normal behaviours of
the `Cycle` command for units are disabled, notably conversion between various
@ -1710,16 +1714,40 @@ relevant scales and conversion between fractions and decimal. To force a
particular conversion to happen in decimal, you can override the definition of
the corresponding unit in the units file, for example:
`"in", "25.4_mm"`
```
"in", "25.4_mm"
```
# Release notes
Release 0.4.11: Debugging, Units, Settings
## Release v0.4.12: Emergency bug fixes
Release v0.4.12: Emergency bug fixes, filesystem access
A few quick bug fixes related to issues found in 0.4.11.
### New features
* `STO` and `RCL` to file (#375)
* Parsing of text containing quotes (#562)
### Improvements
* Rework file load/save dialog boxes
* Preliminary plumbing for statistics functions
### Bugs
* Error loading state files that contain directories (#559)
* Font setting for result was taken from editor font (#560)
* Crash running the `Shapes` demo (#563)
## Release 0.4.11: Debugging, Units, Settings
This release implements debugging, infinite RPL recursion, mixed
fractions, customizable units cycling, and restores missing entries in
the units menu.
## New features
### New features
* Allow customization of `Cycle` for units (#534)
* Allow infinite recursion in RPL code (#537)
@ -1728,13 +1756,13 @@ the units menu.
* `BeepOn` and `SilentBeepOn` features (#280)
* `ScreenCapture` and keyboard shortcut (#434)
## Bugs
### Bugs
* Accept `2.3 FIX` and `#0 Background` (#557)
* Do not parse `67.200525` as a `decimal32` (#551)
* Bump low battery voltage to 2.550V (#553)
## Improvements
### Improvements
* Catalog shows all commands *containing* typed text (#556)
* Reorganize the units menu (#550) and restore missing units
@ -1746,6 +1774,109 @@ the units menu.
* Remove the `execute()` RPL callback, rely on `evaluate()`
* Optimize allocation of 1-byte vs 2-byte opcodes
* Render `abs` as `abs` and not `norm` (accept `norm` while parsing)
## Release v0.4.10: Performance and units file
This release focuses on display performance optimization and support
for unit data files.
### New features
* Cycle command for units (#517)
* Possibility to load units from config/units.csv file (#496, #544)
* Internal: debug_printf facility (#541)
* ShowBuiltinUnits and HideBuiltinUnits settings (#542)
* Provide config/units.csv example file (#543)
* Build units menu from units file (#544)
### Bugs
* Possible memory corruption in expressions
* Calculator lock-up trying with unit conversions in numeric mode (#529)
* Numerator and divisor no longer truncated to 32-bit (#539)
* Correctly save LastArg for interactive operations (#540)
### Improvements
* Optimize the font cache, makes stack drawing faster in SCI mode (#526)
* Add TypeName to object menu (#527)
* Regroup units in units menu by scale (#528)
* Status of implementation and performance data in documentation (#530)
* Performance: Reduce frequency of busy cursor drawing (#531)
* Performance: Reimplement range-based type checkig (#532)
* Performance: Focused -O3 optimizations on DM32 (#533)
* Makefile: Install target installs demo and config (#547)
* Garbage collector for menu labels (#548)
## Release 0.4.9 - Support for units
This release focuses on support for units, but also adds a large number of other
fixes and improvements.
### New features
* Power-off message indicating low-battery situation (#521)
* Add ConvertToUnixPrefix command and SI prefix menu keys (#513)
* Recognize all units that exist in the HP48, and a few more (#491)
* UFACT (FactorUnit) command (#512)
* Unit simplification, e.g. turn 1_m^2*s/s/m into 1_m (#506)
* Converting unity units to numbers (#502)
* →Unit command (#501)
* UnitValue (UVAL) command (#493)
* Implement "kibibytes" (KiB) and power-of-two SI prefixes (#492)
* Unit arithmetic (#481)
* Add B->R and R->B to BasesMenu (#488)
* Implement term reordering capability in rewrite (#484)
* BaseUnits (UBase) command (#483)
* Unit parsing for complex units, e.g. 1_cm^2 (#482)
* Unit arithmetic (#481) including automatic conversions (#480)
* Convert command (#480)
* Implement the Cycle command for unit objects
* Add Å character for angstroem (#477)
* Add Merge state to State system menu (#475)
* Use Unicode font to display the name of a program when executing it (#469)
* Allow incremental search to find digits and Unicode (#468)
* Add tool glyph to user interface font
### Bug fixes
* Do not parse symbols beyond input buffer (#524)
* Parse unit menu entries as expressions, not symbols (#523)
* Fix reduced-precision arithmetic (#521)
* Do not parse empty denominator as zero, e.g. 2/s (#520)
* Do not parse a fraction inside a power, e.g. X^2/3 (#519)
* Convert fractions to decimal in numeric mode (#516)
* Do not emit mantissa_error for valid numbers (#515)
* Apply negation correctly on unit objects (#500)
* Do not emit separator after trailing 0 in integer decimals (#489)
* Do not emit extra spacing before decimal separator (#485)
* Fix stack depth in one error case of evaluate_function()
* Fix display of next/previous icons for large menus (#478)
* Clear settings when loading a state (#474)
* Fix separators in whole part of decimal numbers when setting is not 3 (#464)
* Parse (sin x)²+(cos x)² correctly, as well as HP67 Mach example (#427)
### Improvements
* Rename equation as expression (#518) and labelText as label_text
* Do not update LastArg except for command line (#511)
* ToolsMenu: Connect units to the UnitsConversionMenu (#514)
* Display unit using / and ·, e.g. 1_m·s^2/A (#507)
* Show units menu for inverse units as mm⁻¹ (#503)
* Display battery level more accurately, i.e. consider 2.6V "low" (#476)
* No longer acccept empty equations or parentheses, e.g. 1+() (#487)
* Make StandardDisplay mode obey MinimumSignificantDigits (#462)
* Add algebraic evaluation function for easier evaluation in C++ code
* Reimplement unit type as a derivative of complex (#471)
* documentation: Use 🟨 and 🟦 for more commands (#467)
* Swap Search and Copy commands in EditorMenu (#466)
* STO stores variables at beginning of directory (#462)
* documentation: Add quickstart guide, used for video recording
* documentation: Add links to YouTube videos
* documentation: Add release notes
* documentation: Some typos and other improvements
* documentation: Rework section on keyboard mappings
# Implementation status
This section documents the implementation status for all HP50 RPL commands as

View file

@ -1,4 +1,4 @@
#define QSPI_DATA_SIZE 1545676
#define QSPI_DATA_SIZE 1548260
#define QSPI_DATA_CRC 0x000cfed6

View file

@ -1,4 +1,4 @@
#define QSPI_DATA_SIZE 1542508
#define QSPI_DATA_SIZE 1544940
#define QSPI_DATA_CRC 0x000cfed6