Merge pull request #108 from LedgerHQ/remove-blue
Remove Ledger Blue specific code, and other unused discriminants
This commit is contained in:
22
Makefile
22
Makefile
@@ -192,15 +192,11 @@ APP_LOAD_PARAMS += $(APP_LOAD_FLAGS) --path "44'/1'"
|
|||||||
DEFINES += $(DEFINES_LIB)
|
DEFINES += $(DEFINES_LIB)
|
||||||
|
|
||||||
#prepare hsm generation
|
#prepare hsm generation
|
||||||
ifeq ($(TARGET_NAME),TARGET_BLUE)
|
|
||||||
ICONNAME=blue_app_$(CHAIN).gif
|
|
||||||
else
|
|
||||||
ifeq ($(TARGET_NAME), TARGET_NANOX)
|
ifeq ($(TARGET_NAME), TARGET_NANOX)
|
||||||
ICONNAME=nanox_app_$(CHAIN).gif
|
ICONNAME=nanox_app_$(CHAIN).gif
|
||||||
else
|
else
|
||||||
ICONNAME=nanos_app_$(CHAIN).gif
|
ICONNAME=nanos_app_$(CHAIN).gif
|
||||||
endif
|
endif
|
||||||
endif
|
|
||||||
|
|
||||||
################
|
################
|
||||||
# Default rule #
|
# Default rule #
|
||||||
@@ -223,6 +219,7 @@ DEFINES += USB_SEGMENT_SIZE=64
|
|||||||
DEFINES += BLE_SEGMENT_SIZE=32 #max MTU, min 20
|
DEFINES += BLE_SEGMENT_SIZE=32 #max MTU, min 20
|
||||||
DEFINES += UNUSED\(x\)=\(void\)x
|
DEFINES += UNUSED\(x\)=\(void\)x
|
||||||
DEFINES += APPVERSION=\"$(APPVERSION)\"
|
DEFINES += APPVERSION=\"$(APPVERSION)\"
|
||||||
|
DEFINES += HAVE_UX_FLOW
|
||||||
|
|
||||||
#WEBUSB_URL = www.ledgerwallet.com
|
#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")
|
#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_REGULAR_11PX
|
||||||
DEFINES += HAVE_BAGL_FONT_OPEN_SANS_EXTRABOLD_11PX
|
DEFINES += HAVE_BAGL_FONT_OPEN_SANS_EXTRABOLD_11PX
|
||||||
DEFINES += HAVE_BAGL_FONT_OPEN_SANS_LIGHT_16PX
|
DEFINES += HAVE_BAGL_FONT_OPEN_SANS_LIGHT_16PX
|
||||||
DEFINES += HAVE_UX_FLOW
|
|
||||||
else
|
else
|
||||||
DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=72
|
DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=72
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Enabling debug PRINTF
|
# Enabling debug PRINTF
|
||||||
DEBUG :=0
|
DEBUG:=0
|
||||||
ifneq ($(DEBUG),0)
|
ifneq ($(DEBUG),0)
|
||||||
DEFINES += HAVE_STACK_OVERFLOW_CHECK
|
DEFINES += HAVE_STACK_OVERFLOW_CHECK
|
||||||
ifeq ($(TARGET_NAME),TARGET_NANOX)
|
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
|
### 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
|
APP_SOURCE_PATH += src_common src src_features
|
||||||
SDK_SOURCE_PATH += lib_stusb lib_stusb_impl lib_u2f
|
SDK_SOURCE_PATH += lib_stusb lib_stusb_impl lib_u2f
|
||||||
|
SDK_SOURCE_PATH += lib_ux
|
||||||
ifeq ($(TARGET_NAME),TARGET_NANOX)
|
ifeq ($(TARGET_NAME),TARGET_NANOX)
|
||||||
SDK_SOURCE_PATH += lib_blewbxx lib_blewbxx_impl
|
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
|
endif
|
||||||
|
|
||||||
load: all
|
load: all
|
||||||
|
|||||||
@@ -59,12 +59,6 @@ typedef struct chain_config_s {
|
|||||||
char coinName[10]; // ticker
|
char coinName[10]; // ticker
|
||||||
uint32_t chainId;
|
uint32_t chainId;
|
||||||
chain_kind_t kind;
|
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;
|
} chain_config_t;
|
||||||
|
|
||||||
#endif /* _CHAIN_CONFIG_H_ */
|
#endif /* _CHAIN_CONFIG_H_ */
|
||||||
|
|||||||
129
src/main.c
129
src/main.c
@@ -18,12 +18,7 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
#include "ui_callbacks.h"
|
#include "ui_callbacks.h"
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
#include "ui_blue.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "os_io_seproxyhal.h"
|
#include "os_io_seproxyhal.h"
|
||||||
|
|
||||||
@@ -56,9 +51,6 @@ cx_sha3_t global_sha3;
|
|||||||
uint8_t dataAllowed;
|
uint8_t dataAllowed;
|
||||||
uint8_t contractDetails;
|
uint8_t contractDetails;
|
||||||
uint8_t appState;
|
uint8_t appState;
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
char addressSummary[32];
|
|
||||||
#endif
|
|
||||||
bool dataPresent;
|
bool dataPresent;
|
||||||
contract_call_t contractProvisioned;
|
contract_call_t contractProvisioned;
|
||||||
bool called_from_swap;
|
bool called_from_swap;
|
||||||
@@ -66,25 +58,12 @@ bool called_from_swap;
|
|||||||
bool quantumSet;
|
bool quantumSet;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ux.h"
|
#include "ux.h"
|
||||||
ux_state_t G_ux;
|
ux_state_t G_ux;
|
||||||
bolos_ux_params_t G_ux_params;
|
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;
|
const internalStorage_t N_storage_real;
|
||||||
|
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
static const char const CONTRACT_ADDRESS[] = "New contract";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
chain_config_t *chainConfig;
|
chain_config_t *chainConfig;
|
||||||
|
|
||||||
void reset_app_context() {
|
void reset_app_context() {
|
||||||
@@ -101,24 +80,13 @@ void reset_app_context() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ui_idle(void) {
|
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
|
// reserve a display stack slot if none yet
|
||||||
if(G_ux.stack_count == 0) {
|
if(G_ux.stack_count == 0) {
|
||||||
ux_stack_push();
|
ux_stack_push();
|
||||||
}
|
}
|
||||||
ux_flow_init(0, ux_idle_flow, NULL);
|
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) {
|
unsigned int io_seproxyhal_touch_exit(const bagl_element_t *e) {
|
||||||
// Go back to the dashboard
|
// Go back to the dashboard
|
||||||
os_sched_exit(0);
|
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);
|
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) {
|
unsigned short io_exchange_al(unsigned char channel, unsigned short tx_len) {
|
||||||
switch (channel & ~(IO_FLAGS)) {
|
switch (channel & ~(IO_FLAGS)) {
|
||||||
case CHANNEL_KEYBOARD:
|
case CHANNEL_KEYBOARD:
|
||||||
@@ -761,11 +642,6 @@ void coin_main_with_config(chain_config_t *config) {
|
|||||||
BLE_power(1, "Nano X");
|
BLE_power(1, "Nano X");
|
||||||
#endif // HAVE_BLE
|
#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();
|
app_main();
|
||||||
}
|
}
|
||||||
CATCH(EXCEPTION_IO_RESET) {
|
CATCH(EXCEPTION_IO_RESET) {
|
||||||
@@ -790,11 +666,6 @@ void init_coin_config(chain_config_t *coin_config) {
|
|||||||
strcpy(coin_config->coinName, CHAINID_COINNAME " ");
|
strcpy(coin_config->coinName, CHAINID_COINNAME " ");
|
||||||
coin_config->chainId = CHAIN_ID;
|
coin_config->chainId = CHAIN_ID;
|
||||||
coin_config->kind = CHAIN_KIND;
|
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() {
|
void coin_main() {
|
||||||
|
|||||||
@@ -160,11 +160,6 @@ extern strings_t strings;
|
|||||||
extern cx_sha3_t global_sha3;
|
extern cx_sha3_t global_sha3;
|
||||||
extern const internalStorage_t N_storage_real;
|
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 bool called_from_swap;
|
||||||
extern uint8_t dataAllowed;
|
extern uint8_t dataAllowed;
|
||||||
extern uint8_t contractDetails;
|
extern uint8_t contractDetails;
|
||||||
|
|||||||
564
src/ui_blue.c
564
src/ui_blue.c
@@ -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<pos; i++) {
|
|
||||||
offset += local_strchr(strings.tmp.tmp + offset, ':');
|
|
||||||
if (offset < 0) {
|
|
||||||
THROW(EXCEPTION);
|
|
||||||
}
|
|
||||||
offset = offset + 1;
|
|
||||||
}
|
|
||||||
if (pos == 3) {
|
|
||||||
copyLength = strlen(strings.tmp.tmp) - offset;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
unsigned int endOffset;
|
|
||||||
endOffset = offset + local_strchr(strings.tmp.tmp + offset, ':');
|
|
||||||
copyLength = endOffset - offset;
|
|
||||||
}
|
|
||||||
os_memmove(addressSummary, strings.tmp.tmp + offset, copyLength);
|
|
||||||
addressSummary[copyLength] = '\0';
|
|
||||||
}
|
|
||||||
return &tmp_element;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int ui_data_parameter_blue_button(unsigned int button_mask, unsigned int button_mask_counter) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
#include "shared_context.h"
|
|
||||||
|
|
||||||
#include "os_io_seproxyhal.h"
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
APPROVAL_TRANSACTION,
|
|
||||||
APPROVAL_MESSAGE,
|
|
||||||
} ui_approval_blue_state_t;
|
|
||||||
|
|
||||||
#define COLOR_BG_1 0xF9F9F9
|
|
||||||
#define COLOR_APP 0x0ebdcf
|
|
||||||
#define COLOR_APP_LIGHT 0x87dee6
|
|
||||||
|
|
||||||
extern const bagl_element_t ui_idle_blue[9];
|
|
||||||
unsigned int ui_idle_blue_button(unsigned int button_mask, unsigned int button_mask_counter);
|
|
||||||
const bagl_element_t *ui_idle_blue_prepro(const bagl_element_t *element);
|
|
||||||
|
|
||||||
extern const bagl_element_t ui_settings_blue[13];
|
|
||||||
unsigned int ui_settings_blue_button(unsigned int button_mask, unsigned int button_mask_counter);
|
|
||||||
const bagl_element_t * ui_settings_blue_prepro(const bagl_element_t * e);
|
|
||||||
|
|
||||||
extern const bagl_element_t ui_details_blue[16];
|
|
||||||
unsigned int ui_details_blue_button(unsigned int button_mask, unsigned int button_mask_counter);
|
|
||||||
const bagl_element_t* ui_details_blue_prepro(const bagl_element_t* element);
|
|
||||||
|
|
||||||
extern const bagl_element_t ui_approval_blue[29];
|
|
||||||
unsigned int ui_approval_blue_button(unsigned int button_mask, unsigned int button_mask_counter);
|
|
||||||
const bagl_element_t* ui_approval_blue_prepro(const bagl_element_t* element);
|
|
||||||
|
|
||||||
extern const bagl_element_t ui_address_blue[8];
|
|
||||||
unsigned int ui_address_blue_button(unsigned int button_mask, unsigned int button_mask_counter);
|
|
||||||
unsigned int ui_address_blue_prepro(const bagl_element_t* element);
|
|
||||||
|
|
||||||
extern const bagl_element_t ui_data_selector_blue[7];
|
|
||||||
unsigned int ui_data_selector_blue_button(unsigned int button_mask, unsigned int button_mask_counter);
|
|
||||||
unsigned int ui_data_selector_blue_prepro(const bagl_element_t* element);
|
|
||||||
|
|
||||||
extern const bagl_element_t ui_data_parameter_blue[11];
|
|
||||||
unsigned int ui_data_parameter_blue_button(unsigned int button_mask, unsigned int button_mask_counter);
|
|
||||||
unsigned int ui_data_parameter_blue_prepro(const bagl_element_t* element);
|
|
||||||
|
|
||||||
extern bagl_element_callback_t ui_approval_blue_ok;
|
|
||||||
extern bagl_element_callback_t ui_approval_blue_cancel;
|
|
||||||
extern ui_approval_blue_state_t G_ui_approval_blue_state;
|
|
||||||
extern const char* ui_approval_blue_values[3];
|
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "ui_callbacks.h"
|
#include "ui_callbacks.h"
|
||||||
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
|
|
||||||
void display_settings(void);
|
void display_settings(void);
|
||||||
void switch_settings_contract_data(void);
|
void switch_settings_contract_data(void);
|
||||||
void switch_settings_display_data(void);
|
void switch_settings_display_data(void);
|
||||||
@@ -127,5 +125,3 @@ void switch_settings_display_data() {
|
|||||||
display_settings();
|
display_settings();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
#include "ui_blue.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
void handleGetAppConfiguration(uint8_t p1, uint8_t p2, uint8_t *workBuffer, uint16_t dataLength, unsigned int *flags, unsigned int *tx) {
|
void handleGetAppConfiguration(uint8_t p1, uint8_t p2, uint8_t *workBuffer, uint16_t dataLength, unsigned int *flags, unsigned int *tx) {
|
||||||
UNUSED(p1);
|
UNUSED(p1);
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
#include "ui_blue.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
#endif
|
|
||||||
#include "feature_getPublicKey.h"
|
#include "feature_getPublicKey.h"
|
||||||
|
|
||||||
void handleGetPublicKey(uint8_t p1, uint8_t p2, uint8_t *dataBuffer, uint16_t dataLength, unsigned int *flags, unsigned int *tx) {
|
void handleGetPublicKey(uint8_t p1, uint8_t p2, uint8_t *dataBuffer, uint16_t dataLength, unsigned int *flags, unsigned int *tx) {
|
||||||
@@ -53,23 +49,8 @@ void handleGetPublicKey(uint8_t p1, uint8_t p2, uint8_t *dataBuffer, uint16_t da
|
|||||||
#ifndef NO_CONSENT
|
#ifndef NO_CONSENT
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
addressSummary[0] = '0';
|
|
||||||
addressSummary[1] = 'x';
|
|
||||||
os_memmove((unsigned char *)(addressSummary + 2), tmpCtx.publicKeyContext.address, 4);
|
|
||||||
os_memmove((unsigned char *)(addressSummary + 6), "...", 3);
|
|
||||||
os_memmove((unsigned char *)(addressSummary + 9), tmpCtx.publicKeyContext.address + 40 - 4, 4);
|
|
||||||
addressSummary[13] = '\0';
|
|
||||||
*/
|
|
||||||
|
|
||||||
// prepare for a UI based reply
|
|
||||||
#if defined(TARGET_BLUE)
|
|
||||||
snprintf(strings.common.fullAddress, sizeof(strings.common.fullAddress), "0x%.*s", 40, tmpCtx.publicKeyContext.address);
|
|
||||||
UX_DISPLAY(ui_address_blue, ui_address_blue_prepro);
|
|
||||||
#else
|
|
||||||
snprintf(strings.common.fullAddress, sizeof(strings.common.fullAddress), "0x%.*s", 40, tmpCtx.publicKeyContext.address);
|
snprintf(strings.common.fullAddress, sizeof(strings.common.fullAddress), "0x%.*s", 40, tmpCtx.publicKeyContext.address);
|
||||||
ux_flow_init(0, ux_display_public_flow, NULL);
|
ux_flow_init(0, ux_display_public_flow, NULL);
|
||||||
#endif // #if TARGET_ID
|
|
||||||
|
|
||||||
*flags |= IO_ASYNCH_REPLY;
|
*flags |= IO_ASYNCH_REPLY;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "ui_callbacks.h"
|
#include "ui_callbacks.h"
|
||||||
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
|
|
||||||
UX_FLOW_DEF_NOCB(
|
UX_FLOW_DEF_NOCB(
|
||||||
ux_display_public_flow_1_step,
|
ux_display_public_flow_1_step,
|
||||||
pnn,
|
pnn,
|
||||||
@@ -42,6 +40,3 @@ const ux_flow_step_t * const ux_display_public_flow [] = {
|
|||||||
&ux_display_public_flow_4_step,
|
&ux_display_public_flow_4_step,
|
||||||
FLOW_END_STEP,
|
FLOW_END_STEP,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
#include "ui_blue.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
static const uint8_t const TOKEN_SIGNATURE_PUBLIC_KEY[] = {
|
static const uint8_t const TOKEN_SIGNATURE_PUBLIC_KEY[] = {
|
||||||
// production key 2019-01-11 03:07PM (erc20signer)
|
// production key 2019-01-11 03:07PM (erc20signer)
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
#include "ui_blue.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
static const char const SIGN_MAGIC[] = "\x19"
|
static const char const SIGN_MAGIC[] = "\x19"
|
||||||
"Ethereum Signed Message:\n";
|
"Ethereum Signed Message:\n";
|
||||||
@@ -89,11 +84,7 @@ void handleSignPersonalMessage(uint8_t p1, uint8_t p2, uint8_t *workBuffer, uint
|
|||||||
#ifdef NO_CONSENT
|
#ifdef NO_CONSENT
|
||||||
io_seproxyhal_touch_signMessage_ok(NULL);
|
io_seproxyhal_touch_signMessage_ok(NULL);
|
||||||
#else //NO_CONSENT
|
#else //NO_CONSENT
|
||||||
#if defined(TARGET_BLUE)
|
|
||||||
ui_approval_message_sign_blue_init();
|
|
||||||
#else
|
|
||||||
ux_flow_init(0, ux_sign_flow, NULL);
|
ux_flow_init(0, ux_sign_flow, NULL);
|
||||||
#endif // #if TARGET_ID
|
|
||||||
#endif // NO_CONSENT
|
#endif // NO_CONSENT
|
||||||
|
|
||||||
*flags |= IO_ASYNCH_REPLY;
|
*flags |= IO_ASYNCH_REPLY;
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
#include "ui_blue.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
static const char const SIGN_MAGIC[] = "\x19"
|
static const char const SIGN_MAGIC[] = "\x19"
|
||||||
"Ethereum Signed Message:\n";
|
"Ethereum Signed Message:\n";
|
||||||
@@ -52,12 +47,7 @@ void handleSignEIP712Message(uint8_t p1, uint8_t p2, uint8_t *workBuffer, uint16
|
|||||||
#ifdef NO_CONSENT
|
#ifdef NO_CONSENT
|
||||||
io_seproxyhal_touch_signMessage_ok(NULL);
|
io_seproxyhal_touch_signMessage_ok(NULL);
|
||||||
#else //NO_CONSENT
|
#else //NO_CONSENT
|
||||||
#if defined(TARGET_BLUE)
|
|
||||||
// TODO implement
|
|
||||||
ui_approval_message_sign_blue_init();
|
|
||||||
#else
|
|
||||||
ux_flow_init(0, ux_sign_712_v0_flow, NULL);
|
ux_flow_init(0, ux_sign_712_v0_flow, NULL);
|
||||||
#endif // #if TARGET_ID
|
|
||||||
#endif // NO_CONSENT
|
#endif // NO_CONSENT
|
||||||
|
|
||||||
*flags |= IO_ASYNCH_REPLY;
|
*flags |= IO_ASYNCH_REPLY;
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
#include "ui_blue.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
#endif
|
|
||||||
#include "feature_signTx.h"
|
#include "feature_signTx.h"
|
||||||
|
|
||||||
void handleSign(uint8_t p1, uint8_t p2, uint8_t *workBuffer, uint16_t dataLength, unsigned int *flags, unsigned int *tx) {
|
void handleSign(uint8_t p1, uint8_t p2, uint8_t *workBuffer, uint16_t dataLength, unsigned int *flags, unsigned int *tx) {
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "ui_callbacks.h"
|
#include "ui_callbacks.h"
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
#include "ui_blue.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
#endif
|
|
||||||
#ifdef HAVE_STARKWARE
|
#ifdef HAVE_STARKWARE
|
||||||
#include "stark_utils.h"
|
#include "stark_utils.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -231,11 +226,7 @@ customStatus_e customProcessor(txContext_t *context) {
|
|||||||
dataContext.rawDataContext.fieldOffset = 0;
|
dataContext.rawDataContext.fieldOffset = 0;
|
||||||
if (fieldPos == 0) {
|
if (fieldPos == 0) {
|
||||||
array_hexstr(strings.tmp.tmp, dataContext.rawDataContext.data, 4);
|
array_hexstr(strings.tmp.tmp, dataContext.rawDataContext.data, 4);
|
||||||
#if defined(TARGET_BLUE)
|
|
||||||
UX_DISPLAY(ui_data_selector_blue, ui_data_selector_blue_prepro);
|
|
||||||
#else
|
|
||||||
ux_flow_init(0, ux_confirm_selector_flow, NULL);
|
ux_flow_init(0, ux_confirm_selector_flow, NULL);
|
||||||
#endif // #if TARGET_ID
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
uint32_t offset = 0;
|
uint32_t offset = 0;
|
||||||
@@ -247,11 +238,7 @@ customStatus_e customProcessor(txContext_t *context) {
|
|||||||
strings.tmp.tmp[offset++] = ':';
|
strings.tmp.tmp[offset++] = ':';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined(TARGET_BLUE)
|
|
||||||
UX_DISPLAY(ui_data_parameter_blue, ui_data_parameter_blue_prepro);
|
|
||||||
#else
|
|
||||||
ux_flow_init(0, ux_confirm_parameter_flow, NULL);
|
ux_flow_init(0, ux_confirm_parameter_flow, NULL);
|
||||||
#endif // #if TARGET_ID
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -377,9 +364,6 @@ void finalizeParsing(bool direct) {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
os_memmove((void*)addressSummary, CONTRACT_ADDRESS, sizeof(CONTRACT_ADDRESS));
|
|
||||||
#endif
|
|
||||||
strcpy(strings.common.fullAddress, "Contract");
|
strcpy(strings.common.fullAddress, "Contract");
|
||||||
}
|
}
|
||||||
if ((contractProvisioned == CONTRACT_NONE) || (contractProvisioned == CONTRACT_ERC20) ||
|
if ((contractProvisioned == CONTRACT_NONE) || (contractProvisioned == CONTRACT_ERC20) ||
|
||||||
@@ -438,9 +422,6 @@ void finalizeParsing(bool direct) {
|
|||||||
io_seproxyhal_touch_tx_ok(NULL);
|
io_seproxyhal_touch_tx_ok(NULL);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
#if defined(TARGET_BLUE)
|
|
||||||
ui_approval_transaction_blue_init();
|
|
||||||
#else
|
|
||||||
|
|
||||||
#ifdef HAVE_STARKWARE
|
#ifdef HAVE_STARKWARE
|
||||||
|
|
||||||
@@ -492,7 +473,6 @@ void finalizeParsing(bool direct) {
|
|||||||
ux_flow_init(0,
|
ux_flow_init(0,
|
||||||
((dataPresent && !N_storage.contractDetails) ? ux_approval_tx_data_warning_flow : ux_approval_tx_flow),
|
((dataPresent && !N_storage.contractDetails) ? ux_approval_tx_data_warning_flow : ux_approval_tx_flow),
|
||||||
NULL);
|
NULL);
|
||||||
#endif // #if TARGET_ID
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "ui_callbacks.h"
|
#include "ui_callbacks.h"
|
||||||
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
|
|
||||||
UX_FLOW_DEF_NOCB(
|
UX_FLOW_DEF_NOCB(
|
||||||
ux_confirm_selector_flow_1_step,
|
ux_confirm_selector_flow_1_step,
|
||||||
pnn,
|
pnn,
|
||||||
@@ -160,6 +158,4 @@ const ux_flow_step_t * const ux_approval_tx_data_warning_flow [] = {
|
|||||||
&ux_approval_tx_5_step,
|
&ux_approval_tx_5_step,
|
||||||
&ux_approval_tx_6_step,
|
&ux_approval_tx_6_step,
|
||||||
FLOW_END_STEP,
|
FLOW_END_STEP,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -4,12 +4,7 @@
|
|||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
#include "stark_utils.h"
|
#include "stark_utils.h"
|
||||||
#include "feature_stark_getPublicKey.h"
|
#include "feature_stark_getPublicKey.h"
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
#include "ui_blue.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
void handleStarkwareGetPublicKey(uint8_t p1, uint8_t p2, uint8_t *dataBuffer, uint16_t dataLength, unsigned int *flags, unsigned int *tx) {
|
void handleStarkwareGetPublicKey(uint8_t p1, uint8_t p2, uint8_t *dataBuffer, uint16_t dataLength, unsigned int *flags, unsigned int *tx) {
|
||||||
UNUSED(dataLength);
|
UNUSED(dataLength);
|
||||||
|
|||||||
@@ -2,12 +2,7 @@
|
|||||||
|
|
||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
#include "ui_blue.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
void handleStarkwareProvideQuantum(uint8_t p1, uint8_t p2, uint8_t *dataBuffer, uint16_t dataLength, unsigned int *flags, unsigned int *tx) {
|
void handleStarkwareProvideQuantum(uint8_t p1, uint8_t p2, uint8_t *dataBuffer, uint16_t dataLength, unsigned int *flags, unsigned int *tx) {
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
|
|||||||
@@ -3,12 +3,7 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
#include "stark_utils.h"
|
#include "stark_utils.h"
|
||||||
#ifdef TARGET_BLUE
|
|
||||||
#include "ui_blue.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_UX_FLOW
|
|
||||||
#include "ui_flow.h"
|
#include "ui_flow.h"
|
||||||
#endif
|
|
||||||
#include "poorstream.h"
|
#include "poorstream.h"
|
||||||
#include "ui_callbacks.h"
|
#include "ui_callbacks.h"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user