diff --git a/android/LedLamp.aia b/android/LedLamp.aia index 707e949..3cd6632 100644 Binary files a/android/LedLamp.aia and b/android/LedLamp.aia differ diff --git a/android/LedLamp.apk b/android/LedLamp.apk index b117674..5ba1739 100644 Binary files a/android/LedLamp.apk and b/android/LedLamp.apk differ diff --git a/android/Декомпозиция.txt b/android/Декомпозиция.txt index 1d669c5..f202688 100644 --- a/android/Декомпозиция.txt +++ b/android/Декомпозиция.txt @@ -42,7 +42,11 @@ MainScreen BrightnessSliderPositionChanged метод (событие): действия при изменении слайдера яркости SpeedSliderPositionChanged метод (событие): действия при изменении слайдера скокрости ScaleSliderPositionChanged метод (событие): действия при изменении слайдера масштаба + BrightnessListPickerAfterPicking метод (событие): действия при выборе точного значения яркости из контекстного списка + SpeedListPickerAfterPicking метод (событие): действия при выборе точного значения скорости из контекстного списка + ScaleListPickerAfterPicking метод (событие): действия при выборе точного значения масштаба из контекстного списка UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных) + PopulateListPickerElements метод: заполнить контекстный список яркости/скорости/масштаба эффектов значениями, близкими к текущей позиции соответствующего слайдера SetDebugText метод: установить отладочный текст основной отладочной текстовой метке ConnectivityScreen @@ -71,7 +75,27 @@ FavoritesScreen AlarmScreen Visible свойство: "Видимость экрана устройств" + Initialized свойство: "Экран управления будильниками инициализирован" + BlockControlEventsEmitting свойство: "Не генерировать события от элементов управления" (переключателей, тайм пикеров и т.д.); нужно, например, чтобы предотвратить switch.changed при его enable/disable BaсkButtonClick метод (событие): действия при UI кнопки "Назад" на "экране" будильника + MonSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника + TueSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника + WedSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника + ThuSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника + FriSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника + SatSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника + SunSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника + MonTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника + TueTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника + FriTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника + WedTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника + ThuTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника + SatTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника + SunTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника + TimeBeforeAlarmListPickerAfterPicking метод (событие): действия при выборе времени срабатывания будильника перед "рассветом" + ResetAlarmState метод: "забыть" состояние будильников в android приложении (перед последующим запросом этого состояния) + UpdateScreen метод: обновить все элементы управления на "экране" управления будильниками согласно модели данных + UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных) TimerScreen Visible свойство: "Видимость экрана устройств" @@ -82,6 +106,7 @@ DeviceManager State свойство: полученное командой GET состояние устройства (CURR...), список (не строка) Devices свойство: список устройств (хранимое свойство) CurrentDeviceSocket свойство: текущее устройство (хранимое свойство) + AlarmState свойство: текущее состояние будильников по дням (вкл/выкл, время каждого, время срабатывания перед "рассветом") Modes свойство: список доступных режимов, захардкожен одновременно в лампе и в приложении, должен совпадать Initialize метод: вычитывание хранимых свойств и инициализация соответствующих переменных ConnectDeviceSocket метод: стартовать таймер (polling timer) с регулярной отправкой команд GET/DEB на устройство @@ -100,6 +125,15 @@ DeviceManager ResetCurrentDevice метод: установить свойство CurrentDeviceSocket в начальное состояние (очистить), соответствует состоянию "устройство не выбрано" ResetCurrentDevices метод: установить свойство Devices в начальное состояние (очистить), соответствует состоянию "профили устройств не заданы" ValidateIpPort метод: валидировать переданное в качестве параметра значение IP адреса или порта + SendUdpCommand метод: отправить команду, приянтую в качестве входного аргумента, на подключенное устройствоС (обобщённый метод) + HandleDeviceResponse метод: обработать ответ от подключенного устройства на отправленные команды + GetAlarms метод: отправить команду запроса состояния будильников ALM_GET на устройство + GetAlarmOnOff метод: получить состояние вкл/выкл будильника для указанного во входном аргументе дня (из свойства AlarmState) + GetAlarmTime метод: получить время срабатывания будильника для указанного во входном аргументе дня (из свойства AlarmState) + GetTimeBeforeAlarmIndex метод: получить время срабатывания будильника перед "рассветом" + SetAlarmOnOff метод: отправить команду вкл/выкл будильника для заданного дня ALM_SET на устройство + SetAlarmTime метод: отправить команду установки времени срабатывания будильника для заданного дня ALM_SET на устройство + SetTimeBeforeAlarm метод: отправить команду установки времени срабатывания будильника перед "рассветом" DAWN на устройство DiscoverManager TimeoutMs свойство: время ожидания ответа от устройств на multicast команду DISCOVER @@ -128,10 +162,10 @@ PollingManager SendSetBrightnessCommandToDevice метод: отправить команду установки яркости на подключенное устройство SendSetSpeedCommandToDevice метод: отправить команду установки скорости на подключенное устройство SendSetScaleCommandToDevice метод: отправить команду установки масштаба на подключенное устройство - HandleDeviceResponse метод: обработка ответа от подключенного устройства на отправленные команды - SendUdpCommand метод: отправить команду, приянтую в качестве входного аргумента, на подключенное устройствоС (обобщённый метод) StringHelper GetIpPortString метод: получить строку формата IP:PORT из входных параметров IP и PORT GetIpFromIpPortString метод: получить IP из входного параметра формата IP:PORT GetPortFromIpPortString метод: получить PORT из входного параметра формата IP:PORT + GetFormattedTimeFromMinutes метод: получить строку с временем в формате hh:mm из входного аргумента (количество минут) + GetMinutesFromFormattedTime метод: получить количество минут из форматированной строки (hh:mm), переданной в качестве входного аргумента diff --git a/firmware/GyverLamp_v1.4/GyverLamp_v1.4.ino b/firmware/GyverLamp_v1.4/GyverLamp_v1.4.ino index 9593ca3..4d959e5 100644 --- a/firmware/GyverLamp_v1.4/GyverLamp_v1.4.ino +++ b/firmware/GyverLamp_v1.4/GyverLamp_v1.4.ino @@ -37,6 +37,11 @@ - Добавлены 2 эффекта: Светлячки со шлейфом и Белый свет - При запросе обновления по воздуху (2 четверных касания к кнопке) лампа переключается в режим "Матрица" для визуального подтверждения готовности к прошивке - В android приложение добавлена функция сканирования сети и добавления ламп с помощью multicast пакетов, доработка прошивки под это + --- 03.08.2019 + - Исправлены ошибки взаимодействия android приложения с лампой, в вывод команды CURR добавлено текущее время (или millis(), если время не синхронизировано) + --- 10.08.2019 + - Добавлена точная настройка яркости, скорости и масштаба эффектов + - Добавлено взаимодействие с android приложением по управлению будильниками */ // Ссылка для менеджера плат: diff --git a/firmware/GyverLamp_v1.4/OtaManager.h b/firmware/GyverLamp_v1.4/OtaManager.h index 0a97d44..11afb67 100644 --- a/firmware/GyverLamp_v1.4/OtaManager.h +++ b/firmware/GyverLamp_v1.4/OtaManager.h @@ -213,7 +213,7 @@ class OtaManager Serial.printf("Для обновления в Arduino IDE выберите пункт меню Инструменты - Порт - '%s at ", espHostName); Serial.print(WiFi.localIP()); Serial.println("'"); - Serial.printf("Затем нажмите кнопку 'Загрузка' в течение %u секунд и по запросу введите пароль '%ы'\n", ESP_CONF_TIMEOUT, AP_PASS); + Serial.printf("Затем нажмите кнопку 'Загрузка' в течение %u секунд и по запросу введите пароль '%s'\n", ESP_CONF_TIMEOUT, AP_PASS); Serial.println("Устройство с Arduino IDE должно быть в одной локальной сети с модулем ESP!"); #endif } diff --git a/firmware/GyverLamp_v1.4/parsing.ino b/firmware/GyverLamp_v1.4/parsing.ino index bf27321..eccfb45 100644 --- a/firmware/GyverLamp_v1.4/parsing.ino +++ b/firmware/GyverLamp_v1.4/parsing.ino @@ -4,8 +4,6 @@ void parseUDP() if (packetSize) { - Serial.print("income"); - int32_t n = Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE); packetBuffer[n] = 0; inputBuffer = packetBuffer; @@ -89,12 +87,12 @@ void parseUDP() if (inputBuffer.indexOf("ON") != -1) { alarm[alarmNum].state = true; - inputBuffer = "alm #" + String(alarmNum + 1) + " ON"; + sendAlarms(); } else if (inputBuffer.indexOf("OFF") != -1) { alarm[alarmNum].state = false; - inputBuffer = "alm #" + String(alarmNum + 1) + " OFF"; + sendAlarms(); } else { @@ -102,9 +100,7 @@ void parseUDP() alarm[alarmNum].time = almTime; byte hour = floor(almTime / 60); byte minute = almTime - hour * 60; - inputBuffer = "alm #" + String(alarmNum + 1) + - " " + String(hour) + - ":" + String(minute); + sendAlarms(); } saveAlarm(alarmNum); } @@ -118,6 +114,7 @@ void parseUDP() { dawnMode = inputBuffer.substring(4).toInt() - 1; saveDawnMmode(); + sendAlarms(); } else if (inputBuffer.startsWith("DISCOVER")) // обнаружение приложением модуля esp в локальной сети