/* 0 = success, -1 = error */ int8_t get_persistent_mac(uint8_t portnum, uint8_t * mac) { uint8_t read_buffer[32]; uint8_t i; int8_t out; out = -1; if (devsnum == 0) return out; for (i = 0; i < devsnum; ++i) { //#if DEBUG_PMAC mprintf("Found device: " "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", FamilySN[i][7], FamilySN[i][6], FamilySN[i][5], FamilySN[i][4], FamilySN[i][3], FamilySN[i][2], FamilySN[i][1], FamilySN[i][0]); //#endif /* If there is a temperature sensor, use it for the low three MAC values */ if (FamilySN[i][0] == 0x28 || FamilySN[i][0] == 0x42) { mac[3] = FamilySN[i][3]; mac[4] = FamilySN[i][2]; mac[5] = FamilySN[i][1]; out = 0; #if DEBUG_PMAC mprintf("Using temperature ID for MAC\n"); #endif } /* If there is an EEPROM, read page 0 for the MAC */ if (FamilySN[i][0] == 0x43) { owLevel(portnum, MODE_NORMAL); if (ReadMem43(portnum, FamilySN[i], EEPROM_MAC_PAGE, read_buffer) == TRUE) { if (read_buffer[0] == 0 && read_buffer[1] == 0 && read_buffer[2] == 0) { /* Skip the EEPROM since it has not been programmed! */ #if DEBUG_PMAC mprintf("EEPROM has not been " "programmed with a MAC\n"); #endif } else { memcpy(mac, read_buffer, 6); out = 0; #if DEBUG_PMAC mprintf("Using EEPROM page: " "%02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); #endif } } } } return out; }
void scu_init() { uchar FamilySN[MAXDEVICES][8]; int current_temp; int c_frac; int i = 0; int j = 0; int cnt = 0; int NumDevices = 0; SMALLINT didRead = 0; uchar read_buffer[32]; uchar write_buffer[32]; owInit(); uart_init(); uart_write_string("SCU\n"); //use port number for 1-wire uchar portnum = ONEWIRE_PORT; j = 0; // Find the device(s) NumDevices = 0; NumDevices += FindDevices(portnum, &FamilySN[NumDevices], 0x42, MAXDEVICES-NumDevices); NumDevices += FindDevices(portnum, &FamilySN[NumDevices], 0x20, MAXDEVICES-NumDevices); NumDevices += FindDevices(portnum, &FamilySN[NumDevices], 0x43, MAXDEVICES-NumDevices); if (NumDevices) { mprintf("\r\n"); // read the temperature and print serial number and temperature for (i = NumDevices; i; i--) { mprintf("(%d) ", j++); DisplaySerialNum(FamilySN[i-1]); if (FamilySN[i-1][0] == 0x43) { // if(!Write43(portnum, FamilySN[i-1], write_buffer)) // mprintf("write failed!\n"); owLevel(portnum, MODE_NORMAL); if (ReadMem43(portnum, FamilySN[i-1], read_buffer)) { for(cnt = 0; cnt < 32; cnt++) { mprintf("read_buffer[%x]: %x\n",cnt, read_buffer[cnt]); } } continue; } if (FamilySN[i-1][0] == 0x42) { didRead = ReadTemperature42(portnum, FamilySN[i-1],¤t_temp,&c_frac); } if (didRead) { mprintf(" %d",current_temp); if (c_frac) mprintf(".5"); else mprintf(".0"); mprintf(" deegree celsius\r\n"); } else { mprintf(" Convert failed. Device is"); if(!owVerify(portnum, FALSE)) mprintf(" not"); mprintf(" present.\r\n"); #ifdef SOCKIT_OWM_ERR_ENABLE while(owHasErrors()) mprintf(" - Error %d\r\n", owGetErrorNum()); #endif } } } else mprintf("No temperature devices found!\r\n"); }