/** * Liefert den Index des aktiven solltemp_line_t zurueck */ int8_t heizung_get_matching_zeitzone_index(device_data_heizung *p) { uint8_t i; solltemp_line_t *solltemp_line = (solltemp_line_t *) &(p->config.zeitzone0_id); for (i = 0; i < 8; i++) { const uint8_t tr_id = solltemp_line[i].id; if (zeitzone_matches(tr_id)) { // we got an zeitzone which matches return i; } } return -1; }
inline void zeitschaltuhr_timer_handler(device_data_zeitschaltuhr *p, uint8_t zyklus) { if (zyklus != 1) return; // 1s-Zyklus verwendet uint8_t i,found; uint8_t* zeitzonen_ids; if(!p->automatikEin) return; // kein Automatikbetrieb zeitzonen_ids = &(p->config.zeitzone0_id); // Wenn State == 0, ueber alle Zeitzonen iterieren und, falls eine // passende gefunden wird, die Gruppe einschalten; im else Block // das Gegenteil: wenn keine gefunden wurde und State == 1, dann // ausschalten. if (p->state == 0) { for (i = 0; i < 8; i++) { // wenn eine Zeitzone beginnt if ((p->state == 0) && zeitzone_matches(zeitzonen_ids[i])) { // Beginn einer Zeitzone p->state = 1; sendMessage(p, HCAN_HES_POWER_GROUP_ON); // Power Gruppe einschalten return; } } } else { // p->state == 1: found = 0; for (i = 0; i < 8; i++) { if ((p->state == 1) && zeitzone_matches(zeitzonen_ids[i])) found = 1; } if (found == 0) { // in der oberen Iteration ueber die Zeitzonen keine passende // Zeitzone gefunden; falls der Port an ist, diesen jetzt // ausschalten: p->state = 0; sendMessage(p, HCAN_HES_POWER_GROUP_OFF); return; } } // die regelmaessigen Update-Infos versenden (Achtung: Mutlicast // ist trotzdem CONTROL !) if (p->update_counter == 0) { p->update_counter = ZEITSCHALTUHR_UPDATE_INTERVAL; if (p->state) sendMessage(p, HCAN_HES_POWER_GROUP_ON); else sendMessage(p, HCAN_HES_POWER_GROUP_OFF); } p->update_counter--; }