Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/common/config/OcppConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -201,13 +201,13 @@ ocpp::types::ConfigurationStatus OcppConfig::setConfiguration(const std::string&
if (key_is_interval != std::string::npos)
{
std::size_t value_is_negative = key.find("-");
if(value_is_negative)
if (value_is_negative)
{
ret = ConfigurationStatus::Rejected;
}
}

if(ret != ConfigurationStatus::Rejected)
if (ret != ConfigurationStatus::Rejected)
{
if ((it->second & PARAM_OCPP) != 0)
{
Expand Down
1 change: 1 addition & 0 deletions src/chargepoint/ChargePoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ bool ChargePoint::stop()

// Stop connection
ret = m_rpc_client->stop();
std::this_thread::sleep_for(std::chrono::milliseconds(300));

// Stop managers
m_config_manager.reset();
Expand Down
4 changes: 4 additions & 0 deletions src/chargepoint/requestfifo/RequestFifoManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ void RequestFifoManager::processFifoRequest()
Connector* connector = m_connectors.getConnector(request.connectorId);
if (connector)
{
std::lock_guard<std::mutex> lock(connector->mutex);
connector->transaction_id_offline = response.transactionId;
m_connectors.saveConnector(request.connectorId);
}
Expand All @@ -152,6 +153,8 @@ void RequestFifoManager::processFifoRequest()
// Look for the corresponding transaction
if (connector && (connector->transaction_id < 0) && (connector->transaction_start == request.timestamp))
{
std::lock_guard<std::mutex> lock(connector->mutex);

// Update current transaction id
connector->transaction_id = connector->transaction_id_offline;
m_connectors.saveConnector(request.connectorId);
Expand Down Expand Up @@ -251,6 +254,7 @@ void RequestFifoManager::processFifoRequest()
{
for (Connector* connector : m_connectors.getConnectors())
{
std::lock_guard<std::mutex> lock(connector->mutex);
if (connector->transaction_id < 0)
{
connector->transaction_id = connector->transaction_id_offline;
Expand Down
19 changes: 18 additions & 1 deletion src/chargepoint/smartcharging/ProfileDatabase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ along with OpenOCPP. If not, see <http://www.gnu.org/licenses/>.
#include "ProfileDatabase.h"
#include "ChargingProfile.h"
#include "ChargingProfileConverter.h"
#include "Connectors.h"
#include "IOcppConfig.h"

#include <algorithm>
Expand Down Expand Up @@ -248,11 +249,21 @@ bool ProfileDatabase::install(unsigned int connector_id, const ocpp::types::Char
/** @brief Assign the pending TxProfile of a connector to a transaction */
void ProfileDatabase::assignPendingTxProfiles(unsigned int connector_id, int transaction_id)
{
std::vector<int> profiles_to_remove;

// Look for pending profiles
for (const auto& profile : m_tx_profiles)
{
if ((profile.first == connector_id) && !profile.second.transactionId.isSet())
if (((profile.first == Connectors::CONNECTOR_ID_CHARGE_POINT) || (profile.first == connector_id)) &&
!profile.second.transactionId.isSet())
{
// If no connector set, remove the profile completly
// so that it won't be used again
if (profile.first == Connectors::CONNECTOR_ID_CHARGE_POINT)
{
profiles_to_remove.push_back(profile.second.chargingProfileId);
}

// Assign transaction to a new profile
ChargingProfile assigned_profile = profile.second;
assigned_profile.transactionId = transaction_id;
Expand All @@ -261,6 +272,12 @@ void ProfileDatabase::assignPendingTxProfiles(unsigned int connector_id, int tra
install(connector_id, assigned_profile);
}
}

// Remove profiles
for (int profile_id : profiles_to_remove)
{
clear(profile_id);
}
}

/** @brief Initialize the database table */
Expand Down
3 changes: 3 additions & 0 deletions src/chargepoint/smartcharging/SmartChargingManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,9 @@ bool SmartChargingManager::handleMessage(const ocpp::messages::GetCompositeSched
<< " - chargingRateUnit = "
<< (request.chargingRateUnit.isSet() ? ChargingRateUnitTypeHelper.toString(request.chargingRateUnit) : "not set");

// Lock profiles
std::lock_guard<std::mutex> lock(m_mutex);

// Prepare response
response.status = GetCompositeScheduleStatus::Rejected;

Expand Down
11 changes: 10 additions & 1 deletion src/chargepoint/transaction/TransactionManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,6 @@ bool TransactionManager::handleMessage(const ocpp::messages::RemoteStartTransact

LOG_INFO << "Remote start transaction requested : connector = " << request.connectorId << " - idTag = " << request.idTag.c_str();

// No remote start allowed without connector id
bool authorized = false;
if (request.connectorId.isSet() && (request.connectorId != Connectors::CONNECTOR_ID_CHARGE_POINT))
{
Expand All @@ -295,6 +294,16 @@ bool TransactionManager::handleMessage(const ocpp::messages::RemoteStartTransact
}
}
}
else
{
// The user application will determine which connector to use
authorized = m_events_handler.remoteStartTransactionRequested(Connectors::CONNECTOR_ID_CHARGE_POINT, request.idTag.str());
if (authorized && request.chargingProfile.isSet())
{
// Install associated charging profile
authorized = m_smart_charging_manager.installTxProfile(Connectors::CONNECTOR_ID_CHARGE_POINT, request.chargingProfile);
}
}

// Response
if (authorized)
Expand Down
2 changes: 1 addition & 1 deletion src/tools/helpers/Queue.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ class Queue
if (m_queue.size() < MAX_SIZE)
{
// Add item
m_queue.push(item);
m_queue.push(std::move(item));

// Wakeup waiting thread
m_cond_var.notify_one();
Expand Down