esphome/script/.neopixelbus.patch

36 lines
1.6 KiB
Diff

--- .pio/libdeps/livingroom8266/NeoPixelBus_ID547/src/internal/NeoEsp8266DmaMethod.h 2019-06-25 11:14:33.000000000 +0200
+++ .pio/libdeps/livingroom8266/NeoPixelBus_ID547/src/internal/NeoEsp8266DmaMethod.h.2 2019-06-25 11:14:40.000000000 +0200
@@ -195,7 +195,12 @@
_i2sBufDesc[indexDesc].sub_sof = 0;
_i2sBufDesc[indexDesc].datalen = blockSize;
_i2sBufDesc[indexDesc].blocksize = blockSize;
- _i2sBufDesc[indexDesc].buf_ptr = (uint32_t)is2Buffer;
+ union {
+ uint8_t *ptr;
+ uint32_t value;
+ } ptr;
+ ptr.ptr = is2Buffer;
+ _i2sBufDesc[indexDesc].buf_ptr = ptr.value;
_i2sBufDesc[indexDesc].unused = 0;
_i2sBufDesc[indexDesc].next_link_ptr = (uint32_t)&(_i2sBufDesc[indexDesc + 1]);
@@ -361,12 +366,15 @@
case NeoDmaState_Sending:
{
- slc_queue_item* finished_item = (slc_queue_item*)SLCRXEDA;
-
+ union {
+ slc_queue_item *ptr;
+ uint32_t value;
+ } ptr;
+ ptr.value = SLCRXEDA;
// the data block had actual data sent
// point last state block to first state block thus
// just looping and not sending the data blocks
- (finished_item + 1)->next_link_ptr = (uint32_t)(finished_item);
+ (ptr.ptr + 1)->next_link_ptr = ptr.value;
s_this->_dmaState = NeoDmaState_Zeroing;
}