コード例 #1
0
ファイル: ow_presence.c プロジェクト: bootc/owfs-cvsimport
/* 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);
}
コード例 #2
0
ファイル: ow_parsename.c プロジェクト: M-o-a-T/owfs
/* 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;
}