Skip to content

Commit cea58a2

Browse files
committed
Update I2C_READ_CONTINUOUSLY to match I2C_READ w/ no provided slaveRegister
1 parent 01f6854 commit cea58a2

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

examples/StandardFirmata/StandardFirmata.ino

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ unsigned int samplingInterval = 19; // how often to run the main loop (
7070
/* i2c data */
7171
struct i2c_device_info {
7272
byte addr;
73-
byte reg;
73+
int reg;
7474
byte bytes;
7575
};
7676

@@ -375,10 +375,10 @@ void sysexCallback(byte command, byte argc, byte *argv)
375375
{
376376
byte mode;
377377
byte slaveAddress;
378-
byte slaveRegister;
379378
byte data;
380-
unsigned int delayTime;
381-
379+
int slaveRegister;
380+
unsigned int delayTime;
381+
382382
switch(command) {
383383
case I2C_REQUEST:
384384
mode = argv[1] & I2C_READ_WRITE_MODE_MASK;
@@ -409,24 +409,34 @@ void sysexCallback(byte command, byte argc, byte *argv)
409409
// a slave register is specified
410410
slaveRegister = argv[2] + (argv[3] << 7);
411411
data = argv[4] + (argv[5] << 7); // bytes to read
412-
readAndReportData(slaveAddress, (int)slaveRegister, data);
413412
}
414413
else {
415414
// a slave register is NOT specified
415+
slaveRegister = REGISTER_NOT_SPECIFIED;
416416
data = argv[2] + (argv[3] << 7); // bytes to read
417-
readAndReportData(slaveAddress, (int)REGISTER_NOT_SPECIFIED, data);
418417
}
418+
readAndReportData(slaveAddress, (int)slaveRegister, data);
419419
break;
420420
case I2C_READ_CONTINUOUSLY:
421421
if ((queryIndex + 1) >= MAX_QUERIES) {
422422
// too many queries, just ignore
423423
Firmata.sendString("too many queries");
424424
break;
425425
}
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+
}
426436
queryIndex++;
427437
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;
430440
break;
431441
case I2C_STOP_READING:
432442
byte queryIndexToSkip;

0 commit comments

Comments
 (0)