Merge pull request #2077 from henrygab/BE_LE_Converters

Minor (useful) updates
This commit is contained in:
Iceman 2023-08-15 21:10:08 +02:00 committed by GitHub
commit c8c6b6ca12
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 244 additions and 54 deletions

View file

@ -36,7 +36,7 @@
#define PROXPROMPT_DEV_OFFLINE _RL_BOLD_RED_("offline") #define PROXPROMPT_DEV_OFFLINE _RL_BOLD_RED_("offline")
#define PROXHISTORY "history.txt" #define PROXHISTORY "history.txt"
#define PROXLOG "log_%Y%m%d.txt" #define PROXLOG "log_%Y%m%d%H%M%S.txt"
#define MAX_NESTED_CMDSCRIPT 10 #define MAX_NESTED_CMDSCRIPT 10
#define MAX_NESTED_LUASCRIPT 10 #define MAX_NESTED_LUASCRIPT 10

View file

@ -161,75 +161,255 @@ uint64_t bytes_to_num(uint8_t *src, size_t len) {
} }
uint16_t MemLeToUint2byte(const uint8_t *data) { uint16_t MemLeToUint2byte(const uint8_t *data) {
return (uint16_t)((uint16_t) return (uint16_t)(
(data[1] << 8) + data[0] (((uint16_t)(data[1])) << (8*1)) +
); (((uint16_t)(data[0])) << (8*0))
);
} }
uint32_t MemLeToUint3byte(const uint8_t *data) { uint32_t MemLeToUint3byte(const uint8_t *data) {
return (uint32_t)((uint32_t) return (uint32_t)(
(data[2] << 16) + (data[1] << 8) + data[0] (((uint32_t)(data[2])) << (8*2)) +
); (((uint32_t)(data[1])) << (8*1)) +
(((uint32_t)(data[0])) << (8*0))
);
} }
uint32_t MemLeToUint4byte(const uint8_t *data) { uint32_t MemLeToUint4byte(const uint8_t *data) {
return (uint32_t)((uint32_t) return (uint32_t)(
(data[3] << 24) + (data[2] << 16) + (data[1] << 8) + data[0] (((uint32_t)(data[3])) << (8*3)) +
); (((uint32_t)(data[2])) << (8*2)) +
(((uint32_t)(data[1])) << (8*1)) +
(((uint32_t)(data[0])) << (8*0))
);
}
uint64_t MemLeToUint5byte(const uint8_t *data) {
return (uint64_t)(
(((uint64_t)(data[4])) << (8*4)) +
(((uint64_t)(data[3])) << (8*3)) +
(((uint64_t)(data[2])) << (8*2)) +
(((uint64_t)(data[1])) << (8*1)) +
(((uint64_t)(data[0])) << (8*0))
);
}
uint64_t MemLeToUint6byte(const uint8_t *data) {
return (uint64_t)(
(((uint64_t)(data[5])) << (8*5)) +
(((uint64_t)(data[4])) << (8*4)) +
(((uint64_t)(data[3])) << (8*3)) +
(((uint64_t)(data[2])) << (8*2)) +
(((uint64_t)(data[1])) << (8*1)) +
(((uint64_t)(data[0])) << (8*0))
);
}
uint64_t MemLeToUint7byte(const uint8_t *data) {
return (uint64_t)(
(((uint64_t)(data[6])) << (8*6)) +
(((uint64_t)(data[5])) << (8*5)) +
(((uint64_t)(data[4])) << (8*4)) +
(((uint64_t)(data[3])) << (8*3)) +
(((uint64_t)(data[2])) << (8*2)) +
(((uint64_t)(data[1])) << (8*1)) +
(((uint64_t)(data[0])) << (8*0))
);
}
uint64_t MemLeToUint8byte(const uint8_t *data) {
return (uint64_t)(
(((uint64_t)(data[7])) << (8*7)) +
(((uint64_t)(data[6])) << (8*6)) +
(((uint64_t)(data[5])) << (8*5)) +
(((uint64_t)(data[4])) << (8*4)) +
(((uint64_t)(data[3])) << (8*3)) +
(((uint64_t)(data[2])) << (8*2)) +
(((uint64_t)(data[1])) << (8*1)) +
(((uint64_t)(data[0])) << (8*0))
);
} }
uint16_t MemBeToUint2byte(const uint8_t *data) { uint16_t MemBeToUint2byte(const uint8_t *data) {
return (uint16_t)((uint16_t) return (uint16_t)(
(data[0] << 8) + data[1] (((uint16_t)(data[0])) << (8*1)) +
); (((uint16_t)(data[1])) << (8*0))
);
} }
uint32_t MemBeToUint3byte(const uint8_t *data) { uint32_t MemBeToUint3byte(const uint8_t *data) {
return (uint32_t)((uint32_t) return (uint32_t)(
(data[0] << 16) + (data[1] << 8) + data[2] (((uint32_t)(data[0])) << (8*2)) +
); (((uint32_t)(data[1])) << (8*1)) +
(((uint32_t)(data[2])) << (8*0))
);
} }
inline uint32_t MemBeToUint4byte(const uint8_t *data) { uint32_t MemBeToUint4byte(const uint8_t *data) {
return (uint32_t)( return (uint32_t)(
(data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3] (((uint32_t)(data[0])) << (8*3)) +
); (((uint32_t)(data[1])) << (8*2)) +
(((uint32_t)(data[2])) << (8*1)) +
(((uint32_t)(data[3])) << (8*0))
);
}
uint64_t MemBeToUint5byte(const uint8_t *data) {
return (uint64_t)(
(((uint64_t)(data[0])) << (8*4)) +
(((uint64_t)(data[1])) << (8*3)) +
(((uint64_t)(data[2])) << (8*2)) +
(((uint64_t)(data[3])) << (8*1)) +
(((uint64_t)(data[4])) << (8*0))
);
}
uint64_t MemBeToUint6byte(const uint8_t *data) {
return (uint64_t)(
(((uint64_t)(data[0])) << (8*5)) +
(((uint64_t)(data[1])) << (8*4)) +
(((uint64_t)(data[2])) << (8*3)) +
(((uint64_t)(data[3])) << (8*2)) +
(((uint64_t)(data[4])) << (8*1)) +
(((uint64_t)(data[5])) << (8*0))
);
}
uint64_t MemBeToUint7byte(const uint8_t *data) {
return (uint64_t)(
(((uint64_t)(data[0])) << (8*6)) +
(((uint64_t)(data[1])) << (8*5)) +
(((uint64_t)(data[2])) << (8*4)) +
(((uint64_t)(data[3])) << (8*3)) +
(((uint64_t)(data[4])) << (8*2)) +
(((uint64_t)(data[5])) << (8*1)) +
(((uint64_t)(data[6])) << (8*0))
);
}
uint64_t MemBeToUint8byte(const uint8_t *data) {
return (uint64_t)(
(((uint64_t)(data[0])) << (8*7)) +
(((uint64_t)(data[1])) << (8*6)) +
(((uint64_t)(data[2])) << (8*5)) +
(((uint64_t)(data[3])) << (8*4)) +
(((uint64_t)(data[4])) << (8*3)) +
(((uint64_t)(data[5])) << (8*2)) +
(((uint64_t)(data[6])) << (8*1)) +
(((uint64_t)(data[7])) << (8*0))
);
} }
void Uint2byteToMemLe(uint8_t *data, uint16_t value) { void Uint2byteToMemLe(uint8_t *data, uint16_t value) {
data[1] = (value >> 8) & 0xff; data[0] = (uint8_t)((value >> (8*0)) & 0xffu);
data[0] = value & 0xff; data[1] = (uint8_t)((value >> (8*1)) & 0xffu);
} }
void Uint3byteToMemLe(uint8_t *data, uint32_t value) { void Uint3byteToMemLe(uint8_t *data, uint32_t value) {
data[2] = (value >> 16) & 0xff; data[0] = (uint8_t)((value >> (8*0)) & 0xffu);
data[1] = (value >> 8) & 0xff; data[1] = (uint8_t)((value >> (8*1)) & 0xffu);
data[0] = value & 0xff; data[2] = (uint8_t)((value >> (8*2)) & 0xffu);
} }
void Uint4byteToMemLe(uint8_t *data, uint32_t value) { void Uint4byteToMemLe(uint8_t *data, uint32_t value) {
data[3] = (value >> 24) & 0xff; data[0] = (uint8_t)((value >> (8*0)) & 0xffu);
data[2] = (value >> 16) & 0xff; data[1] = (uint8_t)((value >> (8*1)) & 0xffu);
data[1] = (value >> 8) & 0xff; data[2] = (uint8_t)((value >> (8*2)) & 0xffu);
data[0] = value & 0xff; data[3] = (uint8_t)((value >> (8*3)) & 0xffu);
}
void Uint5byteToMemLe(uint8_t *data, uint64_t value) {
data[0] = (uint8_t)((value >> (8*0)) & 0xffu);
data[1] = (uint8_t)((value >> (8*1)) & 0xffu);
data[2] = (uint8_t)((value >> (8*2)) & 0xffu);
data[3] = (uint8_t)((value >> (8*3)) & 0xffu);
data[4] = (uint8_t)((value >> (8*4)) & 0xffu);
}
void Uint6byteToMemLe(uint8_t *data, uint64_t value) {
data[0] = (uint8_t)((value >> (8*0)) & 0xffu);
data[1] = (uint8_t)((value >> (8*1)) & 0xffu);
data[2] = (uint8_t)((value >> (8*2)) & 0xffu);
data[3] = (uint8_t)((value >> (8*3)) & 0xffu);
data[4] = (uint8_t)((value >> (8*4)) & 0xffu);
data[5] = (uint8_t)((value >> (8*5)) & 0xffu);
}
void Uint7byteToMemLe(uint8_t *data, uint64_t value) {
data[0] = (uint8_t)((value >> (8*0)) & 0xffu);
data[1] = (uint8_t)((value >> (8*1)) & 0xffu);
data[2] = (uint8_t)((value >> (8*2)) & 0xffu);
data[3] = (uint8_t)((value >> (8*3)) & 0xffu);
data[4] = (uint8_t)((value >> (8*4)) & 0xffu);
data[5] = (uint8_t)((value >> (8*5)) & 0xffu);
data[6] = (uint8_t)((value >> (8*6)) & 0xffu);
}
void Uint8byteToMemLe(uint8_t *data, uint64_t value) {
data[0] = (uint8_t)((value >> (8*0)) & 0xffu);
data[1] = (uint8_t)((value >> (8*1)) & 0xffu);
data[2] = (uint8_t)((value >> (8*2)) & 0xffu);
data[3] = (uint8_t)((value >> (8*3)) & 0xffu);
data[4] = (uint8_t)((value >> (8*4)) & 0xffu);
data[5] = (uint8_t)((value >> (8*5)) & 0xffu);
data[6] = (uint8_t)((value >> (8*6)) & 0xffu);
data[7] = (uint8_t)((value >> (8*7)) & 0xffu);
} }
void Uint2byteToMemBe(uint8_t *data, uint16_t value) { void Uint2byteToMemBe(uint8_t *data, uint16_t value) {
data[0] = (value >> 8) & 0xff; data[0] = (uint8_t)((value >> (8*1)) & 0xffu);
data[1] = value & 0xff; data[1] = (uint8_t)((value >> (8*0)) & 0xffu);
} }
void Uint3byteToMemBe(uint8_t *data, uint32_t value) { void Uint3byteToMemBe(uint8_t *data, uint32_t value) {
data[0] = (value >> 16) & 0xff; data[0] = (uint8_t)((value >> (8*2)) & 0xffu);
data[1] = (value >> 8) & 0xff; data[1] = (uint8_t)((value >> (8*1)) & 0xffu);
data[2] = value & 0xff; data[2] = (uint8_t)((value >> (8*0)) & 0xffu);
} }
void Uint4byteToMemBe(uint8_t *data, uint32_t value) { void Uint4byteToMemBe(uint8_t *data, uint32_t value) {
data[0] = (value >> 24) & 0xff; data[0] = (uint8_t)((value >> (8*3)) & 0xffu);
data[1] = (value >> 16) & 0xff; data[1] = (uint8_t)((value >> (8*2)) & 0xffu);
data[2] = (value >> 8) & 0xff; data[2] = (uint8_t)((value >> (8*1)) & 0xffu);
data[3] = value & 0xff; data[3] = (uint8_t)((value >> (8*0)) & 0xffu);
}
void Uint5byteToMemBe(uint8_t *data, uint64_t value) {
data[0] = (uint8_t)((value >> (8*4)) & 0xffu);
data[1] = (uint8_t)((value >> (8*3)) & 0xffu);
data[2] = (uint8_t)((value >> (8*2)) & 0xffu);
data[3] = (uint8_t)((value >> (8*1)) & 0xffu);
data[4] = (uint8_t)((value >> (8*0)) & 0xffu);
}
void Uint6byteToMemBe(uint8_t *data, uint64_t value) {
data[0] = (uint8_t)((value >> (8*5)) & 0xffu);
data[1] = (uint8_t)((value >> (8*4)) & 0xffu);
data[2] = (uint8_t)((value >> (8*3)) & 0xffu);
data[3] = (uint8_t)((value >> (8*2)) & 0xffu);
data[4] = (uint8_t)((value >> (8*1)) & 0xffu);
data[5] = (uint8_t)((value >> (8*0)) & 0xffu);
}
void Uint7byteToMemBe(uint8_t *data, uint64_t value) {
data[0] = (uint8_t)((value >> (8*6)) & 0xffu);
data[1] = (uint8_t)((value >> (8*5)) & 0xffu);
data[2] = (uint8_t)((value >> (8*4)) & 0xffu);
data[3] = (uint8_t)((value >> (8*3)) & 0xffu);
data[4] = (uint8_t)((value >> (8*2)) & 0xffu);
data[5] = (uint8_t)((value >> (8*1)) & 0xffu);
data[6] = (uint8_t)((value >> (8*0)) & 0xffu);
}
void Uint8byteToMemBe(uint8_t *data, uint64_t value) {
data[0] = (uint8_t)((value >> (8*7)) & 0xffu);
data[1] = (uint8_t)((value >> (8*6)) & 0xffu);
data[2] = (uint8_t)((value >> (8*5)) & 0xffu);
data[3] = (uint8_t)((value >> (8*4)) & 0xffu);
data[4] = (uint8_t)((value >> (8*3)) & 0xffu);
data[5] = (uint8_t)((value >> (8*2)) & 0xffu);
data[6] = (uint8_t)((value >> (8*1)) & 0xffu);
data[7] = (uint8_t)((value >> (8*0)) & 0xffu);
} }
// RotateLeft - Ultralight, Desfire // RotateLeft - Ultralight, Desfire

