|
1 | 1 | #include "emmc_commands.h" |
2 | 2 | #include "emmc_commands_macros.h" |
3 | 3 |
|
| 4 | +#include "bootui.h" |
4 | 5 | #include "fw_keys.h" |
5 | 6 | #include "se_thd89.h" |
6 | 7 | #include "thd89_boot.h" |
7 | 8 |
|
8 | 9 | // ######## global vars ######## |
9 | 10 | // SDRAM BUFFER |
10 | 11 | bootloader_buffer* bl_buffer = (bootloader_buffer*)FMC_SDRAM_BOOLOADER_BUFFER_ADDRESS; |
11 | | -// UI progesss |
12 | | -bool ui_progress_bar_visible = false; |
13 | 12 |
|
14 | | -// ######## helpers ######## |
| 13 | +static int ui_progress_bar_handle_update(int percentage, const char* title) |
| 14 | +{ |
| 15 | + static uint32_t ui_percentage_last = 0xff; |
| 16 | + char* progress_title = (char*)((title != NULL) ? title : "Transferring Data"); |
| 17 | + |
| 18 | + if ( (percentage < 0) || (percentage > 100) ) |
| 19 | + { |
| 20 | + return -1; |
| 21 | + } |
| 22 | + |
| 23 | + if ( ui_percentage_last == (uint32_t)percentage ) |
| 24 | + { |
| 25 | + return 0; |
| 26 | + } |
| 27 | + |
| 28 | + ui_percentage_last = (uint32_t)percentage; |
| 29 | + |
| 30 | + if ( percentage < 100 ) |
| 31 | + { |
| 32 | + ui_screen_progress_bar_update(progress_title, NULL, percentage); |
| 33 | + } |
| 34 | + else |
| 35 | + { |
| 36 | + ui_screen_progress_bar_update(progress_title, NULL, percentage); |
| 37 | + ui_fadeout(); |
| 38 | + ui_bootloader_first(NULL); |
| 39 | + ui_fadein(); |
| 40 | + } |
15 | 41 |
|
16 | | -void ui_progress_bar_visible_clear() |
| 42 | + return 0; |
| 43 | +} |
| 44 | + |
| 45 | +static void ui_progress_bar_handle_clear(void) |
17 | 46 | { |
18 | | - ui_progress_bar_visible = false; |
| 47 | + ui_progress_bar_visible_clear(); |
| 48 | + display_clear(); |
| 49 | + ui_bootloader_first(NULL); |
19 | 50 | } |
20 | 51 |
|
21 | 52 | static void packet_generate_first( |
@@ -1701,58 +1732,16 @@ int process_msg_EmmcFileRead(uint8_t iface_num, uint32_t msg_size, uint8_t* buf) |
1701 | 1732 | // (requester intersted) size |
1702 | 1733 | if ( msg_recv.has_ui_percentage ) |
1703 | 1734 | { |
1704 | | - char ui_progress_title[] = "Transferring Data"; |
1705 | | - |
1706 | | - // sanity check |
1707 | | - if ( (msg_recv.ui_percentage < 0) || (msg_recv.ui_percentage > 100) ) |
| 1735 | + const char* progress_title = "Transferring Data"; |
| 1736 | + if ( ui_progress_bar_handle_update(msg_recv.ui_percentage, progress_title) != 0 ) |
1708 | 1737 | { |
1709 | 1738 | send_failure(iface_num, FailureType_Failure_ProcessError, "Percentage invalid!"); |
1710 | 1739 | return -1; |
1711 | 1740 | } |
1712 | | - |
1713 | | - else if ( msg_recv.ui_percentage < 100 ) |
1714 | | - { |
1715 | | - if ( !ui_progress_bar_visible ) |
1716 | | - { |
1717 | | - ui_fadeout(); |
1718 | | - ui_screen_progress_bar_prepare(ui_progress_title, NULL); |
1719 | | - ui_fadein(); |
1720 | | - ui_screen_progress_bar_update(NULL, NULL, msg_recv.ui_percentage); |
1721 | | - ui_progress_bar_visible = true; |
1722 | | - } |
1723 | | - else |
1724 | | - ui_screen_progress_bar_update(NULL, NULL, msg_recv.ui_percentage); |
1725 | | - } |
1726 | | - else if ( msg_recv.ui_percentage == 100 ) |
1727 | | - { |
1728 | | - if ( !ui_progress_bar_visible ) |
1729 | | - { |
1730 | | - // this is for the instant 100% case, which happens if the file is too |
1731 | | - // small |
1732 | | - ui_fadeout(); |
1733 | | - ui_screen_progress_bar_prepare(ui_progress_title, NULL); |
1734 | | - ui_screen_progress_bar_update(NULL, NULL, msg_recv.ui_percentage); |
1735 | | - ui_fadein(); |
1736 | | - } |
1737 | | - else |
1738 | | - { |
1739 | | - // normal path |
1740 | | - ui_screen_progress_bar_update(NULL, NULL, msg_recv.ui_percentage); |
1741 | | - ui_progress_bar_visible = false; |
1742 | | - } |
1743 | | - ui_fadeout(); |
1744 | | - ui_bootloader_first(NULL); |
1745 | | - ui_fadein(); |
1746 | | - } |
1747 | 1741 | } |
1748 | 1742 | else |
1749 | 1743 | { |
1750 | | - if ( ui_progress_bar_visible ) |
1751 | | - { |
1752 | | - ui_progress_bar_visible = false; |
1753 | | - display_clear(); |
1754 | | - ui_bootloader_first(NULL); |
1755 | | - } |
| 1744 | + ui_progress_bar_handle_clear(); |
1756 | 1745 | } |
1757 | 1746 |
|
1758 | 1747 | // get file info |
@@ -1853,69 +1842,16 @@ int process_msg_EmmcFileWrite(uint8_t iface_num, uint32_t msg_size, uint8_t* buf |
1853 | 1842 | // (requester intersted) size |
1854 | 1843 | if ( msg_recv.has_ui_percentage ) |
1855 | 1844 | { |
1856 | | - char ui_progress_title[] = "Transferring Data"; |
1857 | | - |
1858 | | - static uint32_t ui_percentage_last = 0xff; |
1859 | | - |
1860 | | - // sanity check |
1861 | | - if ( (msg_recv.ui_percentage < 0) || (msg_recv.ui_percentage > 100) ) |
| 1845 | + const char* progress_title = "Transferring Data"; |
| 1846 | + if ( ui_progress_bar_handle_update(msg_recv.ui_percentage, progress_title) != 0 ) |
1862 | 1847 | { |
1863 | 1848 | send_failure(iface_num, FailureType_Failure_ProcessError, "Percentage invalid!"); |
1864 | 1849 | return -1; |
1865 | 1850 | } |
1866 | | - else if ( msg_recv.ui_percentage < 100 ) |
1867 | | - { |
1868 | | - if ( ui_percentage_last != msg_recv.ui_percentage ) |
1869 | | - { |
1870 | | - ui_percentage_last = msg_recv.ui_percentage; |
1871 | | - if ( !ui_progress_bar_visible ) |
1872 | | - { |
1873 | | - ui_fadeout(); |
1874 | | - ui_screen_progress_bar_prepare(ui_progress_title, NULL); |
1875 | | - ui_fadein(); |
1876 | | - ui_screen_progress_bar_update(NULL, NULL, msg_recv.ui_percentage); |
1877 | | - ui_progress_bar_visible = true; |
1878 | | - } |
1879 | | - else |
1880 | | - { |
1881 | | - ui_screen_progress_bar_update(NULL, NULL, msg_recv.ui_percentage); |
1882 | | - } |
1883 | | - } |
1884 | | - } |
1885 | | - else if ( msg_recv.ui_percentage == 100 ) |
1886 | | - { |
1887 | | - if ( ui_percentage_last != msg_recv.ui_percentage ) |
1888 | | - { |
1889 | | - ui_percentage_last = msg_recv.ui_percentage; |
1890 | | - if ( !ui_progress_bar_visible ) |
1891 | | - { |
1892 | | - // this is for the instant 100% case, which happens if the file is too |
1893 | | - // small |
1894 | | - ui_fadeout(); |
1895 | | - ui_screen_progress_bar_prepare(ui_progress_title, NULL); |
1896 | | - ui_screen_progress_bar_update(NULL, NULL, msg_recv.ui_percentage); |
1897 | | - ui_fadein(); |
1898 | | - } |
1899 | | - else |
1900 | | - { |
1901 | | - // normal path |
1902 | | - ui_screen_progress_bar_update(NULL, NULL, msg_recv.ui_percentage); |
1903 | | - ui_progress_bar_visible = false; |
1904 | | - } |
1905 | | - ui_fadeout(); |
1906 | | - ui_bootloader_first(NULL); |
1907 | | - ui_fadein(); |
1908 | | - } |
1909 | | - } |
1910 | 1851 | } |
1911 | 1852 | else |
1912 | 1853 | { |
1913 | | - if ( ui_progress_bar_visible ) |
1914 | | - { |
1915 | | - ui_progress_bar_visible = false; |
1916 | | - display_clear(); |
1917 | | - ui_bootloader_first(NULL); |
1918 | | - } |
| 1854 | + ui_progress_bar_handle_clear(); |
1919 | 1855 | } |
1920 | 1856 |
|
1921 | 1857 | // get file info |
|
0 commit comments