コード例 #1
0
ファイル: EGSEDecodersHSI.cs プロジェクト: QuadMan/kia_xsan
            /// <summary>
            /// Функция обновления статистики по данным декодера
            /// </summary>
            /// <param name="buf">Буфер данных</param>
            /// <param name="bufLen">Длина буфера</param>
            public void Update(byte[] buf, int bufLen)
            {
                HSIFrame = ByteArrayToStructure.Make<HSIMessageStruct>(buf);

                // узнаем, по какому каналу пришли данные
                _curChannelId = HSIFrame.Status & 1;

                byte flag = HSIFrame.Flag;
                int sz = 0;
                if (bufLen > 8)
                {
                    sz = (buf[7] << 8) | buf[8];
                    flag = HSIFrame.data[sz-1];
                }

                // подсчитаем статистику по текущему каналу
                switch (flag)
                {
                    case HSI_SR_FLAG:
                        Channels[_curChannelId].SRCnt++;
                        break;
                    case HSI_DR_FLAG:
                        Channels[_curChannelId].DRCnt++;
                        break;
                    case HSI_TIMESTAMP_FLAG:
                        Channels[_curChannelId].TimeStampCnt++;
                        break;
                    case HSI_OBT_FLAG:
                        Channels[_curChannelId].OBTCnt++;
                        Array.Copy(buf, 9, Channels[_curChannelId].OBTVal, 0, 5);
                        break;
                    case HSI_UKS_FLAG:
                        Channels[_curChannelId].UKSCnt++;
                        if (onUKSFrameReceived != null)           // если есть обработчик УКС, вызовем его, чтобы вывести их на экран, к примеру
                        {
                            byte[] tmpUKSBuf = new byte[sz];
                            Array.Copy(buf, 9, tmpUKSBuf, 0, sz);
                            onUKSFrameReceived(tmpUKSBuf,HSIFrame.Time);
                        }
                        break;
                    default:
                        break;
                }
            }
コード例 #2
0
ファイル: EGSEDecodersHSI.cs プロジェクト: QuadMan/kia_xsan
            /// <summary>
            /// Функция обновления статистики по данным декодера
            /// </summary>
            /// <param name="buf">Буфер данных декодера КВВ</param>
            public void Update(byte[] buf, FileStream fStream, uint channelForWriting)
            {
                _hsiFrame = ByteArrayToStructure.Make<HSIMessageStruct>(buf);

                _curChannelId = 0;
                // узнаем, по какому каналу пришли данные
                if ((_hsiFrame.Status & HSI_STATUS_CHANNEL_BIT_MASK) > 0) _curChannelId = 1;
                // подсчитаем статистику по текущему каналу
                Channels[_curChannelId].FramesCnt++;
                if ((_hsiFrame.Status & HSI_STATUS_MARKER_ERROR_BIT_MASK) > 0) Channels[_curChannelId].ErrInMarkerCnt++;
                if ((_hsiFrame.Status & HSI_STATUS_CRC_ERROR_BIT_MASK) > 0) Channels[_curChannelId].ErrInCRCCnt++;
                if ((_hsiFrame.Status & HSI_STATUS_STOPBIT_ERROR_BIT_MASK) > 0) Channels[_curChannelId].ErrInStopBitCnt++;
                if ((_hsiFrame.Status & HSI_STATUS_PARITY_ERROR_BIT_MASK) > 0) Channels[_curChannelId].ErrInParityCnt++;

                if ((_hsiFrame.Flag & HSI_FLAG_BUSY_BIT_MASK) == HSI_FLAG_BUSY_BIT_MASK) Channels[_curChannelId].StatusBUSYCnt++;
                if ((_hsiFrame.Flag & HSI_FLAG_DATA_BIT_MASK) == HSI_FLAG_DATA_BIT_MASK) Channels[_curChannelId].StatusDataFramesCnt++;
                if ((_hsiFrame.Flag & HSI_FLAG_ME_BIT_MASK) == HSI_FLAG_ME_BIT_MASK) Channels[_curChannelId].StatusMECnt++;
                if ((_hsiFrame.Flag & HSI_FLAG_SR_BIT_MASK) == HSI_FLAG_SR_BIT_MASK) Channels[_curChannelId].StatusSRCnt++;

                // пишем в файл, если файл задан и пришли данные по выбранному каналу
                if ((fStream != null) && ((_hsiFrame.Flag & HSI_FLAG_DATA_BIT_MASK) == HSI_FLAG_DATA_BIT_MASK) && (_curChannelId == channelForWriting))
                {
                    fStream.Write(_hsiFrame.data, 0, HSI_FRAME_SIZE_BYTES);
                }
            }