uint8_t wkpf_pull_property(uint8_t port_number, uint8_t property_number) { uint16_t component_id; wkpf_get_component_id(port_number, &component_id); for(int i=0; i<wkpf_number_of_links; i++) { wkpf_link_t *link = wkpf_get_link(i); if(link->dest_component_id == component_id && link->dest_property_number == property_number) { uint16_t src_component_id = link->src_component_id; wkpf_endpoint_t src_endpoint = wkpf_leader_for_component(src_component_id); uint8_t src_property_number = link->src_property_number; if (src_endpoint.node_id != wkcomm_get_node_id()) { // Properties with local sources will be initialised eventually, so we only need to send a message // to ask for initial values coming from remote nodes return wkpf_send_request_property_init(src_endpoint.node_id, src_endpoint.port_number, src_property_number); } } } return WKPF_ERR_SHOULDNT_HAPPEN; }
uint8_t wkpf_pull_property(uint8_t port_number, uint8_t property_number) { uint16_t component_id; wkpf_get_component_id(port_number, &component_id); for(int i=0; i<number_of_links; i++) { if(links[i].dest_component_id == component_id && links[i].dest_property_number == property_number) { uint16_t src_component_id = links[i].src_component_id; if (src_component_id > number_of_components) { DEBUGF_WKPF("WKPF: !!!! ERROR !!!! component id out of range %x\n", src_component_id); return WKPF_ERR_SHOULDNT_HAPPEN; } uint8_t src_property_number = links[i].src_property_number; uint8_t src_port_number = component_to_wuobject_map[src_component_id].port_number; address_t src_node_id = component_to_wuobject_map[src_component_id].node_id; if (src_node_id != nvmcomm_get_node_id()) { // Properties with local sources will be initialised eventually, so we only need to send a message // to ask for initial values coming from remote nodes return wkpf_send_request_property_init(src_node_id, src_port_number, src_property_number); } } } return WKPF_ERR_SHOULDNT_HAPPEN; }