示例#1
0
		void SpecifiedDevice_DataRecieved(object sender, UsbLibrary.DataRecievedEventArgs args)
		{
			if (args.data.Contains((byte)0x7e))
			{
				;
			}
			var bytesString = BytesHelper.BytesToString(args.data.ToList());
			Trace.WriteLine("SpecifiedDevice_DataRecieved " + bytesString);
		}
示例#2
0
 private void usb_watchBP_OnDataRecieved(object sender, UsbLibrary.DataRecievedEventArgs args)
 {
     if (InvokeRequired)
     {
         try
         {
             Invoke(new DataRecievedEventHandler(usb_watchBP_OnDataRecieved), new object[] { sender, args });
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.Message);
         }
     }
     else
     {
     }
 }
示例#3
0
        public void DataReceived(object sender, UsbLibrary.DataRecievedEventArgs e)
        {
            Array.Clear(writeBuffer, 0, writeBuffer.Length);
            char[] asciiChars = new char[Encoding.ASCII.GetCharCount(e.data, 0, e.data.Length)];
            Encoding.ASCII.GetChars(e.data, 0, e.data.Length, asciiChars, 0);
            string newString = new string(asciiChars);
            tempString += new string(asciiChars).Substring(5);
            tempString = tempString.Replace("\0", string.Empty);

            //send read number of results on device message
            if (_HeaderRead && !_NumResultsRead && _CountStep <= 3)
            {
                GetSampleCountMessages();
                return;
            }

            ////send read config message
            //if (_HeaderRead && _NumResultsRead && !_ConfigRead && _CountStep <= 1)
            //{
            //    GetConfigMessages();
            //    return;
            //}

            //preheader
            if (tempString.StartsWith(Statics.GetStringFromAsciiCode((byte)AsciiCodes.ENQ)) && tempString.Length == 1)
            {
                tempString = string.Empty;
                writeBuffer[3] = (byte)AsciiCodes.RH;
                writeBuffer[4] = (byte)AsciiCodes.ACK;
                Port.SpecifiedDevice.SendData(writeBuffer);
                return;
            }

            //new line detected so frame is complete
            if (tempString.Contains("\r\n"))
            {
                tempString = tempString.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)[0];

                //header
                if (tempString.Contains(((char)AsciiCodes.STX).ToString() + "1H"))
                {
                    _HeaderRead = true;
                    ParseHeader(tempString);
                    tempString = string.Empty;
                    writeBuffer[3] = (byte)AsciiCodes.RH;
                    writeBuffer[4] = (byte)AsciiCodes.EOT;
                    Port.SpecifiedDevice.SendData(writeBuffer);
                    Thread.Sleep(100);
                    return;
                }

                //patient record
                if (tempString.Length > tempString.IndexOf((char)AsciiCodes.STX) + 2 && tempString[tempString.IndexOf((char)AsciiCodes.STX) + 2] == 'P')
                {
                    tempString = string.Empty;
                }

                //terminator record
                if (tempString.Length > tempString.IndexOf((char)AsciiCodes.STX) + 2 && tempString[tempString.IndexOf((char)AsciiCodes.STX) + 2] == 'L')
                {
                    tempString = string.Empty;
                }

                //glucose record
                if (tempString.Contains("^^^Glucose"))
                {
                    string[] splitrecord = tempString.Split(new string[] { "|", "\r", "^" }, StringSplitOptions.RemoveEmptyEntries);
                    int year = int.Parse(splitrecord[7].Substring(0, 4));
                    int month = int.Parse(splitrecord[7].Substring(4, 2));
                    int day = int.Parse(splitrecord[7].Substring(6, 2));
                    int hour = int.Parse(splitrecord[7].Substring(8, 2));
                    int minute = int.Parse(splitrecord[7].Substring(10, 2));

                    DateTime dtTimeStamp = new DateTime(year, month, day, hour, minute, 0);

                    int glucose = int.Parse(splitrecord[3]);
                    string sampleFormat = splitrecord[4];

                    this.SampleFormat = sampleFormat.ToLowerInvariant().Contains("mmol") ? SampleFormat.MMOL : SampleFormat.MGDL;

                    //put the record in the dataset and raise the read event
                    try
                    {
                        if (Records.FindByTimestamp(dtTimeStamp) == null)
                        {
                            //only insert non-duplicate records
                            OnRecordRead(new RecordReadEventArgs(this._Records.AddRecordRow(dtTimeStamp, glucose, sampleFormat)));
                            RecordsRead++;
                        }//if
                    }//try
                    catch
                    {
                    }//catch

                    tempString = string.Empty;
                }

                //num results message arrived
                if (tempString.Contains("D|") && !_NumResultsRead)
                { 
                    //cut message out of string
                    string message = tempString.Substring(tempString.IndexOf("D|"));
                    string [] splits = tempString.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
                    this.SampleCount = Convert.ToInt32(splits[1]);
                    tempString = string.Empty;
                    _NumResultsRead = true;
                    _CountStep = 0;
                    Thread.Sleep(100);
                    OnHeaderRead(new HeaderReadEventArgs(SampleCount, this));
                    //GetConfigMessages();
                    return;
                }

                ////results format
                //if (tempString.Contains("D|") && !_ConfigRead)
                //{
                //    //cut message out of string
                //    string message = tempString.Substring(tempString.IndexOf("D|"));
                //    string[] splits = tempString.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
                //    BitArray bitary = new BitArray(Byte.Parse(splits[1]));
                //    SampleFormat = (bitary.Get(2)) ? SampleFormat.MMOL : SampleFormat.MGDL;
                //    tempString = string.Empty;
                //    _ConfigRead = true;
                //    _CountStep = 0;
                //    Thread.Sleep(100);
                //    return;
                //}
            }

            //end of transmission encountered after a header record is read
            if (_HeaderRead && _NumResultsRead && RecordsRead >= SampleCount)
            {
                _HeaderRead = false;
                Port.OnDataRecieved -= new UsbLibrary.DataRecievedEventHandler(DataReceived);
                Port.SpecifiedDevice.DataRecieved -= SpecifiedDevice_DataRecieved;
                OnReadFinished(new ReadFinishedEventArgs(this));
                Close();
                Dispose();
                return;
            }//elseif

            if (_NumResultsRead)// && _ConfigRead)
            {
                Array.Clear(writeBuffer, 0, writeBuffer.Length);
                writeBuffer[4] = (byte)AsciiCodes.RH;
                writeBuffer[5] = (byte)AsciiCodes.ACK;
                Port.SpecifiedDevice.SendData(writeBuffer);
                Thread.Sleep(100);
            }
        }
