ConfigurableFirmata 模块函数
ConfigurableFirmata module functions
我正在为 ConfigurableFirmata 编写自定义模块,我看到库正在使用回调,例如:
void Class::handleCapability(byte pin);
boolean Class::handlePinMode(byte pin, int mode);
...
boolean Class::handleSysex(byte command, byte argc, byte *argv);
问题是,我不太明白为什么有些函数是布尔值以及何时 return TRUE 或 FALSE(当你 return TRUE 或 FALSE 时会发生什么?)。
答案就在FirmataExt.cpp。如果扩展 returns FALSE,它只是发送一个字符串到 firmata,用于调试目的。
boolean FirmataExt::handleSysex(byte command, byte argc, byte* argv)
{
switch (command) {
case PIN_STATE_QUERY:
if (argc > 0) {
byte pin = argv[0];
if (pin < TOTAL_PINS) {
//...
return true;
}
}
break;
case CAPABILITY_QUERY:
//...
return true;
default:
for (byte i = 0; i < numFeatures; i++) {
if (features[i]->handleSysex(command, argc, argv)) {
return true;
}
}
break;
}
return false;
}
如果命令有效,则此函数return为真。
我正在为 ConfigurableFirmata 编写自定义模块,我看到库正在使用回调,例如:
void Class::handleCapability(byte pin);
boolean Class::handlePinMode(byte pin, int mode);
...
boolean Class::handleSysex(byte command, byte argc, byte *argv);
问题是,我不太明白为什么有些函数是布尔值以及何时 return TRUE 或 FALSE(当你 return TRUE 或 FALSE 时会发生什么?)。
答案就在FirmataExt.cpp。如果扩展 returns FALSE,它只是发送一个字符串到 firmata,用于调试目的。
boolean FirmataExt::handleSysex(byte command, byte argc, byte* argv)
{
switch (command) {
case PIN_STATE_QUERY:
if (argc > 0) {
byte pin = argv[0];
if (pin < TOTAL_PINS) {
//...
return true;
}
}
break;
case CAPABILITY_QUERY:
//...
return true;
default:
for (byte i = 0; i < numFeatures; i++) {
if (features[i]->handleSysex(command, argc, argv)) {
return true;
}
}
break;
}
return false;
}
如果命令有效,则此函数return为真。