• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

WindhoverLabs / phoebus / #112

15 Dec 2023 06:10PM UTC coverage: 17.034% (-0.001%) from 17.035%
#112

push

lorenzo-gomez-windhover
-Add the rest of the VTypes to ParameterViewer

17830 of 104672 relevant lines covered (17.03%)

0.17 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/core/commander-core/src/main/java/com/windhoverlabs/pv/yamcs/YamcsVType.java
1
package com.windhoverlabs.pv.yamcs;
2

3
import com.windhoverlabs.yamcs.core.MissionDatabase;
4
import java.text.NumberFormat;
5
import org.epics.vtype.VType;
6
import org.yamcs.protobuf.Mdb.AlarmLevelType;
7
import org.yamcs.protobuf.Mdb.AlarmRange;
8
import org.yamcs.protobuf.Pvalue.AcquisitionStatus;
9
import org.yamcs.protobuf.Pvalue.ParameterValue;
10
import org.yamcs.protobuf.Yamcs.NamedObjectId;
11
import org.yamcs.protobuf.Yamcs.Value;
12

13
public class YamcsVType extends VType implements Alarm, Display {
14

15
  private ParameterValue pval;
16
  private YamcsAware yamcsListener;
17
  protected Value value;
18

19
  public YamcsVType(ParameterValue pval, boolean raw) {
×
20
    this.pval = pval;
×
21
    value = raw ? pval.getRawValue() : pval.getEngValue();
×
22
  }
×
23

24
  public NamedObjectId getId() {
25
    return pval.getId();
×
26
  }
27

28
  @Override
29
  public AlarmSeverity getAlarmSeverity() {
30
    if (pval == null) {
×
31
      return AlarmSeverity.NONE;
×
32
    }
33

34
    if (pval.getAcquisitionStatus() == AcquisitionStatus.EXPIRED
×
35
        || pval.getAcquisitionStatus() == AcquisitionStatus.NOT_RECEIVED
×
36
        || pval.getAcquisitionStatus() == AcquisitionStatus.INVALID) {
×
37
      return AlarmSeverity
×
38
          .INVALID; // Workaround to display LOS in the displays, should be 'Expired'
39
    }
40

41
    if (!pval.hasMonitoringResult()) {
×
42
      return AlarmSeverity.NONE;
×
43
    }
44

45
    switch (pval.getMonitoringResult()) {
×
46
      case IN_LIMITS:
47
        return AlarmSeverity.NONE;
×
48
      case DISABLED:
49
        return AlarmSeverity.NONE;
×
50
      case WATCH:
51
      case WARNING:
52
      case DISTRESS:
53
        return AlarmSeverity.MINOR;
×
54
      case CRITICAL:
55
      case SEVERE:
56
        return AlarmSeverity.MAJOR;
×
57
      default:
58
        throw new IllegalStateException("Unexpected alarm severity " + pval.getMonitoringResult());
×
59
    }
60
  }
61

62
  @Override
63
  public String getAlarmName() {
64
    return "";
×
65
  }
66

67
  @Override
68
  public Double getLowerWarningLimit() {
69
    if (pval != null) {
×
70
      // Assumes ordered ranges
71
      for (AlarmRange range : pval.getAlarmRangeList()) {
×
72
        if (range.getLevel() == AlarmLevelType.WATCH
×
73
            || range.getLevel() == AlarmLevelType.WARNING
×
74
            || range.getLevel() == AlarmLevelType.DISTRESS) {
×
75
          if (range.hasMinInclusive()) {
×
76
            return range.getMinInclusive();
×
77
          } else if (range.hasMinExclusive()) {
×
78
            return range.getMinExclusive();
×
79
          }
80
        }
81
      }
×
82
    }
83
    return Double.NaN;
×
84
  }
85

86
  /** Highest value before the warning region */
87
  @Override
88
  public Double getUpperWarningLimit() {
89
    if (pval != null) {
×
90
      // Assumes ordered ranges
91
      for (AlarmRange range : pval.getAlarmRangeList()) {
×
92
        if (range.getLevel() == AlarmLevelType.WATCH
×
93
            || range.getLevel() == AlarmLevelType.WARNING
×
94
            || range.getLevel() == AlarmLevelType.DISTRESS) {
×
95
          if (range.hasMaxInclusive()) {
×
96
            return range.getMaxInclusive();
×
97
          } else if (range.hasMaxExclusive()) {
×
98
            return range.getMaxExclusive();
×
99
          }
100
        }
101
      }
×
102
    }
103
    return Double.NaN;
×
104
  }
105

106
  @Override
107
  public Double getLowerAlarmLimit() {
108
    if (pval != null) {
×
109
      // Assumes ordered ranges
110
      for (AlarmRange range : pval.getAlarmRangeList()) {
×
111
        if (range.getLevel() == AlarmLevelType.CRITICAL
×
112
            || range.getLevel() == AlarmLevelType.SEVERE) {
×
113
          if (range.hasMinInclusive()) {
×
114
            return range.getMinInclusive();
×
115
          } else if (range.hasMinExclusive()) {
×
116
            return range.getMinExclusive();
×
117
          }
118
        }
119
      }
×
120
    }
121
    return Double.NaN;
×
122
  }
123

124
  /** Highest value before the alarm region */
125
  @Override
126
  public Double getUpperAlarmLimit() {
127
    if (pval != null) {
×
128
      // Assumes ordered ranges
129
      for (AlarmRange range : pval.getAlarmRangeList()) {
×
130
        if (range.getLevel() == AlarmLevelType.CRITICAL
×
131
            || range.getLevel() == AlarmLevelType.SEVERE) {
×
132
          if (range.hasMaxInclusive()) {
×
133
            return range.getMaxInclusive();
×
134
          } else if (range.hasMaxExclusive()) {
×
135
            return range.getMaxExclusive();
×
136
          }
137
        }
138
      }
×
139
    }
140
    return Double.NaN;
×
141
  }
142

143
  @Override
144
  public Double getLowerDisplayLimit() {
145
    Double loLimit = getLowerAlarmLimit();
×
146
    if (loLimit == Double.NaN) {
×
147
      loLimit = getLowerWarningLimit();
×
148
    }
149

150
    return loLimit;
×
151
  }
152

153
  @Override
154
  public Double getUpperDisplayLimit() {
155
    Double hiLimit = getUpperAlarmLimit();
×
156
    if (hiLimit == Double.NaN) {
×
157
      hiLimit = getUpperWarningLimit();
×
158
    }
159

160
    return hiLimit;
×
161
  }
162

163
  @Override
164
  public Double getLowerCtrlLimit() {
165
    return Double.NaN;
×
166
  }
167

168
  @Override
169
  public Double getUpperCtrlLimit() {
170
    return Double.NaN;
×
171
  }
172

173
  @Override
174
  public String getUnits() {
175
    if (pval != null) {
×
176
      MissionDatabase mdb = YamcsPlugin.getMissionDatabase();
×
177
      if (mdb != null) {
×
178
        String unit = mdb.getCombinedUnit(pval.getId());
×
179
        return (unit == null) ? "" : unit;
×
180
      }
181
    }
182
    return "";
×
183
  }
184

185
  @Override
186
  public NumberFormat getFormat() {
187
    return NumberFormats.toStringFormat();
×
188
  }
189

190
  //  /** Converts a yamcs ParameterValue to a VType. */
191
  //  public static VType fromYamcs(ParameterValue pval, boolean raw) {
192
  //    Value value;
193
  //    if (raw) {
194
  //      if (!pval.hasRawValue()) {
195
  //        return null;
196
  //      }
197
  //      value = pval.getRawValue();
198
  //    } else {
199
  //      if (!pval.hasEngValue()) {
200
  //        return null;
201
  //      }
202
  //      value = pval.getEngValue();
203
  //    }
204
  //
205
  //    switch (value.getType()) {
206
  //      case UINT32:
207
  //        return new Uint32VType(pval, raw);
208
  //      case SINT32:
209
  //        return new Sint32VType(pval, raw);
210
  //      case UINT64:
211
  //        return new Uint64VType(pval, raw);
212
  //      case SINT64:
213
  //        return new Sint64VType(pval, raw);
214
  //      case FLOAT:
215
  //        return new FloatVType(pval, raw);
216
  //      case DOUBLE:
217
  //        return new DoubleVType(pval, raw);
218
  //      case BOOLEAN:
219
  //        return new BooleanVType(pval, raw);
220
  //      case STRING:
221
  //        return new StringVType(pval, raw);
222
  //      case BINARY:
223
  //        return new BinaryVType(pval, raw);
224
  //      case TIMESTAMP:
225
  //        return new TimestampVType(pval, raw);
226
  //      case ENUMERATED:
227
  //        return new EnumeratedVType(pval, raw);
228
  //      case AGGREGATE:
229
  //        return new AggregateVType(pval, raw);
230
  //      case ARRAY:
231
  //        List<Value> arrayValues = value.getArrayValueList();
232
  //        if (arrayValues.isEmpty()) {
233
  //          return null; // TODO
234
  //        } else {
235
  //          switch (arrayValues.get(0).getType()) {
236
  //            case UINT32:
237
  //              return new Uint32ArrayVType(pval, raw);
238
  //            case SINT32:
239
  //              return new Sint32ArrayVType(pval, raw);
240
  //            case UINT64:
241
  //              return new Uint64ArrayVType(pval, raw);
242
  //            case SINT64:
243
  //              return new Sint64ArrayVType(pval, raw);
244
  //            case FLOAT:
245
  //              return new FloatArrayVType(pval, raw);
246
  //            case DOUBLE:
247
  //              return new DoubleArrayVType(pval, raw);
248
  //            case BOOLEAN:
249
  //              return new BooleanArrayVType(pval, raw);
250
  //            case STRING:
251
  //              return new StringArrayVType(pval, raw);
252
  //            case ENUMERATED:
253
  //              return new EnumeratedArrayVType(pval, raw);
254
  //            case AGGREGATE:
255
  //              return new AggregateArrayVType(pval, raw);
256
  //            case ARRAY:
257
  //              return new ArrayArrayVType(pval, raw);
258
  //            default:
259
  //              throw new IllegalStateException(
260
  //                  "Unexpected type for parameter array value. Got: "
261
  //                      + arrayValues.get(0).getType());
262
  //          }
263
  //        }
264
  //      default:
265
  //        throw new IllegalStateException(
266
  //            "Unexpected type for parameter value. Got: " + value.getType());
267
  //    }
268
  //  }
269

270
  //  @Override
271
  //  public   Time getTime()
272
  //  {
273
  //          return Time.of(Instant.ofEpochSecond(
274
  //                                    pval.getGenerationTime().getSeconds(), pval.getGenerationTime().getNanos()));
275
  //
276
  //  }
277
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc