X-Git-Url: https://the.earth.li/gitweb/?p=temper-clone.git;a=blobdiff_plain;f=main.c;fp=main.c;h=9899cb90ef2556bf4e18f1fda89e8847a79c405c;hp=fff2ae8df7d32a5fc90c10a99a86c8d517e9c667;hb=0949ba3935c9c2ec778adc94eb25cdd65e3cba4e;hpb=3c727aad6ec52918a14a6550349a2e2ca35d0645 diff --git a/main.c b/main.c index fff2ae8..9899cb9 100644 --- a/main.c +++ b/main.c @@ -30,6 +30,8 @@ #include "usbdrv.h" #include "libs-device/osccal.h" +#include "w1.h" + typedef struct { uint8_t modifier; uint8_t reserved; @@ -190,6 +192,30 @@ PROGMEM const char usbDescriptorConfiguration[] = { USB_CFG_INTR_POLL_INTERVAL, /* in ms */ }; +inline char hexdigit(unsigned int i) +{ + return (i < 10) ? ('0' + i) : ('A' - 10 + i); +} + +/* Look for a 1-Wire device and use its ROMID to set the serial ID */ +void set_serial(void) +{ + uint8_t buf[8]; + uint8_t i; + + if (!w1_reset()) { + return; + } + + w1_write(0x33); /* READ ROM */ + w1_read(buf, 8); + + for (i = 0; i < 8; i++) { + serno_str[i * 2 + 1] = hexdigit(buf[i] >> 4); + serno_str[i * 2 + 2] = hexdigit(buf[i] & 0xF); + } +} + usbMsgLen_t usbFunctionDescriptor(usbRequest_t *rq) { if (rq->wValue.bytes[1] == USBDESCR_STRING && @@ -308,6 +334,9 @@ int main(void) wdt_enable(WDTO_1S); + w1_setup(); + set_serial(); + usbInit(); usbDeviceDisconnect();