/* See if a cached location is accurate -- called with "Known Bus" set */ INDEX_OR_ERROR ReCheckPresence(struct parsedname *pn) { INDEX_OR_ERROR bus_nr; if (NotRealDir(pn)) { return INDEX_DEFAULT; } if ((pn->selected_device == DeviceSimultaneous) || (pn->selected_device == DeviceThermostat)) { return INDEX_DEFAULT; } if (KnownBus(pn)) { if ( INDEX_VALID( CheckThisConnection(pn->known_bus->index,pn) ) ) { return pn->known_bus->index ; } } if ( GOOD( Cache_Get_Device(&bus_nr, pn)) ) { LEVEL_DEBUG("Found device on bus %d",bus_nr); if ( INDEX_VALID( CheckThisConnection(bus_nr,pn) ) ) { SetKnownBus(bus_nr, pn); return bus_nr ; } } UnsetKnownBus(pn); Cache_Del_Device(pn) ; return CheckPresence(pn); }
/* Device is known with serial number */ static enum parse_enum Parse_RealDeviceSN(enum parse_pass remote_status, struct parsedname *pn) { /* Search for known 1-wire device -- keyed to device name (family code in HEX) */ pn->selected_device = FS_devicefindhex(pn->sn[0], pn); // returning from owserver -- don't need to check presence (it's implied) if (remote_status == parse_pass_post_remote) { return parse_prop; } if (Globals.one_device) { // Single slave device -- use faster routines SetKnownBus(INDEX_DEFAULT, pn); } else { /* Check the presence, and cache the proper bus number for better performance */ INDEX_OR_ERROR bus_nr = CheckPresence(pn); if ( INDEX_NOT_VALID(bus_nr) ) { return parse_error; /* CheckPresence failed */ } } return parse_prop; }