123456789101112131415161718192021222324252627282930313233343536373839404142 |
- /*
- kvm_uuid_service.ino
- author: tobychui
- This file contains code that uniquely
- identify a USB-KVM downstream device for
- multi-device setups.
- The UUID can change during power cycle,
- as soon as it is unique amoung other
- IP-KVM it is good to go.
- */
- #define UUID_SIZE 16 // 16-byte UUID
- uint8_t device_uuid[UUID_SIZE];
- void init_device_uuid() {
- // Use an unused analog pin as noise source (floating pin gives better entropy)
- const uint8_t noise_pin = 11; // P1.1, but could also be 14, 15, or 32
- pinMode(noise_pin, INPUT);
- for (uint8_t i = 0; i < UUID_SIZE; i++) {
- // Mix analog noise with millis() and loop index
- int noise = analogRead(noise_pin); // 0–1023
- uint8_t entropy = (uint8_t)(noise ^ (millis() >> (i % 8)) ^ (rand() & 0xFF));
- device_uuid[i] = entropy;
- delay(5); // small delay to let ADC vary
- }
- }
- void print_device_uuid() {
- for (uint8_t i = 0; i < UUID_SIZE; i++) {
- USBSerial_print(device_uuid[i], HEX);
- }
- USBSerial_println();
- }
- void renew_device_uuid() {
- init_device_uuid();
- }
|