Last active
December 15, 2023 02:34
-
-
Save sobiodarlington/1de944e84e5cd272d032b5434a333523 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| let accessBits = { | |
| byte6: { | |
| idx: { | |
| C23: 0, C22: 1, C21: 2, C20: 3, C13: 4, C12: 5, C11: 6, C10: 7 | |
| }, | |
| bits: [], | |
| }, | |
| byte7: { | |
| idx: { | |
| C13: 0, C12: 1, C11: 2, C10: 3, C33: 4, C32: 5, C31: 6, C30: 7 | |
| }, | |
| bits: [], | |
| }, | |
| byte8: { | |
| idx: { | |
| C33: 0, C32: 1, C31: 2, C30: 3, C23: 4, C22: 5, C21: 6, C20: 7 | |
| }, | |
| bits: [], | |
| }, | |
| }; | |
| let trailerBlockAc = { | |
| accessBitsHeader: ['C1', 'C2', 'C3'], | |
| byteGroup: ['KEYA', 'Access bits', 'KEYB', 'Remark'], | |
| condHeader: ['read', 'write'], | |
| '000': ['never', 'key A', 'key A', 'never', 'key A', 'key A', 'Key B may be read'], | |
| '010': ['never', 'never', 'key A', 'never', 'key A', 'never', 'Key B may be read',], | |
| '100': ['never', 'key B', 'key A|B', 'never', 'never', 'key B',], | |
| '110': ['never', 'never', 'key A| B', 'never', 'never', 'never',], | |
| '001': ['never', 'key A', 'key A', 'key A', 'key A', 'key A', 'Key B may be read, transport configuration'], | |
| '011': ['never', 'key B', 'key A|B', 'key B', 'never', 'key B'], | |
| '101': ['never', 'never', 'key A|B', 'key B', 'never', 'never'], | |
| '111': ['never', 'never', 'key A|B', 'never', 'never', 'never'] | |
| }; | |
| let dataBlockAc = { | |
| headers: ['Access bits', 'Access condition for', 'Application'], | |
| condHeader: ['read', 'write', 'increment', 'decrement, transfer, restore'], | |
| data: { | |
| '000': ['key A|B', 'key A|B', 'key A|B', 'key A|B', 'transport configuratio'], | |
| '010': ['key A | B', 'never', 'never', 'never', 'read/write block'], | |
| '100': ['key A| B', 'key B', 'never', 'never', 'read/write block'], | |
| '110': ['key A| B', 'key B', 'key B', 'key A| B', 'value block'], | |
| '001': ['key A | B', 'never', 'never', 'key A | B', 'value block'], | |
| '011': ['key B', 'key B', 'never', 'never', 'read/write block'], | |
| '101': ['key B', 'never', 'never', 'never', 'read/write block'], | |
| '111': ['never', 'never', 'never', 'never', 'read/write block'] | |
| } | |
| } | |
| let defaultAccessBin = hex2bin('FF0780'); | |
| function setCurrentAccessBitsState(binStr) { | |
| let binStrLen = binStr.length - 1; | |
| accessBits.byte6.bits = binStr.substr(0, 8).split(''); | |
| accessBits.byte7.bits = binStr.substr(8, 8).split(''); | |
| accessBits.byte8.bits = binStr.substr(15, 8).split(''); | |
| } | |
| function hex2bin(hex) { | |
| return (parseInt(hex, 16).toString(2)).padStart(8, '0'); | |
| } | |
| function bin2Hex(bin) { | |
| return (parseInt(bin, 2).toString(16)).padStart(6, '0');; | |
| } | |
| function setBlockAccessBits(sectorBlock, acBitStr) { | |
| let acBits = acBitStr.split(''); | |
| let C1 = acBits[0]; | |
| let C2 = acBits[1]; | |
| let C3 = acBits[2]; | |
| accessBits.byte6.bits[accessBits.byte6.idx[`C2${sectorBlock}`]] = invertBit(C2); | |
| accessBits.byte6.bits[accessBits.byte6.idx[`C1${sectorBlock}`]] = invertBit(C1); | |
| accessBits.byte7.bits[accessBits.byte7.idx[`C1${sectorBlock}`]] = C1; | |
| accessBits.byte7.bits[accessBits.byte7.idx[`C3${sectorBlock}`]] = invertBit(C3); | |
| accessBits.byte8.bits[accessBits.byte8.idx[`C3${sectorBlock}`]] = C3; | |
| accessBits.byte8.bits[accessBits.byte8.idx[`C2${sectorBlock}`]] = C2; | |
| } | |
| function invertBit(bit) { | |
| return bit ^ 1; | |
| } | |
| function getAccessBitsInHex() { | |
| let byte6 = accessBits.byte6.bits.join(''); | |
| let byte7 = accessBits.byte7.bits.join(''); | |
| let byte8 = accessBits.byte8.bits.join(''); | |
| //console.log(`${byte6}-${byte7}-${byte8}`); | |
| return bin2Hex(`${byte6}${byte7}${byte8}`).toUpperCase(); | |
| } | |
| function log(str) { | |
| console.log(str); | |
| } | |
| // setCurrentAccessBitsState(defaultAccessBin); | |
| setBlockAccessBits(0, '110'); | |
| setBlockAccessBits(1, '110'); | |
| setBlockAccessBits(2, '110'); | |
| setBlockAccessBits(3, '011'); | |
| console.log(getAccessBitsInHex()); // 08778F |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment