1
0
Fork 0
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:
Michael Keller 2019-03-04 15:11:50 +13:00 committed by GitHub
commit 2b9880f71b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 155 additions and 87 deletions

View file

@ -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 \

View file

@ -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" {