private byte[] CreateRequest(String terminalNo, int messageType, Command cmd, byte[] data, int dataLen)
{
/* General Message for Request
* XX Length
* ASCII Terminal Serial
* XX Message Type
* BCD SequenceNum
* BCD Date
* BCD Time
* [Detail]
* XX LRC
*/
Encoding encode = Encoding.GetEncoding(1254);
List<byte> reqPacket = new List<byte>();
List<byte> msgPacket = new List<byte>();
int allLen = dataLen;
this.command = cmd;
this.data = data;
this.sequence = (MainForm.SequenceNumber++) % MAX_PRCSS_SEC_NUM;
//SEQUNCE
reqPacket.AddRange(MessageBuilder.HexToByteArray(GMPCommonTags.TAG_SEQUNCE));
reqPacket.Add((byte)GMPConstants.LEN_SEQUENCE);
byte[] arrVal = MessageBuilder.ConvertIntToBCD(this.Sequence, GMPConstants.LEN_SEQUENCE);
reqPacket.AddRange(arrVal);
//DATE and TIME
reqPacket.AddRange(MessageBuilder.GetDateTimeInBytes(DateTime.Now));
// Fiscal Command
if (cmd != Command.NULL)
{
reqPacket.AddRange(MessageBuilder.HexToByteArray(FPUCommonTags.FPU_FISCAL_COMMAND));
reqPacket.Add((byte)GMPConstants.LEN_FISCAL_COMMAND);
reqPacket.Add((byte)cmd);
}
if (dataLen > 0)
{
reqPacket.AddRange(data);
}
// Terminal ID
msgPacket.AddRange(encode.GetBytes(terminalNo.PadLeft(12, ' ')));
// Message TAG
msgPacket.AddRange(MessageBuilder.HexToByteArray(messageType));
// Message length
int msgLen = reqPacket.Count;
msgPacket.AddRange(MessageBuilder.AddLength(msgLen));
// Message Data
msgPacket.AddRange(reqPacket);
// CRC
short crc = MessageBuilder.CalculateCRC(msgPacket.ToArray(), 0, msgPacket.Count);
msgPacket.Add((byte)(crc >> 8));
msgPacket.Add((byte)(crc));
// All Length
allLen = msgPacket.Count;
msgPacket.Insert(0, (byte)(allLen % 256));
msgPacket.Insert(0, (byte)(allLen / 256));
return msgPacket.ToArray();
}