// инициализация пересылки настроек из устройства в программу (вызов из меню) private void настройкиToolStripMenuItem_Click(object sender, EventArgs e) { // функция события с попыткой дать запрос на считывание данных настроек с устройства по USB //if (Connection.NewTypeDataSend(ModesSend.REQUEST_OPTIONS) == true) //if (Connection.NewTypeDataSend(ModesSend.REQUEST_NUM_EVENTS) == true) if (Connection.NewTypeDataSend(ModesSend.REQUEST_NUM_VERSION) == true) { // был реализован запрос с соот. номером и дано подтвержающее разрешение // запуск таймера для корректного выхода в случае обрыва передачи tabControl1.Enabled = false; timer1.Enabled = true; USB_GetSequence = USB_GetSequenceEnum.GET_OPTIONS; // тип последовательности запросов USB_GetSeqStep = 1; // шаг запроса MyUsbSendData(); // вызов функции для начала передачи данных, которые подготавливаются в объекте класса ConnectionClass } }
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; // остановка таймера для считывания текущего времени } }
// вызов отобразить версию программы зашитой в устройство private void VersionProgToolStripMenuItem_Click(object sender, EventArgs e) { USB_GetSequence = USB_GetSequenceEnum.NO; if (Connection.NewTypeDataSend(ModesSend.REQUEST_NUM_VERSION) == true) { timer1.Enabled = true; MyUsbSendData(); // вызов функции для продолжения передачи разрешенного запроса } }
private void SendToolStripMenuItem_Click(object sender, EventArgs e) { // получен запрос на пересылку всех настроек в устройство //if (Connection.NewTypeDataSend(ModesSend.PREP_GET_OPTIONS) == 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 //} // здесь необходимо переставить фокус на другой элемент в окне, чтобы учесть последние данные treeView1.Focus(); if (Connection.NewTypeDataSend(ModesSend.REQUEST_NUM_VERSION) == true) { // был реализован запрос с соот. номером и дано подтвержающее разрешение // запуск таймера для корректного выхода в случае обрыва передачи tabControl1.Enabled = false; timer1.Enabled = true; USB_GetSequence = USB_GetSequenceEnum.SEND_OPTIONS; // тип последовательности запросов USB_GetSeqStep = 1; // шаг запроса MyUsbSendData(); // вызов функции для начала передачи данных, которые подготавливаются в объекте класса ConnectionClass } }