mirror of
https://github.com/cecio/USBvalve.git
synced 2025-12-06 03:41:45 +00:00
- modified FS consistency check to check FAT_DIRECTORY only (others sectors are not needed)
- position of FS check chnaged - new hash inserted - modifications to compile with TinyUSB 2.0.1 and Board "Raspberry Pi RP2040 (2.7.0)"
This commit is contained in:
@@ -54,7 +54,7 @@ bool activeState = false;
|
|||||||
//
|
//
|
||||||
// USBvalve globals
|
// USBvalve globals
|
||||||
//
|
//
|
||||||
#define VERSION "USBvalve - 0.6.2"
|
#define VERSION "USBvalve - 0.7.0B"
|
||||||
boolean readme = false;
|
boolean readme = false;
|
||||||
boolean autorun = false;
|
boolean autorun = false;
|
||||||
boolean written = false;
|
boolean written = false;
|
||||||
@@ -64,53 +64,25 @@ int x = 2;
|
|||||||
#define BLOCK_AUTORUN 102 // Block where Autorun.inf file is saved
|
#define BLOCK_AUTORUN 102 // Block where Autorun.inf file is saved
|
||||||
#define BLOCK_README 100 // Block where README.txt file is saved
|
#define BLOCK_README 100 // Block where README.txt file is saved
|
||||||
#define MAX_DUMP_BYTES 16 // Used by the dump of the debug facility: do not increase this too much
|
#define MAX_DUMP_BYTES 16 // Used by the dump of the debug facility: do not increase this too much
|
||||||
#define BYTES_TO_HASH 512 * 10 // Number of bytes of the RAM disk used to check consistency (first 10 blocks)
|
#define BYTES_TO_HASH 512 * 2 // Number of bytes of the RAM disk used to check consistency
|
||||||
|
#define BYTES_TO_HASH_OFFSET 7 // Starting sector to check for consistency (FAT_DIRECTORY is 7)
|
||||||
|
|
||||||
// Burned hash to check consistency
|
// Burned hash to check consistency
|
||||||
u8 valid_hash[WIDTH] = {
|
u8 valid_hash[WIDTH] = {
|
||||||
0x44, 0x3B, 0xB1, 0x03, 0x2F, 0x67, 0x47, 0x83,
|
0x35, 0x98, 0x95, 0x97, 0xC7, 0x70, 0xD3, 0xE4,
|
||||||
0x81, 0xFA, 0x3D, 0x04, 0x4B, 0x9D, 0x24, 0xCD,
|
0xDD, 0x84, 0x71, 0x1D, 0x55, 0xD2, 0xE5, 0xA4,
|
||||||
0x82, 0x48, 0x7D, 0x21, 0x6E, 0x16, 0x45, 0x43,
|
0x6C, 0x28, 0x84, 0xF6, 0xE1, 0x02, 0xD1, 0x74,
|
||||||
0x45, 0x05, 0xF6, 0xDF, 0x02, 0x9A, 0x62, 0x1A,
|
0x2F, 0xE9, 0x92, 0xAD, 0xAD, 0x74, 0x71, 0xF0,
|
||||||
0x26, 0x81, 0xF2, 0xB5, 0xED, 0xEC, 0x38, 0x07,
|
0x37, 0xFF, 0x79, 0x39, 0xDC, 0x20, 0x56, 0x26,
|
||||||
0x2A, 0x1F, 0xAF, 0x5A, 0x95, 0x0D, 0x14, 0xE4
|
0xFE, 0xC7, 0x9A, 0x4E, 0x3A, 0x27, 0x65, 0x81
|
||||||
};
|
};
|
||||||
|
|
||||||
u8 computed_hash[WIDTH] = { 0x00 };
|
u8 computed_hash[WIDTH] = { 0x00 };
|
||||||
|
|
||||||
|
// Core 0 Setup
|
||||||
void setup() {
|
void setup() {
|
||||||
// Screen Init
|
|
||||||
Wire.begin();
|
|
||||||
Wire.setClock(400000L);
|
|
||||||
#if OLED_HEIGHT == 64
|
|
||||||
#if RST_PIN >= 0
|
|
||||||
oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);
|
|
||||||
#else
|
|
||||||
oled.begin(&Adafruit128x64, I2C_ADDRESS);
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#if RST_PIN >= 0
|
|
||||||
oled.begin(&Adafruit128x32, I2C_ADDRESS, RST_PIN);
|
|
||||||
#else
|
|
||||||
oled.begin(&Adafruit128x32, I2C_ADDRESS);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
oled.setFont(Adafruit5x7);
|
|
||||||
cls(); // Clear display
|
|
||||||
|
|
||||||
// Check consistency of RAM FS
|
// Check consistency of RAM FS
|
||||||
quark(computed_hash, msc_disk[0], BYTES_TO_HASH);
|
quark(computed_hash, msc_disk[BYTES_TO_HASH_OFFSET], BYTES_TO_HASH);
|
||||||
if (memcmp(computed_hash, valid_hash, WIDTH) == 0) {
|
|
||||||
oled.println("[+] Selftest: OK");
|
|
||||||
x++;
|
|
||||||
} else {
|
|
||||||
oled.println("[!] Selftest: KO");
|
|
||||||
oled.println("[!] Stopping...");
|
|
||||||
while (1) {
|
|
||||||
delay(1000); // Loop forever
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_RP2040)
|
#if defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_RP2040)
|
||||||
// Manual begin() is required on core without built-in support for TinyUSB such as
|
// Manual begin() is required on core without built-in support for TinyUSB such as
|
||||||
@@ -136,9 +108,40 @@ void setup() {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
usb_msc.begin();
|
usb_msc.begin();
|
||||||
|
|
||||||
|
// Screen Init
|
||||||
|
Wire.begin();
|
||||||
|
Wire.setClock(400000L);
|
||||||
|
#if OLED_HEIGHT == 64
|
||||||
|
#if RST_PIN >= 0
|
||||||
|
oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);
|
||||||
|
#else
|
||||||
|
oled.begin(&Adafruit128x64, I2C_ADDRESS);
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#if RST_PIN >= 0
|
||||||
|
oled.begin(&Adafruit128x32, I2C_ADDRESS, RST_PIN);
|
||||||
|
#else
|
||||||
|
oled.begin(&Adafruit128x32, I2C_ADDRESS);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
oled.setFont(Adafruit5x7);
|
||||||
|
cls(); // Clear display
|
||||||
|
|
||||||
|
if (memcmp(computed_hash, valid_hash, WIDTH) == 0) {
|
||||||
|
oled.println("[+] Selftest: OK");
|
||||||
|
x++;
|
||||||
|
} else {
|
||||||
|
oled.println("[!] Selftest: KO");
|
||||||
|
oled.println("[!] Stopping...");
|
||||||
|
while (1) {
|
||||||
|
delay(1000); // Loop forever
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Main loop, managing display
|
// Main Core0 loop, managing display
|
||||||
void loop() {
|
void loop() {
|
||||||
|
|
||||||
if (readme == true) {
|
if (readme == true) {
|
||||||
@@ -206,7 +209,7 @@ int32_t msc_read_callback(uint32_t lba, void* buffer, uint32_t bufsize) {
|
|||||||
int32_t msc_write_callback(uint32_t lba, uint8_t* buffer, uint32_t bufsize) {
|
int32_t msc_write_callback(uint32_t lba, uint8_t* buffer, uint32_t bufsize) {
|
||||||
|
|
||||||
// This check for writing of space. The LBA > 10 is set to avoid some
|
// This check for writing of space. The LBA > 10 is set to avoid some
|
||||||
// false positives
|
// false positives, in particular on Windows Systems
|
||||||
if (lba > 10) {
|
if (lba > 10) {
|
||||||
written = true;
|
written = true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user