bool BaseStation_RfSweepStart::Response::matchSuccessResponse(const WirelessPacket& packet) { WirelessPacket::Payload payload = packet.payload(); //check the main bytes of the packet if(packet.deliveryStopFlags().toInvertedByte() != 0x07 || //delivery stop flag packet.type() != WirelessPacket::packetType_baseSuccessReply || //app data type packet.nodeAddress() != WirelessProtocol::BASE_STATION_ADDRESS || //node address payload.size() != 16 || //payload length payload.read_uint16(0) != WirelessProtocol::cmdId_base_rfScan || //command ID payload.read_uint16(2) != m_options || payload.read_uint32(4) != m_min || payload.read_uint32(8) != m_max || payload.read_uint32(12) != m_interval ) { //failed to match some of the bytes return false; } //set the result to success m_success = true; return true; }
bool BaseStation_SetBeacon_v2::Response::matchFailResponse(const WirelessPacket& packet) { WirelessPacket::Payload payload = packet.payload(); //check the main bytes of the packet if(packet.deliveryStopFlags().toInvertedByte() != 0x07 || //delivery stop flag packet.type() != WirelessPacket::packetType_baseErrorReply || //app data type packet.nodeAddress() != WirelessProtocol::BASE_STATION_ADDRESS || //node address payload.size() != 0x07 || //payload length payload.read_uint16(0) != WirelessProtocol::cmdId_base_setBeacon || //command ID payload.read_uint32(2) != m_beaconStartTime //beacon timestamp ) { //failed to match some of the bytes return false; } //Not doing anything with the error code as of now //uint8 errorCode = payload.read_uint8(6); //set the result to failure m_success = false; return true; }
bool AutoBalance_v2::Response::match(const WirelessPacket& packet) { WirelessPacket::Payload payload = packet.payload(); //check the main bytes of the packet if(packet.deliveryStopFlags().toInvertedByte() != 0x07 || //delivery stop flag packet.type() != WirelessPacket::packetType_nodeSuccessReply || //app data type packet.nodeAddress() != m_nodeAddress || //node address payload.size() != 0x10 || //payload length payload.read_uint16(0) != WirelessProtocol::cmdId_autoBalance_v2 || //command id payload.read_uint8(2) != m_channelNumber || //channel number (echo) payload.read_float(3) != m_targetPercent //target percent (echo) ) { //failed to match some of the bytes return false; } //if we made it here, the packet matches the response pattern //error code m_result.m_errorCode = static_cast<WirelessTypes::AutoBalanceErrorFlag>(payload.read_uint8(7)); //sampled value m_result.m_percentAchieved = payload.read_float(8); //hardware offset m_result.m_hardwareOffset = static_cast<uint16>(payload.read_uint32(12)); switch(m_result.m_errorCode) { case WirelessTypes::autobalance_success: case WirelessTypes::autobalance_maybeInvalid: m_success = true; default: m_success = false; } //we have fully matched the response m_fullyMatched = true; //notify that the response was matched m_matchCondition.notify(); return true; }