@@ -70,7 +70,7 @@ unsigned int samplingInterval = 19; // how often to run the main loop (
70
70
/* i2c data */
71
71
struct i2c_device_info {
72
72
byte addr;
73
- byte reg;
73
+ int reg;
74
74
byte bytes;
75
75
};
76
76
@@ -375,10 +375,10 @@ void sysexCallback(byte command, byte argc, byte *argv)
375
375
{
376
376
byte mode;
377
377
byte slaveAddress;
378
- byte slaveRegister;
379
378
byte data;
380
- unsigned int delayTime;
381
-
379
+ int slaveRegister;
380
+ unsigned int delayTime;
381
+
382
382
switch (command) {
383
383
case I2C_REQUEST:
384
384
mode = argv[1 ] & I2C_READ_WRITE_MODE_MASK;
@@ -409,24 +409,34 @@ void sysexCallback(byte command, byte argc, byte *argv)
409
409
// a slave register is specified
410
410
slaveRegister = argv[2 ] + (argv[3 ] << 7 );
411
411
data = argv[4 ] + (argv[5 ] << 7 ); // bytes to read
412
- readAndReportData (slaveAddress, (int )slaveRegister, data);
413
412
}
414
413
else {
415
414
// a slave register is NOT specified
415
+ slaveRegister = REGISTER_NOT_SPECIFIED;
416
416
data = argv[2 ] + (argv[3 ] << 7 ); // bytes to read
417
- readAndReportData (slaveAddress, (int )REGISTER_NOT_SPECIFIED, data);
418
417
}
418
+ readAndReportData (slaveAddress, (int )slaveRegister, data);
419
419
break ;
420
420
case I2C_READ_CONTINUOUSLY:
421
421
if ((queryIndex + 1 ) >= MAX_QUERIES) {
422
422
// too many queries, just ignore
423
423
Firmata.sendString (" too many queries" );
424
424
break ;
425
425
}
426
+ if (argc == 6 ) {
427
+ // a slave register is specified
428
+ slaveRegister = argv[2 ] + (argv[3 ] << 7 );
429
+ data = argv[4 ] + (argv[5 ] << 7 ); // bytes to read
430
+ }
431
+ else {
432
+ // a slave register is NOT specified
433
+ slaveRegister = (int )REGISTER_NOT_SPECIFIED;
434
+ data = argv[2 ] + (argv[3 ] << 7 ); // bytes to read
435
+ }
426
436
queryIndex++;
427
437
query[queryIndex].addr = slaveAddress;
428
- query[queryIndex].reg = argv[ 2 ] + (argv[ 3 ] << 7 ) ;
429
- query[queryIndex].bytes = argv[ 4 ] + (argv[ 5 ] << 7 ) ;
438
+ query[queryIndex].reg = slaveRegister ;
439
+ query[queryIndex].bytes = data ;
430
440
break ;
431
441
case I2C_STOP_READING:
432
442
byte queryIndexToSkip;
0 commit comments