View file

@ -65,15 +65,34 @@ uint64_t bytes_to_num(uint8_t *src, size_t len);
uint16_t MemLeToUint2byte(const uint8_t *data); uint16_t MemLeToUint2byte(const uint8_t *data);
uint32_t MemLeToUint3byte(const uint8_t *data); uint32_t MemLeToUint3byte(const uint8_t *data);
uint32_t MemLeToUint4byte(const uint8_t *data); uint32_t MemLeToUint4byte(const uint8_t *data);
uint64_t MemLeToUint5byte(const uint8_t *data);
uint64_t MemLeToUint6byte(const uint8_t *data);
uint64_t MemLeToUint7byte(const uint8_t *data);
uint64_t MemLeToUint8byte(const uint8_t *data);
uint16_t MemBeToUint2byte(const uint8_t *data); uint16_t MemBeToUint2byte(const uint8_t *data);
uint32_t MemBeToUint3byte(const uint8_t *data); uint32_t MemBeToUint3byte(const uint8_t *data);
uint32_t MemBeToUint4byte(const uint8_t *data); uint32_t MemBeToUint4byte(const uint8_t *data);
uint64_t MemBeToUint5byte(const uint8_t *data);
uint64_t MemBeToUint6byte(const uint8_t *data);
uint64_t MemBeToUint7byte(const uint8_t *data);
uint64_t MemBeToUint8byte(const uint8_t *data);
void Uint2byteToMemLe(uint8_t *data, uint16_t value); void Uint2byteToMemLe(uint8_t *data, uint16_t value);
void Uint3byteToMemLe(uint8_t *data, uint32_t value); void Uint3byteToMemLe(uint8_t *data, uint32_t value);
void Uint4byteToMemLe(uint8_t *data, uint32_t value); void Uint4byteToMemLe(uint8_t *data, uint32_t value);
void Uint5byteToMemLe(uint8_t *data, uint64_t value);
void Uint6byteToMemLe(uint8_t *data, uint64_t value);
void Uint7byteToMemLe(uint8_t *data, uint64_t value);
void Uint8byteToMemLe(uint8_t *data, uint64_t value);
void Uint2byteToMemBe(uint8_t *data, uint16_t value); void Uint2byteToMemBe(uint8_t *data, uint16_t value);
void Uint3byteToMemBe(uint8_t *data, uint32_t value); void Uint3byteToMemBe(uint8_t *data, uint32_t value);
void Uint4byteToMemBe(uint8_t *data, uint32_t value); void Uint4byteToMemBe(uint8_t *data, uint32_t value);
void Uint5byteToMemBe(uint8_t *data, uint64_t value);
void Uint6byteToMemBe(uint8_t *data, uint64_t value);
void Uint7byteToMemBe(uint8_t *data, uint64_t value);
void Uint8byteToMemBe(uint8_t *data, uint64_t value);
// rotate left byte array // rotate left byte array
void rol(uint8_t *data, const size_t len); void rol(uint8_t *data, const size_t len);

