@@ -53,23 +53,27 @@ namespace lgfx
5353 if (!_inited || number > 4 ) return 0 ;
5454 if (gpio_int >= 0 && gpio_in (gpio_int)) return 0 ;
5555
56- std::uint_fast16_t tx, ty;
57- std::int32_t retry = 3 ;
58- std::uint32_t base = number * 6 ;
59- std::uint8_t tmp[base + 5 ];
56+ std::size_t base = number * 6 ;
57+ std::size_t len = base + 5 ;
58+
59+ std::uint8_t tmp[2 ][len];
60+ lgfx::i2c::readRegister (i2c_port, i2c_addr, 2 , tmp[0 ], len);
61+ std::int32_t retry = 5 ;
6062 do {
61- lgfx::i2c::readRegister (i2c_port, i2c_addr, 2 , tmp, 5 + base );
62- if (number >= tmp[0 ]) return 0 ;
63- tx = (tmp[base + 1 ] & 0x0F ) << 8 | tmp[base + 2 ];
64- ty = ( tmp[base + 3 ] & 0x0F ) << 8 | tmp[base + 4 ] ;
65- } while ((tx > x_max || ty > y_max) && --retry);
63+ lgfx::i2c::readRegister (i2c_port, i2c_addr, 2 , tmp[retry & 1 ], len );
64+ } while ( memcmp ( tmp[0 ], tmp[ 1 ], len) && --retry) ;
65+
66+ if ((std:: uint8_t )number >= tmp[0 ][ 0 ]) return 0 ;
67+
6668 if (tp)
6769 {
68- tp->x = tx;
69- tp->y = ty;
70- tp->id = tmp[base + 3 ] >> 4 ;
70+ auto data = &tmp[0 ][base];
71+ tp->size = 1 ;
72+ tp->x = (data[1 ] & 0x0F ) << 8 | data[2 ];
73+ tp->y = (data[3 ] & 0x0F ) << 8 | data[4 ];
74+ tp->id = data[3 ] >> 4 ;
7175 }
72- return tmp[0 ];
76+ return tmp[0 ][ 0 ] ;
7377 }
7478
7579// ----------------------------------------------------------------------------
0 commit comments