@@ -70,7 +70,7 @@ unsigned int samplingInterval = 19; // how often to run the main loop (
7070/* i2c data */
7171struct 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