static ZERO_OR_ERROR OW_trees_for_read( char * device, char * property, struct one_wire_query * owq ) { // find sensor node struct sensor_node * sense_n = Find_External_Sensor( device ) ; if ( sense_n != NULL ) { // found // find property node struct property_node * property_n = Find_External_Property( sense_n->family, property ) ; if ( property_n != NULL ) { switch ( property_n->et ) { case et_none: return 0 ; case et_internal: return -ENOTSUP ; case et_script: return OW_read_external_script( sense_n, property_n, owq ) ; default: return -ENOTSUP ; } } } return -ENOENT ; }
/* Device is known with serial number */ static enum parse_enum Parse_External_Device( char *filename, struct parsedname *pn) { struct sensor_node * sensor_n = Find_External_Sensor( filename ) ; struct family_node * family_n = Find_External_Family( sensor_n->family ) ; pn->selected_device = &(family_n->dev) ; SetKnownBus(Inbound_Control.external->index, pn); return parse_prop; }
/* Return -ENOENT if not a valid name return 0 if good *next points to next segment, or NULL if not filetype */ static enum parse_enum Parse_RealDevice(char *filename, enum parse_pass remote_status, struct parsedname *pn) { pn->device_name = find_segment_in_path( filename, pn->path ) ; switch ( Parse_SerialNumber(filename,pn->sn) ) { case sn_not_sn: if ( Find_External_Sensor( filename ) ) { return Parse_External_Device( filename, pn ) ; } else { return Parse_Alias( filename, remote_status, pn) ; } case sn_valid: return Parse_RealDeviceSN( remote_status, pn ) ; case sn_invalid: default: return parse_error ; } }