/** * @brief Process events from sensor devices. * * TODO: make ready * * @param msgLong: 1 for a long key message * @param keyCount: the key counter. increments on each key release */ void cmMyBlind::trigger41(uint8_t msgLong, uint8_t keyCount, uint8_t msgVal) { uint8_t isLng = (msgLong & 0x40) ? 1 : 0; // is it a long message? uint8_t ctTbl; // set short or long l3 = (isLng)?(s_l3*)&lstPeer+1 :(s_l3*)&lstPeer; // set pointer to the right part of the list3, short or long // ctTbl = stateMachine_setNextState(curState); // X GE COND_VALUE_LO - geLo - > low - 0 // X GE COND_VALUE_HI - geHi - > high - 1 // X LT COND_VALUE_LO - ltLo - < low - 2 // X LT COND_VALUE_HI - ltHi - < high - 3 // COND_VALUE_LO LE X LT COND_VALUE_HIGH - betW - low <> high - 4 // X LT COND_VALUE_LO OR X GE COND_VALUE_HIGH - outS - < low or > high - 5 //dbg << "curState: " << curState << ", isLng: " << isLng << ", val: " << msgVal << ", cond: " << ctTbl << '\n'; if ( ((ctTbl == AS_CM_JT_NONE) && (msgVal > l3->COND_VALUE_LO)) || ((ctTbl == AS_CM_JT_ONDELAY) && (msgVal > l3->COND_VALUE_HI)) || ((ctTbl == AS_CM_JT_RAMPON) and (msgVal < l3->COND_VALUE_LO)) || ((ctTbl == AS_CM_JT_ON) && (msgVal < l3->COND_VALUE_HI)) || ((ctTbl == AS_CM_JT_OFFDELAY) && (msgVal > l3->COND_VALUE_LO) && (msgVal < l3->COND_VALUE_HI)) || ((ctTbl == AS_CM_JT_RAMPOFF) && (msgVal < l3->COND_VALUE_LO) && (msgVal > l3->COND_VALUE_HI)) ) { trigger40(isLng, keyCount); } }
void Relay::hmEventCol(uint8_t by3, uint8_t by10, uint8_t by11, uint8_t *data, uint8_t len) { if (by3 == 0x00) poll(); if ((by3 == 0x01) && (by11 == 0x06)) configCngEvent(); if ((by3 == 0x11) && (by10 == 0x02)) pairSetEvent(data, len); if ((by3 == 0x01) && (by11 == 0x0E)) pairStatusReq(); if ((by3 == 0x01) && (by11 == 0x01)) peerAddEvent(data, len); if (by3 >= 0x3E) peerMsgEvent(by3, data, len); if ((by3 == 0x11) && (by10 == 0x02)) trigger11(data[0], &data[1], &data[3]); if (by3 == 0x40) trigger40((by10 & 0x40), data[0]); }
/** * @brief We received a peer event. * In type you will find the type of peer event. * 0x3E = switch * 0x40 = remote * 0x41 = sensor * * Appropriate answer is an ACK */ void cmMyBlind::peerMsgEvent(uint8_t type, uint8_t *data, uint8_t len) { #ifdef CM_BLIND_DBG dbg << F("peer message type: ") << _HEXB(type) << F(", data: ") << _HEX(data, len) << '\n'; #endif if ( (type == 0x40) || (type == 0x41) ) { if (type == 0x40) { trigger40( ((data[0] & 0x40) ? 1 : 0), data[1]); // filter out the long message bit } else if (type == 0x41) { trigger41( (data[0] & 0x7F), data[1], data[2]); } stateToSend = AS_CM_STATETOSEND_ACK; // ACK should be send //msgTmr.set(100); // immediately } else { hm->sendACK(); } }