|
4 | 4 | */ |
5 | 5 | package org.epics.gpclient.datasource.ca.types; |
6 | 6 |
|
| 7 | +import org.epics.vtype.EnumDisplay; |
| 8 | +import org.epics.vtype.VEnumArray; |
7 | 9 | import org.epics.vtype.VFloat; |
8 | 10 | import org.epics.vtype.VInt; |
9 | 11 | import org.epics.vtype.VString; |
@@ -259,14 +261,28 @@ public VString createValue(DBR value, DBR metadata, CAConnectionPayload connPayl |
259 | 261 | } |
260 | 262 | }; |
261 | 263 |
|
262 | | -// // DBR_TIME_Enum -> VEnum |
263 | | -// final static CATypeAdapter DBREnumToVEnum = new CATypeAdapter(VEnum.class, DBR_TIME_Enum.TYPE, DBR_LABELS_Enum.TYPE, false) { |
264 | | -// |
265 | | -// @Override |
266 | | -// public VEnum createValue(DBR value, DBR metadata, CAConnectionPayload connPayload) { |
267 | | -// return new VEnumFromDbr((DBR_TIME_Enum) value, (DBR_LABELS_Enum) metadata, connPayload); |
268 | | -// } |
269 | | -// }; |
| 264 | + // DBR_TIME_Enum -> VEnum |
| 265 | + final static CATypeAdapter DBREnumToVEnum = new CATypeAdapter(VEnum.class, DBR_TIME_Enum.TYPE, DBR_LABELS_Enum.TYPE, false) { |
| 266 | + |
| 267 | + @Override |
| 268 | + public VEnum createValue(DBR value, DBR rawMetadata, CAConnectionPayload connPayload) { |
| 269 | + DBR_TIME_Enum message = (DBR_TIME_Enum)value; |
| 270 | + DBR_LABELS_Enum metadata = (DBR_LABELS_Enum)rawMetadata; |
| 271 | + Alarm alarm; |
| 272 | + if (!connPayload.isChannelConnected()) { |
| 273 | + alarm = Alarm.disconnected(); |
| 274 | + } else { |
| 275 | + alarm = CADataUtils.fromEpics(message.getSeverity()); |
| 276 | + } |
| 277 | + Time timestamp; |
| 278 | + if (!connPayload.isChannelConnected()) { |
| 279 | + timestamp = Time.of(connPayload.getEventTime()); |
| 280 | + } else { |
| 281 | + timestamp = CADataUtils.timestampOf(message.getTimeStamp()); |
| 282 | + } |
| 283 | + return VEnum.of(message.getEnumValue()[0], EnumDisplay.of(metadata.getLabels()), alarm, timestamp); |
| 284 | + } |
| 285 | + }; |
270 | 286 |
|
271 | 287 | // DBR_TIME_Float -> VFloatArray |
272 | 288 | final static CATypeAdapter DBRFloatToVFloatArray = new CATypeAdapter(VFloatArray.class, DBR_TIME_Float.TYPE, DBR_CTRL_Double.TYPE, true) { |
@@ -410,7 +426,7 @@ public VShortArray createValue(DBR value, DBR rawMetadata, CAConnectionPayload c |
410 | 426 | }; |
411 | 427 |
|
412 | 428 | // DBR_TIME_Int -> VIntArray |
413 | | - final static CATypeAdapter DBRIntToVIntArray = new CATypeAdapter(VIntArray.class, DBR_TIME_Int.TYPE, DBR_CTRL_Double.TYPE, true) { |
| 429 | + final static CATypeAdapter DBRIntToVIntArray = new CATypeAdapter(VIntArray.class, DBR_TIME_Int.TYPE, DBR_CTRL_Double.TYPE, true) { |
414 | 430 |
|
415 | 431 | @Override |
416 | 432 | public VIntArray createValue(DBR value, DBR rawMetadata, CAConnectionPayload connPayload) { |
@@ -443,7 +459,7 @@ public VIntArray createValue(DBR value, DBR rawMetadata, CAConnectionPayload con |
443 | 459 | }; |
444 | 460 |
|
445 | 461 | // DBR_TIME_String -> VString |
446 | | - final static CATypeAdapter DBRStringToVStringArray = new CATypeAdapter(VStringArray.class, DBR_TIME_String.TYPE, null, false) { |
| 462 | + final static CATypeAdapter DBRStringToVStringArray = new CATypeAdapter(VStringArray.class, DBR_TIME_String.TYPE, null, true) { |
447 | 463 |
|
448 | 464 | @Override |
449 | 465 | public VStringArray createValue(DBR rawMessage, DBR metadata, CAConnectionPayload connPayload) { |
@@ -476,7 +492,7 @@ public VStringArray createValue(DBR rawMessage, DBR metadata, CAConnectionPayloa |
476 | 492 | newFactories.add(DBRIntToVInt); |
477 | 493 | newFactories.add(DBRStringToVString); |
478 | 494 | newFactories.add(DBRByteToVString); |
479 | | -// newFactories.add(DBREnumToVEnum); |
| 495 | + newFactories.add(DBREnumToVEnum); |
480 | 496 |
|
481 | 497 | // Add all ARRAYs |
482 | 498 | newFactories.add(DBRFloatToVFloatArray); |
|
0 commit comments