using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Runtime.InteropServices;

namespace LFP_Manager.DataStructure
{
	/*************************************
			Serial Info Struct 
	**************************************/
	[Serializable]
	[StructLayout(LayoutKind.Sequential, Pack = 1)]
	public struct SerialConfigInfo
	{
		public UInt32 Baudrate;
		public byte data;
		public byte parity;
		public byte stop;
		public byte flow;
	}

	enum DataBits
	{
		Data8 = 8,
	};

	enum Parity
	{
		NoParity = 0,
		EvenParity = 2,
		OddParity = 3,
		SpaceParity = 4,
		MarkParity = 5
	};

	enum StopBits
	{
		OneStop = 1,
		TwoStop = 2
	};

	enum FlowControl
	{
		NoFlowControl,
		HardwareControl
	};

	enum SerialBaudRate
	{
		SerialBaud300 = 300,
		SerialBaud600 = 600,
		SerialBaud1200 = 1200,
		SerialBaud2400 = 2400,
		SerialBaud3600 = 3600,
		SerialBaud4800 = 4800,
		SerialBaud7200 = 7200,
		SerialBaud9600 = 9600,
		SerialBaud19200 = 19200,
		SerialBaud38400 = 38400,
		SerialBaud57600 = 57600,
		SerialBaud115200 = 115200,
		SerialBaud230400 = 230400,
		SerialBaud460800 = 460800,
		SerialBaud921600 = 921600,
		SerialUnknownBaud = -1
	};

	enum CANBaudRate
	{
		CANBaud20 = 20,
		CANBaud50 = 50,
		CANBaud100 = 100,
		CANBaud125 = 125,
		CANBaud200 = 200,
		CANBaud250 = 250,
		CANBaud300 = 300,
		CANBaud500 = 500,
		CANBaud800 = 800,
		CANBaud1000 = 1000,
		CANUnknownBaud = -1
	};

//public class csSbCanLibConstData
//{
/*************************************
		define  
**************************************/
//public bool ISDAR(byte x)
//      {
//	return (x & 0x01) != 0x00;
//      }

//public bool ISABOR(byte x)
//      {
//	return (x & 0x02) != 0x00;
//}

//public void SETDAR(ref byte x)
//      {
//	x |= 0x01;
//      }
//public void SETABOR(ref byte x)
//{
//	x |= 0x02;
//}

//public const byte CR = 0x0D;

////Error Code
//public const byte Invalid_Arg = 0x01;
//public const byte No_Error = 0x00;

enum CAN_StructFormat
		{
			TX_STD_DATA = 0x14,
			TX_STD_REMOTE = 0x15,
			TX_EXT_DATA = 0x16,
			TX_EXT_REMOTE = 0x17,
			RX_STD_DATA = 0x04,
			RX_STD_REMOTE = 0x05,
			RX_EXT_DATA = 0x06,
			RX_EXT_REMOTE = 0x07
		};

		/*************************************
				CAN Serial Struct 
		**************************************/
		[Serializable]
		[StructLayout(LayoutKind.Sequential, Pack=1)]
		public struct CAN_Struct
		{
			public byte Format;
			public UInt32 ID;
			public byte DLC;
			[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
			public byte[] DATA;
		}

		/*************************************
				CAN Info Struct 
		**************************************/
		[Serializable]
		[StructLayout(LayoutKind.Sequential, Pack=1)]
		public struct CANConfigInfo
		{
			public UInt32 Baudrate;
			public UInt32 ID;
			public UInt32 Mask;
			public byte Spec;
			public bool DAR;
			public bool ABOR;
		}
		enum CANSpec
		{
			CAN_A = 3,  //Max Standard CAN ID Length for ascii (0~7FF)
			CAN_B = 8   //Max Extended CAN ID Length for ascii (0~1FFFFFFF)
		};

		/*************************************
				Option Info Struct 
		**************************************/
		[Serializable]
		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct OptionInfo
		{
			public byte mode;
			public byte delay;
			public byte STD_D_Command_Header;
			public byte STD_R_Command_Header;
			public byte EXT_D_Command_Header;
			public byte EXT_R_Command_Header;
		}
		public static class CAN_SerialCommandHeader
		{
			public static readonly char STD_DATA = 't';
			public static readonly char STD_REMOTE = 'T';
			public static readonly char EXT_DATA = 'e';
			public static readonly char EXT_REMOTE = 'E';
		}; //CS-CAN Default Serial Command Header

		/*************************************
				CAN Error Info Struct 
		**************************************/
		[Serializable]
		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct CANErorrInfo
		{
			public byte TEC;            // Transmit Error Count
			public byte REC;            // Receive Error Count
			public byte LEC;            // Last Error Count
			public UInt32 StuffCount;   // Stuff Error Count
			public UInt32 FormCount;    // Form Error Count
			public UInt32 AckECount;    // Ack Error Count
			public UInt32 BitCount;     // Bit Error Count
			public UInt32 CRCCount;     // CRC Error Count

			public byte errorInfo;      // Erroe Status
		}
    //}
}
