Skip to content

Commit 3d7d4e7

Browse files
Merge pull request #1164 from LedgerHQ/release_08_2025-rc2
Release 08 2025 rc2
2 parents c6b20af + 0b926be commit 3d7d4e7

File tree

8 files changed

+61
-32
lines changed

8 files changed

+61
-32
lines changed

lib_blewbxx/src/ble_cmd.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ void ble_aci_gap_forge_cmd_clear_security_db(ble_cmd_data_t *cmd_data)
198198
void ble_aci_gap_forge_cmd_set_discoverable(ble_cmd_data_t *cmd_data,
199199
ble_cmd_set_discoverable_data_t *data)
200200
{
201-
if ((!cmd_data) || (!data) || (data->local_name_length > BLE_GAP_MAX_LOCAL_NAME_LENGTH)) {
201+
if ((!cmd_data) || (!data) || (data->local_name_length > (BLE_GAP_MAX_LOCAL_NAME_LENGTH+1))) {
202202
return;
203203
}
204204

@@ -217,9 +217,9 @@ void ble_aci_gap_forge_cmd_set_discoverable(ble_cmd_data_t *cmd
217217
cmd_data->hci_cmd_buffer[cmd_data->hci_cmd_buffer_length++] = data->own_address_type;
218218
// Advertising_Filter_Policy
219219
cmd_data->hci_cmd_buffer[cmd_data->hci_cmd_buffer_length++] = data->advertising_filter_policy;
220-
// Local_Name_Length
220+
// Local_Name_Length + 1 byte BLE_AD_TYPE_COMPLETE_LOCAL_NAME
221221
cmd_data->hci_cmd_buffer[cmd_data->hci_cmd_buffer_length++] = data->local_name_length;
222-
// Local_Name
222+
// Local_Name + 1 byte BLE_AD_TYPE_COMPLETE_LOCAL_NAME
223223
if (data->local_name_length && data->local_name) {
224224
memcpy(&cmd_data->hci_cmd_buffer[cmd_data->hci_cmd_buffer_length],
225225
data->local_name,

lib_blewbxx/src/ble_ledger.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ typedef struct ble_ledger_data_s {
8484
// General
8585
bool enabled;
8686
ble_state_t state;
87-
char device_name[BLE_GAP_MAX_LOCAL_NAME_LENGTH + 1];
87+
char device_name[BLE_GAP_MAX_LOCAL_NAME_LENGTH];
8888
char device_name_length;
8989
uint8_t random_address[BLE_CONFIG_DATA_RANDOM_ADDRESS_LEN];
9090
uint8_t nb_of_profile;
@@ -162,7 +162,7 @@ static void get_device_name(void)
162162
memset(ble_ledger_data.device_name, 0, sizeof(ble_ledger_data.device_name));
163163
ble_ledger_data.device_name_length = os_setting_get(OS_SETTING_DEVICENAME,
164164
(uint8_t *) ble_ledger_data.device_name,
165-
sizeof(ble_ledger_data.device_name) - 1);
165+
sizeof(ble_ledger_data.device_name));
166166
}
167167

168168
static void start_mngr(uint8_t *hci_buffer, uint16_t length)
@@ -226,7 +226,7 @@ static void start_mngr(uint8_t *hci_buffer, uint16_t length)
226226
ble_aci_gap_forge_cmd_init(&ble_ledger_data.cmd_data,
227227
BLE_GAP_PERIPHERAL_ROLE,
228228
BLE_GAP_PRIVACY_DISABLED,
229-
sizeof(ble_ledger_data.device_name) - 1);
229+
sizeof(ble_ledger_data.device_name));
230230
send_hci_packet(0);
231231
break;
232232

lib_ccid/include/ccid_types.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,7 @@ typedef struct {
149149
uint16_t tx_message_length;
150150
uint16_t tx_message_offset;
151151

152-
uint8_t *tx_packet_buffer;
153-
uint8_t tx_packet_length;
152+
uint8_t tx_packet_length;
154153

155154
ccid_protocol_data_t0_t protocol_data;
156155

lib_ccid/src/ccid_transport.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ void CCID_TRANSPORT_tx(ccid_transport_t *handle,
150150
// Fill header
151151
if (buffer) {
152152
tx_packet_buffer[0] = handle->bulk_msg_header.in.msg_type;
153-
U4LE_ENCODE(handle->tx_packet_buffer, 1, handle->bulk_msg_header.in.length);
153+
U4LE_ENCODE(tx_packet_buffer, 1, handle->bulk_msg_header.in.length);
154154
tx_packet_buffer[5] = handle->bulk_msg_header.in.slot_number;
155155
tx_packet_buffer[6] = handle->bulk_msg_header.in.seq_number;
156156
tx_packet_buffer[7] = handle->bulk_msg_header.in.status;

lib_stusb/src/usbd_ctlreq.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,6 @@ USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef
237237
(void) USBD_LL_ClearStallEP(pdev, ep_addr);
238238
}
239239
(void) USBD_CtlSendStatus(pdev);
240-
ret = (USBD_StatusTypeDef) pdev->pClass->Setup(pdev, req);
241240
}
242241
break;
243242

lib_stusb/src/usbd_ledger.c

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
#include "os_io_seph_cmd.h"
3434
#include "seproxyhal_protocol.h"
3535

36-
3736
/* Private enumerations ------------------------------------------------------*/
3837
typedef enum {
3938
USBD_LEDGER_STATE_INITIALIZED = 0xA0,
@@ -570,19 +569,31 @@ void USBD_LEDGER_start(void)
570569
}
571570

572571
#ifdef HAVE_USB_HIDKBD
573-
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_HID_KBD && usbd_ledger_data.nb_of_class < USBD_MAX_NUM_INTERFACES) {
572+
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_HID_KBD
573+
&& usbd_ledger_data.nb_of_class < USBD_MAX_NUM_INTERFACES) {
574574
usbd_ledger_data.class[usbd_ledger_data.nb_of_class++]
575575
= (usbd_class_info_t *) PIC(&USBD_LEDGER_HID_KBD_class_info);
576576
}
577577
#else // !HAVE_USB_HIDKBD
578-
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_HID && usbd_ledger_data.nb_of_class < USBD_MAX_NUM_INTERFACES) {
578+
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_HID
579+
&& usbd_ledger_data.nb_of_class < USBD_MAX_NUM_INTERFACES) {
579580
usbd_ledger_data.class[usbd_ledger_data.nb_of_class++]
580581
= (usbd_class_info_t *) PIC(&USBD_LEDGER_HID_class_info);
581582
}
582583
#endif // !HAVE_USB_HIDKBD
583584

585+
#ifdef HAVE_WEBUSB
586+
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_WEBUSB
587+
&& usbd_ledger_data.nb_of_class < USBD_MAX_NUM_INTERFACES) {
588+
usbd_ledger_data.bcdusb = 0x10;
589+
usbd_ledger_data.class[usbd_ledger_data.nb_of_class++] = (usbd_class_info_t *) PIC(
590+
(USBD_ClassTypeDef *) (uintptr_t) &USBD_LEDGER_WEBUSB_class_info);
591+
}
592+
#endif // HAVE_WEBUSB
593+
584594
#ifdef HAVE_IO_U2F
585-
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_HID_U2F && usbd_ledger_data.nb_of_class < USBD_MAX_NUM_INTERFACES) {
595+
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_HID_U2F
596+
&& usbd_ledger_data.nb_of_class < USBD_MAX_NUM_INTERFACES) {
586597
usbd_ledger_data.class[usbd_ledger_data.nb_of_class++]
587598
= (usbd_class_info_t *) PIC(&USBD_LEDGER_HID_U2F_class_info);
588599
uint8_t buffer[4];
@@ -606,25 +617,22 @@ void USBD_LEDGER_start(void)
606617
USBD_LEDGER_CLASS_HID_U2F, USBD_LEDGER_HID_U2F_SETTING_ID_FREE_CID, buffer, 4);
607618
}
608619
#endif // HAVE_IO_U2F
620+
609621
#ifdef HAVE_CCID_USB
610-
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_CCID_BULK && usbd_ledger_data.nb_of_class < USBD_MAX_NUM_INTERFACES) {
611-
usbd_ledger_data.class[usbd_ledger_data.nb_of_class++]
612-
= (usbd_class_info_t *) PIC((USBD_ClassTypeDef *)(uintptr_t)&USBD_LEDGER_CCID_Bulk_class_info);
622+
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_CCID_BULK
623+
&& usbd_ledger_data.nb_of_class < USBD_MAX_NUM_INTERFACES) {
624+
usbd_ledger_data.class[usbd_ledger_data.nb_of_class++] = (usbd_class_info_t *) PIC(
625+
(USBD_ClassTypeDef *) (uintptr_t) &USBD_LEDGER_CCID_Bulk_class_info);
613626
}
614627
#endif // HAVE_CCID_USB
615-
#ifdef HAVE_WEBUSB
616-
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_WEBUSB && usbd_ledger_data.nb_of_class < USBD_MAX_NUM_INTERFACES) {
617-
usbd_ledger_data.bcdusb = 0x10;
618-
usbd_ledger_data.class[usbd_ledger_data.nb_of_class++]
619-
= (usbd_class_info_t *) PIC((USBD_ClassTypeDef *)(uintptr_t)&USBD_LEDGER_WEBUSB_class_info);
620-
}
621-
#endif // HAVE_WEBUSB
628+
622629
#ifdef HAVE_CDCUSB
623-
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_CDC && usbd_ledger_data.nb_of_class + 1 < USBD_MAX_NUM_INTERFACES) {
624-
usbd_ledger_data.class[usbd_ledger_data.nb_of_class++]
625-
= (usbd_class_info_t *) PIC((USBD_ClassTypeDef *)(uintptr_t)&USBD_LEDGER_CDC_Control_class_info);
626-
usbd_ledger_data.class[usbd_ledger_data.nb_of_class++]
627-
= (usbd_class_info_t *) PIC((USBD_ClassTypeDef *)(uintptr_t)&USBD_LEDGER_CDC_Data_class_info);
630+
if (usbd_ledger_init_data.class_mask & USBD_LEDGER_CLASS_CDC
631+
&& usbd_ledger_data.nb_of_class + 1 < USBD_MAX_NUM_INTERFACES) {
632+
usbd_ledger_data.class[usbd_ledger_data.nb_of_class++] = (usbd_class_info_t *) PIC(
633+
(USBD_ClassTypeDef *) (uintptr_t) &USBD_LEDGER_CDC_Control_class_info);
634+
usbd_ledger_data.class[usbd_ledger_data.nb_of_class++] = (usbd_class_info_t *) PIC(
635+
(USBD_ClassTypeDef *) (uintptr_t) &USBD_LEDGER_CDC_Data_class_info);
628636
usbd_ledger_data.usbd_iad = 1;
629637
}
630638
#endif // HAVE_CDCUSB
@@ -638,13 +646,27 @@ void USBD_LEDGER_start(void)
638646
usbd_ledger_data.bcdusb,
639647
usbd_ledger_data.usbd_iad,
640648
get_bos_desc);
641-
USBD_Init(&usbd_ledger_data.usbd_handle, (USBD_DescriptorsTypeDef*)(uintptr_t)&LEDGER_Desc, 0);
642-
USBD_RegisterClass(&usbd_ledger_data.usbd_handle, (USBD_ClassTypeDef *)(uintptr_t)&USBD_LEDGER_CLASS);
649+
USBD_Init(
650+
&usbd_ledger_data.usbd_handle, (USBD_DescriptorsTypeDef *) (uintptr_t) &LEDGER_Desc, 0);
651+
USBD_RegisterClass(&usbd_ledger_data.usbd_handle,
652+
(USBD_ClassTypeDef *) (uintptr_t) &USBD_LEDGER_CLASS);
643653
}
644654
if (usbd_ledger_data.state == USBD_LEDGER_STATE_STOPPED) {
645655
USBD_Start(&usbd_ledger_data.usbd_handle);
646656
usbd_ledger_data.state = USBD_LEDGER_STATE_RUNNING;
647657
}
658+
else {
659+
for (int index = 0; index < usbd_ledger_data.nb_of_class; index++) {
660+
usbd_class_info_t *class_info = usbd_ledger_data.class[index];
661+
if (class_info) {
662+
if (class_info->init) {
663+
USBD_StatusTypeDef ret = ((usbd_class_init_t) PIC(class_info->init))(
664+
&usbd_ledger_data.usbd_handle, class_info->cookie);
665+
UNUSED(ret);
666+
}
667+
}
668+
}
669+
}
648670
}
649671

