Files
DP44/docs/ai/DataPRO/RibeyeCommands.md
2026-04-17 14:55:32 -04:00

357 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
source_files:
- DataPRO/RibeyeCommands/CommandBase.cs
- DataPRO/RibeyeCommands/CalibrationCommands.cs
- DataPRO/RibeyeCommands/InformationCommands.cs
- DataPRO/RibeyeCommands/CommandPacket.cs
- DataPRO/RibeyeCommands/ArmCommands.cs
generated_at: "2026-04-17T15:52:59.500502+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "eecaf47313af0712"
---
# Ribeye Commands Module Documentation
## 1. Purpose
This module implements a command/response protocol for communicating with "Ribeye" hardware devices (likely a data acquisition system or test equipment). It provides a class hierarchy for constructing, sending, and receiving command packets over a communication interface (`ICommunication`). The module handles serialization/deserialization of command packets, timeout management, and parsing of binary response data. It exists to abstract the low-level protocol details from higher-level application code, providing strongly-typed command classes for operations like arming triggers, querying device status, downloading test data, and retrieving calibration information.
---
## 2. Public Interface
### CommandBase (Abstract)
**Namespace:** `DTS.DASLib.Command.Ribeye`
Base class for all Ribeye commands. Inherits from `AbstractCommandBase`.
**Constructors:**
- `CommandBase(DTS.Common.Interface.DASFactory.ICommunication sock)` — Initializes with a communication socket and default timeout.
- `CommandBase(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)` — Initializes with a communication socket and custom timeout in milliseconds.
**Protected Properties:**
- `CommandPacket command { get; set; }` — The command packet to send.
- `CommandPacket response { get; set; }` — The response packet received.
**Public Methods:**
- `override void CommandToString(ref List<List<string>> lines)` — Serializes the command's original bytes to a string representation, filtering out `\n` and `\r` characters.
- `override void ResponseToString(ref List<List<string>> lines)` — Serializes the response's first 30 bytes to a string representation, or reports "Empty response!" if null.
**Protected Methods:**
- `override CommandPacketBase GetCommandPacket()` — Factory method returning a new `CommandPacket`.
- `override CommandPacketBase GetCommandPacket(byte[] buffer)` — Factory method returning a new `CommandPacket` initialized from bytes.
---
### CommandPacket
**Namespace:** `DTS.DASLib.Command.Ribeye`
Represents a serialized command/response packet. Inherits from `CommandPacketBase`.
**Nested Enum:**
```csharp
public enum CommandType {
Reserved = 0x00,
Arm = 0x01,
Attribute = 0x02,
Diagnostics = 0x03,
EventData = 0x04,
FirmwareUpdate = 0x05,
Information = 0x06,
QAandUtility = 0x07,
Realtime = 0x08
}
```
**Constructors:**
- `CommandPacket()` — Initializes with empty parameter array and `ShouldLog = true`.
- `CommandPacket(byte[] Bytes)` — Parses raw bytes into a packet, splitting on `#` delimiters.
**Public Fields:**
- `string[] Parameter` — Array of parameter strings.
**Public Properties:**
- `byte[] OriginalBytes` (inherited) — Raw bytes of the packet.
**Public Methods:**
- `override PacketState VerifyPacket(byte[] Bytes)` — Validates packet structure. Returns `PacketState.Unknown` if null or starts with `?`, `PacketState.TooShort` if less than 4 bytes or missing `\r\n` terminator, `PacketState.OK` otherwise.
- `override byte[] ToBytes()` — Serializes parameters to byte array with `#` delimiters, checksum, and `\r\n` terminator. Stores result in `OriginalBytes`.
- `override void ComputeCRCs()` — Computes the checksum for the packet.
- `override object ConvertByteToCommandType(byte b)` — Converts a byte to `CommandType` enum.
- `override void GetNextSequenceNumber()` — Thread-safe incrementing sequence number assignment.
**GetParameter Overloads:**
- `void GetParameter(int Position, out double Value)`
- `void GetParameter(int Position, out UInt64 Value)`
- `void GetParameter(int Position, out Int64 Value)`
- `void GetParameter(int Position, out Int32 Value)`
- `void GetParameter(int Position, out UInt32 Value)`
- `void GetParameter(int Position, out Int16 Value)`
- `void GetParameter(int Position, out UInt16 Value)`
- `void GetParameter(int Position, out float Value)`
- `void GetParameter(int Position, out string Value)`
**SetParameter Overloads:**
- `void SetParameter(int Position, double Value)`
- `void SetParameter(int Position, Int64 Value)`
- `void SetParameter(int Position, UInt64 Value)`
- `void SetParameter(int Position, Int32 Value)`
- `void SetParameter(int Position, UInt32 Value)`
- `void SetParameter(int Position, Int16 Value)`
- `void SetParameter(int Position, UInt16 Value)`
- `void SetParameter(int Position, float Value)`
- `void SetParameter(int Position, string Value)`
---
### DownloadPacket
**Namespace:** `DTS.DASLib.Command.Ribeye`
Extends `CommandPacket` for binary data downloads.
**Constructor:**
- `DownloadPacket(byte[] Bytes)` — Parses header parameters (delimited by `#`, terminated by `\n`) and extracts binary `Data` payload.
**Public Field:**
- `byte[] Data` — Binary payload following the header.
**Static Method:**
- `static PacketState VerifyPacket(byte[] Bytes, ref uint BytesExpected)` — Validates download packet, calculating expected byte count from header parameters (number of channels × samples × 2 bytes + checksums).
---
### DiagnosticsCommands (Abstract)
**Namespace:** `DTS.DASLib.Command.Ribeye`
Base class for diagnostic commands. Inherits from `CommandBase`.
**Protected Enum:**
```csharp
protected enum Commands {
Reserved = 0x00,
QueryCurrentPositions = 0x01
}
```
**Constructors:**
- `DiagnosticsCommands(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `DiagnosticsCommands(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
Both constructors set `command.Type = CommandPacket.CommandType.Diagnostics` and call `SetCommand` with the derived class's `_Command` value.
---
### QueryCurrentPositions
**Namespace:** `DTS.DASLib.Command.Ribeye`
Retrieves current position values from the device. Inherits from `DiagnosticsCommands`.
**Constructors:**
- `QueryCurrentPositions(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `QueryCurrentPositions(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
**Public Properties:**
- `int NumberOfChannels { get; }` — Number of position values returned.
- `float[] Positions { get; }` — Array of position values.
**Protected Method:**
- `override CommandReceiveAction WholePackage()` — Parses response parameters 1 (count) and 2 (comma-separated position string) into `_Positions` array.
---
### InformationCommands (Abstract)
**Namespace:** `DTS.DASLib.Command.Ribeye`
Base class for information query commands. Inherits from `CommandBase`.
**Protected Enum:**
```csharp
protected enum Commands {
Reserved = 0x00,
QueryNumberOfLEDs = 0x01,
QueryDataAvailable = 0x02,
QuerySerialNumber = 0x03
}
```
**Constructors:**
- `InformationCommands(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `InformationCommands(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
Both constructors set `command.Type = CommandPacket.CommandType.Information`.
---
### QuerySerialNumber
**Namespace:** `DTS.DASLib.Command.Ribeye`
Queries the device serial number. Inherits from `InformationCommands`.
**Constructors:**
- `QuerySerialNumber(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `QuerySerialNumber(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
**Public Property:**
- `string SerialNumber { get; }` — The retrieved serial number.
**Protected Method:**
- `override CommandReceiveAction WholePackage()` — Extracts serial number from response parameter 1.
---
### QueryNumberOfLEDs
**Namespace:** `DTS.DASLib.Command.Ribeye`
Queries the number of LEDs in the device. Inherits from `InformationCommands`.
**Constructors:**
- `QueryNumberOfLEDs(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `QueryNumberOfLEDs(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
**Public Property:**
- `uint NumberOfLEDs { get; }` — The number of LEDs.
**Public Method:**
- `override void ResponseToString(ref List<List<string>> lines)` — Appends formatted LED count to output.
**Protected Method:**
- `override CommandReceiveAction WholePackage()` — Extracts LED count from response parameter 1.
---
### QueryDataAvailable
**Namespace:** `DTS.DASLib.Command.Ribeye`
Queries available data timing information. Inherits from `InformationCommands`.
**Constructors:**
- `QueryDataAvailable(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `QueryDataAvailable(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
**Public Properties:**
- `float TotalMS { get; }` — Total milliseconds (`PreTriggerMS + PostTriggerMS`).
- `float PreTriggerMS { get; }` — Pre-trigger milliseconds (absolute value of negative value from device).
- `float PostTriggerMS { get; }` — Post-trigger milliseconds.
**Protected Method:**
- `override CommandReceiveAction WholePackage()` — Extracts timing values from response parameters 1 (pre-trigger, converted to absolute) and 2 (post-trigger).
---
### ArmCommands (Abstract)
**Namespace:** `DTS.DASLib.Command.Ribeye`
Base class for arm/trigger related commands. Inherits from `CommandBase`.
**Protected Enum:**
```csharp
protected enum Commands {
Reserved = 0x00,
Arm = 0x01,
Disarm = 0x02,
QueryArmAndTriggerStatus = 0x03,
PrepareForDataCollection = 0x04,
DownloadTestData = 0x05,
Trigger = 0x06
}
```
**Constructors:**
- `ArmCommands(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `ArmCommands(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
Both constructors set `command.Type = CommandPacket.CommandType.Arm`.
---
### Arm
**Namespace:** `DTS.DASLib.Command.Ribeye`
Arms the device for data collection. Inherits from `ArmCommands`.
**Constructors:**
- `Arm(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `Arm(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
**Public Properties (setters only):**
- `uint TStopMS { set; }` — Sets parameter 1 (stop time in ms).
- `uint TPostMS { set; }` — Sets parameter 2 (post-trigger time in ms).
---
### QueryArmAndTriggerStatus
**Namespace:** `DTS.DASLib.Command.Ribeye`
Queries the current arm/trigger status. Inherits from `ArmCommands`.
**Constructors:**
- `QueryArmAndTriggerStatus(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `QueryArmAndTriggerStatus(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
**Public Fields:**
- `bool IsArmed`
- `bool IsRecording`
- `bool IsTriggered`
**Protected Method:**
- `override CommandReceiveAction WholePackage()` — Parses status code from response parameter 1 and sets `IsArmed`, `IsRecording`, `IsTriggered` based on `StatusCodeEnum` (Idle=0, Armed=1, Busy=2, DataAvailable=3).
---
### Disarm
**Namespace:** `DTS.DASLib.Command.Ribeye`
Disarms the device. Inherits from `ArmCommands`.
**Constructors:**
- `Disarm(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `Disarm(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
---
### PrepareForDataCollection
**Namespace:** `DTS.DASLib.Command.Ribeye`
Prepares device for data collection (sends "ERASE" command). Inherits from `ArmCommands`.
**Constructors:**
- `PrepareForDataCollection(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `PrepareForDataCollection(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
---
### DownloadTestData
**Namespace:** `DTS.DASLib.Command.Ribeye`
Downloads binary test data from the device. Inherits from `ArmCommands`.
**Constructors:**
- `DownloadTestData(DTS.Common.Interface.DASFactory.ICommunication sock)`
- `DownloadTestData(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)`
**Public Properties:**
- `ushort[] Data { get; }` — Raw downloaded data.
- `uint NumberOfChannels { get; }` — Number of channels from response.
- `int StartTimeMS { set; }` — Sets parameter 1.
- `int StopTimeMS { set; }` — Sets parameter 2.
**Public Methods:**
- `void GetChannelData(int channel, out short[] signedADC)` — Extracts per-channel data from interleaved raw data.
**Protected Methods:**
- `override CommandReceiveAction ReceiveBlockOK(Common.Interface.Communication.ICommunicationReport report)` — Handles binary download packets using `DownloadPacket.VerifyPacket`.
- `override CommandReceiveAction WholePackage()` — Parses binary data from `DownloadPacket.Data` into `_Data` array.
- `override CommandReceiveAction WholePackagePost()` — Invokes user callback with `QueryEventDataReport`.
**Nested Class:**
- `QueryEventDataReport : ICommandReport` — Contains `Status`, `CallbackObject`, and `short[][] data`.
---
### Trigger
**Namespace:** `DTS.DASLib.Command.Ribeye`
Sends a trigger command. Inherits from `ArmCommands`.