2026-01-26 14:51:28 +09:00

2972 lines
137 KiB
C#

using Aurora.Api;
using Aurora.Api.Devices;
using Hermes;
using System;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Documents;
using static AuroraTriggerBoard.Trigger;
namespace AuroraTriggerBoard.SJT
{
partial class SJTTrigger : SerialConn, ITrigger
{
uint m_iTrigSetupTime_us;
uint m_iTrigPulseWidth_us;
uint m_iRtnWaitTime_us;
byte Max_OutCh = 8;
byte DebugMode = 1;
uint m_iSendReTry_Num = 2;
uint HW_Ver = 0;
uint FW_Ver = 0;
uint BUILDSTAMP = 0;
uint IDENTIFY_FLAG = 0;
public SJTTrigger(string deviceId, bool isSimul) : base(deviceId, isSimul)
{
}
public int Connect(IConnConfig config)
{
if (Open(config as SerialConnConfig) != E1.OK)
{
return E2.NOT_CONNECTED;
}
m_iTrigSetupTime_us = 1;
m_iTrigPulseWidth_us = 1;
//m_iRtnWaitTime_us = 100000;
m_iRtnWaitTime_us = 100;
return E1.OK;
}
public int Disconnect()
{
return Close();
}
// public int DisableTrigCorrectTable()
// {
// uint data = 0x1;
//
// }
public bool IsCommError()
{
return IsConnected();
}
public byte ToHex(byte Data)
{
if ((Data & 0x10) == 0) // a~f, A~F
{
Data += 9;
}
Data &= 0x0F;
return Data;
}
public byte h2c(ref byte[] hex)
{
return Convert.ToByte((Convert.ToInt32(ToHex(hex[0])) << 4) | Convert.ToInt32(ToHex(hex[1])));
}
public byte Hex2Ascii(byte hex)
{
if (hex <= 9)
{
return Convert.ToByte((Convert.ToInt32(hex) | 0x30));
}
else if ((hex >= 10) && (hex <= 15))
{
return Convert.ToByte((Convert.ToInt32(hex - 9) | 0x40));
}
else return 0;
}
public int TotalBit_add(ref byte[] charPt, byte char_num)
{
int sum = 0;
for (int i = 0; i < char_num; i++)
{
sum += (charPt[i] & 0x01) + ((charPt[i] & 0x02) >> 1) + ((charPt[i] & 0x04) >> 2) + ((charPt[i] & 0x08) >> 3) +
((charPt[i] & 0x10) >> 4) + ((charPt[i] & 0x20) >> 5) + ((charPt[i] & 0x40) >> 6) + ((charPt[i] & 0x80) >> 7);
}
return sum;
}
//ushort SJUartSingleSend(int addr, uint data, sbyte mode = 0)
ushort SJUartSingleSend<T>(int addr, T data, sbyte mode = 0)
{ // by SJ 170126
ushort rtn = 0;
if (0 == mode) rtn = SJUartAsSingleSend(addr, data);
else if (1 == mode) rtn = SJUartRawSingleSend(addr, data);
//if ((DebugMode >= 2) && (NULL != Connected_COM)) {
// //CStringA Tmp;
// //Tmp.Format("Single Send 32Bit : Addr 0x%x / RAW mode %d / Data 0x%x: rtn %x\r\n ", addr, mode, data, rtn); Put_Log(Tmp, *Connected_COM);
// string temp;
// temp = formatA("Single Send 32Bit : Addr 0x%x / RAW mode %d / Data 0x%x: rtn %x\r\n ", addr, mode, data, rtn); Put_Log(temp, *Connected_COM);
//}
if ((DebugMode >= 2) && (IsConnected() == true)) Log.D(String.Format("Single Send 32Bit : Addr 0x{0:x} / RAW mode {1:d} / Data 0x{2:x}: rtn {3:x} ", addr, mode, data, rtn));
return rtn;
}
//public ushort SJUartAsSingleSend(int addr, uint data)
public ushort SJUartAsSingleSend<T>(int addr, T data)
{ // by SJ 170126
byte[] StartSignal = new byte[2];
byte[] RegAddr = new byte[4];
byte[] Data = new byte[8]; // 4 * data length
byte[] recvPacket = new byte[3];
byte err_retry_cnt = 0;
ushort rtn;
uint bit_sum = 0;
int i = 0;
// m_comm.m_QueueRead.Clear();
// Data Seq1 : StartSignal
StartSignal[0] = 0x48; // H
StartSignal[1] = 0x4E; // N
bit_sum += Convert.ToUInt32(TotalBit_add(ref StartSignal, 2));
// Data Seq2 : Option (skip)
// Data Seq3 : Addr
RegAddr[0] = Hex2Ascii(Convert.ToByte(addr & 0x000F));
RegAddr[1] = Hex2Ascii(Convert.ToByte((addr & 0x00F0) >> 4));
RegAddr[2] = Hex2Ascii(Convert.ToByte((addr & 0x0F00) >> 8));
RegAddr[3] = Hex2Ascii(Convert.ToByte((addr & 0xF000) >> 12));
bit_sum += Convert.ToUInt32(TotalBit_add(ref RegAddr, 4));
// Data Seq4 : DataSeq
//Data[0] = Hex2Ascii(Convert.ToByte(data & 0x0000000F)); Data[1] = Hex2Ascii(Convert.ToByte((data & 0x000000F0) >> 4));
//Data[2] = Hex2Ascii(Convert.ToByte((data & 0x00000F00) >> 8)); Data[3] = Hex2Ascii(Convert.ToByte((data & 0x0000F000) >> 12));
//Data[4] = Hex2Ascii(Convert.ToByte((data & 0x000F0000) >> 16)); Data[5] = Hex2Ascii(Convert.ToByte((data & 0x00F00000) >> 20));
//Data[6] = Hex2Ascii(Convert.ToByte((data & 0x0F000000) >> 24)); Data[7] = Hex2Ascii(Convert.ToByte((data & 0xF0000000) >> 28
Data[0] = Hex2Ascii(Convert.ToByte((uint)(object)data & 0x0000000F));
Data[1] = Hex2Ascii(Convert.ToByte(((uint)(object)data & 0x000000F0) >> 4));
Data[2] = Hex2Ascii(Convert.ToByte(((uint)(object)data & 0x00000F00) >> 8));
Data[3] = Hex2Ascii(Convert.ToByte(((uint)(object)data & 0x0000F000) >> 12));
Data[4] = Hex2Ascii(Convert.ToByte(((uint)(object)data & 0x000F0000) >> 16));
Data[5] = Hex2Ascii(Convert.ToByte(((uint)(object)data & 0x00F00000) >> 20));
Data[6] = Hex2Ascii(Convert.ToByte(((uint)(object)data & 0x0F000000) >> 24));
Data[7] = Hex2Ascii(Convert.ToByte(((uint)(object)data & 0xF0000000) >> 28));
bit_sum += Convert.ToUInt32(TotalBit_add(ref Data, 8));
// Data Seq5 : EndSignal
byte[] EndSignal = new byte[] { 0x59 }; // Y
bit_sum += Convert.ToUInt32(TotalBit_add(ref EndSignal, 1));
// Data Seq5 : Checksum
// just bit_sum raw data
// CheckSum[0] = Hex2Ascii( (INT8U)(bit_sum & 0x0F) );
// CheckSum[1] = Hex2Ascii( (INT8U)(bit_sum & 0xF0) >> 4 );
// Data Integration
byte[] packet = new byte[2 + 4 + 8 + 1 + 1];
packet[0] = StartSignal[0];
packet[1] = StartSignal[1];
packet[2] = RegAddr[0];
packet[3] = RegAddr[1];
packet[4] = RegAddr[2];
packet[5] = RegAddr[3];
packet[6] = Data[0];
packet[7] = Data[1];
packet[8] = Data[2];
packet[9] = Data[3];
packet[10] = Data[4];
packet[11] = Data[5];
packet[12] = Data[6];
packet[13] = Data[7];
packet[14] = EndSignal[0];
// packet[15] = CheckSum[0]; packet[16] = CheckSum[1];
packet[15] = Convert.ToByte(bit_sum);
/*
m_comm.WriteComm(&packet[0], 16);
for(i = 0 ; i < 3 ; i++){
while(!m_comm.m_QueueRead.GetByte(&recvPacket[i]));
}
if((recvPacket[0] == StartSignal[1]) & (recvPacket[1] == 0x4F) & (recvPacket[2] == 0x4B) )
{
rtn = true;
}
else {
}
free (packet);
return rtn;
*/
uint RtnWait_Cnt;
while (true)
{
Write(packet);
RtnWait_Cnt = 0;
Thread.Sleep(10);
while (Read(recvPacket) <= 0)
{
Thread.Sleep(10);
RtnWait_Cnt += 10;
if (RtnWait_Cnt > m_iRtnWaitTime_us)
{
Log.D(String.Format("SJUartAsSingleSend Receive Fail {0:d} > {1:d}", RtnWait_Cnt, m_iRtnWaitTime_us));
return ERR_NORESPONSE;
}
};
if ((recvPacket[0] == StartSignal[1]) && (recvPacket[1] == 0x4F) && (recvPacket[2] == 0x4B)) // 'N OK'
{
// rtn = (recvPacket[2] | (recvPacket[1] << 8) | (recvPacket[0] << 16));
rtn = OK_RETURN;
break;
}
else
{
Log.D(String.Format("SJUartAsSingleSend Send Fail {0:d} > {1:d} : {2:x}, {3:x}, {4:x}", err_retry_cnt, m_iSendReTry_Num, recvPacket[0], recvPacket[1], recvPacket[2]));
if (err_retry_cnt >= m_iSendReTry_Num)
{
rtn = Convert.ToUInt16(ERR_RTN_NOT_OK | (Convert.ToInt32(recvPacket[2]) & 0xff));
break;
}
else
{
err_retry_cnt++;
}
}
}
return rtn;
}
//ushort SJUartRawSingleSend(int addr, uint data)
ushort SJUartRawSingleSend<T>(int addr, T data)
{ // by SJ 170906
byte[] StartSignal = new byte[2];
byte[] RegAddr = new byte[4];
//byte[] Data = new byte[4]; // 2 * data length
Int32 DataLength = Marshal.SizeOf(data);
byte[] Data = new byte[DataLength];
byte[] recvPacket = new byte[3];
byte err_retry_cnt = 0;
ushort rtn;
uint bit_sum = 0;
int i = 0;
// m_comm.m_QueueRead.Clear();
// Data Seq1 : StartSignal
StartSignal[0] = 0x48; // H
StartSignal[1] = 0x4F; // O
bit_sum += Convert.ToUInt32(TotalBit_add(ref StartSignal, 2));
// Data Seq2 : Option (skip)
// Data Seq3 : Addr
RegAddr[0] = Hex2Ascii(Convert.ToByte(addr & 0x000F));
RegAddr[1] = Hex2Ascii(Convert.ToByte((addr & 0x00F0) >> 4));
RegAddr[2] = Hex2Ascii(Convert.ToByte((addr & 0x0F00) >> 8));
RegAddr[3] = Hex2Ascii(Convert.ToByte((addr & 0xF000) >> 12));
bit_sum += Convert.ToUInt32(TotalBit_add(ref RegAddr, 4));
// Data Seq4 : DataSeq
#region <HairPinTwister>
//Data[0] = Hex2Ascii(Convert.ToByte((uint)(object)data & 0x000000FF));
//Data[1] = Hex2Ascii(Convert.ToByte(((uint)(object)data & 0x0000FF00) >> 8));
//Data[2] = Hex2Ascii(Convert.ToByte(((uint)(object)data & 0x00FF0000) >> 16));
//Data[3] = Hex2Ascii(Convert.ToByte(((uint)(object)data & 0xFF000000) >> 24));
//bit_sum += Convert.ToUInt32(TotalBit_add(ref Data, (byte)Data.Length));
#endregion
Data[0] = Convert.ToByte((uint)(object)data & 0x000000FF);
Data[1] = Convert.ToByte(((uint)(object)data & 0x0000FF00) >> 8);
Data[2] = Convert.ToByte(((uint)(object)data & 0x00FF0000) >> 16);
Data[3] = Convert.ToByte(((uint)(object)data & 0xFF000000) >> 24);
if (DataLength > 4)
{
Data[4] = Convert.ToByte(((uint)(object)data & 0xFF00000000) >> 32); Data[5] = Convert.ToByte(((uint)(object)data & 0xFF0000000000) >> 40);
Data[6] = Convert.ToByte(((uint)(object)data & 0xFF000000000000) >> 48); Data[7] = Convert.ToByte(((uint)(object)data & 0xFF00000000000000) >> 56);
}
bit_sum += Convert.ToUInt32(TotalBit_add(ref Data, (byte)DataLength));
// Data Seq5 : EndSignal
byte[] EndSignal = new byte[] { 0x59 }; // Y
bit_sum += Convert.ToUInt32(TotalBit_add(ref EndSignal, 1));
// Data Seq5 : Checksum
// just bit_sum raw data
// CheckSum[0] = Hex2Ascii( (INT8U)(bit_sum & 0x0F) );
// CheckSum[1] = Hex2Ascii( (INT8U)(bit_sum & 0xF0) >> 4 );
// Data Integration
byte[] packet = new byte[2 + 4 + DataLength + 1 + 1];
packet[0] = StartSignal[0]; packet[1] = StartSignal[1];
packet[2] = RegAddr[0]; packet[3] = RegAddr[1]; packet[4] = RegAddr[2]; packet[5] = RegAddr[3];
packet[6] = Data[0]; packet[7] = Data[1]; packet[8] = Data[2]; packet[9] = Data[3];
if (DataLength > 4)
{
packet[10] = Data[4]; packet[11] = Data[5]; packet[12] = Data[6]; packet[13] = Data[7];
packet[14] = EndSignal[0];
// packet[15] = CheckSum[0]; packet[16] = CheckSum[1];
packet[15] = Convert.ToByte(bit_sum);
}
else
{
packet[10] = EndSignal[0];
// packet[15] = CheckSum[0]; packet[16] = CheckSum[1];
packet[11] = Convert.ToByte(bit_sum);
}
/*
m_comm.WriteComm(&packet[0], 16);
for(i = 0 ; i < 3 ; i++){
while(!m_comm.m_QueueRead.GetByte(&recvPacket[i]));
}
if((recvPacket[0] == StartSignal[1]) & (recvPacket[1] == 0x4F) & (recvPacket[2] == 0x4B) )
{
rtn = true;
}
else {
}
free (packet);
return rtn;
*/
uint RtnWait_Cnt;
while (true)
{
Write(packet);
RtnWait_Cnt = 0;
Thread.Sleep(10);
while (Read(recvPacket) <= 0)
{
Thread.Sleep(10);
RtnWait_Cnt += 10;
if (RtnWait_Cnt > m_iRtnWaitTime_us)
{
Log.D(String.Format("SJUartRawSingleSend Receive Fail {0:d} > {1:d}", RtnWait_Cnt, m_iRtnWaitTime_us));
return ERR_NORESPONSE;
}
};
if ((recvPacket[0] == StartSignal[1]) && (recvPacket[1] == 0x4F) && (recvPacket[2] == 0x4B)) // 'N OK'
{
// rtn = (recvPacket[2] | (recvPacket[1] << 8) | (recvPacket[0] << 16));
rtn = OK_RETURN;
break;
}
else
{
//Thread.Sleep(50);
Log.D(String.Format("SJUartRawSingleSend Send Fail {0:d} > {1:d} : {2:x}, {3:x}, {4:x}", err_retry_cnt, m_iSendReTry_Num, recvPacket[0], recvPacket[1], recvPacket[2]));
if (err_retry_cnt >= m_iSendReTry_Num)
{
rtn = Convert.ToUInt16(ERR_RTN_NOT_OK | (Convert.ToInt32(recvPacket[2]) & 0xff));
break;
}
else
{
err_retry_cnt++;
}
}
}
return rtn;
}
//ushort SJUartRawBurstSend(int addr, ulong[] data, byte data_num, sbyte S_Ioption = 0)
ushort SJUartRawBurstSend<T>(int addr, ref T[] data, byte data_num, sbyte S_Ioption = 0)
{ // by SJ 170213
byte[] StartSignal = new byte[2];
byte[] Option = new byte[4];
byte[] RegAddr = new byte[4];
byte[] Data = new byte[8];
byte Max_ByteUnit = 0, Cur_ByteUnit;
//ulong[] SendData = data;
ulong[] SendData = data as ulong[];
byte[] recvPacket = new byte[3];
byte err_retry_cnt = 0;
uint ByteLength;
ushort rtn;
uint bit_sum = 0;
int i = 0, j = 0;
// m_comm.m_QueueRead.Clear();
if ((0 == data_num) || (255 < data_num)) return ERR_VAL_BURST_DATANUM;
// Data Seq1 : StartSignal
StartSignal[0] = 0x48; // H
StartSignal[1] = 0x51; // P
bit_sum += Convert.ToUInt32(TotalBit_add(ref StartSignal, 2));
// before option check
for (i = 0; i < data_num; i++)
{
if (SendData[i] < 0x100) Cur_ByteUnit = 1;
else if (SendData[i] < 0x10000) Cur_ByteUnit = 2;
else if (SendData[i] < 0x1000000) Cur_ByteUnit = 3;
else if (SendData[i] < 0x100000000) Cur_ByteUnit = 4;
else if (SendData[i] < 0x10000000000) Cur_ByteUnit = 5;
else if (SendData[i] < 0x1000000000000) Cur_ByteUnit = 6;
else if (SendData[i] < 0x100000000000000) Cur_ByteUnit = 7;
else Cur_ByteUnit = 8;
if (Max_ByteUnit < Cur_ByteUnit) Max_ByteUnit = Cur_ByteUnit;
}
ByteLength = 2 + 4 + 4 + (Convert.ToUInt32(Max_ByteUnit) * Convert.ToUInt32(data_num)) + 1 + 1;
// Data Seq2 : Option
if (0 == S_Ioption) Option[0] = 0x49; //'I'
else Option[0] = 0x53; //'S'
Option[1] = Hex2Ascii(Convert.ToByte(data_num & 0x0F)); // data_count LSB
Option[2] = Hex2Ascii(Convert.ToByte((data_num & 0xF0) >> 4)); // data_count MSB
Option[3] = Hex2Ascii(Convert.ToByte(Max_ByteUnit & 0x0F));
bit_sum += Convert.ToUInt32(TotalBit_add(ref Option, 4));
// Data Seq3 : Addr
RegAddr[0] = Hex2Ascii(Convert.ToByte(addr & 0x000F));
RegAddr[1] = Hex2Ascii(Convert.ToByte((addr & 0x00F0) >> 4));
RegAddr[2] = Hex2Ascii(Convert.ToByte((addr & 0x0F00) >> 8));
RegAddr[3] = Hex2Ascii(Convert.ToByte((addr & 0xF000) >> 12));
bit_sum += Convert.ToUInt32(TotalBit_add(ref RegAddr, 4));
// Data Seq4 : DataSeq
for (i = 0; i < data_num; i++)
{
Data[0] = Convert.ToByte(SendData[i] & 0x000000FF); Data[1] = Convert.ToByte((SendData[i] & 0x0000FF00) >> 8);
Data[2] = Convert.ToByte((SendData[i] & 0x00FF0000) >> 16); Data[3] = Convert.ToByte((SendData[i] & 0xFF000000) >> 24);
Data[4] = Convert.ToByte((SendData[i] & 0xFF00000000) >> 32); Data[5] = Convert.ToByte((SendData[i] & 0xFF0000000000) >> 40);
Data[6] = Convert.ToByte((SendData[i] & 0xFF000000000000) >> 48); Data[7] = Convert.ToByte((SendData[i] & 0xFF00000000000000) >> 56);
bit_sum += Convert.ToUInt32(TotalBit_add(ref Data, Max_ByteUnit));
}
// Data Seq5 : EndSignal
byte[] EndSignal = new byte[] { 0x59 }; // Y
bit_sum += Convert.ToUInt32(TotalBit_add(ref EndSignal, 1));
// Data Seq5 : Checksum
// just bit_sum raw data
// CheckSum[0] = Hex2Ascii( (INT8U)(bit_sum & 0x0F) );
// CheckSum[1] = Hex2Ascii( (INT8U)(bit_sum & 0xF0) >> 4 );
// Data Integration
byte[] packet = new byte[ByteLength];
packet[0] = StartSignal[0]; packet[1] = StartSignal[1];
packet[2] = Option[0]; packet[3] = Option[1]; packet[4] = Option[2]; packet[5] = Option[3];
packet[6] = RegAddr[0]; packet[7] = RegAddr[1]; packet[8] = RegAddr[2]; packet[9] = RegAddr[3];
for (i = 0; i < data_num; i++)
{
for (j = 0; j < Max_ByteUnit; j++)
{
switch (j)
{
case 0: packet[10 + i * Max_ByteUnit + j] = Convert.ToByte(SendData[i] & 0x000000FF); break;
case 1: packet[10 + i * Max_ByteUnit + j] = Convert.ToByte((SendData[i] & 0x0000FF00) >> 8); break;
case 2: packet[10 + i * Max_ByteUnit + j] = Convert.ToByte((SendData[i] & 0x00FF0000) >> 16); break;
case 3: packet[10 + i * Max_ByteUnit + j] = Convert.ToByte((SendData[i] & 0xFF000000) >> 24); break;
case 4: packet[10 + i * Max_ByteUnit + j] = Convert.ToByte((SendData[i] & 0xFF00000000) >> 32); break;
case 5: packet[10 + i * Max_ByteUnit + j] = Convert.ToByte((SendData[i] & 0xFF0000000000) >> 40); break;
case 6: packet[10 + i * Max_ByteUnit + j] = Convert.ToByte((SendData[i] & 0xFF000000000000) >> 48); break;
case 7: packet[10 + i * Max_ByteUnit + j] = Convert.ToByte((SendData[i] & 0xFF00000000000000) >> 56); break;
}
}
}
packet[ByteLength - 2] = EndSignal[0];
packet[ByteLength - 1] = Convert.ToByte(bit_sum & 0xFF);
uint RtnWait_Cnt;
while (true)
{
Write(packet);
RtnWait_Cnt = 0;
Thread.Sleep(10);
while (Read(recvPacket) <= 0)
{
Thread.Sleep(10);
RtnWait_Cnt += 10;
if (RtnWait_Cnt > m_iRtnWaitTime_us)
{
Log.D(String.Format("SJUartRawBurstSend Receive Fail {0:d} > {1:d}", RtnWait_Cnt, m_iRtnWaitTime_us));
return ERR_NORESPONSE;
}
};
if ((recvPacket[0] == StartSignal[1]) && (recvPacket[1] == 0x4F) && (recvPacket[2] == 0x4B)) // 'N OK'
{
// rtn = (recvPacket[2] | (recvPacket[1] << 8) | (recvPacket[0] << 16));
rtn = OK_RETURN;
break;
}
else
{
Log.D(String.Format("SJUartRawBurstSend Send Fail {0:d} > {1:d} : {2:x}, {3:x}, {4:x}", err_retry_cnt, m_iSendReTry_Num, recvPacket[0], recvPacket[1], recvPacket[2]));
if (err_retry_cnt >= m_iSendReTry_Num)
{
rtn = Convert.ToUInt16(ERR_RTN_NOT_OK | (Convert.ToInt32(recvPacket[2]) & 0xff));
break;
}
else
{
err_retry_cnt++;
}
}
}
return rtn;
}
//ushort SJUartAsBurstSend(int addr, ulong[] data, byte data_num, sbyte S_Ioption)
ushort SJUartAsBurstSend<T>(int addr, ref T[] data, byte data_num, sbyte S_Ioption = 0)
{ // by SJ 170213
byte[] StartSignal = new byte[2];
byte[] Option = new byte[4];
byte[] RegAddr = new byte[4];
byte[] Data = new byte[16];
byte Max_ByteUnit = 0, Cur_ByteUnit;
//ulong[] SendData = data;
//T[] SendData = (T[])(object)data.Clone();
ulong[] SendData = Array.ConvertAll(data, (obj) => Convert.ToUInt64(obj));
byte[] recvPacket = new byte[3];
byte err_retry_cnt = 0;
uint ByteLength;
ushort rtn;
uint bit_sum = 0;
int i = 0, j = 0;
// m_comm.m_QueueRead.Clear();
if ((0 == data_num) || (255 < data_num)) return ERR_VAL_BURST_DATANUM;
// Data Seq1 : StartSignal
StartSignal[0] = 0x48; // H
StartSignal[1] = 0x50; // P
bit_sum += Convert.ToUInt32(TotalBit_add(ref StartSignal, 2));
// before option check
for (i = 0; i < data_num; i++)
{
if (SendData[i] < 0x10) Cur_ByteUnit = 1;
else if (SendData[i] < 0x100) Cur_ByteUnit = 2;
else if (SendData[i] < 0x1000) Cur_ByteUnit = 3;
else if (SendData[i] < 0x10000) Cur_ByteUnit = 4;
else if (SendData[i] < 0x100000) Cur_ByteUnit = 5;
else if (SendData[i] < 0x1000000) Cur_ByteUnit = 6;
else if (SendData[i] < 0x10000000) Cur_ByteUnit = 7;
else if (SendData[i] < 0x100000000) Cur_ByteUnit = 8;
else if (SendData[i] < 0x1000000000) Cur_ByteUnit = 9;
else if (SendData[i] < 0x10000000000) Cur_ByteUnit = 10;
else if (SendData[i] < 0x100000000000) Cur_ByteUnit = 11;
else if (SendData[i] < 0x1000000000000) Cur_ByteUnit = 12;
else if (SendData[i] < 0x10000000000000) Cur_ByteUnit = 13;
else if (SendData[i] < 0x100000000000000) Cur_ByteUnit = 14;
else if (SendData[i] < 0x1000000000000000) Cur_ByteUnit = 16; //caused by HDL logic
else Cur_ByteUnit = 16;
if (Max_ByteUnit < Cur_ByteUnit) Max_ByteUnit = Cur_ByteUnit;
}
ByteLength = 2 + 4 + 4 + (Convert.ToUInt32(Max_ByteUnit) * Convert.ToUInt32(data_num)) + 1 + 1;
// Data Seq2 : Option
if (0 == S_Ioption) Option[0] = 0x49; //'I'
else Option[0] = 0x53; //'S'
Option[1] = Hex2Ascii(Convert.ToByte(data_num & 0x0F)); // data_count LSB
Option[2] = Hex2Ascii(Convert.ToByte((data_num & 0xF0) >> 4)); // data_count MSB
if (Max_ByteUnit == 16) Option[3] = Hex2Ascii(Convert.ToByte(0x0f & 0x0F));
else Option[3] = Hex2Ascii(Convert.ToByte(Max_ByteUnit & 0x0F));
bit_sum += Convert.ToUInt32(TotalBit_add(ref Option, 4));
// Data Seq3 : Addr
RegAddr[0] = Hex2Ascii(Convert.ToByte(addr & 0x000F));
RegAddr[1] = Hex2Ascii(Convert.ToByte((addr & 0x00F0) >> 4));
RegAddr[2] = Hex2Ascii(Convert.ToByte((addr & 0x0F00) >> 8));
RegAddr[3] = Hex2Ascii(Convert.ToByte((addr & 0xF000) >> 12));
bit_sum += Convert.ToUInt32(TotalBit_add(ref RegAddr, 4));
// Data Seq4 : DataSeq
for (i = 0; i < data_num; i++)
{
Data[0] = Hex2Ascii(Convert.ToByte(SendData[i] & 0x0000000F)); Data[1] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x000000F0) >> 4));
Data[2] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x00000F00) >> 8)); Data[3] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x0000F000) >> 12));
Data[4] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x000F0000) >> 16)); Data[5] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x00F00000) >> 20));
Data[6] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x0F000000) >> 24)); Data[7] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF0000000) >> 28));
Data[8] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x0F00000000) >> 32)); Data[9] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF000000000) >> 36));
Data[10] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x0F0000000000) >> 40)); Data[11] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF00000000000) >> 44));
Data[12] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x0F000000000000) >> 48)); Data[13] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF0000000000000) >> 52));
Data[14] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x0F00000000000000) >> 56)); Data[15] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF000000000000000) >> 60));
bit_sum += Convert.ToUInt32(TotalBit_add(ref Data, Max_ByteUnit));
}
// Data Seq5 : EndSignal
byte[] EndSignal = new byte[] { 0x59 }; // Y
bit_sum += Convert.ToUInt32(TotalBit_add(ref EndSignal, 1));
// Data Seq5 : Checksum
// just bit_sum raw data
// CheckSum[0] = Hex2Ascii( (INT8U)(bit_sum & 0x0F) );
// CheckSum[1] = Hex2Ascii( (INT8U)(bit_sum & 0xF0) >> 4 );
// Data Integration
byte[] packet = new byte[ByteLength];
packet[0] = StartSignal[0]; packet[1] = StartSignal[1];
packet[2] = Option[0]; packet[3] = Option[1]; packet[4] = Option[2]; packet[5] = Option[3];
packet[6] = RegAddr[0]; packet[7] = RegAddr[1]; packet[8] = RegAddr[2]; packet[9] = RegAddr[3];
for (i = 0; i < data_num; i++)
{
for (j = 0; j < Max_ByteUnit; j++)
{
switch (j)
{
case 0: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte(SendData[i] & 0x0000000F)); break;
case 1: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x000000F0) >> 4)); break;
case 2: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x00000F00) >> 8)); break;
case 3: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x0000F000) >> 12)); break;
case 4: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x000F0000) >> 16)); break;
case 5: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x00F00000) >> 20)); break;
case 6: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0x0F000000) >> 24)); break;
case 7: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF0000000) >> 28)); break;
case 8: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF00000000) >> 32)); break;
case 9: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF000000000) >> 36)); break;
case 10: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF0000000000) >> 40)); break;
case 11: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF00000000000) >> 44)); break;
case 12: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF000000000000) >> 48)); break;
case 13: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF0000000000000) >> 52)); break;
case 14: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF00000000000000) >> 56)); break;
case 15: packet[10 + i * Max_ByteUnit + j] = Hex2Ascii(Convert.ToByte((SendData[i] & 0xF000000000000000) >> 60)); break;
}
}
}
packet[ByteLength - 2] = EndSignal[0];
packet[ByteLength - 1] = Convert.ToByte(bit_sum & 0xFF);
uint RtnWait_Cnt;
while (true)
{
Write(packet);
RtnWait_Cnt = 0;
Thread.Sleep(10);
while (Read(recvPacket) <= 0)
{
Thread.Sleep(10);
RtnWait_Cnt += 10;
if (RtnWait_Cnt > m_iRtnWaitTime_us)
{
Log.D(String.Format("SJUartAsBurstSend Receive Fail {0:d} > {1:d}", RtnWait_Cnt, m_iRtnWaitTime_us));
return ERR_NORESPONSE;
}
};
if ((recvPacket[0] == StartSignal[1]) && (recvPacket[1] == 0x4F) && (recvPacket[2] == 0x4B)) // 'N OK'
{
// rtn = (recvPacket[2] | (recvPacket[1] << 8) | (recvPacket[0] << 16));
rtn = OK_RETURN;
break;
}
else
{
Log.D(String.Format("SJUartAsBurstSend Send Fail {0:d} > {1:d} : {2:x}, {3:x}, {4:x}", err_retry_cnt, m_iSendReTry_Num, recvPacket[0], recvPacket[1], recvPacket[2]));
if (err_retry_cnt >= m_iSendReTry_Num)
{
rtn = Convert.ToUInt16(ERR_RTN_NOT_OK | (Convert.ToInt32(recvPacket[2]) & 0xff));
break;
}
else
{
err_retry_cnt++;
}
}
}
return rtn;
}
//ushort SJUartBurstSend(int addr, ulong[] data, byte data_num, sbyte mode, sbyte S_Ioption)
ushort SJUartBurstSend<T>(int addr, ref T[] data, byte data_num, sbyte mode, sbyte S_Ioption = 0)
{ // by SJ 170213
ushort rtn = 0;
if (0 == mode) rtn = SJUartAsBurstSend(addr, ref data, data_num, S_Ioption);
else if (1 == mode) rtn = SJUartRawBurstSend(addr, ref data, data_num, S_Ioption);
// if ((DebugMode >= 2) && (NULL != Connected_COM))
// {
// // CStringA Tmp;
// // Tmp.Format("Burst Send 64Bit : Addr 0x%x ~ %x / DataNum %d / RAW mode %d / SI_option %d : rtn %x", addr, addr+data_num, data_num, mode, S_Ioption, rtn);
// // Put_DataLog(Tmp, (__int64*)data, data_num, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
// string temp;
// temp = formatA("Burst Send 64Bit : Addr 0x%x ~%x / DataNum %d / RAW mode %d / SI_option %d : rtn %x", addr, addr + data_num, data_num, mode, S_Ioption, rtn);
// Put_DataLog(temp, (__int64*)data, data_num, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
// }
return rtn;
}
//ushort SJUartRawSingleRecv(int addr, out ulong data)
ushort SJUartRawSingleRecv<T>(int addr, ref T data)
{ // by SJ 170906
byte[] StartSignal = new byte[2];
byte[] RegAddr = new byte[4];
byte[] EndSignal = new byte[1];
byte[] recvPacket = new byte[20];
byte err_retry_cnt = 0;
ushort rtn;
uint Rbit_sum = 0;
ushort Rtn_ByteLength;
ushort Rtn_UnitByte;
ulong Rtn_Data = 0;
Rtn_UnitByte = 8;
Rtn_ByteLength = Convert.ToUInt16(Rtn_UnitByte * 1 + 1 + 3); // data + checksum + 3 rtn byte;
uint bit_sum = 0;
int i = 0;
// Data Seq1 : StartSignal
StartSignal[0] = 0x48; // H
StartSignal[1] = 0x53; // S
bit_sum += Convert.ToUInt32(TotalBit_add(ref StartSignal, 2));
// Data Seq2 : Option (skip)
// Data Seq3 : Addr
RegAddr[0] = Hex2Ascii(Convert.ToByte(addr & 0x000F));
RegAddr[1] = Hex2Ascii(Convert.ToByte((addr & 0x00F0) >> 4));
RegAddr[2] = Hex2Ascii(Convert.ToByte((addr & 0x0F00) >> 8));
RegAddr[3] = Hex2Ascii(Convert.ToByte((addr & 0xF000) >> 12));
bit_sum += Convert.ToUInt32(TotalBit_add(ref RegAddr, 4));
// Data Seq4 : DataSeq
// Data Seq5 : EndSignal
EndSignal[0] = 0x59; // Y
bit_sum += Convert.ToUInt32(TotalBit_add(ref EndSignal, 1));
// Data Seq5 : Checksum
// just 'bit_sum' raw data
// Data Integration
byte[] packet = new byte[2 + 4 + 1 + 1];
packet[0] = StartSignal[0]; packet[1] = StartSignal[1];
packet[2] = RegAddr[0]; packet[3] = RegAddr[1]; packet[4] = RegAddr[2]; packet[5] = RegAddr[3];
packet[6] = EndSignal[0];
packet[7] = Convert.ToByte(bit_sum);
// m_comm.WriteComm(&packet[0], 8); // temporal
uint RtnWait_Cnt;
while (true)
{
Write(packet);
Rbit_sum = 0; // recv checksum initial
RtnWait_Cnt = 0;
Thread.Sleep(10);
while (Read(recvPacket) <= 0) // <HairPinTwister> while (ReadMessage(recvPacket, Rtn_ByteLength, 200)< Rtn_ByteLength) {
{
Thread.Sleep(10);
RtnWait_Cnt += 10;
if (RtnWait_Cnt > m_iRtnWaitTime_us)
{
Log.D(String.Format("SJUartRawSingleRecv Receive Fail {0:d} > {1:d}", RtnWait_Cnt, m_iRtnWaitTime_us));
return ERR_NORESPONSE;
}
};
if ((recvPacket[3] == StartSignal[1]) && ((recvPacket[4] == 0x54) | (recvPacket[5] == 0x58) | (recvPacket[2] == 0x53) | (recvPacket[2] == 0x57)))
{
Log.D(String.Format("SJUartRawSingleRecv Receive Fail {0:x}, {1:x}, {2:x}, {3:x}", recvPacket[3], recvPacket[4], recvPacket[5], recvPacket[2]));
return Convert.ToUInt16((ERR_RTN_NOT_OK | (recvPacket[2] & 0xff)));
}
for (i = 0; i < Rtn_ByteLength - 4; i++)
{
byte[] temppacket = { recvPacket[i] };
Rbit_sum += Convert.ToUInt16(TotalBit_add(ref temppacket, 1));
}
if ((recvPacket[Rtn_ByteLength - 3] == StartSignal[1]) && (recvPacket[Rtn_ByteLength - 2] == 0x4F) && (recvPacket[Rtn_ByteLength - 1] == 0x4B) && ((Rbit_sum & 0xff) == recvPacket[Rtn_ByteLength - 4])) // 'T OK'
{
// rtn = (recvPacket[2] | (recvPacket[1] << 8) | (recvPacket[0] << 16));
for (i = 0; i < Rtn_UnitByte; i++)
Rtn_Data |= (Convert.ToUInt64(recvPacket[i]) << (i * 8));
//data = Rtn_Data;
data = (T)Convert.ChangeType(Rtn_Data, typeof(T));
rtn = OK_RETURN;
break;
}
else
{
Log.D(String.Format("SJUartRawSingleRecv Receive Fail {0:d} > {1:d} : {2:x}, {3:x}, {4:x}, {5:x}", err_retry_cnt, m_iSendReTry_Num, recvPacket[Rtn_ByteLength - 3], recvPacket[Rtn_ByteLength - 2], recvPacket[Rtn_ByteLength - 1], recvPacket[Rtn_ByteLength - 4]));
if (err_retry_cnt == m_iSendReTry_Num)
{
if ((Rbit_sum & 0xff) != recvPacket[Rtn_ByteLength - 4])
{
rtn = Convert.ToUInt16(ERR_RTN_CHECKSUM | (recvPacket[Rtn_ByteLength - 4] & 0xff));
}
else
{
rtn = Convert.ToUInt16(ERR_RTN_NOT_OK | (recvPacket[Rtn_ByteLength - 1] & 0xff));
}
break;
}
else
{
err_retry_cnt++;
}
}
}
return rtn;
}
//ushort SJUartAsSingleRecv(int addr, ref ulong data)
ushort SJUartAsSingleRecv<T>(int addr, ref T data)
{ // by SJ 170210
// Recv only raw mode 170905
return ERR_NOT_DEVELOPED_YET;
}
//ushort SJUartSingleRecv(int addr, out ulong data, sbyte mode = 1)
ushort SJUartSingleRecv<T>(int addr, ref T data, sbyte mode = 1)
{ // by SJ 170906
ushort rtn = 0;
if (mode == 0) rtn = SJUartAsSingleRecv(addr, ref data);
else rtn = SJUartRawSingleRecv(addr, ref data);
//if ((DebugMode >= 2) && (NULL != Connected_COM))
//{
// // CStringA Tmp;
// // Tmp.Format("Single Recv 64Bit : Addr 0x%x / RAW mode %d / Data 0x%I64x: rtn %x\r\n ", addr, mode, *data, rtn); Put_Log(Tmp, *Connected_COM);
// string temp;
// temp = formatA("Single Recv 64Bit : Addr 0x%x / RAW mode %d / Data 0x%I64x: rtn %x\r\n ", addr, mode, *data, rtn); Put_Log(temp, *Connected_COM);
//}
if ((DebugMode >= 2) && (IsConnected() == true)) Log.D(String.Format("Single Recv 64Bit : Addr 0x{0:x} / RAW mode {1:d} / Data 0x{2:x}: rtn {3:x} ", addr, mode, data, rtn));
return rtn;
}
//ushort SJUartRawBurstRecv(int addr, ulong[] data, byte data_num, sbyte S_Ioption = 0)
ushort SJUartRawBurstRecv<T>(int addr, ref T[] data, byte data_num, sbyte S_Ioption = 0)
{ // by SJ 170907
byte[] StartSignal = new byte[2];
byte[] Option = new byte[4];
byte[] RegAddr = new byte[4];
byte[] Data = new byte[8]; // 4 * data length
byte Max_ByteUnit = 0;
byte[] recvPacket = new byte[2050];
byte err_retry_cnt = 0;
uint ByteLength;
ushort rtn;
uint Rbit_sum = 0;
ushort Rtn_ByteLength;
ushort Rtn_UnitByte;
// INT32U Rtn_Data = 0;
ulong Rtn_Data = 0;
Rtn_UnitByte = 8;
Rtn_ByteLength = Convert.ToUInt16(Rtn_UnitByte * data_num + 1 + 3); // data*read_cnt + checksum + 3 rtn byte;
uint bit_sum = 0;
int i = 0, j = 0;
if ((0 == data_num) || (255 < data_num)) return ERR_VAL_BURST_DATANUM;
// m_comm.m_QueueRead.Clear();
// Data Seq1 : StartSignal
StartSignal[0] = 0x48; // H
StartSignal[1] = 0x52; // N
bit_sum += Convert.ToUInt32(TotalBit_add(ref StartSignal, 2));
ByteLength = 2 + 4 + 4 + 1 + 1;
// Data Seq2 : Option
if (0 == S_Ioption) Option[0] = 0x49; //'I'
else Option[0] = 0x53; //'S'
Option[1] = Hex2Ascii(Convert.ToByte(data_num & 0x0F));
Option[2] = Hex2Ascii(Convert.ToByte((data_num & 0xF0) >> 4));
Option[3] = Hex2Ascii(Convert.ToByte(8 & 0x0F)); // Raw type 32bit
bit_sum += Convert.ToUInt32(TotalBit_add(ref Option, 4));
// Data Seq3 : Addr
RegAddr[0] = Hex2Ascii(Convert.ToByte(addr & 0x000F));
RegAddr[1] = Hex2Ascii(Convert.ToByte((addr & 0x00F0) >> 4));
RegAddr[2] = Hex2Ascii(Convert.ToByte((addr & 0x0F00) >> 8));
RegAddr[3] = Hex2Ascii(Convert.ToByte((addr & 0xF000) >> 12));
bit_sum += Convert.ToUInt32(TotalBit_add(ref RegAddr, 4));
// Data Seq4 : DataSeq
// Data Seq5 : EndSignal
byte[] EndSignal = new byte[] { 0x59 }; // Y
bit_sum += Convert.ToUInt32(TotalBit_add(ref EndSignal, 1));
// Data Seq5 : Checksum
// just bit_sum raw data
// CheckSum[0] = Hex2Ascii( (INT8U)(bit_sum & 0x0F) );
// CheckSum[1] = Hex2Ascii( (INT8U)(bit_sum & 0xF0) >> 4 );
// Data Integration
byte[] packet = new byte[ByteLength];
packet[0] = StartSignal[0]; packet[1] = StartSignal[1];
packet[2] = Option[0]; packet[3] = Option[1]; packet[4] = Option[2]; packet[5] = Option[3];
packet[6] = RegAddr[0]; packet[7] = RegAddr[1]; packet[8] = RegAddr[2]; packet[9] = RegAddr[3];
packet[ByteLength - 2] = EndSignal[0];
packet[ByteLength - 1] = Convert.ToByte(bit_sum & 0xFF);
uint RtnWait_Cnt;
while (true)
{
Write(packet, Convert.ToInt32(ByteLength));
Rbit_sum = 0; // recv checksum initial
RtnWait_Cnt = 0;
Thread.Sleep(10);
while (Read(recvPacket) <= 0) // <HairPinTwister> while (ReadMessage(recvPacket, Rtn_ByteLength, 200)< Rtn_ByteLength) {
{
Thread.Sleep(10);
RtnWait_Cnt += 10;
if (RtnWait_Cnt > m_iRtnWaitTime_us)
{
Log.D(String.Format("SJUartRawSingleRecv Receive Fail {0:d} > {1:d}", RtnWait_Cnt, m_iRtnWaitTime_us));
return ERR_NORESPONSE;
}
};
if ((recvPacket[3] == StartSignal[1]) && ((recvPacket[4] == 0x54) | (recvPacket[5] == 0x58) | (recvPacket[2] == 0x53) | (recvPacket[2] == 0x57)))
{
Log.D(String.Format("SJUartRawBurstRecv Receive Fail {0:x}, {1:x}, {2:x}, {3:x}", recvPacket[3], recvPacket[4], recvPacket[5], recvPacket[2]));
return Convert.ToUInt16((ERR_RTN_NOT_OK | (recvPacket[2] & 0xff)));
}
for (i = 0; i < Rtn_ByteLength - 4; i++)
{
byte[] temppacket = { recvPacket[i] };
Rbit_sum += Convert.ToUInt16(TotalBit_add(ref temppacket, 1));
}
if ((recvPacket[Rtn_ByteLength - 3] == StartSignal[1]) && (recvPacket[Rtn_ByteLength - 2] == 0x4F) && (recvPacket[Rtn_ByteLength - 1] == 0x4B) && ((Rbit_sum & 0xff) == recvPacket[Rtn_ByteLength - 4])) // 'T OK'
{
for (j = 0; j < data_num; j++)
{
for (i = 0; i < Rtn_UnitByte; i++)
{
// Rtn_Data |= (recvPacket[(j * 4) + i] << (i * 8));
Rtn_Data |= (Convert.ToUInt64(recvPacket[(j * 8) + i]) << (i * 8));
}
//data[j] = Rtn_Data;
data[j] = (T)Convert.ChangeType(Rtn_Data, typeof(T));
Rtn_Data = 0;
}
rtn = OK_RETURN;
break;
}
else
{
Log.D(String.Format("SJUartRawBurstRecv Receive Fail {0:d} > {1:d} : {2:x}, {3:x}, {4:x}, {5:x}", err_retry_cnt, m_iSendReTry_Num, recvPacket[Rtn_ByteLength - 3], recvPacket[Rtn_ByteLength - 2], recvPacket[Rtn_ByteLength - 1], recvPacket[Rtn_ByteLength - 4]));
if (err_retry_cnt == m_iSendReTry_Num)
{
if ((Rbit_sum & 0xff) != recvPacket[Rtn_ByteLength - 4])
rtn = Convert.ToUInt16((ERR_RTN_CHECKSUM | (recvPacket[Rtn_ByteLength - 4] & 0xff)));
else
rtn = Convert.ToUInt16((ERR_RTN_NOT_OK | (recvPacket[Rtn_ByteLength - 1] & 0xff)));
break;
}
else
{
err_retry_cnt++;
}
}
}
return rtn;
}
//ushort SJUartAsBurstRecv(int addr, ulong[] data, byte data_num, sbyte S_Ioption)
ushort SJUartAsBurstRecv<T>(int addr, ref T[] data, byte data_num, sbyte S_Ioption = 0)
{ // by SJ 170307
return ERR_NOT_DEVELOPED_YET;
}
//ushort SJUartBurstRecv(int addr, ulong[] data, byte data_num, sbyte mode = 1, sbyte S_Ioption = 0)
ushort SJUartBurstRecv<T>(int addr, ref T[] data, byte data_num, sbyte mode = 1, sbyte S_Ioption = 0)
{ // by SJ 170906
ushort rtn = 0;
if (mode == 0) rtn = SJUartAsBurstRecv(addr, ref data, data_num, S_Ioption);
else rtn = SJUartRawBurstRecv(addr, ref data, data_num, S_Ioption);
// if ((DebugMode >= 2) && (null != Connected_COM))
// {
// CStringA Tmp;
// Tmp.Format("Burst Recv 64Bit : Addr 0x%x ~ %x / DataNum %d / RAW mode %d / SI_option %d : rtn %x", addr, addr + data_num, data_num, mode, S_Ioption, rtn);
// Put_DataLog(Tmp, (__int64*)data, data_num, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
// string temp;
// temp = formatA("Burst Recv 64Bit : Addr 0x%x ~ %x / DataNum %d / RAW mode %d / SI_option %d : rtn %x", addr, addr + data_num, data_num, mode, S_Ioption, rtn);
// Put_DataLog(temp, (__int64*)data, data_num, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
// }
return rtn;
}
public short GetSJTVersion(out string HwVer, out string tcstr)
{
ushort rtn = 0;
ulong[] data = new ulong[2];
char[] tmp_hwver = new char[16];
//rtn = SJUartBurstRecv(SJT_HW_FW_VER, data, 2);
rtn = SJUartBurstRecv<ulong>(SJT_HW_FW_VER, ref data, 2);
if (0 == rtn)
{
// HW_Ver = data[0];
// BUILDSTAMP = data[1] & 0xffffffff;
string str = "";
str += (char)((data[0] >> 0) & 0x0ff);
str += (char)((data[0] >> 8) & 0x0ff);
str += (char)((data[0] >> 16) & 0x0ff);
str += (char)((data[0] >> 24) & 0x0ff);
str += (char)((data[0] >> 32) & 0x0ff);
str += (char)((data[0] >> 40) & 0x0ff);
str += (char)((data[0] >> 48) & 0x0ff);
str += (char)((data[0] >> 56) & 0x0ff);
//str = string.Join(str, (char)((data[0] >> 0) & 0x0ff));
//str = string.Join(str, (char)((data[0] >> 8) & 0x0ff));
//str = string.Join(str, (char)((data[0] >> 16) & 0x0ff));
//str = string.Join(str, (char)((data[0] >> 24) & 0x0ff));
//str = string.Join(str, (char)((data[0] >> 32) & 0x0ff));
//str = string.Join(str, (char)((data[0] >> 40) & 0x0ff));
//str = string.Join(str, (char)((data[0] >> 48) & 0x0ff));
//str = string.Join(str, (char)((data[0] >> 56) & 0x0ff));
HwVer = str;
/* *HwVer = (char)((data[0] >> 0) & 0x0ff); tmp_hwver[0] = *HwVer++;
*HwVer = (char)((data[0] >> 8) & 0x0ff); tmp_hwver[1] = *HwVer++;
*HwVer = (char)((data[0] >> 16) & 0x0ff); tmp_hwver[2] = *HwVer++;
*HwVer = (char)((data[0] >> 24) & 0x0ff); tmp_hwver[3] = *HwVer++;
*HwVer = (char)((data[0] >> 32) & 0x0ff); tmp_hwver[4] = *HwVer++;
*HwVer = (char)((data[0] >> 40) & 0x0ff); tmp_hwver[5] = *HwVer++;
*HwVer = (char)((data[0] >> 48) & 0x0ff); tmp_hwver[6] = *HwVer++;
*HwVer = (char)((data[0] >> 56) & 0x0ff); tmp_hwver[7] = *HwVer++;
*HwVer = 0; tmp_hwver[8] = *HwVer;*/
TIMECNT tc;
IDENTIFY_FLAG = Convert.ToUInt32(((data[1] & 0xffffffff00000000) >> 32));
tc.day = Convert.ToSByte(((data[1] & 0xf8000000) >> 27) & 0xff);
tc.month = Convert.ToSByte(((data[1] & 0x07800000) >> 23) & 0xff);
tc.year = Convert.ToSByte(((data[1] & 0x007e0000) >> 17) & 0xff);
tc.hour = Convert.ToSByte(((data[1] & 0x0001f000) >> 12) & 0xff);
tc.minute = Convert.ToSByte(((data[1] & 0x00000fc0) >> 6) & 0xff);
tc.seconds = Convert.ToSByte((data[1] & 0x0000003f) & 0xff);
tcstr = string.Format("{0:d2}{1:d2}{2:d2}_{3:d2}{4:d2}", tc.year, tc.month, tc.day, tc.hour, tc.minute);
if (IDENTIFY_FLAG == 0x1a3c5e7f)
{
if ((DebugMode != 0) && (IsConnected() == true)) Log.D("HW_Ver : " + str + "BUILDSTAMP : " + tcstr);
return Convert.ToInt16(rtn);
}
else
{
return 1;
}
}
else
{
HwVer = "";
tcstr = "";
return -1;
}
}
public ushort GetSJT_DLL_Ver(ref char[] DllVer)
{
string str;
#if DEBUG
#if WIN64
str = "_64D";
#else
str = "_86D";
#endif
#else //#ifdef _DEBUG --> Release
#if WIN64
str = "_64R";
#else
str = "_86R";
#endif
#endif
str = DLL_TIME + str;
DllVer = str.ToCharArray();
if ((DebugMode != 0) && (IsConnected() == true)) Log.D("SJT_SDK Get Dll Version : " + str);
return 1;
}
public ushort SetTrigTimerSeq(uint timerfreq_100ns, sbyte mode = 0)
{
ushort rtn = 0;
uint[] RcvTmpt = new uint[3];
uint GenMode, OutMode, data_num;
ulong[] SendData = new ulong[5] { 0, 0, 0, 0, 0 };
// FPGA Calc condition check Start//
//genmode outmode check
//support check
// rtn = SJUartRawSingleRecv(SJT_TRIG_GEN_OUT_MODE, &Check_Cur_Mode);
rtn = SJUartRawBurstRecv<uint>(SJT_TRIG_GEN_OUT_MODE, ref RcvTmpt, 2);
if (rtn != OK_RETURN) return ERR_NOT_DEVELOPED_YET;
GenMode = RcvTmpt[0] & 0xf; OutMode = (RcvTmpt[0] >> 16) & 0x7f;
RcvTmpt[1] = RcvTmpt[1] & 0xffff;
if (((0 == GenMode) || (3 == GenMode)) && ((2 == OutMode) || (3 == OutMode)) && (1912 == RcvTmpt[1]))
{
// FPGA CALC Code
SendData[0] = 1; //FCalc_Mode_Set
SendData[1] = 1; // FCalc_Enc_Start
SendData[2] = 1; // FCalc_Enc_Interval
SendData[3] = 0; // FCalc_Enc_Iteration 0 : Infinite
SendData[4] = 0; // FCalc_WD_Sel
data_num = 5;
rtn = SJUartRawBurstSend<ulong>(SJT_FPGA_CALC_MODE_SET, ref SendData, (byte)data_num);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// for (i = 0; i < data_num; i++) Tmp_TrigSet[i] = (__int64)SendData[i]; // for debug;
// Tmp.Format("Trigger GenMode 0 Trigger Set Setting : Set Num %d : rtn %x / rtn1 %x", NumberOfTrigSet, rtn, rtn1);
// Put_DataLog(Tmp, (__int64*)Tmp_TrigSet, data_num, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
Log.D(String.Format("Trigger GenMode 3 (FPGA Calc Ver) running : rtn {0:x}", rtn));
}
}
// FPGA Calc condition check End//
else
if (timerfreq_100ns < TRIG_FREQ_MIN) return ERR_VAL_TRIG_FREQ;
if (0 == mode) rtn = SJUartAsSingleSend(SJT_TRIG_TIMER_FREQ, timerfreq_100ns);
else if (1 == mode) rtn = SJUartRawSingleSend(SJT_TRIG_TIMER_FREQ, timerfreq_100ns);
if ((DebugMode == 1) && (true != IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Trigger GenMode 3 Timer Setting %d00ns : rtn %x \r\n", timerfreq_100ns, rtn); Put_Log(Tmp, *Connected_COM);
string temp;
Log.D(String.Format("Trigger GenMode 3 Timer Setting {0:d}00ns : rtn {1:x}", timerfreq_100ns, rtn));
}
return rtn;
//Timer reference count frequency = (1sec / (1us*timerfreq))
}
public ushort SetTrigTimerSeq(double timerfreq_us, sbyte mode = 0)
{
ushort rtn = 0;
uint timerfreq_10ns;
timerfreq_10ns = (uint)(timerfreq_us * 100);
rtn = SetTrigTimerSeq(timerfreq_10ns, mode);
return rtn;
//Timer reference count frequency = (1sec / (1us*timerfreq))
}
public ushort RunTrigTimerMode(sbyte mode = 0)
{
// unsigned short data=0;
uint data = 0;
byte TrigMode; // 0 bit : Enc Mode(1) / Timer (0)
// unsigned char DisplayMode; // 1 bit : Trigger Count Display (1) / Enc count Display(0)
// unsigned char Reset; // 2 bit
byte CntClear; // 3 bit : Counter Clear(1)
// unsigned char TrigEncModOut_Enable; // 4 bit : Trig out Enable(1) / Disable(0)
byte TrigTimerModOut_Enable; // 5bit : Trig out Timer Enable(1) / Disable(0)
byte VitualEnc_Enable; // 6 bit : VitualEnc input enable(1) / TrigMode must be Enc mode(1)
byte VitualEncinput; // 7 bit : (1)가상 Enc Input A,B상 교차입력(역방향) / (0)가상 Enc Input A,B상 정상입력(정방향)
// unsigned char Encoder_start; // 15 bit : 1 ? Encoder Start
ushort rtn = 0;
TrigMode = 0;
CntClear = 0;
TrigTimerModOut_Enable = 1;
VitualEnc_Enable = 0; VitualEncinput = 0;
data = Convert.ToUInt32((TrigMode & 0x1) |
// ((DisplayMode & 0x1 ) << 1 ) |
// ((Reset & 0x1) << 2 ) |
((CntClear & 0x1) << 3) |
// ((TrigEncModOut_Enable & 0x1) << 4 ) |
((TrigTimerModOut_Enable & 0x1) << 5) |
((VitualEnc_Enable & 0x1) << 6) |
((VitualEncinput & 0x1) << 7));
// ((Encoder_start & 0x1) << 15);
rtn = SetTrigOutEnable(false);
rtn = SetFNDMode(1);
rtn = SJUartAsSingleSend(SJT_TRIGSTATUS, data);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Run Trigger Timer Mode / TrigMode %d / CntClear %d / TrigTimerModOut_Enable %d / VitualEnc_Enable %d / VitualEncinput %d : rtn %x \r\n", TrigMode, CntClear, TrigTimerModOut_Enable, VitualEnc_Enable, VitualEncinput, rtn);
// Put_Log(Tmp, *Connected_COM);
// <HairPinTwister> Log.D(String.Format("Run Trigger Timer Mode / TrigMode {0:d} / CntClear {1:d} / TrigTimerModOut_Enable {2:d} / VitualEnc_Enable {3:d} / VitualEncinput {5:d} : rtn {6:x}", TrigMode, CntClear, TrigTimerModOut_Enable, VitualEnc_Enable, VitualEncinput, rtn));
Log.D(String.Format("Run Trigger Timer Mode / TrigMode {0:d} / CntClear {1:d} / TrigTimerModOut_Enable {2:d} / VitualEnc_Enable {3:d} / VitualEncinput {4:d} : rtn {5:x}", TrigMode, CntClear, TrigTimerModOut_Enable, VitualEnc_Enable, VitualEncinput, rtn));
}
return rtn;
}
ushort SetTrigPulse_(uint trigpulse, sbyte mode = 0)
{
ushort rtn = 0;
if (0 == mode) rtn = SJUartAsSingleSend(SJT_TRIGPULSEWIDTH, trigpulse);
else if (1 == mode) rtn = SJUartRawSingleSend(SJT_TRIGPULSEWIDTH, trigpulse);
if ((DebugMode >= 2) && (true == IsConnected()))
{
//CStringA Tmp;
//Tmp.Format("Single Send 32Bit : Addr 0x%x / RAW mode %d / Data 0x%x: rtn %x \r\n", SJT_TRIGPULSEWIDTH, mode, trigpulse, rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Single Send 32Bit : Addr 0x{0:x} / RAW mode {1:d} / Data 0x{2:x}: rtn {3:x}", SJT_TRIGPULSEWIDTH, mode, trigpulse, rtn));
}
return rtn;
}
public ushort SetTrigPulse(uint trigpulse_us, sbyte mode = 0)
{
ushort rtn = 0;
if ((trigpulse_us < TRIG_PULSEWIDTH_MIN) || (trigpulse_us > TRIG_PULSEWIDTH_MAX)) return ERR_VAL_TRIG_PULSEWIDTH;
else
{
m_iTrigPulseWidth_us = trigpulse_us;
rtn = SetTrigPulse_(m_iTrigPulseWidth_us, mode);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Set Trigger pulse (Generation signal) %d us / RAW mode %d : rtn %x \r\n", trigpulse_us, mode, rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Set Trigger pulse (Generation signal) {0:d} us / RAW mode {1:d} : rtn {2:x}", trigpulse_us, mode, rtn));
}
return rtn;
}
}
public ushort GetTrigPulse(ref uint trigpulse_us) { return ERR_NOT_DEVELOPED_YET; }
public ushort SetEncDirection(uint EncDirection)
{
ushort rtn = 0;
if (EncDirection > 1) return ERR_VAL_ENC_DIRECTION;
rtn = SJUartRawSingleSend(SJT_ENC_DIRECTION, EncDirection);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Enc Direction Set %d : rtn %x \r\n", EncDirection, rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Enc Direction Set {0:d} : rtn {1:x}", EncDirection, rtn));
}
return rtn;
}
public ushort GetEncDirection(ref uint EncDirection)
{
ushort rtn = 0;
rtn = SJUartSingleRecv(SJT_TRIG_CNT, ref EncDirection);
return rtn;
}
public ushort SetFNDMode(byte FND_Mode, sbyte mode = 0)
{
uint data = 0;
ushort rtn = 0;
data = Convert.ToUInt32(0xff & FND_Mode);
rtn = SJUartAsSingleSend(SJT_FND_CHANGE, data);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("FNDMode Change: rtn %x \r\n", FND_Mode, rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("FNDMode Change: rtn {0:x}", FND_Mode, rtn));
}
return rtn;
}
// INT16U EncoderWrapper::GetTrigNErrCnt(unsigned int* TrigCount, unsigned int* ErrCount)
// {
// INT16U rtn = 0;
// unsigned __int64 Tmp_Cur_EncCnt[17];
// rtn = SJUartRawBurstRecv(SJT_TRIG_CNT, &Tmp_Cur_EncCnt[0], 17);
// if (0 == rtn)
// {
// TrigCount[0] = (unsigned int)Tmp_Cur_EncCnt[0];
// for (int i = 1; i < 17; i++)
// {
// TrigCount[i] = (unsigned int)(Tmp_Cur_EncCnt[i] >> 32);
// ErrCount[i - 1] = (unsigned int)(Tmp_Cur_EncCnt[i] & 0xffffffff);
// }
// }
// else return rtn;
// if ((DebugMode == 1) && (NULL != Connected_COM)) {
//// CStringA Tmp;
//// Tmp.Format("Get Trigger Count : Total : %d : rtn %x", TrigCount[0], rtn);
//// Put_DataLog(Tmp, (int*)&TrigCount[1], 16, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
//// Tmp.Format("Get Each Channel Error Count : rtn %x", rtn);
//// Put_DataLog(Tmp, (int*)&ErrCount[0], 16, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
// string temp;
// temp = formatA("Get Trigger Count : Total : %d : rtn %x", TrigCount[0], rtn);
// Put_DataLog(temp, (int*)&TrigCount[1], 16, DATA_WR_TYPE_DEC_WRITE, * Connected_COM);
// temp = formatA("Get Each Channel Error Count : rtn %x", rtn);
// Put_DataLog(temp, (int*)&ErrCount[0], 16, DATA_WR_TYPE_DEC_WRITE, * Connected_COM);
// }
// return rtn;
//}
public ushort GetTrigNErrCnt(uint[] TrigCount, uint[] ErrCount, float[] MaxFreq)
{
ushort rtn = 0;
ulong[] Tmp_Cur_EncCnt = new ulong[21];
int i = 0;
uint[] temp_ = Enumerable.Repeat<uint>(1, 16).ToArray<uint>();
// rtn = SJUartRawBurstRecv(SJT_TRIG_CNT, &Tmp_Cur_EncCnt[0], 17);
//rtn = SJUartRawBurstRecv(SJT_TRIG_CNT, Tmp_Cur_EncCnt, 21);
rtn = SJUartRawBurstRecv<ulong>(SJT_TRIG_CNT, ref Tmp_Cur_EncCnt, 21);
if (0 == rtn)
{
TrigCount[0] = Convert.ToUInt32(Tmp_Cur_EncCnt[0]);
for (i = 1; i < 17; i++)
{
TrigCount[i] = Convert.ToUInt32(Tmp_Cur_EncCnt[i] >> 32);
ErrCount[i - 1] = Convert.ToUInt32(Tmp_Cur_EncCnt[i] & 0xffffffff);
}
for (i = 0; i < 4; i++)
{
temp_[4 * i + 0] = Convert.ToUInt32(Tmp_Cur_EncCnt[i + 17] & Convert.ToUInt32(0xffff));
temp_[4 * i + 1] = Convert.ToUInt32((Tmp_Cur_EncCnt[i + 17] >> 16) & Convert.ToUInt32(0xffff));
temp_[4 * i + 2] = Convert.ToUInt32((Tmp_Cur_EncCnt[i + 17] >> 32) & Convert.ToUInt32(0xffff));
temp_[4 * i + 3] = Convert.ToUInt32((Tmp_Cur_EncCnt[i + 17] >> 48) & Convert.ToUInt32(0xffff));
/* if ((unsigned int)(Tmp_Cur_EncCnt[i + 17] & (unsigned int)0xffff) == 0xfffe) MaxFreq[i * 4 + 0] = 0.0;
else MaxFreq[i * 4 + 0] = 100000 / (unsigned int)(Tmp_Cur_EncCnt[i + 17] & (unsigned int)0xffff);
if ((unsigned int)((Tmp_Cur_EncCnt[i + 17] >> 16) & (unsigned int)0xffff) == 0xfffe) MaxFreq[i * 4 + 1] = 0.0;
else MaxFreq[i * 4 + 1] = 100000 / (unsigned int)((Tmp_Cur_EncCnt[i + 17] >> 16) & (unsigned int)0xffff);
if ((unsigned int)((Tmp_Cur_EncCnt[i + 17] >> 32) & (unsigned int)0xffff) == 0xfffe) MaxFreq[i * 4 + 2] = 0.0;
else MaxFreq[i * 4 + 2] = 100000 / (unsigned int)((Tmp_Cur_EncCnt[i + 17] >> 32) & (unsigned int)0xffff);
if ((unsigned int)((Tmp_Cur_EncCnt[i + 17] >> 48) & (unsigned int)0xffff) == 0xfffe) MaxFreq[i * 4 + 3] = 0.0;
else MaxFreq[i * 4 + 3] = 100000 / (unsigned int)((Tmp_Cur_EncCnt[i + 17] >> 48) & (unsigned int)0xffff);*/
}
for (i = 0; i < 16; i++)
{
if (temp_[i] == 0xfffe) MaxFreq[i] = (float)0.0;
else
{
if (temp_[i] != 0) MaxFreq[i] = (float)100000 / temp_[i];
else MaxFreq[i] = (float)0.0;
}
}
}
else return rtn;
//if (DebugMode == 1)
//{
// // CStringA Tmp;
// // Tmp.Format("Get Trigger Count : Total : %d : rtn %x", TrigCount[0], rtn);
// // Put_DataLog(Tmp, (int*)&TrigCount[1], 16, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
// // Tmp.Format("Get Each Channel Error Count : rtn %x", rtn);
// // Put_DataLog(Tmp, (int*)&ErrCount[0], 16, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
// string temp;
// temp = formatA("Get Trigger Count : Total : %d : rtn %x", TrigCount[0], rtn);
// Put_DataLog(temp, (int*)&TrigCount[1], 8, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
// temp = formatA("Get Each Channel Error Count : rtn %x", rtn);
// Put_DataLog(temp, (int*)&ErrCount[0], 8, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
// temp = formatA("Get Each Channel Trigger Out Max Frequency : rtn %x (Unit:10 ns)", rtn);
// Put_DataLog(temp, (int*)&temp_[0], 8, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
//}
return rtn;
}
public ushort TrigCount_Reset()
{
ushort rtn = 0;
rtn = SJT_Reset(false, false, true, false, false);
//if ((DebugMode != 0) && (NULL != Connected_COM))
//{
// // CStringA Tmp;
// // Tmp.Format("Trigger Counter Clear : rtn %x \r\n", rtn); Put_Log(Tmp, *Connected_COM);
// string temp;
// temp = formatA("Trigger Counter Clear : rtn %x \r\n", rtn); Put_Log(temp, *Connected_COM);
//}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("Trigger Counter Clear : rtn {0:x}", rtn));
return rtn;
}
public ushort SetTrigOutEnable(bool TrigOutEn, sbyte mode = 0)
{
uint data = 0;
ushort rtn = 0;
data = Convert.ToUInt32(0x1 & (TrigOutEn == true ? 0x1 : 0x0));
rtn = SJUartAsSingleSend(SJT_TRIGOUT_EN, data);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Set TrigOut Enable %d : rtn \r\n", TrigOutEn, rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Set TrigOut Enable {0:d} : rtn {1:x}", TrigOutEn, rtn));
}
return rtn;
}
public ushort SetENCCnt(long EncCnt, sbyte mode = 0)
{
ushort rtn = 0;
//Enc value error control needed
//rtn = SJUartAsSingleSend(SJT_CUR_MODECNT, Convert.ToUInt32(EncCnt));
rtn = SJUartAsSingleSend<uint>(SJT_CUR_MODECNT, Convert.ToUInt32(EncCnt));
//if ((DebugMode == 1) && (NULL != Connected_COM))
//{
// // CStringA Tmp;
// // Tmp.Format("Encoder Counter Setting : %I64d : rtn %x \r\n", EncCnt, rtn); Put_Log(Tmp, *Connected_COM);
// string temp;
// temp = formatA("Encoder Counter Setting : %I64d : rtn %x \r\n", EncCnt, rtn); Put_Log(temp, *Connected_COM);
//}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("Encoder Counter Setting : {0:d} : rtn {1:x}", EncCnt, rtn));
return rtn;
}
public ushort SJT_SystemReset()
{
ushort rtn = 0;
rtn = SJT_Reset(true, true, true, true, true);
//if ((DebugMode == 1) && (NULL != Connected_COM))
//{
// // CStringA Tmp;
// // Tmp.Format("SJT System Reset : rtn %x \r\n", rtn); Put_Log(Tmp, *Connected_COM);
// string temp;
// temp = formatA("SJT System Reset : rtn %x \r\n", rtn); Put_Log(temp, *Connected_COM);
//}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SJT System Reset : rtn {0:x}", rtn));
return rtn;
}
public ushort SJT_Reset(bool MB_Reset, bool RefFF_Reset, bool TrigCnt_Reset, bool Strobe_Reset, bool EncCnt_Reset)
{
uint data = 0;
ushort rtn = 0;
data = 0;
if (MB_Reset) data |= 0x01 << 0;
if (RefFF_Reset) data |= 0x01 << 1;
if (TrigCnt_Reset) data |= 0x01 << 2;
if (Strobe_Reset) data |= 0x01 << 3;
if (EncCnt_Reset) data |= 0x01 << 4;
//rtn = SJUartAsSingleSend(SJT_SJTRESET, data);
rtn = SJUartAsSingleSend<uint>(SJT_SJTRESET, data);
//if ((DebugMode >= 2) && (NULL != Connected_COM))
//{
// // CStringA Tmp;
// // Tmp.Format("SJT_Reset MB_Rst %d, RefFF_Rst %d, TrigCnt_Rst %d, Strobe_Rst %d, EncCnt_Rst %d : rtn %x \r\n", MB_Reset, RefFF_Reset, TrigCnt_Reset, Strobe_Reset, EncCnt_Reset, rtn); Put_Log(Tmp, *Connected_COM);
// string temp;
// temp = formatA("SJT_Reset MB_Rst %d, RefFF_Rst %d, TrigCnt_Rst %d, Strobe_Rst %d, EncCnt_Rst %d : rtn %x \r\n",
// MB_Reset, RefFF_Reset, TrigCnt_Reset, Strobe_Reset, EncCnt_Reset, rtn);
// Put_Log(temp, *Connected_COM);
//}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SJT_Reset MB_Rst {0:d}, RefFF_Rst {1:d}, TrigCnt_Rst {2:d}, Strobe_Rst {3:d}, EncCnt_Rst {4:d} : rtn {5:x}",
MB_Reset, RefFF_Reset, TrigCnt_Reset, Strobe_Reset, EncCnt_Reset, rtn));
return rtn;
}
public ushort ENC_CNT_Reset()
{
ushort rtn = 0;
rtn = SJT_Reset(true, true, true, false, true);
//if ((DebugMode != 0) && (NULL != Connected_COM))
//{
// // CStringA Tmp;
// // Tmp.Format("Encoder Counter Clear : rtn %x \r\n", rtn); Put_Log(Tmp, *Connected_COM);
// string temp;
// temp = formatA("Encoder Counter Clear : rtn %x \r\n", rtn); Put_Log(temp, *Connected_COM);
//}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("Encoder Counter Clear : rtn {0:x}", rtn));
SJT_Trigger_Stop();
return rtn;
}
public ushort DisableTrigCorrectTable()
{
ushort rtn = 0;
uint data = 0;
data = 0x1;
rtn = SJUartAsSingleSend(SJT_POSENCTABLE_OFF, data);
if ((DebugMode != 0) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Pos,Enc 1:1 Mode /rtn %x \r\n", rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Pos,Enc 1:1 Mode /rtn {0:x}", rtn));
}
return rtn;
}
public ushort SetTrigCorrectTable(ref double[] Pos_Table, ref ulong[] Enc_Table, sbyte mode = 0)
{
ulong[] SendData = new ulong[256];
byte data_num = 0;
ushort rtn = 0;
if ((Pos_Table[0] != 0.0) | (Enc_Table[0] != 0))
return ERR_VAL_POS_ENC_TABLE;
SendData[0] = 0;
for (int i = 1; i < 256; i++)
{
data_num = (byte)i;
if (Pos_Table[i] == 0.0)
{
break;
}
if ((POS_TABLE_MIN > Pos_Table[i]) || (POS_TABLE_MAX < Pos_Table[i]))
return ERR_VAL_POS_ENC_TABLE;
if ((Pos_Table[i - 1] >= Pos_Table[i])) // array should be increase on positive value
return ERR_VAL_POS_ENC_TABLE;
SendData[i] = Convert.ToUInt64((Pos_Table[i] + 0.0005) * 1000);
}
for (int i = 1; i < (int)data_num; i++)
{
if (Enc_Table[i] > ENCODER_MAX)
return ERR_VAL_POS_ENC_TABLE; //All Encoder array should be positive integer
if (Enc_Table[i - 1] >= Enc_Table[i])
return ERR_VAL_POS_ENC_TABLE;
}
rtn = SJUartAsBurstSend(SJT_POS_TABLE_INIT, ref SendData, data_num, 0);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Pos/Enc Table Set (Pos) : DataNum %d : rtn %x", data_num, rtn);
// Put_DataLog(Tmp, (__int64*)SendData, data_num, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
Log.D(String.Format("Pos/Enc Table Set (Pos) : DataNum {0:d} : rtn {1:x}", data_num, rtn));
//Put_DataLog(temp, (__int64*)SendData, data_num, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
}
rtn |= SJUartAsBurstSend(SJT_ENC_TABLE_INIT, ref Enc_Table, data_num, 0);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Pos/Enc Table Set (Enc) : DataNum %x : rtn %d", data_num, rtn);
// Put_DataLog(Tmp, (__int64*)Enc_Table, data_num, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
Log.D(String.Format("Pos/Enc Table Set (Enc) : DataNum {0:d} : rtn {1:x}", data_num, rtn));
//Put_DataLog(temp, (__int64*)Enc_Table, data_num, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
}
return rtn;
}
public ushort GetCurEncoderCnt(out long Cur_EncCnt)
{
ushort rtn = 0;
ulong Tmp_Cur_EncCnt = 0;
// rtn = SJUartSingleRecv(SJT_CUR_ENCCNT, (unsigned __int64*) Cur_EncCnt);
// rtn = SJUartSingleRecv(SJT_CUR_ENCCNT, &Tmp_Cur_EncCnt);
//rtn = SJUartSingleRecv(SJT_CUR_MODECNT, out Tmp_Cur_EncCnt);
rtn = SJUartSingleRecv<ulong>(SJT_CUR_MODECNT, ref Tmp_Cur_EncCnt);
if (((Tmp_Cur_EncCnt >> 44) & 0x1) == 1)
Cur_EncCnt = (Convert.ToInt64(0x7ffff) << 45) + (Convert.ToInt64(Tmp_Cur_EncCnt) & 0x1fffffffffff);
else
Cur_EncCnt = (Convert.ToInt64(Tmp_Cur_EncCnt) & 0x1fffffffffff);
//if ((DebugMode == 1) && (NULL != Connected_COM))
//{
// // CStringA Tmp;
// // Tmp.Format("Get Current Encoder Counter : %I64d : rtn %x \r\n", *Cur_EncCnt, rtn); Put_Log(Tmp, *Connected_COM);
// string temp;
// temp = formatA("Get Current Encoder Counter : %I64d : rtn %x \r\n", *Cur_EncCnt, rtn); Put_Log(temp, *Connected_COM);
//}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("Get Current Encoder Counter : {0:d} : rtn {1:x}", Cur_EncCnt, rtn));
return rtn;
}
public ushort GetCurPosition(out long Cur_Position)
{
ushort rtn = 0;
ulong Tmp_RefCnt = 0;
// rtn = SJUartSingleRecv(SJT_CUR_POS, (unsigned __int64*)Cur_Position);
rtn = SJUartSingleRecv(SJT_CUR_POS, ref Tmp_RefCnt);
/* if (((Tmp_RefCnt >> 55) & 0x1))
*Cur_Position = ((unsigned __int64)0xff << 56) + (Tmp_RefCnt & 0xffffffffffffff);
else
*Cur_Position = (Tmp_RefCnt & 0xffffffffffffff);
*/
Cur_Position = (long)(Tmp_RefCnt / 1000);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Get Current Position : %I64d : rtn %x \r\n", *Cur_Position, rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Get Current Position : {0:d} : rtn {1:x}", Cur_Position, rtn));
}
return rtn;
}
public ushort SetTrigSet(byte NumberOfTrigSet, ref TrigSeqSet[] TrigSet)
{ // Trig Gen Mode 0;
ulong[] SendData = new ulong[509];
int dir, i;
ushort data_num;
ushort rtn = 0, rtn1 = 0;
long[] Tmp_TrigSet = new long[509];
uint SeqVerchk = 0;
uint RcvTmp = 0;
uint[] RcvTmpt = new uint[2];
uint Check_Cur_Mode, GenMode, OutMode;
string temp = "";
if (7 == TrigSet[0].Out2_SeqMode_Sel) TrigSet[0].Out2_SeqMode_Sel = 0;
if (TrigSet[0].Interval > 0.0) dir = 0;
else if (TrigSet[0].Interval == 0.0) return ERR_VAL_TRIGSET_ARRAY;
else dir = 1;
// FPGA PL Calc condition check Start//
i = 1;
while ((i-- > 0))
{
if (1 != NumberOfTrigSet)
{
temp = String.Format("GenMode 0(FPGA Calc) Fail for Number Of TrigSet : {0:d}", NumberOfTrigSet);
break;
}
//fractal check
if ((long)(TrigSet[0].Interval * 1000) % 1000 != 0)
{
temp = String.Format("GenMode 0(FPGA Calc) Fail for TrigInterbal : {0:f}", TrigSet[0].Interval);
break;
}
if ((long)(TrigSet[0].StartPosition * 1000) % 1000 != 0)
{
temp = String.Format("GenMode 0(FPGA Calc) Fail for TrigStart_Pos : {0:f}", TrigSet[0].StartPosition);
break;
}
/* if (fmod(TrigSet[0].TrigInterbal, (double)1.0) != 0.0)
break;
if (fmod(TrigSet[0].TrigStart_Pos, (double)1.0) != 0.0)
break;*/
//position mapping not use check
rtn = SJUartRawSingleRecv(SJT_POSENCTABLE_OFF, ref RcvTmp);
if (rtn != OK_RETURN) return ERR_NOT_DEVELOPED_YET;
if (0 == RcvTmp)
{
temp = String.Format("GenMode 0(FPGA Calc) Fail for using Enc/Pos Err map");
break;
}
//genmode outmode check
//support check
// rtn = SJUartRawSingleRecv(SJT_TRIG_GEN_OUT_MODE, &Check_Cur_Mode);
rtn = SJUartRawBurstRecv(SJT_TRIG_GEN_OUT_MODE, ref RcvTmpt, 2);
if (rtn != OK_RETURN) return ERR_NOT_DEVELOPED_YET;
GenMode = RcvTmpt[0] & 0xf; OutMode = (RcvTmpt[0] >> 16) & 0x7f;
if (((0 == GenMode) || (3 == GenMode)) && ((2 == OutMode) || (3 == OutMode)) && (1912 == RcvTmpt[1]))
{
// FPGA CALC Code
if ((TrigSet[0].StartPosition > POSITION_MAX) || (TrigSet[0].StartPosition < POSITION_MIN))
return ERR_VAL_TRIGSET_ARRAY; // Initial value error
// if (TrigSet[0].Out2_SeqMode_Sel > 8)
// return ERR_VAL_TRIGSET_ARRAY; // OutMode2 MaskSeq Set error
if (TrigSet[0].WD_Set_Sel > 7)
return ERR_VAL_TRIGSET_ARRAY; // Width Delay Set error
SendData[0] = 1; //FCalc_Mode_Set
SendData[1] = (ulong)(TrigSet[0].StartPosition / (long)1); // FCalc_Enc_Start
SendData[2] = (ulong)(TrigSet[0].Interval / (long)1); // FCalc_Enc_Interval
SendData[3] = (ulong)TrigSet[0].Iteration; // FCalc_Enc_Iteration
SendData[4] = (ulong)TrigSet[0].WD_Set_Sel; // FCalc_WD_Sel
data_num = 5;
rtn = SJUartRawBurstSend(SJT_FPGA_CALC_MODE_SET, ref SendData, (byte)data_num);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// for (i = 0; i < data_num; i++) Tmp_TrigSet[i] = (__int64)SendData[i]; // for debug;
// Tmp.Format("Trigger GenMode 0 Trigger Set Setting : Set Num %d : rtn %x / rtn1 %x", NumberOfTrigSet, rtn, rtn1);
// Put_DataLog(Tmp, (__int64*)Tmp_TrigSet, data_num, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
for (i = 0; i < data_num; i++) Tmp_TrigSet[i] = (long)SendData[i]; // for debug;
temp = String.Format("Trigger GenMode 0(FPGA Calc Ver) Trigger Set Setting : Set Num {0:d} : rtn {1:x}", NumberOfTrigSet, rtn);
//Put_DataLog(temp, (__int64*)Tmp_TrigSet, data_num, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
}
return rtn;
}
else
{
temp = String.Format("GenMode 0(FPGA Calc) Fail for GenMode : {0:d} / OutMode : {1:d} / HW Support {2:d},", GenMode, OutMode, RcvTmpt[1]);
break;
}
}
if ((DebugMode == 1) && (true == IsConnected()))
Log.D(temp);
// FPGA Calc condition check End//
rtn = SJUartRawSingleRecv(SJT_SEQ_IMPROVE_CHK, ref SeqVerchk);
if (rtn != OK_RETURN) return ERR_NOT_DEVELOPED_YET;
if (1912 == SeqVerchk)
{ // Check for Trigger firmware support FPGA PL Calc mode
if ((NumberOfTrigSet > 160) || (NumberOfTrigSet < 1)) return ERR_VAL_TRIGSET_ARRAY;
data_num = (ushort)(NumberOfTrigSet * 3 + 1);
for (i = 0; i < NumberOfTrigSet; i++)
{
// if ((TrigSet[i].Iteration_Num > GENMODE0_ITERATION_MAX) || (TrigSet[i].Iteration_Num == 0))
// return ERR_VAL_TRIGSET_ARRAY; // Maximum Iteration Num limit (1048575 ==> 20bit)
if ((TrigSet[i].StartPosition > POSITION_MAX) || (TrigSet[i].StartPosition < POSITION_MIN))
return ERR_VAL_TRIGSET_ARRAY; // Initial value error
if (TrigSet[i].Out2_SeqMode_Sel > 8)
return ERR_VAL_TRIGSET_ARRAY; // OutMode2 MaskSeq Set error
if (TrigSet[i].WD_Set_Sel > 7)
return ERR_VAL_TRIGSET_ARRAY; // Width Delay Set error
}
if (dir == 0)
{
for (i = 0; i < NumberOfTrigSet; i++)
{
// if (((__int64)TrigSet[i].TrigInterbal) <= 0) //221107 bug fix by SJ -> less than 0.9999 ex) interbal = 0.073
if (TrigSet[i].Interval < 0.0)
return ERR_VAL_TRIGSET_ARRAY;
}
for (i = 1; i < NumberOfTrigSet; i++)
if (TrigSet[i - 1].StartPosition + (TrigSet[i - 1].Interval * (TrigSet[i - 1].Iteration - 1)) >= TrigSet[i].StartPosition)
return ERR_VAL_TRIGSET_ARRAY;
}
else
{ // dir == 1
for (i = 0; i < NumberOfTrigSet; i++)
{
// if (((__int64)TrigSet[i].TrigInterbal) >= 0) //221107 bug fix by SJ
if (TrigSet[i].Interval > 0.0)
return ERR_VAL_TRIGSET_ARRAY;
}
for (i = 1; i < NumberOfTrigSet; i++)
if (TrigSet[i - 1].StartPosition + (TrigSet[i - 1].Interval * (TrigSet[i - 1].Iteration - 1)) <= TrigSet[i].StartPosition)
return ERR_VAL_TRIGSET_ARRAY;
}
SendData[0] = (ulong)NumberOfTrigSet;
SendData[0] |= (0xffff & (ulong)1912) << 16;
// double change to int *1000 --> ex) (double) 2.24567 --> 2246 (int)
for (i = 0; i < NumberOfTrigSet; i++)
{
if (TrigSet[i].StartPosition >= 0.0) SendData[(i * 3) + 1] = (ulong)(0x1fffffffffff & ((long)((TrigSet[i].StartPosition + 0.0005) * 1000)));
else SendData[(i * 3) + 1] = (ulong)(0x1fffffffffff & ((long)((TrigSet[i].StartPosition - 0.0005) * 1000)));
SendData[(i * 3) + 1] |= (0xf & (ulong)(TrigSet[i].WD_Set_Sel)) << 48;
SendData[(i * 3) + 1] |= (0xf & (ulong)(TrigSet[i].Out2_SeqMode_Sel)) << 56;
if (TrigSet[i].Interval > 0.0) SendData[(i * 3) + 2] = (ulong)((long)((TrigSet[i].Interval + 0.0005) * 1000));
else SendData[(i * 3) + 2] = (ulong)((long)((TrigSet[i].Interval - 0.0005) * 1000));
SendData[(i * 3) + 3] = 0xffffffff & (uint)TrigSet[i].Iteration;
}
}
else
{ // old Version iteration max 20bit
if ((NumberOfTrigSet > 254) || (NumberOfTrigSet < 1)) return ERR_VAL_TRIGSET_ARRAY;
data_num = (ushort)(NumberOfTrigSet * 2 + 1);
for (i = 0; i < NumberOfTrigSet; i++)
{
if ((TrigSet[i].Iteration > GENMODE0_ITERATION_MAX) || (TrigSet[i].Iteration == 0))
return ERR_VAL_TRIGSET_ARRAY; // Maximum Iteration Num limit (1048575 ==> 20bit)
if ((TrigSet[i].StartPosition > POSITION_MAX) || (TrigSet[i].StartPosition < POSITION_MIN))
return ERR_VAL_TRIGSET_ARRAY; // Initial value error
if (TrigSet[i].Out2_SeqMode_Sel > 8)
return ERR_VAL_TRIGSET_ARRAY; // OutMode2 MaskSeq Set error
if (TrigSet[i].WD_Set_Sel > 7)
return ERR_VAL_TRIGSET_ARRAY; // Width Delay Set error
}
if (dir == 0)
{
for (i = 0; i < NumberOfTrigSet; i++)
{
// if (((__int64)TrigSet[i].TrigInterbal) <= 0) //221107 bug fix by SJ
if (TrigSet[i].Interval < 0.0)
return ERR_VAL_TRIGSET_ARRAY;
}
for (i = 1; i < NumberOfTrigSet; i++)
{
if (TrigSet[i - 1].StartPosition + (TrigSet[i - 1].Interval * (TrigSet[i - 1].Iteration - 1)) >= TrigSet[i].StartPosition)
return ERR_VAL_TRIGSET_ARRAY;
}
}
else
{ // dir == 1
for (i = 0; i < NumberOfTrigSet; i++)
{
// if (((__int64)TrigSet[i].TrigInterbal) >= 0) //221107 bug fix by SJ
if (TrigSet[i].Interval > 0.0)
return ERR_VAL_TRIGSET_ARRAY;
}
for (i = 1; i < NumberOfTrigSet; i++)
{
if (TrigSet[i - 1].StartPosition + (TrigSet[i - 1].Interval * (TrigSet[i - 1].Iteration - 1)) <= TrigSet[i].StartPosition)
return ERR_VAL_TRIGSET_ARRAY;
}
}
SendData[0] = (ulong)NumberOfTrigSet;
// double change to int *1000 --> ex) (double) 2.24567 --> 2246 (int)
for (i = 0; i < NumberOfTrigSet; i++)
{
if (TrigSet[i].StartPosition >= 0.0) SendData[(i * 2) + 1] = (ulong)(0x1fffffffffff & ((long)((TrigSet[i].StartPosition + 0.0005) * 1000)));
else SendData[(i * 2) + 1] = (ulong)(0x1fffffffffff & ((long)((TrigSet[i].StartPosition - 0.0005) * 1000)));
SendData[(i * 2) + 1] |= (0xf & (ulong)(TrigSet[i].WD_Set_Sel)) << 48;
SendData[(i * 2) + 1] |= (0xf & (ulong)(TrigSet[i].Out2_SeqMode_Sel)) << 56;
SendData[(i * 2) + 1 + 1] = 0xfffff & (uint)TrigSet[i].Iteration; // 20bit
// if (TrigSet[i * 3 + 1] < 0) SendData[(i * 2) + 1 + 1] |= (0xfffffffffff & ((__int64)(TrigSet[i * 3 + 1] * 1000))) << 20;
// else SendData[(i * 2) + 1 + 1] |= (0xfffffffffff & ((__int64)(TrigSet[i * 3 + 1] * 1000))) << 20;
if (TrigSet[i].Interval > 0.0) SendData[(i * 2) + 2] |= (ulong)(0xfffffffffff & ((long)((TrigSet[i].Interval + 0.0005) * 1000))) << 20;
else SendData[(i * 2) + 2] |= (ulong)(0xfffffffffff & ((long)((TrigSet[i].Interval - 0.0005) * 1000))) << 20;
}
}
if (data_num > 255)
{
rtn = SJUartRawBurstSend(SJT_TRIGSET, ref SendData, 255);
ulong[] SendData2 = SendData.Skip(255).ToArray();
rtn1 = SJUartRawBurstSend(SJT_TRIGSET + 255, ref SendData2, (byte)(data_num - 255));
}
else
{
rtn = SJUartRawBurstSend(SJT_TRIGSET, ref SendData, (byte)data_num);
}
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// for (i = 0; i < data_num; i++) Tmp_TrigSet[i] = (__int64)SendData[i]; // for debug;
// Tmp.Format("Trigger GenMode 0 Trigger Set Setting : Set Num %d : rtn %x / rtn1 %x", NumberOfTrigSet, rtn, rtn1);
// Put_DataLog(Tmp, (__int64*)Tmp_TrigSet, data_num, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
for (i = 0; i < data_num; i++) Tmp_TrigSet[i] = (long)SendData[i]; // for debug;
Log.D(String.Format("Trigger GenMode 0({0:d} Ver) Trigger Set Setting : Set Num {1:d} : rtn {2:x} / rtn1 {3:x}", SeqVerchk, NumberOfTrigSet, rtn, rtn1));
// Put_DataLog(temp, (__int64*)Tmp_TrigSet, data_num, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
}
return rtn;
}
public ushort SetMaskSet(ref byte[] MaskSet_pt)
{
ulong[] SendData = Enumerable.Repeat<ulong>(0, 14).ToArray<ulong>();
uint[] SendData_F = Enumerable.Repeat<uint>(0, 9).ToArray<uint>();
int i = 0, j = 0;
byte data_num, temp, Available_SeqCnt;
ushort rtn;
uint RcvTmp = 0;
Available_SeqCnt = 0;
for (i = 6; i >= 0; i--) {
// temp = 0;
// for (j = 0; j < 8; j++) {
// temp += MaskSet_pt[i*8+j];
// }
// if (0 != temp) {
// Available_SeqCnt = i + 1;
// break;
// }
for (j = 8; j >= 0; j--) {
temp = 0;
if (0 != MaskSet_pt[i * 8 + j]) {
temp = (byte)j;
Available_SeqCnt = (byte)(i + 1);
break;
}
if (0 != temp)
break;
}
}
//if (0 == Available_SeqCnt) return -1;
if (0 == Available_SeqCnt) return 0;
// FPGA Calc Start //
i = 1;
while ((i-- >= 0)) {
rtn = SJUartRawSingleRecv(SJT_FPGA_CALC_MODE_SET, ref RcvTmp);
if (rtn != OK_RETURN) return ERR_NOT_DEVELOPED_YET;
if (1 != RcvTmp)
break;
// if (1 != Available_SeqCnt)
// return ERR_NOT_DEVELOPED_YET;
data_num = (byte)(1 + (j + 1));
SendData_F[0] = (uint)(data_num - 1);
for (j = 0; j < data_num - 1; j++)
SendData_F[j + 1] = MaskSet_pt[j];
rtn = SJUartRawBurstSend(SJT_FPGA_CALC_SEQMASK_NUM, ref SendData_F, data_num);
if ((DebugMode == 1) && (true == IsConnected())) {
int[] temp_data_F = new int[8];
Log.D(String.Format("Trigger OutMode 2(FPGA Clac Ver) SEQMASK_NUM {0:d} : rtn {1:x}", data_num - 1, rtn));
for (i = 0; i < 8; i++) temp_data_F[i] = (int)MaskSet_pt[i];
//Put_DataLog(temp, (int*)&temp_data_F[0], data_num, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
}
return rtn;
}
// FPGA Calc End //
data_num = (byte)(Available_SeqCnt * 2);
for (i = 0; i < Available_SeqCnt; i++) {
SendData[i * 2] = (ulong)(0x00ff & MaskSet_pt[i * 8]);
SendData[i * 2] |= (ulong)(0x00ff & MaskSet_pt[i * 8 + 1]) << 16;
SendData[i * 2] |= (ulong)(0x00ff & MaskSet_pt[i * 8 + 2]) << 32;
SendData[i * 2] |= (ulong)(0x00ff & MaskSet_pt[i * 8 + 3]) << 48;
SendData[i * 2 + 1] = (ulong)(0x00ff & MaskSet_pt[i * 8 + 4]);
SendData[i * 2 + 1] |= (ulong)((0x00ff & MaskSet_pt[i * 8 + 5]) << 16);
SendData[i * 2 + 1] |= (ulong)(0x00ff & MaskSet_pt[i * 8 + 6]) << 32;
SendData[i * 2 + 1] |= (ulong)(0x00ff & MaskSet_pt[i * 8 + 7]) << 48;
}
rtn = SJUartRawBurstSend(SJT_MASK_SEQ_SET, ref SendData, data_num);
if ((DebugMode == 1) && (true == IsConnected())) {
// CStringA Tmp;
int[] temp_data = new int[56];
// Tmp.Format("Trigger OutMode 2 Mask Sequence Set / NumberofMaskSet %d : rtn %x", Available_SeqCnt, rtn);
// for (int i = 0; i < 56; i++) temp_data[i] = (unsigned int)MaskSet_pt[i];
// Put_DataLog(Tmp, (int*)&temp_data[0], Available_SeqCnt*8, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
Log.D(String.Format("Trigger OutMode 2 Mask Sequence Set / NumberofMaskSet {0:d} : rtn {1:x}", Available_SeqCnt, rtn));
for (i = 0; i < 56; i++) temp_data[i] = (int)MaskSet_pt[i];
//Put_DataLog(temp, (int*)&temp_data[0], Available_SeqCnt * 8, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
}
return rtn;
} // Trig GenOut Mode 2;
public ushort SetMaskSet(ref ushort[] MaskSet_pt)
{
ulong[] SendData = new ulong[14];
int i, j;
byte data_num, temp, Available_SeqCnt;
ushort rtn;
Available_SeqCnt = 0;
for (i = 6; i >= 0; i--)
{
temp = 0;
for (j = 0; j < 8; j++)
{
temp += (byte)MaskSet_pt[i * 8 + j];
}
if (0 != temp)
{
Available_SeqCnt = (byte)(i + 1);
break;
}
}
//if (0 == Available_SeqCnt) return -1;
if (0 == Available_SeqCnt) return 0;
data_num = (byte)(Available_SeqCnt * 2);
for (i = 0; i < Available_SeqCnt; i++)
{
SendData[i * 2] = (ulong)(0xffff & MaskSet_pt[i * 8]);
SendData[i * 2] |= (ulong)((0xffff & MaskSet_pt[i * 8 + 1]) << 16);
SendData[i * 2] |= (ulong)(0xffff & MaskSet_pt[i * 8 + 2]) << 32;
SendData[i * 2] |= (ulong)(0xffff & MaskSet_pt[i * 8 + 3]) << 48;
SendData[i * 2 + 1] = (ulong)(0xffff & MaskSet_pt[i * 8 + 4]);
SendData[i * 2 + 1] |= (ulong)((0xffff & MaskSet_pt[i * 8 + 5]) << 16);
SendData[i * 2 + 1] |= (ulong)(0xffff & MaskSet_pt[i * 8 + 6]) << 32;
SendData[i * 2 + 1] |= (ulong)(0xffff & MaskSet_pt[i * 8 + 7]) << 48;
}
rtn = SJUartRawBurstSend(SJT_MASK_SEQ_SET, ref SendData, data_num);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// int temp_data[56];
// Tmp.Format("Trigger OutMode 2 Mask Sequence Set / NumberofMaskSet %d : rtn %x", Available_SeqCnt, rtn);
// for (int i = 0; i < 56; i++) temp_data[i] = (unsigned int)MaskSet_pt[i];
// Put_DataLog(Tmp, (int*)&temp_data[0], Available_SeqCnt * 8, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
int[] temp_data = new int[56];
Log.D(String.Format("Trigger OutMode 2 Mask Sequence Set / NumberofMaskSet {0:d} : rtn {1:x}", Available_SeqCnt, rtn));
for (i = 0; i < 56; i++) temp_data[i] = (int)MaskSet_pt[i];
//Put_DataLog(temp, (int*)&temp_data[0], Available_SeqCnt * 8, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
}
return rtn;
} // Trig GenOut Mode 2;
public ushort SetMaskSet(uint NumberOfMaskSet, ref byte[] MaskSet_pt)
{
ulong[] SendData = new ulong[3] { 0, 0, 0 };
//int dir, i;
byte data_num;
ushort rtn;
if (NumberOfMaskSet > 8) return ERR_OVER_MASKSET_NUMBER;
data_num = (byte)(((NumberOfMaskSet - 1) / 4 + 1) + 1);
SendData[0] = (uint)(NumberOfMaskSet - 1);
SendData[1] = (uint)(((MaskSet_pt[3] << 24) & 0xff000000));
SendData[1] |= (uint)(((MaskSet_pt[2] << 16) & 0x00ff0000));
SendData[1] |= (uint)(((MaskSet_pt[1] << 8) & 0x0000ff00));
SendData[1] |= (uint)((MaskSet_pt[0] & 0x000000ff));
SendData[2] = (uint)(((MaskSet_pt[7] << 24) & 0xff000000));
SendData[2] |= (uint)(((MaskSet_pt[6] << 16) & 0x00ff0000));
SendData[2] |= (uint)(((MaskSet_pt[5] << 8) & 0x0000ff00));
SendData[2] |= (uint)((MaskSet_pt[4] & 0x000000ff));
rtn = SJUartRawBurstSend(SJT_SEQMASKSET, ref SendData, data_num);
return rtn;
} // Trig GenOut Mode 2;
public ushort SetDirectMask(uint NumberofMask, ref byte[] DirectMask_pt)
{
ulong[] SendData = new ulong[255];
uint i, divide_share, divide_mod;
ushort rtn;
uint Check_Cur_GenMode = 0, left_PosData = 0, Total_Data_Cnt = 0;
uint Kintex7chk = 0;
rtn = SJUartRawSingleRecv(SJT_70T_160T_CHK, ref Kintex7chk);
if (rtn != OK_RETURN) return ERR_NOT_DEVELOPED_YET;
if ((70 == Kintex7chk) || (0 == Kintex7chk))
{
// data check
if (NumberofMask > SJT_REFFIFO_MAX_70T) return ERR_VAL_DIRECTMASK;
}
else if (160 == Kintex7chk)
{
if (NumberofMask > SJT_REFFIFO_MAX_160T) return ERR_VAL_DIRECTMASK;
}
Total_Data_Cnt = NumberofMask / 4;
left_PosData = Total_Data_Cnt;
divide_share = Total_Data_Cnt / 255;
divide_mod = Total_Data_Cnt % 255;
// Current Trigger Gen mode check
rtn = SJUartRawSingleRecv(SJT_TRIG_GEN_OUT_MODE, ref Check_Cur_GenMode);
Check_Cur_GenMode = Check_Cur_GenMode & 0xff;
if ((0 != rtn) | (1 == Check_Cur_GenMode) | (2 == Check_Cur_GenMode)) return ERR_VAL_TRIGDIRECT_GENMODE;
rtn = SJUartAsSingleSend(SJT_MB_DATA_TYPE, (uint)3);
for (i = 0; i < NumberofMask; i++)
{
if (0 == i % 4)
{
SendData[(i / 4) % 255] = (ulong)(0x00ff & DirectMask_pt[i]);
}
else if (1 == i % 4)
{
SendData[(i / 4) % 255] |= (ulong)(0x00ff & DirectMask_pt[i]) << 16;
}
else if (2 == i % 4)
{
SendData[(i / 4) % 255] |= (ulong)(0x00ff & DirectMask_pt[i]) << 32;
}
else
{ //if (3 == i % 4) {
SendData[(i / 4) % 255] |= (ulong)(0x00ff & DirectMask_pt[i]) << 48;
}
if (1019 == i % 1020)
{
rtn = SJUartRawBurstSend(SJT_TRIGPOSDIRECT, ref SendData, 255);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("OutMode Direct Mask Setting %d : rtn %x", i, rtn);
// Put_DataLog(Tmp, (int*) &DirectMask_pt[i-1019], 1020, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
Log.D(String.Format("OutMode Direct Mask Setting {0:d} : rtn {1:x}", i, rtn));
//Put_DataLog(temp, (int*)&DirectMask_pt[i - 1019], 1020, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
}
if (rtn != OK_RETURN) return rtn;
}
else if (i == NumberofMask - 1)
{
rtn = SJUartRawBurstSend(SJT_TRIGPOSDIRECT, ref SendData, (byte)(((i / 4) % 255) + 1));
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("OutMode Direct Mask Setting %d : rtn %x", i, rtn);
// Put_DataLog(Tmp, (int*)&DirectMask_pt[(unsigned int)(NumberofMask / 1020)*1020], ((i / 4) % 255) + 1, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
Log.D(String.Format("OutMode Direct Mask Setting {0:d} : rtn {1:x}", i, rtn));
//Put_DataLog(temp, (int*)&DirectMask_pt[(unsigned int)(NumberofMask / 1020) * 1020], ((i / 4) % 255) + 1, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
}
if (rtn != OK_RETURN) return rtn;
}
}
return rtn;
}
public ushort SetDirectMask(uint NumberofMask, ref ushort[] DirectMask_pt)
{
ulong[] SendData = new ulong[255];
uint i, divide_share, divide_mod;
ushort rtn;
uint Check_Cur_GenMode = 0, left_PosData = 0, Total_Data_Cnt = 0;
uint Kintex7chk = 0;
rtn = SJUartRawSingleRecv(SJT_70T_160T_CHK, ref Kintex7chk);
if (rtn != OK_RETURN) return ERR_NOT_DEVELOPED_YET;
if ((70 == Kintex7chk) || (0 == Kintex7chk))
{
// data check
if (NumberofMask > SJT_REFFIFO_MAX_70T) return ERR_VAL_DIRECTMASK;
}
else if (160 == Kintex7chk)
{
if (NumberofMask > SJT_REFFIFO_MAX_160T) return ERR_VAL_DIRECTMASK;
}
Total_Data_Cnt = NumberofMask / 4;
left_PosData = Total_Data_Cnt;
divide_share = Total_Data_Cnt / 255;
divide_mod = Total_Data_Cnt % 255;
// Current Trigger Gen mode check
rtn = SJUartRawSingleRecv(SJT_TRIG_GEN_OUT_MODE, ref Check_Cur_GenMode);
Check_Cur_GenMode = Check_Cur_GenMode & 0xff;
if ((0 != rtn) | (1 == Check_Cur_GenMode) | (2 == Check_Cur_GenMode)) return ERR_VAL_TRIGDIRECT_GENMODE;
rtn = SJUartAsSingleSend(SJT_MB_DATA_TYPE, (uint)3);
for (i = 0; i < NumberofMask; i++)
{
if (0 == i % 4)
{
SendData[(i / 4) % 255] = (ulong)(0xffff & DirectMask_pt[i]);
}
else if (1 == i % 4)
{
SendData[(i / 4) % 255] |= (ulong)(0xffff & DirectMask_pt[i]) << 16;
}
else if (2 == i % 4)
{
SendData[(i / 4) % 255] |= (ulong)(0xffff & DirectMask_pt[i]) << 32;
}
else
{ //if (3 == i % 4) {
SendData[(i / 4) % 255] |= (ulong)(0xffff & DirectMask_pt[i]) << 48;
}
if (1019 == i % 1020)
{
rtn = SJUartRawBurstSend(SJT_TRIGPOSDIRECT, ref SendData, 255);
if ((DebugMode == 1) && (true != IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("OutMode Direct Mask Setting %d : rtn %x", i, rtn);
// Put_DataLog(Tmp, (int*)&DirectMask_pt[i - 1019], 1020, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
Log.D(String.Format("OutMode Direct Mask Setting {0:d} : rtn {1:x}", i, rtn));
//Put_DataLog(temp, (int*)&DirectMask_pt[i - 1019], 1020, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
}
if (rtn != OK_RETURN) return rtn;
}
else if (i == NumberofMask - 1)
{
rtn = SJUartRawBurstSend(SJT_TRIGPOSDIRECT, ref SendData, (byte)(((i / 4) % 255) + 1));
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("OutMode Direct Mask Setting %d : rtn %x", i, rtn);
// Put_DataLog(Tmp, (int*)&DirectMask_pt[(unsigned int)(NumberofMask / 1020) * 1020], ((i / 4) % 255) + 1, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
Log.D(String.Format("OutMode Direct Mask Setting {0:} : rtn {1:x}", i, rtn));
//Put_DataLog(temp, (int*)&DirectMask_pt[(unsigned int)(NumberofMask / 1020) * 1020], ((i / 4) % 255) + 1, DATA_WR_TYPE_HEX_WRITE, *Connected_COM);
}
if (rtn != OK_RETURN) return rtn;
}
}
return rtn;
}
public ushort GetNextRefCnt(out long Next_RefCnt, out uint RefFF_Dcnt, out bool RefFF_pEmp, out bool RefFF_Empty, out ushort RefFF_OutMask, out byte RefFF_WD)
{
ushort rtn = 0, rtn1 = 0;
uint RefFF_Status = 0;
ulong Tmp_RefCnt = 0;
// rtn = SJUartSingleRecv(SJT_NEXT_REF_VAL, (unsigned __int64*)Next_RefCnt);
rtn = SJUartSingleRecv(SJT_NEXT_REF_VAL, ref Tmp_RefCnt);
rtn1 = SJUartSingleRecv(SJT_REF_FF_STATUS, ref RefFF_Status);
// RefFF_Dcnt = (unsigned short*) (RefFF_Status & 0x3fff);
// RefFF_pEmp = (bool*)((RefFF_Status >> 14) & 0x1);
// RefFF_Empty = (bool*)((RefFF_Status >> 15) & 0x1);
RefFF_Dcnt = (RefFF_Status & 0x1ffff);
RefFF_pEmp = ((RefFF_Status >> 30) & 0x1) == 0x1 ? true : false;
RefFF_Empty = ((RefFF_Status >> 31) & 0x1) == 0x1 ? true : false;
if (((Tmp_RefCnt >> 44) & 0x1) == 0x1)
Next_RefCnt = (long)(((ulong)0x7ffff << 45) + (Tmp_RefCnt & 0x1fffffffffff));
else
Next_RefCnt = (long)(Tmp_RefCnt & 0x1fffffffffff);
RefFF_OutMask = (ushort)((Tmp_RefCnt >> 48) & 0xffff);
RefFF_WD = (byte)((Tmp_RefCnt >> 45) & 0x7);
if ((DebugMode == 1) && (true != IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Get Next Reference Counter %I64d / Ref Buffer Dcnt %d / pEmpty %x / Empty %x : rtn %x \r\n", *Next_RefCnt, *RefFF_Dcnt, *RefFF_pEmp, *RefFF_Empty, rtn | rtn1);
// Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Get Next Reference Counter {0:d} / Ref Buffer Dcnt {1:d} / pEmpty {2:x} / Empty {3:x} : rtn {4:x}", Next_RefCnt, RefFF_Dcnt, RefFF_pEmp, RefFF_Empty, rtn | rtn1));
}
// if (*RefFF_Empty == true) *Next_RefCnt = -1;
return (ushort)(rtn | rtn1);
}
public ushort SetTrigDirect(uint NumberOfPosData, ref ulong[] TrigPosData, ref ushort[] TrigPosChMask, ref byte[] TrigPosWDSet)
{ // Trig Gen Mode 1,2;
ulong[] SendData = new ulong[256];
uint dir, i, j, divide_share, divide_mod;
ushort rtn, left_PosData;
uint Check_Cur_GenMode = 0;
uint Kintex7chk = 0;
rtn = SJUartRawSingleRecv(SJT_70T_160T_CHK, ref Kintex7chk);
if (rtn != OK_RETURN) return ERR_NOT_DEVELOPED_YET;
if ((70 == Kintex7chk) || (0 == Kintex7chk))
{
// data check
if (NumberOfPosData > SJT_REFFIFO_MAX_70T) return ERR_OVER_TRIGDIRECT_BUFFER;
}
else if (160 == Kintex7chk)
{
if (NumberOfPosData > SJT_REFFIFO_MAX_160T) return ERR_OVER_TRIGDIRECT_BUFFER;
}
left_PosData = (ushort)NumberOfPosData;
divide_share = NumberOfPosData / 255;
divide_mod = NumberOfPosData % 255;
if (TrigPosData[0] < TrigPosData[1]) dir = 0;
else dir = 1;
if (dir == 0)
{
for (i = 0; i < NumberOfPosData - 1; i++)
if (TrigPosData[i] >= TrigPosData[i + 1]) return ERR_VAL_TRIGDIRECT_ARRAY;
}
else
{ // dir == 1
for (i = 0; i < NumberOfPosData - 1; i++)
if (TrigPosData[i] <= TrigPosData[i + 1]) return ERR_VAL_TRIGDIRECT_ARRAY;
}
for (i = 0; i < NumberOfPosData - 1; i++)
{
if (TrigPosWDSet[i] > 7) return ERR_VAL_TRIGDIRECT_ARRAY;
if ((TrigPosData[i] > ENCODER_MAX) || (TrigPosData[i] < ENCODER_MIN)) return ERR_VAL_TRIGDIRECT_ARRAY;
}
// Current Trigger Gen mode check
rtn = SJUartRawSingleRecv(SJT_TRIG_GEN_OUT_MODE, ref Check_Cur_GenMode);
Check_Cur_GenMode = Check_Cur_GenMode & 0xff;
if ((0 != rtn) | (1 > Check_Cur_GenMode) | (2 < Check_Cur_GenMode)) return ERR_VAL_TRIGDIRECT_GENMODE;
rtn = SJUartAsSingleSend(SJT_MB_DATA_TYPE, (uint)0);
for (i = 0; i < divide_share + 1; i++)
{
if (left_PosData > 255)
{
for (j = 0; j < 255; j++)
{
// SendData[j] = (unsigned __int64) ((TrigPosData[i * 255 + j] << 8) + TrigPosChMask[i * 255 + j]) ;
SendData[j] = (ulong)((TrigPosData[i * 255 + j] << 19) + ((0x7 & (ulong)TrigPosWDSet[i * 255 + j]) << 16) + TrigPosChMask[i * 255 + j]);
}
rtn = SJUartRawBurstSend(SJT_TRIGPOSDIRECT, ref SendData, 255);
left_PosData -= 255;
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Trigger GenMode 1 Trigger Direct Enc Setting %d : rtn %x", i, rtn);
// Put_DirectTriggerInLog(Tmp, (unsigned short*)&TrigPosChMask[i*255], (__int64*)&TrigPosData[i * 255], (unsigned char*)&TrigPosWDSet[i * 255], 255, *Connected_COM);
Log.D(String.Format("Trigger GenMode 1 Trigger Direct Enc Setting {0:d} : rtn {1:x}", i, rtn));
//Put_DirectTriggerInLog(temp, (unsigned short*) & TrigPosChMask[i * 255], (__int64*)&TrigPosData[i * 255], (unsigned char*)&TrigPosWDSet[i * 255], 255, *Connected_COM);
}
if (rtn != OK_RETURN) return rtn;
}
else
{
for (j = 0; j < divide_mod; j++)
{
SendData[j] = (ulong)((TrigPosData[i * 255 + j] << 19) + ((0x7 & (ulong)TrigPosWDSet[i * 255 + j]) << 16) + TrigPosChMask[i * 255 + j]);
}
rtn = SJUartRawBurstSend(SJT_TRIGPOSDIRECT, ref SendData, (byte)divide_mod);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Trigger GenMode 1 Trigger Direct Enc Setting %d : rtn %x", i, rtn);
// Put_DirectTriggerInLog(Tmp, (unsigned short*)&TrigPosChMask[i * 255], (__int64*)&TrigPosData[i * 255], (unsigned char*)&TrigPosWDSet[i * 255], divide_mod, *Connected_COM);
Log.D(String.Format("Trigger GenMode 1 Trigger Direct Enc Setting {0:d} : rtn {1:x}", i, rtn));
//Put_DirectTriggerInLog(temp, (unsigned short *) & TrigPosChMask[i * 255], (__int64*)&TrigPosData[i * 255], (unsigned char*)&TrigPosWDSet[i * 255], divide_mod, *Connected_COM);
}
if (rtn != OK_RETURN) return rtn;
}
}
return rtn;
}
public ushort SetTrigDirect(uint NumberOfPosData, ref double[] TrigPosData, ref ushort[] TrigPosChMask, ref byte[] TrigPosWDSet)
{ // Trig Gen Mode 1,2;
ulong[] SendData = new ulong[256];
uint dir, i, j, divide_share, divide_mod;
ushort rtn, left_PosData;
uint Check_Cur_GenMode = 0;
long[] tmp_PosData = new long[256];
uint Kintex7chk = 0;
rtn = SJUartRawSingleRecv(SJT_70T_160T_CHK, ref Kintex7chk);
if (rtn != OK_RETURN) return ERR_NOT_DEVELOPED_YET;
if ((70 == Kintex7chk) || (0 == Kintex7chk))
{
// data check
if (NumberOfPosData > SJT_REFFIFO_MAX_70T) return ERR_OVER_TRIGDIRECT_BUFFER;
}
else if (160 == Kintex7chk)
{
if (NumberOfPosData > SJT_REFFIFO_MAX_160T) return ERR_OVER_TRIGDIRECT_BUFFER;
}
left_PosData = (ushort)NumberOfPosData;
divide_share = NumberOfPosData / 255;
divide_mod = NumberOfPosData % 255;
if (TrigPosData[0] < TrigPosData[1]) dir = 0;
else dir = 1;
if (dir == 0)
{
for (i = 0; i < NumberOfPosData - 1; i++)
if (TrigPosData[i] >= TrigPosData[i + 1]) return ERR_VAL_TRIGDIRECT_ARRAY;
}
else
{ // dir == 1
for (i = 0; i < NumberOfPosData - 1; i++)
if (TrigPosData[i] <= TrigPosData[i + 1]) return ERR_VAL_TRIGDIRECT_ARRAY;
}
for (i = 0; i < NumberOfPosData - 1; i++)
{
if (TrigPosWDSet[i] > 7) return ERR_VAL_TRIGDIRECT_ARRAY;
if ((TrigPosData[i] > POSITION_MAX) || (TrigPosData[i] < POSITION_MIN)) return ERR_VAL_TRIGDIRECT_ARRAY;
}
// Current Trigger Gen mode check
rtn = SJUartRawSingleRecv(SJT_TRIG_GEN_OUT_MODE, ref Check_Cur_GenMode);
Check_Cur_GenMode = Check_Cur_GenMode & 0xff;
if ((0 != rtn) | (1 > Check_Cur_GenMode) | (2 < Check_Cur_GenMode)) return ERR_VAL_TRIGDIRECT_GENMODE;
rtn = SJUartAsSingleSend(SJT_MB_DATA_TYPE, (uint)1);
for (i = 0; i < divide_share + 1; i++)
{
if (left_PosData > 255)
{
for (j = 0; j < 255; j++)
{
// SendData[j] = (unsigned __int64) ((TrigPosData[i * 255 + j] << 8) + TrigPosChMask[i * 255 + j]) ;
if (TrigPosData[i * 255 + j] >= 0.0) tmp_PosData[j] = (long)((TrigPosData[i * 255 + j] + 0.0005) * 1000);
else tmp_PosData[j] = (long)((TrigPosData[i * 255 + j] - 0.0005) * 1000);
SendData[j] = (ulong)(((0x1fffffffffff & tmp_PosData[j]) << 19) + ((0x7 & TrigPosWDSet[i * 255 + j]) << 16) + TrigPosChMask[i * 255 + j]);
}
rtn = SJUartRawBurstSend(SJT_TRIGPOSDIRECT, ref SendData, 255);
left_PosData -= 255;
if ((DebugMode == 1) && (true != IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Trigger GenMode 1 Trigger Direct Position Setting %d : rtn %x", i, rtn);
// Put_DirectTriggerInLog(Tmp, (unsigned short*)&TrigPosChMask[i * 255], (__int64*)&tmp_PosData[0], (unsigned char*)&TrigPosWDSet[i * 255], 255, *Connected_COM);
Log.D(String.Format("Trigger GenMode 1 Trigger Direct Position Setting {0:d} : rtn {1:x}", i, rtn));
//Put_DirectTriggerInLog(temp, (unsigned short *) & TrigPosChMask[i * 255], (__int64*)&tmp_PosData[0], (unsigned char*)&TrigPosWDSet[i * 255], 255, *Connected_COM);
}
if (rtn != OK_RETURN) return rtn;
}
else
{
for (j = 0; j < divide_mod; j++)
{
if (TrigPosData[i * 255 + j] >= 0.0) tmp_PosData[j] = (long)((TrigPosData[i * 255 + j] + 0.0005) * 1000);
else tmp_PosData[j] = (long)((TrigPosData[i * 255 + j] - 0.0005) * 1000);
SendData[j] = (ulong)(((0x1fffffffffff & tmp_PosData[j]) << 19) + ((0x7 & TrigPosWDSet[i * 255 + j]) << 16) + TrigPosChMask[i * 255 + j]);
}
rtn = SJUartRawBurstSend(SJT_TRIGPOSDIRECT, ref SendData, (byte)divide_mod);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Trigger GenMode 1 Trigger Direct Position Setting %d : rtn %x", i, rtn);
// Put_DirectTriggerInLog(Tmp, (unsigned short*)&TrigPosChMask[i * 255], (__int64*)&tmp_PosData[0], (unsigned char*)&TrigPosWDSet[i * 255], divide_mod, *Connected_COM);
Log.D(String.Format("Trigger GenMode 1 Trigger Direct Position Setting {0:d} : rtn {1:x}", i, rtn));
//Put_DirectTriggerInLog(temp, (unsigned short *) & TrigPosChMask[i * 255], (__int64*)&tmp_PosData[0], (unsigned char*)&TrigPosWDSet[i * 255], divide_mod, *Connected_COM);
}
if (rtn != OK_RETURN) return rtn;
}
}
return rtn;
}
public ushort SetSimulEnc(long StartEnc, int IntervalPerSec)
{
ushort rtn;
if ((ENCODER_MAX < StartEnc) || (ENCODER_MIN > StartEnc)) return ERR_VAL_ENCSETMAXMIN;
if ((BOARD_REF_CLK < IntervalPerSec) || ((-1 * BOARD_REF_CLK) > IntervalPerSec) || (0 == IntervalPerSec)) return ERR_VAL_SIMULENC;
double tempfloat;
uint itempSign, itempValue, itempValue2;
ulong[] SendData = new ulong[2];
byte data_num;
if (IntervalPerSec < 0)
{
itempSign = 1;
itempValue = (uint)(-1 * IntervalPerSec);
}
else
{
itempSign = 0;
itempValue = (uint)IntervalPerSec;
}
tempfloat = BOARD_REF_CLK / itempValue;
itempValue2 = (uint)(tempfloat + 0.5);
SendData[0] = ((itempSign & 0x1) << 31) | (itempValue2 & 0x7fffffff);
SendData[1] = (ulong)StartEnc;
data_num = 2;
rtn = SJUartAsBurstSend(SJT_SIM_ENC_CHANGE_FREQ, ref SendData, data_num);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Simul Enc Setting -> Start Enc : %I64d / Interval %d : rtn %x \r\n", StartEnc, IntervalPerSec, rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Simul Enc Setting -> Start Enc : {0:d} / Interval {1:d} : rtn {2:x}", StartEnc, IntervalPerSec, rtn));
}
return rtn;
}
public ushort SetSimulTrigLimit(uint iTrigLimit_Value)
{
ushort rtn;
rtn = SJUartAsSingleSend(SJT_TRIG_LIMIT_VAL, iTrigLimit_Value);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Simul TriggerLimit Setting --> %d :rtn %x \r\n", m_iTrigLimit_Value, rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Simul TriggerLimit Setting --> {0:d} :rtn {1:x}", iTrigLimit_Value, rtn));
}
return rtn;
}
public ushort SetCntInType(uint CntInType)
{
ushort rtn;
rtn = SJUartAsSingleSend(SJT_REF_FF_MATCHING_TYPE, (uint)CntInType);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Enc / Timer Setting %d : rtn %x \r\n", CntInType, rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Enc / Timer Setting {0:d} : rtn {1:x}", CntInType, rtn));
}
return rtn;
}
public ushort SetTrigMode(uint TrigGenMode, uint ChOutMode)
{ // GenMode, OutMode integration
ushort rtn;
uint temp;
if ((TrigGenMode > 4) || (TrigGenMode < 0)) return ERR_VAL_TRIGGENMODE;
if (((ChOutMode & 0x7f) > 3) || ((ChOutMode & 0x7f) < 0)) return ERR_VAL_TRIGOUTMODE;
temp = TrigGenMode;
temp |= (ChOutMode << 16) & 0xffff0000;
rtn = SJUartAsSingleSend(SJT_TRIG_GEN_OUT_MODE, temp);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Trig Gen mode : %d / Trig Out mode : %d : rtn %x \r\n", TrigGenMode, ChOutMode, rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Trig Gen mode : {0:d} / Trig Out mode : {1:d} : rtn {2:x}", TrigGenMode, ChOutMode, rtn));
}
return rtn;
}
public ushort GetTrigMode(ref uint TrigGenMode, ref uint ChOutMode)
{
ushort rtn;
ulong Tmp_Recv = 0;
// rtn = SJUartSingleRecv(SJT_NEXT_REF_VAL, (unsigned __int64*)Next_RefCnt);
rtn = SJUartSingleRecv(SJT_TRIG_GEN_OUT_MODE, ref Tmp_Recv);
TrigGenMode = (uint)(Tmp_Recv & 0xffff);
ChOutMode = (uint)((Tmp_Recv >> 16) & 0xffff);
return rtn;
}
public ushort Debug_RefFF_Change()
{
ushort rtn = 0;
rtn = SJUartAsSingleSend(SJT_REF_FF_CHANGE, (uint)0);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// Tmp.Format("Reference Buffer Flush : rtn %x \r\n", rtn); Put_Log(Tmp, *Connected_COM);
Log.D(String.Format("Reference Buffer Flush : rtn {0:x}", rtn));
}
return rtn;
}
public ushort SJT_Trigger_Start()
{
ushort rtn = 0;
uint gen_mode = 0, out_mode = 0;
GetTrigMode(ref gen_mode, ref out_mode);
if (gen_mode == 0)
{
}
else if (gen_mode == 1) { }
else if (gen_mode == 2)
{
rtn = SJT_Reset(false, false, true, false, false);
}
else if (gen_mode == 3)
{
// rtn = SJT_Reset(false, false, true, false, false);
rtn = RunTrigTimerMode();
}
else if (gen_mode == 4) { }
rtn = SJUartSingleSend(SJT_MB_START, (uint)1);
if ((DebugMode == 1) && (true == IsConnected()))
{
// CStringA Tmp;
// __int64 m_64iEncWhenStart;
// Tmp.Format("Trig Start : rtn %x \r\n", rtn);
// rtn = SJUartSingleRecv(SJT_ENC_WHEN_START, (unsigned __int64*)&m_64iEncWhenStart);
// Put_Log(Tmp, *Connected_COM);
//
// if (((m_64iEncWhenStart >> 44) & 0x1)) m_64iEncWhenStart = ((unsigned __int64)0x7ffff << 45) + (m_64iEncWhenStart & 0x1fffffffffff);
// else m_64iEncWhenStart = (m_64iEncWhenStart & 0x1fffffffffff);
// Tmp.Format("Encoder When Start : %I64d : rtn %x \r\n", m_64iEncWhenStart, rtn); Put_Log(Tmp, *Connected_COM);
string temp;
long m_64iEncWhenStart = 0;
Log.D(String.Format("Trig Start : rtn {0:x}", rtn));
rtn = SJUartSingleRecv(SJT_ENC_WHEN_START, ref m_64iEncWhenStart);
if (((m_64iEncWhenStart >> 44) & 0x1) == 0x1) m_64iEncWhenStart = ((long)0x7ffff << 45) + (m_64iEncWhenStart & 0x1fffffffffff);
else m_64iEncWhenStart = (m_64iEncWhenStart & 0x1fffffffffff);
Log.D(String.Format("Encoder When Start : {0:d} : rtn {1:x}", m_64iEncWhenStart, rtn));
}
return rtn;
}
public ushort SJT_Trigger_Stop()
{
ushort rtn = 0;
uint[] Trig_Count = new uint[17]; //0 -> Total Matched count, 1~8 -> Each Channel Trig Out Count
uint[] Error_Count = new uint[16];
float[] MaxFreq = new float[16];
rtn = SJUartSingleSend(SJT_MB_START, Convert.ToUInt32(0));
if (0 == rtn)
{
// GetTrigNErrCnt(&Trig_Count[0], &Error_Count[0]);
GetTrigNErrCnt(Trig_Count, Error_Count, MaxFreq);
uint err_cnt = 0;
err_cnt = Error_Count[0] + Error_Count[1] + Error_Count[2] + Error_Count[3] + Error_Count[4] + Error_Count[5] + Error_Count[6] + Error_Count[7] +
Error_Count[8] + Error_Count[9] + Error_Count[10] + Error_Count[11] + Error_Count[12] + Error_Count[13] + Error_Count[14] + Error_Count[15];
if (0 != err_cnt) rtn = ERR_TRIG_ERR_OCCURED;
else rtn = OK_RETURN;
}
// if ((DebugMode == 1) && (NULL != Connected_COM))
// {
// // CStringA Tmp;
// // INT16U rtn1 = 0;
// // __int64 m_64iEncWhenStop;
// // Tmp.Format("Trig Stop : rtn %x \r\n", rtn);
// // rtn1 = SJUartSingleRecv(SJT_ENC_WHEN_STOP, (unsigned __int64*)&m_64iEncWhenStop);
// // if (((m_64iEncWhenStop >> 44) & 0x1)) m_64iEncWhenStop = ((unsigned __int64)0x7ffff << 45) + (m_64iEncWhenStop & 0x1fffffffffff);
// // else m_64iEncWhenStop = (m_64iEncWhenStop & 0x1fffffffffff);
// // Put_Log(Tmp, *Connected_COM);
// // Tmp.Format("Encoder When Stop : %I64d : rtn %x \r\n", m_64iEncWhenStop, rtn1); Put_Log(Tmp, *Connected_COM);
// string temp;
// INT16U rtn1 = 0;
// __int64 m_64iEncWhenStop;
// temp = formatA("Trig Stop : rtn %x \r\n", rtn);
// rtn1 = SJUartSingleRecv(SJT_ENC_WHEN_STOP, (unsigned __int64 *) & m_64iEncWhenStop);
// if (((m_64iEncWhenStop >> 44) & 0x1)) m_64iEncWhenStop = ((unsigned __int64)0x7ffff << 45) +(m_64iEncWhenStop & 0x1fffffffffff);
//else m_64iEncWhenStop = (m_64iEncWhenStop & 0x1fffffffffff);
// Put_Log(temp, *Connected_COM);
// temp = formatA("Encoder When Stop : %I64d : rtn %x \r\n", m_64iEncWhenStop, rtn1); Put_Log(temp, *Connected_COM);
// }
if ((DebugMode == 1) && (true == IsConnected()))
{
string temp;
ushort rtn1 = 0;
long m_64iEncWhenStop = 0;
rtn1 = SJUartSingleRecv<long>(SJT_ENC_WHEN_STOP, ref m_64iEncWhenStop);
if (((m_64iEncWhenStop >> 44) & 0x1) == 1) m_64iEncWhenStop = ((long)0x7ffff << 45) + (m_64iEncWhenStop & 0x1fffffffffff);
else m_64iEncWhenStop = (m_64iEncWhenStop & 0x1fffffffffff);
Log.D(String.Format("Trig Stop : rtn {0:x}", rtn));
Log.D(String.Format("Encoder When Stop : {0:d} : rtn {1:x}", m_64iEncWhenStop, rtn1));
}
return rtn;
}
public ushort SetStrobe(byte Strobe_Ch, uint Mask, ref double[] StrobeData_us_pt)
{
ushort rtn = 0;
uint[] StrobeSet = new uint[17];
StrobeSet[0] = Mask;
for (int i = 0; i < 16; i++)
{
if (StrobeData_us_pt[i] < 0)
return ERR_VAL_STROBE_NUM;
if ((uint)StrobeData_us_pt[i] > UInt32.MaxValue)
return ERR_VAL_STROBE_NUM;
StrobeSet[i + 1] = (uint)((StrobeData_us_pt[i] + 0.005) * 100);
}
rtn = SetStrobe(Strobe_Ch, ref StrobeSet);
return rtn;
}
public ushort SetStrobe(byte StrobeCh, ref uint[] StrobeData_pt)
{
ushort rtn = 0;
int addr;
byte Data_Num;
byte Trig_OutMode;
uint Tmp_Recv = 0;
// CStringA Tmp;
string temp;
if ((StrobeCh > Max_OutCh - 1) || (0 > StrobeCh))
{
return ERR_VAL_CHANNEL_NUM;
}
// rtn = SJUartSingleRecv(SJT_NEXT_REF_VAL, (unsigned __int64*)Next_RefCnt);
rtn = SJUartSingleRecv(SJT_TRIG_GEN_OUT_MODE, ref Tmp_Recv);
Trig_OutMode = (byte)((Tmp_Recv >> 16) & 0x7f);
if (Trig_OutMode == (byte)ChannelOutMode.SeqBy1Trig)
{
addr = SJT_STROBESET + (StrobeCh * 17);
Data_Num = 17;
rtn = SJUartBurstSend(addr, ref StrobeData_pt, Data_Num, 0);
if ((DebugMode == 1) && (true == IsConnected()))
{
Log.D(String.Format("Trigger OutMode {0:d}, Ch {1:d} Width & Delay Setting : Mask 0x{2:x2}, DataNum {3:d}, Addr 0x{4:x} : rtn {5:x}", Trig_OutMode, StrobeCh, StrobeData_pt[0], Data_Num, addr, rtn));
//Put_DataLog(temp, (int*)&StrobeData_pt[1], Data_Num - 1, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
}
}
else if (Trig_OutMode == (byte)ChannelOutMode.DirectMask)
{
addr = SJT_STROBESET + (StrobeCh * 17) + 1;
Data_Num = 2;
uint[] tempdata = StrobeData_pt.Skip(1).ToArray();
rtn = SJUartBurstSend(addr, ref tempdata, Data_Num, 0);
if ((DebugMode == 1) && (true == IsConnected()))
{
Log.D(String.Format("Trigger OutMode {0:d}, Ch {1:d} Width & Delay Setting : NoMask, Width {2:d20}, delay {3:d20} / Addr 0x{4:x} : rtn {5:x}", Trig_OutMode, StrobeCh, StrobeData_pt[1], StrobeData_pt[2], addr, rtn));
}
}
else if (Trig_OutMode == (byte)ChannelOutMode.SequenceMask)
{
addr = SJT_STROBESET + (StrobeCh * 17) + 1;
Data_Num = 16;
uint[] tempdata = StrobeData_pt.Skip(1).ToArray();
rtn = SJUartBurstSend(addr, ref tempdata, Data_Num, 0);
if ((DebugMode == 1) && (true == IsConnected()))
{
Log.D(String.Format("Trigger OutMode {0:d}, Ch {1:d} Width & Delay Setting : DataNum {2:d}, Addr 0x{3:x} : rtn {4:x}", Trig_OutMode, StrobeCh, Data_Num, addr, rtn));
//Put_DataLog(temp, (int*)&StrobeData_pt[1], Data_Num - 1, DATA_WR_TYPE_DEC_WRITE, *Connected_COM);
}
}
else if (Trig_OutMode == (byte)ChannelOutMode.Simple)
{
addr = SJT_STROBESET + (StrobeCh * 17);
Data_Num = 3;
rtn = SJUartBurstSend(addr, ref StrobeData_pt, Data_Num, 0);
if ((DebugMode == 1) && (true == IsConnected()))
{
Log.D(String.Format("Trigger OutMode {0:d}, Ch {1:d} Width & Delay Setting : Mask 0x{2:x2}, Width {3:d20}, Delay {4:d20} / Addr 0x{5:x} : rtn {6:x}", Trig_OutMode, StrobeCh, StrobeData_pt[0], StrobeData_pt[1], StrobeData_pt[2], addr, rtn));
}
}
return rtn;
}
public ushort GetStrobe(byte StrobeCh, ref uint[] StrobeData_pt)
{ // added by SJ 171123
ushort rtn = 0;
int addr;
byte Data_Num;
if ((StrobeCh > Max_OutCh - 1) || (0 > StrobeCh))
{
return ERR_VAL_CHANNEL_NUM;
}
addr = SJT_STROBESET + (StrobeCh * 17);
Data_Num = 17;
rtn = SJUartBurstRecv(addr, ref StrobeData_pt, Data_Num);
return rtn;
}
public ushort GetTrigTimeFreq(out uint TrigTimeFreq_10ns)
{
ushort rtn;
uint Tmp_Recv = 0;
// rtn = SJUartSingleRecv(SJT_NEXT_REF_VAL, (unsigned __int64*)Next_RefCnt);
rtn = SJUartAsSingleRecv(SJT_TRIG_TIMER_FREQ, ref Tmp_Recv);
TrigTimeFreq_10ns = Tmp_Recv;
return rtn;
}
public ushort GetTrigTimeLimit(out uint TrigTimeLimit)
{
ushort rtn;
uint Tmp_Recv = 0;
// rtn = SJUartSingleRecv(SJT_NEXT_REF_VAL, (unsigned __int64*)Next_RefCnt);
rtn = SJUartAsSingleRecv(SJT_TRIG_LIMIT_VAL, ref Tmp_Recv);
TrigTimeLimit = Tmp_Recv;
return rtn;
}
public ushort GetEncPosMapTableUse(out EncoderPositionMap encposmapuse)
{
//position mapping not use check
uint RcvTmp = 0;
encposmapuse = EncoderPositionMap.Normal;
ushort rtn = SJUartRawSingleRecv(SJT_POSENCTABLE_OFF, ref RcvTmp);
if (rtn != OK_RETURN) return ERR_NOT_DEVELOPED_YET;
encposmapuse = RcvTmp > 1 ? EncoderPositionMap.CustomTable : EncoderPositionMap.Normal;
//if (0 == RcvTmp) {
// Log.E($"GenMode 0(FPGA Calc) Fail for using Enc/Pos Err map");
// return ERR_NORESPONSE;
//}
return rtn;
}
public ushort GetCntInType(out uint CntInType)
{
ushort rtn;
uint RcvTmp = 0;
CntInType = 0;
rtn = SJUartAsSingleRecv(SJT_REF_FF_MATCHING_TYPE, ref RcvTmp);
if (rtn != OK_RETURN) return ERR_NOT_DEVELOPED_YET;
CntInType = RcvTmp;
//if (0 == RcvTmp) {
// Log.E($"GenMode 0(FPGA Calc) Fail for using Enc/Pos Err map");
// return ERR_NORESPONSE;
//}
return rtn;
}
public ushort SetTriggerStartdelay(uint startDelay) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetTriggerStartdelay(ref uint startDelay) { return ERR_NOT_DEVELOPED_YET; }
public ushort SetTriggerWidth(uint triggerWidth) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetTriggerWidth(ref uint triggerWidth) { return ERR_NOT_DEVELOPED_YET; }
public ushort SetTriggerCnt(uint triggerCnt) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetTriggerCnt(ref uint triggerCnt) { return ERR_NOT_DEVELOPED_YET; }
public ushort SetEncEnable(byte encEnable) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetEncEnable(ref byte encEnable) { return ERR_NOT_DEVELOPED_YET; }
public ushort SetRunMode(byte runMode) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetRunMode(ref byte runMode) { return ERR_NOT_DEVELOPED_YET; }
public ushort SetInputPol(byte inputPol) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetInputPol(ref byte inputPol) { return ERR_NOT_DEVELOPED_YET; }
public ushort SetTriggerPol(byte triggerPol) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetTriggerPol(ref byte triggerPol) { return ERR_NOT_DEVELOPED_YET; }
public ushort SetStrobeStartdelay(uint startDelay) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetStrobeStartdelay(ref uint startDelay) { return ERR_NOT_DEVELOPED_YET; }
public ushort SetStrobeWidth(uint strobeWidth) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetStrobeWidth(ref uint strobeWidth) { return ERR_NOT_DEVELOPED_YET; }
public ushort SetStrobePol(byte strobePol) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetStrobePol(ref byte strobePol) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetEndTrigger(ref byte endTrigger) { return ERR_NOT_DEVELOPED_YET; }
public ushort GetError(ref byte errorCode) { return ERR_NOT_DEVELOPED_YET; }
}
}