Exemplo n.º 1
0
        public IEnumerable <byte[]> ReadLogs(DateTime startTime, LogDataLevel level)
        {
            if (LogStatus != LogStatus.Idle)
            {
                throw new InvalidOperationException("Cancel the current read op before starting a new one");
            }
            LogStatus = LogStatus.InProgress;

            Vivo45LogPacket.Vivo45LogLevel v45Level = GetVivoLogLevel(level);
            if (!device.Messenger.StartLogDownload(v45Level, startTime, DateTime.Now, true))
            {
                LogStatus = LogStatus.Idle;
                throw new Communication.CommunicationException("Error sending log start message");
            }

            //start reading

            var logs = new List <byte[]>();

            int expectedMessageNo = 0;
            int time  = 0;
            int start = Environment.TickCount;

            LogStatus = LogStatus.InProgress;
            Vivo45LogPacket logPacket = null;

            while (time < Timeout)
            {
                if (LogStatus == LogStatus.Cancelled)
                {
                    LogStatus = LogStatus.Idle;
                    throw new LogException("Cancelled", LogStatus.Cancelled);
                }
                logPacket = device.Messenger.GetNextLogPacket(v45Level);
                if (logPacket == null || !logPacket.Ack)
                {
                    LogStatus = LogStatus.Idle;
                    throw new Communication.CommunicationException("Error reading log message");
                }
                if (!ReadMessage(ref expectedMessageNo, logs, logPacket))
                {
                    LogStatus = LogStatus.Idle;
                    throw new Communication.CommunicationException("Missed a log message");
                }
                RaiseStatus(expectedMessageNo, expectedMessageNo);
                if (logPacket.LastPacket)
                {
                    LogStatus = LogStatus.Completed;
                    RaiseStatus(expectedMessageNo, expectedMessageNo);
                    break;
                }
                time += Environment.TickCount - start;
                start = Environment.TickCount;
            }
            LogStatus = LogStatus.Idle;
            return(logs);
        }
Exemplo n.º 2
0
 public bool ReadMessage(ref int expectedMessageNo, List <byte[]> logs, Vivo45LogPacket message)
 {
     logs.Add(message.data);
     expectedMessageNo++;
     return(true);
 }