1313// followed by a UINT32 command, UINT32 payload length and a UINT16 CRC
1414// The back and forth protocol works like this:
1515// (all integers are in little-endian order)
16- //
16+ //
1717// Send Command:
1818// Master --> Slave magic HEADER value, cmd, payload len, CRC
1919// Master <-- Slave magic HEADER ack + CRC (4 bytes total)
2020// Master --> Slave magic DATA value, n-byte payload, CRC
2121// Master <-- Slave magic DATA ack + UINT16 CRC (4 bytes total)
22- //
22+ //
2323// Get Result:
2424// Master --> Slave magic RESULT value, CRC
2525// Master <-- Slave magic RESULT ack, length, CRC
@@ -307,23 +307,23 @@ bool rpc_master::__get_result(uint8_t **data, size_t *size, unsigned long timeou
307307}
308308
309309bool rpc_master::call_no_copy_no_args (const __FlashStringHelper *name,
310- void **result_data, size_t *result_data_len,
310+ void **result_data, size_t *result_data_len,
311311 unsigned long send_timeout, unsigned long recv_timeout)
312312{
313313 return __put_command (_hash (name), NULL , 0 , send_timeout)
314314 ? __get_result ((uint8_t **) result_data, result_data_len, recv_timeout) : false ;
315315}
316316
317317bool rpc_master::call_no_copy_no_args (const String &name,
318- void **result_data, size_t *result_data_len,
318+ void **result_data, size_t *result_data_len,
319319 unsigned long send_timeout, unsigned long recv_timeout)
320320{
321321 return __put_command (_hash (name.c_str (), name.length ()), NULL , 0 , send_timeout)
322322 ? __get_result ((uint8_t **) result_data, result_data_len, recv_timeout) : false ;
323323}
324324
325325bool rpc_master::call_no_copy_no_args (const char *name,
326- void **result_data, size_t *result_data_len,
326+ void **result_data, size_t *result_data_len,
327327 unsigned long send_timeout, unsigned long recv_timeout)
328328{
329329 return __put_command (_hash (name), NULL , 0 , send_timeout)
@@ -332,7 +332,7 @@ bool rpc_master::call_no_copy_no_args(const char *name,
332332
333333bool rpc_master::call_no_copy (const __FlashStringHelper *name,
334334 void *command_data, size_t command_data_len,
335- void **result_data, size_t *result_data_len,
335+ void **result_data, size_t *result_data_len,
336336 unsigned long send_timeout, unsigned long recv_timeout)
337337{
338338 return __put_command (_hash (name), (uint8_t *) command_data, command_data_len, send_timeout)
@@ -341,7 +341,7 @@ bool rpc_master::call_no_copy(const __FlashStringHelper *name,
341341
342342bool rpc_master::call_no_copy (const String &name,
343343 void *command_data, size_t command_data_len,
344- void **result_data, size_t *result_data_len,
344+ void **result_data, size_t *result_data_len,
345345 unsigned long send_timeout, unsigned long recv_timeout)
346346{
347347 return __put_command (_hash (name.c_str (), name.length ()), (uint8_t *) command_data, command_data_len, send_timeout)
@@ -350,7 +350,7 @@ bool rpc_master::call_no_copy(const String &name,
350350
351351bool rpc_master::call_no_copy (const char *name,
352352 void *command_data, size_t command_data_len,
353- void **result_data, size_t *result_data_len,
353+ void **result_data, size_t *result_data_len,
354354 unsigned long send_timeout, unsigned long recv_timeout)
355355{
356356 return __put_command (_hash (name), (uint8_t *) command_data, command_data_len, send_timeout)
@@ -474,7 +474,7 @@ bool rpc_slave::__get_command(uint32_t *command, uint8_t **data, size_t *size, u
474474 _get_short_timeout = min (_get_short_timeout + 1 , timeout);
475475 }
476476
477- return false ;
477+ return false ;
478478}
479479
480480bool rpc_slave::__put_result (uint8_t *data, size_t size, unsigned long timeout)
@@ -857,84 +857,88 @@ bool rpc_spi_master::put_bytes(uint8_t *data, size_t size, unsigned long timeout
857857 return true ;
858858}
859859
860- #define RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION (name ) \
860+ #define RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION (name, port ) \
861861void rpc_hardware_serial##name##_uart_master::_flush() \
862862{ \
863- for (int i = Serial##name .available (); i > 0 ; i--) Serial##name .read (); \
863+ for (int i = port .available (); i > 0 ; i--) port .read (); \
864864} \
865865\
866866bool rpc_hardware_serial##name##_uart_master::get_bytes(uint8_t *buff, size_t size, unsigned long timeout) \
867867{ \
868- Serial##name .setTimeout (timeout + 1 ); \
869- bool ok = (Serial##name .readBytes ((char *) buff, size) == size) && (!_same (buff, size)); \
868+ port .setTimeout (timeout + 1 ); \
869+ bool ok = (port .readBytes ((char *) buff, size) == size) && (!_same (buff, size)); \
870870 if (!ok) delay (_get_short_timeout); \
871871 return ok; \
872872} \
873873\
874874bool rpc_hardware_serial##name##_uart_master::put_bytes(uint8_t *buff, size_t size, unsigned long timeout) \
875875{ \
876876 (void ) timeout; \
877- return Serial##name .write ((char *) buff, size) == size; \
877+ return port .write ((char *) buff, size) == size; \
878878}
879879
880880#ifdef SERIAL_PORT_HARDWARE
881- RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION ()
881+ RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION (,SERIAL_PORT_HARDWARE )
882882#endif
883883
884884#ifdef SERIAL_PORT_HARDWARE1
885- RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION (1 )
885+ RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION (1 ,SERIAL_PORT_HARDWARE1 )
886886#endif
887887
888888#ifdef SERIAL_PORT_HARDWARE2
889- RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION (2 )
889+ RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION (2 ,SERIAL_PORT_HARDWARE2 )
890890#endif
891891
892892#ifdef SERIAL_PORT_HARDWARE3
893- RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION (3 )
893+ RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION (3 ,SERIAL_PORT_HARDWARE3 )
894894#endif
895895
896896#ifdef SERIAL_PORT_USBVIRTUAL
897- RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION (USB)
897+ RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION (USB,SERIAL_PORT_USBVIRTUAL )
898898#endif
899899
900- #define RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION (name ) \
900+ #undef RPC_HARDWARE_SERIAL_UART_MASTER_IMPLEMENTATION
901+
902+ #define RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION (name, port ) \
901903void rpc_hardware_serial##name##_uart_slave::_flush() \
902904{ \
903- for (int i = Serial##name .available (); i > 0 ; i--) Serial##name .read (); \
905+ for (int i = port .available (); i > 0 ; i--) port .read (); \
904906} \
905907\
906908bool rpc_hardware_serial##name##_uart_slave::get_bytes(uint8_t *buff, size_t size, unsigned long timeout) \
907909{ \
908- Serial##name .setTimeout (timeout + 1 ); \
909- return Serial##name .readBytes ((char *) buff, size) == size; \
910+ port .setTimeout (timeout + 1 ); \
911+ return port .readBytes ((char *) buff, size) == size; \
910912} \
911913\
912914bool rpc_hardware_serial##name##_uart_slave::put_bytes(uint8_t *buff, size_t size, unsigned long timeout) \
913915{ \
914916 (void ) timeout; \
915- return Serial##name .write ((char *) buff, size) == size; \
917+ return port .write ((char *) buff, size) == size; \
916918}
917919
918920#ifdef SERIAL_PORT_HARDWARE
919- RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION ()
921+ RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION (,SERIAL_PORT_HARDWARE )
920922#endif
921923
922924#ifdef SERIAL_PORT_HARDWARE1
923- RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION (1 )
925+ RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION (1 ,SERIAL_PORT_HARDWARE1 )
924926#endif
925927
926928#ifdef SERIAL_PORT_HARDWARE2
927- RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION (2 )
929+ RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION (2 ,SERIAL_PORT_HARDWARE2 )
928930#endif
929931
930932#ifdef SERIAL_PORT_HARDWARE3
931- RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION (3 )
933+ RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION (3 ,SERIAL_PORT_HARDWARE3 )
932934#endif
933935
934936#ifdef SERIAL_PORT_USBVIRTUAL
935- RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION (USB)
937+ RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION (USB,SERIAL_PORT_USBVIRTUAL )
936938#endif
937939
940+ #undef RPC_HARDWARE_SERIAL_UART_SLAVE_IMPLEMENTATION
941+
938942#ifdef ARDUINO_ARCH_AVR
939943void rpc_software_serial_uart_master::_flush ()
940944{
0 commit comments