mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-24 16:55:36 +03:00
Merge pull request #7497 from azolyoung/optimization_initialize_logic
add feature & protocolVersion cli setting
This commit is contained in:
commit
2b9880f71b
9 changed files with 155 additions and 87 deletions
|
@ -323,6 +323,7 @@ rcdevice_unittest_SRC := \
|
|||
$(USER_DIR)/fc/rc_modes.c \
|
||||
$(USER_DIR)/io/rcdevice.c \
|
||||
$(USER_DIR)/io/rcdevice_cam.c \
|
||||
$(USER_DIR)/pg/pg.c \
|
||||
|
||||
pid_unittest_SRC := \
|
||||
$(USER_DIR)/common/filter.c \
|
||||
|
|
|
@ -58,7 +58,7 @@ extern "C" {
|
|||
extern runcamDevice_t *camDevice;
|
||||
extern bool isButtonPressed;
|
||||
extern bool rcdeviceInMenu;
|
||||
extern rcdeviceWaitingResponseQueue watingResponseQueue;
|
||||
extern rcdeviceWaitingResponseQueue waitingResponseQueue;
|
||||
PG_REGISTER_WITH_RESET_FN(rcdeviceConfig_t, rcdeviceConfig, PG_RCDEVICE_CONFIG, 0);
|
||||
bool unitTestIsSwitchActivited(boxId_e boxId)
|
||||
{
|
||||
|
@ -67,11 +67,15 @@ extern "C" {
|
|||
return switchState.isActivated;
|
||||
}
|
||||
|
||||
|
||||
void pgResetFn_rcdeviceConfig(rcdeviceConfig_t *rcdeviceConfig)
|
||||
{
|
||||
rcdeviceConfig->initDeviceAttempts = 4;
|
||||
rcdeviceConfig->initDeviceAttemptInterval = 1000;
|
||||
}
|
||||
{
|
||||
rcdeviceConfig->initDeviceAttempts = 4;
|
||||
rcdeviceConfig->initDeviceAttemptInterval = 1000;
|
||||
|
||||
rcdeviceConfig->feature = 0;
|
||||
rcdeviceConfig->protocolVersion = 0;
|
||||
}
|
||||
|
||||
uint32_t millis(void);
|
||||
int minTimeout = 180;
|
||||
|
@ -99,13 +103,7 @@ typedef struct testData_s {
|
|||
} testData_t;
|
||||
|
||||
static testData_t testData;
|
||||
extern rcdeviceWaitingResponseQueue watingResponseQueue;
|
||||
|
||||
static void resetRCDeviceStatus()
|
||||
{
|
||||
isButtonPressed = false;
|
||||
rcdeviceInMenu = false;
|
||||
}
|
||||
extern rcdeviceWaitingResponseQueue waitingResponseQueue;
|
||||
|
||||
static void clearResponseBuff()
|
||||
{
|
||||
|
@ -114,11 +112,21 @@ static void clearResponseBuff()
|
|||
memset(testData.responseBufsLen, 0, MAX_RESPONSES_COUNT);
|
||||
memset(testData.responesBufs, 0, MAX_RESPONSES_COUNT * 60);
|
||||
|
||||
while (rcdeviceRespCtxQueueShift(&watingResponseQueue)) {
|
||||
while (rcdeviceRespCtxQueueShift(&waitingResponseQueue)) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static void resetRCDeviceStatus()
|
||||
{
|
||||
isButtonPressed = false;
|
||||
rcdeviceInMenu = false;
|
||||
PG_RESET(rcdeviceConfig);
|
||||
clearResponseBuff();
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void addResponseData(uint8_t *data, uint8_t dataLen, bool withDataForFlushSerial)
|
||||
{
|
||||
UNUSED(withDataForFlushSerial);
|
||||
|
@ -133,9 +141,9 @@ TEST(RCDeviceTest, TestRCSplitInitWithoutPortConfigurated)
|
|||
|
||||
resetRCDeviceStatus();
|
||||
|
||||
watingResponseQueue.headPos = 0;
|
||||
watingResponseQueue.tailPos = 0;
|
||||
watingResponseQueue.itemCount = 0;
|
||||
waitingResponseQueue.headPos = 0;
|
||||
waitingResponseQueue.tailPos = 0;
|
||||
waitingResponseQueue.itemCount = 0;
|
||||
memset(&testData, 0, sizeof(testData));
|
||||
runcamDeviceInit(&device);
|
||||
EXPECT_EQ(false, device.isReady);
|
||||
|
@ -147,9 +155,9 @@ TEST(RCDeviceTest, TestRCSplitInitWithoutOpenPortConfigurated)
|
|||
|
||||
resetRCDeviceStatus();
|
||||
|
||||
watingResponseQueue.headPos = 0;
|
||||
watingResponseQueue.tailPos = 0;
|
||||
watingResponseQueue.itemCount = 0;
|
||||
waitingResponseQueue.headPos = 0;
|
||||
waitingResponseQueue.tailPos = 0;
|
||||
waitingResponseQueue.itemCount = 0;
|
||||
memset(&testData, 0, sizeof(testData));
|
||||
testData.isRunCamSplitOpenPortSupported = false;
|
||||
testData.isRunCamSplitPortConfigurated = true;
|
||||
|
@ -165,22 +173,26 @@ TEST(RCDeviceTest, TestInitDevice)
|
|||
resetRCDeviceStatus();
|
||||
|
||||
// test correct response
|
||||
watingResponseQueue.headPos = 0;
|
||||
watingResponseQueue.tailPos = 0;
|
||||
watingResponseQueue.itemCount = 0;
|
||||
waitingResponseQueue.headPos = 0;
|
||||
waitingResponseQueue.tailPos = 0;
|
||||
waitingResponseQueue.itemCount = 0;
|
||||
memset(&testData, 0, sizeof(testData));
|
||||
testData.isRunCamSplitOpenPortSupported = true;
|
||||
testData.isRunCamSplitPortConfigurated = true;
|
||||
testData.isAllowBufferReadWrite = true;
|
||||
uint8_t responseData[] = { 0xCC, 0x01, 0x37, 0x00, 0xBD };
|
||||
addResponseData(responseData, sizeof(responseData), true);
|
||||
|
||||
|
||||
runcamDeviceInit(&device);
|
||||
testData.millis += 3001;
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
addResponseData(responseData, sizeof(responseData), true);
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += minTimeout;
|
||||
testData.responseDataReadPos = 0;
|
||||
testData.indexOfCurrentRespBuf = 0;
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += minTimeout;
|
||||
EXPECT_EQ(device.isReady, true);
|
||||
}
|
||||
|
@ -192,9 +204,9 @@ TEST(RCDeviceTest, TestInitDeviceWithInvalidResponse)
|
|||
resetRCDeviceStatus();
|
||||
|
||||
// test correct response data with incorrect len
|
||||
watingResponseQueue.headPos = 0;
|
||||
watingResponseQueue.tailPos = 0;
|
||||
watingResponseQueue.itemCount = 0;
|
||||
waitingResponseQueue.headPos = 0;
|
||||
waitingResponseQueue.tailPos = 0;
|
||||
waitingResponseQueue.itemCount = 0;
|
||||
memset(&testData, 0, sizeof(testData));
|
||||
testData.isRunCamSplitOpenPortSupported = true;
|
||||
testData.isRunCamSplitPortConfigurated = true;
|
||||
|
@ -203,6 +215,7 @@ TEST(RCDeviceTest, TestInitDeviceWithInvalidResponse)
|
|||
uint8_t responseData[] = { 0xCC, 0x01, 0x37, 0x00, 0xBD, 0x33 };
|
||||
addResponseData(responseData, sizeof(responseData), true);
|
||||
runcamDeviceInit(&device);
|
||||
testData.millis += 3001;
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += minTimeout;
|
||||
testData.responseDataReadPos = 0;
|
||||
|
@ -216,6 +229,7 @@ TEST(RCDeviceTest, TestInitDeviceWithInvalidResponse)
|
|||
uint8_t responseDataWithInvalidCRC[] = { 0xCC, 0x01, 0x37, 0x00, 0xBE };
|
||||
addResponseData(responseDataWithInvalidCRC, sizeof(responseDataWithInvalidCRC), true);
|
||||
runcamDeviceInit(&device);
|
||||
testData.millis += 3001;
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += minTimeout;
|
||||
testData.responseDataReadPos = 0;
|
||||
|
@ -229,6 +243,7 @@ TEST(RCDeviceTest, TestInitDeviceWithInvalidResponse)
|
|||
uint8_t incompleteResponseData[] = { 0xCC, 0x01, 0x37 };
|
||||
addResponseData(incompleteResponseData, sizeof(incompleteResponseData), true);
|
||||
runcamDeviceInit(&device);
|
||||
testData.millis += 3001;
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += minTimeout;
|
||||
testData.responseDataReadPos = 0;
|
||||
|
@ -245,6 +260,7 @@ TEST(RCDeviceTest, TestInitDeviceWithInvalidResponse)
|
|||
testData.isRunCamSplitPortConfigurated = true;
|
||||
testData.isAllowBufferReadWrite = true;
|
||||
runcamDeviceInit(&device);
|
||||
testData.millis += 3001;
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += minTimeout;
|
||||
testData.responseDataReadPos = 0;
|
||||
|
@ -260,9 +276,9 @@ TEST(RCDeviceTest, TestWifiModeChangeWithDeviceUnready)
|
|||
resetRCDeviceStatus();
|
||||
|
||||
// test correct response
|
||||
watingResponseQueue.headPos = 0;
|
||||
watingResponseQueue.tailPos = 0;
|
||||
watingResponseQueue.itemCount = 0;
|
||||
waitingResponseQueue.headPos = 0;
|
||||
waitingResponseQueue.tailPos = 0;
|
||||
waitingResponseQueue.itemCount = 0;
|
||||
memset(&testData, 0, sizeof(testData));
|
||||
testData.isRunCamSplitOpenPortSupported = true;
|
||||
testData.isRunCamSplitPortConfigurated = true;
|
||||
|
@ -271,6 +287,7 @@ TEST(RCDeviceTest, TestWifiModeChangeWithDeviceUnready)
|
|||
uint8_t responseData[] = { 0xCC, 0x01, 0x37, 0x00, 0xBC }; // wrong response
|
||||
addResponseData(responseData, sizeof(responseData), true);
|
||||
rcdeviceInit();
|
||||
testData.millis += 3001;
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += minTimeout;
|
||||
testData.responseDataReadPos = 0;
|
||||
|
@ -314,6 +331,12 @@ TEST(RCDeviceTest, TestWifiModeChangeWithDeviceUnready)
|
|||
// runn process loop
|
||||
rcdeviceUpdate(0);
|
||||
|
||||
// remove all request from queue
|
||||
for (int i = 0; i < 10; i++) {
|
||||
testData.millis += 500000;
|
||||
rcdeviceReceive(millis());
|
||||
}
|
||||
|
||||
EXPECT_EQ(false, unitTestIsSwitchActivited(BOXCAMERA1));
|
||||
EXPECT_EQ(false, unitTestIsSwitchActivited(BOXCAMERA2));
|
||||
EXPECT_EQ(false, unitTestIsSwitchActivited(BOXCAMERA3));
|
||||
|
@ -331,12 +354,16 @@ TEST(RCDeviceTest, TestWifiModeChangeWithDeviceReady)
|
|||
testData.maxTimesOfRespDataAvailable = 0;
|
||||
uint8_t responseData[] = { 0xCC, 0x01, 0x37, 0x00, 0xBD };
|
||||
addResponseData(responseData, sizeof(responseData), true);
|
||||
|
||||
camDevice->info.features = 15;
|
||||
rcdeviceInit();
|
||||
testData.millis += 3001;
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += minTimeout;
|
||||
testData.responseDataReadPos = 0;
|
||||
testData.indexOfCurrentRespBuf = 0;
|
||||
|
||||
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += minTimeout;
|
||||
EXPECT_EQ(camDevice->isReady, true);
|
||||
|
@ -381,6 +408,12 @@ TEST(RCDeviceTest, TestWifiModeChangeWithDeviceReady)
|
|||
EXPECT_EQ(false, unitTestIsSwitchActivited(BOXCAMERA1));
|
||||
EXPECT_EQ(true, unitTestIsSwitchActivited(BOXCAMERA2));
|
||||
EXPECT_EQ(false, unitTestIsSwitchActivited(BOXCAMERA3));
|
||||
|
||||
// remove all request from queue
|
||||
for (int i = 0; i < 10; i++) {
|
||||
testData.millis += 500000;
|
||||
rcdeviceReceive(millis());
|
||||
}
|
||||
}
|
||||
|
||||
TEST(RCDeviceTest, TestWifiModeChangeCombine)
|
||||
|
@ -395,6 +428,7 @@ TEST(RCDeviceTest, TestWifiModeChangeCombine)
|
|||
uint8_t responseData[] = { 0xCC, 0x01, 0x37, 0x00, 0xBD };
|
||||
addResponseData(responseData, sizeof(responseData), true);
|
||||
rcdeviceInit();
|
||||
testData.millis += 3001;
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += minTimeout;
|
||||
testData.responseDataReadPos = 0;
|
||||
|
@ -467,6 +501,12 @@ TEST(RCDeviceTest, TestWifiModeChangeCombine)
|
|||
EXPECT_EQ(true, unitTestIsSwitchActivited(BOXCAMERA1));
|
||||
EXPECT_EQ(true, unitTestIsSwitchActivited(BOXCAMERA2));
|
||||
EXPECT_EQ(false, unitTestIsSwitchActivited(BOXCAMERA3));
|
||||
|
||||
// remove all request from queue
|
||||
for (int i = 0; i < 10; i++) {
|
||||
testData.millis += 500000;
|
||||
rcdeviceReceive(millis());
|
||||
}
|
||||
}
|
||||
|
||||
TEST(RCDeviceTest, Test5KeyOSDCableSimulationProtocol)
|
||||
|
@ -481,6 +521,7 @@ TEST(RCDeviceTest, Test5KeyOSDCableSimulationProtocol)
|
|||
uint8_t responseData[] = { 0xCC, 0x01, 0x37, 0x00, 0xBD };
|
||||
addResponseData(responseData, sizeof(responseData), true);
|
||||
rcdeviceInit();
|
||||
testData.millis += 3001;
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += minTimeout;
|
||||
testData.responseDataReadPos = 0;
|
||||
|
@ -659,6 +700,12 @@ TEST(RCDeviceTest, Test5KeyOSDCableSimulationProtocol)
|
|||
testData.millis += minTimeout;
|
||||
EXPECT_EQ(false, isButtonPressed);
|
||||
clearResponseBuff();
|
||||
|
||||
// remove all request from queue
|
||||
for (int i = 0; i < 300; i++) {
|
||||
testData.millis += 500000;
|
||||
rcdeviceReceive(millis());
|
||||
}
|
||||
}
|
||||
|
||||
TEST(RCDeviceTest, Test5KeyOSDCableSimulationWithout5KeyFeatureSupport)
|
||||
|
@ -672,7 +719,12 @@ TEST(RCDeviceTest, Test5KeyOSDCableSimulationWithout5KeyFeatureSupport)
|
|||
rcData[YAW] = FIVE_KEY_JOYSTICK_MAX; // Yaw High
|
||||
rcdeviceUpdate(millis() * 1000);
|
||||
EXPECT_EQ(false, rcdeviceInMenu);
|
||||
|
||||
// remove all request from queue
|
||||
for (int i = 0; i < 10; i++) {
|
||||
testData.millis += 500000;
|
||||
rcdeviceReceive(millis());
|
||||
}
|
||||
|
||||
// init device that have not 5 key OSD cable simulation feature
|
||||
memset(&testData, 0, sizeof(testData));
|
||||
testData.isRunCamSplitOpenPortSupported = true;
|
||||
|
@ -680,12 +732,14 @@ TEST(RCDeviceTest, Test5KeyOSDCableSimulationWithout5KeyFeatureSupport)
|
|||
testData.isAllowBufferReadWrite = true;
|
||||
testData.maxTimesOfRespDataAvailable = 0;
|
||||
uint8_t responseData[] = { 0xCC, 0x01, 0x37, 0x00, 0xBD };
|
||||
addResponseData(responseData, sizeof(responseData), true);
|
||||
|
||||
rcdeviceInit();
|
||||
testData.millis += 3001;
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += 200;
|
||||
testData.responseDataReadPos = 0;
|
||||
testData.indexOfCurrentRespBuf = 0;
|
||||
addResponseData(responseData, sizeof(responseData), true);
|
||||
rcdeviceReceive(millis() * 1000);
|
||||
testData.millis += 200;
|
||||
EXPECT_EQ(camDevice->isReady, true);
|
||||
|
@ -697,6 +751,12 @@ TEST(RCDeviceTest, Test5KeyOSDCableSimulationWithout5KeyFeatureSupport)
|
|||
rcdeviceUpdate(millis() * 1000);
|
||||
EXPECT_EQ(false, rcdeviceInMenu);
|
||||
clearResponseBuff();
|
||||
|
||||
// remove all request from queue
|
||||
for (int i = 0; i < 10; i++) {
|
||||
testData.millis += 500000;
|
||||
rcdeviceReceive(millis());
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue