diff --git a/Makefile b/Makefile index 229aeb1..e33dfd3 100755 --- a/Makefile +++ b/Makefile @@ -192,15 +192,11 @@ APP_LOAD_PARAMS += $(APP_LOAD_FLAGS) --path "44'/1'" DEFINES += $(DEFINES_LIB) #prepare hsm generation -ifeq ($(TARGET_NAME),TARGET_BLUE) -ICONNAME=blue_app_$(CHAIN).gif -else ifeq ($(TARGET_NAME), TARGET_NANOX) ICONNAME=nanox_app_$(CHAIN).gif else ICONNAME=nanos_app_$(CHAIN).gif endif -endif ################ # Default rule # @@ -223,6 +219,7 @@ DEFINES += USB_SEGMENT_SIZE=64 DEFINES += BLE_SEGMENT_SIZE=32 #max MTU, min 20 DEFINES += UNUSED\(x\)=\(void\)x DEFINES += APPVERSION=\"$(APPVERSION)\" +DEFINES += HAVE_UX_FLOW #WEBUSB_URL = www.ledgerwallet.com #DEFINES += HAVE_WEBUSB WEBUSB_URL_SIZE_B=$(shell echo -n $(WEBUSB_URL) | wc -c) WEBUSB_URL=$(shell echo -n $(WEBUSB_URL) | sed -e "s/./\\\'\0\\\',/g") @@ -240,13 +237,12 @@ DEFINES += HAVE_BAGL_ELLIPSIS # long label truncation feature DEFINES += HAVE_BAGL_FONT_OPEN_SANS_REGULAR_11PX DEFINES += HAVE_BAGL_FONT_OPEN_SANS_EXTRABOLD_11PX DEFINES += HAVE_BAGL_FONT_OPEN_SANS_LIGHT_16PX -DEFINES += HAVE_UX_FLOW else DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=72 endif # Enabling debug PRINTF -DEBUG :=0 +DEBUG:=0 ifneq ($(DEBUG),0) DEFINES += HAVE_STACK_OVERFLOW_CHECK ifeq ($(TARGET_NAME),TARGET_NANOX) @@ -298,21 +294,9 @@ include $(BOLOS_SDK)/Makefile.glyphs ### variables processed by the common makefile.rules of the SDK to grab source files and include dirs APP_SOURCE_PATH += src_common src src_features SDK_SOURCE_PATH += lib_stusb lib_stusb_impl lib_u2f +SDK_SOURCE_PATH += lib_ux ifeq ($(TARGET_NAME),TARGET_NANOX) SDK_SOURCE_PATH += lib_blewbxx lib_blewbxx_impl -SDK_SOURCE_PATH += lib_ux -endif - -# If the SDK supports Flow for Nano S, build for it - -ifeq ($(TARGET_NAME),TARGET_NANOS) - - ifneq "$(wildcard $(BOLOS_SDK)/lib_ux/src/ux_flow_engine.c)" "" - SDK_SOURCE_PATH += lib_ux - DEFINES += HAVE_UX_FLOW - DEFINES += HAVE_WALLET_ID_SDK - endif - endif load: all diff --git a/src/chainConfig.h b/src/chainConfig.h index 39708bd..ace48c2 100644 --- a/src/chainConfig.h +++ b/src/chainConfig.h @@ -59,12 +59,6 @@ typedef struct chain_config_s { char coinName[10]; // ticker uint32_t chainId; chain_kind_t kind; -#ifdef TARGET_BLUE - unsigned int color_header; - char header_text[13]; - unsigned int color_dashboard; -#endif // TARGET_BLUE - } chain_config_t; #endif /* _CHAIN_CONFIG_H_ */ diff --git a/src/main.c b/src/main.c index 614b171..cf3d4df 100644 --- a/src/main.c +++ b/src/main.c @@ -18,12 +18,7 @@ #include "shared_context.h" #include "apdu_constants.h" #include "ui_callbacks.h" -#ifdef TARGET_BLUE -#include "ui_blue.h" -#endif -#ifdef HAVE_UX_FLOW #include "ui_flow.h" -#endif #include "os_io_seproxyhal.h" @@ -56,9 +51,6 @@ cx_sha3_t global_sha3; uint8_t dataAllowed; uint8_t contractDetails; uint8_t appState; -#ifdef TARGET_BLUE -char addressSummary[32]; -#endif bool dataPresent; contract_call_t contractProvisioned; bool called_from_swap; @@ -66,25 +58,12 @@ bool called_from_swap; bool quantumSet; #endif -#ifdef HAVE_UX_FLOW #include "ux.h" ux_state_t G_ux; bolos_ux_params_t G_ux_params; -#else // HAVE_UX_FLOW -ux_state_t ux; - -// display stepped screens -unsigned int ux_step; -unsigned int ux_step_count; -#endif // HAVE_UX_FLOW const internalStorage_t N_storage_real; -#ifdef TARGET_BLUE -static const char const CONTRACT_ADDRESS[] = "New contract"; -#endif - - chain_config_t *chainConfig; void reset_app_context() { @@ -101,24 +80,13 @@ void reset_app_context() { } void ui_idle(void) { -#if defined(TARGET_BLUE) - UX_DISPLAY(ui_idle_blue, ui_idle_blue_prepro); -#elif defined(HAVE_UX_FLOW) // reserve a display stack slot if none yet if(G_ux.stack_count == 0) { ux_stack_push(); } ux_flow_init(0, ux_idle_flow, NULL); -#endif // #if TARGET_ID } -#if defined(TARGET_BLUE) -unsigned int io_seproxyhal_touch_settings(const bagl_element_t *e) { - UX_DISPLAY(ui_settings_blue, ui_settings_blue_prepro); - return 0; // do not redraw button, screen has switched -} -#endif // #if defined(TARGET_BLUE) - unsigned int io_seproxyhal_touch_exit(const bagl_element_t *e) { // Go back to the dashboard os_sched_exit(0); @@ -169,93 +137,6 @@ void format_signature_out(const uint8_t* signature) { memmove(G_io_apdu_buffer+offset+32-xlength, signature+xoffset, xlength); } -#if defined(TARGET_BLUE) -void ui_approval_blue_init(void) { - UX_DISPLAY(ui_approval_blue, ui_approval_blue_prepro); -} - -void ui_approval_transaction_blue_init(void) { - ui_approval_blue_ok = (bagl_element_callback_t) io_seproxyhal_touch_tx_ok; - ui_approval_blue_cancel = (bagl_element_callback_t) io_seproxyhal_touch_tx_cancel; - G_ui_approval_blue_state = APPROVAL_TRANSACTION; - ui_approval_blue_values[0] = strings.common.fullAmount; - ui_approval_blue_values[1] = strings.common.fullAddress; - ui_approval_blue_values[2] = strings.common.maxFee; - ui_approval_blue_init(); -} - -void ui_approval_message_sign_blue_init(void) { - ui_approval_blue_ok = (bagl_element_callback_t) io_seproxyhal_touch_signMessage_ok; - ui_approval_blue_cancel = (bagl_element_callback_t) io_seproxyhal_touch_signMessage_cancel; - G_ui_approval_blue_state = APPROVAL_MESSAGE; - ui_approval_blue_values[0] = strings.common.fullAmount; - ui_approval_blue_values[1] = NULL; - ui_approval_blue_values[2] = NULL; - ui_approval_blue_init(); -} - -#elif defined(TARGET_NANOS) -unsigned int ui_approval_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { - switch(button_mask) { - case BUTTON_EVT_RELEASED|BUTTON_LEFT: - io_seproxyhal_touch_tx_cancel(NULL); - break; - - case BUTTON_EVT_RELEASED|BUTTON_RIGHT: { - io_seproxyhal_touch_tx_ok(NULL); - break; - } - } - return 0; -} - - -unsigned int ui_approval_signMessage_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { - switch (button_mask) { - case BUTTON_EVT_RELEASED | BUTTON_LEFT: - io_seproxyhal_touch_signMessage_cancel(NULL); - break; - - case BUTTON_EVT_RELEASED | BUTTON_RIGHT: { - io_seproxyhal_touch_signMessage_ok(NULL); - break; - } - } - return 0; -} - -unsigned int ui_data_selector_nanos_button(unsigned int button_mask, - unsigned int button_mask_counter) { - switch (button_mask) { - case BUTTON_EVT_RELEASED | BUTTON_LEFT: - io_seproxyhal_touch_data_cancel(NULL); - break; - - case BUTTON_EVT_RELEASED | BUTTON_RIGHT: { - io_seproxyhal_touch_data_ok(NULL); - break; - } - } - return 0; -} - -unsigned int ui_data_parameter_nanos_button(unsigned int button_mask, - unsigned int button_mask_counter) { - switch (button_mask) { - case BUTTON_EVT_RELEASED | BUTTON_LEFT: - io_seproxyhal_touch_data_cancel(NULL); - break; - - case BUTTON_EVT_RELEASED | BUTTON_RIGHT: { - io_seproxyhal_touch_data_ok(NULL); - break; - } - } - return 0; -} - -#endif // #if defined(TARGET_NANOS) - unsigned short io_exchange_al(unsigned char channel, unsigned short tx_len) { switch (channel & ~(IO_FLAGS)) { case CHANNEL_KEYBOARD: @@ -761,11 +642,6 @@ void coin_main_with_config(chain_config_t *config) { BLE_power(1, "Nano X"); #endif // HAVE_BLE -#if defined(TARGET_BLUE) - // setup the status bar colors (remembered after wards, even more if another app does not resetup after app switch) - UX_SET_STATUS_BAR_COLOR(0xFFFFFF, chainConfig->color_header); -#endif // #if defined(TARGET_BLUE) - app_main(); } CATCH(EXCEPTION_IO_RESET) { @@ -790,11 +666,6 @@ void init_coin_config(chain_config_t *coin_config) { strcpy(coin_config->coinName, CHAINID_COINNAME " "); coin_config->chainId = CHAIN_ID; coin_config->kind = CHAIN_KIND; -#ifdef TARGET_BLUE - coin_config.color_header = COLOR_APP; - coin_config.color_dashboard = COLOR_APP_LIGHT; - strcpy(coin_config->header_text, CHAINID_UPCASE); -#endif // TARGET_BLUE } void coin_main() { diff --git a/src/shared_context.h b/src/shared_context.h index d5dd314..d04cb6e 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -160,11 +160,6 @@ extern strings_t strings; extern cx_sha3_t global_sha3; extern const internalStorage_t N_storage_real; -#ifdef TARGET_BLUE -extern bagl_element_t tmp_element; -extern char addressSummary[32]; -#endif - extern bool called_from_swap; extern uint8_t dataAllowed; extern uint8_t contractDetails; diff --git a/src/ui_blue.c b/src/ui_blue.c deleted file mode 100644 index 08afc4d..0000000 --- a/src/ui_blue.c +++ /dev/null @@ -1,564 +0,0 @@ -#include "shared_context.h" - -#ifdef TARGET_BLUE - -#include "ui_blue.h" -#include "ui_callbacks.h" -#include "glyphs.h" - -#define BAGL_FONT_OPEN_SANS_LIGHT_16_22PX_AVG_WIDTH 10 -#define BAGL_FONT_OPEN_SANS_REGULAR_10_13PX_AVG_WIDTH 8 -#define MAX_CHAR_PER_LINE 25 - -void io_seproxyhal_io_heartbeat(void) { -} - -bagl_element_t tmp_element; - -const bagl_element_t* ui_menu_item_out_over(const bagl_element_t* e) { - // the selection rectangle is after the none|touchable - e = (const bagl_element_t*)(((unsigned int)e)+sizeof(bagl_element_t)); - return e; -} - -unsigned int map_color(unsigned int color) { - switch(color) { - case COLOR_APP: - return chainConfig->color_header; - - case COLOR_APP_LIGHT: - return chainConfig->color_dashboard; - } - return color; -} -void copy_element_and_map_coin_colors(const bagl_element_t* element) { - os_memmove(&tmp_element, element, sizeof(bagl_element_t)); - tmp_element.component.fgcolor = map_color(tmp_element.component.fgcolor); - tmp_element.component.bgcolor = map_color(tmp_element.component.bgcolor); - tmp_element.overfgcolor = map_color(tmp_element.overfgcolor); - tmp_element.overbgcolor = map_color(tmp_element.overbgcolor); -} - -const bagl_element_t *ui_idle_blue_prepro(const bagl_element_t *element) { - copy_element_and_map_coin_colors(element); - if (element->component.userid == 0x01) { - tmp_element.text = chainConfig->header_text; - } - return &tmp_element; -} - -const bagl_element_t ui_idle_blue[9] = { - // type userid x y w h str rad fill fg bg fid iid txt touchparams... ] - {{BAGL_RECTANGLE , 0x00, 0, 68, 320, 413, 0, 0, BAGL_FILL, COLOR_BG_1, 0x000000, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL }, - - // erase screen (only under the status bar) - {{BAGL_RECTANGLE , 0x00, 0, 20, 320, 48, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, - - /// TOP STATUS BAR - {{BAGL_LABELINE , 0x01, 0, 45, 320, 30, 0, 0, BAGL_FILL, 0xFFFFFF, COLOR_APP, BAGL_FONT_OPEN_SANS_SEMIBOLD_10_13PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, CHAINID_UPCASE, 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 0, 19, 56, 44, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP_LIGHT, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, BAGL_FONT_SYMBOLS_0_SETTINGS, 0, COLOR_APP, 0xFFFFFF, io_seproxyhal_touch_settings, NULL, NULL}, - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 264, 19, 56, 44, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP_LIGHT, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, BAGL_FONT_SYMBOLS_0_DASHBOARD, 0, COLOR_APP, 0xFFFFFF, io_seproxyhal_touch_exit, NULL, NULL}, - - {{BAGL_LABELINE , 0x00, 0, 270, 320, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_LIGHT_16_22PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Open your wallet", 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x00, 0, 308, 320, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Connect your Ledger Blue and open your", 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x00, 0, 331, 320, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "preferred wallet to view your accounts.", 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_LABELINE , 0x00, 0, 450, 320, 14, 0, 0, 0 , 0x999999, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_8_11PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Validation requests will show automatically.", 10, 0, COLOR_BG_1, NULL, NULL, NULL }, -}; - -unsigned int ui_idle_blue_button(unsigned int button_mask, unsigned int button_mask_counter) { - return 0; -} - -const bagl_element_t * ui_settings_blue_toggle_data(const bagl_element_t * e) { - // swap setting and request redraw of settings elements - uint8_t setting = N_storage.dataAllowed?0:1; - nvm_write(&N_storage.dataAllowed, (void*)&setting, sizeof(uint8_t)); - - // only refresh settings mutable drawn elements - UX_REDISPLAY_IDX(7); - - // won't redisplay the bagl_none - return 0; -} - -const bagl_element_t * ui_settings_blue_toggle_details(const bagl_element_t * e) { - // swap setting and request redraw of settings elements - uint8_t setting = N_storage.contractDetails?0:1; - nvm_write(&N_storage.contractDetails, (void*)&setting, sizeof(uint8_t)); - - // only refresh settings mutable drawn elements - UX_REDISPLAY_IDX(7); - - // won't redisplay the bagl_none - return 0; -} - - -// don't perform any draw/color change upon finger event over settings -const bagl_element_t* ui_settings_out_over(const bagl_element_t* e) { - return NULL; -} - -unsigned int ui_settings_back_callback(const bagl_element_t* e) { - // go back to idle - ui_idle(); - return 0; -} - -const bagl_element_t ui_settings_blue[13] = { - // type userid x y w h str rad fill fg bg fid iid txt touchparams... ] - {{BAGL_RECTANGLE , 0x00, 0, 68, 320, 413, 0, 0, BAGL_FILL, COLOR_BG_1, 0x000000, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL }, - - // erase screen (only under the status bar) - {{BAGL_RECTANGLE , 0x00, 0, 20, 320, 48, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, - - /// TOP STATUS BAR - {{BAGL_LABELINE , 0x00, 0, 45, 320, 30, 0, 0, BAGL_FILL, 0xFFFFFF, COLOR_APP, BAGL_FONT_OPEN_SANS_SEMIBOLD_10_13PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "SETTINGS", 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 0, 19, 50, 44, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP_LIGHT, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, BAGL_FONT_SYMBOLS_0_LEFT, 0, COLOR_APP, 0xFFFFFF, ui_settings_back_callback, NULL, NULL}, - //{{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 264, 19, 56, 44, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP_LIGHT, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, BAGL_FONT_SYMBOLS_0_DASHBOARD, 0, COLOR_APP, 0xFFFFFF, io_seproxyhal_touch_exit, NULL, NULL}, - - - {{BAGL_LABELINE , 0x00, 30, 105, 160, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, "Contract data", 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x00, 30, 126, 260, 30, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_8_11PX, 0 }, "Allow contract data in transactions", 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_NONE | BAGL_FLAG_TOUCHABLE , 0x00, 0, 78, 320, 68, 0, 0, BAGL_FILL, 0xFFFFFF, 0x000000, 0 , 0 }, NULL, 0, 0xEEEEEE, 0x000000, ui_settings_blue_toggle_data, ui_settings_out_over, ui_settings_out_over }, - - {{BAGL_RECTANGLE, 0x00, 30, 146, 260, 1, 1, 0, 0, 0xEEEEEE, COLOR_BG_1, 0, 0}, NULL, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE, 0x00, 30, 174, 160, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0}, "Display data", 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE, 0x00, 30, 195, 260, 30, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_8_11PX, 0}, "Display contract data details", 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_NONE | BAGL_FLAG_TOUCHABLE, 0x00, 0, 147, 320, 68, 0, 0, BAGL_FILL, 0xFFFFFF, 0x000000, 0, 0}, NULL, 0, 0xEEEEEE, 0x000000, ui_settings_blue_toggle_details, ui_settings_out_over, ui_settings_out_over}, - - {{BAGL_ICON, 0x02, 258, 167, 32, 18, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, 0, 0}, NULL, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_ICON , 0x01, 258, 98, 32, 18, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, 0, 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, -}; - -const bagl_element_t * ui_settings_blue_prepro(const bagl_element_t * e) { - copy_element_and_map_coin_colors(e); - // none elements are skipped - if ((e->component.type&(~BAGL_FLAG_TOUCHABLE)) == BAGL_NONE) { - return 0; - } - // swap icon buffer to be displayed depending on if corresponding setting is enabled or not. - if (e->component.userid) { - switch(e->component.userid) { - case 0x01: - // swap icon content - if (N_storage.dataAllowed) { - tmp_element.text = &C_icon_toggle_set; - } - else { - tmp_element.text = &C_icon_toggle_reset; - } - break; - case 0x02: - // swap icon content - if (N_storage.contractDetails) { - tmp_element.text = &C_icon_toggle_set; - } - else { - tmp_element.text = &C_icon_toggle_reset; - } - break; - } - } - return &tmp_element; -} - -unsigned int ui_settings_blue_button(unsigned int button_mask, unsigned int button_mask_counter) { - return 0; -} - -// reuse addressSummary for each line content -const char* ui_details_title; -const char* ui_details_content; -typedef void (*callback_t)(void); -callback_t ui_details_back_callback; - -const bagl_element_t* ui_details_blue_back_callback(const bagl_element_t* element) { - ui_details_back_callback(); - return 0; -} - - -const bagl_element_t ui_details_blue[16] = { - // erase screen (only under the status bar) - {{BAGL_RECTANGLE , 0x00, 0, 68, 320, 413, 0, 0, BAGL_FILL, COLOR_BG_1, 0x000000, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL }, - - {{BAGL_RECTANGLE , 0x00, 0, 20, 320, 48, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, - - /// TOP STATUS BAR - {{BAGL_LABELINE , 0x01, 0, 45, 320, 30, 0, 0, BAGL_FILL, 0xFFFFFF, COLOR_APP, BAGL_FONT_OPEN_SANS_SEMIBOLD_10_13PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 0, 19, 50, 44, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP_LIGHT, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, BAGL_FONT_SYMBOLS_0_LEFT, 0, COLOR_APP, 0xFFFFFF, ui_details_blue_back_callback, NULL, NULL}, - //{{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 264, 19, 56, 44, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP_LIGHT, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, " " /*BAGL_FONT_SYMBOLS_0_DASHBOARD*/, 0, COLOR_APP, 0xFFFFFF, io_seproxyhal_touch_exit, NULL, NULL}, - - {{BAGL_LABELINE , 0x00, 30, 106, 320, 30, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_OPEN_SANS_SEMIBOLD_8_11PX, 0 }, "VALUE", 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_LABELINE , 0x10, 30, 136, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x11, 30, 159, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x12, 30, 182, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x13, 30, 205, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x14, 30, 228, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x15, 30, 251, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x16, 30, 274, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x17, 30, 297, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x18, 30, 320, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - //"..." at the end if too much - {{BAGL_LABELINE , 0x19, 30, 343, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_LABELINE , 0x00, 0, 450, 320, 14, 0, 0, 0 , 0x999999, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_8_11PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Review the whole value before continuing.", 10, 0, COLOR_BG_1, NULL, NULL, NULL }, -}; - -const bagl_element_t* ui_details_blue_prepro(const bagl_element_t* element) { - copy_element_and_map_coin_colors(element); - if (element->component.userid == 1) { - tmp_element.text = ui_details_title; - return &tmp_element; - } - else if(element->component.userid > 0) { - unsigned int length = strlen(ui_details_content); - if (length >= (element->component.userid & 0xF) * MAX_CHAR_PER_LINE) { - os_memset(addressSummary, 0, MAX_CHAR_PER_LINE+1); - os_memmove(addressSummary, ui_details_content+(element->component.userid & 0xF) * MAX_CHAR_PER_LINE, MIN(length - (element->component.userid & 0xF) * MAX_CHAR_PER_LINE, MAX_CHAR_PER_LINE)); - return &tmp_element; - } - // nothing to draw for this line - return 0; - } - return &tmp_element; -} - -unsigned int ui_details_blue_button(unsigned int button_mask, unsigned int button_mask_counter) { - return 0; -} - -void ui_details_init(const char* title, const char* content, callback_t back_callback) { - ui_details_title = title; - ui_details_content = content; - ui_details_back_callback = back_callback; - UX_DISPLAY(ui_details_blue, ui_details_blue_prepro); -} - -void ui_approval_blue_init(void); - -bagl_element_callback_t ui_approval_blue_ok; -bagl_element_callback_t ui_approval_blue_cancel; - -const bagl_element_t* ui_approval_blue_ok_callback(const bagl_element_t* e) { - return ui_approval_blue_ok(e); -} - -const bagl_element_t* ui_approval_blue_cancel_callback(const bagl_element_t* e) { - return ui_approval_blue_cancel(e); -} - -ui_approval_blue_state_t G_ui_approval_blue_state; -// pointer to value to be displayed -const char* ui_approval_blue_values[3]; -// variable part of the structure -const char* const ui_approval_blue_details_name[][5] = { - /*APPROVAL_TRANSACTION*/ - {"AMOUNT", "ADDRESS", "MAX FEES","CONFIRM TRANSACTION","Transaction details",}, - - /*APPROVAL_MESSAGE*/ - {"HASH", NULL, NULL, "SIGN MESSAGE", "Message signature", }, -}; - -const bagl_element_t* ui_approval_blue_1_details(const bagl_element_t* e) { - if (strlen(ui_approval_blue_values[0])*BAGL_FONT_OPEN_SANS_LIGHT_16_22PX_AVG_WIDTH >= 160) { - // display details screen - ui_details_init(ui_approval_blue_details_name[G_ui_approval_blue_state][0], ui_approval_blue_values[0], ui_approval_blue_init); - } - return 0; -}; - -const bagl_element_t* ui_approval_blue_2_details(const bagl_element_t* e) { - if (strlen(ui_approval_blue_values[1])*BAGL_FONT_OPEN_SANS_REGULAR_10_13PX_AVG_WIDTH >= 160) { - ui_details_init(ui_approval_blue_details_name[G_ui_approval_blue_state][1], ui_approval_blue_values[1], ui_approval_blue_init); - } - return 0; -}; - -const bagl_element_t* ui_approval_blue_3_details(const bagl_element_t* e) { - if (strlen(ui_approval_blue_values[2])*BAGL_FONT_OPEN_SANS_REGULAR_10_13PX_AVG_WIDTH >= 160) { - ui_details_init(ui_approval_blue_details_name[G_ui_approval_blue_state][2], ui_approval_blue_values[2], ui_approval_blue_init); - } - return 0; -}; - -const bagl_element_t ui_approval_blue[29] = { - {{BAGL_RECTANGLE , 0x00, 0, 68, 320, 413, 0, 0, BAGL_FILL, COLOR_BG_1, 0x000000, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL }, - - // erase screen (only under the status bar) - {{BAGL_RECTANGLE , 0x00, 0, 20, 320, 48, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, - - /// TOP STATUS BAR - {{BAGL_LABELINE , 0x60, 0, 45, 320, 30, 0, 0, BAGL_FILL, 0xFFFFFF, COLOR_APP, BAGL_FONT_OPEN_SANS_SEMIBOLD_10_13PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, - - // BADGE_TRANSACTION.GIF - {{BAGL_ICON , 0x40, 30, 98, 50, 50, 0, 0, BAGL_FILL, 0 , COLOR_BG_1, 0 , 0 } , &C_badge_transaction, 0, 0, 0, NULL, NULL, NULL }, - - {{BAGL_LABELINE , 0x50, 100, 117, 320, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_LABELINE , 0x00, 100, 138, 320, 30, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_8_11PX, 0 }, "Check and confirm values", 0, 0, 0, NULL, NULL, NULL}, - - - {{BAGL_LABELINE , 0x70, 30, 196, 100, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_SEMIBOLD_8_11PX, 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, // AMOUNT - // x-18 when ... - {{BAGL_LABELINE , 0x10, 130, 200, 160, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_LIGHT_16_22PX|BAGL_FONT_ALIGNMENT_RIGHT, 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, // fullAmount - {{BAGL_LABELINE , 0x20, 284, 196, 6, 16, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_RIGHT, 0 }, BAGL_FONT_SYMBOLS_0_MINIRIGHT, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_NONE | BAGL_FLAG_TOUCHABLE , 0x00, 0, 168, 320, 48, 0, 9, BAGL_FILL, 0xFFFFFF, 0x000000, 0 , 0 }, NULL, 0, 0xEEEEEE, 0x000000, ui_approval_blue_1_details, ui_menu_item_out_over, ui_menu_item_out_over }, - {{BAGL_RECTANGLE , 0x20, 0, 168, 5, 48, 0, 0, BAGL_FILL, COLOR_BG_1, COLOR_BG_1, 0 , 0 }, NULL, 0, 0x41CCB4, 0, NULL, NULL, NULL }, - - {{BAGL_RECTANGLE , 0x31, 30, 216, 260, 1, 1, 0, 0 , 0xEEEEEE, COLOR_BG_1, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL }, - - - {{BAGL_LABELINE , 0x71, 30, 245, 100, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_SEMIBOLD_8_11PX, 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, // ADDRESS - // x-18 when ... - {{BAGL_LABELINE , 0x11, 130, 245, 160, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX|BAGL_FONT_ALIGNMENT_RIGHT, 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, // fullAddress - {{BAGL_LABELINE , 0x21, 284, 245, 6, 16, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_RIGHT, 0 }, BAGL_FONT_SYMBOLS_0_MINIRIGHT, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_NONE | BAGL_FLAG_TOUCHABLE , 0x00, 0, 217, 320, 48, 0, 9, BAGL_FILL, 0xFFFFFF, 0x000000, 0 , 0 }, NULL, 0, 0xEEEEEE, 0x000000, ui_approval_blue_2_details, ui_menu_item_out_over, ui_menu_item_out_over }, - {{BAGL_RECTANGLE , 0x21, 0, 217, 5, 48, 0, 0, BAGL_FILL, COLOR_BG_1, COLOR_BG_1, 0 , 0 }, NULL, 0, 0x41CCB4, 0, NULL, NULL, NULL }, - - {{BAGL_RECTANGLE , 0x32, 30, 265, 260, 1, 1, 0, 0 , 0xEEEEEE, COLOR_BG_1, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL }, - - - {{BAGL_LABELINE , 0x72, 30, 294, 100, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_SEMIBOLD_8_11PX, 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, // MAX FEES - // x-18 when ... - {{BAGL_LABELINE , 0x12, 130, 294, 160, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX|BAGL_FONT_ALIGNMENT_RIGHT, 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, //maxFee - {{BAGL_LABELINE , 0x22, 284, 294, 6, 16, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_RIGHT, 0 }, BAGL_FONT_SYMBOLS_0_MINIRIGHT, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_NONE | BAGL_FLAG_TOUCHABLE , 0x00, 0, 266, 320, 48, 0, 9, BAGL_FILL, 0xFFFFFF, 0x000000, 0 , 0 }, NULL, 0, 0xEEEEEE, 0x000000, ui_approval_blue_3_details, ui_menu_item_out_over, ui_menu_item_out_over }, - {{BAGL_RECTANGLE , 0x22, 0, 266, 5, 48, 0, 0, BAGL_FILL, COLOR_BG_1, COLOR_BG_1, 0 , 0 }, NULL, 0, 0x41CCB4, 0, NULL, NULL, NULL }, - - {{BAGL_RECTANGLE, 0x90, 30, 314, 260, 1, 1, 0, 0, 0xEEEEEE, COLOR_BG_1, 0, 0}, NULL, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE, 0x90, 30, 343, 120, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_SEMIBOLD_8_11PX, 0}, "CONTRACT DATA", 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE, 0x90, 133, 343, 140, 30, 0, 0, BAGL_FILL, 0x666666, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX | BAGL_FONT_ALIGNMENT_RIGHT, 0}, "Present", 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_ICON, 0x90, 278, 333, 12, 12, 0, 0, BAGL_FILL, 0, COLOR_BG_1, 0, 0}, &C_icon_warning, 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 40, 414, 115, 36, 0,18, BAGL_FILL, 0xCCCCCC, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_11_14PX|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, "REJECT", 0, 0xB7B7B7, COLOR_BG_1, ui_approval_blue_cancel_callback, NULL, NULL}, - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 165, 414, 115, 36, 0,18, BAGL_FILL, 0x41ccb4, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_11_14PX|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, "CONFIRM", 0, 0x3ab7a2, COLOR_BG_1, ui_approval_blue_ok_callback, NULL, NULL}, - -}; - -const bagl_element_t* ui_approval_blue_prepro(const bagl_element_t* element) { - copy_element_and_map_coin_colors(element); - if (element->component.userid == 0) { - return &tmp_element; - } - // none elements are skipped - if ((element->component.type&(~BAGL_FLAG_TOUCHABLE)) == BAGL_NONE) { - return 0; - } - else { - switch(element->component.userid&0xF0) { - - // icon - case 0x40: - return &tmp_element; - break; - - // TITLE - case 0x60: - tmp_element.text = ui_approval_blue_details_name[G_ui_approval_blue_state][3]; - return &tmp_element; - break; - - // SUBLINE - case 0x50: - tmp_element.text = ui_approval_blue_details_name[G_ui_approval_blue_state][4]; - return &tmp_element; - - // details label - case 0x70: - if (!ui_approval_blue_details_name[G_ui_approval_blue_state][element->component.userid&0xF]) { - return NULL; - } - tmp_element.text = ui_approval_blue_details_name[G_ui_approval_blue_state][element->component.userid&0xF]; - return &tmp_element; - - // detail value - case 0x10: - // won't display - if (!ui_approval_blue_details_name[G_ui_approval_blue_state][element->component.userid&0xF]) { - return NULL; - } - // always display the value - tmp_element.text = ui_approval_blue_values[(element->component.userid&0xF)]; - - // x -= 18 when overflow is detected - if (strlen(ui_approval_blue_values[(element->component.userid&0xF)])*BAGL_FONT_OPEN_SANS_LIGHT_16_22PX_AVG_WIDTH >= 160) { - tmp_element.component.x -= 18; - } - return &tmp_element; - break; - - // right arrow and left selection rectangle - case 0x20: - if (!ui_approval_blue_details_name[G_ui_approval_blue_state][element->component.userid&0xF]) { - return NULL; - } - if (strlen(ui_approval_blue_values[(element->component.userid&0xF)])*BAGL_FONT_OPEN_SANS_LIGHT_16_22PX_AVG_WIDTH < 160) { - return NULL; - } - - // horizontal delimiter - case 0x30: - return ui_approval_blue_details_name[G_ui_approval_blue_state][element->component.userid&0xF]!=NULL?&tmp_element:NULL; - - case 0x90: - return (dataPresent && !N_storage.contractDetails); - } - } - return &tmp_element; -} -unsigned int ui_approval_blue_button(unsigned int button_mask, unsigned int button_mask_counter) { - return 0; -} - -// - -const bagl_element_t ui_address_blue[8] = { - {{BAGL_RECTANGLE , 0x00, 0, 68, 320, 413, 0, 0, BAGL_FILL, COLOR_BG_1, 0x000000, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL }, - - - // erase screen (only under the status bar) - {{BAGL_RECTANGLE , 0x00, 0, 20, 320, 48, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, - - /// TOP STATUS BAR - {{BAGL_LABELINE , 0x00, 0, 45, 320, 30, 0, 0, BAGL_FILL, 0xFFFFFF, COLOR_APP, BAGL_FONT_OPEN_SANS_SEMIBOLD_10_13PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "CONFIRM ACCOUNT", 0, 0, 0, NULL, NULL, NULL}, - - //{{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 264, 19, 56, 44, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP_LIGHT, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, " " /*BAGL_FONT_SYMBOLS_0_DASHBOARD*/, 0, COLOR_APP, 0xFFFFFF, io_seproxyhal_touch_exit, NULL, NULL}, - - {{BAGL_LABELINE , 0x00, 30, 106, 320, 30, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_OPEN_SANS_SEMIBOLD_8_11PX, 0 }, "ACCOUNT", 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_LABELINE , 0x10, 30, 136, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x11, 30, 159, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 40, 414, 115, 36, 0,18, BAGL_FILL, 0xCCCCCC, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_11_14PX|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, "REJECT", 0, 0xB7B7B7, COLOR_BG_1, io_seproxyhal_touch_address_cancel, NULL, NULL}, - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 165, 414, 115, 36, 0,18, BAGL_FILL, 0x41ccb4, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_11_14PX|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, "CONFIRM", 0, 0x3ab7a2, COLOR_BG_1, io_seproxyhal_touch_address_ok, NULL, NULL}, -}; - -unsigned int ui_address_blue_prepro(const bagl_element_t* element) { - copy_element_and_map_coin_colors(element); - if(element->component.userid > 0) { - unsigned int length = strlen(strings.common.fullAddress); - if (length >= (element->component.userid & 0xF) * MAX_CHAR_PER_LINE) { - os_memset(addressSummary, 0, MAX_CHAR_PER_LINE+1); - os_memmove(addressSummary, strings.common.fullAddress+(element->component.userid & 0xF) * MAX_CHAR_PER_LINE, MIN(length - (element->component.userid & 0xF) * MAX_CHAR_PER_LINE, MAX_CHAR_PER_LINE)); - return &tmp_element; - } - // nothing to draw for this line - return 0; - } - return &tmp_element; -} - -unsigned int ui_address_blue_button(unsigned int button_mask, unsigned int button_mask_counter) { - return 0; -} - -// - -const bagl_element_t ui_data_selector_blue[7] = { - {{BAGL_RECTANGLE , 0x00, 0, 68, 320, 413, 0, 0, BAGL_FILL, COLOR_BG_1, 0x000000, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL }, - - - // erase screen (only under the status bar) - {{BAGL_RECTANGLE , 0x00, 0, 20, 320, 48, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, - - /// TOP STATUS BAR - {{BAGL_LABELINE , 0x00, 0, 45, 320, 30, 0, 0, BAGL_FILL, 0xFFFFFF, COLOR_APP, BAGL_FONT_OPEN_SANS_SEMIBOLD_10_13PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "CONFIRM SELECTOR", 0, 0, 0, NULL, NULL, NULL}, - - //{{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 264, 19, 56, 44, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP_LIGHT, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, " " /*BAGL_FONT_SYMBOLS_0_DASHBOARD*/, 0, COLOR_APP, 0xFFFFFF, io_seproxyhal_touch_exit, NULL, NULL}, - - {{BAGL_LABELINE , 0x00, 30, 106, 320, 30, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_OPEN_SANS_SEMIBOLD_8_11PX, 0 }, "SELECTOR", 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_LABELINE , 0x10, 30, 136, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, strings.tmp.tmp, 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 40, 414, 115, 36, 0,18, BAGL_FILL, 0xCCCCCC, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_11_14PX|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, "REJECT", 0, 0xB7B7B7, COLOR_BG_1, io_seproxyhal_touch_data_cancel, NULL, NULL}, - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 165, 414, 115, 36, 0,18, BAGL_FILL, 0x41ccb4, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_11_14PX|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, "CONFIRM", 0, 0x3ab7a2, COLOR_BG_1, io_seproxyhal_touch_data_ok, NULL, NULL}, -}; - -unsigned int ui_data_selector_blue_prepro(const bagl_element_t* element) { - copy_element_and_map_coin_colors(element); - if(element->component.userid > 0) { - unsigned int length = strlen(strings.tmp.tmp); - unsigned int offset = (element->component.userid & 0xF) * 24; - if (length >= offset) { - unsigned int copyLength = ((offset + 24) > length ? length - offset : 24); - os_memset(addressSummary, 0, 25); - os_memmove(addressSummary, strings.tmp.tmp + offset, copyLength); - return &tmp_element; - } - // nothing to draw for this line - return 0; - } - return &tmp_element; -} - -unsigned int ui_data_selector_blue_button(unsigned int button_mask, unsigned int button_mask_counter) { - return 0; -} - -// - -const bagl_element_t ui_data_parameter_blue[11] = { - {{BAGL_RECTANGLE , 0x00, 0, 68, 320, 413, 0, 0, BAGL_FILL, COLOR_BG_1, 0x000000, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL }, - - - // erase screen (only under the status bar) - {{BAGL_RECTANGLE , 0x00, 0, 20, 320, 48, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP, 0 , 0 }, NULL, 0, 0, 0, NULL, NULL, NULL}, - - /// TOP STATUS BAR - {{BAGL_LABELINE , 0x00, 0, 45, 320, 30, 0, 0, BAGL_FILL, 0xFFFFFF, COLOR_APP, BAGL_FONT_OPEN_SANS_SEMIBOLD_10_13PX|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "CONFIRM PARAMETER", 0, 0, 0, NULL, NULL, NULL}, - - //{{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 264, 19, 56, 44, 0, 0, BAGL_FILL, COLOR_APP, COLOR_APP_LIGHT, BAGL_FONT_SYMBOLS_0|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, " " /*BAGL_FONT_SYMBOLS_0_DASHBOARD*/, 0, COLOR_APP, 0xFFFFFF, io_seproxyhal_touch_exit, NULL, NULL}, - - {{BAGL_LABELINE , 0x00, 30, 106, 320, 30, 0, 0, BAGL_FILL, 0x999999, COLOR_BG_1, BAGL_FONT_OPEN_SANS_SEMIBOLD_8_11PX, 0 }, "PARAMETER", 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_LABELINE , 0x00, 30, 136, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, strings.tmp.tmp2, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x10, 30, 159, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x11, 30, 182, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x12, 30, 205, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - {{BAGL_LABELINE , 0x13, 30, 228, 260, 30, 0, 0, BAGL_FILL, 0x000000, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_10_13PX, 0 }, addressSummary, 0, 0, 0, NULL, NULL, NULL}, - - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 40, 414, 115, 36, 0,18, BAGL_FILL, 0xCCCCCC, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_11_14PX|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, "REJECT", 0, 0xB7B7B7, COLOR_BG_1, io_seproxyhal_touch_data_cancel, NULL, NULL}, - {{BAGL_RECTANGLE | BAGL_FLAG_TOUCHABLE, 0x00, 165, 414, 115, 36, 0,18, BAGL_FILL, 0x41ccb4, COLOR_BG_1, BAGL_FONT_OPEN_SANS_REGULAR_11_14PX|BAGL_FONT_ALIGNMENT_CENTER|BAGL_FONT_ALIGNMENT_MIDDLE, 0 }, "CONFIRM", 0, 0x3ab7a2, COLOR_BG_1, io_seproxyhal_touch_data_ok, NULL, NULL}, -}; - -unsigned int ui_data_parameter_blue_prepro(const bagl_element_t* element) { - copy_element_and_map_coin_colors(element); - if(element->component.userid > 0) { - unsigned int pos = (element->component.userid & 0xF); - unsigned int i; - unsigned int offset = 0; - unsigned int copyLength; - for (i=0; i