22
22
#include < cstring> // memcpy(), memset()
23
23
#endif
24
24
25
- PinnacleTouch::PinnacleTouch (pinnacle_gpio_t dataReadyPin) : _dataReady(dataReadyPin)
25
+ PinnacleTouch::PinnacleTouch (pinnacle_gpio_t dataReadyPin) : _dataReady(dataReadyPin), _rev2025( false )
26
26
{
27
27
PINNACLE_USE_ARDUINO_API
28
28
pinMode (_dataReady, INPUT);
@@ -34,7 +34,8 @@ bool PinnacleTouch::begin()
34
34
delay (100 );
35
35
uint8_t buffer[3 ] = {0 }; // index 2 is relative mode defaults
36
36
rapReadBytes (PINNACLE_FIRMWARE_ID, buffer, 2 );
37
- if (buffer[0 ] == 7 || buffer[1 ] == 0x3A ) {
37
+ _rev2025 = buffer[0 ] == 0x0E && buffer[1 ] == 0x75 ;
38
+ if (_rev2025 || (buffer[0 ] == 7 && buffer[1 ] == 0x3A )) {
38
39
_dataMode = PINNACLE_RELATIVE;
39
40
buffer[0 ] = 0 ; // config power (defaults) and disable anymeas flags
40
41
buffer[1 ] = 0 ; // config absolute mode defaults and disable feed
@@ -123,6 +124,11 @@ PinnacleDataMode PinnacleTouch::getDataMode()
123
124
return _dataMode;
124
125
}
125
126
127
+ bool PinnacleTouch::isRev2025 ()
128
+ {
129
+ return _rev2025;
130
+ }
131
+
126
132
bool PinnacleTouch::isHardConfigured ()
127
133
{
128
134
if (_dataMode <= PINNACLE_ABSOLUTE) {
@@ -254,7 +260,7 @@ bool PinnacleTouch::isShutdown()
254
260
void PinnacleTouch::setSampleRate (uint16_t value)
255
261
{
256
262
if (_dataMode == PINNACLE_ABSOLUTE || _dataMode == PINNACLE_RELATIVE) {
257
- if (value == 200 || value == 300 ) {
263
+ if (!_rev2025 && ( value == 200 || value == 300 ) ) {
258
264
// disable palm & noise compensations
259
265
rapWrite (PINNACLE_FEED_CONFIG_3, 10 );
260
266
uint8_t reloadTimer = value == 300 ? 6 : 9 ;
@@ -264,7 +270,9 @@ void PinnacleTouch::setSampleRate(uint16_t value)
264
270
else {
265
271
// enable palm & noise compensations
266
272
rapWrite (PINNACLE_FEED_CONFIG_3, 0 );
267
- eraWriteBytes (0x019E , 0x13 , 2 );
273
+ if (!_rev2025) {
274
+ eraWriteBytes (0x019E , 0x13 , 2 );
275
+ }
268
276
}
269
277
// bad input values interpreted as 100 by Pinnacle
270
278
rapWrite (PINNACLE_SAMPLE_RATE, (uint8_t )value);
@@ -276,7 +284,7 @@ uint16_t PinnacleTouch::getSampleRate()
276
284
if (_dataMode == PINNACLE_ABSOLUTE || _dataMode == PINNACLE_RELATIVE) {
277
285
uint8_t temp = 0 ;
278
286
rapRead (PINNACLE_SAMPLE_RATE, &temp);
279
- if (temp == 0 ) {
287
+ if (!_rev2025 && temp == 0 ) {
280
288
eraRead (0x019E , &temp);
281
289
return temp == 6 ? 300 : 200 ;
282
290
}
@@ -290,7 +298,7 @@ uint16_t PinnacleTouch::getSampleRate()
290
298
291
299
void PinnacleTouch::detectFingerStylus (bool enableFinger, bool enableStylus, uint16_t sampleRate)
292
300
{
293
- if (_dataMode == PINNACLE_ABSOLUTE || _dataMode == PINNACLE_RELATIVE) {
301
+ if (!_rev2025 && ( _dataMode == PINNACLE_ABSOLUTE || _dataMode == PINNACLE_RELATIVE) ) {
294
302
setSampleRate (sampleRate);
295
303
uint8_t fingerStylus = 0 ;
296
304
eraRead (0x00EB , &fingerStylus);
@@ -322,7 +330,7 @@ bool PinnacleTouch::calibrate(bool run, bool tap, bool trackError, bool nerd, bo
322
330
323
331
void PinnacleTouch::setCalibrationMatrix (int16_t * matrix, uint8_t len)
324
332
{
325
- if (_dataMode <= PINNACLE_ABSOLUTE) {
333
+ if (!_rev2025 && _dataMode <= PINNACLE_ABSOLUTE) {
326
334
bool prevFeedState = isFeedEnabled ();
327
335
if (prevFeedState)
328
336
feedEnabled (false ); // this will save time on subsequent eraWrite calls
@@ -343,7 +351,7 @@ void PinnacleTouch::setCalibrationMatrix(int16_t* matrix, uint8_t len)
343
351
344
352
void PinnacleTouch::getCalibrationMatrix (int16_t * matrix)
345
353
{
346
- if (_dataMode <= PINNACLE_ABSOLUTE) {
354
+ if (!_rev2025 && _dataMode <= PINNACLE_ABSOLUTE) {
347
355
// must use sequential read of 92 bytes; individual reads return inaccurate data
348
356
eraReadBytes (0x01DF , reinterpret_cast <uint8_t *>(matrix), 92 );
349
357
for (uint8_t i = 0 ; i < 46 ; ++i) {
@@ -355,7 +363,7 @@ void PinnacleTouch::getCalibrationMatrix(int16_t* matrix)
355
363
356
364
void PinnacleTouch::setAdcGain (uint8_t sensitivity)
357
365
{
358
- if (_dataMode <= PINNACLE_ABSOLUTE) {
366
+ if (!_rev2025 && _dataMode <= PINNACLE_ABSOLUTE) {
359
367
if (sensitivity >= 4 )
360
368
sensitivity = 0 ; // faulty input defaults to highest sensitivity
361
369
uint8_t temp = 0 ;
@@ -366,7 +374,7 @@ void PinnacleTouch::setAdcGain(uint8_t sensitivity)
366
374
367
375
void PinnacleTouch::tuneEdgeSensitivity (uint8_t xAxisWideZMin, uint8_t yAxisWideZMin)
368
376
{
369
- if (_dataMode <= PINNACLE_ABSOLUTE) {
377
+ if (!_rev2025 && _dataMode <= PINNACLE_ABSOLUTE) {
370
378
eraWrite (0x0149 , xAxisWideZMin);
371
379
eraWrite (0x0168 , yAxisWideZMin);
372
380
}
0 commit comments