blob: b750bf12eb91e5a7dda2cb4a4b3ad93cac625a62 [file] [log] [blame]
yjimmyy646aa022016-07-05 12:09:50 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
yjimmyy646aa022016-07-05 12:09:50 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.driver.optical.power;
18
19import java.util.Optional;
20
Jimmy Yan32bceca2016-09-02 16:32:01 -070021import com.google.common.collect.Range;
yjimmyy646aa022016-07-05 12:09:50 -070022import org.onosproject.net.driver.AbstractHandlerBehaviour;
yjimmyy646aa022016-07-05 12:09:50 -070023import org.onosproject.net.PortNumber;
24import org.onosproject.net.behaviour.PowerConfig;
yjimmyy646aa022016-07-05 12:09:50 -070025
26/**
Jimmy Yan32bceca2016-09-02 16:32:01 -070027 * Port Power (Gain and attenuation) implementation for Oplink 1-SLOT-8D ROADM.
Andrea Campanelladadf6402019-08-07 15:24:11 +020028 * <p>
yjimmyy646aa022016-07-05 12:09:50 -070029 * An Oplink ROADM port exposes OchSignal resources.
30 * Optical Power can be set at port level or channel/wavelength level (attenuation).
yjimmyy646aa022016-07-05 12:09:50 -070031 */
32
33public class OplinkRoadmPowerConfig extends AbstractHandlerBehaviour
Andrea Campanelladadf6402019-08-07 15:24:11 +020034 implements PowerConfig<Object> {
yjimmyycfcb0532016-07-11 16:03:48 -070035
Mao Lu1f524702017-02-22 17:05:12 +080036 private OplinkPowerConfigUtil oplinkUtil = new OplinkPowerConfigUtil(this);
Jimmy Yan32bceca2016-09-02 16:32:01 -070037
Mao Lu1f524702017-02-22 17:05:12 +080038 @Override
Andrea Campanelladadf6402019-08-07 15:24:11 +020039 public Optional<Double> getTargetPower(PortNumber port, Object component) {
40 Long power = oplinkUtil.getTargetPower(port, component);
41 if (power == null) {
42 return Optional.empty();
43 }
44 return Optional.of(power.doubleValue());
yjimmyy646aa022016-07-05 12:09:50 -070045 }
46
47 @Override
Andrea Campanelladadf6402019-08-07 15:24:11 +020048 public Optional<Double> currentPower(PortNumber port, Object component) {
49 Long power = oplinkUtil.getCurrentPower(port, component);
50 if (power == null) {
51 return Optional.empty();
52 }
53 return Optional.of(power.doubleValue());
yjimmyy646aa022016-07-05 12:09:50 -070054 }
55
56 @Override
Andrea Campanelladadf6402019-08-07 15:24:11 +020057 public void setTargetPower(PortNumber port, Object component, double power) {
58 oplinkUtil.setTargetPower(port, component, (long) power);
yjimmyy646aa022016-07-05 12:09:50 -070059 }
yjimmyycfcb0532016-07-11 16:03:48 -070060
Jimmy Yan32bceca2016-09-02 16:32:01 -070061 @Override
Andrea Campanelladadf6402019-08-07 15:24:11 +020062 public Optional<Range<Double>> getTargetPowerRange(PortNumber port, Object component) {
63 Range<Long> power = oplinkUtil.getTargetPowerRange(port, component);
64 if (power == null) {
65 return Optional.empty();
66 }
67 return Optional.of(Range.closed((double) power.lowerEndpoint(), (double) power.upperEndpoint()));
Jimmy Yan32bceca2016-09-02 16:32:01 -070068 }
69
70 @Override
Andrea Campanelladadf6402019-08-07 15:24:11 +020071 public Optional<Range<Double>> getInputPowerRange(PortNumber port, Object component) {
72 Range<Long> power = oplinkUtil.getInputPowerRange(port, component);
73 if (power == null) {
74 return Optional.empty();
75 }
76 return Optional.of(Range.closed((double) power.lowerEndpoint(), (double) power.upperEndpoint()));
Jimmy Yan32bceca2016-09-02 16:32:01 -070077 }
yjimmyy646aa022016-07-05 12:09:50 -070078}