2026-06-05 13:44:39 +09:00

3384 lines
152 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;
using static AuroraTriggerBoard.Trigger;
//using static AuroraTriggerBoard.SJTV3;
namespace AuroraTriggerBoard.SJTV3
{
partial class SJTTriggerV3 : 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 SJTTriggerV3(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;
//AuroraTriggerBoard.SJTV3.UCTriggerBoardV3ViewModel uCTriggerBoardV3();
//uCTriggerBoardV3.EncoderEnableStatus = 1;
return E1.OK;
}
public int Disconnect()
{
return Close();
}
public bool IsCommError()
{
return IsConnected();
}
// public int DisableTrigCorrectTable()
// {
// uint data = 0x1;
//
// }
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
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 {
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) {
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) {
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);
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)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x3A;
packet[1] = (byte)(trigpulse_us & 0x000000FF);
packet[2] = (byte)((trigpulse_us & 0x0000FF00) >> 8);
packet[3] = (byte)((trigpulse_us & 0x00FF0000) >> 16);
packet[4] = (byte)((trigpulse_us & 0xFF000000) >> 24);
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetTrigPulse Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetTrigPulse : rtn {0:x} {1:d}", rtn, trigpulse_us));
return rtn;
}
public ushort GetTrigPulse(ref uint trigpulse_us)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x2A;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetTrigPulse Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x8A) {
trigpulse_us = (uint)(recvPacket[1] | (recvPacket[2] << 8) | (recvPacket[3] << 16) | (recvPacket[4] << 24));
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetTrigPulse : rtn {0:x} {1:d}", rtn, trigpulse_us));
return rtn;
}
public ushort SetEncDirection(uint EncDirection)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x34;
packet[1] = (byte)(EncDirection & 0x000000FF);
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetEncDirection Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetEncDirection : rtn {0:x} {1:d}", rtn, EncDirection));
return rtn;
}
public ushort GetEncDirection(ref uint EncDirection)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x24;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetEncDirection Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x84) {
EncDirection = (uint)recvPacket[1];
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetEncDirection : rtn {0:x} {1:d}", rtn, 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()
{
if(IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x30;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if(Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("TrigCount Reset Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
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)
{
if (IsConnected() == false) {
Cur_EncCnt = 0;
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x2E;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetCurEncoderCnt Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x8E) {
Cur_EncCnt = (long)(recvPacket[1] | (recvPacket[2] << 8) | (recvPacket[3] << 16) | (recvPacket[4] << 24));
rtn = OK_RETURN;
} else {
Cur_EncCnt = 0;
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetCurEncoderCnt : rtn {0:x} {1:d}", rtn, Cur_EncCnt));
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 NumberofMask, ref byte[] DirectMask_pt)
{
return 0;
}
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 m_iTrigLimit_Value)
{
ushort rtn;
rtn = SJUartAsSingleSend(SJT_TRIG_LIMIT_VAL, m_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}", m_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()
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x31;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SJT_Trigger_Start Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SJT_Trigger_Start : rtn {0:x} {1:d}", rtn, 1));
return rtn;
}
public ushort SJT_Trigger_Stop()
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x30;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SJT_Trigger_Stop Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SJT_Trigger_Stop : rtn {0:x} {1:d}", rtn, 1));
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 SetTriggerStartdelay(uint startDelay)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x37;
packet[1] = (byte)(startDelay & 0x000000FF);
packet[2] = (byte)((startDelay & 0x0000FF00) >> 8);
packet[3] = (byte)((startDelay & 0x00FF0000) >> 16);
packet[4] = (byte)((startDelay & 0xFF000000) >> 24);
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetTriggerStartdelay Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetTriggerStartdelay : rtn {0:x} {1:d}", rtn, startDelay));
return rtn;
}
public ushort GetTriggerStartdelay(ref uint startDelay)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x27;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetTriggerStartdelay Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x87) {
startDelay = (uint)(recvPacket[1] | (recvPacket[2] << 8) | (recvPacket[3] << 16) | (recvPacket[4] << 24));
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetTriggerStartdelay : rtn {0:x} {1:d}", rtn, startDelay));
return rtn;
}
public ushort SetTriggerWidth(uint triggerWidth)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x38;
packet[1] = (byte)(triggerWidth & 0x000000FF);
packet[2] = (byte)((triggerWidth & 0x0000FF00) >> 8);
packet[3] = (byte)((triggerWidth & 0x00FF0000) >> 16);
packet[4] = (byte)((triggerWidth & 0xFF000000) >> 24);
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetTriggerWidth Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetTriggerWidth : rtn {0:x} {1:d}", rtn, triggerWidth));
return rtn;
}
public ushort GetTriggerWidth(ref uint triggerWidth)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x28;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetTriggerWidth Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x88) {
triggerWidth = (uint)(recvPacket[1] | (recvPacket[2] << 8) | (recvPacket[3] << 16) | (recvPacket[4] << 24));
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetTriggerWidth : rtn {0:x} {1:d}", rtn, triggerWidth));
return rtn;
}
public ushort SetTriggerCnt(uint triggerCnt)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x39;
packet[1] = (byte)(triggerCnt & 0x000000FF);
packet[2] = (byte)((triggerCnt & 0x0000FF00) >> 8);
packet[3] = (byte)((triggerCnt & 0x00FF0000) >> 16);
packet[4] = (byte)((triggerCnt & 0xFF000000) >> 24);
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetTriggerCnt Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetTriggerCnt : rtn {0:x} {1:d}", rtn, triggerCnt));
return rtn;
}
public ushort GetTriggerCnt(ref uint triggerCnt)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x29;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetTriggerCnt Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x89) {
triggerCnt = (uint)(recvPacket[1] | (recvPacket[2] << 8) | (recvPacket[3] << 16) | (recvPacket[4] << 24));
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetTriggerCnt : rtn {0:x} {1:d}", rtn, triggerCnt));
return rtn;
}
public ushort SetEncEnable(byte encEnable)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x33;
packet[1] = (byte)(encEnable & 0x000000FF);
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetEncEnable Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetEncEnable : rtn {0:x} {1:d}", rtn, encEnable));
return rtn;
}
public ushort GetEncEnable(ref byte encEnable)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x23;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetEncEnable Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x83) {
encEnable = recvPacket[1];
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetEncEnable : rtn {0:x} {1:d}", rtn, encEnable));
return rtn;
}
public ushort SetRunMode(byte runMode)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x32;
packet[1] = (byte)(runMode & 0x000000FF);
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetRunMode Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetRunMode : rtn {0:x} {1:d}", rtn, runMode));
return rtn;
}
public ushort GetRunMode(ref byte runMode)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x22;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetRunMode Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x82) {
runMode = recvPacket[1];
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetRunMode : rtn {0:x} {1:d}", rtn, runMode));
return rtn;
}
public ushort SetInputPol(byte inputPol)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x35;
packet[1] = (byte)(inputPol & 0x000000FF);
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetInputPol Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetInputPol : rtn {0:x} {1:d}", rtn, inputPol));
return rtn;
}
public ushort GetInputPol(ref byte inputPol)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x25;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetInputPol Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x85) {
inputPol = recvPacket[1];
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetInputPol : rtn {0:x} {1:d}", rtn, inputPol));
return rtn;
}
public ushort SetTriggerPol(byte triggerPol)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x36;
packet[1] = (byte)(triggerPol & 0x000000FF);
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetTriggerPol Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetTriggerPol : rtn {0:x} {1:d}", rtn, triggerPol));
return rtn;
}
public ushort GetTriggerPol(ref byte triggerPol)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x26;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetTriggerPol Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x86) {
triggerPol = recvPacket[1];
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetTriggerPol : rtn {0:x} {1:d}", rtn, triggerPol));
return rtn;
}
public ushort SetStrobeStartdelay(uint startDelay)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x3C;
packet[1] = (byte)(startDelay & 0x000000FF);
packet[2] = (byte)((startDelay & 0x0000FF00) >> 8);
packet[3] = (byte)((startDelay & 0x00FF0000) >> 16);
packet[4] = (byte)((startDelay & 0xFF000000) >> 24);
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetStrobeDelay Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetStrobeDelay : rtn {0:x} {1:d}", rtn, startDelay));
return rtn;
}
public ushort GetStrobeStartdelay(ref uint startDelay)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x2C;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetStrobeDelay Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x8C) {
startDelay = (uint)(recvPacket[1] | (recvPacket[2] << 8) | (recvPacket[3] << 16) | (recvPacket[4] << 24));
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetStrobeDelay : rtn {0:x} {1:d}", rtn, startDelay));
return rtn;
}
public ushort SetStrobeWidth(uint strobeWidth)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x3D;
packet[1] = (byte)(strobeWidth & 0x000000FF);
packet[2] = (byte)((strobeWidth & 0x0000FF00) >> 8);
packet[3] = (byte)((strobeWidth & 0x00FF0000) >> 16);
packet[4] = (byte)((strobeWidth & 0xFF000000) >> 24);
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetStrobeWidth Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetStrobeWidth : rtn {0:x} {1:d}", rtn, strobeWidth));
return rtn;
}
public ushort GetStrobeWidth(ref uint strobeWidth)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x2D;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetStrobeWidth Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x8D) {
strobeWidth = (uint)(recvPacket[1] | (recvPacket[2] << 8) | (recvPacket[3] << 16) | (recvPacket[4] << 24));
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetStrobeWidth : rtn {0:x} {1:d}", rtn, strobeWidth));
return rtn;
}
public ushort SetStrobePol(byte strobePol)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x3B;
packet[1] = (byte)(strobePol & 0x000000FF);
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("SetStrobePol Fail : rtn {0:x}", rtn));
}
if ((recvPacket[0] == 0) && (recvPacket[1] == 0) && (recvPacket[2] == 0) && (recvPacket[3] == 0) && (recvPacket[4] == 0)) {
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("SetStrobePol : rtn {0:x} {1:d}", rtn, strobePol));
return rtn;
}
public ushort GetStrobePol(ref byte strobePol)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x2B;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetStrobePol Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x8B) {
strobePol = recvPacket[1];
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetStrobePol : rtn {0:x} {1:d}", rtn, strobePol));
return rtn;
}
public ushort GetEndTrigger(ref byte endTrigger)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x2F;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetEndTrigger Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x8F) {
endTrigger = recvPacket[1];
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetEnTrigger : rtn {0:x} {1:d}", rtn, endTrigger));
return rtn;
}
public ushort GetError(ref byte errorCode)
{
if (IsConnected() == false) {
return ERR_NORESPONSE;
}
ushort rtn = 0;
byte[] packet = new byte[5];
byte[] recvPacket = new byte[5];
packet[0] = 0x3E;
packet[1] = 0x00;
packet[2] = 0x00;
packet[3] = 0x00;
packet[4] = 0x00;
Write(packet);
Thread.Sleep(10);
if (Read(recvPacket) < 0) {
rtn = ERR_NORESPONSE;
Log.W(string.Format("GetError Fail : rtn {0:x}", rtn));
}
if (recvPacket[0] == 0x3E) {
errorCode = recvPacket[4];
rtn = OK_RETURN;
} else {
rtn = ERR_RTN_NOT_OK;
}
if ((DebugMode != 0) && (IsConnected() == true)) Log.D(string.Format("GetError : rtn {0:x} {1:d}", rtn, errorCode));
return rtn;
}
public ushort GetTrigTimeFreq(out uint TrigTimeFreq_10ns)
{
TrigTimeFreq_10ns = 0;
return E1.OK;
}
public ushort GetTrigTimeLimit(out uint TrigTimeLimit)
{
TrigTimeLimit = 0;
return E1.OK;
}
public ushort GetEncPosMapTableUse(out EncoderPositionMap encposamp)
{
encposamp = EncoderPositionMap.Normal;
return E1.OK;
}
public ushort GetCntInType(out uint CntInType)
{
CntInType = 0;
return E1.OK;
}
}
}