Esempio n. 1
0
        /// <summary>
        /// Gets the correct BaseFile class by comparing the file with the known header signatures.
        /// </summary>
        /// <param name="filePath">Filepath</param>
        /// <returns></returns>
        public static BaseFile GetTypeFromFile(string filePath)
        {
            byte[] buffer;
            using (BinaryReader reader = new BinaryReader(new FileStream(filePath, FileMode.Open)))
            {
                if (reader.BaseStream.Length < 256)
                {
                    buffer = new byte[reader.BaseStream.Length];
                    reader.Read(buffer, 0, buffer.Length);
                }
                else
                {
                    buffer = new byte[256];
                    reader.Read(buffer, 0, 256);
                }
            }

            if (BG.Compare(buffer))
            {
                return(new BGFile(filePath));
            }
            if (LZB.Compare(buffer))
            {
                return(new LZBFile(filePath));
            }
            if (PACK.Compare(buffer))
            {
                return(new PBFile(filePath));
            }
            if (SEQ.Compare(buffer))
            {
                return(new SEQFile(filePath));
            }
            if (STR.Compare(filePath))
            {
                return(new STRFile(filePath));
            }
            if (TIM.Compare(buffer))
            {
                return(new TIMFile(filePath));
            }
            if (VB.Compare(buffer))
            {
                return(new VBFile(filePath));
            }
            if (VH.Compare(buffer))
            {
                return(new VHFile(filePath));
            }
            if (XA.Compare(filePath))
            {
                return(new XAFile(filePath));
            }
            return(new BaseFile(filePath));
        }
Esempio n. 2
0
        // 串口发送线程
        protected override void WriteThread(object state)
        {
            lock (WriteTimerLock)
            {
                byte[] WriteBytes;
                if (SerialChannel == SerialChannelEnum.ChipConnect)
                {
                    WriteBytes = PACK.ReadyToWrite();
                }
                else
                {
                    lock (ShellCmdLock)
                    {
                        if (ShellCmdQueue.Count > 0 && (!ShellCmdQueue.Peek().IsSent))
                        {
                            WriteBytes = ShellCmdQueue.Peek().CmdBytes;
                            ShellCmdQueue.Peek().IsSent = true;
                        }
                        else
                        {
                            return;
                        }
                    }
                }

                try
                {
                    if (serialport != null && serialport.IsOpen && WriteBytes.Length > 0)
                    {
                        serialport.Write(WriteBytes, 0, WriteBytes.Length);
                        Log.debug("send: " + Tool.HexToString(WriteBytes, " "));
                    }
                }
                catch (Exception ex)
                {
                    Log.error(ex.Message);
                    Disconnect();
                }
            }
        }
Esempio n. 3
0
 public override void Disconnect()
 {
     try
     {
         ClearCmd();
         Cmd.Clear();
         ReadTimer.Change(-1, -1);
         WriteTimer.Change(-1, -1);
         WaitUntilThreadOver();
         serialport.Close();
         CreateEvent(EventReason.Disconnected, null);
     }
     catch (Exception ex)
     {
         CreateEvent(EventReason.Disconnected, ex.Message);
     }
     finally
     {
         PACK.FlushReadBuffer();
         PACK.FlushWriteBuffer();
         CMD.ClearTask();
         serialport = null;
     }
 }
Esempio n. 4
0
 public override void Connect(object device)
 {
     if (device is SerialPort)
     {
         IsUSBSerial = false;
         serialport  = (SerialPort)device;
         try
         {
             serialport.DataBits               = 8;
             serialport.StopBits               = StopBits.One;
             serialport.Parity                 = Parity.None;
             serialport.ReadTimeout            = 50;
             serialport.ReceivedBytesThreshold = 1;
             serialport.DataReceived          +=
                 new SerialDataReceivedEventHandler(SerialReadThread);
             serialport.ReadBufferSize  = 8192;
             serialport.WriteBufferSize = 8192;
             PACK.FlushReadBuffer();
             PACK.FlushWriteBuffer();
             CMD.ClearTask();
             serialport.Open();
             WriteTimer.Change(0, 25);
             ReadTimer.Change(0, 25);
             SerialChannel = SerialChannelEnum.ChipConnect;
             CreateEvent(EventReason.ChipConnected, null);   // 仅串口连接成功
             return;
         }
         catch (Exception ex)
         {
             Disconnect();
             CreateEvent(EventReason.ConnectFailed, ex.Message);
             return;
         }
     }
     CreateEvent(EventReason.ConnectFailed, "连接的不是串口设备!");
 }
Esempio n. 5
0
        /// <summary>Func:文件的下载
        /// </summary>
        /// <param name="request"></param>
        /// <param name="response"></param>
        /// <param name="filename"></param>
        /// <param name="fullPath"></param>
        /// <param name="speed"></param>
        /// <returns></returns>
        public static bool ResponseFile(HttpRequest request, HttpResponse response, string filename, string fullPath, long speed)
        {
            try
            {
                FileStream   myFile = new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                BinaryReader br     = new BinaryReader(myFile);
                try
                {
                    //==**==//
                    String fileName = HttpUtility.UrlEncode(filename, Encoding.UTF8);
                    //==**==/


                    response.AddHeader("Accept-Ranges", "bytes");
                    response.Buffer = false;
                    long fileLength = myFile.Length;
                    long startBytes = 0;

                    const double PACK = 10240; //10K bytes
                    //int sleep = 200;   //每秒5次   即5*10K bytes每秒
                    int sleep = (int)Math.Floor(1000 * PACK / speed) + 1;
                    if (request.Headers["Range"] != null)
                    {
                        response.StatusCode = 206;
                        string[] range = request.Headers["Range"].Split('=', '-');
                        startBytes = Convert.ToInt64(range[1]);
                    }
                    response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
                    if (startBytes != 0)
                    {
                        //Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
                    }
                    response.AddHeader("Connection", "Keep-Alive");
                    //_Response.ContentType = "application/octet-stream";
                    response.ContentType = "text/x-xls";
                    //_Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));
                    response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
                    response.HeaderEncoding = Encoding.UTF8;

                    br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
                    int maxCount = (int)Math.Floor((fileLength - startBytes) / PACK) + 1;

                    for (int i = 0; i < maxCount; i++)
                    {
                        if (response.IsClientConnected)
                        {
                            response.BinaryWrite(br.ReadBytes(int.Parse(PACK.ToString(CultureInfo.InvariantCulture))));
                            Thread.Sleep(sleep);
                        }
                        else
                        {
                            i = maxCount;
                        }
                    }
                }
                catch
                {
                    return(false);
                }
                finally
                {
                    br.Close();

                    myFile.Close();
                }
            }
            catch
            {
                return(false);
            }
            return(true);
        }