From ac3c1a19cf0188e501803dba10494acf16994878 Mon Sep 17 00:00:00 2001 From: BTChip github Date: Wed, 29 Mar 2017 00:03:21 +0200 Subject: [PATCH] Build with new SDK scripts, fix USB disconnect, add pending icons --- Makefile | 212 ++++++++----------------------- glyphs/badge_bitcoin_testnet.gif | Bin 0 -> 362 bytes glyphs/badge_komodo.gif | Bin 0 -> 386 bytes glyphs/badge_peercoin.gif | Bin 0 -> 361 bytes glyphs/badge_stratis.gif | Bin 0 -> 363 bytes glyphs/icon_komodo.gif | Bin 0 -> 77 bytes icon_komodo.gif | Bin 0 -> 76 bytes icon_komodo_blue.gif | Bin 0 -> 466 bytes icon_peercoin_blue.gif | Bin 0 -> 436 bytes icon_stratis_blue.gif | Bin 0 -> 456 bytes src/main.c | 62 +++++---- src/usbd_hid_impl.c | 32 +++-- src/usbd_hid_impl.h | 11 ++ 13 files changed, 119 insertions(+), 198 deletions(-) create mode 100644 glyphs/badge_bitcoin_testnet.gif create mode 100644 glyphs/badge_komodo.gif create mode 100644 glyphs/badge_peercoin.gif create mode 100644 glyphs/badge_stratis.gif create mode 100644 glyphs/icon_komodo.gif create mode 100644 icon_komodo.gif create mode 100644 icon_komodo_blue.gif create mode 100644 icon_peercoin_blue.gif create mode 100644 icon_stratis_blue.gif create mode 100644 src/usbd_hid_impl.h diff --git a/Makefile b/Makefile index ad3ee0f..0fc2ea2 100755 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ #******************************************************************************* -# Ledger Blue -# (c) 2016 Ledger +# Ledger App +# (c) 2017 Ledger # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,71 +14,19 @@ # See the License for the specific language governing permissions and # limitations under the License. #******************************************************************************* -#extract TARGET_ID from the SDK to allow for makefile choices -TARGET_ID := $(shell cat $(BOLOS_SDK)/include/bolos_target.h | grep 0x | cut -f3 -d' ') -$(info TARGET_ID=$(TARGET_ID)) -APP_LOAD_PARAMS=--appFlags 0x50 --path "" --curve secp256k1 + +ifeq ($(BOLOS_SDK),) +$(error Environment variable BOLOS_SDK is not set) +endif +include $(BOLOS_SDK)/Makefile.defines + +APP_LOAD_PARAMS=--appFlags 0x50 --path "" --curve secp256k1 $(COMMON_LOAD_PARAMS) APPVERSION_M=1 APPVERSION_N=1 APPVERSION_P=5 APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) -#prepare hsm generation -ifeq ($(TARGET_ID),0x31000002) -LOADFLAGS = --params --appVersion $(APPVERSION) -else -endif - - -################ -# Default rule # -################ - -all: default - -# consider every intermediate target as final to avoid deleting intermediate files -.SECONDARY: - -# disable builtin rules that overload the build process (and the debug log !!) -.SUFFIXES: -MAKEFLAGS += -r - -SHELL = /bin/bash -#.ONESHELL: - - -############ -# Platform # -############ -PROG := token - -CONFIG_PRODUCTIONS := bin/$(PROG) - -GLYPH_FILES := $(addprefix glyphs/,$(sort $(notdir $(shell find glyphs/)))) -GLYPH_DESTC := src/glyphs.c -GLYPH_DESTH := src/glyphs.h -$(GLYPH_DESTC) $(GLYPH_DESTH): $(GLYPH_FILES) $(BOLOS_SDK)/icon.py - -rm $@ - for gif in $(GLYPH_FILES) ; do python $(BOLOS_SDK)/icon.py $$gif glyphcheader ; done > $(GLYPH_DESTH) - for gif in $(GLYPH_FILES) ; do python $(BOLOS_SDK)/icon.py $$gif glyphcfile ; done > $(GLYPH_DESTC) - - -SOURCE_PATH := src $(BOLOS_SDK)/src $(dir $(shell find $(BOLOS_SDK)/lib_stusb* | grep "\.c$$")) -SOURCE_FILES := $(foreach path, $(SOURCE_PATH),$(shell find $(path) | grep -E "\.c$$|\.s") ) $(GLYPH_DESTC) -INCLUDES_PATH := $(dir $(shell find $(BOLOS_SDK)/lib_stusb* | grep "\.h$$")) include src $(BOLOS_SDK)/include $(BOLOS_SDK)/include/arm - - -### platform definitions -DEFINES := ST31 gcc __IO=volatile - -DEFINES += OS_IO_SEPROXYHAL IO_SEPROXYHAL_BUFFER_SIZE_B=300 -DEFINES += HAVE_BAGL HAVE_SPRINTF -#DEFINES += HAVE_PRINTF PRINTF=screen_printf -DEFINES += PRINTF\(...\)= -DEFINES += HAVE_IO_USB HAVE_L4_USBLIB IO_USB_MAX_ENDPOINTS=6 IO_HID_EP_LENGTH=64 HAVE_USB_APDU -DEFINES += LEDGER_MAJOR_VERSION=$(APPVERSION_M) LEDGER_MINOR_VERSION=$(APPVERSION_N) LEDGER_PATCH_VERSION=$(APPVERSION_P) TCS_LOADER_PATCH_VERSION=0 APPVERSION=\"$(APPVERSION)\" - # ifndef COIN # COIN =bitcoin # endif @@ -107,6 +55,10 @@ else ifeq ($(COIN),zcash) # Zcash DEFINES += BTCHIP_P2PKH_VERSION=7352 BTCHIP_P2SH_VERSION=7357 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Zcash\" COINID_UPCASE=\"ZCASH\" COLOR_HDR=0x3790CA COLOR_DB=0x9BC8E5 COINID_NAME=\"Zcash\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"ZEC\" COIN_ZCASH APPNAME ="Zcash" +else ifeq ($(COIN),komodo) +# Komodo +DEFINES += BTCHIP_P2PKH_VERSION=60 BTCHIP_P2SH_VERSION=85 BTCHIP_COIN_FAMILY=1 BTCHIP_COINID=\"Komodo\" COINID_UPCASE=\"KMD\" COLOR_HDR=0x326464 COLOR_DB=0x99b2b2 COINID_NAME=\"Komodo\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"KMD\" COIN_KOMODO +APPNAME ="Komodo" else ifeq ($(COIN),stratis) # Stratis DEFINES += BTCHIP_P2PKH_VERSION=63 BTCHIP_P2SH_VERSION=125 BTCHIP_COIN_FAMILY=2 BTCHIP_COINID=\"Stratis\" COINID_UPCASE=\"STRAT\" COLOR_HDR=0x3790CA COLOR_DB=0x9BC8E5 COINID_NAME=\"Strat\" COINID=$(COIN) BTCHIP_COINID_SHORT=\"STRAT\" COIN_STRATIS HAVE_PEERCOIN_SUPPORT @@ -117,16 +69,34 @@ DEFINES += BTCHIP_P2PKH_VERSION=55 BTCHIP_P2SH_VERSION=117 BTCHIP_COIN_FAMILY=2 APPNAME ="Peercoin" else ifeq ($(filter clean,$(MAKECMDGOALS)),) -$(error Unsupported COIN - use bitcoin_testnet, bitcoin, litecoin, dogecoin, dash, zcash, stratis, peercoin) +$(error Unsupported COIN - use bitcoin_testnet, bitcoin, litecoin, dogecoin, dash, zcash, komodo, stratis, peercoin) endif endif -ifeq ($(TARGET_ID),0x31000002) +ifeq ($(TARGET_NAME),TARGET_BLUE) ICONNAME=icon_$(COIN)_blue.gif else ICONNAME=icon_$(COIN).gif endif +################ +# Default rule # +################ + +all: default + +############ +# Platform # +############ + +DEFINES += OS_IO_SEPROXYHAL IO_SEPROXYHAL_BUFFER_SIZE_B=300 +DEFINES += HAVE_BAGL HAVE_SPRINTF +#DEFINES += HAVE_PRINTF PRINTF=screen_printf +DEFINES += PRINTF\(...\)= +DEFINES += HAVE_IO_USB HAVE_L4_USBLIB IO_USB_MAX_ENDPOINTS=6 IO_HID_EP_LENGTH=64 HAVE_USB_APDU +DEFINES += LEDGER_MAJOR_VERSION=$(APPVERSION_M) LEDGER_MINOR_VERSION=$(APPVERSION_N) LEDGER_PATCH_VERSION=$(APPVERSION_P) TCS_LOADER_PATCH_VERSION=0 + + # U2F DEFINES += HAVE_U2F DEFINES += USB_SEGMENT_SIZE=64 @@ -134,117 +104,41 @@ DEFINES += BLE_SEGMENT_SIZE=32 #max MTU, min 20 #DEFINES += U2F_MAX_MESSAGE_SIZE=264 #257+5+2 DEFINES += U2F_MAX_MESSAGE_SIZE=200 DEFINES += UNUSED\(x\)=\(void\)x +DEFINES += APPVERSION=\"$(APPVERSION)\" ############## # Compiler # ############## -GCCPATH := $(BOLOS_ENV)/gcc-arm-none-eabi-5_3-2016q1/bin/ -CLANGPATH := $(BOLOS_ENV)/clang-arm-fropi/bin -CC := $(CLANGPATH)/clang - -CFLAGS_SHARED := -CFLAGS_SHARED += -gdwarf-2 -gstrict-dwarf -CFLAGS_SHARED += -mcpu=cortex-m0 -mthumb -CFLAGS_SHARED += -fno-common -mtune=cortex-m0 -mlittle-endian -CFLAGS_SHARED += -std=gnu99 -Werror=int-to-pointer-cast -Wall -Wextra #-save-temps -CFLAGS_SHARED += -fdata-sections -ffunction-sections -funsigned-char -fshort-enums -CFLAGS_SHARED += -mno-unaligned-access -CFLAGS_SHARED += -Wno-unused-parameter -Wno-duplicate-decl-specifier - -#CFLAGS_SHARED += --analyze -CFLAGS_SHARED += -fropi --target=armv6m-none-eabi -#CFLAGS += -finline-limit-0 -funsigned-bitfields - -CFLAGS += -O3 -Os $(CFLAGS_SHARED) - -AS := $(GCCPATH)/arm-none-eabi-gcc -AFLAGS += -ggdb2 -O3 -Os -mcpu=cortex-m0 -fno-common -mtune=cortex-m0 - -# NOT SUPPORTED BY STM3L152 CFLAGS += -fpack-struct -#-pg --coverage -LD := $(GCCPATH)/arm-none-eabi-gcc -LDFLAGS := -LDFLAGS += -gdwarf-2 -gstrict-dwarf -#LDFLAGS += -O0 -g3 -LDFLAGS += -O3 -Os -#LDFLAGS += -O0 -LDFLAGS += -Wall -LDFLAGS += -mcpu=cortex-m0 -mthumb -LDFLAGS += -fno-common -ffunction-sections -fdata-sections -fwhole-program -nostartfiles -LDFLAGS += -mno-unaligned-access -#LDFLAGS += -nodefaultlibs -#LDFLAGS += -nostdlib -nostdinc -LDFLAGS += -T$(BOLOS_SDK)/script.ld -Wl,--gc-sections -Wl,-Map,debug/$(PROG).map,--cref -LDLIBS += -Wl,--library-path -Wl,$(GCCPATH)/../lib/armv6-m/ -#LDLIBS += -Wl,--start-group -LDLIBS += -lm -lgcc -lc -#LDLIBS += -Wl,--end-group -# -mno-unaligned-access -#-pg --coverage - -### computed variables -VPATH := $(dir $(SOURCE_FILES)) -OBJECT_FILES := $(sort $(addprefix obj/, $(addsuffix .o, $(basename $(notdir $(SOURCE_FILES)))))) -DEPEND_FILES := $(sort $(addprefix dep/, $(addsuffix .d, $(basename $(notdir $(SOURCE_FILES)))))) +#GCCPATH := $(BOLOS_ENV)/gcc-arm-none-eabi-5_3-2016q1/bin/ +#CLANGPATH := $(BOLOS_ENV)/clang-arm-fropi/bin/ +CC := $(CLANGPATH)clang -ifeq ($(filter clean,$(MAKECMDGOALS)),) --include $(DEPEND_FILES) -endif +#CFLAGS += -O0 +CFLAGS += -O3 -Os -clean: - rm -fr obj bin debug dep $(GLYPH_DESTC) $(GLYPH_DESTH) +AS := $(GCCPATH)arm-none-eabi-gcc -prepare: $(GLYPH_DESTC) - @mkdir -p bin obj debug dep - -.SECONDEXPANSION: +LD := $(GCCPATH)arm-none-eabi-gcc +LDFLAGS += -O3 -Os +LDLIBS += -lm -lgcc -lc -# default is not to display make commands -log = $(if $(strip $(VERBOSE)),$1,@$1) +# import rules to compile glyphs(/pone) +include $(BOLOS_SDK)/Makefile.glyphs -default: prepare bin/$(PROG) +### computed variables +APP_SOURCE_PATH += src +SDK_SOURCE_PATH += lib_stusb -reload: delete load load: all - python -m ledgerblue.loadApp --targetId $(TARGET_ID) --fileName bin/$(PROG).hex --appName $(APPNAME) --icon `python $(BOLOS_SDK)/icon.py $(ICONNAME) hexbitmaponly` $(LOADFLAGS) $(APP_LOAD_PARAMS) + python -m ledgerblue.loadApp $(APP_LOAD_PARAMS) delete: - python -m ledgerblue.deleteApp --targetId $(TARGET_ID) --appName $(APPNAME) + python -m ledgerblue.deleteApp $(COMMON_DELETE_PARAMS) -bin/$(PROG): $(OBJECT_FILES) $(BOLOS_SDK)/script.ld - @echo "[LINK] $@" - $(call log,$(call link_cmdline,$(OBJECT_FILES) $(LDLIBS),$@)) - $(call log,$(GCCPATH)/arm-none-eabi-objcopy -O ihex -S bin/$(PROG) bin/$(PROG).hex) - $(call log,mv bin/$(PROG) bin/$(PROG).elf) - $(call log,cp bin/$(PROG).elf obj) - $(call log,$(GCCPATH)/arm-none-eabi-objdump -S -d bin/$(PROG).elf > debug/$(PROG).asm) +# import generic rules from the sdk +include $(BOLOS_SDK)/Makefile.rules +#add dependency on custom makefile filename dep/%.d: %.c Makefile - @echo "[DEP] $@" - @mkdir -p dep - $(call log,$(call dep_cmdline,$(INCLUDES_PATH), $(DEFINES),$<,$@)) - -obj/%.o: %.c dep/%.d - @echo "[CC] $@" - $(call log,$(call cc_cmdline,$(INCLUDES_PATH), $(DEFINES),$<,$@)) - -obj/%.o: %.s - @echo "[CC] $@" - $(call log,$(call as_cmdline,$(INCLUDES_PATH), $(DEFINES),$<,$@)) - -### BEGIN GCC COMPILER RULES - -# link_cmdline(objects,dest) Macro that is used to format arguments for the linker -link_cmdline = $(LD) $(LDFLAGS) -o $(2) $(1) - -# dep_cmdline(include,defines,src($<),dest($@)) Macro that is used to format arguments for the dependency creator -dep_cmdline = $(CC) -M $(CFLAGS) $(addprefix -D,$(2)) $(addprefix -I,$(1)) $(3) | sed 's/\($*\)\.o[ :]*/obj\/\1.o: /g' | sed -e 's/[:\t ][^ ]\+\.c//g' > dep/$(basename $(notdir $(4))).d 2>/dev/null - -# cc_cmdline(include,defines,src,dest) Macro that is used to format arguments for the compiler -cc_cmdline = $(CC) -c $(CFLAGS) $(addprefix -D,$(2)) $(addprefix -I,$(1)) -o $(4) $(3) - -as_cmdline = $(AS) -c $(AFLAGS) $(addprefix -D,$(2)) $(addprefix -I,$(1)) -o $(4) $(3) - -### END GCC COMPILER RULES diff --git a/glyphs/badge_bitcoin_testnet.gif b/glyphs/badge_bitcoin_testnet.gif new file mode 100644 index 0000000000000000000000000000000000000000..df0c7abb17dd681f27c330874b790cc71c637e67 GIT binary patch literal 362 zcmV-w0hRtoNk%w1VKM+R0FeLy-QC^o?d{CW%=!8GA^8LV00000EC2ui05SkF00092 zoR4`C00N^6s@j`e++5;sHQhJ@6bL@tbQ+AdqF1oCpSaobphD)p=m`KoUapv+d1O5z zveHCFpO)#Rr=up973EO-!CJWBYXo{OgUADKR;_R&R8A?R4S836h=?97U?lJtmnK*j z)`kbw>oyzPj&D?B-v0C{n%xdr$ zeIYyyvQC;PLFaxz8gCZ3YR5VQ_rly!vX7uQRB$F?6BMYSJaX?SN`z?5A{;S0dmh5^ zg3OjiD(L=w*@&s5Mpsu-MV!1H98obzBN+*veb!xuqW IASnOwS82+62)SJf9bY9@dasz8Upu*HaBr_$L&Nyg?XcEPoH zM_b5|2;ny}e2P(NdgsN_@~8`(yg<@iT7ev5I6zX|+0k9f>zJ)7@oFkiTYbywzT1g$6|m literal 0 HcmV?d00001 diff --git a/glyphs/badge_stratis.gif b/glyphs/badge_stratis.gif new file mode 100644 index 0000000000000000000000000000000000000000..a01878e4a59735c02c298a9ec8a0e6a187ffe677 GIT binary patch literal 363 zcmV-x0hInnNk%w1VKM+R0FeLy;Nal#@$t;e%=!8GA^8LV00000EC2ui05SkF00092 zoR4_{Ee{(As@l5%+I}?(^waZdN()bhe~3)7m4zR3Y*YzV*n~> zdw`pFG6|)kTJihYq}#A`RIJd^tDDR`?dU^i=pp26@#UZ=b_Y7Vj7%z+LA(&C%IGmBge#ZxpD&nPf_ JvQSb006X~@rJVo( literal 0 HcmV?d00001 diff --git a/glyphs/icon_komodo.gif b/glyphs/icon_komodo.gif new file mode 100644 index 0000000000000000000000000000000000000000..2d22e51d1e2158c9e7308cd38a9b986da7ffffaa GIT binary patch literal 77 zcmZ?wbhEHbE)HSN2L?1 cS<=Fvcg#wOTDX0ylxL(gyR)#{VO9of04a7Cc>n+a literal 0 HcmV?d00001 diff --git a/icon_komodo.gif b/icon_komodo.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0c2536f3f47f68b22817835542aee14dde710d4 GIT binary patch literal 76 zcmZ?wbhEHb6krfwXkY+=|Ns9h{$v3&bwDIYhJi`Br+?+?y9|xpA?q?W95Tqb5;%|5 XD`|Rx+N?$K(G#z~zVfYCguxmB5E2) z@ZIF(xys7<`T76<|1e}^A^8LV00000EC2ui05SkF000F4u*pf=34*-MyZ3|;993yH z%K&_A%L2o4mdfDXcsD4sbga4H4L~{tgh*V#bVxc~#fbv=ta1RniOtI03?_@N_#ta- z$JTFyihcqtVgy2bvBC@vhe2h`JhdU%ZmkZl_P zm5dB?4+w#b1#Dvig9QPo4*&t5d7EvEc?mfQj+_L71wyitVx|g7Q`I9OcqD(9>g$ zS*LB?1byq`Ob|44+8m-GHtiL%RvpS^L(?nIuOPvHIN5Tr(8V0f-77=R3*d+ I!4UueJLM)e^Gms5me!($(3Eq?gu>{_W5IUV@7z4I zR=wlI%j?nk`T76<|245sEC2ui05SkF000F4u*pdqSj3>Ap8p`I42VH2K&7sY5FlYJ z&mIy8>>3Po?|XwlZUTV)jy*(*mEa+tvq547a6+%4!IEOcdOwIt;7k4pB?4>NJHR!@ z>+-o9_l5!W^(9}%@W~lS0SN~I8ER`9NCys$jsO7$aT|+{mW==e9bX)kmzM$sUzS> zuaUMR(|(L=#}HFQ8Y7@6$frtDLvu)JNL(2(@KXnc2`w literal 0 HcmV?d00001 diff --git a/icon_stratis_blue.gif b/icon_stratis_blue.gif new file mode 100644 index 0000000000000000000000000000000000000000..3121749c6c1873fb059f9db3c6385f8d1260d615 GIT binary patch literal 456 zcmV;(0XP0fNk%w1VKM+R0J8u9akSs__xT}>&D-nti^AmT^Z7uV(+h>mv)1fbsM(*( z=g8vntJCcH`T76<{{Vr>EC2ui05SkF000F4u*peVK_nS*p8p_t2u4C6MWwDypcr8+ z&z_+KtQrsk?f)JD0henGV8Eo$Fvu->%IHk6SPh`kY)H_g1d!VB$3T=2#OM!U62PXz z0;1ymR!G3~u)&glU;1enX#xxb03Bi(Vgd>djt&KfVH#ROkCzSu30fOc2Sb>lno=A} z2LJ`3s*VeIK8Qc3sjIXO2(D-gwY!d+bd0>KqkzD{j*+l{4+03h$jTn4PzKGaJBR?j zd8iK8HM*AyPzeL9xMAGKk`D>G;@_98eV>=lAO_%$!^*|_zSNiYDMQpRQ$9$N4kUX6 z?Aw~{QR5mFtjcJa>17~u(&I+%|r z{vc6_fUu8BN-S#h$X*r`g9@z+a{^iz6i&6IkQr6Ro(6NOCb84PjaC_PCY