mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-06-20 20:38:24 -07:00
Fix chunk sizes
This commit is contained in:
@@ -33,8 +33,11 @@
|
||||
#define TYPE_4_TAG_T4T_CC_FILE_ID 0xE1, 0x03
|
||||
#define TYPE_4_TAG_T4T_CC_VNO (0x20)
|
||||
|
||||
// 4a layer adds 1..3 byte prefix, 3a layer adds 2 byte suffix and has 256 byte buffer
|
||||
#define TYPE_4_TAG_BUF_SIZE (256U - 3U - 2U)
|
||||
// Read returns 2 byte status trailer, write sends 5 byte command header
|
||||
#define TYPE_4_TAG_BUF_SIZE (TYPE_4_TAG_ISO_RW_CHUNK_LEN + 5)
|
||||
#define TYPE_4_TAG_CHUNK_LEN MIN(TYPE_4_TAG_BUF_SIZE - 5U, TYPE_4_TAG_ISO_RW_CHUNK_LEN)
|
||||
#define TYPE_4_TAG_DEFAULT_SIZE (2048U)
|
||||
|
||||
// Capability Container parsing structures
|
||||
|
||||
|
||||
@@ -112,13 +112,15 @@ static Type4TagError type_4_tag_listener_iso_read(
|
||||
bit_lib_num_to_bytes_be(sizeof(cc_buf), sizeof(cc->len), (void*)&cc->len);
|
||||
cc->t4t_vno = TYPE_4_TAG_T4T_CC_VNO;
|
||||
bit_lib_num_to_bytes_be(
|
||||
instance->data->is_tag_specific ? instance->data->chunk_max_read :
|
||||
TYPE_4_TAG_ISO_RW_CHUNK_LEN,
|
||||
instance->data->is_tag_specific ?
|
||||
MIN(instance->data->chunk_max_read, TYPE_4_TAG_CHUNK_LEN) :
|
||||
TYPE_4_TAG_CHUNK_LEN,
|
||||
sizeof(cc->mle),
|
||||
(void*)&cc->mle);
|
||||
bit_lib_num_to_bytes_be(
|
||||
instance->data->is_tag_specific ? instance->data->chunk_max_write :
|
||||
TYPE_4_TAG_ISO_RW_CHUNK_LEN,
|
||||
instance->data->is_tag_specific ?
|
||||
MIN(instance->data->chunk_max_write, TYPE_4_TAG_CHUNK_LEN) :
|
||||
TYPE_4_TAG_CHUNK_LEN,
|
||||
sizeof(cc->mlc),
|
||||
(void*)&cc->mlc);
|
||||
cc->tlv[0].type = Type4TagCcTlvTypeNdefFileCtrl;
|
||||
@@ -129,7 +131,7 @@ static Type4TagError type_4_tag_listener_iso_read(
|
||||
(void*)&cc->tlv[0].value.ndef_file_ctrl.file_id);
|
||||
bit_lib_num_to_bytes_be(
|
||||
instance->data->is_tag_specific ? instance->data->ndef_max_len :
|
||||
TYPE_4_TAG_ISO_RW_CHUNK_LEN,
|
||||
TYPE_4_TAG_DEFAULT_SIZE,
|
||||
sizeof(cc->tlv[0].value.ndef_file_ctrl.max_len),
|
||||
(void*)&cc->tlv[0].value.ndef_file_ctrl.max_len);
|
||||
cc->tlv[0].value.ndef_file_ctrl.read_perm =
|
||||
|
||||
@@ -198,7 +198,7 @@ Type4TagError type_4_tag_poller_read_ndef(Type4TagPoller* instance) {
|
||||
FURI_LOG_D(TAG, "NDEF file is empty");
|
||||
break;
|
||||
}
|
||||
uint8_t chunk_max = MIN(instance->data->chunk_max_read, TYPE_4_TAG_ISO_RW_CHUNK_LEN);
|
||||
uint8_t chunk_max = MIN(instance->data->chunk_max_read, TYPE_4_TAG_CHUNK_LEN);
|
||||
if(ndef_len > TYPE_4_TAG_ISO_READ_P_OFFSET_MAX + chunk_max - sizeof(ndef_len)) {
|
||||
FURI_LOG_E(TAG, "NDEF file too long: %zu bytes", ndef_len);
|
||||
error = Type4TagErrorNotSupported;
|
||||
|
||||
Reference in New Issue
Block a user