Skip to content

Commit 55cafa8

Browse files
Merge pull request firmata#155 from rwaldron/i2c-read-continuous-without-slave
Update I2C_READ_CONTINUOUSLY to match I2C_READ w/ no provided slaveRegister
2 parents 03de47f + cea58a2 commit 55cafa8

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

@@ -383,10 +383,10 @@ void sysexCallback(byte command, byte argc, byte *argv)
383383
{
384384
byte mode;
385385
byte slaveAddress;
386-
byte slaveRegister;
387386
byte data;
388-
unsigned int delayTime;
389-
387+
int slaveRegister;
388+
unsigned int delayTime;
389+
390390
switch(command) {
391391
case I2C_REQUEST:
392392
mode = argv[1] & I2C_READ_WRITE_MODE_MASK;
@@ -417,24 +417,34 @@ void sysexCallback(byte command, byte argc, byte *argv)
417417
// a slave register is specified
418418
slaveRegister = argv[2] + (argv[3] << 7);
419419
data = argv[4] + (argv[5] << 7); // bytes to read
420-
readAndReportData(slaveAddress, (int)slaveRegister, data);
421420
}
422421
else {
423422
// a slave register is NOT specified
423+
slaveRegister = REGISTER_NOT_SPECIFIED;
424424
data = argv[2] + (argv[3] << 7); // bytes to read
425-
readAndReportData(slaveAddress, (int)REGISTER_NOT_SPECIFIED, data);
426425
}
426+
readAndReportData(slaveAddress, (int)slaveRegister, data);
427427
break;
428428
case I2C_READ_CONTINUOUSLY:
429429
if ((queryIndex + 1) >= MAX_QUERIES) {
430430
// too many queries, just ignore
431431
Firmata.sendString("too many queries");
432432
break;
433433
}
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+
}
434444
queryIndex++;
435445
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;
438448
break;
439449
case I2C_STOP_READING:
440450
byte queryIndexToSkip;

0 commit comments

Comments
 (0)