Program Listing for File NetworkConnectionParametersBuilder.cpp

Return to documentation for file (src/cip/connectionManager/NetworkConnectionParametersBuilder.cpp)

//
// Created by Vincent Prince on 05/22/20.
//

#include "NetworkConnectionParametersBuilder.h"

#include <utility>
#include <assert.h>
#include "utils/Buffer.h"

namespace eipScanner {
namespace cip {
namespace connectionManager {

    using utils::Buffer;

    NetworkConnectionParametersBuilder::NetworkConnectionParametersBuilder(CipUdint val, bool lfo) :
     _value{val}, _lfo{lfo} {

    }

    NetworkConnectionParametersBuilder NetworkConnectionParametersBuilder::setRedundantOwner(RedundantOwner val) {
        if (_lfo) {
            _value |= (val << 31);
        } else {
            _value |= (val << 15);
        }
        return *this;
    }

    NetworkConnectionParametersBuilder& NetworkConnectionParametersBuilder::setConnectionType(ConnectionType val) {
        if (_lfo) {
            _value |= (val << 29);
        } else {
            _value |= (val << 13);
        }
        return *this;
    }

    NetworkConnectionParametersBuilder& NetworkConnectionParametersBuilder::setPriority(Priority val) {
        if (_lfo) {
            _value |= (val << 26);
        }else {
            _value |= (val << 10);
        }
        return *this;
    }

    NetworkConnectionParametersBuilder& NetworkConnectionParametersBuilder::setType(Type val) {
        if (_lfo) {
            _value |= (val << 25);
        } else {
            _value |= (val << 9);
        }
        return *this;
    }

    NetworkConnectionParametersBuilder& NetworkConnectionParametersBuilder::setConnectionSize(CipUint val) {
        CipUdint mask = 0x000001FF;
        if (_lfo) {
            mask = 0x0000FFFF;
        }
        _value |= val & mask;
        return *this;
    }

    CipUdint NetworkConnectionParametersBuilder::build() {
        return _value;
    }

    NetworkConnectionParametersBuilder::RedundantOwner NetworkConnectionParametersBuilder::getRedundantOwner() const {
        if (_lfo) {
            return static_cast<NetworkConnectionParametersBuilder::RedundantOwner>(((_value & (1 << 31)) >> 31));
        } else {
            return static_cast<NetworkConnectionParametersBuilder::RedundantOwner>(((_value & (1 << 15)) >> 15));
        }
    }

    NetworkConnectionParametersBuilder::ConnectionType NetworkConnectionParametersBuilder::getConnectionType() const {
        if (_lfo) {
            return static_cast<NetworkConnectionParametersBuilder::ConnectionType>(((_value & (3 << 29)) >> 29));
        } else {
            return static_cast<NetworkConnectionParametersBuilder::ConnectionType>(((_value & (3 << 13)) >> 13));
        }
    }

    NetworkConnectionParametersBuilder::Priority NetworkConnectionParametersBuilder::getPriority() const {
        if (_lfo) {
            return static_cast<NetworkConnectionParametersBuilder::Priority>(((_value & (3 << 26)) >> 26));
        } else {
            return static_cast<NetworkConnectionParametersBuilder::Priority>(((_value & (3 << 10)) >> 10));
        }
    }

    NetworkConnectionParametersBuilder::Type NetworkConnectionParametersBuilder::getType() const {
        if (_lfo) {
            return static_cast<NetworkConnectionParametersBuilder::Type>(((_value & (1 << 25)) >> 25));
        } else {
            return static_cast<NetworkConnectionParametersBuilder::Type>(((_value & (1 << 9)) >> 9));
        }
    }

    CipUint NetworkConnectionParametersBuilder::getConnectionSize() const {
        CipUdint mask = 0x000001FF;
        if (_lfo) {
            mask = 0x0000FFFF;
        }
        return static_cast<CipUint>(_value & mask);
}

}
}
}