mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-07-11 23:38:11 -07:00
Use / and %
This commit is contained in:
@@ -181,29 +181,32 @@ static bool ndef_get(Ndef* ndef, size_t pos, size_t len, void* buf) {
|
||||
// So the first 93 (31*3) data blocks correspond to 128 real blocks.
|
||||
// Last 128 blocks are 8 sectors: 15 data blocks, 1 sector trailer.
|
||||
// So the last 120 (8*15) data blocks correspond to 128 real blocks.
|
||||
div_t small_sector_data_blocks = div(pos, MF_CLASSIC_BLOCK_SIZE);
|
||||
const size_t real_block_data_offset = pos % MF_CLASSIC_BLOCK_SIZE;
|
||||
size_t small_sector_data_blocks = pos / MF_CLASSIC_BLOCK_SIZE;
|
||||
size_t large_sector_data_blocks = 0;
|
||||
if(small_sector_data_blocks.quot > 93) {
|
||||
large_sector_data_blocks = small_sector_data_blocks.quot - 93;
|
||||
small_sector_data_blocks.quot = 93;
|
||||
if(small_sector_data_blocks > 93) {
|
||||
large_sector_data_blocks = small_sector_data_blocks - 93;
|
||||
small_sector_data_blocks = 93;
|
||||
}
|
||||
|
||||
div_t small_sectors = div(small_sector_data_blocks.quot, 3);
|
||||
size_t real_block = small_sectors.quot * 4 + small_sectors.rem;
|
||||
if(small_sectors.quot >= 16) {
|
||||
const size_t small_sector_block_offset = small_sector_data_blocks % 3;
|
||||
const size_t small_sectors = small_sector_data_blocks / 3;
|
||||
size_t real_block = small_sectors * 4 + small_sector_block_offset;
|
||||
if(small_sectors >= 16) {
|
||||
real_block += 4; // Skip MAD2
|
||||
}
|
||||
if(large_sector_data_blocks) {
|
||||
div_t large_sectors = div(large_sector_data_blocks, 15);
|
||||
real_block += large_sectors.quot * 16 + large_sectors.rem;
|
||||
const size_t large_sector_block_offset = large_sector_data_blocks % 15;
|
||||
const size_t large_sectors = large_sector_data_blocks / 15;
|
||||
real_block += large_sectors * 16 + large_sector_block_offset;
|
||||
}
|
||||
|
||||
const uint8_t* cur = &ndef->mfc.blocks[real_block].data[small_sector_data_blocks.rem];
|
||||
const uint8_t* cur = &ndef->mfc.blocks[real_block].data[real_block_data_offset];
|
||||
while(len) {
|
||||
size_t sector_trailer = mf_classic_get_sector_trailer_num_by_block(real_block);
|
||||
const uint8_t* end = &ndef->mfc.blocks[sector_trailer].data[0];
|
||||
|
||||
size_t chunk_len = MIN((size_t)(end - cur), len);
|
||||
const size_t chunk_len = MIN((size_t)(end - cur), len);
|
||||
memcpy(buf, cur, chunk_len);
|
||||
len -= chunk_len;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user