@@ -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
@@ -329,10 +329,10 @@ void sysexCallback(byte command, byte argc, byte *argv)
329329{
330330 byte mode;
331331 byte slaveAddress;
332- byte slaveRegister;
333332 byte data;
334- unsigned int delayTime;
335-
333+ int slaveRegister;
334+ unsigned int delayTime;
335+
336336 switch (command) {
337337 case I2C_REQUEST:
338338 mode = argv[1 ] & I2C_READ_WRITE_MODE_MASK;
@@ -363,24 +363,34 @@ void sysexCallback(byte command, byte argc, byte *argv)
363363 // a slave register is specified
364364 slaveRegister = argv[2 ] + (argv[3 ] << 7 );
365365 data = argv[4 ] + (argv[5 ] << 7 ); // bytes to read
366- readAndReportData (slaveAddress, (int )slaveRegister, data);
367366 }
368367 else {
369368 // a slave register is NOT specified
369+ slaveRegister = REGISTER_NOT_SPECIFIED;
370370 data = argv[2 ] + (argv[3 ] << 7 ); // bytes to read
371- readAndReportData (slaveAddress, (int )REGISTER_NOT_SPECIFIED, data);
372371 }
372+ readAndReportData (slaveAddress, (int )slaveRegister, data);
373373 break ;
374374 case I2C_READ_CONTINUOUSLY:
375375 if ((queryIndex + 1 ) >= MAX_QUERIES) {
376376 // too many queries, just ignore
377377 Firmata.sendString (" too many queries" );
378378 break ;
379379 }
380+ if (argc == 6 ) {
381+ // a slave register is specified
382+ slaveRegister = argv[2 ] + (argv[3 ] << 7 );
383+ data = argv[4 ] + (argv[5 ] << 7 ); // bytes to read
384+ }
385+ else {
386+ // a slave register is NOT specified
387+ slaveRegister = (int )REGISTER_NOT_SPECIFIED;
388+ data = argv[2 ] + (argv[3 ] << 7 ); // bytes to read
389+ }
380390 queryIndex++;
381391 query[queryIndex].addr = slaveAddress;
382- query[queryIndex].reg = argv[ 2 ] + (argv[ 3 ] << 7 ) ;
383- query[queryIndex].bytes = argv[ 4 ] + (argv[ 5 ] << 7 ) ;
392+ query[queryIndex].reg = slaveRegister ;
393+ query[queryIndex].bytes = data ;
384394 break ;
385395 case I2C_STOP_READING:
386396 byte queryIndexToSkip;
0 commit comments