mirror of
https://github.com/eclipse-openvehicle-api/openvehicle-api.git
synced 2026-06-30 21:05:10 +00:00
update open trunk example (#13)
This commit is contained in:
@@ -11,6 +11,11 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "bs_vehicletrunk.h"
|
#include "bs_vehicletrunk.h"
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
constexpr float kMovingSpeedThresholdKmh = 0.0F;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Constructor
|
* @brief Constructor
|
||||||
*/
|
*/
|
||||||
@@ -41,7 +46,8 @@ CBasicServiceVehicleTrunk::CBasicServiceVehicleTrunk()
|
|||||||
*/
|
*/
|
||||||
bool CBasicServiceVehicleTrunk::SetOpen(bool value)
|
bool CBasicServiceVehicleTrunk::SetOpen(bool value)
|
||||||
{
|
{
|
||||||
if (m_Speed)
|
// Block only opening requests while vehicle is moving; closing must always be allowed.
|
||||||
|
if (value && (m_Speed > kMovingSpeedThresholdKmh))
|
||||||
return false;
|
return false;
|
||||||
return m_ptrOpen->WriteOpen(value);
|
return m_ptrOpen->WriteOpen(value);
|
||||||
}
|
}
|
||||||
@@ -49,4 +55,10 @@ bool CBasicServiceVehicleTrunk::SetOpen(bool value)
|
|||||||
void CBasicServiceVehicleTrunk::SetSpeed(float value)
|
void CBasicServiceVehicleTrunk::SetSpeed(float value)
|
||||||
{
|
{
|
||||||
m_Speed = value;
|
m_Speed = value;
|
||||||
|
|
||||||
|
// Safety fallback: if vehicle starts moving, force trunk to closed state.
|
||||||
|
if (m_Speed > kMovingSpeedThresholdKmh)
|
||||||
|
{
|
||||||
|
(void)m_ptrOpen->WriteOpen(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ void CConsole::PrintHeader(uint32_t uiInstance)
|
|||||||
PrintText(g_sSeparator4, "============================================================================");
|
PrintText(g_sSeparator4, "============================================================================");
|
||||||
PrintText(g_sComment1, "The Open Trunk signal has a safety request.");
|
PrintText(g_sComment1, "The Open Trunk signal has a safety request.");
|
||||||
PrintText(g_sComment2, "Therefore the speed value is required and must be checked.");
|
PrintText(g_sComment2, "Therefore the speed value is required and must be checked.");
|
||||||
PrintText(g_sComment3, "If the car is moving the open trunk is blocked.");
|
PrintText(g_sComment3, "If the car is moving, open is blocked and trunk is closed automatically.");
|
||||||
PrintText(g_sSeparator5, "============================================================================");
|
PrintText(g_sSeparator5, "============================================================================");
|
||||||
PrintText(g_sOpenViaDevice, "Vehicle Device Interface not available.");
|
PrintText(g_sOpenViaDevice, "Vehicle Device Interface not available.");
|
||||||
PrintText(g_sOpenViaService, "Basic Service Interface not available.");
|
PrintText(g_sOpenViaService, "Basic Service Interface not available.");
|
||||||
@@ -237,11 +237,18 @@ void CConsole::WriteSpeed(float value)
|
|||||||
|
|
||||||
void CConsole::SetSpeed(float value)
|
void CConsole::SetSpeed(float value)
|
||||||
{
|
{
|
||||||
|
const bool bIsMoving = (value > 0.0F);
|
||||||
if (m_SpeedBS != value)
|
if (m_SpeedBS != value)
|
||||||
{
|
{
|
||||||
m_SpeedBS = value;
|
m_SpeedBS = value;
|
||||||
PrintValue(g_sBasicServiceSpeed, "Vehicle Speed RX", m_SpeedBS, "km/h");
|
PrintValue(g_sBasicServiceSpeed, "Vehicle Speed RX", m_SpeedBS, "km/h");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bIsMoving && !m_bWasMovingBS)
|
||||||
|
{
|
||||||
|
PrintText(g_sOpenViaService, "Safety active: speed > 0, trunk close command sent.");
|
||||||
|
}
|
||||||
|
m_bWasMovingBS = bIsMoving;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CConsole::KeyHit()
|
bool CConsole::KeyHit()
|
||||||
@@ -310,7 +317,7 @@ void CConsole::RunUntilBreak()
|
|||||||
if (m_pTrunkService)
|
if (m_pTrunkService)
|
||||||
{
|
{
|
||||||
if (m_pTrunkService->SetOpen(true))
|
if (m_pTrunkService->SetOpen(true))
|
||||||
PrintText(g_sOpenViaService, "Trunk opened safely.");
|
PrintText(g_sOpenViaService, "Trunk opened safely (auto-close if vehicle starts moving).");
|
||||||
else
|
else
|
||||||
PrintText(g_sOpenViaService, "Open trunk failed, car is moving.");
|
PrintText(g_sOpenViaService, "Open trunk failed, car is moving.");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ private:
|
|||||||
float m_SpeedDL = 0.0; ///< Speed Data Link
|
float m_SpeedDL = 0.0; ///< Speed Data Link
|
||||||
float m_SpeedVD = 0.0; ///< Speed Vehicle Device
|
float m_SpeedVD = 0.0; ///< Speed Vehicle Device
|
||||||
float m_SpeedBS = 0.0; ///< Speed Basic Service
|
float m_SpeedBS = 0.0; ///< Speed Basic Service
|
||||||
|
bool m_bWasMovingBS = false; ///< Transition flag for movement status.
|
||||||
|
|
||||||
vss::Vehicle::Body::TrunkService::IVSS_SetOpen* m_pTrunkService = nullptr; ///< trunk (basic service)
|
vss::Vehicle::Body::TrunkService::IVSS_SetOpen* m_pTrunkService = nullptr; ///< trunk (basic service)
|
||||||
vss::Vehicle::Body::TrunkDevice::IVSS_WriteOpen* m_pTrunkDevice = nullptr; ///< trunk (vehicle device)
|
vss::Vehicle::Body::TrunkDevice::IVSS_WriteOpen* m_pTrunkDevice = nullptr; ///< trunk (vehicle device)
|
||||||
|
|||||||
@@ -1246,7 +1246,7 @@ sdv::installation::SPackageBLOB CInstallComposer::DeserializeBLOB(std::ifstream&
|
|||||||
|
|
||||||
// Extend the buffer and read the BLOB data (after the resize, the psPartialBLOB pointer could be invalidated).
|
// Extend the buffer and read the BLOB data (after the resize, the psPartialBLOB pointer could be invalidated).
|
||||||
uint32_t uiBLOBSize = psPartialBLOB->uiBLOBSize;
|
uint32_t uiBLOBSize = psPartialBLOB->uiBLOBSize;
|
||||||
if (uiBLOBSize > 24*1024*1024)
|
if (uiBLOBSize > 26*1024*1024) // 26 instead of 24 becasue of door example
|
||||||
throw sdv::installation::XIncompatiblePackage(); // Safety
|
throw sdv::installation::XIncompatiblePackage(); // Safety
|
||||||
ptrBLOB.resize(uiBLOBSize);
|
ptrBLOB.resize(uiBLOBSize);
|
||||||
if (!ptrBLOB)
|
if (!ptrBLOB)
|
||||||
|
|||||||
Reference in New Issue
Block a user