Esempio n. 1
0
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;
}
Esempio n. 2
0
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"));
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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"));
}