650672
void USB_LEDGER_stop(void)

lib_stusb/src/usbd_ledger_hid_u2f.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
#include "u2f_types.h"
2424
#include "usbd_ledger_hid_u2f.h"
2525

26+
#ifdef HAVE_BOLOS
27+
#include "cx_crc_internal.h"
28+
#endif // !HAVE_BOLOS
2629

2730
/* Private enumerations ------------------------------------------------------*/
2831
enum ledger_hid_u2f_state_t {
@@ -607,9 +610,15 @@ int32_t USBD_LEDGER_HID_U2F_data_ready(USBD_HandleTypeDef *pdev,
607610
// so no way to check the value
608611
}
609612

613+
#ifdef HAVE_BOLOS
614+
uint16_t crc = cx_crc16_update_internal(0,
615+
handle->transport_data.rx_message_buffer,
616+
handle->transport_data.rx_message_length);
617+
#else // !HAVE_BOLOS
610618
uint16_t crc = cx_crc16_update(0,
611619
handle->transport_data.rx_message_buffer,
612620
handle->transport_data.rx_message_length);
621+
#endif // !HAVE_BOLOS
613622
if (!length_ok) {
614623
error_msg[0] = 0x67;
615624
error_msg[1] = 0x00;

lib_stusb/src/usbd_ledger_webusb.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ const uint8_t USBD_LEDGER_WINUSB_ms_os_20_descriptor_set[] = {
194194
// Microsoft OS 2.0 function subset header
195195
0x08, 0x00, // wLength
196196
0x02, 0x00, // wDescriptorType : MS_OS_20_SUBSET_HEADER_FUNCTION
197-
0x02, // bFirstInterface (dynamic) // TODO_IO
197+
0x01, // bFirstInterface (dynamic) // TODO_IO
198198
0x00, // bReserved
199199
0xa0, 0x00, // wSubsetLength
200200

0 commit comments

Comments
 (0)