1313
1414#pragma once
1515
16+ #include < cstddef>
17+ #include < memory>
18+
1619#include < Arduino.h>
1720#include < api/HardwareSerial.h>
1821#include < api/Print.h>
2326#include " sfTk/sfTkError.h"
2427#include " sfTk/sfTkISerial.h"
2528#include " sfTkArduino.h"
26- #include < cstddef>
2729#include < sfTk/sfTkIUART.h>
2830#include < sfTk/sfTkISerialBus.h>
2931
@@ -38,7 +40,7 @@ class sfTkArdUART : public sfTkIUART
3840 /* *
3941 * @brief Constructor
4042 */
41- sfTkArdUART (void ) : sfTkIUART(), _hwSerial( nullptr )
43+ sfTkArdUART (void ) : sfTkIUART(), _hwSerial{ nullptr }
4244 {
4345 }
4446
@@ -47,7 +49,7 @@ class sfTkArdUART : public sfTkIUART
4749 *
4850 * @param baudRate The baud rate to set
4951 */
50- sfTkArdUART (uint32_t baudRate) : sfTkIUART(baudRate), _hwSerial( nullptr )
52+ sfTkArdUART (uint32_t baudRate) : sfTkIUART(baudRate), _hwSerial{ nullptr }
5153 {
5254 }
5355
@@ -56,7 +58,7 @@ class sfTkArdUART : public sfTkIUART
5658 *
5759 * @param config The UART configuration settings.
5860 */
59- sfTkArdUART (sfTkUARTConfig_t config) : sfTkIUART(config), _hwSerial( nullptr )
61+ sfTkArdUART (sfTkUARTConfig_t config) : sfTkIUART(config), _hwSerial{ nullptr }
6062 {
6163 }
6264
@@ -65,14 +67,14 @@ class sfTkArdUART : public sfTkIUART
6567 *
6668 * @param uartPort Port for UART communication.
6769 */
68- sfTkArdUART (arduino::HardwareSerial &hwSerial) : sfTkIUART(), _hwSerial( &hwSerial)
70+ sfTkArdUART (arduino::HardwareSerial &hwSerial) : sfTkIUART(), _hwSerial{ &hwSerial}
6971 {
7072 }
7173
7274 /* *
7375 * @brief Copy Constructor
7476 */
75- sfTkArdUART (sfTkArdUART const &rhs) : sfTkIUART(rhs._config), _hwSerial( rhs._hwSerial)
77+ sfTkArdUART (sfTkArdUART const &rhs) : sfTkIUART(rhs._config), _hwSerial{ rhs._hwSerial }
7678 {
7779 }
7880
@@ -84,8 +86,11 @@ class sfTkArdUART : public sfTkIUART
8486 */
8587 sfTkArdUART &operator =(const sfTkArdUART &rhs)
8688 {
87- _hwSerial = rhs._hwSerial ;
88- _config = rhs._config ;
89+ if (this != &rhs)
90+ {
91+ sfTkIUART::operator =(rhs);
92+ _hwSerial = rhs._hwSerial ;
93+ }
8994 return *this ;
9095 }
9196
@@ -214,7 +219,10 @@ class sfTkArdUART : public sfTkIUART
214219 * @param config The config struct to set
215220 * @return sfTkError_t Returns ksfTkErrOk on success, or ksfTkErrFail code
216221 */
217- sfTkError_t setConfig (const sfTkUARTConfig_t config) override ;
222+ sfTkError_t setConfig (const uint32_t baudRate = kDefaultBaudRate ,
223+ const sfTkUARTDataBits_t dataBits = kDefaultDataBits ,
224+ const sfTkUARTParity_t parity = kDefaultParity ,
225+ const sfTkUARTStopBits_t stopBits = kDefaultStopBits ) override ;
218226
219227 /* *
220228 * @brief Arduino HardwareSerial functionality mappings.
@@ -316,7 +324,7 @@ class sfTkArdUARTBus : public sfTkISerialBus
316324 * @brief Constructor for the UART bus
317325 *
318326 */
319- sfTkArdUARTBus (void ) : sfTkISerialBus(), _uartPort( nullptr )
327+ sfTkArdUARTBus (void ) : sfTkISerialBus(), _uartPort{ nullptr }
320328 {
321329 }
322330
@@ -325,7 +333,7 @@ class sfTkArdUARTBus : public sfTkISerialBus
325333 *
326334 * @param uartPort UART port to use
327335 */
328- sfTkArdUARTBus (sfTkArdUART &uartPort) : sfTkISerialBus(), _uartPort(& uartPort)
336+ sfTkArdUARTBus (sfTkArdUART &uartPort) : sfTkISerialBus(), _uartPort{std::make_unique<sfTkArdUART>( uartPort)}
329337 {
330338 }
331339
@@ -334,17 +342,16 @@ class sfTkArdUARTBus : public sfTkISerialBus
334342 *
335343 * @param hwSerial Pass in an underlying hardware serial port
336344 */
337- sfTkArdUARTBus (arduino::HardwareSerial &hwSerial) : sfTkISerialBus()
345+ sfTkArdUARTBus (arduino::HardwareSerial &hwSerial) : sfTkISerialBus(), _uartPort{std::make_unique<sfTkArdUART>(hwSerial)}
338346 {
339- _uartPort = new sfTkArdUART (hwSerial);
340347 }
341348
342349 /* *
343350 * @brief Copy constructer
344351 *
345352 * @param rhs Bus object to be copied
346353 */
347- sfTkArdUARTBus (sfTkArdUARTBus const &rhs) : sfTkISerialBus(), _uartPort( rhs._uartPort)
354+ sfTkArdUARTBus (sfTkArdUARTBus const &rhs) : sfTkISerialBus(), _uartPort{std::make_unique<sfTkArdUART>(* rhs._uartPort )}
348355 {
349356 }
350357
@@ -356,7 +363,17 @@ class sfTkArdUARTBus : public sfTkISerialBus
356363 */
357364 sfTkArdUARTBus &operator =(const sfTkArdUARTBus &rhs)
358365 {
359- _uartPort = rhs._uartPort ;
366+ if (this != &rhs)
367+ {
368+ if (rhs._uartPort )
369+ {
370+ _uartPort = std::make_unique<sfTkArdUART>(*rhs._uartPort );
371+ }
372+ else
373+ {
374+ _uartPort.reset ();
375+ }
376+ }
360377 return *this ;
361378 }
362379
@@ -369,7 +386,7 @@ class sfTkArdUARTBus : public sfTkISerialBus
369386 sfTkError_t init (void )
370387 {
371388 if (!_uartPort)
372- _uartPort = new sfTkArdUART ();
389+ _uartPort = std::make_unique< sfTkArdUART> ();
373390 return _uartPort->init ();
374391 }
375392
@@ -381,7 +398,7 @@ class sfTkArdUARTBus : public sfTkISerialBus
381398 sfTkError_t init (uint32_t baudRate, bool bInit = false )
382399 {
383400 if (!_uartPort)
384- _uartPort = new sfTkArdUART ();
401+ _uartPort = std::make_unique< sfTkArdUART> ();
385402 return _uartPort->init (baudRate, bInit);
386403 }
387404
@@ -393,7 +410,7 @@ class sfTkArdUARTBus : public sfTkISerialBus
393410 sfTkError_t init (sfTkUARTConfig_t config, bool bInit = false )
394411 {
395412 if (!_uartPort)
396- _uartPort = new sfTkArdUART ();
413+ _uartPort = std::make_unique< sfTkArdUART> ();
397414 return _uartPort->init (config, bInit);
398415 }
399416
@@ -407,7 +424,7 @@ class sfTkArdUARTBus : public sfTkISerialBus
407424 */
408425 sfTkError_t init (sfTkArdUART &uartPort, uint32_t baudRate, bool bInit = false )
409426 {
410- _uartPort = & uartPort;
427+ _uartPort = std::make_unique<sfTkArdUART>( uartPort) ;
411428 return _uartPort->init (baudRate, bInit);
412429 }
413430
@@ -421,7 +438,7 @@ class sfTkArdUARTBus : public sfTkISerialBus
421438 */
422439 sfTkError_t init (sfTkArdUART &uartPort, sfTkUARTConfig_t config, bool bInit = false )
423440 {
424- _uartPort = & uartPort;
441+ _uartPort = std::make_unique<sfTkArdUART>( uartPort) ;
425442 return _uartPort->init (config, bInit);
426443 }
427444
@@ -434,7 +451,7 @@ class sfTkArdUARTBus : public sfTkISerialBus
434451 */
435452 sfTkError_t init (sfTkArdUART &uartPort, bool bInit = false )
436453 {
437- _uartPort = & uartPort;
454+ _uartPort = std::make_unique<sfTkArdUART>( uartPort) ;
438455 return _uartPort->init (sfTkIUART::kDefaultBaudRate , bInit);
439456 }
440457
@@ -448,7 +465,7 @@ class sfTkArdUARTBus : public sfTkISerialBus
448465 */
449466 sfTkError_t init (arduino::HardwareSerial &hwSerial, uint32_t baudRate, bool bInit = false )
450467 {
451- _uartPort = new sfTkArdUART (hwSerial);
468+ _uartPort = std::make_unique< sfTkArdUART> (hwSerial);
452469 return _uartPort->init (baudRate, bInit);
453470 }
454471
@@ -462,7 +479,7 @@ class sfTkArdUARTBus : public sfTkISerialBus
462479 */
463480 sfTkError_t init (arduino::HardwareSerial &hwSerial, sfTkUARTConfig_t config, bool bInit = false )
464481 {
465- _uartPort = new sfTkArdUART (hwSerial);
482+ _uartPort = std::make_unique< sfTkArdUART> (hwSerial);
466483 return _uartPort->init (config, bInit);
467484 }
468485
@@ -475,7 +492,7 @@ class sfTkArdUARTBus : public sfTkISerialBus
475492 */
476493 sfTkError_t init (arduino::HardwareSerial &hwSerial, bool bInit = false )
477494 {
478- _uartPort = new sfTkArdUART (hwSerial);
495+ _uartPort = std::make_unique< sfTkArdUART> (hwSerial);
479496 return _uartPort->init (sfTkIUART::kDefaultBaudRate , bInit);
480497 }
481498
@@ -513,5 +530,5 @@ class sfTkArdUARTBus : public sfTkISerialBus
513530
514531protected:
515532 /* * The actual UART port */
516- sfTkArdUART * _uartPort;
533+ std::unique_ptr< sfTkArdUART> _uartPort;
517534};
0 commit comments