esphome 2024.8.0b3__py3-none-any.whl → 2024.8.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/components/api/api_connection.cpp +1 -0
- esphome/components/esp32/__init__.py +13 -0
- esphome/components/lvgl/__init__.py +4 -1
- esphome/components/lvgl/automation.py +13 -3
- esphome/components/lvgl/binary_sensor/__init__.py +2 -1
- esphome/components/lvgl/light/__init__.py +2 -1
- esphome/components/lvgl/lvcode.py +3 -0
- esphome/components/lvgl/lvgl_esphome.cpp +7 -0
- esphome/components/lvgl/lvgl_esphome.h +1 -0
- esphome/components/lvgl/number/__init__.py +2 -1
- esphome/components/lvgl/select/__init__.py +2 -1
- esphome/components/lvgl/sensor/__init__.py +2 -1
- esphome/components/lvgl/switch/__init__.py +2 -1
- esphome/components/lvgl/text/__init__.py +2 -1
- esphome/components/lvgl/text_sensor/__init__.py +2 -1
- esphome/components/lvgl/widgets/__init__.py +13 -0
- esphome/components/lvgl/widgets/line.py +7 -5
- esphome/components/lvgl/widgets/msgbox.py +2 -1
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +31 -5
- esphome/components/rp2040_pio_led_strip/led_strip.h +5 -0
- esphome/components/rtttl/rtttl.cpp +5 -3
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +5 -5
- esphome/const.py +1 -1
- esphome/writer.py +5 -1
- {esphome-2024.8.0b3.dist-info → esphome-2024.8.1.dist-info}/METADATA +1 -1
- {esphome-2024.8.0b3.dist-info → esphome-2024.8.1.dist-info}/RECORD +30 -30
- {esphome-2024.8.0b3.dist-info → esphome-2024.8.1.dist-info}/LICENSE +0 -0
- {esphome-2024.8.0b3.dist-info → esphome-2024.8.1.dist-info}/WHEEL +0 -0
- {esphome-2024.8.0b3.dist-info → esphome-2024.8.1.dist-info}/entry_points.txt +0 -0
- {esphome-2024.8.0b3.dist-info → esphome-2024.8.1.dist-info}/top_level.txt +0 -0
@@ -179,6 +179,7 @@ void APIConnection::loop() {
|
|
179
179
|
SubscribeHomeAssistantStateResponse resp;
|
180
180
|
resp.entity_id = it.entity_id;
|
181
181
|
resp.attribute = it.attribute.value();
|
182
|
+
resp.once = it.once;
|
182
183
|
if (this->send_subscribe_home_assistant_state_response(resp)) {
|
183
184
|
state_subs_at_++;
|
184
185
|
}
|
@@ -172,6 +172,19 @@ def add_idf_component(
|
|
172
172
|
KEY_COMPONENTS: components,
|
173
173
|
KEY_SUBMODULES: submodules,
|
174
174
|
}
|
175
|
+
else:
|
176
|
+
component_config = CORE.data[KEY_ESP32][KEY_COMPONENTS][name]
|
177
|
+
if components is not None:
|
178
|
+
component_config[KEY_COMPONENTS] = list(
|
179
|
+
set(component_config[KEY_COMPONENTS] + components)
|
180
|
+
)
|
181
|
+
if submodules is not None:
|
182
|
+
if component_config[KEY_SUBMODULES] is None:
|
183
|
+
component_config[KEY_SUBMODULES] = submodules
|
184
|
+
else:
|
185
|
+
component_config[KEY_SUBMODULES] = list(
|
186
|
+
set(component_config[KEY_SUBMODULES] + submodules)
|
187
|
+
)
|
175
188
|
|
176
189
|
|
177
190
|
def add_extra_script(stage: str, filename: str, path: str):
|
@@ -266,7 +266,10 @@ async def to_code(config):
|
|
266
266
|
await add_top_layer(config)
|
267
267
|
await msgboxes_to_code(config)
|
268
268
|
await disp_update(f"{lv_component}->get_disp()", config)
|
269
|
-
|
269
|
+
# At this point only the setup code should be generated
|
270
|
+
assert LvContext.added_lambda_count == 1
|
271
|
+
Widget.set_completed()
|
272
|
+
async with LvContext(lv_component):
|
270
273
|
await generate_triggers(lv_component)
|
271
274
|
for conf in config.get(CONF_ON_IDLE, ()):
|
272
275
|
templ = await cg.templatable(conf[CONF_TIMEOUT], [], cg.uint32)
|
@@ -5,6 +5,7 @@ from esphome import automation
|
|
5
5
|
import esphome.codegen as cg
|
6
6
|
import esphome.config_validation as cv
|
7
7
|
from esphome.const import CONF_ID, CONF_TIMEOUT
|
8
|
+
from esphome.cpp_generator import RawExpression
|
8
9
|
from esphome.cpp_types import nullptr
|
9
10
|
|
10
11
|
from .defines import (
|
@@ -26,6 +27,7 @@ from .lvcode import (
|
|
26
27
|
add_line_marks,
|
27
28
|
lv,
|
28
29
|
lv_add,
|
30
|
+
lv_expr,
|
29
31
|
lv_obj,
|
30
32
|
lvgl_comp,
|
31
33
|
)
|
@@ -38,7 +40,13 @@ from .types import (
|
|
38
40
|
lv_disp_t,
|
39
41
|
lv_obj_t,
|
40
42
|
)
|
41
|
-
from .widgets import
|
43
|
+
from .widgets import (
|
44
|
+
Widget,
|
45
|
+
get_widgets,
|
46
|
+
lv_scr_act,
|
47
|
+
set_obj_properties,
|
48
|
+
wait_for_widgets,
|
49
|
+
)
|
42
50
|
|
43
51
|
|
44
52
|
async def action_to_code(
|
@@ -48,10 +56,12 @@ async def action_to_code(
|
|
48
56
|
template_arg,
|
49
57
|
args,
|
50
58
|
):
|
59
|
+
await wait_for_widgets()
|
51
60
|
async with LambdaContext(parameters=args, where=action_id) as context:
|
61
|
+
with LvConditional(lv_expr.is_pre_initialise()):
|
62
|
+
context.add(RawExpression("return"))
|
52
63
|
for widget in widgets:
|
53
|
-
|
54
|
-
await action(widget)
|
64
|
+
await action(widget)
|
55
65
|
var = cg.new_Pvariable(action_id, template_arg, await context.get_lambda())
|
56
66
|
return var
|
57
67
|
|
@@ -10,7 +10,7 @@ from ..defines import CONF_LVGL_ID, CONF_WIDGET
|
|
10
10
|
from ..lvcode import EVENT_ARG, LambdaContext, LvContext
|
11
11
|
from ..schemas import LVGL_SCHEMA
|
12
12
|
from ..types import LV_EVENT, lv_pseudo_button_t
|
13
|
-
from ..widgets import Widget, get_widgets
|
13
|
+
from ..widgets import Widget, get_widgets, wait_for_widgets
|
14
14
|
|
15
15
|
CONFIG_SCHEMA = (
|
16
16
|
binary_sensor_schema(BinarySensor)
|
@@ -29,6 +29,7 @@ async def to_code(config):
|
|
29
29
|
widget = await get_widgets(config, CONF_WIDGET)
|
30
30
|
widget = widget[0]
|
31
31
|
assert isinstance(widget, Widget)
|
32
|
+
await wait_for_widgets()
|
32
33
|
async with LambdaContext(EVENT_ARG) as pressed_ctx:
|
33
34
|
pressed_ctx.add(sensor.publish_state(widget.is_pressed()))
|
34
35
|
async with LvContext(paren) as ctx:
|
@@ -8,7 +8,7 @@ from ..defines import CONF_LVGL_ID
|
|
8
8
|
from ..lvcode import LvContext
|
9
9
|
from ..schemas import LVGL_SCHEMA
|
10
10
|
from ..types import LvType, lvgl_ns
|
11
|
-
from ..widgets import get_widgets
|
11
|
+
from ..widgets import get_widgets, wait_for_widgets
|
12
12
|
|
13
13
|
lv_led_t = LvType("lv_led_t")
|
14
14
|
LVLight = lvgl_ns.class_("LVLight", LightOutput)
|
@@ -28,5 +28,6 @@ async def to_code(config):
|
|
28
28
|
paren = await cg.get_variable(config[CONF_LVGL_ID])
|
29
29
|
widget = await get_widgets(config, CONF_LED)
|
30
30
|
widget = widget[0]
|
31
|
+
await wait_for_widgets()
|
31
32
|
async with LvContext(paren) as ctx:
|
32
33
|
ctx.add(var.set_obj(widget.obj))
|
@@ -176,6 +176,8 @@ class LvContext(LambdaContext):
|
|
176
176
|
Code generation into the LVGL initialisation code (called in `setup()`)
|
177
177
|
"""
|
178
178
|
|
179
|
+
added_lambda_count = 0
|
180
|
+
|
179
181
|
def __init__(self, lv_component, args=None):
|
180
182
|
self.args = args or LVGL_COMP_ARG
|
181
183
|
super().__init__(parameters=self.args)
|
@@ -183,6 +185,7 @@ class LvContext(LambdaContext):
|
|
183
185
|
|
184
186
|
async def add_init_lambda(self):
|
185
187
|
cg.add(self.lv_component.add_init_lambda(await self.get_lambda()))
|
188
|
+
LvContext.added_lambda_count += 1
|
186
189
|
|
187
190
|
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
188
191
|
await super().__aexit__(exc_type, exc_val, exc_tb)
|
@@ -294,6 +294,13 @@ void LvglComponent::loop() {
|
|
294
294
|
}
|
295
295
|
lv_timer_handler_run_in_period(5);
|
296
296
|
}
|
297
|
+
bool lv_is_pre_initialise() {
|
298
|
+
if (!lv_is_initialized()) {
|
299
|
+
ESP_LOGE(TAG, "LVGL call before component is initialised");
|
300
|
+
return true;
|
301
|
+
}
|
302
|
+
return false;
|
303
|
+
}
|
297
304
|
|
298
305
|
#ifdef USE_LVGL_IMAGE
|
299
306
|
lv_img_dsc_t *lv_img_from(image::Image *src, lv_img_dsc_t *img_dsc) {
|
@@ -40,6 +40,7 @@ namespace lvgl {
|
|
40
40
|
|
41
41
|
extern lv_event_code_t lv_api_event; // NOLINT
|
42
42
|
extern lv_event_code_t lv_update_event; // NOLINT
|
43
|
+
extern bool lv_is_pre_initialise();
|
43
44
|
#ifdef USE_LVGL_COLOR
|
44
45
|
inline lv_color_t lv_color_from(Color color) { return lv_color_make(color.red, color.green, color.blue); }
|
45
46
|
#endif // USE_LVGL_COLOR
|
@@ -16,7 +16,7 @@ from ..lvcode import (
|
|
16
16
|
)
|
17
17
|
from ..schemas import LVGL_SCHEMA
|
18
18
|
from ..types import LV_EVENT, LvNumber, lvgl_ns
|
19
|
-
from ..widgets import get_widgets
|
19
|
+
from ..widgets import get_widgets, wait_for_widgets
|
20
20
|
|
21
21
|
LVGLNumber = lvgl_ns.class_("LVGLNumber", number.Number)
|
22
22
|
|
@@ -44,6 +44,7 @@ async def to_code(config):
|
|
44
44
|
step=widget.get_step(),
|
45
45
|
)
|
46
46
|
|
47
|
+
await wait_for_widgets()
|
47
48
|
async with LambdaContext([(cg.float_, "v")]) as control:
|
48
49
|
await widget.set_property(
|
49
50
|
"value", MockObj("v") * MockObj(widget.get_scale()), config[CONF_ANIMATED]
|
@@ -15,7 +15,7 @@ from ..lvcode import (
|
|
15
15
|
)
|
16
16
|
from ..schemas import LVGL_SCHEMA
|
17
17
|
from ..types import LV_EVENT, LvSelect, lvgl_ns
|
18
|
-
from ..widgets import get_widgets
|
18
|
+
from ..widgets import get_widgets, wait_for_widgets
|
19
19
|
|
20
20
|
LVGLSelect = lvgl_ns.class_("LVGLSelect", select.Select)
|
21
21
|
|
@@ -37,6 +37,7 @@ async def to_code(config):
|
|
37
37
|
options = widget.config.get(CONF_OPTIONS, [])
|
38
38
|
selector = await select.new_select(config, options=options)
|
39
39
|
paren = await cg.get_variable(config[CONF_LVGL_ID])
|
40
|
+
await wait_for_widgets()
|
40
41
|
async with LambdaContext(EVENT_ARG) as pub_ctx:
|
41
42
|
pub_ctx.add(selector.publish_index(widget.get_value()))
|
42
43
|
async with LambdaContext([(cg.uint16, "v")]) as control:
|
@@ -14,7 +14,7 @@ from ..lvcode import (
|
|
14
14
|
)
|
15
15
|
from ..schemas import LVGL_SCHEMA
|
16
16
|
from ..types import LV_EVENT, LvNumber
|
17
|
-
from ..widgets import Widget, get_widgets
|
17
|
+
from ..widgets import Widget, get_widgets, wait_for_widgets
|
18
18
|
|
19
19
|
CONFIG_SCHEMA = (
|
20
20
|
sensor_schema(Sensor)
|
@@ -33,6 +33,7 @@ async def to_code(config):
|
|
33
33
|
widget = await get_widgets(config, CONF_WIDGET)
|
34
34
|
widget = widget[0]
|
35
35
|
assert isinstance(widget, Widget)
|
36
|
+
await wait_for_widgets()
|
36
37
|
async with LambdaContext(EVENT_ARG) as lamb:
|
37
38
|
lv_add(sensor.publish_state(widget.get_value()))
|
38
39
|
async with LvContext(paren, LVGL_COMP_ARG):
|
@@ -16,7 +16,7 @@ from ..lvcode import (
|
|
16
16
|
)
|
17
17
|
from ..schemas import LVGL_SCHEMA
|
18
18
|
from ..types import LV_EVENT, LV_STATE, lv_pseudo_button_t, lvgl_ns
|
19
|
-
from ..widgets import get_widgets
|
19
|
+
from ..widgets import get_widgets, wait_for_widgets
|
20
20
|
|
21
21
|
LVGLSwitch = lvgl_ns.class_("LVGLSwitch", Switch)
|
22
22
|
CONFIG_SCHEMA = (
|
@@ -35,6 +35,7 @@ async def to_code(config):
|
|
35
35
|
paren = await cg.get_variable(config[CONF_LVGL_ID])
|
36
36
|
widget = await get_widgets(config, CONF_WIDGET)
|
37
37
|
widget = widget[0]
|
38
|
+
await wait_for_widgets()
|
38
39
|
async with LambdaContext(EVENT_ARG) as checked_ctx:
|
39
40
|
checked_ctx.add(switch.publish_state(widget.get_value()))
|
40
41
|
async with LambdaContext([(cg.bool_, "v")]) as control:
|
@@ -15,7 +15,7 @@ from ..lvcode import (
|
|
15
15
|
)
|
16
16
|
from ..schemas import LVGL_SCHEMA
|
17
17
|
from ..types import LV_EVENT, LvText, lvgl_ns
|
18
|
-
from ..widgets import get_widgets
|
18
|
+
from ..widgets import get_widgets, wait_for_widgets
|
19
19
|
|
20
20
|
LVGLText = lvgl_ns.class_("LVGLText", text.Text)
|
21
21
|
|
@@ -32,6 +32,7 @@ async def to_code(config):
|
|
32
32
|
paren = await cg.get_variable(config[CONF_LVGL_ID])
|
33
33
|
widget = await get_widgets(config, CONF_WIDGET)
|
34
34
|
widget = widget[0]
|
35
|
+
await wait_for_widgets()
|
35
36
|
async with LambdaContext([(cg.std_string, "text_value")]) as control:
|
36
37
|
await widget.set_property("text", "text_value.c_str())")
|
37
38
|
lv.event_send(widget.obj, API_EVENT, None)
|
@@ -10,7 +10,7 @@ from ..defines import CONF_LVGL_ID, CONF_WIDGET
|
|
10
10
|
from ..lvcode import API_EVENT, EVENT_ARG, UPDATE_EVENT, LambdaContext, LvContext
|
11
11
|
from ..schemas import LVGL_SCHEMA
|
12
12
|
from ..types import LV_EVENT, LvText
|
13
|
-
from ..widgets import get_widgets
|
13
|
+
from ..widgets import get_widgets, wait_for_widgets
|
14
14
|
|
15
15
|
CONFIG_SCHEMA = (
|
16
16
|
text_sensor_schema(TextSensor)
|
@@ -28,6 +28,7 @@ async def to_code(config):
|
|
28
28
|
paren = await cg.get_variable(config[CONF_LVGL_ID])
|
29
29
|
widget = await get_widgets(config, CONF_WIDGET)
|
30
30
|
widget = widget[0]
|
31
|
+
await wait_for_widgets()
|
31
32
|
async with LambdaContext(EVENT_ARG) as pressed_ctx:
|
32
33
|
pressed_ctx.add(sensor.publish_state(widget.get_value()))
|
33
34
|
async with LvContext(paren) as ctx:
|
@@ -223,6 +223,19 @@ async def get_widget_(wid: Widget):
|
|
223
223
|
return await FakeAwaitable(get_widget_generator(wid))
|
224
224
|
|
225
225
|
|
226
|
+
def widgets_wait_generator():
|
227
|
+
while True:
|
228
|
+
if Widget.widgets_completed:
|
229
|
+
return
|
230
|
+
yield
|
231
|
+
|
232
|
+
|
233
|
+
async def wait_for_widgets():
|
234
|
+
if Widget.widgets_completed:
|
235
|
+
return
|
236
|
+
await FakeAwaitable(widgets_wait_generator())
|
237
|
+
|
238
|
+
|
226
239
|
async def get_widgets(config: Union[dict, list], id: str = CONF_ID) -> list[Widget]:
|
227
240
|
if not config:
|
228
241
|
return []
|
@@ -3,7 +3,7 @@ import functools
|
|
3
3
|
import esphome.codegen as cg
|
4
4
|
import esphome.config_validation as cv
|
5
5
|
|
6
|
-
from ..defines import CONF_MAIN
|
6
|
+
from ..defines import CONF_MAIN
|
7
7
|
from ..lvcode import lv
|
8
8
|
from ..types import LvType
|
9
9
|
from . import Widget, WidgetType
|
@@ -38,13 +38,15 @@ LINE_SCHEMA = {
|
|
38
38
|
|
39
39
|
class LineType(WidgetType):
|
40
40
|
def __init__(self):
|
41
|
-
super().__init__(
|
41
|
+
super().__init__(
|
42
|
+
CONF_LINE, LvType("lv_line_t"), (CONF_MAIN,), LINE_SCHEMA, modify_schema={}
|
43
|
+
)
|
42
44
|
|
43
45
|
async def to_code(self, w: Widget, config):
|
44
46
|
"""For a line object, create and add the points"""
|
45
|
-
data
|
46
|
-
|
47
|
-
|
47
|
+
if data := config.get(CONF_POINTS):
|
48
|
+
points = cg.static_const_array(config[CONF_POINT_LIST_ID], data)
|
49
|
+
lv.line_set_points(w.obj, points, len(data))
|
48
50
|
|
49
51
|
|
50
52
|
line_spec = LineType()
|
@@ -13,7 +13,7 @@ from ..defines import (
|
|
13
13
|
TYPE_FLEX,
|
14
14
|
literal,
|
15
15
|
)
|
16
|
-
from ..helpers import add_lv_use
|
16
|
+
from ..helpers import add_lv_use, lvgl_components_required
|
17
17
|
from ..lv_validation import lv_bool, lv_pct, lv_text
|
18
18
|
from ..lvcode import (
|
19
19
|
EVENT_ARG,
|
@@ -72,6 +72,7 @@ async def msgbox_to_code(conf):
|
|
72
72
|
*buttonmatrix_spec.get_uses(),
|
73
73
|
*button_spec.get_uses(),
|
74
74
|
)
|
75
|
+
lvgl_components_required.add("BUTTONMATRIX")
|
75
76
|
messagebox_id = conf[CONF_ID]
|
76
77
|
outer = lv_Pvariable(lv_obj_t, messagebox_id.id)
|
77
78
|
buttonmatrix = new_Pvariable(
|
@@ -7,8 +7,10 @@
|
|
7
7
|
|
8
8
|
#include <hardware/clocks.h>
|
9
9
|
#include <hardware/dma.h>
|
10
|
+
#include <hardware/irq.h>
|
10
11
|
#include <hardware/pio.h>
|
11
12
|
#include <pico/stdlib.h>
|
13
|
+
#include <pico/sem.h>
|
12
14
|
|
13
15
|
namespace esphome {
|
14
16
|
namespace rp2040_pio_led_strip {
|
@@ -23,6 +25,19 @@ static std::map<Chipset, bool> conf_count_ = {
|
|
23
25
|
{CHIPSET_WS2812, false}, {CHIPSET_WS2812B, false}, {CHIPSET_SK6812, false},
|
24
26
|
{CHIPSET_SM16703, false}, {CHIPSET_CUSTOM, false},
|
25
27
|
};
|
28
|
+
static bool dma_chan_active_[12];
|
29
|
+
static struct semaphore dma_write_complete_sem_[12];
|
30
|
+
|
31
|
+
// DMA interrupt service routine
|
32
|
+
void RP2040PIOLEDStripLightOutput::dma_write_complete_handler_() {
|
33
|
+
uint32_t channel = dma_hw->ints0;
|
34
|
+
for (uint dma_chan = 0; dma_chan < 12; ++dma_chan) {
|
35
|
+
if (RP2040PIOLEDStripLightOutput::dma_chan_active_[dma_chan] && (channel & (1u << dma_chan))) {
|
36
|
+
dma_hw->ints0 = (1u << dma_chan); // Clear the interrupt
|
37
|
+
sem_release(&RP2040PIOLEDStripLightOutput::dma_write_complete_sem_[dma_chan]); // Handle the interrupt
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
26
41
|
|
27
42
|
void RP2040PIOLEDStripLightOutput::setup() {
|
28
43
|
ESP_LOGCONFIG(TAG, "Setting up RP2040 LED Strip...");
|
@@ -57,22 +72,22 @@ void RP2040PIOLEDStripLightOutput::setup() {
|
|
57
72
|
// but there are only 4 state machines on each PIO so we can only have 4 strips per PIO
|
58
73
|
uint offset = 0;
|
59
74
|
|
60
|
-
if (num_instance_[this->pio_ == pio0 ? 0 : 1] > 4) {
|
75
|
+
if (RP2040PIOLEDStripLightOutput::num_instance_[this->pio_ == pio0 ? 0 : 1] > 4) {
|
61
76
|
ESP_LOGE(TAG, "Too many instances of PIO program");
|
62
77
|
this->mark_failed();
|
63
78
|
return;
|
64
79
|
}
|
65
80
|
// keep track of how many instances of the PIO program are running on each PIO
|
66
|
-
num_instance_[this->pio_ == pio0 ? 0 : 1]++;
|
81
|
+
RP2040PIOLEDStripLightOutput::num_instance_[this->pio_ == pio0 ? 0 : 1]++;
|
67
82
|
|
68
83
|
// if there are multiple strips of the same chipset, we can reuse the same PIO program and save space
|
69
84
|
if (this->conf_count_[this->chipset_]) {
|
70
|
-
offset = chipset_offsets_[this->chipset_];
|
85
|
+
offset = RP2040PIOLEDStripLightOutput::chipset_offsets_[this->chipset_];
|
71
86
|
} else {
|
72
87
|
// Load the assembled program into the PIO and get its location in the PIO's instruction memory and save it
|
73
88
|
offset = pio_add_program(this->pio_, this->program_);
|
74
|
-
chipset_offsets_[this->chipset_] = offset;
|
75
|
-
conf_count_[this->chipset_] = true;
|
89
|
+
RP2040PIOLEDStripLightOutput::chipset_offsets_[this->chipset_] = offset;
|
90
|
+
RP2040PIOLEDStripLightOutput::conf_count_[this->chipset_] = true;
|
76
91
|
}
|
77
92
|
|
78
93
|
// Configure the state machine's PIO, and start it
|
@@ -93,6 +108,9 @@ void RP2040PIOLEDStripLightOutput::setup() {
|
|
93
108
|
return;
|
94
109
|
}
|
95
110
|
|
111
|
+
// Mark the DMA channel as active
|
112
|
+
RP2040PIOLEDStripLightOutput::dma_chan_active_[this->dma_chan_] = true;
|
113
|
+
|
96
114
|
this->dma_config_ = dma_channel_get_default_config(this->dma_chan_);
|
97
115
|
channel_config_set_transfer_data_size(
|
98
116
|
&this->dma_config_,
|
@@ -109,6 +127,13 @@ void RP2040PIOLEDStripLightOutput::setup() {
|
|
109
127
|
false // don't start yet
|
110
128
|
);
|
111
129
|
|
130
|
+
// Initialize the semaphore for this DMA channel
|
131
|
+
sem_init(&RP2040PIOLEDStripLightOutput::dma_write_complete_sem_[this->dma_chan_], 1, 1);
|
132
|
+
|
133
|
+
irq_set_exclusive_handler(DMA_IRQ_0, dma_write_complete_handler_); // after DMA all data, raise an interrupt
|
134
|
+
dma_channel_set_irq0_enabled(this->dma_chan_, true); // map DMA channel to interrupt
|
135
|
+
irq_set_enabled(DMA_IRQ_0, true); // enable interrupt
|
136
|
+
|
112
137
|
this->init_(this->pio_, this->sm_, offset, this->pin_, this->max_refresh_rate_);
|
113
138
|
}
|
114
139
|
|
@@ -126,6 +151,7 @@ void RP2040PIOLEDStripLightOutput::write_state(light::LightState *state) {
|
|
126
151
|
}
|
127
152
|
|
128
153
|
// the bits are already in the correct order for the pio program so we can just copy the buffer using DMA
|
154
|
+
sem_acquire_blocking(&RP2040PIOLEDStripLightOutput::dma_write_complete_sem_[this->dma_chan_]);
|
129
155
|
dma_channel_transfer_from_buffer_now(this->dma_chan_, this->buf_, this->get_buffer_size_());
|
130
156
|
}
|
131
157
|
|
@@ -13,6 +13,7 @@
|
|
13
13
|
#include <hardware/pio.h>
|
14
14
|
#include <hardware/structs/pio.h>
|
15
15
|
#include <pico/stdio.h>
|
16
|
+
#include <pico/sem.h>
|
16
17
|
#include <map>
|
17
18
|
|
18
19
|
namespace esphome {
|
@@ -95,6 +96,8 @@ class RP2040PIOLEDStripLightOutput : public light::AddressableLight {
|
|
95
96
|
|
96
97
|
size_t get_buffer_size_() const { return this->num_leds_ * (3 + this->is_rgbw_); }
|
97
98
|
|
99
|
+
static void dma_write_complete_handler_();
|
100
|
+
|
98
101
|
uint8_t *buf_{nullptr};
|
99
102
|
uint8_t *effect_data_{nullptr};
|
100
103
|
|
@@ -120,6 +123,8 @@ class RP2040PIOLEDStripLightOutput : public light::AddressableLight {
|
|
120
123
|
inline static int num_instance_[2];
|
121
124
|
inline static std::map<Chipset, bool> conf_count_;
|
122
125
|
inline static std::map<Chipset, int> chipset_offsets_;
|
126
|
+
inline static bool dma_chan_active_[12];
|
127
|
+
inline static struct semaphore dma_write_complete_sem_[12];
|
123
128
|
};
|
124
129
|
|
125
130
|
} // namespace rp2040_pio_led_strip
|
@@ -32,7 +32,7 @@ void Rtttl::play(std::string rtttl) {
|
|
32
32
|
if (this->state_ != State::STATE_STOPPED && this->state_ != State::STATE_STOPPING) {
|
33
33
|
int pos = this->rtttl_.find(':');
|
34
34
|
auto name = this->rtttl_.substr(0, pos);
|
35
|
-
ESP_LOGW(TAG, "
|
35
|
+
ESP_LOGW(TAG, "RTTTL Component is already playing: %s", name.c_str());
|
36
36
|
return;
|
37
37
|
}
|
38
38
|
|
@@ -122,6 +122,7 @@ void Rtttl::stop() {
|
|
122
122
|
#ifdef USE_OUTPUT
|
123
123
|
if (this->output_ != nullptr) {
|
124
124
|
this->output_->set_level(0.0);
|
125
|
+
this->set_state_(STATE_STOPPED);
|
125
126
|
}
|
126
127
|
#endif
|
127
128
|
#ifdef USE_SPEAKER
|
@@ -129,10 +130,10 @@ void Rtttl::stop() {
|
|
129
130
|
if (this->speaker_->is_running()) {
|
130
131
|
this->speaker_->stop();
|
131
132
|
}
|
133
|
+
this->set_state_(STATE_STOPPING);
|
132
134
|
}
|
133
135
|
#endif
|
134
136
|
this->note_duration_ = 0;
|
135
|
-
this->set_state_(STATE_STOPPING);
|
136
137
|
}
|
137
138
|
|
138
139
|
void Rtttl::loop() {
|
@@ -342,6 +343,7 @@ void Rtttl::finish_() {
|
|
342
343
|
#ifdef USE_OUTPUT
|
343
344
|
if (this->output_ != nullptr) {
|
344
345
|
this->output_->set_level(0.0);
|
346
|
+
this->set_state_(State::STATE_STOPPED);
|
345
347
|
}
|
346
348
|
#endif
|
347
349
|
#ifdef USE_SPEAKER
|
@@ -354,9 +356,9 @@ void Rtttl::finish_() {
|
|
354
356
|
this->speaker_->play((uint8_t *) (&sample), 8);
|
355
357
|
|
356
358
|
this->speaker_->finish();
|
359
|
+
this->set_state_(State::STATE_STOPPING);
|
357
360
|
}
|
358
361
|
#endif
|
359
|
-
this->set_state_(State::STATE_STOPPING);
|
360
362
|
this->note_duration_ = 0;
|
361
363
|
this->on_finished_playback_callback_.call();
|
362
364
|
ESP_LOGD(TAG, "Playback finished");
|
@@ -480,7 +480,7 @@ void HOT WaveshareEPaperTypeA::display() {
|
|
480
480
|
this->start_data_();
|
481
481
|
switch (this->model_) {
|
482
482
|
case TTGO_EPAPER_2_13_IN_B1: { // block needed because of variable initializations
|
483
|
-
int16_t wb = ((this->
|
483
|
+
int16_t wb = ((this->get_width_controller()) >> 3);
|
484
484
|
for (int i = 0; i < this->get_height_internal(); i++) {
|
485
485
|
for (int j = 0; j < wb; j++) {
|
486
486
|
int idx = j + (this->get_height_internal() - 1 - i) * wb;
|
@@ -766,7 +766,7 @@ void WaveshareEPaper2P7InV2::initialize() {
|
|
766
766
|
// XRAM_START_AND_END_POSITION
|
767
767
|
this->command(0x44);
|
768
768
|
this->data(0x00);
|
769
|
-
this->data(((
|
769
|
+
this->data(((this->get_width_controller() - 1) >> 3) & 0xFF);
|
770
770
|
// YRAM_START_AND_END_POSITION
|
771
771
|
this->command(0x45);
|
772
772
|
this->data(0x00);
|
@@ -928,8 +928,8 @@ void HOT WaveshareEPaper2P7InB::display() {
|
|
928
928
|
|
929
929
|
// TCON_RESOLUTION
|
930
930
|
this->command(0x61);
|
931
|
-
this->data(this->
|
932
|
-
this->data(this->
|
931
|
+
this->data(this->get_width_controller() >> 8);
|
932
|
+
this->data(this->get_width_controller() & 0xff); // 176
|
933
933
|
this->data(this->get_height_internal() >> 8);
|
934
934
|
this->data(this->get_height_internal() & 0xff); // 264
|
935
935
|
|
@@ -994,7 +994,7 @@ void WaveshareEPaper2P7InBV2::initialize() {
|
|
994
994
|
// self.SetWindows(0, 0, self.width-1, self.height-1)
|
995
995
|
// SetWindows(self, Xstart, Ystart, Xend, Yend):
|
996
996
|
|
997
|
-
uint32_t xend = this->
|
997
|
+
uint32_t xend = this->get_width_controller() - 1;
|
998
998
|
uint32_t yend = this->get_height_internal() - 1;
|
999
999
|
this->command(0x44);
|
1000
1000
|
this->data(0x00);
|
esphome/const.py
CHANGED
esphome/writer.py
CHANGED
@@ -106,6 +106,8 @@ def storage_should_clean(old: StorageJSON, new: StorageJSON) -> bool:
|
|
106
106
|
return True
|
107
107
|
if old.build_path != new.build_path:
|
108
108
|
return True
|
109
|
+
if old.loaded_integrations != new.loaded_integrations:
|
110
|
+
return True
|
109
111
|
return False
|
110
112
|
|
111
113
|
|
@@ -117,7 +119,9 @@ def update_storage_json():
|
|
117
119
|
return
|
118
120
|
|
119
121
|
if storage_should_clean(old, new):
|
120
|
-
_LOGGER.info(
|
122
|
+
_LOGGER.info(
|
123
|
+
"Core config, version or integrations changed, cleaning build files..."
|
124
|
+
)
|
121
125
|
clean_build()
|
122
126
|
|
123
127
|
new.save(path)
|
@@ -5,7 +5,7 @@ esphome/codegen.py,sha256=GePHUM7xdXb_Pil59SHVsXg2F4VBPgkH-Fz2PDX8Z54,1873
|
|
5
5
|
esphome/config.py,sha256=ArMupdqCpKqQm-vFWb85HueI88DAfYTjuhR6mA691DI,39614
|
6
6
|
esphome/config_helpers.py,sha256=MKf_wzO35nn41FvigXE0iYKDslPgL2ruf8R-EPtTT2I,3256
|
7
7
|
esphome/config_validation.py,sha256=Uck0GvA97sJ6sW25y0nqvOT2nsYIb6uZ_1sI-YBl4vc,65844
|
8
|
-
esphome/const.py,sha256=
|
8
|
+
esphome/const.py,sha256=kMsVH5LZ2U1X2Gum-jJOaohHDvKv9COgSjF70-3hERY,39408
|
9
9
|
esphome/coroutine.py,sha256=j_14z8dIIzIBeuNO30D4c1RJvMMt1xZFZ58Evd-EvJA,9344
|
10
10
|
esphome/cpp_generator.py,sha256=lXPXHYUsFIvBSAoZ93mXYlGcXYg5L18nTtYGHE4_rr8,31203
|
11
11
|
esphome/cpp_helpers.py,sha256=6C2vNbOIhZKi43xRVlk5hp9GfshfBn-rc5D_ZFUEYaE,4801
|
@@ -27,7 +27,7 @@ esphome/util.py,sha256=sKW1kNMRle3bOGrw9Rga32ZfSDXYMbQeQeVKxFEumJs,9329
|
|
27
27
|
esphome/voluptuous_schema.py,sha256=rawKKTYh2kjXSGPaQnLS4qxpgoI9KwXPBQpgIxzPUzo,9316
|
28
28
|
esphome/vscode.py,sha256=612-o7AVyoh1Fmg-ZXYxKVWUc5fcoumsnunpMv7MQuo,3251
|
29
29
|
esphome/wizard.py,sha256=UyH7vRdfJIjQeN8EIgkpUsBReM0nD1mJ8mz0X-Ge9eE,15596
|
30
|
-
esphome/writer.py,sha256=
|
30
|
+
esphome/writer.py,sha256=liOcFtHJ4oJOzRWAqOglO8bhFxqeQxEqX2wO_00W-ZM,11110
|
31
31
|
esphome/yaml_util.py,sha256=Yao1o29ftfEH-hdnc5zr-74-uhh0dfMPXj-J7xRCdtY,21659
|
32
32
|
esphome/zeroconf.py,sha256=MF4_FderxU0mrtgMfnyA5SjYpGp72D36gYuRDYjXiAI,6804
|
33
33
|
esphome/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -173,7 +173,7 @@ esphome/components/apds9960/apds9960.h,sha256=oFrXPQrPDS16gNSVdN1n6SKuvjwc9LdvpK
|
|
173
173
|
esphome/components/apds9960/binary_sensor.py,sha256=DcfxkwZFvgmOU3C_gVSfZOpJ-EZlZXMd0gHnAUnxxCs,786
|
174
174
|
esphome/components/apds9960/sensor.py,sha256=HoGfwl7WqJkpKI7BjeM1alXPcppdWVRrWwFzrZ0ISAo,871
|
175
175
|
esphome/components/api/__init__.py,sha256=grnorxG9QG00eQwcIsiijno_o_JS6xKzOitqLS1DkXg,9895
|
176
|
-
esphome/components/api/api_connection.cpp,sha256=
|
176
|
+
esphome/components/api/api_connection.cpp,sha256=ng51imTdORrflO7BZwPuZeO3Dt88GzG3cSU2Dgr_GgA,56717
|
177
177
|
esphome/components/api/api_connection.h,sha256=5BPFRslCG0l-RwPjtt9xiwA0E7-3uT-US3_69xZiVFI,10323
|
178
178
|
esphome/components/api/api_frame_helper.cpp,sha256=-K3JLxUJ3gKpxVzJwOAwlCvlwl7C7VTgQWhpHlhzgd0,32998
|
179
179
|
esphome/components/api/api_frame_helper.h,sha256=c1ET5DyoWNtdEkxLCVmyfyA8ZASBv9iAA24I5mtmnzA,5522
|
@@ -728,7 +728,7 @@ esphome/components/ens210/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
728
728
|
esphome/components/ens210/ens210.cpp,sha256=ZFc51aAks8P3bCKi5EkkQaueYIf5C4i4YmDfCUJbzU0,8377
|
729
729
|
esphome/components/ens210/ens210.h,sha256=yhCaQwB3GjeBYgOLXhuLCHELyjE3IrdL2e0Llfw9HU8,1545
|
730
730
|
esphome/components/ens210/sensor.py,sha256=_ES1FNSEIwmZLNNzqUV_nGvjPx-i_j2pblAe6vg8f9M,1724
|
731
|
-
esphome/components/esp32/__init__.py,sha256=
|
731
|
+
esphome/components/esp32/__init__.py,sha256=B5Pvrw65UmbJFIV7sGjRoXROXM1Gb10UY1mluhWx6nc,26747
|
732
732
|
esphome/components/esp32/boards.py,sha256=Fbn1QarvNqIbPV_yDTap128ZHszZiExIhK3wjQUS6w8,42736
|
733
733
|
esphome/components/esp32/const.py,sha256=2yxLQg3p2-S3nRL6-zsF_dICrP_6waUfY5k8EFsoyVM,966
|
734
734
|
esphome/components/esp32/core.cpp,sha256=GfidaExP8kU7ODM1S_VI9c3tQtmG2TaKwLJ-zzeSqd4,2413
|
@@ -1387,36 +1387,36 @@ esphome/components/ltr_als_ps/ltr_als_ps.cpp,sha256=a5NBwe7wtJHwLgIDFoollhz1VSDI
|
|
1387
1387
|
esphome/components/ltr_als_ps/ltr_als_ps.h,sha256=TxgTmv7apRGsxHAxDow6-CpkQsdWID2KLk-lSDi7KtQ,6466
|
1388
1388
|
esphome/components/ltr_als_ps/ltr_definitions.h,sha256=yaIvnLQBIBnPuQBvHDD9Q_16Uoq1vnABwsTm8j77a3w,7255
|
1389
1389
|
esphome/components/ltr_als_ps/sensor.py,sha256=e5KnfruXbVI0s1S0bLJihTnIM5UOmiQT2dMRHxFReAM,10023
|
1390
|
-
esphome/components/lvgl/__init__.py,sha256=
|
1391
|
-
esphome/components/lvgl/automation.py,sha256=
|
1390
|
+
esphome/components/lvgl/__init__.py,sha256=vRZwy30I0mZ5wGxx3RIUEfZ-s8D0zgRnLYJt5qdZn-w,12571
|
1391
|
+
esphome/components/lvgl/automation.py,sha256=ecURec0lW8iFLICKJF3xzeZJ8fjL3OlD1h8IXiYBXgY,7441
|
1392
1392
|
esphome/components/lvgl/defines.py,sha256=DxFTnt42o9eLRExvIUqzkmcVN-4nMBF6YSewxynfo_s,12183
|
1393
1393
|
esphome/components/lvgl/encoders.py,sha256=b8E__Bu4OJj8_svtgiHE8hfL78WSJIAuGo_JpmlVf5I,3088
|
1394
1394
|
esphome/components/lvgl/font.cpp,sha256=l9dPIw7LdOdtg_3QZErTLLevMc6A66Wfm-1s-6qcBmM,2712
|
1395
1395
|
esphome/components/lvgl/helpers.py,sha256=XI3C5IHwoSVlgR32kMxeXTZWK6iW112nmWv5wByrKLY,1253
|
1396
1396
|
esphome/components/lvgl/lv_validation.py,sha256=aGWc0YBZCZjYIgwYwE83vnROFiaMJf6Fo9db1Sas6Jc,8995
|
1397
|
-
esphome/components/lvgl/lvcode.py,sha256=
|
1398
|
-
esphome/components/lvgl/lvgl_esphome.cpp,sha256=
|
1399
|
-
esphome/components/lvgl/lvgl_esphome.h,sha256=
|
1397
|
+
esphome/components/lvgl/lvcode.py,sha256=4M4itIJHsscJvyt5YZGZ5y216vjsyVExXvRHmEfZhLI,10173
|
1398
|
+
esphome/components/lvgl/lvgl_esphome.cpp,sha256=U7vZq-Sct0Tr5mRCikqKM5t9F9_SQFNJtS9b9y3pD7I,14313
|
1399
|
+
esphome/components/lvgl/lvgl_esphome.h,sha256=rHU4ISZwSQNoVjKjOomhaOD-WiMBdKmjPwopR1cto8Y,9170
|
1400
1400
|
esphome/components/lvgl/lvgl_hal.h,sha256=aZqWpSmKKAB-ZfNxxgxjgASTtLpAZjXJKuoTiPB0qqU,431
|
1401
1401
|
esphome/components/lvgl/schemas.py,sha256=CmENCi8w-gO7bvJB0mw5LAhk_dxSNchjOvqwUu7v4TE,14045
|
1402
1402
|
esphome/components/lvgl/styles.py,sha256=DauT2qibb5vJMbejaUnhQ6OHEmDJkcjY9yctl4GrcCw,2167
|
1403
1403
|
esphome/components/lvgl/touchscreens.py,sha256=R2tkfse86qzWDU6Ot_tARApWfn1jeFaJObDUX5gITL8,1634
|
1404
1404
|
esphome/components/lvgl/trigger.py,sha256=bUdmvSH-mEPCzdcJQuyedq0oIIYvMOzzGit_5zdjCmA,2269
|
1405
1405
|
esphome/components/lvgl/types.py,sha256=rkWA2TP_x-iVnQAKFOkCQEq8Dxni66CNzUIC9Py5Vpw,5791
|
1406
|
-
esphome/components/lvgl/binary_sensor/__init__.py,sha256=
|
1407
|
-
esphome/components/lvgl/light/__init__.py,sha256=
|
1406
|
+
esphome/components/lvgl/binary_sensor/__init__.py,sha256=msfXX5zJA7CDWR2fk7UB7OKTWA978WdNhjGHm9Tz6FI,1347
|
1407
|
+
esphome/components/lvgl/light/__init__.py,sha256=_6xwTJKz5yByZxxE1Emn0KY9O-WiCPxfe_LfGgVhIhw,1126
|
1408
1408
|
esphome/components/lvgl/light/lvgl_light.h,sha256=bNvnIYH7UrvVHgWxIIlP2XAfsmEVDzz2-aIA6DbR1iU,1231
|
1409
|
-
esphome/components/lvgl/number/__init__.py,sha256=
|
1409
|
+
esphome/components/lvgl/number/__init__.py,sha256=pgZrZ0Y61oiBuqfMbPxtU652_VNTYORaKu4ZZyK62co,2059
|
1410
1410
|
esphome/components/lvgl/number/lvgl_number.h,sha256=C52MOTc8XSF3a76U6J0GjRUsYbvMftcgvhHenFKzzZk,850
|
1411
|
-
esphome/components/lvgl/select/__init__.py,sha256=
|
1411
|
+
esphome/components/lvgl/select/__init__.py,sha256=qHOWAW6DpAJIOqPC01TIJu2fbTHlDUy4DU-ix1-R-W8,1782
|
1412
1412
|
esphome/components/lvgl/select/lvgl_select.h,sha256=Qz6fo_R63rSUsO0uzLAjKYsZPZufsxV-YshHkntZ_NI,1639
|
1413
|
-
esphome/components/lvgl/sensor/__init__.py,sha256=
|
1414
|
-
esphome/components/lvgl/switch/__init__.py,sha256=
|
1413
|
+
esphome/components/lvgl/sensor/__init__.py,sha256=cdEsOnVUadMXKaW9RRrKdiR3RsZfgiVrCjCAsLOrtvg,1287
|
1414
|
+
esphome/components/lvgl/switch/__init__.py,sha256=zWEm1JR3mqWQxaAZRYHDLkKFJoawb9jstoyCudcOnTM,1788
|
1415
1415
|
esphome/components/lvgl/switch/lvgl_switch.h,sha256=w8SqlodBYRdVzlhBwkBERRP-X-IrWAmtS-01AC3zhXs,837
|
1416
|
-
esphome/components/lvgl/text/__init__.py,sha256=
|
1416
|
+
esphome/components/lvgl/text/__init__.py,sha256=I1dgyifKyoBP7tOfZ_wcNVN17r6rs6VBWwsKVRE1pHI,1577
|
1417
1417
|
esphome/components/lvgl/text/lvgl_text.h,sha256=KZrcwh3G0wADH9hg4byTpF1pk67x5cn9zHWOwv_G5YY,883
|
1418
|
-
esphome/components/lvgl/text_sensor/__init__.py,sha256=
|
1419
|
-
esphome/components/lvgl/widgets/__init__.py,sha256=
|
1418
|
+
esphome/components/lvgl/text_sensor/__init__.py,sha256=NXdR4qq4T9i293n-yDb5uZlzSNI2nOWsJ3DlKtMjqrA,1247
|
1419
|
+
esphome/components/lvgl/widgets/__init__.py,sha256=IluN1JMViHSL33fv5e3v94nQXaeM9wDiplg3zwyJvNM,13313
|
1420
1420
|
esphome/components/lvgl/widgets/animimg.py,sha256=-dsL4TJ5k3defNUiLIE6xads3pH1I1T5Bmnn7uKcQZ8,3395
|
1421
1421
|
esphome/components/lvgl/widgets/arc.py,sha256=M7T1iU_dhjnHJSSm-DW0u7RSZAgAQwycBxifODPbTyw,2305
|
1422
1422
|
esphome/components/lvgl/widgets/button.py,sha256=lR_8dHZK3P9AY6WbjfL3Sj9oyTOf-i9qbvkGzcPpzgk,423
|
@@ -1427,10 +1427,10 @@ esphome/components/lvgl/widgets/img.py,sha256=g0YosuPAspZ9sCWeXZ0zwOL2Wjy8BXaW1W
|
|
1427
1427
|
esphome/components/lvgl/widgets/keyboard.py,sha256=1WBm_nfeFpWvzYts68FN_arqovOwMFs47TQAPCKour8,1543
|
1428
1428
|
esphome/components/lvgl/widgets/label.py,sha256=5xl1a6apdJgGKmkpL8m7RDASjaeKzjKTllhY26Gbfag,1139
|
1429
1429
|
esphome/components/lvgl/widgets/led.py,sha256=qoe_kvZpoRkwbxz25Z66KQ__KLC2tfhAukChp1jdlDc,888
|
1430
|
-
esphome/components/lvgl/widgets/line.py,sha256=
|
1430
|
+
esphome/components/lvgl/widgets/line.py,sha256=bIlKIEnVYPENG5cqupakoqCMj-Oddgun-X5nmTpOMig,1392
|
1431
1431
|
esphome/components/lvgl/widgets/lv_bar.py,sha256=DbiUvhKdh9bsRMTU-rJYYA5KCjBUxDsW-7tvx8-CIRM,1670
|
1432
1432
|
esphome/components/lvgl/widgets/meter.py,sha256=cZx1FkosNEFL7jAuIWlT3I_YR8k4BgI8xji5pmJa7G0,10710
|
1433
|
-
esphome/components/lvgl/widgets/msgbox.py,sha256=
|
1433
|
+
esphome/components/lvgl/widgets/msgbox.py,sha256=20VWlK6AQ9gCQe6WXSKLSQ0bHjyrhsJQ7QCbAsOcZ4c,4635
|
1434
1434
|
esphome/components/lvgl/widgets/obj.py,sha256=rtqGHq4vcAr6ABNTzjGWnSdhEm8St0ScQ-qqEgImqdU,765
|
1435
1435
|
esphome/components/lvgl/widgets/page.py,sha256=Q3tdC9d3r9c-afiTzrvf_83kZ0DuoFAxnuUoM2GK8gU,3566
|
1436
1436
|
esphome/components/lvgl/widgets/roller.py,sha256=bBlKJJTMBlxJwdYK326QsPK2MB8uOW-vQPpeeZxOH_Y,2073
|
@@ -2211,8 +2211,8 @@ esphome/components/rp2040/preferences.cpp,sha256=tSFwd7RWmbkJSfOUcq_y6rlNXpSxGlB
|
|
2211
2211
|
esphome/components/rp2040/preferences.h,sha256=z7zFhLXLLmURu5RNaAlOpPIv2TnK8cvrGkGAyz0LvjM,216
|
2212
2212
|
esphome/components/rp2040_pio/__init__.py,sha256=tKUlvHo2khh10A_LFOMuIc7MPswajSzz4FrVlYaGRw8,1244
|
2213
2213
|
esphome/components/rp2040_pio_led_strip/__init__.py,sha256=QcyctD5MgxIKzfSZKAehNf2_W40eHvppWidpWMeDBHc,28
|
2214
|
-
esphome/components/rp2040_pio_led_strip/led_strip.cpp,sha256=
|
2215
|
-
esphome/components/rp2040_pio_led_strip/led_strip.h,sha256=
|
2214
|
+
esphome/components/rp2040_pio_led_strip/led_strip.cpp,sha256=ShiIeHQkA6ewjJL8QnKqKFq6w2N0ESxsA9xchK5bn_Y,7793
|
2215
|
+
esphome/components/rp2040_pio_led_strip/led_strip.h,sha256=G9aW-Wh9jbqXiXop2sW6BTrRfRzjgwLGmSzefdzv_-k,3450
|
2216
2216
|
esphome/components/rp2040_pio_led_strip/light.py,sha256=7tF4FNmHwewBvPuGJMs2kFtITUeOIZ9Tfgt0UD4MAR4,7925
|
2217
2217
|
esphome/components/rp2040_pwm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2218
2218
|
esphome/components/rp2040_pwm/output.py,sha256=dU5-CZL5z_jvSf3cbJs4czckKvPmn1ifV5Th1zdqECk,1747
|
@@ -2225,7 +2225,7 @@ esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.h,sha256=wQwb2lt50tVEkQ53Pj6Bm-KCGlc4
|
|
2225
2225
|
esphome/components/rtl87xx/__init__.py,sha256=HIcczzFYGdNtOj635-gH0VVmBOZjmvcS4mxFWdlPtBo,1362
|
2226
2226
|
esphome/components/rtl87xx/boards.py,sha256=JItSPj4n2UAvUXISoL2PTyTAqIi2Wp3sjGjs1fgS-3M,29269
|
2227
2227
|
esphome/components/rtttl/__init__.py,sha256=m8vjSNfwcgbJm6NhDe_ErddMMwUpe2StubWcMY8sd28,4383
|
2228
|
-
esphome/components/rtttl/rtttl.cpp,sha256=
|
2228
|
+
esphome/components/rtttl/rtttl.cpp,sha256=CxERszdc_mzMr-RPaI-vq0dQhmEoiMnV6cXiyCl1N_s,10865
|
2229
2229
|
esphome/components/rtttl/rtttl.h,sha256=8xnisjG4Glm8JhCDB-RIyyS0yySGCLRsLnT24brQtYs,2946
|
2230
2230
|
esphome/components/ruuvi_ble/__init__.py,sha256=9LmcfStqBeEzcuWdON_iGuI6Xh0BUssV1Aebv98Krks,619
|
2231
2231
|
esphome/components/ruuvi_ble/ruuvi_ble.cpp,sha256=XXeYIgr1OB20MxtdcTDAWowFeK8qRQmQKTMeSEuhAec,5724
|
@@ -2970,7 +2970,7 @@ esphome/components/watchdog/watchdog.h,sha256=8Ro3Kgi9C1bYFBkNEeKc188EK63uI48Vuz
|
|
2970
2970
|
esphome/components/waveshare_epaper/__init__.py,sha256=4Nn7UhpMJ9oSbuLdyVEW7G9PlIey2v33SWRNVizt9Oc,30
|
2971
2971
|
esphome/components/waveshare_epaper/display.py,sha256=csFJ_y-O30w4_JJ75N-RP5VKTS8mMf45imk-yOW6_hg,8425
|
2972
2972
|
esphome/components/waveshare_epaper/waveshare_213v3.cpp,sha256=DoXF6L9B2RodhIsCQ0myNycanrT50lx0JwxzW4Lluf4,7293
|
2973
|
-
esphome/components/waveshare_epaper/waveshare_epaper.cpp,sha256=
|
2973
|
+
esphome/components/waveshare_epaper/waveshare_epaper.cpp,sha256=Ejvjvz-tKd9zF3MXjwCViEwXdqicxCPWn2zlSEPNues,93334
|
2974
2974
|
esphome/components/waveshare_epaper/waveshare_epaper.h,sha256=DOI5LyxWob1x6Fqrwms0QvfsFVyRPzOF7gjv9f4nLK4,17990
|
2975
2975
|
esphome/components/web_server/__init__.py,sha256=eAivKqka7nyjY-ZP9O2t6Tvm145fVJGh0Bgx9YkE3Sw,8627
|
2976
2976
|
esphome/components/web_server/list_entities.cpp,sha256=PXfaW687audOXB2Gdx2Dtn2-J2XTbbQQgY_FivqE6DU,6214
|
@@ -3225,9 +3225,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
|
|
3225
3225
|
esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
|
3226
3226
|
esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
|
3227
3227
|
esphome/dashboard/util/text.py,sha256=ENDnfN4O0NdA3CKVJjQYabFbwbrsIhVKrAMQe53qYu4,534
|
3228
|
-
esphome-2024.8.
|
3229
|
-
esphome-2024.8.
|
3230
|
-
esphome-2024.8.
|
3231
|
-
esphome-2024.8.
|
3232
|
-
esphome-2024.8.
|
3233
|
-
esphome-2024.8.
|
3228
|
+
esphome-2024.8.1.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
|
3229
|
+
esphome-2024.8.1.dist-info/METADATA,sha256=kGtMI4Ie63G7IXGUbkpkl5jMw9t1IEHuy0-zF9Rkvao,3263
|
3230
|
+
esphome-2024.8.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
3231
|
+
esphome-2024.8.1.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
|
3232
|
+
esphome-2024.8.1.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
|
3233
|
+
esphome-2024.8.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|