@@ -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
@@ -383,10 +383,10 @@ void sysexCallback(byte command, byte argc, byte *argv)
383
383
{
384
384
byte mode;
385
385
byte slaveAddress;
386
- byte slaveRegister;
387
386
byte data;
388
- unsigned int delayTime;
389
-
387
+ int slaveRegister;
388
+ unsigned int delayTime;
389
+
390
390
switch (command) {
391
391
case I2C_REQUEST:
392
392
mode = argv[1 ] & I2C_READ_WRITE_MODE_MASK;
@@ -417,24 +417,34 @@ void sysexCallback(byte command, byte argc, byte *argv)
417
417
// a slave register is specified
418
418
slaveRegister = argv[2 ] + (argv[3 ] << 7 );
419
419
data = argv[4 ] + (argv[5 ] << 7 ); // bytes to read
420
- readAndReportData (slaveAddress, (int )slaveRegister, data);
421
420
}
422
421
else {
423
422
// a slave register is NOT specified
423
+ slaveRegister = REGISTER_NOT_SPECIFIED;
424
424
data = argv[2 ] + (argv[3 ] << 7 ); // bytes to read
425
- readAndReportData (slaveAddress, (int )REGISTER_NOT_SPECIFIED, data);
426
425
}
426
+ readAndReportData (slaveAddress, (int )slaveRegister, data);
427
427
break ;
428
428
case I2C_READ_CONTINUOUSLY:
429
429
if ((queryIndex + 1 ) >= MAX_QUERIES) {
430
430
// too many queries, just ignore
431
431
Firmata.sendString (" too many queries" );
432
432
break ;
433
433
}
434
+ if (argc == 6 ) {
435
+ // a slave register is specified
436
+ slaveRegister = argv[2 ] + (argv[3 ] << 7 );
437
+ data = argv[4 ] + (argv[5 ] << 7 ); // bytes to read
438
+ }
439
+ else {
440
+ // a slave register is NOT specified
441
+ slaveRegister = (int )REGISTER_NOT_SPECIFIED;
442
+ data = argv[2 ] + (argv[3 ] << 7 ); // bytes to read
443
+ }
434
444
queryIndex++;
435
445
query[queryIndex].addr = slaveAddress;
436
- query[queryIndex].reg = argv[ 2 ] + (argv[ 3 ] << 7 ) ;
437
- query[queryIndex].bytes = argv[ 4 ] + (argv[ 5 ] << 7 ) ;
446
+ query[queryIndex].reg = slaveRegister ;
447
+ query[queryIndex].bytes = data ;
438
448
break ;
439
449
case I2C_STOP_READING:
440
450
byte queryIndexToSkip;
0 commit comments