int iBSP430eui64 (hBSP430eui64 eui64) { sBSP430onewireSerialNumber serial; memset(eui64->bytes, 0xFF, sizeof(eui64->bytes)); if (0 != iBSP430onewireReadSerialNumber(&xBSP430surfDS1825, &serial)) { return -1; } eui64->bytes[0] = 0xFF & (PEOPLEPOWERCO_OUI >> 16); eui64->bytes[1] = 0xFF & (PEOPLEPOWERCO_OUI >> 8); eui64->bytes[2] = 0xFF & (PEOPLEPOWERCO_OUI >> 0); /* The full OSIAN Device Identifier detail is not used for the * derived EUI-64; a zero in the middle two bytes indicates an * unregistered device with no specific capabilities or purpose. */ eui64->bytes[3] = 0; eui64->bytes[4] = 0; eui64->bytes[5] = serial.id[3]; eui64->bytes[6] = serial.id[4]; eui64->bytes[7] = serial.id[5]; return 0; }
void main () { int rc; unsigned long uptime_ticks_per_sec; const struct sBSP430onewireBus * bus = &ds18b20; vBSP430platformInitialize_ni(); (void)iBSP430consoleInitialize(); cprintf("\nHere we go...\n"); uptime_ticks_per_sec = ulBSP430uptimeConversionFrequency_Hz_ni(); cprintf("Uptime now %lu with frequency %lu Hz\n", ulBSP430uptime_ni(), uptime_ticks_per_sec); cprintf("Monitoring DS18xx on %s.%u bit %x\n", xBSP430portName(BSP430_PORT_HAL_GET_PERIPH_HANDLE(APP_DS18B20_PORT_HAL)) ?: "P?", iBSP430portBitPosition(APP_DS18B20_BIT), APP_DS18B20_BIT); do { rc = iBSP430onewireReadSerialNumber(bus, &serial); if (0 != rc) { cprintf("ERROR: Failed to read serial number from DS18B20: %d\n", rc); BSP430_CORE_DELAY_CYCLES(BSP430_CLOCK_NOMINAL_MCLK_HZ); } } while (0 != rc); cprintf("DS18B20 serial number: %02x%02x%02x%02x%02x%02x\n", serial.id[0], serial.id[1], serial.id[2], serial.id[3], serial.id[4], serial.id[5]); while (1) { int rc; unsigned long start_tck; unsigned long end_tck; unsigned int duration_ms; unsigned int delay_count = 0; int t_c; start_tck = ulBSP430uptime_ni(); rc = -1; if (0 == iBSP430onewireRequestTemperature_ni(bus)) { /* Wait for read to complete. Each read is nominally 61 * microseconds. Conversion time can be as long as 750 ms if * 12-bit resolution is used. (12-bit resolution is the * default.) */ while (! iBSP430onewireReadBit_ni(bus)) { ++delay_count; } rc = iBSP430onewireReadTemperature_ni(bus, &t_c); } end_tck = ulBSP430uptime_ni(); duration_ms = 1000 * (end_tck - start_tck) / uptime_ticks_per_sec; if (0 == rc) { cprintf("Temperature %d dCel or %d d[degF] in %u ms\n", (10 * t_c) / 16, BSP430_ONEWIRE_xCel_TO_ddegF(t_c), duration_ms); } else { cprintf("Measurement failed in %u ms\n", duration_ms); } /* You'd want to do this if you were going to sleep here */ vBSP430onewireShutdown_ni(bus); } }