diff --git a/os/hal/include/hal_serial.h b/os/hal/include/hal_serial.h index cbfbb35f1..bf916077d 100644 --- a/os/hal/include/hal_serial.h +++ b/os/hal/include/hal_serial.h @@ -294,7 +294,7 @@ extern "C" { #else void sdObjectInit(SerialDriver *sdp); #endif - void sdStart(SerialDriver *sdp, const SerialConfig *config); + msg_t sdStart(SerialDriver *sdp, const SerialConfig *config); void sdStop(SerialDriver *sdp); void sdIncomingDataI(SerialDriver *sdp, uint8_t b); msg_t sdRequestDataI(SerialDriver *sdp); diff --git a/os/hal/src/hal_serial.c b/os/hal/src/hal_serial.c index f4a7472dd..2522cc125 100644 --- a/os/hal/src/hal_serial.c +++ b/os/hal/src/hal_serial.c @@ -179,19 +179,30 @@ void sdObjectInit(SerialDriver *sdp) { * @param[in] config the architecture-dependent serial driver configuration. * If this parameter is set to @p NULL then a default * configuration is used. + * @return The operation status. * * @api */ -void sdStart(SerialDriver *sdp, const SerialConfig *config) { +msg_t sdStart(SerialDriver *sdp, const SerialConfig *config) { + msg_t msg; osalDbgCheck(sdp != NULL); osalSysLock(); osalDbgAssert((sdp->state == SD_STOP) || (sdp->state == SD_READY), "invalid state"); + +#if defined(SD_LLD_ENHANCED_API) + msg = sd_lld_start(sdp, config); +#else sd_lld_start(sdp, config); + msg = HAL_START_SUCCESS; +#endif + sdp->state = SD_READY; osalSysUnlock(); + + return msg; } /** diff --git a/os/hal/templates/hal_sio_lld.c b/os/hal/templates/hal_sio_lld.c index d9cddeaf3..f7e9fc792 100644 --- a/os/hal/templates/hal_sio_lld.c +++ b/os/hal/templates/hal_sio_lld.c @@ -90,7 +90,7 @@ msg_t sio_lld_start(SIODriver *siop) { } /* Configures the peripheral.*/ - return false; + return HAL_START_SUCCESS; } /** diff --git a/os/hal/templates/hal_sio_lld.h b/os/hal/templates/hal_sio_lld.h index a1a4393a4..c84634cd2 100644 --- a/os/hal/templates/hal_sio_lld.h +++ b/os/hal/templates/hal_sio_lld.h @@ -126,9 +126,9 @@ extern SIODriver SIOD1; extern "C" { #endif void sio_lld_init(void); -bool sio_lld_start(SIODriver *siop); +msg_t sio_lld_start(SIODriver *siop); void sio_lld_stop(SIODriver *siop); -msg_t sio_lld_start_operation(SIODriver *siop); +void sio_lld_start_operation(SIODriver *siop); void sio_lld_stop_operation(SIODriver *siop); sio_events_mask_t sio_lld_get_and_clear_events(SIODriver *siop); size_t sio_lld_read(SIODriver *siop, uint8_t *buffer, size_t n);