Files
DP44/DataPRO/SLICECommands/.svn/pristine/ca/ca0a3db2486d654f02615e0b3637aa60d0c015df.svn-base
2026-04-17 14:55:32 -04:00

3306 lines
122 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Text;
using DTS.Common.Utilities;
using System.Net.NetworkInformation;
using DTS.Common.ICommunication;
using DTS.Common.Enums.DASFactory;
using DTS.Common.Utilities.Logging;
using DTS.Common.Interface.DASFactory;
namespace DTS.DASLib.Command.SLICE
{
public class Switches
{
public enum BaseSwitches : byte
{
PowerLedBlue = 0x01, // 1
PowerLedGreen, // 2
PowerLedRed, // 3
PowerLedBlink, // 4
StatusLedBlue, // 5
StatusLedGreen, // 6
StatusLedRed, // 7
StatusLedBlink, // 8
SLICEBusPower, // 9
TriggerOut, // 10
StartRecordOut, // 11
SDPowerEnable, // 12 : Now mapped to NAND device.
ForceStatus, // 13
StatusMonitor, // 14
ChargePower, // 15
BackupPower, // 16 obsolete for SLICE 2.0. Connection being repurposed for I2C smart battery.
ChargeStatus, // 17
OnOverride, // 18
PowerLedAll, // 19
StatusLedAll, // 20
SquibCh1Green, // 21
SquibCh1Yellow, // 22
SquibCh1Red, // 23
SquibCh2Green, // 24
SquibCh2Yellow, // 25
SquibCh2Red, // 26
SquibCh3Green, // 27
SquibCh3Yellow, // 28
SquibCh3Red, // 29
SquibCh4Green, // 30
SquibCh4Yellow, // 31
SquibCh4Red, // 32
SquibKillPower, // 33
SquibSelect_1, // 34 belong to squib PE address 0x27
SquibSelect_2, // 35
SquibSelect_3, // 36
SquibSelect_4, // 37
SquibSensorID_Mux0, // 38
SquibSensorID_Mux1, // 39
SquibAlarmEnable, // 40
SquibSafeArmSwitch, // 41 RO status from arm switch
//39259 "Quick" software trigger doesn't work with TSR AIR
TSRAIR_TriggerOut = 0xFD // 253 TSR AIR value for "quick" Trigger Check
};
public enum S6Switches : byte
{
PowerLedBlue = 0x01, // 1
PowerLedGreen, // 2
PowerLedRed, // 3
PowerLedBlink, // 4
StatusLedBlue, // 5
StatusLedGreen, // 6
StatusLedRed, // 7
StatusLedBlink, // 8
SLICEBusPower, // 9
TriggerOut, // 10
StartRecordOut, // 11
SDPowerEnable, // 12 : Now mapped to NAND device.
ForceStatus, // 13
StatusMonitor, // 14
ChargePower, // 15
BackupPower, // 16 obsolete for SLICE 2.0. Connection being repurposed for I2C smart battery.
ChargeStatus, // 17
OnOverride, // 18
PowerLedAll, // 19
StatusLedAll, // 20
SquibCh1Green, // 21
SquibCh1Yellow, // 22
SquibCh1Red, // 23
SquibCh2Green, // 24
SquibCh2Yellow, // 25
SquibCh2Red, // 26
SquibCh3Green, // 27
SquibCh3Yellow, // 28
SquibCh3Red, // 29
SquibCh4Green, // 30
SquibCh4Yellow, // 31
SquibCh4Red, // 32
SquibKillPower, // 33
SquibSelect_1, // 34 belong to squib PE address 0x27
SquibSelect_2, // 35
SquibSelect_3, // 36
SquibSelect_4, // 37
SquibSensorID_Mux0, // 38
SquibSensorID_Mux1, // 39
SquibAlarmEnable, // 40
SquibSafeArmSwitch // 41 RO status from arm switch
};
public enum S6DBSwitches : byte
{
PowerLedBlue = 0x01, // 1
PowerLedGreen = 2, // 2
PowerLedRed = 3, // 3
PowerLedBlink = 4, // 4
StatusLedBlue = 5, // 5
StatusLedGreen = 6, // 6
StatusLedRed = 7, // 7
StatusLedBlink = 8, // 8
AllPortPower = 9, // 9 = enable/disable all ports.
TriggerOut = 10, // 10 = event out
StartRecordOut = 11, // 11 = start out
SDPowerEnable = 12, // 12 xxxxxxxxxxxxxxx N/A
ForceStatus = 13, // 13 Force Ports Status
StatusMonitor = 14, // 14 led_up_status
ChargePower = 15, // 15 charger enable
BackupPower = 16, // 16 xxxxxxxxxxxxxxx N/A
ChargeStatus = 17, // 17 charger status
OnOverride = 18, // 18 /ON override
PowerLedAll = 19, // 19
StatusLedAll = 20, // 20
/* SquibCh1Green = 21, // 21 xxxxxxxxxxxxxxx N/A
SquibCh1Yellow = 22, // 22 xxxxxxxxxxxxxxx N/A
SquibCh1Red = 23, // 23 xxxxxxxxxxxxxxx N/A
SquibCh2Green = 24, // 24 xxxxxxxxxxxxxxx N/A
SquibCh2Yellow = 25, // 25 xxxxxxxxxxxxxxx N/A
SquibCh2Red = 26, // 26 xxxxxxxxxxxxxxx N/A
SquibCh3Green = 27, // 27 xxxxxxxxxxxxxxx N/A
SquibCh3Yellow = 28, // 28 xxxxxxxxxxxxxxx N/A
SquibCh3Red = 29, // 29 xxxxxxxxxxxxxxx N/A
SquibCh4Green = 30, // 30 xxxxxxxxxxxxxxx N/A
SquibCh4Yellow = 31, // 31 xxxxxxxxxxxxxxx N/A
SquibCh4Red = 32, // 32 xxxxxxxxxxxxxxx N/A
SquibKillPower = 33, // 33 xxxxxxxxxxxxxxx N/A
SquibSelect_1 = 35, // 34 xxxxxxxxxxxxxxx N/A
SquibSelect_2 = 35, // 35 xxxxxxxxxxxxxxx N/A
SquibSelect_3 = 36, // 36 xxxxxxxxxxxxxxx N/A
SquibSelect_4 = 37, // 37 xxxxxxxxxxxxxxx N/A
SquibSensorID_Mux0 = 38, // 38 xxxxxxxxxxxxxxx N/A
SquibSensorID_Mux1 = 39, // 39 xxxxxxxxxxxxxxx N/A
SquibAlarmEnable = 40, // 40 xxxxxxxxxxxxxxx N/A
SquibSafeArmSwitch = 41, // 41 xxxxxxxxxxxxxxx N/A
*/
Port1_nON_Enable = 42, // 42 S6DB downport 1 /ON enabe.
Port2_nON_Enable = 43, // 43 S6DB downport 1 /ON enabe.
Port3_nON_Enable = 44, // 44 S6DB downport 1 /ON enabe.
Port4_nON_Enable = 45, // 45 S6DB downport 1 /ON enabe.
Port1_Status_Line = 46, // 46 S6DB port 1 status line
Port2_Status_Line = 47, // 47 S6DB port 2 status line
Port3_Status_Line = 48, // 48 S6DB port 3 status line
Port4_Status_Line = 49, // 49 S6DB port 4 status line
Power_Hub_Status_Line = 50, // 50 S6DB HUB status line
Up_Event_Line = 51, // 51 S6DB HUB status line
Up_Start_Line = 52, // 52 S6DB HUB status line
Up_Status_Line = 53, // 53 S6DB HUB status line
Port1_PowerGood = 54, // S6DB
Port1_PowerEnable = 55, // S6DB
Port2_PowerGood = 56, // S6DB
Port2_PowerEnable = 57, // S6DB
Port3_PowerGood = 58, // S6DB
Port3_PowerEnable = 59, // S6DB
Port4_PowerGood = 60, // S6DB
Port4_PowerEnable = 61, // S6DB
Battery1_Enable = 62, // S6DB
Battery2_Enable = 63, // S6DB
Default_DasChain_Status = 64, // S6DB
Battery_Detect = 65, // S6DB
Event_Self = 66, // S6DB
ON_Hold = 67, // S6DB
Eth_Event_En = 68, // S6DB
Eth_Event_En_Sw = 69, // S6DB
Default_Hub_Status_Enable = 70, // S6DB revB only.
DAS_1_Trigger_Status = 71, // S6DB revB only.
DAS_2_Trigger_Status = 72, // S6DB revB only.
DAS_3_Trigger_Status = 73, // S6DB revB only.
DAS_4_Trigger_Status = 74, // S6DB revB only.
PE5_DAS_Trigger2MCU = 75, // S6DB revB only.
PE6_DAS_Trigger_UpStream = 76, // S6DB revB only.
PE7_EXT_Trigger_Polarity = 77, // S6DB revB only.
};
public enum PowerProSwitches : byte
{
PowerLedBlue = 1,
PowerLedGreen = 2,
PowerLedRed = 3,
PowerLedBlink = 4,
StatusLedBlue = 5,
StatusLedGreen = 6,
StatusLedRed = 7,
StatusLedBlink = 8,
//add back slice6 switch.
SLICEBusPower = 0x09, // 9
MCUSelfTrigger = 10, // 10
SelfStartRecord = 11, // 11
SDPower = 12, // 12 : Now mapped to NAND device.
ForceStatus = 13, // 13
StatusMonitor = 14, // 14
ChargePower = 15, // 15
BackupPower = 16, // 16 // obsolete for SLICE 2.0. Connection being repurposed for I2C smart battery.
ChargeStatus = 17, // 17
OnOverride = 18, // 18
PowerLedAll = 19, // 19
StatusLedAll = 20, // 20
//Power switch
AmpLedBlue = 21,//9,
AmpLedGreen = 22,//10,
AmpLedRed = 23,//11,
AmpLedBlink = 24,//12,
LemoLedBlue = 25,//13,
LemoLedGreen = 26,//14,
LemoLedRed = 27,//15,
LemoLedBlink = 28,//16,
WetLedBlue = 29,//17,
WetLedGreen = 30,//18,
WetLedRed = 31,//19,
WetLedBlink = 32,//20,
AmpLedAll = 33,//23,
LemoLedAll = 34,//24,
WetLedAll = 35,//25,
AmpInProt = 36,//26,
AmpInPS = 37,//27,
AmpOutDSBL = 38,//28,
AmpInFault = 39,//29,
AmpGoodPower = 40,//30,
AmpOutFault = 41,//31,
LemoInProt = 42,//32,
LemoInPS = 43,//33,
LemoOutDSBL = 44,//34,
LemoInFault = 45,//35,
LemoGoodPower = 46,//36,
LemoOutFault = 47,//37,
WetInProt = 48,//38,
WetInPS = 49,//39,
WetOutDSBL = 50,//40,
ChargerInFault = 51,//41,
ChargerGoodPower = 52,//42,
WetOutFault = 53,//43,
BatteryInProt = 54,//44,
BatteryInPS = 55,//45,
BatteryOutDSBL = 56,//46,
Battery_Enable = 57,//47,
Battery_Detect = 58,//48,
BatteryOutFault = 59,//49,
StartRecordOut = 63,//53,
TriggerOut = 64,//54,
OnMonitor = 65,//55,
StartMonitor = 67,//57,
EventMonitor = 68,//58,
Eth_Event_En = 69,//59,
Eth_Event_En_Sw = 70,//60,
Button_Enable = 71,//61,
nRST_PE = 72,//62,
nWR_EEPROM = 73,//63,
PG_3V3 = 74,//64,
PG_5V = 75,//65,
IN_PS_PRES = 76,//66,
nINT_FROM_PE = 77,//67,
};
public enum BridgeSwitches : byte
{
EnableEmulation = 0,
EmulationA,
EmulationB,
EmulationC,
EnableExcitation,
EnableAnalogPowerSupply,
EnableAmps,
EnableHalfBridgeCompletionA,
EnableHalfBridgeCompletionB,
EnableHalfBridgeCompletionC,
};
public enum BridgeSwitchesSlice6 : byte
{
S6A_A2_GSWC____S6_G_SW_A = 0, // bit 0
S6A_EN_AC_C____S6_G_SW_D = 1, // bit 1
S6A_EnDAC_N_C__S6_IA_EN = 2, // bit 2
S6A_EnDAC_P_C__S6_EXCITE_EN = 3, // bit 3
S6A_EN_HALF_C__S6_ANALOG_EN = 4, // bit 4
S6A_EN_IEPE_C__S6_SW_MUX_2 = 5, // bit 5
S6A_A1_GSWB____S6_SW_MUX_1 = 6, // bit 6
S6A_EN_AC_B____S6_SW_MUX_0 = 7, // bit 7
S6A_nCS_IA_A___S6_G_SW_E = 8, // bit 0/1
S6A_nCS_IA_B___S6_A2_G_SW_C = 9, // bit 1/1
S6A_nCS_IA_C___S6_A1_G_SW_F = 10, // bit 2/1
S6A_nCS_IA_D___S6_A0_G_SW_B = 11, // bit 3/1
S6A_nCS_IA_E___S6_nCS_IA_D = 12, // bit 4/1
S6A_nCS_IA_F___S6_nCS_IA_A = 13, // bit 5/1
S6A_EN_IEPE_A__S6_nCS_IA_E = 14, // bit 6/1
S6A_EN_HALF_A__S6_nCS_IA_C = 15, // bit 7/1
S6A_EnDAC_P_A__S6_nCS_IA_F = 16, // bit 0/1
S6A_EnDAC_N_A__S6_nCS_IA_B = 17, // bit 1/1
S6A_EN_AC_A____S6_HALF_BRIDGE_B = 18, // bit 2/1
S6A_A0_GSWA____S6_HALF_BRIDGE_F = 19, // bit 3/1
S6A_EN_IEPE_B__S6_HALF_BRIDGE_C = 20, // bit 4/1
S6A_EN_HALF_B__S6_HALF_BRIDGE_E = 21, // bit 5/1
S6A_EnDAC_P_B__S6_HALF_BRIDGE_A = 22, // bit 6/1
S6A_EnDAC_N_B__S6_HALF_BRIDGE_D = 23, // bit 7/1
// 2nd PE switches
S6A_PE2_TP504 = 0 + 24, // bit 0
S6A_PE2_EN_EXCITATION = 1 + 24, // bit 1
S6A_PE2_nSHDN_AD8231 = 2 + 24, // bit 2
S6A_PE2_MUX_A = 3 + 24, // bit 3
S6A_PE2_MUX_B = 4 + 24, // bit 4
S6A_PE2_MUX_C = 5 + 24, // bit 5
S6A_PE2_GSWF = 6 + 24, // bit 6
S6A_PE2_EN_AC_F = 7 + 24, // bit 7
S6A_PE2_EN_IEPE_D = 8 + 24, // bit 0/1
S6A_PE2_EN_HALF_D = 9 + 24, // bit 1/1
S6A_PE2_EnDAC_P_D = 10 + 24, // bit 2/1
S6A_PE2_EnDAC_N_D = 11 + 24, // bit 3/1
S6A_PE2_EN_AC_D = 12 + 24, // bit 4/1
S6A_PE2_GSWD = 13 + 24, // bit 5/1
S6A_PE2_EN_IEPE_E = 14 + 24, // bit 6/1
S6A_PE2_EN_HALF_E = 15 + 24, // bit 7/1
S6A_PE2_EnDAC_P_E = 16 + 24, // bit 0/1
S6A_PE2_EnDAC_N_E = 17 + 24, // bit 1/1
S6A_PE2_EN_AC_E = 18 + 24, // bit 2/1
S6A_PE2_GSWE = 19 + 24, // bit 3/1
S6A_PE2_EN_IEPE_F = 20 + 24, // bit 4/1
S6A_PE2_EN_HALF_F = 21 + 24, // bit 5/1
S6A_PE2_EnDAC_P_F = 22 + 24, // bit 6/1
S6A_PE2_EnDAC_N_F = 23 + 24, // bit 7/1
// Base 368 switches.
S6A_BASE_UART_TX_EN = 0 + 48, // bit 0
S6A_BASE_UART_RX_nEN = 1 + 48, // bit 1
S6A_BASE_IRIG_B_EN = 9 + 48, // bit 9
S6A_BASE_nRST_ETH = 10 + 48, // bit 10
S6A_BASE_nRST_FPGA = 11 + 48, // bit 11
S6A_BASE_EN_24P5VA = 12 + 48, // bit 12
S6A_BASE_EN_AN_PWR = 13 + 48, // bit 13
S6A_BASE_FILT_SHDN = 14 + 48, // bit 14
S6A_BASE_EN_AN = 15 + 48, // bit 15 analog 5.1V and 3.3V on analog board.
S6A_BASE_EN_CLASS1 = 16 + 48, // bit 16
S6A_BASE_nEN_MUX = 17 + 48, // bit 17
/*
S6_P0_G_SW_A = 0, // SW_MUX_0 GPIO0 mux address 0
S6_P1_G_SW_D = 1, // SW_MUX_1 GPIO1 mux address 1
S6_P2_IA_EN = 2, // SW_MUX_2 2 mux address 1
S6_P3_EXCITE_EN = 3, // 3 ANALOG_EN enable excitation.
S6_P4_ANALOG_EN = 4, // 4 EXCITE_EN enable analog on bridges.
S6_P5_SW_MUX_2 = 5, // 5 IA_EN enable the amplifier AD8231ACPZ
S6_P6_SW_MUX_1 = 6, // 6 G_SW_F gain switch for channel F
S6_P7_SW_MUX_0 = 7, // 7 G_SW_E gain switch for channel E
S6_P8_G_SW_E = 8, // 8 gain switch for channel D
S6_P9_A2_G_SW_C = 9, // 9 gain switch for channel C and A2 multiplex
S6_P10_A1_G_SW_F = 10, // 10 gain switch for channel B and A1 multiplex
S6_P11_A0_G_SW_B = 11, // 11 gain switch for channel A and A0 multiplex
S6_P12_nCS_IA_D = 12, // 12 cs to program gain for channel F
S6_P13_nCS_IA_A = 13, // 13 cs to program gain for channel E
S6_P14_nCS_IA_E = 14, // 14 cs to program gain for channel D
S6_P15_nCS_IA_C = 15, // 15 cs to program gain for channel C
S6_P16_nCS_IA_F = 16, // 16 cs to program gain for channel B
S6_P17_nCS_IA_B = 17, // 17 cs to program gain for channel A
// Continue from analog switches.
S6_S1_HALF_BRIDGE_B = 18, // 0
S6_S2_HALF_BRIDGE_F = 19, // 1
S6_S3_HALF_BRIDGE_C = 20, // 2
S6_S4_HALF_BRIDGE_E = 21, // 3
S6_S5_HALF_BRIDGE_A = 22, // 4
S6_S6_HALF_BRIDGE_D = 23, // 5
*/
};
public enum BridgeSwitches_SLICE2 : byte
{
swEnableEmulation = 0, // 0 : High active. 1 = enabled. 0 = disabled.
swEmulationA, // 1 : Low active. 0 = enabled. 1 = disabled.
swEmulationB, // 2 : Low active. 0 = enabled. 1 = disabled.
swEmulationC, // 3 : Low active. 0 = enabled. 1 = disabled.
swExcitation, // 4 : High active. 1 = enabled. 0 = disabled.
swAnalogPowerSupply_MSP, // 5 : High active. 1 = enabled. 0 = disabled.
swEnIAA, // 6 : High active. 1 = enabled IEPE type. 0 = disabled.
swEnHalfA, // 7 : High active. 1 = enabled. 0 = disabled.
swEnHalfB, // 8 : High active. 1 = enabled. 0 = disabled.
swEnHalfC, // 9 : High active. 1 = enabled. 0 = disabled.
swFilterSelHBW_MSP, // 10 : High active. 1 = enabled. 0 = disabled.
swFilterSelLBW_MSP, // 11 : High active. 1 = enabled. 0 = disabled.
swEnIAB, // 12 : High active. 1 = enabled IEPE type. 0 = disabled == BRIDGE.
swEnClass, // 13 : High active. 1 = enabled. 0 = disabled.
swEnIAC, // 14 : High active. 1 = enabled IEPE type. 0 = disabled.
// these belongs to PE1
swVoltageInsertionA, // 15 : High active. 1 = enabled. 0 = disabled.
swVoltageInsertionB, // 16 : High active. 1 = enabled. 0 = disabled.
swVoltageInsertionC, // 17 : High active. 1 = enabled. 0 = disabled.
swVoltageInsertionMode, // 18 : High active. 1 = enabled. 0 = disabled.
swVoltageInsertionAmp, // 19 : Low active. 0 = enabled. 1 = disabled.
// IEPE switches
swIS_CalibrationA, // 20 : High active. 1 = enabled. 0 = disabled. EN_CALA,
swIS_CalibrationB, // 21 : High active. 1 = enabled. 0 = disabled. EN_CALB,
swIS_CalibrationC, // 22 : High active. 1 = enabled. 0 = disabled. EN_CALC,
swIS_EnableAnalogPowerSupply_MSP, // 23 : High active. 1 = enabled. 0 = disabled.EN_ANALOG_PWR
swIS_Enable24Volt, // 24 : High active. 1 = enabled. 0 = disabled.EN_24V
swIS_EnableACcouplerA, // 25 : High active. 1 = enabled. 0 = disabled.BS_EnableHalfBridgeA,
swIS_EnableACcouplerB, // 26 : High active. 1 = enabled. 0 = disabled.BS_EnableHalfBridgeB,
swIS_EnableACcouplerC, // 27 : High active. 1 = enabled. 0 = disabled.BS_EnableHalfBridgeC
// IEPE: Mapping VInsert in same order with bridge.
swIS_EnGainAmpAll, // 28 N/A 2nd stage gain amplifier.
swIS_EnIAA, // 29 : Low active. 0 = enabled. 1 = disabled. input A buffer enabled.
swIS_FilterSelHBW_MSP, // 30 : High active. 1 = enabled. 0 = disabled.(not used in IEPE, but for debug purpose.)
swIS_FilterSelLBW_MSP, // 31 : High active. 1 = enabled. 0 = disabled.new in v2.0
swIS_EnIAB, // 32 : Low active. 0 = enabled. 1 = disabled. input B buffer enabled.
swIS_EnClass, // 33 : High active. 1 = enabled. 0 = disabled.Class Enable (for TEDS ID detect)
swIS_EnIAC, // 34 : Low active. 0 = enabled. 1 = disabled. input C buffer enabled.
// these belongs to PE1
swIS_VoltageInsertionA, // 35 : High active. 1 = enabled. 0 = disabled.
swIS_VoltageInsertionB, // 36 : High active. 1 = enabled. 0 = disabled.
swIS_VoltageInsertionC, // 37 : High active. 1 = enabled. 0 = disabled.
swIS_VoltageInsertionMode, // 38 : High active. 1 = enabled. 0 = disabled.
swIS_VoltageInsertionAmp, // 39 : Low active. 0 = enabled. 1 = disabled
// added to support IEPE/
swIS_EnGainIAmp_A, // 40 : High active. 1 = enabled IEPE Input. 0 = disabled.
swIS_EnGainIAmp_B, // 41 : High active. 1 = enabled IEPE Input. 0 = disabled.
swIS_EnGainIAmp_C, // 42 : High active. 1 = enabled IEPE Input. 0 = disabled.
// add for RevC bridge type.
swEnPosExcite_A, // 43 only for 2V and 5V
swEnPosExcite_B, // 44
swEnPosExcite_C, // 45
swEnQB_A, // 46
swEnQB_B, // 47
swEnQB_C, // 48
swAll_SignalsShorted, // 49 common to both IEPE/Bridge
swAll_ReferenceShorted, // 50 connect signal to reference 2.5V.
swEn10VoltExcite_A, // 51 separate 10V excitation because it needs
swEn10VoltExcite_B, // 52 to follow a strict timing sequence to turn on
swEn10VoltExcite_C, // 53 EX+ and EX-
PE0_P00, // 0- 15
PE0_P01, // 1- 16
PE0_P02, // 2- 17
PE0_P03, // 3- 18
PE0_P04, // 4- 19
PE0_P05, // 5- 20
PE0_P06, // 6- 21
PE0_P07, // 7- 22
PE0_P10, // 8- 23
PE0_P11, // 9- 24
PE0_P12, // 10- 25
PE0_P13, // 11- 26
PE0_P14, // 12- 27
PE0_P15, // 13- 28
PE0_P16, // 14- 29
PE0_P17, // 15- 30
PE0_P20, // 16- 31
PE0_P21, // 17- 32
PE0_P22, // 18- 33
PE0_P23, // 19- 34
PE0_P24, // 20- 35
PE0_P25, // 21- 36
PE0_P26, // 22- 37
PE0_P27, // 23- 38
PE1_P00, // 0- 39
PE1_P01, // 1- 40
PE1_P02, // 2- 41
PE1_P03, // 3- 42
PE1_P04, // 4- 43
PE1_P05, // 5- 44
PE1_P06, // 6- 45
PE1_P07, // 7- 46
PE1_P10, // 8- 47
PE1_P11, // 9- 48
PE1_P12, // 10- 49
PE1_P13, // 11- 50
PE1_P14, // 12- 51
PE1_P15, // 13- 52
PE1_P16, // 14- 53
PE1_P17, // 15- 54
PE1_P20, // 16- 55 =>>>>>>>>>>>>>>>>>>>>>>>>>>
PE1_P21, // 17- 56 =>> Only available in RevC
PE1_P22, // 18- 57 =>> Only available in RevC
PE1_P23, // 19- 58 =>> Only available in RevC
PE1_P24, // 20- 59 =>> Only available in RevC
PE1_P25, // 21- 60 =>> Only available in RevC
PE1_P26, // 22- 61 =>> Only available in RevC
PE1_P27, // 23- 62 =>>>>>>>>>>>>>>>>>>>>>>>>>>
DBG_swMax
};
public enum BridgeSwitchesSlice6ABR : byte
{
S6BR_SIGN_ALL = 0, // bit 0
S6BR_GAINF = 1, // bit 1
S6BR_SIGPF_DAC = 2, // bit 2
S6BR_GAINE = 3, // bit 3
S6BR_SIGPE_DAC = 4, // bit 4
S6BR_GAIND = 5, // bit 5
S6BR_SIGPD_DAC = 6, // bit 6
S6BR_GAINC = 7, // bit 7
S6BR_EN_EX = 8, // bit 0/1
S6BR_A0_GC = 9, // bit 1/1
S6BR_A1_GC = 10, // bit 2/1
S6BR_A2_GC = 11, // bit 3/1
S6BR_nCS_IA_A = 12, // bit 4/1
S6BR_nCS_IA_B = 13, // bit 5/1
S6BR_nCS_IA_C = 14, // bit 6/1
S6BR_nCS_IA_D = 15, // bit 7/1
S6BR_nCS_IA_E = 16, // bit 0/1
S6BR_nCS_IA_F = 17, // bit 1/1
S6BR_nSHDN = 18, // bit 2/1
S6BR_SIGPA_DAC = 19, // bit 3/1
S6BR_GAINA = 20, // bit 4/1
S6BR_SIGPB_DAC = 21, // bit 5/1
S6BR_GAINB = 22, // bit 6/1
S6BR_SIGPC_DAC = 23, // bit 7/1
};
public enum BridgeSwitches_TOM : byte
{
DS_Squib_Arm1 = 0, // 0 : High active. 1 = enabled. 0 = disabled.
DS_Squib_Arm2, // 1 : High active. 1 = enabled. 0 = disabled.
DS_Squib_Arm3, // 2 : High active. 1 = enabled. 0 = disabled.
DS_Squib_Arm4, // 3 : High active. 1 = enabled. 0 = disabled.
DS_Squib1_ConstCur, // 4 : 1 = select constant current mode. 0 = cap discharge.
DS_Squib2_ConstCur, // 5 : 1 = select constant current mode. 0 = cap discharge.
DS_Squib3_ConstCur, // 6 : 1 = select constant current mode. 0 = cap discharge.
DS_Squib4_ConstCur, // 7 : 1 = select constant current mode. 0 = cap discharge.
DS_RecordFire1, // 8 : High active. 1 = enabled. 0 = disabled.
DS_RecordFire2, // 9 : High active. 1 = enabled. 0 = disabled.
DS_RecordFire3, // 10 : High active. 1 = enabled. 0 = disabled.
DS_RecordFire4, // 11 : High active. 1 = enabled. 0 = disabled.
DS_EnableHwFilter, // 12 : High active. 1 = enabled UseSCF. 0 = disable.
// ===============================================
// from second PE addr 0x21: 5 reserve [10.11.12.13.14]
DS_D1_OCPU_Mode, // 13 : 1 = Contact closure. 0=Logic 5V/0V digital output 1
DS_D2_OCPU_Mode, // 14 : 1 = Contact closure. 0=Logic 5V/0V digital output 1
DS_D3_OCPU_Mode, // 15 : 1 = Contact closure. 0=Logic 5V/0V digital output 1
DS_D4_OCPU_Mode, // 16 : 1 = Contact closure. 0=Logic 5V/0V digital output 1
DS_D5_OCPU_Mode, // 17 : 1 = Contact closure. 0=Logic 5V/0V digital output 1
DS_D6_OCPU_Mode, // 18 : 1 = Contact closure. 0=Logic 5V/0V digital output 1
DS_D7_OCPU_Mode, // 19 : 1 = Contact closure. 0=Logic 5V/0V digital output 1
DS_D8_OCPU_Mode, // 20 : 1 = Contact closure. 0=Logic 5V/0V digital output 1
DS_Digital_PwrEn1234, // 21
DS_Digital_PwrEn5678, // 22
DS_SquibCharge_17p_Enable, // 23
// here is the add-on to switch the port extender pin.
PE0_P00, // 0- 24
PE0_P01, // 1- 25
PE0_P02, // 2- 26
PE0_P03, // 3- 27
PE0_P04, // 4- 28
PE0_P05, // 5- 29
PE0_P06, // 6- 30
PE0_P07, // 7- 31
PE0_P10, // 8- 32
PE0_P11, // 9- 33
PE0_P12, // 10- 34
PE0_P13, // 11- 35
PE0_P14, // 12- 36
PE0_P15, // 13- 37
PE0_P16, // 14- 38
PE0_P17, // 15- 39
PE1_P00, // 0- 40
PE1_P01, // 1- 41
PE1_P02, // 2- 42
PE1_P03, // 3- 43
PE1_P04, // 4- 44
PE1_P05, // 5- 45
PE1_P06, // 6- 46
PE1_P07, // 7- 47
PE1_P10, // 8- 48
PE1_P11, // 9- 49
PE1_P12, // 10- 50
PE1_P13, // 11- 51
PE1_P14, // 12- 52
PE1_P15, // 13- 53
PE1_P16, // 14- 54
PE1_P17, // 15- 55
DBG_swMax
};
public enum EIPESwitches : byte
{
IS_CalibrationA = 0, // EN_CALA,
IS_CalibrationB, // EN_CALB,
IS_CalibrationC, // EN_CALC,
IS_EnableAnalogPowerSupply, // EN_ANALOG_PWR
IS_Enable24Volt, // EN_24V
IS_EnableACcouplerA, // BS_EnableHalfBridgeA,
IS_EnableACcouplerB, // BS_EnableHalfBridgeB,
IS_EnableACcouplerC // BS_EnableHalfBridgeC
}
public enum EIPEDACs : byte
{
IS_DACOffsetA = 0,
IS_DACOffsetB,
IS_DACOffsetC,
IS_DACCalibrationCoarse
}
public enum SystemSwitches_425B //TSR AIR
{
GPIO__3P3VD_ENABLE,
GPIO__50_MHZ_OSC_ENABLE,
GPIO__FPGA_POWER,
GPIO__FPGA_RESET,
GPIO__GPS_POWER,
GPIO__MCU_EVENT, //For doing Quick Trigger
GPIO__MCU_START,
GPIO__MCU_STATUS,
GPIO__MEM_POWER,
GPIO__PE_RESET,
GPIO__SENSOR_POWER,
GPIO__KILL_POWER,
GPIO__TP400,
PE_8__PWR_LED_BLUE,
PE_8__PWR_LED_GREEN,
PE_8__PWR_LED_RED,
PE_8__STS_LED_BLUE,
PE_8__STS_LED_GREEN,
PE_8__STS_LED_RED,
PE_8__ETH_RESET,
PE_8__HEATER_POWER,
FPGA_PPS_DIR,
}
}
public class DACs
{
public enum BridgeDACs : byte
{
OffsetA = 0x00,
OffsetB = 0x01,
OffsetC = 0x02,
CoarseShunt = 0x03,
FineShunt = 0x04,
NotUseDAC = 5,
VInsertA = 6, // for slice6A
VInsertB = 7,
VInsertC = 8,
VInsertD = 9,
VInsertE = 10,
VInsertF = 11,
}
public enum IEPEDACs : byte
{
OffsetA = 0x00,
OffsetB = 0x01,
OffsetC = 0x02,
CoarseShunt = 0x03
}
public enum BridgeDACS_SLICE2 : byte
{
OffsetA = 0x00,
OffsetB = 0x01,
OffsetC = 0x02,
CoarseShunt = 0x03,
FineShunt = 0x04,
ExcitationA = 0x05,
ExcitationB = 0x06,
ExcitationC = 0x07,
}
}
public abstract class QAandUtilityCommands : CommandBase
{
protected enum Commands
{
Reserved = 0x00,
QuerySwitchImmediate = 0x01,
SetSwitchImmediate = 0x02,
QueryDACImmediate = 0x03,
SetDACImmediate = 0x04,
QueryGainImmediate = 0x05,
SetGainImmediate = 0x06,
QueryAAFilterImmediate = 0x07,
SetAAFilterImmediate = 0x08,
ReadArbitraryFlash = 0x09,
WriteArbitraryFlash = 0x0A,
SelfTestFlash = 0x0B,
QueryTime = 0x0C,
SetTime = 0x0D,
RestartSDCard = 0x0E,
QueryEventPhysicalStartAddress = 0x0F,
SetEventPhysicalStartAddress = 0x10,
TestCommunication = 0x11,
QueryLastError = 0x12,
SetSmartBatteryConfig = 0x13,
QuerySmartBatteryConfig = 0x14,
SetStackLowPowerMode = 0x15,
SetTiltSensorRange = 0x16,
QueryTiltSensorRange = 0x17,
QueryTiltSensorData = 0x18,
QueryTiltSensorSensitivity = 0x19,
QueryEthernetMacTable = 0x1A,
TestEthernetCable = 0x1B,
MeasureEventDelay = 0x1C,
MeasureStartDelay = 0x1D,
SetSwitchTestMode = 0x1E,
QuerySwitchTestMode = 0x1F,
QueryMacIpTable = 0x20,
TiltSensorSet = 0x21,
TiltSensorGet = 0x22,
};
protected abstract Commands _Command { get; }
protected QAandUtilityCommands(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Type = CommandPacket.CommandType.QAandUtility;
command.SetCommand((byte)_Command, _Command.ToString());
}
protected QAandUtilityCommands(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Type = CommandPacket.CommandType.QAandUtility;
command.SetCommand((byte)_Command, _Command.ToString());
}
}
public class QuerySwitchImmediate : QAandUtilityCommands
{
protected override Commands _Command => Commands.QuerySwitchImmediate;
private byte _setting = 0;
private byte _Switch = 0;
public byte Switch
{
get => _Switch;
set
{
_Switch = value;
command.SetParameter(0, value);
}
}
public byte Setting => _setting;
public string SwitchText { private get; set; }
public QuerySwitchImmediate(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[1];
}
public QuerySwitchImmediate(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[1];
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _setting);
}
else
{
_setting = 0;
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Switch: {_Switch}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
string s = SwitchText;
if (string.IsNullOrWhiteSpace(s))
{
s = _Switch.ToString();
}
lines.Add(new List<string>() { $"DeviceID: {DeviceID}, Switch{s}, Setting: {Setting}" });
}
}
public class SetSwitchImmediate : QAandUtilityCommands
{
protected override Commands _Command => Commands.SetSwitchImmediate;
private byte _Switch;
private byte _Setting;
private byte _Port;
private byte _Pin;
public byte Switch
{
get => _Switch;
set
{
_Switch = value;
command.SetParameter(0, value);
}
}
public string SwitchText { private get; set; }
public byte Setting { set { _Setting = value; command.SetParameter(1, value); } }
public byte Port
{
get => _Port;
set
{
_Port = value;
command.SetParameter(2, value);
}
}
public byte Pin
{
get => _Pin;
set
{
_Pin = value;
command.SetParameter(3, value);
}
}
public SetSwitchImmediate(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[4];
}
public SetSwitchImmediate(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[4];
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
var s = SwitchText;
if (string.IsNullOrWhiteSpace(s))
{
s = _Switch.ToString();
}
lines.Add(new List<string>() { $"DeviceID: {DeviceID}, Switch: {s}, Setting: {_Setting}, Port: {_Port}, Pin: {_Pin}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
}
}
public class QueryDACImmediate : QAandUtilityCommands
{
protected override Commands _Command => Commands.QueryDACImmediate;
const int DACPosition = 0;
const int ValuePosition = 1;
const int CommandParameterLength = 1;
private byte _dac = 0;
private ushort _value = 0;
public byte DAC
{
get => _dac;
set { _dac = value; command.SetParameter(DACPosition, _dac); }
}
public ushort Value => _value;
public QueryDACImmediate(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[CommandParameterLength];
}
public QueryDACImmediate(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[CommandParameterLength];
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(ValuePosition, out _value);
}
else
{
_value = 0;
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Address: {DeviceID}, DAC: {DAC}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>() { $"Value: {Value}" });
}
}
public class SetDACImmediate : QAandUtilityCommands
{
protected override Commands _Command => Commands.SetDACImmediate;
const int DACPosition = 0;
const int ValuePosition = 1;
const int CommandParameterLength = 3;
private byte _dac = 0;
private ushort _value = 0;
public byte DAC
{
get => _dac;
set { _dac = value; command.SetParameter(DACPosition, _dac); }
}
public ushort Value
{
get => _value;
set { _value = value; command.SetParameter(ValuePosition, _value); }
}
public SetDACImmediate(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[CommandParameterLength];
}
public SetDACImmediate(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[CommandParameterLength];
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Address: {DeviceID}, DAC: {DAC}, Value: {Value}" });
}
}
public class QueryGainImmediate : QAandUtilityCommands
{
protected override Commands _Command => Commands.QueryGainImmediate;
private byte _channel;
private byte _gainstep;
public byte Channel
{
get => _channel;
set
{
_channel = value;
command.SetParameter(0, value);
}
}
public byte GainStep { get { return _gainstep; } }
public QueryGainImmediate(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[1];
}
public QueryGainImmediate(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[1];
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _gainstep);
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Address: {DeviceID}, Channel: {Channel}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>() { $"GainStep: {GainStep}" });
}
}
public class SetGainImmediate : QAandUtilityCommands
{
protected override Commands _Command => Commands.SetGainImmediate;
private byte _Channel;
private byte _GainStep;
public byte Channel { set { _Channel = value; command.SetParameter(0, value); } }
public byte GainStep { set { _GainStep = value; command.SetParameter(1, value); } }
public SetGainImmediate(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[2];
}
public SetGainImmediate(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[2];
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Address: {DeviceID}, Channel: {_Channel}, GainStep: {_GainStep}" });
}
}
public class QueryAAFilterImmediate : QAandUtilityCommands
{
protected override Commands _Command => Commands.QueryAAFilterImmediate;
private float _frequency;
public float FrequencyHz => _frequency;
public QueryAAFilterImmediate(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
}
public QueryAAFilterImmediate(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _frequency);
}
else
{
_frequency = 0.0f;
}
return CommandReceiveAction.StopReceiving;
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>() { $"Cutoff Frequency Hz: {FrequencyHz}" });
}
}
public class SetAAFilterImmediate : QAandUtilityCommands
{
protected override Commands _Command => Commands.SetAAFilterImmediate;
private float _frequency;
public float FrequencyHz
{
get => _frequency;
set { _frequency = value; command.SetParameter(0, _frequency); }
}
public SetAAFilterImmediate(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[sizeof(float)];
}
public SetAAFilterImmediate(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[sizeof(float)];
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _frequency);
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Cutoff Frequency Hz: {FrequencyHz}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>() { $"Cutoff Frequency Hz: {ResponseStatus}" });
}
}
public class ReadArbitraryFlash : QAandUtilityCommands
{
protected override Commands _Command => Commands.ReadArbitraryFlash;
const int WhichCardPosition = 0;
const int AddressPosition = 1;
const int LengthPosition = 9;
const int CommandParameterLength = 13;
private byte _whichCard;
public byte[] Data { get; private set; }
public bool CardA
{
get => _whichCard == 0;
set { _whichCard = value ? (byte)0 : (byte)1; command.SetParameter(WhichCardPosition, _whichCard); }
}
public uint Length
{
get { if (null == Data) return 0; return (uint)Data.Length; }
set
{
Data = new byte[value];
command.SetParameter(LengthPosition, Data.Length);
}
}
private ulong _address;
public ulong Address
{
get { return _address; }
set
{
_address = value;
command.SetParameter(AddressPosition, _address);
}
}
public ReadArbitraryFlash(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[CommandParameterLength];
Data = null;
Address = 0;
CardA = true;
}
public ReadArbitraryFlash(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[CommandParameterLength];
Data = null;
Address = 0;
CardA = true;
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(LengthPosition, out uint resultLength);
var resultData = new byte[resultLength];
for (var i = 0; i < resultLength; i++)
{
resultData[i] = response.Parameter[CommandParameterLength + i];
}
Length = resultLength;
Data = resultData;
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Address: {Address}, Length: {Length}, Card: {(CardA ? "A" : "B")}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>() { $"Length: {Length}" });
}
}
public class WriteArbitraryFlash : QAandUtilityCommands
{
protected override Commands _Command => Commands.WriteArbitraryFlash;
private byte[] _data;
public byte[] Data
{
get => _data;
set
{
byte[] newParameter = null == value ? (new byte[12]) : (new byte[value.Length + 12]);
command.Parameter.CopyTo(newParameter, 0);
command.Parameter = newParameter;
_data = value;
if (null != _data)
{
command.SetParameter(8, _data.Length);
command.SetParameter(12, _data);
}
}
}
public uint Length => null == _data ? 0 : (uint)_data.Length;
private ulong _address;
public ulong Address
{
get => _address;
set
{
_address = value;
command.SetParameter(0, _address);
}
}
public WriteArbitraryFlash(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
Data = null;
Address = 0;
command.Parameter = new byte[12];
}
public WriteArbitraryFlash(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
Data = null;
Address = 0;
command.Parameter = new byte[12];
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Address: {Address}, Length: {Length}" });
}
}
public class SelfTestFlash : QAandUtilityCommands
{
protected override Commands _Command => Commands.SelfTestFlash;
const uint DefaultBlocksToTest = 20000u;
const byte DefaultTestType = 0;
const uint DefaultBlocksPerMBW = 1024u;
//=====================================
const uint DefaultPreErase = 81920;
const ushort DefaultAU_WriteSize = 8192;
const ushort DefaultAU_PreErase = 8192;
const ushort DefaultMagicBlocks = 8192;
const ushort DefaultEventSkipBlocks = 1024;
const uint DefaultLongDelay = 100000;
//=====================================
const byte DefaultFirstDualErase = 1;
const byte DefaultDualPreEraseGarbageWrite = 1;
const byte DefaultSecondDualErase = 1;
const byte DefaultPreEraseGarbageWriteA = 1;
const byte DefaultPreEraseGarbageWriteB = 0;
const byte DefaultPreWritePreErase = 1;
const byte DefaultDoFlashClear = 1;
const byte DefaultWriteTillDelay = 0;
private byte _testtype;
public byte TestType
{
get => _testtype;
set { _testtype = value; command.SetParameter(0, _testtype); }
}
private uint _blocks;
public uint BlocksToTest
{
get => _blocks;
set { _blocks = value; command.SetParameter(1, _blocks); }
}
private uint _blocksPerMBW;
public uint BlocksPerMBW
{
get => _blocksPerMBW;
set { _blocksPerMBW = value; command.SetParameter(5, _blocksPerMBW); }
}
//=========================================================================
private uint _preErase;
public uint PreErase
{
get => _preErase;
set { _preErase = value; command.SetParameter(9, _preErase); }
}
private ushort _auWriteSize;
public ushort AU_WriteSize
{
get => _auWriteSize;
set { _auWriteSize = value; command.SetParameter(13, _auWriteSize); }
}
private ushort _auPreErase;
public ushort AU_PreErase
{
get => _auPreErase;
set { _auPreErase = value; command.SetParameter(15, _auPreErase); }
}
private ushort _magicBlocks;
public ushort MagicBlocks
{
get => _magicBlocks;
set { _magicBlocks = value; command.SetParameter(17, _magicBlocks); }
}
private ushort _eventSkipBlocks;
public ushort EventSkipBlocks
{
get => _eventSkipBlocks;
set { _eventSkipBlocks = value; command.SetParameter(19, _eventSkipBlocks); }
}
private uint _longDelay;
public uint LongDelay
{
get => _longDelay;
set { _longDelay = value; command.SetParameter(21, _longDelay); }
}
//=========================================================================
private byte _firstDualErase;
public byte FirstDualErase
{
get => _firstDualErase;
set { _firstDualErase = value; command.SetParameter(25, _firstDualErase); }
}
private byte _dualPreEraseGarbageWrite;
public byte DualPreEraseGarbageWrite
{
get => _dualPreEraseGarbageWrite;
set { _dualPreEraseGarbageWrite = value; command.SetParameter(26, _dualPreEraseGarbageWrite); }
}
private byte _secondDualErase;
public byte SecondDualErase
{
get => _secondDualErase;
set { _secondDualErase = value; command.SetParameter(27, _secondDualErase); }
}
private byte _preEraseGarbageWriteA;
public byte PreEraseGarbageWriteA
{
get => _preEraseGarbageWriteA;
set { _preEraseGarbageWriteA = value; command.SetParameter(28, _preEraseGarbageWriteA); }
}
private byte _preEraseGarbageWriteB;
public byte PreEraseGarbageWriteB
{
get => _preEraseGarbageWriteB;
set { _preEraseGarbageWriteB = value; command.SetParameter(29, _preEraseGarbageWriteB); }
}
private byte _preWritePreErase;
public byte PreWritePreErase
{
get => _preWritePreErase;
set { _preWritePreErase = value; command.SetParameter(30, _preWritePreErase); }
}
private byte _doFlashClear;
public byte DoFlashClear
{
get => _doFlashClear;
set { _doFlashClear = value; command.SetParameter(31, _doFlashClear); }
}
private byte _writeTillDelay;
public byte WriteTillDelay
{
get => _writeTillDelay;
set { _writeTillDelay = value; command.SetParameter(32, _writeTillDelay); }
}
public SelfTestFlash(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[33];
BlocksToTest = DefaultBlocksToTest;
TestType = DefaultTestType;
BlocksPerMBW = DefaultBlocksPerMBW;
//=====================================
PreErase = DefaultPreErase;
AU_WriteSize = DefaultAU_WriteSize;
AU_PreErase = DefaultAU_PreErase;
MagicBlocks = DefaultMagicBlocks;
EventSkipBlocks = DefaultEventSkipBlocks;
LongDelay = DefaultLongDelay;
//=====================================
FirstDualErase = DefaultFirstDualErase;
DualPreEraseGarbageWrite = DefaultDualPreEraseGarbageWrite;
SecondDualErase = DefaultSecondDualErase;
PreEraseGarbageWriteA = DefaultPreEraseGarbageWriteA;
PreEraseGarbageWriteB = DefaultPreEraseGarbageWriteB;
PreWritePreErase = DefaultPreWritePreErase;
DoFlashClear = DefaultDoFlashClear;
WriteTillDelay = DefaultWriteTillDelay;
}
public SelfTestFlash(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[33];
BlocksToTest = DefaultBlocksToTest;
TestType = DefaultTestType;
BlocksPerMBW = DefaultBlocksPerMBW;
//=====================================
PreErase = DefaultPreErase;
AU_WriteSize = DefaultAU_WriteSize;
AU_PreErase = DefaultAU_PreErase;
MagicBlocks = DefaultMagicBlocks;
EventSkipBlocks = DefaultEventSkipBlocks;
LongDelay = DefaultLongDelay;
//=====================================
FirstDualErase = DefaultFirstDualErase;
DualPreEraseGarbageWrite = DefaultDualPreEraseGarbageWrite;
SecondDualErase = DefaultSecondDualErase;
PreEraseGarbageWriteA = DefaultPreEraseGarbageWriteA;
PreEraseGarbageWriteB = DefaultPreEraseGarbageWriteB;
PreWritePreErase = DefaultPreWritePreErase;
DoFlashClear = DefaultDoFlashClear;
WriteTillDelay = DefaultWriteTillDelay;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"-> SelfTestFlash [{command.SequenceNumber.ToString("00000000")}]" });
lines.Add(new List<string>() { $" Blocks to test: {BlocksToTest}, test type: {TestType}, blocks per mbw: {BlocksPerMBW}" });
lines.Add(new List<string>() { $" SD Total Blocks: {PreErase}, AU Write Size: {AU_WriteSize}, AU_PreErase: {AU_PreErase}, Magic Blocks: {MagicBlocks}, EventSkipBlocks: {EventSkipBlocks}" });
lines.Add(new List<string>() { $" FirstDualErase: {FirstDualErase}, DualPreEraseGarbageWrite: {DualPreEraseGarbageWrite}, SecondDualErase: {SecondDualErase}" });
lines.Add(new List<string>() { $" PreEraseGarbageWriteA: {PreEraseGarbageWriteA}, PreEraseGarbageWriteB: {PreEraseGarbageWriteB}, PreWritePreErase: {PreWritePreErase}" });
lines.Add(new List<string>() { $" LongDelay: {LongDelay}, WriteTillDelay: {WriteTillDelay}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"-> SelfTestFlash [{command.SequenceNumber.ToString("00000000")}]" });
lines.Add(new List<string>() { $" Blocks to test: {BlocksToTest}, test type: {TestType}, blocks per mbw: {BlocksPerMBW}" });
lines.Add(new List<string>() { $" SD Total Blocks: {PreErase}, AU Write Size: {AU_WriteSize}, AU_PreErase: {AU_PreErase}, Magic Blocks: {MagicBlocks}, EventSkipBlocks: {EventSkipBlocks}" });
lines.Add(new List<string>() { $" FirstDualErase: {FirstDualErase}, DualPreEraseGarbageWrite: {DualPreEraseGarbageWrite}, SecondDualErase: {SecondDualErase}" });
lines.Add(new List<string>() { $" PreEraseGarbageWriteA: {PreEraseGarbageWriteA}, PreEraseGarbageWriteB: {PreEraseGarbageWriteB}, PreWritePreErase: {PreWritePreErase}" });
lines.Add(new List<string>() { $" LongDelay: {LongDelay}, WriteTillDelay: {WriteTillDelay}" });
}
}
public class QueryTime : QAandUtilityCommands
{
protected override Commands _Command => Commands.QueryTime;
public DateTime Value { get; private set; }
public QueryTime(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
}
public QueryTime(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out ulong tenms);
// Each tick = 100 ns, so each tenms = 10 ticks
Value = new DateTime(0).AddTicks((long)(10000 * tenms));
}
return CommandReceiveAction.StopReceiving;
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>()
{
$"Value: {Value.ToString("o")}"
});
}
}
public class RestartSDCard : QAandUtilityCommands
{
protected override Commands _Command => Commands.RestartSDCard;
public RestartSDCard(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
}
public RestartSDCard(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
}
}
public class QueryEventPhysicalStartAddress : QAandUtilityCommands
{
protected override Commands _Command => Commands.QueryEventPhysicalStartAddress;
const int EventNumberPosition = 0;
const int StartAddressPosition = 2;
const int CommandLength = 2;
private ushort _eventnumber = 0;
public ushort EventNumber
{
set
{
_eventnumber = value;
command.SetParameter(EventNumberPosition, value);
}
get => _eventnumber;
}
public ulong StartAddress { get; set; }
public QueryEventPhysicalStartAddress(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[CommandLength];
MinimumProtocolVersion = sock.GetMinProto(DFConstantsAndEnums.ProtocolLimitedCommands.PhysicalStartAddress);
}
public QueryEventPhysicalStartAddress(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[CommandLength];
MinimumProtocolVersion = sock.GetMinProto(DFConstantsAndEnums.ProtocolLimitedCommands.PhysicalStartAddress);
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(StartAddressPosition, out ulong newStartAddress);
StartAddress = newStartAddress;
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"EventNumber: {EventNumber}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines[0].Add($"Physical Address: 0x{StartAddress.ToString("XXXXXXXXXXXXXXXX")}");
}
}
public class SetEventPhysicalStartAddress : QAandUtilityCommands
{
protected override Commands _Command => Commands.SetEventPhysicalStartAddress;
const int EventNumberPosition = 0;
const int StartAddressPosition = 2;
const int CommandLength = 10;
private ushort _eventnumber = 0;
public ushort EventNumber
{
set
{
_eventnumber = value;
command.SetParameter(EventNumberPosition, value);
}
get => _eventnumber;
}
private ulong _startaddress = 0L;
public ulong StartAddress
{
set
{
_startaddress = value;
command.SetParameter(StartAddressPosition, value);
}
get => _startaddress;
}
public SetEventPhysicalStartAddress(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[CommandLength];
MinimumProtocolVersion = sock.GetMinProto(DFConstantsAndEnums.ProtocolLimitedCommands.PhysicalStartAddress);
}
public SetEventPhysicalStartAddress(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[CommandLength];
MinimumProtocolVersion = sock.GetMinProto(DFConstantsAndEnums.ProtocolLimitedCommands.PhysicalStartAddress);
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
ulong newStartAddress;
response.GetParameter(StartAddressPosition, out newStartAddress);
StartAddress = newStartAddress;
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"EventNumber: {EventNumber}, Physical Address: 0x{StartAddress.ToString("XXXXXXXXXXXXXXXX")}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>()
{
$"EventNumber: {EventNumber}, Physical Address: 0x{StartAddress.ToString("XXXXXXXXXXXXXXXX")}"
});
}
}
public class TestCommunication : QAandUtilityCommands
{
protected override Commands _Command => Commands.TestCommunication;
const int LengthPosition = 0;
private ushort _responselength = 0;
public ushort ResponseLength
{
get => _responselength;
set
{
command.SetParameter(LengthPosition, value);
_responselength = value;
}
}
public ushort ActualLength { get; private set; } = 0;
public TestCommunication(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[2];
command.SetParameter(LengthPosition, (ushort)0);
MinimumProtocolVersion = sock.GetMinProto(DFConstantsAndEnums.ProtocolLimitedCommands.TestCommunication);
}
public TestCommunication(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[2];
command.SetParameter(LengthPosition, (ushort)0);
MinimumProtocolVersion = sock.GetMinProto(DFConstantsAndEnums.ProtocolLimitedCommands.TestCommunication);
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
ActualLength = response.ParameterLength;
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Requested Response Length: {ResponseLength}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines[0].Add($"Actual Response Length: {ActualLength}");
}
}
public class SetStackLowPowerMode : QAandUtilityCommands
{
protected override Commands _Command => Commands.SetStackLowPowerMode;
const int LengthPosition = 0;
private ushort _responselength = 0;
public ushort ResponseLength
{
get => _responselength;
set
{
command.SetParameter(LengthPosition, value);
_responselength = value;
}
}
public ushort ActualLength { get; private set; } = 0;
public SetStackLowPowerMode(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[2];
command.SetParameter(LengthPosition, (ushort)0);
MinimumProtocolVersion = sock.GetMinProto(DFConstantsAndEnums.ProtocolLimitedCommands.StackLowPowerMode);
}
public SetStackLowPowerMode(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[2];
command.SetParameter(LengthPosition, (ushort)0);
MinimumProtocolVersion = sock.GetMinProto(DFConstantsAndEnums.ProtocolLimitedCommands.StackLowPowerMode);
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
ActualLength = response.ParameterLength;
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Requested Response Length: {ResponseLength}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines[0].Add($"Actual Response Length: {ActualLength}");
}
}
public class SetTiltSensorRange : QAandUtilityCommands
{
protected override Commands _Command => Commands.SetTiltSensorRange;
const int Channel1RangePosition = 0;
const int Channel2RangePosition = 2;
const int Channel3RangePosition = 4;
const int CommandParameterLength = 6;
private ushort _channel_1_range;
private ushort _channel_2_range;
private ushort _channel_3_range;
public ushort Channel1RangeG
{
get => _channel_1_range;
set
{
_channel_1_range = value;
command.SetParameter(Channel1RangePosition, _channel_1_range);
}
}
public ushort Channel2RangeG
{
get => _channel_2_range;
set
{
_channel_2_range = value;
command.SetParameter(Channel2RangePosition, _channel_2_range);
}
}
public ushort Channel3RangeG
{
get => _channel_3_range;
set
{
_channel_3_range = value;
command.SetParameter(Channel3RangePosition, _channel_3_range);
}
}
public SetTiltSensorRange(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[CommandParameterLength];
}
public SetTiltSensorRange(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[CommandParameterLength];
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>()
{
$"Channel 1 range: {_channel_1_range}G Channel 2 range: {_channel_2_range}G Channel 3 range: {_channel_3_range}G"
});
}
}
public class QueryTiltSensorRange : QAandUtilityCommands
{
protected override Commands _Command => Commands.QueryTiltSensorRange;
private ushort _channel_1_range;
private ushort _channel_2_range;
private ushort _channel_3_range;
public ushort Channel1RangeG => _channel_1_range;
public ushort Channel2RangeG => _channel_2_range;
public ushort Channel3RangeG => _channel_3_range;
public QueryTiltSensorRange(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
}
public QueryTiltSensorRange(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _channel_1_range);
response.GetParameter(2, out _channel_2_range);
response.GetParameter(4, out _channel_3_range);
}
else
{
_channel_1_range = 0;
_channel_2_range = 0;
_channel_3_range = 0;
}
return CommandReceiveAction.StopReceiving;
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>()
{
$"Channel 1 range: {_channel_1_range}G Channel 2 range: {_channel_2_range}G Channel 3 range: {_channel_3_range}G"
});
}
}
public class QueryTiltSensorData : QAandUtilityCommands
{
protected override Commands _Command => Commands.QueryTiltSensorData;
private short _channel_1_adc;
private short _channel_2_adc;
private short _channel_3_adc;
public short Channel1ValueAdc => _channel_1_adc;
public short Channel2ValueAdc => _channel_2_adc;
public short Channel3ValueAdc => _channel_3_adc;
public QueryTiltSensorData(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
}
public QueryTiltSensorData(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _channel_1_adc);
response.GetParameter(2, out _channel_2_adc);
response.GetParameter(4, out _channel_3_adc);
}
else
{
_channel_1_adc = 0;
_channel_2_adc = 0;
_channel_3_adc = 0;
}
return CommandReceiveAction.StopReceiving;
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>()
{
$"Channel 1 ADC: {_channel_1_adc} Channel 2 ADC: {_channel_2_adc} Channel 3 ADC: {_channel_3_adc}"
});
}
}
public class QueryTiltSensorSensitivity : QAandUtilityCommands
{
protected override Commands _Command => Commands.QueryTiltSensorSensitivity;
private float _sensitivity_1;
private float _sensitivity_2;
private float _sensitivity_3;
public float Channel1Sensitivity => _sensitivity_1;
public float Channel2Sensitivity => _sensitivity_2;
public float Channel3Sensitivity => _sensitivity_3;
public QueryTiltSensorSensitivity(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
}
public QueryTiltSensorSensitivity(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _sensitivity_1);
response.GetParameter(4, out _sensitivity_2);
response.GetParameter(8, out _sensitivity_3);
}
else
{
_sensitivity_1 = 0;
_sensitivity_2 = 0;
_sensitivity_3 = 0;
}
return CommandReceiveAction.StopReceiving;
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>()
{
$"Channel 1 sensitivity: {_sensitivity_1} Channel 2 sensitivity: {_sensitivity_2} Channel 3 sensitivity: {_sensitivity_3}"
});
}
}
public class EthernetMacTableEntry
{
public EthernetMacTableEntry(ushort age, ushort port, ushort filter, byte[] address)
{
Age = age;
Port = port;
Filter = filter;
Mac = new PhysicalAddress(address);
}
public ushort Age { get; private set; }
public ushort Port { get; private set; }
public ushort Filter { get; private set; }
public PhysicalAddress Mac { get; private set; }
public string Name { get; set; }
}
public class QueryEthernetMacTable : QAandUtilityCommands
{
const int FilterPosition = 0;
const int CommandParameterLength = 6;
protected override Commands _Command => Commands.QueryEthernetMacTable;
private string _filterString;
public List<EthernetMacTableEntry> MacTable { get; }
public string Filter
{
get => _filterString;
set => SetFilter(value);
}
private void SetFilter(string filter)
{
_filterString = filter;
//Encoding.ASCII.GetBytes(filter);
var array = HexEncoding.GetBytes(filter, out int discarded);
if (!string.IsNullOrEmpty(filter) && (null != array))
{
command.Parameter = new byte[CommandParameterLength];
command.SetParameter(FilterPosition, array);
}
}
public QueryEthernetMacTable(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
MacTable = new List<EthernetMacTableEntry>();
}
public QueryEthernetMacTable(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
MacTable = new List<EthernetMacTableEntry>();
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
ushort offset = 0;
response.GetParameter(offset, out ushort entries);
offset += 2;
for (ushort i = 0; i < entries; i++)
{
var address = new byte[6];
response.GetParameter(offset, out ushort age);
offset += 2;
response.GetParameter(offset, out ushort port);
offset += 2;
response.GetParameter(offset, out ushort filter);
offset += 2;
Buffer.BlockCopy(response.Parameter, offset, address, 0, 6);
offset += 6;
var entry = new EthernetMacTableEntry(age, port, filter, address);
MacTable.Add(entry);
}
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Filter: {Filter}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>()
{
$"Mac Table Entries: {MacTable.Count}"
});
}
}
public class EthernetMacIpTableEntry
{
public EthernetMacIpTableEntry(ushort setport, ushort setdown, byte[] address, byte[] ip, byte[] sn, byte[] location, byte[] version)
{
Port = setport;
Down = setdown;
Mac = address;
Ip = ip;
Sn = sn;
Location = location;
Version = version;
}
public ushort Port { get; private set; }
public ushort Down { get; private set; }
public byte[] Mac { get; private set; }
public byte[] Ip { get; private set; }
public byte[] Sn { get; private set; }
public byte[] Location { get; private set; }
public byte[] Version { get; private set; }
public byte[] Swapped { get; private set; }
public string Name { get; set; }
}
public class QueryEthernetMacIpTable : QAandUtilityCommands
{
const int COMMAND_PAYLOAD_SIZE = 1;
const int FilterPosition = 0;
const int CommandParameterLength = 6;
private byte _updatebuffer = 0;
protected override Commands _Command => Commands.QueryMacIpTable;
public List<EthernetMacIpTableEntry> MacIpTable { get; }
public bool UpdateBuffer
{
set { _updatebuffer = Convert.ToByte(value); command.SetParameter(0, _updatebuffer); }
}
public QueryEthernetMacIpTable(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
MacIpTable = new List<EthernetMacIpTableEntry>();
command.Parameter = new byte[COMMAND_PAYLOAD_SIZE];
}
public QueryEthernetMacIpTable(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
MacIpTable = new List<EthernetMacIpTableEntry>();
command.Parameter = new byte[COMMAND_PAYLOAD_SIZE];
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
ushort offset = 0;
response.GetParameter(offset, out ushort entries);
offset += 2;
for (ushort i = 0; i < entries; i++)
{
try
{
byte[] address = new byte[18];
byte[] ip = new byte[16];
byte[] sn = new byte[10];
byte[] location = new byte[10];
byte[] version = new byte[6];
response.GetParameter(offset, out ushort setport);
offset += 2;
response.GetParameter(offset, out ushort setdown);
offset += 2;
Buffer.BlockCopy(response.Parameter, offset, address, 0, 18);
offset += 18;
Buffer.BlockCopy(response.Parameter, offset, ip, 0, 16);
offset += 16;
Buffer.BlockCopy(response.Parameter, offset, sn, 0, 10);
offset += 10;
Buffer.BlockCopy(response.Parameter, offset, location, 0, 10);
offset += 10;
Buffer.BlockCopy(response.Parameter, offset, version, 0, 6);
offset += 6;
var entry = new EthernetMacIpTableEntry(setport, setdown, address, ip, sn, location, version);
MacIpTable.Add(entry);
}
catch (Exception ex)
{
APILogger.Log($"Failure in QueryEthernetMacIpTable - {ex.Message}");
}
}
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Update Buffer {_updatebuffer}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>()
{
$"Mac Table Entries: {MacIpTable.Count}"
});
}
}
public class TestEthernetCable : QAandUtilityCommands
{
private const int PortPosition = 0;
private const int PairPosition = 2;
private const int ResultPosition = 0;
private const int CommandParameterLength = 4;
protected override Commands _Command
{
get { return Commands.TestEthernetCable; }
}
private ushort _port;
private ushort _pair;
private ushort _result;
private float _length;
public ushort Port
{
get => _port;
set
{
_port = value;
command.SetParameter(PortPosition, _port);
}
}
public ushort Pair
{
get => _pair;
set
{
_pair = value;
command.SetParameter(PairPosition, _pair);
}
}
public ushort Result => _result;
public float Length => _length;
public TestEthernetCable(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[CommandParameterLength];
}
public TestEthernetCable(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[CommandParameterLength];
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _result);
response.GetParameter(2, out _length);
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Port: {_port} Pair: {_pair}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>()
{
$"Result: {_result} Length: {_length}"
});
}
}
public class MeasureEventDelay : QAandUtilityCommands
{
const int COMMAND_PAYLOAD_SIZE = 1;
protected override Commands _Command => Commands.MeasureEventDelay;
private byte _saveAtribute = 0;
private uint _delay;
public bool SaveAttribute
{
set
{
_saveAtribute = Convert.ToByte(value);
command.SetParameter(0, _saveAtribute);
}
}
public uint DelayNs => _delay;
public MeasureEventDelay(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[COMMAND_PAYLOAD_SIZE];
}
public MeasureEventDelay(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[COMMAND_PAYLOAD_SIZE];
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _delay);
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Save Attribute {_saveAtribute}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>()
{
$"Delay: {_delay}"
});
}
}
public class MeasureStartDelay : QAandUtilityCommands
{
const int COMMAND_PAYLOAD_SIZE = 1;
protected override Commands _Command => Commands.MeasureStartDelay;
private byte _saveAtribute = 0;
private uint _delay;
public bool SaveAttribute
{
set
{
_saveAtribute = Convert.ToByte(value);
command.SetParameter(0, _saveAtribute);
}
}
public uint DelayNs => _delay;
public MeasureStartDelay(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[COMMAND_PAYLOAD_SIZE];
}
public MeasureStartDelay(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[COMMAND_PAYLOAD_SIZE];
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _delay);
}
return CommandReceiveAction.StopReceiving;
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>() { $"Save Attribute {_saveAtribute}" });
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>()
{
$"Delay: {_delay}"
});
}
}
public class SetSwitchTestMode : QAandUtilityCommands
{
protected override Commands _Command => Commands.SetSwitchTestMode;
private byte _enabled;
public bool Enabled
{
set
{
_enabled = Convert.ToByte(value);
command.SetParameter(0, value);
}
}
public SetSwitchTestMode(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[1];
}
public SetSwitchTestMode(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[1];
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
if (0 == DeviceID)
{
lines.Add(new List<string>() { $"Enabled: {_enabled}" });
}
}
}
public class QuerySwitchTestMode : QAandUtilityCommands
{
protected override Commands _Command => Commands.QuerySwitchTestMode;
private byte _enabled = 0;
public bool Enabled => Convert.ToBoolean(_enabled);
public QuerySwitchTestMode(DTS.Common.Interface.DASFactory.ICommunication sock)
: base(sock)
{
command.Parameter = new byte[1];
}
public QuerySwitchTestMode(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[1];
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _enabled);
}
else
{
_enabled = 0;
}
return CommandReceiveAction.StopReceiving;
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
lines.Add(new List<string>() { $"Enabled: {_enabled}" });
}
}
public enum TiltSensorMif : ushort
{
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.UInt32)]
MifVersion = 1,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.Unicode)]
SerialNumber = 2,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.UInt16)]
HardwareConfiguration = 3,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.Float32)]
TemperatureCF = 4,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.Int16)]
TemperatureOffset = 5,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.Float32Star)]
TiltSensorCF = 6,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.Int16Star)]
TiltSensorOffset = 7,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.Float32Star)]
TiltSensorRange = 8,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.Float32Star)]
TiltSensorCal = 9,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.Int16)]
TiltSensorEEPROM = 10,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.Float32)]
TiltSensorMultipleMIF = 11,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.Float32)]
TiltSensorData = 12,
[AttributeTypes.AttributeDataTypesAttribute(AttributeTypes.AttributeDataTypes.Float32)]
TiltSenosrList = 13,
[AttributeTypes.AttributeDataTypes(AttributeTypes.AttributeDataTypes.Int16)]
RtcRam = 14,
}
public class TiltSensorGet : QAandUtilityCommands
{
protected override Commands _Command => Commands.TiltSensorGet;
private byte _tilt_id = 0;
private TiltSensorMif _sub_cmd = 0;
private byte _data_sub_cmd = 0;
private byte _data_type = 0;
private ushort _data_length = 0;
private ushort _data_offset = 0;
private readonly byte _data_cmd = 4;
private byte[] _data;
protected const int MAX_DATA_LENGTH = 2000;
public byte Tilt_id
{
get => _tilt_id;
set
{
_tilt_id = value;
command.SetParameter(0, value);
}
}
public TiltSensorMif Sub_cmd
{
get => _sub_cmd;
set
{
_sub_cmd = value;
command.SetParameter(1, (byte)value);
}
}
public ushort Data_Offset
{
get => _data_offset;
set
{
_data_offset = value;
command.SetParameter(2, _data_offset);
}
}
public ushort Data_Length
{
get => _data_length;
set
{
_data_length = value;
command.SetParameter(4, _data_length);
}
}
public byte[] Data
{
get => _data;
set
{
if (null == value)
{
return;
}
if (MAX_DATA_LENGTH < value.Length)
{
throw new NotImplementedException();
}
_data = value;
}
}
private uint _mifversion;
public uint MIFversion => _mifversion;
private string _serialnumber;
public string Serialnumber => _serialnumber;
private ushort _hardwardconfig;
public ushort HardwareConfig => _hardwardconfig;
private float _temperaturecf;
public float TemperaturCF => _temperaturecf;
private short _temperatureoffset;
public short TemperatureOffset => _temperatureoffset;
private float _tiltsensorcfx;
public float TiltSensorCFx => _tiltsensorcfx;
private float _tiltsensorcfy;
public float TiltSensorCFy => _tiltsensorcfy;
private float _tiltsensorcfz;
public float TiltSensorCFz => _tiltsensorcfz;
private short _tiltsensoroffsetx;
public short TiltSensorOffsetx => _tiltsensoroffsetx;
private short _tiltsensoroffsety;
public short TiltSensorOffsety => _tiltsensoroffsety;
private short _tiltsensoroffsetz;
public short TiltSensorOffsetz => _tiltsensoroffsetz;
private float _tiltsensorrangex;
public float TiltSensorRangex => _tiltsensorrangex;
private float _tiltsensorrangey;
public float TiltSensorRangey => _tiltsensorrangey;
private float _tiltsensorrangez;
public float TiltSensorRangez => _tiltsensorrangez;
private float[] _tiltsensorcalcf = new float[18];
public float[] TiltSensorCal_CF => _tiltsensorcalcf;
private short _channel_1_adc;
public short Channel1ValueAdc => _channel_1_adc;
private short _channel_2_adc;
public short Channel2ValueAdc => _channel_2_adc;
private short _channel_3_adc;
public short Channel3ValueAdc => _channel_3_adc;
private ushort _numberoftilt;
public ushort NumberOfTilt => _numberoftilt;
private byte[] _tiltaddress = new byte[8];
public byte[] Tilt_Address => _tiltaddress;
public ushort RTCSerialNumber { get; private set; }
public ushort RTCProductionDaysSince1970 { get; private set; }
public ushort RTCBatteryInstallationDaysSince1970 { get; private set; }
private void ParseData(TiltSensorMif cmd, int offset)
{
if (cmd == TiltSensorMif.MifVersion)
{
response.GetParameter(offset, out _mifversion);
}
if (cmd == TiltSensorMif.SerialNumber)
{
response.GetParameter(offset, out _serialnumber);
}
if (cmd == TiltSensorMif.HardwareConfiguration)
{
response.GetParameter(offset, out _hardwardconfig);
}
if (cmd == TiltSensorMif.TemperatureCF)
{
response.GetParameter(offset, out _temperaturecf);
}
if (cmd == TiltSensorMif.TemperatureOffset)
{
response.GetParameter(offset, out _temperatureoffset);
}
if (cmd == TiltSensorMif.TiltSensorCF)
{
response.GetParameter(offset, out _tiltsensorcfx);
response.GetParameter(offset + 4, out _tiltsensorcfy);
response.GetParameter(offset + 8, out _tiltsensorcfz);
}
if (cmd == TiltSensorMif.TiltSensorOffset)
{
response.GetParameter(offset, out _tiltsensoroffsetx);
response.GetParameter(offset + 2, out _tiltsensoroffsety);
response.GetParameter(offset + 4, out _tiltsensoroffsetz);
}
if (cmd == TiltSensorMif.TiltSensorRange)
{
response.GetParameter(offset, out _tiltsensorrangex);
response.GetParameter(offset + 4, out _tiltsensorrangey);
response.GetParameter(offset + 8, out _tiltsensorrangez);
}
if (cmd == TiltSensorMif.TiltSensorData)
{
response.GetParameter(offset, out _channel_1_adc);
response.GetParameter(offset + 2, out _channel_2_adc);
response.GetParameter(offset + 4, out _channel_3_adc);
}
if (cmd == TiltSensorMif.TiltSensorCal)
{
for (int i = 0; i < 18; i++)
{
response.GetParameter(offset + i * 4, out _tiltsensorcalcf[i]);
}
}
if (cmd == TiltSensorMif.TiltSenosrList)
{
response.GetParameter(2, out _numberoftilt);
for (int i = 0; i < _numberoftilt; i++)
{
response.GetParameter(4 + i, out _tiltaddress[i]);
}
}
}
public TiltSensorGet(ICommunication sock)
: base(sock)
{
command.Parameter = new byte[6];
}
public TiltSensorGet(ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[6];
}
protected override CommandReceiveAction WholePackage()
{
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
{
response.GetParameter(0, out _data_sub_cmd);
if (_data_sub_cmd == (byte)TiltSensorMif.TiltSensorMultipleMIF)
{
int nextcmd = 1;
for (int i = 0; i < 9; i++)
{
response.GetParameter(nextcmd + 0, out _data_sub_cmd);
response.GetParameter(nextcmd + 1, out _data_type);
response.GetParameter(nextcmd + 2, out _data_length);
ParseData((TiltSensorMif)_data_sub_cmd, nextcmd + _data_cmd);
nextcmd = nextcmd + _data_cmd + _data_length;
}
}
else if (_data_sub_cmd == (byte)TiltSensorMif.TiltSensorEEPROM
|| _data_sub_cmd == (byte)TiltSensorMif.RtcRam)
{
response.GetParameter(0, out _data_sub_cmd);
response.GetParameter(1, out _data_offset);
response.GetParameter(3, out _data_length);
_data = new byte[_data_length];
for (int i = 0; i < _data_length; i++)
{
response.GetParameter(5 + i, out _data[i]);
}
if (_data_sub_cmd == (byte)TiltSensorMif.RtcRam)
{
ParseRTC();
}
}
else if (_data_sub_cmd == (byte)TiltSensorMif.RtcRam)
{
response.GetParameter(0, out _data_sub_cmd);
response.GetParameter(1, out _data_offset);
response.GetParameter(3, out _data_length);
_data = new byte[_data_length];
for (int i = 0; i < _data_length; i++)
{
response.GetParameter(5 + i, out _data[i]);
}
}
else
{
response.GetParameter(1, out _data_type);
response.GetParameter(2, out _data_length);
_data_offset = 4;
ParseData((TiltSensorMif)_data_sub_cmd, _data_offset);
}
}
else
{
_channel_1_adc = 0;
_channel_2_adc = 0;
_channel_3_adc = 0;
}
return CommandReceiveAction.StopReceiving;
}
private void ParseRTC()
{
if (_data.Length >= 2)
{
RTCSerialNumber = BitConverter.ToUInt16(_data, 0);
}
if (_data.Length >= 4)
{
RTCProductionDaysSince1970 = BitConverter.ToUInt16(_data, 2);
}
if (_data.Length >= 6)
{
RTCBatteryInstallationDaysSince1970 = BitConverter.ToUInt16(_data, 4);
}
}
public override void ResponseToString(ref List<List<string>> lines)
{
base.ResponseToString(ref lines);
switch (_sub_cmd)
{
case TiltSensorMif.RtcRam: RTCRamResponseToString(ref lines); break;
default: DefaultResponseToString(ref lines); break;
}
}
private void RTCRamResponseToString(ref List<List<string>> lines)
{
lines.Add(new List<string>()
{
$"Tilt Get: Sub_cmd: {_sub_cmd}, Tilt ID: {_tilt_id}, Data Type: {_data_type}, Data length: {_data_length}, RTC SerialNumber: {RTCSerialNumber}, RTC Production_Days; {RTCProductionDaysSince1970}, RTC_Install_Days: {RTCBatteryInstallationDaysSince1970}"
});
}
private void DefaultResponseToString(ref List<List<string>> lines)
{
lines.Add(new List<string>()
{
$"Tilt Get: Sub_cmd: {_sub_cmd} Tilt ID: {_tilt_id} Data Type: {_data_type} Data length: {_data_length}"
});
}
}
public class TiltSensorSet : QAandUtilityCommands
{
protected override Commands _Command => Commands.TiltSensorSet;
private TiltSensorMif _sub_cmd = 0;
private byte _tilt_id = 0;
private byte _data_type = 0;
private ushort _data_length = 0;
private const int CommandParameterLength = 20;
private uint _mifversion;
private string _serialnumber;
private ushort _hardwareconfiguration;
private float _temperaturecf; // correction factor for temperature
private short _temperatureoffset; //offset temperature
private float[] _tiltsensorCF = new float[3]; // correction factor for tilt sensors
private short[] _tiltsensorOffset = new short[3]; //offset for tilt sensors
private float[] _tiltsensorRange = new float[3]; //range for tilt sensors
private float[] _tiltsensorCalCF = new float[18];    //  tilt sensors 4*18 reserves bytes
//private Int16 _reserved; //offset reserved
private ushort _data_offset;
//private UInt16 _data_lenght;
private byte[] _data;
public ushort Data_Offset
{
get { return _data_offset; }
set
{
_data_offset = value;
}
}
public byte[] Data
{
get { return _data; }
set
{
_data = value;
}
}
public byte Tilt_id
{
get => _tilt_id;
set
{
_tilt_id = value;
}
}
public TiltSensorMif Sub_cmd
{
get => _sub_cmd;
set
{
_sub_cmd = value;
}
}
public byte DataType
{
get => _data_type;
set
{
_data_type = value;
}
}
public ushort DataLength
{
get => _data_length;
set
{
_data_length = value;
}
}
public uint MIFVersion
{
get => _mifversion;
set
{
_mifversion = value;
}
}
public string SerialNumber
{
get => _serialnumber;
set
{
_serialnumber = value;
}
}
public ushort HWConfig
{
get => _hardwareconfiguration;
set
{
_hardwareconfiguration = value;
}
}
public float TemperatureCF
{
get => _temperaturecf;
set
{
_temperaturecf = value;
}
}
public short TemperatureOffset
{
get => _temperatureoffset;
set
{
_temperatureoffset = value;
}
}
public float TilteSensorCFx
{
set
{
_tiltsensorCF[0] = value;
}
}
public float TilteSensorCFy
{
set
{
_tiltsensorCF[1] = value;
}
}
public float TilteSensorCFz
{
set
{
_tiltsensorCF[2] = value;
}
}
public short TilteSensorOffsetx
{
set
{
_tiltsensorOffset[0] = value;
}
}
public short TilteSensorOffsety
{
set
{
_tiltsensorOffset[1] = value;
}
}
public short TilteSensorOffsetz
{
set
{
_tiltsensorOffset[2] = value;
}
}
public float TilteSensorRangex
{
set
{
_tiltsensorRange[0] = value;
}
}
public float TilteSensorRangey
{
set
{
_tiltsensorRange[1] = value;
}
}
public float TilteSensorRangez
{
set
{
_tiltsensorRange[2] = value;
}
}
public float[] TiltSensorCalCF
{
set
{
_tiltsensorCalCF = value;
}
}
public void SetSingle(byte id, TiltSensorMif cmd, object value)
{
_tilt_id = id;
command.SetParameter(0, _tilt_id);
_sub_cmd = cmd;
command.SetParameter(1, (byte)_sub_cmd);
if (cmd == TiltSensorMif.MifVersion)
{
_mifversion = (uint)value;
command.SetParameter(5, _mifversion);
_data_length = sizeof(uint);
_data_type = (byte)AttributeTypes.AttributeDataTypes.UInt32;
}
if (cmd == TiltSensorMif.SerialNumber)
{
_serialnumber = (string)value;
command.SetParameter(5, _serialnumber);
_data_length = (ushort)_serialnumber.Length;
_data_type = (byte)AttributeTypes.AttributeDataTypes.Ascii;
}
if (cmd == TiltSensorMif.HardwareConfiguration)
{
_hardwareconfiguration = (ushort)value;
command.SetParameter(5, _hardwareconfiguration);
_data_length = sizeof(ushort);
_data_type = (byte)AttributeTypes.AttributeDataTypes.UInt16;
}
if (cmd == TiltSensorMif.TemperatureCF)
{
_temperaturecf = (float)value;
command.SetParameter(5, _temperaturecf);
_data_length = sizeof(float);
_data_type = (byte)AttributeTypes.AttributeDataTypes.Float32;
}
if (cmd == TiltSensorMif.TemperatureOffset)
{
_temperatureoffset = (short)value;
command.SetParameter(5, _temperatureoffset);
_data_length = sizeof(short);
_data_type = (byte)AttributeTypes.AttributeDataTypes.UInt16;
}
if (cmd == TiltSensorMif.TiltSensorCF)
{
_tiltsensorCF = (float[])value;
command.SetParameter(5, _tiltsensorCF[0]);
command.SetParameter(9, _tiltsensorCF[1]);
command.SetParameter(13, _tiltsensorCF[2]);
_data_length = sizeof(float) * 3;
_data_type = (byte)AttributeTypes.AttributeDataTypes.Float32Star;
}
if (cmd == TiltSensorMif.TiltSensorOffset)
{
_tiltsensorOffset = (short[])value;
command.SetParameter(5, _tiltsensorOffset[0]);
command.SetParameter(7, _tiltsensorOffset[1]);
command.SetParameter(9, _tiltsensorOffset[2]);
_data_length = sizeof(ushort) * 3;
_data_type = (byte)AttributeTypes.AttributeDataTypes.Int16Star;
}
if (cmd == TiltSensorMif.TiltSensorRange)
{
_tiltsensorRange = (float[])value;
command.SetParameter(5, _tiltsensorRange[0]);
command.SetParameter(9, _tiltsensorRange[1]);
command.SetParameter(13, _tiltsensorRange[2]);
_data_length = sizeof(float) * 3;
_data_type = (byte)AttributeTypes.AttributeDataTypes.Float32Star;
}
if (cmd == TiltSensorMif.TiltSensorCal)
{
_tiltsensorCalCF = (float[])value;
for (int i = 0; i < 18; i++)
{
command.SetParameter(5 + i * 4, _tiltsensorCalCF[i]);
}
_data_length = sizeof(float) * 18;
_data_type = (byte)AttributeTypes.AttributeDataTypes.UInt32Star;
}
command.SetParameter(2, _data_type);
command.SetParameter(3, _data_length);
}
public void SetEEPROM(byte id, ushort dataOffset, object value)
{
_sub_cmd = TiltSensorMif.TiltSensorEEPROM;
_tilt_id = id;
_data = (byte[])value;
_data_length = (ushort)_data.Length;
_data_offset = dataOffset;
command.Parameter = new byte[6 + _data_length];
for (int i = 0; i < _data_length; i++)
{
command.SetParameter(6 + i, _data[i]);
}
command.SetParameter(0, _tilt_id);
command.SetParameter(1, (byte)_sub_cmd);
command.SetParameter(2, _data_offset);
command.SetParameter(4, _data_length);
}
public void SetMultiple(byte id, TiltSensorMif cmd)
{
if (cmd == TiltSensorMif.TiltSensorMultipleMIF)
{
command.Parameter = new byte[250];
int offset = 0;
command.SetParameter(0, _tilt_id);
command.SetParameter(1, (byte)cmd);
offset = 2;
_sub_cmd = TiltSensorMif.MifVersion;
command.SetParameter(offset + 0, (byte)_sub_cmd);
_data_type = (byte)AttributeTypes.AttributeDataTypes.UInt32;
command.SetParameter(offset + 1, _data_type);
_data_length = sizeof(uint);
command.SetParameter(offset + 2, _data_length);
command.SetParameter(offset + 4, _mifversion);
offset = offset + 4 + _data_length;
_sub_cmd = TiltSensorMif.HardwareConfiguration;
command.SetParameter(offset + 0, (byte)_sub_cmd);
_data_type = (byte)AttributeTypes.AttributeDataTypes.UInt16;
command.SetParameter(offset + 1, _data_type);
_data_length = sizeof(ushort);
command.SetParameter(offset + 2, _data_length);
command.SetParameter(offset + 4, _hardwareconfiguration);
offset = offset + 4 + _data_length;
_sub_cmd = TiltSensorMif.TemperatureCF;
command.SetParameter(offset + 0, (byte)_sub_cmd);
_data_type = (byte)AttributeTypes.AttributeDataTypes.Float32;
command.SetParameter(offset + 1, _data_type);
_data_length = sizeof(float);
command.SetParameter(offset + 2, _data_length);
command.SetParameter(offset + 4, _temperaturecf);
offset = offset + 4 + _data_length;
_sub_cmd = TiltSensorMif.TemperatureOffset;
command.SetParameter(offset + 0, (byte)_sub_cmd);
_data_type = (byte)AttributeTypes.AttributeDataTypes.Int16;
command.SetParameter(offset + 1, _data_type);
_data_length = sizeof(short);
command.SetParameter(offset + 2, _data_length);
command.SetParameter(offset + 4, _temperatureoffset);
offset = offset + 4 + _data_length;
_sub_cmd = TiltSensorMif.TiltSensorCF;
command.SetParameter(offset + 0, (byte)_sub_cmd);
_data_type = (byte)AttributeTypes.AttributeDataTypes.Float32Star;
command.SetParameter(offset + 1, _data_type);
_data_length = sizeof(float) * 3;
command.SetParameter(offset + 2, _data_length);
command.SetParameter(offset + 4, _tiltsensorCF[0]);
command.SetParameter(offset + 8, _tiltsensorCF[1]);
command.SetParameter(offset + 12, _tiltsensorCF[2]);
offset = offset + 4 + _data_length;
_sub_cmd = TiltSensorMif.TiltSensorOffset;
command.SetParameter(offset + 0, (byte)_sub_cmd);
_data_type = (byte)AttributeTypes.AttributeDataTypes.Int16Star;
command.SetParameter(offset + 1, _data_type);
_data_length = sizeof(short) * 3;
command.SetParameter(offset + 2, _data_length);
command.SetParameter(offset + 4, _tiltsensorOffset[0]);
command.SetParameter(offset + 6, _tiltsensorOffset[1]);
command.SetParameter(offset + 8, _tiltsensorOffset[2]);
offset = offset + 4 + _data_length;
_sub_cmd = TiltSensorMif.TiltSensorRange;
command.SetParameter(offset + 0, (byte)_sub_cmd);
_data_type = (byte)AttributeTypes.AttributeDataTypes.Float32Star;
command.SetParameter(offset + 1, _data_type);
_data_length = sizeof(float) * 3;
command.SetParameter(offset + 2, _data_length);
command.SetParameter(offset + 4, _tiltsensorRange[0]);
command.SetParameter(offset + 8, _tiltsensorRange[1]);
command.SetParameter(offset + 12, _tiltsensorRange[2]);
offset = offset + 4 + _data_length;
_sub_cmd = TiltSensorMif.TiltSensorCal;
command.SetParameter(offset + 0, (byte)_sub_cmd);
_data_type = (byte)AttributeTypes.AttributeDataTypes.Float32Star;
command.SetParameter(offset + 1, _data_type);
_data_length = sizeof(float) * 18;
command.SetParameter(offset + 2, _data_length);
for (int i = 0; i < 18; i++)
{
command.SetParameter(offset + 4 + i * 4, _tiltsensorCalCF[i]);
}
offset = offset + 4 + _data_length;
//_sub_cmd = TiltSensorMif.TiltSensorEEPROM;
//command.SetParameter(offset + 0, (byte)_sub_cmd);
//_data_type = (byte)AttributeDataTypes.Int16;
//command.SetParameter(offset + 1, _data_type);
//_data_length = sizeof(short);
//command.SetParameter(offset + 2, _data_length);
//command.SetParameter(offset + 4, _reserved);
//offset = offset + 4 + _data_length;
_sub_cmd = TiltSensorMif.SerialNumber;
command.SetParameter(offset + 0, (byte)_sub_cmd);
_data_type = (byte)AttributeTypes.AttributeDataTypes.Ascii;
command.SetParameter(offset + 1, _data_type);
_data_length = (ushort)_serialnumber.Length;
command.SetParameter(offset + 2, _data_length);
command.SetParameter(offset + 4, _serialnumber);
offset = offset + 4 + _data_length;
}
}
public TiltSensorSet(ICommunication sock)
: base(sock)
{
command.Parameter = new byte[CommandParameterLength];
}
public TiltSensorSet(ICommunication sock, int TimeoutMillisec)
: base(sock, TimeoutMillisec)
{
command.Parameter = new byte[CommandParameterLength];
}
public override void CommandToString(ref List<List<string>> lines)
{
base.CommandToString(ref lines);
lines.Add(new List<string>()
{
$"Tilt Set: Sub_cmd: {_sub_cmd} Tilt ID: {_tilt_id} Data Type: {_data_type} Data length: {_data_length}"
});
}
}
}