TEST(FrSkySPORT, frskySetCellVoltageTwoSensors) { uint8_t packet[FRSKY_SPORT_PACKET_SIZE]; MODEL_RESET(); TELEMETRY_RESET(); //sensor 1: 3 cell battery generateSportCellPacket(packet, 3, 0, _V(418), _V(416)); processSportPacket(packet); generateSportCellPacket(packet, 3, 2, _V(415), _V( 0)); processSportPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 3); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418); EXPECT_EQ(telemetryItems[0].cells.values[1].value, 416); EXPECT_EQ(telemetryItems[0].cells.values[2].value, 415); EXPECT_EQ(telemetryItems[0].cells.values[3].value, 0); EXPECT_EQ(telemetryItems[0].value, 1249); EXPECT_EQ(telemetryItems[0].valueMin, 1249); EXPECT_EQ(telemetryItems[0].valueMax, 1249); //sensor 2: 4 cell battery generateSportCellPacket(packet, 4, 0, _V(410), _V(420), DATA_ID_FLVSS+1); processSportPacket(packet); generateSportCellPacket(packet, 4, 2, _V(400), _V(405), DATA_ID_FLVSS+1); processSportPacket(packet); EXPECT_EQ(telemetryItems[1].cells.count, 4); EXPECT_EQ(telemetryItems[1].cells.values[0].value, 410); EXPECT_EQ(telemetryItems[1].cells.values[1].value, 420); EXPECT_EQ(telemetryItems[1].cells.values[2].value, 400); EXPECT_EQ(telemetryItems[1].cells.values[3].value, 405); EXPECT_EQ(telemetryItems[1].value, 1635); EXPECT_EQ(telemetryItems[1].valueMin, 1635); EXPECT_EQ(telemetryItems[1].valueMax, 1635); g_model.telemetrySensors[2].type = TELEM_TYPE_CALCULATED; g_model.telemetrySensors[2].formula = TELEM_FORMULA_ADD; g_model.telemetrySensors[2].prec = 1; g_model.telemetrySensors[2].calc.sources[0] = 1; g_model.telemetrySensors[2].calc.sources[1] = 2; telemetryWakeup(); EXPECT_EQ(telemetryItems[2].value, 287); EXPECT_EQ(telemetryItems[2].valueMin, 287); EXPECT_EQ(telemetryItems[2].valueMax, 287); //now change some voltages generateSportCellPacket(packet, 3, 2, _V(415), _V( 0)); processSportPacket(packet); generateSportCellPacket(packet, 4, 2, _V(390), _V(370), DATA_ID_FLVSS+1); processSportPacket(packet); generateSportCellPacket(packet, 3, 0, _V(420), _V(410)); processSportPacket(packet); generateSportCellPacket(packet, 4, 0, _V(410), _V(420), DATA_ID_FLVSS+1); processSportPacket(packet); telemetryWakeup(); EXPECT_EQ(telemetryItems[2].value, 283); EXPECT_EQ(telemetryItems[2].valueMin, 283); EXPECT_EQ(telemetryItems[2].valueMax, 287); //display test lcd_clear(); g_model.frsky.voltsSource = FRSKY_VOLTS_SOURCE_A1; }
TEST(FrSkySPORT, frskySetCellVoltageTwoSensors) { uint8_t packet[FRSKY_SPORT_PACKET_SIZE]; TELEMETRY_RESET(); //sensor 1: 3 cell battery generateSportCellPacket(packet, 3, 0, _V(418), _V(416)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 3, 2, _V(415), _V( 0)); frskySportProcessPacket(packet); EXPECT_EQ(frskyData.hub.cellsCount, 3); EXPECT_EQ(frskyData.hub.cellVolts[0], _V(418)); EXPECT_EQ(frskyData.hub.cellVolts[1], _V(416)); EXPECT_EQ(frskyData.hub.cellVolts[2], _V(415)); EXPECT_EQ(frskyData.hub.cellVolts[3], _V( 0)); EXPECT_EQ(frskyData.hub.minCellVolts, _V(415)); //current minimum cell voltage EXPECT_EQ(frskyData.hub.minCell, _V(415)); //all time minimum cell voltage EXPECT_EQ(frskyData.hub.minCells, _V(124)); //all time cells sum minimum EXPECT_EQ(frskyData.hub.cellsSum, _V(124)); //current cells sum //sensor 2: 4 cell battery generateSportCellPacket(packet, 4, 6, _V(410), _V(420)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 4, 8, _V(400), _V(405)); frskySportProcessPacket(packet); //we need to send all cells from first battery before a new calculation will be made generateSportCellPacket(packet, 3, 0, _V(418), _V(416)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 3, 2, _V(415), _V( 0)); frskySportProcessPacket(packet); EXPECT_EQ(frskyData.hub.cellsCount, 7); EXPECT_EQ(frskyData.hub.cellVolts[0], _V(418)); EXPECT_EQ(frskyData.hub.cellVolts[1], _V(416)); EXPECT_EQ(frskyData.hub.cellVolts[2], _V(415)); EXPECT_EQ(frskyData.hub.cellVolts[3], _V(410)); EXPECT_EQ(frskyData.hub.cellVolts[4], _V(420)); EXPECT_EQ(frskyData.hub.cellVolts[5], _V(400)); EXPECT_EQ(frskyData.hub.cellVolts[6], _V(405)); EXPECT_EQ(frskyData.hub.cellVolts[7], _V( 0)); EXPECT_EQ(frskyData.hub.cellVolts[8], _V( 0)); EXPECT_EQ(frskyData.hub.minCellVolts, _V(400)); //current minimum cell voltage EXPECT_EQ(frskyData.hub.minCell, _V(400)); //all time minimum cell voltage EXPECT_EQ(frskyData.hub.minCells, _V(288)); //all time cells sum minimum EXPECT_EQ(frskyData.hub.cellsSum, _V(288)); //current cells sum //now change some voltages generateSportCellPacket(packet, 3, 2, _V(415), _V( 0)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 4, 8, _V(390), _V(370)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 3, 0, _V(420), _V(410)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 4, 6, _V(410), _V(420)); frskySportProcessPacket(packet); EXPECT_EQ(frskyData.hub.cellsCount, 7); EXPECT_EQ(frskyData.hub.cellVolts[0], _V(420)); EXPECT_EQ(frskyData.hub.cellVolts[1], _V(410)); EXPECT_EQ(frskyData.hub.cellVolts[2], _V(415)); EXPECT_EQ(frskyData.hub.cellVolts[3], _V(410)); EXPECT_EQ(frskyData.hub.cellVolts[4], _V(420)); EXPECT_EQ(frskyData.hub.cellVolts[5], _V(390)); EXPECT_EQ(frskyData.hub.cellVolts[6], _V(370)); EXPECT_EQ(frskyData.hub.cellVolts[7],_V( 0)); EXPECT_EQ(frskyData.hub.cellVolts[8],_V( 0)); EXPECT_EQ(frskyData.hub.minCellVolts, _V(370)); //current minimum cell voltage EXPECT_EQ(frskyData.hub.minCell, _V(370)); //all time minimum cell voltage EXPECT_EQ(frskyData.hub.minCells, _V(283)); //all time cells sum minimum EXPECT_EQ(frskyData.hub.cellsSum, _V(283)); //current cells sum //display test lcd_clear(); g_model.frsky.voltsSource = FRSKY_VOLTS_SOURCE_A1; displayVoltagesScreen(); EXPECT_TRUE(checkScreenshot("two_sensor_votages_screen")); }
TEST(FrSkySPORT, frskySetCellVoltage) { uint8_t packet[FRSKY_SPORT_PACKET_SIZE]; MODEL_RESET(); TELEMETRY_RESET(); // test that simulates 3 cell battery generateSportCellPacket(packet, 3, 0, _V(410), _V(420)); processSportPacket(packet); EXPECT_EQ(checkSportPacket(packet), true) << "Bad CRC generation in setSportPacketCrc()"; generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); processSportPacket(packet); generateSportCellPacket(packet, 3, 0, _V(405), _V(300)); processSportPacket(packet); generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); processSportPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 3); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 405); EXPECT_EQ(telemetryItems[0].cells.values[1].value, 300); EXPECT_EQ(telemetryItems[0].cells.values[2].value, 430); EXPECT_EQ(telemetryItems[0].cells.values[4].value, 0); EXPECT_EQ(telemetryItems[0].value, 1135); EXPECT_EQ(telemetryItems[0].valueMin, 1135); EXPECT_EQ(telemetryItems[0].valueMax, 1260); generateSportCellPacket(packet, 3, 0, _V(405), _V(250)); processSportPacket(packet); generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); processSportPacket(packet); generateSportCellPacket(packet, 3, 0, _V(410), _V(420)); processSportPacket(packet); generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); processSportPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 3); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 410); EXPECT_EQ(telemetryItems[0].cells.values[1].value, 420); EXPECT_EQ(telemetryItems[0].cells.values[2].value, 430); EXPECT_EQ(telemetryItems[0].cells.values[4].value, 0); EXPECT_EQ(telemetryItems[0].value, 1260); EXPECT_EQ(telemetryItems[0].valueMin, 1085); EXPECT_EQ(telemetryItems[0].valueMax, 1260); //add another two cells - 5 cell battery generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); processSportPacket(packet); generateSportCellPacket(packet, 5, 2, _V(415), _V(420)); processSportPacket(packet); generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); processSportPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 5); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418); EXPECT_EQ(telemetryItems[0].cells.values[1].value, 408); EXPECT_EQ(telemetryItems[0].cells.values[2].value, 415); EXPECT_EQ(telemetryItems[0].cells.values[3].value, 420); EXPECT_EQ(telemetryItems[0].cells.values[4].value, 410); EXPECT_EQ(telemetryItems[0].cells.values[5].value, 0); EXPECT_EQ(telemetryItems[0].value, 2071); EXPECT_EQ(telemetryItems[0].valueMin, 2071); EXPECT_EQ(telemetryItems[0].valueMax, 2071); //simulate very low voltage for cell 3 generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); processSportPacket(packet); generateSportCellPacket(packet, 5, 2, _V(100), _V(420)); processSportPacket(packet); generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); processSportPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 5); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418); EXPECT_EQ(telemetryItems[0].cells.values[1].value, 408); EXPECT_EQ(telemetryItems[0].cells.values[2].value, 100); EXPECT_EQ(telemetryItems[0].cells.values[3].value, 420); EXPECT_EQ(telemetryItems[0].cells.values[4].value, 410); EXPECT_EQ(telemetryItems[0].cells.values[5].value, 0); EXPECT_EQ(telemetryItems[0].value, 1756); EXPECT_EQ(telemetryItems[0].valueMin, 1756); EXPECT_EQ(telemetryItems[0].valueMax, 2071); //back to normal (but with reversed order of packets) generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); processSportPacket(packet); generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); processSportPacket(packet); generateSportCellPacket(packet, 5, 2, _V(412), _V(420)); processSportPacket(packet); generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); processSportPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 5); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418); EXPECT_EQ(telemetryItems[0].cells.values[1].value, 408); EXPECT_EQ(telemetryItems[0].cells.values[2].value, 412); EXPECT_EQ(telemetryItems[0].cells.values[3].value, 420); EXPECT_EQ(telemetryItems[0].cells.values[4].value, 410); EXPECT_EQ(telemetryItems[0].cells.values[5].value, 0); EXPECT_EQ(telemetryItems[0].value, 2068); EXPECT_EQ(telemetryItems[0].valueMin, 1756); EXPECT_EQ(telemetryItems[0].valueMax, 2071); //display test lcd_clear(); g_model.frsky.voltsSource = FRSKY_VOLTS_SOURCE_A1; }
TEST(FrSkySPORT, frskySetCellVoltage) { uint8_t packet[FRSKY_SPORT_PACKET_SIZE]; TELEMETRY_RESET(); // test that simulates 3 cell battery generateSportCellPacket(packet, 3, 0, _V(410), _V(420)); frskySportProcessPacket(packet); EXPECT_EQ(checkSportPacket(packet), true) << "Bad CRC generation in setSportPacketCrc()"; generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 3, 0, _V(405), _V(300)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); frskySportProcessPacket(packet); EXPECT_EQ(frskyData.hub.cellsCount, 3); EXPECT_EQ(frskyData.hub.cellVolts[0], _V(405)); EXPECT_EQ(frskyData.hub.cellVolts[1], _V(300)); EXPECT_EQ(frskyData.hub.cellVolts[2], _V(430)); EXPECT_EQ(frskyData.hub.cellVolts[4], _V( 0)); EXPECT_EQ(frskyData.hub.minCellVolts, _V(300)); //current minimum cell voltage EXPECT_EQ(frskyData.hub.minCell, _V(300)); //all time minimum cell voltage EXPECT_EQ(frskyData.hub.minCells, _V(113)); //all time cells sum minimum EXPECT_EQ(frskyData.hub.cellsSum, _V(113)); //current cells sum generateSportCellPacket(packet, 3, 0, _V(405), _V(250)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 3, 0, _V(410), _V(420)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); frskySportProcessPacket(packet); EXPECT_EQ(frskyData.hub.cellsCount, 3); EXPECT_EQ(frskyData.hub.cellVolts[0], _V(410)); EXPECT_EQ(frskyData.hub.cellVolts[1], _V(420)); EXPECT_EQ(frskyData.hub.cellVolts[2], _V(430)); EXPECT_EQ(frskyData.hub.cellVolts[4], _V( 0)); EXPECT_EQ(frskyData.hub.minCellVolts, _V(410)); //current minimum cell voltage EXPECT_EQ(frskyData.hub.minCell, _V(250)); //all time minimum cell voltage EXPECT_EQ(frskyData.hub.minCells, _V(108)); //all time cells sum minimum EXPECT_EQ(frskyData.hub.cellsSum, _V(126)); //current cells sum //add another two cells - 5 cell battery generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 5, 2, _V(415), _V(420)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); frskySportProcessPacket(packet); EXPECT_EQ(frskyData.hub.cellsCount, 5); EXPECT_EQ(frskyData.hub.cellVolts[0], _V(418)); EXPECT_EQ(frskyData.hub.cellVolts[1], _V(408)); EXPECT_EQ(frskyData.hub.cellVolts[2], _V(415)); EXPECT_EQ(frskyData.hub.cellVolts[3], _V(420)); EXPECT_EQ(frskyData.hub.cellVolts[4], _V(410)); EXPECT_EQ(frskyData.hub.cellVolts[5], _V( 0)); EXPECT_EQ(frskyData.hub.minCellVolts, _V(408)); //current minimum cell voltage EXPECT_EQ(frskyData.hub.minCell, _V(408)); //all time minimum cell voltage EXPECT_EQ(frskyData.hub.minCells, _V(207)); //all time cells sum minimum EXPECT_EQ(frskyData.hub.cellsSum, _V(207)); //current cells sum //simulate very low voltage for cell 3 generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 5, 2, _V(100), _V(420)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); frskySportProcessPacket(packet); EXPECT_EQ(frskyData.hub.cellsCount, 5); EXPECT_EQ(frskyData.hub.cellVolts[0], _V(418)); EXPECT_EQ(frskyData.hub.cellVolts[1], _V(408)); EXPECT_EQ(frskyData.hub.cellVolts[2], _V(100)); EXPECT_EQ(frskyData.hub.cellVolts[3], _V(420)); EXPECT_EQ(frskyData.hub.cellVolts[4], _V(410)); EXPECT_EQ(frskyData.hub.cellVolts[5], _V( 0)); EXPECT_EQ(frskyData.hub.minCellVolts, _V(100)); //current minimum cell voltage EXPECT_EQ(frskyData.hub.minCell, _V(100)); //all time minimum cell voltage EXPECT_EQ(frskyData.hub.minCells, _V(175)); //all time cells sum minimum EXPECT_EQ(frskyData.hub.cellsSum, _V(175)); //current cells sum //back to normal (but with reversed order of packets) generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); frskySportProcessPacket(packet); generateSportCellPacket(packet, 5, 2, _V(412), _V(420)); frskySportProcessPacket(packet); EXPECT_EQ(frskyData.hub.cellsCount, 5); EXPECT_EQ(frskyData.hub.cellVolts[0], _V(418)); EXPECT_EQ(frskyData.hub.cellVolts[1], _V(408)); EXPECT_EQ(frskyData.hub.cellVolts[2], _V(412)); EXPECT_EQ(frskyData.hub.cellVolts[3], _V(420)); EXPECT_EQ(frskyData.hub.cellVolts[4], _V(410)); EXPECT_EQ(frskyData.hub.cellVolts[5], _V( 0)); EXPECT_EQ(frskyData.hub.minCellVolts, _V(408)); //current minimum cell voltage EXPECT_EQ(frskyData.hub.minCell, _V(100)); //all time minimum cell voltage EXPECT_EQ(frskyData.hub.minCells, _V(175)); //all time cells sum minimum EXPECT_EQ(frskyData.hub.cellsSum, _V(206)); //current cells sum //display test lcd_clear(); g_model.frsky.voltsSource = FRSKY_VOLTS_SOURCE_A1; displayVoltagesScreen(); EXPECT_TRUE(checkScreenshot("one_sensor_votages_screen")); }