View file

@ -156,27 +156,18 @@ However, it may be necessary to give the `udev` service a kind reminder:
## Inform udev that it really, really should work ## Inform udev that it really, really should work
The following workaround appears to work to get udev to apply the permissions As of August 2023, the following needs to be done anytime the WSL2 subsystem
appropriately. Note that this may need to be run again, such as when the WSL2 has been restarted (e.g., host machine reboot, first WSL2 console window, etc.).
distributions have been restarted. I don't know why ... but it's a small hiccup. Otherwise, it appears that `udev` service will not see the arrival of devices,
and therefore won't modify permissions on `/dev/ttyACM*` devices.
```sh After this is run once, `udev` appears to work correctly (at least until the
sudo udevadm trigger --action=change host machine reboots or the last WSL console window is closed for a while).
``` One workaround is to simply ensure you keep at least one WSL2 console open.
General instructions suggested to use `sudo udevadm control --reload-rules`. However,
this may simply result in the following cryptic error message:
```sh
$ sudo udevadm control --reload-rules
[sudo] password for root:
Failed to send reload request: No such file or directory
```
_Note that the following should **NOT** be required:_
```sh ```sh
sudo service udev restart sudo service udev restart
sudo udevadm trigger --action=change
``` ```
## Verify Device Exists ## Verify Device Exists