using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace KMotion_dotNet
{
///
/// Defines form PC-DSP.h defining number of available devices
///
public class StatusConsts
{
///
/// Number of Persist variable included in Status Upload
///
public const int N_PC_COMM_PERSIST = 8;
///
/// Number of Kanalog DACs
///
public const int N_DACS = 8; // Kanalog
///
/// Number of Kanalog ADCs
///
public const int N_ADCS = 8;
///
/// Number 8-bit PWMS on IO Pins
///
public const int N_PWMS = 8;
///
/// Number Encoder Inputs on KFLOP 0 - 7
///
public const int N_ENCS = 8;
///
/// Number Encoder Inputs on Kogna 0 - 19
///
public const int N_ENCS_KOGNA = 20;
///
/// Number DACs on Kogna
///
public const int N_DACS_KOGNA = 8; // referenced after Kanalog as 8-15
///
/// Number ADCs on KOGNA
///
public const int N_ADCS_KOGNA = 4; // referenced after Kanalog as 8-11
///
/// Number ADCs on SnapAmp per SnapAmpA
///
public const int N_ADCS_SNAP = 8; // per snap amp
///
/// Number PWMs on SnapAmp per SnapAmpA
///
public const int N_PWMS_SNAP = 4; // per snap amp
///
/// Number Encoder Inputs on SnapAmp 0 - 19
///
public const int N_ENCS_SNAP = 4;
///
/// Number Axis Channels available for Kogna
/// (KFLOP has only 8 fields for additional channels will be zero)
///
public const int N_CHANNELS_KOGNA = 16;
///
/// Number 8-bit PWMs for Kogna/KFLOP
///
public const int N_IO_PWMS = 8;
///
/// Number 12-bit (High Resolution) HRPWMs for Kogna
///
public const int N_KOGNA_HRPWM = 4;
}
///
/// This structure matches exactly the binary form as the Kogna/KFLOP
/// MAIN_STATUS Structure so it can be uploaded as a binary image.
///
public struct KM_MainStatusRaw
{
///
/// Bulk status record packed version and size info
/// bits 16-23 = version, bits 0-15 = size in words
///
public int VersionAndSize;
///
/// Bulk status record ADC values (8 Kanalog + 2 x 8 SnapAmp)
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_ADCS + 2 * StatusConsts.N_ADCS_SNAP)] public int[] ADC;
///
/// Bulk status record DAC values (8 Kanalog)
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_DACS)] public int[] DAC;
///
/// Bulk status record PWM values (8 obsolete PWMS + 2 x 4 SnapAmp)
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_PWMS + 2 * StatusConsts.N_PWMS_SNAP)] public int[] PWM;
///
/// Bulk status record Axis Measured positions (Encoder or other sensing device)
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_CHANNELS_KOGNA)] public double[] Position;
///
/// Bulk status record Axis Commanded Destinations
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_CHANNELS_KOGNA)] public double[] Destination;
///
/// Bulk status record Axis First output channel specified
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_CHANNELS_KOGNA)] public byte[] OutputChan0;
///
/// Bulk status record feedback selected input modes
/// 4 bits for each axis (not sure why only using 16 of 32 bits)
/// Axes 0-3
///
public int InputModes;
///
/// Bulk status record feedback selected input modes #2
/// 4 bits for each axis
/// Axes 4-7
///
public int InputModes2;
///
/// Bulk status record feedback selected input modes #3
/// 4 bits for each axis
/// Axes 8-11
///
public int InputModes3;
///
/// Bulk status record feedback selected input modes #4
/// 4 bits for each axis
/// Axes 12-15
///
public int InputModes4;
///
/// Bulk status record feedback selected output modes
/// Axes 0-3
///
public int OutputModes; // 4 bits for each axis
///
/// Bulk status record feedback selected output modes #2
/// Axes 4-7
///
public int OutputModes2; // 4 bits for each axis
///
/// Bulk status record feedback selected output modes #3
/// Axes 8-11
///
public int OutputModes3; // 4 bits for each axis
///
/// Bulk status record feedback selected output modes #4
/// Axes 11-15
///
public int OutputModes4; // 4 bits for each axis
///
/// Bulk status record Current axis enables
///
public int Enables; // 1 bit for each axis
///
/// Bulk status record Current axis completes
///
public int AxisDone; // 1 bit for each axis
///
/// Bulk status record Current KFLOP 64 IO Bit directions (inputs vs outputs)
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public int[] BitsDirection; // KFLOP - 64 bits of I/O direction 1 = output
///
/// Bulk status record Current Kogna IO Bit directions (inputs vs outputs)
/// Kogna - 24 bits 200-223 of I/O direction 1 = output
///
public int BitsDirection200; // Kogna - 24 bits 200-223 of I/O direction 1 = output
///
/// Bulk status record Current Kogna IO Bit directions (inputs vs outputs)
/// Kogna - 10 bits 280-289 of I/O direction 1 = output
///
public int BitsDirection280; // Kogna - 10 bits 280-289 of I/O direction 1 = output
///
/// Bulk status record Current KFLOP/Kogna 64 IO Bit states
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public int[] BitsState; // KFLOP - 64 bits of state lsb=I/O bit0
///
/// Bulk status record Current KFLOP/Kogna 64 IO Bit states
/// Kogna - 90 bits 200-289 of state lsb=I/O bit200
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public int[] BitsState200; // Kogna - 90 bits 200-289 of state lsb=I/O bit200
///
/// Bulk status record
/// Kogna - 10 Pin function modes 2 bits per pin 4 HRPWM + 6 SPI
///
public int PinMuxModes; // Kogna - 10 Pin function modes 2 bits per pin 4 HRPWM + 6 SPI
///
/// Bulk status record Kogna 4 ADCs
/// format 12 bits data (signed extended to 16 bits)
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_ADCS_KOGNA)] public short[] Kogna_ADC; // format 12 bits data (signed extended to 16 bits)
///
/// Bulk status record Kogna 8 DACSs
/// format 12 bits data (signed extended to 16 bits)
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_DACS_KOGNA)] public short[] Kogna_DAC; // format 12 bits data
///
/// Bulk status record Kogna
/// Prescale sets frequency of all 8 8-bit PWMs
///
public byte Kogna_PWM_Prescale; // Prescale sets frequency of all 8 8-bit PWMs
///
/// Bulk status record Kogna
/// current pulse settings of all 8 8-bit IO PWMs
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_IO_PWMS)] public byte[] Kogna_PWM; // current pulse settings
///
/// Bulk status record Kogna
/// current PWM Enables to control Pin of all 8 8-bit IO PWMs
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_IO_PWMS)] public byte[] Kogna_PWM_Enables; // PWM Enables to control Pin?
///
/// Bulk status record Kogna
/// current Kogna HRPWMs Periods (common for HRPWM 0 and 1)
///
public UInt16 HRPWMPeriod01; // Kogna HRPWMs Periods
///
/// Bulk status record Kogna
/// current Kogna HRPWM Periods (for HRPWM 2)
///
public UInt16 HRPWMPeriod2;
///
/// Bulk status record Kogna
/// current Kogna HRPWM Periods (for HRPWM 3)
///
public UInt16 HRPWMPeriod3;
///
/// Bulk status record Kogna
/// current Kogna Kogna 4 HRPWMs Pulse widths
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_KOGNA_HRPWM)] public UInt16[] HRPWM; // Kogna HRPWMs Pulse widths
///
/// Bulk status record Current SnapAmp #0 IO Bit directions (inputs vs outputs)
///
public int SnapBitsDirection0; // Snap - 32 bits of I/O direction 1=output 16-29 GPIO only, Card 0
///
/// Bulk status record Current SnapAmp #1 IO Bit directions (inputs vs outputs)
///
public int SnapBitsDirection1; // Snap - 32 bits of I/O direction 1=output 16-29 GPIO only, Card 1
///
/// Bulk status record Current SnapAmp #0 IO Bit States
///
public int SnapBitsState0; // Snap - 32 bits of state 16-29 GPIO 0-7 Diff 8-15 OPTO, Card 0
///
/// Bulk status record Current SnapAmp #1 IO Bit States
///
public int SnapBitsState1; // Snap - 32 bits of state 16-29 GPIO 0-7 Diff 8-15 OPTO, Card 1
///
/// Bulk status record Current Kanalog Input Bit States
///
public int KanalogBitsStateInputs; // Kanalog - 16 bits 128-143
///
/// Bulk status record Current Kanalog Output Bit States
///
public int KanalogBitsStateOutputs; // Kanalog - 24 bits 144-167
///
/// Bulk status record Current Boot Thread Startup Enables
///
public int RunOnStartUp; // word Bits 1-7 selects which threads to execute on startup
///
/// Bulk status record Current Thread Execution State
///
public int ThreadActive; // one bit for each thread, 1=active, bit 0 - primary
///
/// Bulk status record current StopImmediate (feedhold) state
///
public int StopImmediateState; // Status of Stop Coordinated Motion Immediately
///
/// Bulk status record Time Stamp in seconds of when status was acquired
///
public double TimeStamp; // Time in seconds (since KFlop boot) this status was aquired
///
/// Bulk status record KFLOP-PC 8 Communication variables 100-107
///
[MarshalAs(UnmanagedType.ByValArray, SizeConst = StatusConsts.N_PC_COMM_PERSIST)] public int[] PC_comm;// 8 persist Variables constantly uploaded to send misc commands/data to PC
///
/// Bulk status record Virtual bits packed 16 per word 48-63
///
public UInt32 VirtualBits; // Virtual I/O bits simulated in memory
///
/// Bulk status record Extended Virtual bits packed 32 per word
/// 1024-1055
///
public UInt32 VirtualBitsEx0; // only upload 32 1024 Expanded Virtual Bits
}
///
/// Bulk status record uploaded from KFLOP
///
public struct KM_MainStatus
{
///
/// This structure matches exactly the binary form as the Kogna/KFLOP
/// MAIN_STATUS Structure so it can be uploaded as a binary image.
///
public KM_MainStatusRaw MainStatus;
///
/// Time in milliseconds since Windows Started where
/// Status record was last uploaded
/// Note: rolls over every 49 days
///
public int _TicksAtUpdate;
#region Properties
///
/// Bulk status record packed version and size info
/// bits 16-23 = version, bits 0-15 = size in words
///
public int VersionAndSize
{
get
{
return MainStatus.VersionAndSize;
}
}
///
/// Bulk status record ADC values (8 Kanalog + 2 x 8 SnapAmp)
///
public int[] ADC
{
get
{
return MainStatus.ADC;
}
}
///
/// Bulk status record DAC values (8 Kanalog)
///
public int[] DAC
{
get
{
return MainStatus.DAC;
}
}
///
/// Bulk status record PWM values (8 obsolete PWMS + 2 x 4 SnapAmp)
///
public int[] PWM
{
get
{
return MainStatus.PWM;
}
}
///
/// Bulk status record Axis Measured positions (Encoder or other sensing device)
///
public double[] Position
{
get
{
return MainStatus.Position;
}
}
///
/// Bulk status record Axis Commanded Destinations
///
public double[] Destination
{
get
{
return MainStatus.Destination;
}
}
///
/// Bulk status record Axis First output channel specified
///
public byte[] OutputChan0
{
get
{
return MainStatus.OutputChan0;
}
}
///
/// Bulk status record feedback selected input modes
/// Axes 0-3
///
public int InputModes
{
get
{
return MainStatus.InputModes;
}
}
///
/// Bulk status record feedback selected input modes #2
/// Axes 4-7
///
public int InputModes2
{
get
{
return MainStatus.InputModes2;
}
}
///
/// Bulk status record feedback selected input modes #3
/// Axes 8-11
///
public int InputModes3
{
get
{
return MainStatus.InputModes3;
}
}
///
/// Bulk status record feedback selected input modes #4
/// Axes 12-15
///
public int InputModes4
{
get
{
return MainStatus.InputModes4;
}
}
///
/// Bulk status record feedback selected output modes
/// Axes 0-3
///
public int OutputModes
{
get
{
return MainStatus.OutputModes;
}
}
///
/// Bulk status record feedback selected output modes #2
/// Axes 4-7
///
public int OutputModes2
{
get
{
return MainStatus.OutputModes2;
}
}
///
/// Bulk status record feedback selected output modes #3
/// Axes 8-11
///
public int OutputModes3
{
get
{
return MainStatus.OutputModes3;
}
}
///
/// Bulk status record feedback selected output modes #4
/// Axes 11-15
///
public int OutputModes4
{
get
{
return MainStatus.OutputModes4;
}
}
///
/// Bulk status record Current axis enables
///
public int Enables
{
get
{
return MainStatus.Enables;
}
}
///
/// Bulk status record Current axis completes
///
public int AxisDone
{
get
{
return MainStatus.AxisDone;
}
}
///
/// Bulk status record Current KFLOP 64 IO Bit directions (inputs vs outputs)
///
public int[] BitsDirection
{
get
{
return MainStatus.BitsDirection;
}
}
///
/// Bulk status record Current Kogna IO Bit directions (inputs vs outputs)
/// Kogna - 24 bits 200-223 of I/O direction 1 = output
///
public int BitsDirection200
{
get
{
return MainStatus.BitsDirection200;
}
}
///
/// Bulk status record Current Kogna IO Bit directions (inputs vs outputs)
/// Kogna - 10 bits 280-289 of I/O direction 1 = output
///
public int BitsDirection280
{
get
{
return MainStatus.BitsDirection280;
}
}
///
/// Bulk status record Current KFLOP/Kogna 64 IO Bit states
///
public int[] BitsState
{
get
{
return MainStatus.BitsState;
}
}
///
/// Bulk status record Current KFLOP/Kogna 64 IO Bit states
/// Kogna - 90 bits 200-289 of state lsb=I/O bit200
///
public int[] BitsState200
{
get
{
return MainStatus.BitsState200;
}
}
///
/// Bulk status record
/// Kogna - 10 Pin function modes 2 bits per pin 4 HRPWM + 6 SPI
///
public int PinMuxModes
{
get
{
return MainStatus.PinMuxModes;
}
}
///
/// Bulk status record Kogna 4 ADCs
/// format 12 bits data (signed extended to 16 bits)
///
public short[] Kogna_ADC
{
get
{
return MainStatus.Kogna_ADC;
}
}
///
/// Bulk status record Kogna 8 DACSs
/// format 12 bits data (signed extended to 16 bits)
///
public short[] Kogna_DAC
{
get
{
return MainStatus.Kogna_DAC;
}
}
///
/// Bulk status record Kogna
/// Prescale sets frequency of all 8 8-bit PWMs
///
public byte Kogna_PWM_Prescale
{
get
{
return MainStatus.Kogna_PWM_Prescale;
}
}
///
/// Bulk status record Kogna
/// current pulse settings of all 8 8-bit IO PWMs
///
public byte[] Kogna_PWM
{
get
{
return MainStatus.Kogna_PWM;
}
}
///
/// Bulk status record Kogna
/// current PWM Enables to control Pin of all 8 8-bit IO PWMs
///
public byte[] Kogna_PWM_Enables
{
get
{
return MainStatus.Kogna_PWM_Enables;
}
}
///
/// Bulk status record Kogna
/// current Kogna HRPWMs Periods (common for HRPWM 0 and 1)
///
public ushort HRPWMPeriod01
{
get
{
return MainStatus.HRPWMPeriod01;
}
}
///
/// Bulk status record Kogna
/// current Kogna HRPWM Periods (for HRPWM 2)
///
public ushort HRPWMPeriod2
{
get
{
return MainStatus.HRPWMPeriod2;
}
}
///
/// Bulk status record Kogna
/// current Kogna HRPWM Periods (for HRPWM 3)
///
public ushort HRPWMPeriod3
{
get
{
return MainStatus.HRPWMPeriod3;
}
}
///
/// Bulk status record Kogna
/// current Kogna Kogna 4 HRPWMs Pulse widths
///
public ushort[] HRPWM
{
get
{
return MainStatus.HRPWM;
}
}
///
/// Bulk status record Current SnapAmp #0 IO Bit directions (inputs vs outputs)
///
public int SnapBitsDirection0
{
get
{
return MainStatus.SnapBitsDirection0;
}
}
///
/// Bulk status record Current SnapAmp #1 IO Bit directions (inputs vs outputs)
///
public int SnapBitsDirection1
{
get
{
return MainStatus.SnapBitsDirection1;
}
}
///
/// Bulk status record Current SnapAmp #0 IO Bit States
///
public int SnapBitsState0
{
get
{
return MainStatus.SnapBitsState0;
}
}
///
/// Bulk status record Current SnapAmp #1 IO Bit States
///
public int SnapBitsState1
{
get
{
return MainStatus.SnapBitsState1;
}
}
///
/// Bulk status record Current Kanalog Input Bit States
///
public int KanalogBitsStateInputs
{
get
{
return MainStatus.KanalogBitsStateInputs;
}
}
///
/// Bulk status record Current Kanalog Output Bit States
///
public int KanalogBitsStateOutputs
{
get
{
return MainStatus.KanalogBitsStateOutputs;
}
}
///
/// Bulk status record Current Boot Thread Startup Enables
///
public int RunOnStartUp
{
get
{
return MainStatus.RunOnStartUp;
}
}
///
/// Bulk status record Current Thread Execution State
///
public int ThreadActive
{
get
{
return MainStatus.ThreadActive;
}
}
///
/// Bulk status record current StopImmediate (feedhold) state
///
public int StopImmediateState
{
get
{
return MainStatus.StopImmediateState;
}
}
///
/// Bulk status record Time Stamp in seconds of when status was acquired
///
public double TimeStamp
{
get
{
return MainStatus.TimeStamp;
}
}
///
/// Bulk status record KFLOP-PC 8 Communication variables 100-107
///
public int[] PC_comm
{
get
{
return MainStatus.PC_comm;
}
}
///
/// Bulk status record Virtual bits packed 16 per word 48-63
///
public int VirtualBits
{
get
{
return (int)MainStatus.VirtualBits;
}
}
///
/// Bulk status record Extended Virtual bits packed 32 per word
/// 1024-1055
///
public int VirtualBitsEx0
{
get
{
return (int)MainStatus.VirtualBitsEx0;
}
}
///
/// Bulk status record Windows Time when status was updates (millisec since Windows Started)
///
public int TicksAtUpdate
{
get
{
return _TicksAtUpdate;
}
}
#endregion
///
/// Bulk status record ADC values (Kanalog)
///
/// channel number to get
/// value
public int GetADC(int index)
{
if (index < MainStatus.ADC.Length)
{
return MainStatus.ADC[index];
}
else
{
return 0;
}
}
///
/// Bulk status record DAC values (Kanalog)
///
/// channel number to get
/// value
public int GetDAC(int index)
{
if (index < MainStatus.DAC.Length)
{
return MainStatus.DAC[index];
}
else
{
return 0;
}
}
///
/// Bulk status record PWM values (SnapAmp)
///
/// channel number to get (8 obsolete + 2 x 4 SnapAmp)
/// value
public int GetPWM(int index)
{
if (index < MainStatus.PWM.Length)
{
return MainStatus.PWM[index];
}
else
{
return 0;
}
}
///
/// Bulk status record Axis Measured positions (Encoder or other sensing device)
///
/// Axis Number
/// value
public double GetPosition(int index)
{
if (index < MainStatus.Position.Length)
{
return MainStatus.Position[index];
}
else
{
return 0;
}
}
///
/// Bulk status record Axis Commanded Destinations
///
/// Axis Number
/// value
public double GetDestination(int index)
{
if (index < MainStatus.Destination.Length)
{
return MainStatus.Destination[index];
}
else
{
return 0;
}
}
///
/// Bulk status record Axis First output channel specified
///
/// Axis Number
/// value
public double GetOutputChannel0(int index)
{
if (index < MainStatus.OutputChan0.Length)
{
return MainStatus.OutputChan0[index];
}
else
{
return 0;
}
}
///
/// Bulk status record feedback selected 4-bit input mode
///
/// Axis Number
/// value
public int GetInputMode(int axischannel)
{
int channel = FourBitAxisIndex(axischannel);
if (axischannel > 11)
{
return GetValue(MainStatus.InputModes4, channel, 4);
}
else if (axischannel > 7)
{
return GetValue(MainStatus.InputModes3, channel, 4);
}
else if (axischannel > 3)
{
return GetValue(MainStatus.InputModes2, channel, 4);
}
else
{
return GetValue(MainStatus.InputModes, channel, 4);
}
}
///
/// Bulk status record 4-bit output mode
///
/// Axis Number
/// value
public int GetOutputMode(int axischannel)
{
int channel = FourBitAxisIndex(axischannel);
if (axischannel > 11)
{
return GetValue(MainStatus.OutputModes4, channel, 4);
}
else if (axischannel > 7)
{
return GetValue(MainStatus.OutputModes3, channel, 4);
}
else if (axischannel > 3)
{
return GetValue(MainStatus.OutputModes2, channel, 4);
}
else
{
return GetValue(MainStatus.OutputModes, channel, 4);
}
}
///
/// Bulk status record Current axis enables
///
/// Axis Number
/// value
public int GetAxisEnabled(int axischannel)
{
return GetValue(MainStatus.Enables, axischannel, 1);
}
///
/// Bulk status record Current axis completes
///
/// Axis Number
/// value
public int GetAxisComplete(int axischannel)
{
return GetValue(MainStatus.AxisDone, axischannel, 1);
}
///
/// Bulk status record Current KFLOP/Kogna 64 IO Bit directions (inputs vs outputs)
///
/// IO Bit Number
/// value 0=input 1=output
public int GetKFlopBitDirection(int index)
{
if (index > 31)
{
return GetValue(MainStatus.BitsDirection[1], index - 31, 1);
}
else
{
return GetValue(MainStatus.BitsDirection[0], index, 1);
}
}
///
/// Bulk status record Current Kogna 24 IO Bit directions for Bits 200-223(inputs vs outputs)
///
/// IO Bit Number
/// value 0=input 1=output
public int GetBitDirection200(int index)
{
return GetValue(MainStatus.BitsDirection200, index, 1);
}
///
/// Bulk status record Current Kogna 10 IO Bit directions for Bits 280-289(inputs vs outputs)
///
/// IO Bit Number
/// value 0=input 1=output
public int GetBitDirection280(int index)
{
return GetValue(MainStatus.BitsDirection280, index, 1);
}
///
/// Bulk status record Current KFLOP/Kogna 64 IO Bit states
///
/// IO Bit Number
/// value
public int GetKFlopBitState(int index)
{
if (index > 31)
{
return GetValue(MainStatus.BitsState[1], index - 32, 1);
}
else
{
return GetValue(MainStatus.BitsState[0], index, 1);
}
}
///
/// Bulk status record Current Kogna 90 IO Bit states (Bits 200-289)
///
/// IO Bit Number
/// value
public int GetBitState200(int index)
{
return GetValue(MainStatus.BitsState200[(index - 200) >> 5], (index - 200) & 31, 1);
}
///
/// Bulk status record Current Kogna 10 Pin function modes 2 bits per pin 4 HRPWM + 6 SPI
///
/// device selector 0-9 (0-3 HRPWM, 4-9 SPI)
/// value
public int GetPinMuxModes(int index)
{
return GetValue(MainStatus.PinMuxModes, index * 2, 2);
}
///
/// Bulk status record Current Kogna ADC
///
/// channel 0-3
/// value
public int GetKognaADC(int index)
{
return Kogna_ADC[index];
}
///
/// Bulk status record Current Kogna DAC
///
/// channel 0-7
/// value
public int GetKognaDAC(int index)
{
return Kogna_DAC[index];
}
///
/// Bulk status record Current Kogna 8-bit PWM pulse setting
///
/// channel 0-7
/// value
public int GetKognaPWM(int index)
{
return Kogna_PWM[index];
}
///
/// Bulk status record Current Kogna 8-bit PWM Enables
///
/// channel 0-7
/// value
public int GetKognaPWMEnables(int index)
{
return Kogna_PWM_Enables[index];
}
///
/// Bulk status record Current Kogna Hi-Res 12-bit PWM pulse setting
///
/// channel 0-3
/// value
public int GetKognaHRPWM(int index)
{
return HRPWM[index];
}
///
/// Bulk status record Current SnapAmp #0 IO Bit directions (inputs vs outputs)
///
/// IO Bit Number
/// value
public int GetSnapBitsDirection0(int index)
{
return GetValue(MainStatus.SnapBitsDirection0, index, 1);
}
///
/// Bulk status record Current SnapAmp #1 IO Bit directions (inputs vs outputs)
///
/// IO Bit Number
/// value 0=input 1=output
public int GetSnapBitsDirection1(int index)
{
return GetValue(MainStatus.SnapBitsDirection1, index, 1);
}
///
/// Bulk status record Current SnapAmp #0 IO Bit States
///
/// IO Bit Number
/// value
public int GetSnapBitsState0(int index)
{
return GetValue(MainStatus.SnapBitsState0, index, 1);
}
///
/// Bulk status record Current SnapAmp #1 IO Bit States
///
/// IO Bit Number
/// value
public int GetSnapBitsState1(int index)
{
return GetValue(MainStatus.SnapBitsState1, index, 1);
}
///
/// Bulk status record Current Kanalog Input Bit States
///
/// IO Bit Number
/// value
public int GetKanalogBitsStateInputs(int index)
{
return GetValue(MainStatus.KanalogBitsStateInputs, index, 1);
}
///
/// Bulk status record Current Kanalog Output Bit States
///
/// IO Bit Number
/// value
public int GetKanalogBitsStateOutputs(int index)
{
return GetValue(MainStatus.KanalogBitsStateOutputs, index, 1);
}
///
/// Bulk status record Current Boot Thread Startup Enables
///
/// Thread Number
/// value
public int GetRunOnStartUp(int index)
{
return GetValue(MainStatus.RunOnStartUp, index, 1);
}
///
/// Bulk status record Current Thread Execution State
///
/// Thread Number
/// value
public int GetThreadActive(int index)
{
return GetValue(MainStatus.ThreadActive, index, 1);
}
///
/// Bulk status record Current PC-KFLOP Comm regs
///
/// Comm Register Index
/// value
public int GetPC_comm(int index)
{
if (PC_comm.Length > index)
{
return PC_comm[index];
}
else
{
return 0;
}
}
///
/// Bulk status record Current Virtual Bit States
///
/// Bit Offset
/// value
public int GetVirtualBits(int index)
{
return GetValue((int)MainStatus.VirtualBits, index, 1);
}
///
/// Bulk status record Current Extended Virtual Bit States
///
/// Bit Offset 0-31 where 0 returns Virtual bit 1024
/// value
public int GetVirtualBitsEx0(int index)
{
return GetValue((int)MainStatus.VirtualBitsEx0, index, 1);
}
private int FourBitAxisIndex(int axischannel)
{
return (axischannel & 3) << 2;
}
private int GetValue(int source, int start, int length)
{
return ((source >> start) & length);
}
}
}