@@ -264,6 +264,7 @@ static void pbdrv_legodev_request_data_set(pbdrv_legodev_pup_uart_dev_t *port_da
264264void pbdrv_legodev_pup_uart_start_sync (pbdrv_legodev_pup_uart_dev_t * dev ) {
265265 debug_pr_str ("Wait for STATUS_SYNCING: set\n" );
266266 dev -> status = PBDRV_LEGODEV_PUP_UART_STATUS_SYNCING ;
267+ pbdrv_legodev_pup_reset_watchdog (dev );
267268 process_poll (& pbdrv_legodev_pup_uart_process );
268269}
269270
@@ -294,6 +295,9 @@ static void pbdrv_legodev_pup_uart_parse_msg(pbdrv_legodev_pup_uart_dev_t *data)
294295 uint32_t speed ;
295296 uint8_t msg_type , cmd , msg_size , mode , cmd2 ;
296297
298+ // Getting messages from the device means it is alive.
299+ pbdrv_legodev_pup_reset_watchdog (data );
300+
297301 msg_type = data -> rx_msg [0 ] & LUMP_MSG_TYPE_MASK ;
298302 cmd = data -> rx_msg [0 ] & LUMP_MSG_CMD_MASK ;
299303 msg_size = ev3_uart_get_msg_size (data -> rx_msg [0 ]);
@@ -633,7 +637,6 @@ static void pbdrv_legodev_pup_uart_parse_msg(pbdrv_legodev_pup_uart_dev_t *data)
633637err :
634638 data -> status = PBDRV_LEGODEV_PUP_UART_STATUS_ERR ;
635639 debug_pr ("Data error: %s\n" , data -> last_err );
636- pbdrv_legodev_pup_reset_device_detection (data );
637640}
638641
639642static uint8_t ev3_uart_set_msg_hdr (lump_msg_type_t type , lump_msg_size_t size , lump_cmd_t cmd ) {
@@ -726,6 +729,9 @@ static PT_THREAD(pbdrv_legodev_pup_uart_update(pbdrv_legodev_pup_uart_dev_t * da
726729 uint8_t speed_payload [4 ];
727730 pbio_set_uint32_le (speed_payload , EV3_UART_SPEED_LPF2 );
728731 ev3_uart_prepare_tx_msg (data , LUMP_MSG_TYPE_CMD , LUMP_CMD_SPEED , speed_payload , sizeof (speed_payload ));
732+
733+ pbdrv_uart_flush (data -> uart );
734+
729735 PT_SPAWN (& data -> pt , & data -> write_pt , pbdrv_legodev_pup_uart_send_prepared_msg (data , & err ));
730736 if (err != PBIO_SUCCESS ) {
731737 DBG_ERR (data -> last_err = "Speed tx failed" );
@@ -734,6 +740,8 @@ static PT_THREAD(pbdrv_legodev_pup_uart_update(pbdrv_legodev_pup_uart_dev_t * da
734740
735741 pbdrv_uart_flush (data -> uart );
736742
743+ pbdrv_legodev_pup_reset_watchdog (data );
744+
737745 // read one byte to check for ACK
738746 PBIO_PT_WAIT_READY (& data -> pt , err = pbdrv_uart_read_begin (data -> uart , data -> rx_msg , 1 , 10 ));
739747 if (err != PBIO_SUCCESS ) {
@@ -755,6 +763,9 @@ static PT_THREAD(pbdrv_legodev_pup_uart_update(pbdrv_legodev_pup_uart_dev_t * da
755763
756764 // To get in sync with the data stream from the sensor, we look for a valid TYPE command.
757765 for (;;) {
766+
767+ pbdrv_legodev_pup_reset_watchdog (data );
768+
758769 PBIO_PT_WAIT_READY (& data -> pt , err = pbdrv_uart_read_begin (data -> uart , data -> rx_msg , 1 , EV3_UART_IO_TIMEOUT ));
759770 if (err != PBIO_SUCCESS ) {
760771 DBG_ERR (data -> last_err = "UART Rx error during sync" );
@@ -974,9 +985,6 @@ static PT_THREAD(pbdrv_legodev_pup_uart_update(pbdrv_legodev_pup_uart_dev_t * da
974985 // Turn off battery supply to this port
975986 pbdrv_motor_driver_coast (data -> dcmotor -> motor_driver );
976987
977- // reset device detection manager
978- pbdrv_legodev_pup_reset_device_detection (data );
979-
980988 PT_END (& data -> pt );
981989}
982990
0 commit comments