static void awakeMode_onTXFailed() { // We don't know what the receiver's state is because it may // have received the packet but lost the ACK. g_awakeState.receiverButtonStateValid = 0; if (g_awakeState.consecutiveSendFailures < 255) { g_awakeState.consecutiveSendFailures++; } if (g_awakeState.consecutiveSendFailures < 3) { resendPacket(); } else if (g_awakeState.consecutiveSendFailures == 3) { g_awakeState.waitTime = 10; g_awakeState.state = AWAKE_STATE_WAIT; g_awakeState.stateMillis = 0; } else // > 3 { g_awakeState.waitTime += g_awakeState.waitTime; if (g_awakeState.waitTime > 1000) { g_awakeState.waitTime = 1000; } g_awakeState.state = AWAKE_STATE_WAIT; g_awakeState.stateMillis = 0; } }
void AmptekSDD123Server::sendPacketInQueue() { if(!packetQueue_.isEmpty()){ AmptekSDD123Packet resendPacket(packetQueue_.takeFirst()); if(resendPacket.commandId() == AmptekCommandManagerSGM::RequestCommTestEchoPacket) sendSyncDatagram(resendPacket); else sendRequestDatagram(resendPacket); } }
static int awakeMode_timerTick() { g_awakeState.stateMillis += 10; if (g_awakeState.state == AWAKE_STATE_IDLE && g_awakeState.stateMillis > 1000) { sendPacket(); } else if (g_awakeState.state == AWAKE_STATE_WAIT && g_awakeState.stateMillis >= g_awakeState.waitTime) { resendPacket(); } return 0; }
static void sendPacket() { g_awakeState.consecutiveSendFailures = 0; resendPacket(); }