LCOV - code coverage report
Current view: top level - src/traci-server - TraCIServerAPI_ChargingStation.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 94.4 % 54 51
Test Date: 2024-12-21 15:45:41 Functions: 100.0 % 2 2

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
       4              : // This program and the accompanying materials are made available under the
       5              : // terms of the Eclipse Public License 2.0 which is available at
       6              : // https://www.eclipse.org/legal/epl-2.0/
       7              : // This Source Code may also be made available under the following Secondary
       8              : // Licenses when the conditions for such availability set forth in the Eclipse
       9              : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10              : // or later which is available at
      11              : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12              : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13              : /****************************************************************************/
      14              : /// @file    TraCIServerAPI_ChargingStation.cpp
      15              : /// @author  Jakob Erdmann
      16              : /// @date    16.03.2020
      17              : ///
      18              : // APIs for getting/setting charging station values via TraCI
      19              : /****************************************************************************/
      20              : #include <config.h>
      21              : 
      22              : #include <microsim/MSNet.h>
      23              : #include <microsim/MSEdge.h>
      24              : #include <microsim/MSStoppingPlace.h>
      25              : #include <libsumo/ChargingStation.h>
      26              : #include <libsumo/TraCIConstants.h>
      27              : #include <libsumo/StorageHelper.h>
      28              : #include "TraCIServerAPI_ChargingStation.h"
      29              : 
      30              : 
      31              : // ===========================================================================
      32              : // method definitions
      33              : // ===========================================================================
      34              : bool
      35         1321 : TraCIServerAPI_ChargingStation::processGet(TraCIServer& server, tcpip::Storage& inputStorage,
      36              :         tcpip::Storage& outputStorage) {
      37         1321 :     const int variable = inputStorage.readUnsignedByte();
      38         1321 :     const std::string id = inputStorage.readString();
      39         1321 :     server.initWrapper(libsumo::RESPONSE_GET_CHARGINGSTATION_VARIABLE, variable, id);
      40              :     try {
      41         1321 :         if (!libsumo::ChargingStation::handleVariable(id, variable, &server, &inputStorage)) {
      42            3 :             return server.writeErrorStatusCmd(libsumo::CMD_GET_CHARGINGSTATION_VARIABLE, "Get ChargingStation Variable: unsupported variable " + toHex(variable, 2) + " specified", outputStorage);
      43              :         }
      44            1 :     } catch (libsumo::TraCIException& e) {
      45            1 :         return server.writeErrorStatusCmd(libsumo::CMD_GET_CHARGINGSTATION_VARIABLE, e.what(), outputStorage);
      46            1 :     }
      47         1319 :     server.writeStatusCmd(libsumo::CMD_GET_CHARGINGSTATION_VARIABLE, libsumo::RTYPE_OK, "", outputStorage);
      48         1319 :     server.writeResponseWithLength(outputStorage, server.getWrapperStorage());
      49              :     return true;
      50              : }
      51              : 
      52              : 
      53              : bool
      54          631 : TraCIServerAPI_ChargingStation::processSet(TraCIServer& server, tcpip::Storage& inputStorage,
      55              :         tcpip::Storage& outputStorage) {
      56          631 :     std::string warning = ""; // additional description for response
      57              :     // variable
      58          631 :     int variable = inputStorage.readUnsignedByte();
      59          631 :     if (variable != libsumo::VAR_PARAMETER &&
      60          631 :             variable != libsumo::VAR_CS_POWER &&
      61          321 :             variable != libsumo::VAR_CS_EFFICIENCY &&
      62          321 :             variable != libsumo::VAR_CS_CHARGE_DELAY &&
      63              :             variable != libsumo::VAR_CS_CHARGE_IN_TRANSIT) {
      64            0 :         return server.writeErrorStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, "Change ChargingStation State: unsupported variable " + toHex(variable, 2) + " specified", outputStorage);
      65              :     }
      66              :     // id
      67          631 :     std::string id = inputStorage.readString();
      68              : 
      69              :     try {
      70              :         // process
      71          631 :         switch (variable) {
      72              :             case libsumo::VAR_PARAMETER: {
      73            1 :                 StoHelp::readCompound(inputStorage, 2, "A compound object of size 2 is needed for setting a parameter.");
      74            1 :                 const std::string name = StoHelp::readTypedString(inputStorage, "The name of the parameter must be given as a string.");
      75            1 :                 const std::string value = StoHelp::readTypedString(inputStorage, "The value of the parameter must be given as a string.");
      76            1 :                 libsumo::ChargingStation::setParameter(id, name, value);
      77              :             }
      78            1 :             break;
      79          309 :             case libsumo::VAR_CS_POWER: {
      80          309 :                 double value = 0;
      81          309 :                 if (!server.readTypeCheckingDouble(inputStorage, value)) {
      82            2 :                     return server.writeErrorStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, "Setting chargingPower requires a double.", outputStorage);
      83              :                 }
      84          308 :                 libsumo::ChargingStation::setChargingPower(id, value);
      85              :             }
      86          307 :             break;
      87          309 :             case libsumo::VAR_CS_EFFICIENCY: {
      88          309 :                 double value = 0;
      89          309 :                 if (!server.readTypeCheckingDouble(inputStorage, value)) {
      90            2 :                     return server.writeErrorStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, "Setting efficiency requires a double.", outputStorage);
      91              :                 }
      92          308 :                 libsumo::ChargingStation::setEfficiency(id, value);
      93              :             }
      94          307 :             break;
      95            6 :             case libsumo::VAR_CS_CHARGE_DELAY: {
      96            6 :                 double value = 0;
      97            6 :                 if (!server.readTypeCheckingDouble(inputStorage, value)) {
      98            0 :                     return server.writeErrorStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, "Setting charge delay requires a double.", outputStorage);
      99              :                 }
     100            6 :                 libsumo::ChargingStation::setChargeDelay(id, value);
     101              :             }
     102            6 :             break;
     103            6 :             case libsumo::VAR_CS_CHARGE_IN_TRANSIT: {
     104            6 :                 int value = 0;
     105            6 :                 if (!server.readTypeCheckingInt(inputStorage, value)) {
     106            0 :                     return server.writeErrorStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, "Setting charge in transit requires an integer.", outputStorage);
     107              :                 }
     108            6 :                 libsumo::ChargingStation::setChargeInTransit(id, value != 0);
     109              :             }
     110            6 :             break;
     111              :             default:
     112              :                 break;
     113              :         }
     114            2 :     } catch (libsumo::TraCIException& e) {
     115            2 :         return server.writeErrorStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, e.what(), outputStorage);
     116            2 :     }
     117          627 :     server.writeStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, libsumo::RTYPE_OK, warning, outputStorage);
     118              :     return true;
     119              : }
     120              : 
     121              : 
     122              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1