示例#4
0
 void SpecifiedDevice_DataRecieved(object sender, UsbLibrary.DataRecievedEventArgs args)
 {
     DataReceived(sender, args);
 }
示例#5
0
文件: Form1.cs 项目: teana0953/BPA100
        private void usb_BPA_OnDataRecieved(object sender, UsbLibrary.DataRecievedEventArgs args)
        {
            if (InvokeRequired)
            {
                try
                {
                    Invoke(new DataRecievedEventHandler(usb_BPA_OnDataRecieved), new object[] { sender, args });
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            else
            {
                try
                {
                    // 接收需要的bytes後,將data匯入現有的patient class
                        // 先判斷dataID是否有在dataBase裡
                    decode.DecodingData(args.data,IDinDataBase,patient,usb_BPA);
                    BPA.VersionArr = decode.VersionArr;
                    BPA.DateTime = decode.ThisDateTime.ToString();
                    BPA.ID = decode.ID;

                    if (decode.FlagCommandisData)
                    {
                        decode.FlagCommandisData = false;
                        if (!decode.IDisInDataBase)
                        {
                            if (MessageBox.Show(String.Format("ID: {0} haven't add to dataBase yet! Do you want to create?", patient.patientData[(int)PatientDataIndex.ID]), "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                            {
                                UIStatus_ClearAllData();
                                tb_ID.ReadOnly = false;
                                tb_ID.Text = patient.patientData[(int)PatientDataIndex.ID];
                                btn_sendID.Enabled = true;
                                btn_update.Enabled = false;
                                btn_delete.Enabled = false;
                                btn_save.Enabled = true;
                            }
                        }
                        else
                        {
                            PatientData.dataBaseToListView(cb_ID.Text, listView1);
                            cb_ID.Text = patient.patientData[(int)PatientDataIndex.ID];
                            tab_main.SelectedTab = tabPage_Table;

                            //chart 也要更新
                            LoadDataIntoChart();
                            ReadPatientDataFromDB("_"+cb_ID.Text,patientDataStruct);
                        }
                        //--- receive data finish
                        tmrCheckUser.Enabled = true;
                    }
                    else if (decode.FlagCheckDateTime && FlagCheckDateTimeCount == 0)
                    {
                        FlagCheckDateTimeCount++;
                        UIStatus_BPAConnected();    // 確定裝置已 wake up
                        //timer1.Enabled = false;
                        // 比較 deviceBPA 與 PC 的時間
                        if (decode.PcNowTime.ToShortDateString() != decode.ThisDateTime.ToShortDateString())
                        {
                            if (MessageBox.Show("Do you want to syn the time with PC?", "Setting", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                            {
                                decode.FlagSetTime = true;
                                usb_BPA.SpecifiedDevice.SendData(BPACommand.WriteTimeDate);
                                Thread.Sleep(500);
                            }
                        }
                        else
                        {
                            if (decode.PcNowTime.ToShortTimeString() != decode.ThisDateTime.ToShortTimeString())
                            {
                                if (MessageBox.Show("Do you want to syn the time with PC?", "Setting", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                                {
                                    decode.FlagSetTime = true;
                                    usb_BPA.SpecifiedDevice.SendData(BPACommand.WriteTimeDate);
                                    Thread.Sleep(500);
                                }
                            }
                        }
                    }
                    else if (decode.FlagCheckVer && FlagCheckVerCount == 0)
                    {
                        FlagCheckVerCount++;
                        patient.patientData[(int)PatientDataIndex.arr] = decode.VersionArr;
                    }
                    else if (decode.FlagReadUserNumber && FlagReadUserNumberCount == 0 )
                    {
                        FlagReadUserNumberCount++;
                        decode.FlagReadUserNumber = false;
                        cb_userNumber.Items.Clear();
                        for (int i = 0; i < decode.TotalUserNumber; i++)
                        {
                            cb_userNumber.Items.Add(i + 1);
                        }
                        // userNumber max -> guest if total user number >1
                        if (decode.TotalUserNumber > 1)
                            cb_userNumber.Items[cb_userNumber.Items.Count - 1] = "Guest";

                        cb_userNumber.SelectedIndex = decode.CurrentUserNumber - 1; // 選在目前的 user number
                        if (decode.TotalUserNumber == 1)
                            btn_changeUser.Enabled = false;
                        else
                            btn_changeUser.Enabled = true;

                        // 若現在usernumber 與裝置usernumber不同 -> 確認 ID
                        if (tmrCheckUser.Enabled == true && currentUserNumber != decode.CurrentUserNumber.ToString())
                        {
                            FlagCheckIDCount = 0;
                            usb_BPA.SpecifiedDevice.SendData(BPACommand.GetID);
                            Thread.Sleep(250);
                        }
                    }
                    else if (decode.FlagCheckID && FlagCheckIDCount ==0)
                    {
                        FlagCheckIDCount++;
                        timer1.Enabled = false;
                        //--- 若dataBase裡有此device的ID
                        bool haveID = false;
                        foreach (var item in IDinDataBase)
                        {
                            if (BPA.ID == item)
                            {
                                haveID = true;
                                MessageBox.Show("Patient " + BPA.ID + " is connected!");
                                cb_ID.Text = BPA.ID;
                                btn_dataTransfer.Enabled = true;
                                btn_sendID.Enabled = false;
                                break;
                            }
                        }
                        if (haveID == false)
                        {
                            if (MessageBox.Show(String.Format("ID: {0} haven't add to dataBase yet! Do you want to create?", BPA.ID), "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                            {
                                //UIStatus_ClearAllData();
                                btn_new.PerformClick();
                                tab_main.SelectedIndex = 0;
                                tb_ID.ReadOnly = false;
                                tb_ID.Text = BPA.ID;
                                UIStatus_NoPatientProfileInDataBase();
                            }
                            else
                            {
                                btn_dataTransfer.Enabled = false;
                                btn_sendID.Enabled = true;
                            }
                        }

                        //--- autosetting finish
                        cb_userNumber.Enabled = true;
                        decode.FlagCheckID = false;
                        tmrCheckUser.Enabled = true;    // enable checkUserNumber
                        //this.Show();
                    }
                    else if (decode.FlagSetIDFinish)
                    {
                        BPA.ID = tb_ID.Text;
                        btn_dataTransfer.Enabled = true;
                        decode.FlagSetIDFinish = false;
                        if (cb_ID.Text != BPA.ID)
                            btn_dataTransfer.Enabled = false;
                        else
                            btn_dataTransfer.Enabled = true;

                        // set ID finish
                        tmrCheckUser.Enabled = true;
                        FlagReadUserNumberCount = 0;
                    }
                    
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message);
                }
            }
        }
示例#6
0
 void hid_OnDataRecieved(object sender, UsbLibrary.DataRecievedEventArgs args)
 {
     byte[] buffer = new byte[args.data.Length - 1];
     Array.Copy(args.data, 1, buffer, 0, args.data.Length - 1);
     this.BeginInvoke((MethodInvoker)delegate
     {
         ProcessPacket(buffer);
     });
 }
 void usb_OnDataRecieved(object sender, UsbLibrary.DataRecievedEventArgs args)
 {
     if (onDataReceived != null)
         onDataReceived(args.data);
 }
示例#8
0
        private void SendChangeUserNumberCommand(UsbLibrary.UsbHidPort usb)
        {
            byte[] userNumber = Encoding.ASCII.GetBytes(UserNumberNeedToChange);
            byte[] DataNeedToSend = new byte[12];
            byte[] command = new byte[9];
            command[0] = 0x00; command[1] = 0x07;
            DataNeedToSend[0] = userNumber[0];
            for (int i = 1; i < DataNeedToSend.Length; i++)
            {
                DataNeedToSend[i] = 0x00;
            }

            for (int j = 2; j < 9; j++)
            {
                command[j] = DataNeedToSend[j - 2];
            }
            usb.SpecifiedDevice.SendData(command);
            command[1] = 0x05; command[7] = 0x00; command[8] = 0x00;
            for (int i = 2, j = 7; i < 7; i++, j++)
            {
                command[i] = DataNeedToSend[j];
            }
            usb.SpecifiedDevice.SendData(command);
            Initiation();
            Thread.Sleep(100);
            MessageBox.Show("User number has changed to: " + UserNumberNeedToChange);
        }
示例#9
0
        private void SendSetTimeCommand(UsbLibrary.UsbHidPort usb)
        {
            byte[] timeSettingBuf = new byte[14];
            //--- fixed string
            timeSettingBuf[6] = 0x32;
            timeSettingBuf[7] = 0x30;
            byte[] command = new byte[9];
            command[0] = 0x00;
            command[1] = 0x07;

            #region 得到系統時間並轉成byte[]
            string yearTemp = System.DateTime.Now.Year.ToString();     // ex.2016
            char[] yearChar = yearTemp.ToCharArray();
            byte year0 = Convert.ToByte(yearChar[2]);           // 0x31
            byte year1 = Convert.ToByte(yearChar[3]);           // 0x36
            timeSettingBuf[4] = year0;
            timeSettingBuf[5] = year1;

            string monthTemp = String.Format("{0:00}", System.DateTime.Now.Month);
            char[] monthChar = monthTemp.ToCharArray();
            byte month0 = Convert.ToByte(monthChar[0]);
            byte month1 = Convert.ToByte(monthChar[1]);
            timeSettingBuf[0] = month0;
            timeSettingBuf[1] = month1;

            string dayTemp = String.Format("{0:00}", System.DateTime.Now.Day);
            char[] dayChar = dayTemp.ToCharArray();
            byte day0 = Convert.ToByte(dayChar[0]);
            byte day1 = Convert.ToByte(dayChar[1]);
            timeSettingBuf[2] = day0;
            timeSettingBuf[3] = day1;

            string hourTemp = String.Format("{0:00}", System.DateTime.Now.Hour);
            char[] hourChar = hourTemp.ToCharArray();
            byte hour0 = Convert.ToByte(hourChar[0]);
            byte hour1 = Convert.ToByte(hourChar[1]);
            timeSettingBuf[8] = hour0;
            timeSettingBuf[9] = hour1;

            string minTemp = String.Format("{0:00}", System.DateTime.Now.Minute);
            char[] minChar = minTemp.ToCharArray();
            byte min0 = Convert.ToByte(minChar[0]);
            byte min1 = Convert.ToByte(minChar[1]);
            timeSettingBuf[10] = min0;
            timeSettingBuf[11] = min1;

            string secTemp = String.Format("{0:00}", System.DateTime.Now.Second);
            char[] secChar = secTemp.ToCharArray();
            byte sec0 = Convert.ToByte(secChar[0]);
            byte sec1 = Convert.ToByte(secChar[1]);
            timeSettingBuf[12] = sec0;
            timeSettingBuf[13] = sec1;
            #endregion

            // send command
            for (int i = 0; i < 2; i++)
            {
                for (int j = 2; j < 9; j++)
                {
                    command[j] = timeSettingBuf[i * 7 + j - 2];
                }
                usb.SpecifiedDevice.SendData(command);
            }
            Initiation();
            Thread.Sleep(100);
        }
示例#10
0
        public void DecodingData(byte[] rawDataByteAry,List<string> IDinDataBase,Patient patient,UsbLibrary.UsbHidPort usb)
        {
            if (String.Format("{0:X2}",rawDataByteAry[2],16) == "06")
            {
                GetByteNeedReceive(rawDataByteAry);
                // command is27
                #region command is27(set date and time to BPA)
                if (FlagSetTime)
                {
                    FlagSetTime = false;
                    SendSetTimeCommand(usb);
                }
                #endregion

                #region command is25(change user number)
                if (FlagChangeUser)
                {
                    FlagChangeUser = false;
                    SendChangeUserNumberCommand(usb);
                }
                #endregion

                #region command is23 (set ID)
                if (FlagSendID)
                {
                    FlagSendID = false;
                    FlagSetIDFinish = true;
                    byte[] DataNeedToSend = new byte[34];
                    byte[] command = new byte[9];
                    command[0] = 0x00;
                    command[1] = 0x07;
                    if (FlagClearID)
                        DataNeedToSend = BPACommand.ClearDataAndSetID;
                    else
                        DataNeedToSend = BPACommand.NotClearDataAndSetID;

                    for (int i = 0; i < 4; i++)
                    {
                        for (int j = 2; j < 9; j++)
                        {
                            command[j] = DataNeedToSend[i * 7 + j - 2];
                        }
                        usb.SpecifiedDevice.SendData(command);
                    }
                    command[1] = 0x06; command[8] = 0x00;
                    for (int i = 2, j = 28; i < 8; i++, j++)
                    {
                        command[i] = DataNeedToSend[j];
                    }
                    Initiation();

                    usb.SpecifiedDevice.SendData(command);
                    Thread.Sleep(100);
                }
                #endregion
            }
            else if (DataStrAry[0] == "06")
            {
               
                GetByteNeedReceive(rawDataByteAry);
                int dataSize = 0;
                if (DataStrAry[1] == "30" && DataStrAry[2] == "30")  // command22(Read Cycle data from bpa) feature
                {
                    dataNo = GetDataNumber();
                    dataSize = dataNo * 32 + 34;
                    goto isData;
                }

                #region command is24(ID)

                if (dataCount == 33)
                {
                    if (CheckCommand() == "is24")
                    {
                        FlagCheckID = true;
                        Decode_ID();
                    }
                }
                #endregion

                #region command is28(userNumber)
                if (dataCount == 9)
                {
                    if (CheckCommand() == "is28")
                    {
                        FlagReadUserNumber = true;
                        Decode_UserNumber();
                    }
                            
                }
                #endregion

                #region command is3E(version)
                if (dataCount == 13)
                {
                    if (CheckCommand() == "is3E")
                    {
                        FlagCheckVer = true;
                        Decode_Ver();
                    } 
                }
                #endregion

                #region command is26(DataTime)
                if (dataCount == 87)
                {
                    PcNowTime = System.DateTime.Now;  // 取得PC端的時間
                    if (CheckCommand() == "is26")
                    {
                        FlagCheckDateTime = true;
                        Decode_DateTime();
                    }
                }
                #endregion

                #region command is22(Data)
                isData:
                if (dataCount == dataSize + 1)
                {
                    FlagCommandisData = true;
                    Decode_patientData(IDinDataBase, patient);
                }
                        
                #endregion


            }
        }
示例#11
0
        private void usb_OnDataRecieved(object sender, UsbLibrary.DataRecievedEventArgs args)
        {
            // принятые данные состоят из двух байт, первый из которых всегда равен нулю
            if (InvokeRequired)
            {
                try
                {
                    Invoke(new DataRecievedEventHandler(usb_OnDataRecieved), new object[] { sender, args });
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
            else
            {

                //string rec_data = "Data: ";
                timer1.Enabled = false;
                timer1.Enabled = true;      // сброс таймера

                timer2.Enabled = false;     // остановка таймера для считывания текущего времени
                //int i = 0;
                //foreach (byte myData in args.data)
                //{
                    //if (i == 0)
                    //    continue;       // пропустить первый служебный нулевой байт

                    //label79.Text = myData.ToString();
                    //listBox1.Items.Add(string.Format("Byte #{0}, NumProgOfData #{1}, CountLoops #{2}: {3}", Connection.ByteInReadBlock + 1, Connection.NumProgOfData, Connection.CountLoops, myData));
                    //listBox1.Items.Add(string.Format("Byte #{0}, NumProgOfData #{1}, CountLoops #{2}: {3}", Connection.ByteInSendBlock + 1, Connection.NumProgOfData, Connection.CountLoops, myData));

                    switch (Connection.ReadData(args.data, ref DeviceOptions, ref CtrlProgramsOptions))
                    {
                        case 0:
                            // из функции обработки полученного байта указание ничего не предпринимать
                            //listBox1.Items.Add("Функция GetData вернула 0");
                            //progressBar1.Value = 0;
                            break;
                        case 1:
                            // перерисовать все данные в окнах
                            //listBox1.Items.Add("Функция GetData вернула 1");
                            timer1.Enabled = false;     // отключить таймер
                            progressBar1.Visible = false;
                            progressBar1.Value = 0;
                            label81.Text = StMessageUSB;
                            UpdateAllFormElements();

                            SaveDataInRelay();      // сохранить считанные данные

                            tabControl1.Enabled = true;
                            MessageBox.Show(stSettingSuccessRead[LangGlobal],
                                            stReceivingData[LangGlobal], MessageBoxButtons.OK,
                                            MessageBoxIcon.Asterisk);
                            break;
                        case 2:
                            // продолжать прием
                            label81.Text = "USB: " + stReceivingData[LangGlobal];
                            progressBar1.Value = Connection.ProgressBarPercent;
                            progressBar1.Visible = true;
                            // послать разрешение на получение новых данных
                            if (Connection.NewTypeDataSend(ModesSend.CONTINUE) == true)
                                MyUsbSendData();      // вызов функции для продолжения передачи разрешенного запроса
                            break;
                        case 3:
                            // продолжать передачу
                            label81.Text = "USB: " + stTransferData[LangGlobal];
                            //progressBar1.Value = (int)(((float)Connection.NumProgOfData / 8) * 100);        // процесс считывания данных
                            progressBar1.Value = Connection.ProgressBarPercent;
                            progressBar1.Visible = true;
                            // послать разрешение на получение новые данных
                            MyUsbSendData();    // вызов функции для передачи новой порции данных
                            break;
                        case 4:
                            // успешная запись настроек
                            timer1.Enabled = false;     // отключить таймер
                            progressBar1.Visible = false;
                            progressBar1.Value = 0;
                            label81.Text = StMessageUSB;

                            SaveDataInRelay();      // сохранить записанные данные

                            tabControl1.Enabled = true;
                            MessageBox.Show(stSettingSuccessTransfer[LangGlobal],
                                            stTransferData[LangGlobal], MessageBoxButtons.OK,
                                            MessageBoxIcon.Asterisk);
                            break;
                        case 5:
                            // продолжить прием данных, инициализация нового запроса приема
                            label81.Text = "USB: " + stReceivingData[LangGlobal];
                            // послать разрешение на получение новых данных
                            MyUsbSendData();      // вызов функции для посылки подтвеждения
                            label82.Text = Connection.FullBytes.ToString();
                            break;
                        case 6:
                            // ошибка передачи настроек
                            timer1.Enabled = false;     // отключить таймер
                            label81.Text = StMessageUSB;
                            // послать разрешение на получение новых данных
                            tabControl1.Enabled = true;
                            MessageBox.Show(stOverMemory1[LangGlobal] + Connection.EnablePlacesInDevice.ToString() + stOverMemory2[LangGlobal] + Connection.NeededPlaces.ToString() + stOverMemory3[LangGlobal],
                                            stSaveSettings[LangGlobal], MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                            //label82.Text = "Exist:" + Connection.EnablePlacesInDevice.ToString() + "  Need:" + Connection.NeededPlaces;
                            break;
                        case 7:
                            // получена версия программы устройства, которую можно считать
                            if (USB_GetSequence == USB_GetSequenceEnum.GET_OPTIONS)
                            {
                                if (CompareVersions(Connection.VersionOfDeviceProgram, Connection.SubVersionOfDeviceProgram) == true)
                                {
                                    // версия поддерживается можно продолжать
                                    if (Connection.NewTypeDataSend(ModesSend.REQUEST_NUM_EVENTS) == true)
                                        MyUsbSendData();      // вызов функции для продолжения передачи разрешенного запроса
                                }
                                else
                                {
                                    timer1.Enabled = false;     // отключить таймер
                                    label81.Text = StMessageUSB;
                                    USB_GetSequence = USB_GetSequenceEnum.NO;
                                    MessageBox.Show(stVersionDeviceNotSupport_1[LangGlobal] + Connection.VersionOfDeviceProgram.ToString() + '.' + Connection.SubVersionOfDeviceProgram.ToString() + stVersionDeviceNotSupport_2[LangGlobal],
                                            stReceivingData[LangGlobal], MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                                }
                            }
                            else if (USB_GetSequence == USB_GetSequenceEnum.SEND_OPTIONS)
                            {
                                if (CompareVersions(Connection.VersionOfDeviceProgram, Connection.SubVersionOfDeviceProgram) == true)
                                {
                                    // версия поддерживается можно продолжать
                                    if (Connection.NewTypeDataSend(ModesSend.REQUEST_NUM_PLACES) == true)
                                    {
                                        // был реализован запрос с соот. номером и дано подтвержающее разрешение
                                        timer1.Enabled = true;      // запуск выдержки для аварийного сброса связи
                                        Connection.DevOpt = DeviceOptions;
                                        Connection.ProgsOpt = CtrlProgramsOptions;  // сохранение данных в переменные, из которых они будут считываться и передаваться
                                        Connection.NeededPlaces = 0;
                                        for (int i = 1; i <= 8; i++)
                                        {
                                            Connection.NeededPlaces += CtrlProgramsOptions[i].ListHolidays.Count +
                                                CtrlProgramsOptions[i].ListEventsException.Count +
                                                CtrlProgramsOptions[i].ListEventsYear.Count +
                                                CtrlProgramsOptions[i].ListEventsMonth.Count +
                                                CtrlProgramsOptions[i].ListEventsWeek.Count +
                                                CtrlProgramsOptions[i].ListEventsDay.Count;
                                        }
                                        MyUsbSendData();      // вызов функции для начала передачи данных, которые подготавливаются в объекте класса ConnectionClass
                                    }
                                }
                                else
                                {
                                    timer1.Enabled = false;     // отключить таймер
                                    label81.Text = StMessageUSB;
                                    USB_GetSequence = USB_GetSequenceEnum.NO;
                                    tabControl1.Enabled = true;
                                    MessageBox.Show(stVersionDeviceNotSupport_1[LangGlobal] + Connection.VersionOfDeviceProgram.ToString() + '.' + Connection.SubVersionOfDeviceProgram.ToString() + stVersionDeviceNotSupport_2[LangGlobal],
                                            stTransferData[LangGlobal], MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                                }
                            }
                            else
                            {
                                timer1.Enabled = false;     // отключить таймер
                                label81.Text = StMessageUSB;
                                MessageBox.Show(stVersionDevice[LangGlobal] + Connection.VersionOfDeviceProgram.ToString() + '.' + Connection.SubVersionOfDeviceProgram.ToString(),
                                                stREV302[LangGlobal], MessageBoxButtons.OK,
                                                MessageBoxIcon.Information);
                            }
                            break;
                        case 8:
                            // получено текущее время устройства, измеренное напряжение и освещенность
                            timer1.Enabled = false;     // отключить таймер
                            label81.Text = StMessageUSB;
                            DeviceTimeMonitor = Connection.DeviceTime;
                            //label60.Text = string.Format("{0}.{1}.{2}  {3}.{4}.{5}", Connection.DeviceTime.Day, Connection.DeviceTime.Month, Connection.DeviceTime.Year, Connection.DeviceTime.Hour, Connection.DeviceTime.Minute, Connection.DeviceTime.Second);
                            label60.Text = DeviceTimeMonitor.ToString("dd MMMM yyyy");
                            label67.Text = DeviceTimeMonitor.ToString("HH:mm:ss");
                            DeviceTimeMonitorExist = true;

                            label70.Text = Connection.ReadVoltage.ToString();
                            label73.Text = Connection.ReadBright.ToString();
                            break;
                        case 9:
                            // новое время было успешно записано в устройство
                            timer1.Enabled = false;     // отключить таймер
                            label81.Text = StMessageUSB;
                            MessageBox.Show(stNewTimeSend[LangGlobal],
                                                stSetTime[LangGlobal], MessageBoxButtons.OK,
                                                MessageBoxIcon.Information);
                            break;
                        case 10:
                            // переданы новые значения напряжения и освещенности для калибирования
                            timer1.Enabled = false;     // отключить таймер
                            label81.Text = StMessageUSB;
                            MessageBox.Show(" Калибрование успешно завершено.\nПроконтролируйте точность скорректированных значений.",
                                                "Передача данных", MessageBoxButtons.OK,
                                                MessageBoxIcon.Information);
                            break;
                        case 11:
                            // переданы новые значения напряжения и освещенности для калибирования
                            timer1.Enabled = false;     // отключить таймер
                            label81.Text = StMessageUSB;
                            MessageBox.Show(" Калибровочное значение времени успешно записано в устройство.\nПроконтролируйте точность хода времени.",
                                                "Передача данных", MessageBoxButtons.OK,
                                                MessageBoxIcon.Information);
                            break;
                    }
                    timer2.Enabled = true;     // остановка таймера для считывания текущего времени
            }
        }