private static byte[] ProtocolPack(byte[] data)
        {
            byte[] ret   = { };
            byte[] crc16 = { };

            crc16 = CRC16.GetCRC(data);

            ret = ret.Concat(head).ToArray();
            ret = ret.Concat(data).ToArray();
            ret = ret.Concat(crc16).ToArray();
            ret = ret.Concat(tail).ToArray();

            return(ret);
        }
        private static byte[] Pack(byte[] data)
        {
            byte[] ret   = { };
            byte[] empty = { 0x00 };//for pkg-len
            byte[] crc16 = CRC16.GetCRC(data);

            ret = ret.Concat(head)
                  .Concat(empty)
                  .Concat(data)
                  .Concat(crc16)
                  .Concat(tail).ToArray();

            int pkg_len = ret.Length - head.Length - tail.Length;

            ret[head.Length] = (byte)pkg_len;
            return(ret);
        }