Nol.A SDK Library  24.11.0
For IoT System Software Development
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
SerialPort Class Referenceabstract

시리얼 포트를 제어하기 위한 클래스 More...

#include <SerialPort.hpp>

Inheritance diagram for SerialPort:
Stream Print

Public Types

enum  Config_t {
  _5N1 = DATABITS_5 | PARITY_NONE | STOPBITS_1 , _6N1 = DATABITS_6 | PARITY_NONE | STOPBITS_1 , _7N1 = DATABITS_7 | PARITY_NONE | STOPBITS_1 , _8N1 = DATABITS_8 | PARITY_NONE | STOPBITS_1 ,
  _5N2 = DATABITS_5 | PARITY_NONE | STOPBITS_2 , _6N2 = DATABITS_6 | PARITY_NONE | STOPBITS_2 , _7N2 = DATABITS_7 | PARITY_NONE | STOPBITS_2 , _8N2 = DATABITS_8 | PARITY_NONE | STOPBITS_2 ,
  _5E1 = DATABITS_5 | PARITY_EVEN | STOPBITS_1 , _6E1 = DATABITS_6 | PARITY_EVEN | STOPBITS_1 , _7E1 = DATABITS_7 | PARITY_EVEN | STOPBITS_1 , _8E1 = DATABITS_8 | PARITY_EVEN | STOPBITS_1 ,
  _5E2 = DATABITS_5 | PARITY_EVEN | STOPBITS_2 , _6E2 = DATABITS_6 | PARITY_EVEN | STOPBITS_2 , _7E2 = DATABITS_7 | PARITY_EVEN | STOPBITS_2 , _8E2 = DATABITS_8 | PARITY_EVEN | STOPBITS_2 ,
  _5O1 = DATABITS_5 | PARITY_ODD | STOPBITS_1 , _6O1 = DATABITS_6 | PARITY_ODD | STOPBITS_1 , _7O1 = DATABITS_7 | PARITY_ODD | STOPBITS_1 , _8O1 = DATABITS_8 | PARITY_ODD | STOPBITS_1 ,
  _5O2 = DATABITS_5 | PARITY_ODD | STOPBITS_2 , _6O2 = DATABITS_6 | PARITY_ODD | STOPBITS_2 , _7O2 = DATABITS_7 | PARITY_ODD | STOPBITS_2 , _8O2 = DATABITS_8 | PARITY_ODD | STOPBITS_2
}
 

Public Member Functions

 SerialPort (uint16_t txBufferSize=64, uint16_t rxBufferSize=64)
 
virtual error_t begin (uint32_t speed=115200, Config_t config=_8N1)=0
 시리얼 포트를 초기화합니다. More...
 
bool isBegan ()
 시리얼 포트가 시작되었는지 확인합니다.
 
virtual void end ()
 시리얼 포트를 종료합니다. More...
 
virtual void listen ()=0
 포트로부터 문자 입력을 받기 시작합니다. More...
 
virtual void stopListening ()=0
 포트로부터 문자 수신을 중단합니다.
 
bool isListening ()
 포트가 현재 수신 중인지 알아봅니다.
 
virtual int available ()
 포트 내부 수신버퍼에 수신된 문자의 갯수를 반환합니다.
 
virtual int peek ()
 포트 내부 수신버퍼의 가장 앞에 위치한 문자를 반한합니다. More...
 
virtual int availableForWrite ()
 포트 내부 송신버퍼의 여유공간을 반환합니다.
 
virtual int read ()
 포트 내부 버퍼에 수신된 문자를 하다 꺼냅니다. More...
 
uint8_t readBytes (char *buf, uint8_t len)
 
uint8_t readBytes (uint8_t *buf, uint8_t len)
 
uint8_t readBytesUntil (char terminator, char *buf, uint8_t len)
 readBytes() 와 동일하나 꺼내는 중간에 terminator 문자를 만나면 즉시 반환됩니다.
 
uint8_t readBytesUntil (char terminator, uint8_t *buf, uint8_t len)
 readBytes() 와 동일하나 꺼내는 중간에 terminator 문자를 만나면 즉시 반환됩니다.
 
void onReceive (void(*func)(void *, SerialPort &), void *ctx, bool interrupt=false)
 포트로 문자가 입력될 때마다 호출될 콜백함수를 지정합니다. More...
 
void onReceive (void(*func)(void *), void *ctx, bool interrupt=false)
 포트로 문자가 입력될 때마다 호출될 콜백함수를 지정합니다. More...
 
void onReceive (void(*func)(SerialPort &), bool interrupt=false)
 포트로 문자가 입력될 때마다 호출될 콜백함수를 지정합니다. More...
 
virtual size_t write (uint8_t val)
 문자 하나를 출력합니다. More...
 
error_t input (char *str, uint8_t len, char terminator)
 포트로부터 문자열 입력을 받습니다. More...
 
error_t inputKeyboard (char *str, uint8_t len)
 포트와 연결된 키보드로부터 문자열 입력을 받습니다. More...
 
char * getInputData (uint8_t *len)
 입력이 완료된 문자열을 가져옵니다. More...
 
char * getInputData ()
 입력이 완료된 문자열을 가져옵니다.
 
void stopInput ()
 input() 또는 inputKeyboard() 로 시작된 문자열 입력을 중단합니다.
 
bool isSending ()
 
virtual size_t write (uint8_t)=0
 문자 하나를 출력합니다. More...
 
size_t write (const char *str)
 문자열을 출력합니다. More...
 
virtual size_t write (const uint8_t *buffer, size_t size)
 데이터 배열을 출력합니다. More...
 
size_t write (const char *buffer, size_t size)
 데이터 배열을 출력합니다. More...
 
- Public Member Functions inherited from Stream
virtual void flush ()=0
 
void setTimeout (unsigned long timeout)
 
bool find (const char *target)
 
bool find (uint8_t *target)
 
bool find (const char *target, size_t length)
 
bool find (const uint8_t *target, size_t length)
 
bool find (char target)
 
bool findUntil (const char *target, const char *terminator)
 
bool findUntil (const uint8_t *target, const char *terminator)
 
bool findUntil (const char *target, size_t targetLen, const char *terminate, size_t termLen)
 
bool findUntil (const uint8_t *target, size_t targetLen, const char *terminate, size_t termLen)
 
long parseInt ()
 
float parseFloat ()
 
size_t readBytes (char *buffer, size_t length)
 
size_t readBytes (uint8_t *buffer, size_t length)
 
size_t readBytesUntil (char terminator, char *buffer, size_t length)
 
size_t readBytesUntil (char terminator, uint8_t *buffer, size_t length)
 
String readString ()
 
String readStringUntil (char terminator)
 
- Public Member Functions inherited from Print
int getWriteError ()
 
void clearWriteError ()
 
size_t write (const char *str)
 문자열을 출력합니다. More...
 
virtual size_t write (const uint8_t *buffer, size_t size)
 데이터 배열을 출력합니다. More...
 
size_t write (const char *buffer, size_t size)
 데이터 배열을 출력합니다. More...
 
size_t print (const __FlashStringHelper *)
 프로그램 메모리(읽기 전용 플래시) 영역에 저장된 문자열을 출력합니다.
 
size_t print (const String &)
 String 형의 문자열을 출력합니다.
 
size_t print (const char[])
 NULL로 종료되는 문자열을 출력합니다.
 
size_t print (char)
 문자 하나를 출력합니다.
 
size_t print (unsigned char, int=DEC)
 부호가 없는(unsigned) 8-byte 정수를 지정한 진수 형태로 출력합니다.
 
size_t print (int, int=DEC)
 int 형 정수를 지정한 진수 형태로 출력합니다.
 
size_t print (unsigned int, int=DEC)
 unsigned int 형 정수를 지정한 진수 형태로 출력합니다.
 
size_t print (long, int=DEC)
 long 형 정수를 지정한 진수 형태로 출력합니다.
 
size_t print (unsigned long, int=DEC)
 unsigned long 형 정수를 지정한 진수 형태로 출력합니다.
 
size_t print (double, int=2)
 double 형 실수를 지정한 소수점 이하 출력 개수로 출력합니다.
 
size_t print (const Printable &)
 Printable을 구현한 클래스를 출력합니다.
 
size_t println (const __FlashStringHelper *)
 프로그램 메모리(읽기 전용 플래시) 영역에 저장된 문자열과 개행문자(CR+LF)를 출력합니다.
 
size_t println (const String &s)
 String 형의 문자열과 개행문자(CR+LF)를 출력합니다.
 
size_t println (const char[])
 NULL로 종료되는 문자열과 개행문자(CR+LF)를 출력합니다.
 
size_t println (char)
 문자 하나와 개행문자(CR+LF)를 출력합니다.
 
size_t println (unsigned char, int=DEC)
 부호가 없는(unsigned) 8-byte 정수를 지정한 진수 형태로, 개행문자(CR+LF)와 함께 출력합니다.
 
size_t println (int, int=DEC)
 int 형 정수를 지정한 진수 형태로, 개행문자(CR+LF)와 함께 출력합니다.
 
size_t println (unsigned int, int=DEC)
 unsigned int 형 정수를 지정한 진수 형태로, 개행문자(CR+LF)와 함께 출력합니다.
 
size_t println (long, int=DEC)
 long 형 정수를 지정한 진수 형태로, 개행문자(CR+LF)와 함께 출력합니다.
 
size_t println (unsigned long, int=DEC)
 unsigned long 형 정수를 지정한 진수 형태로, 개행문자(CR+LF)와 함께 출력합니다.
 
size_t println (double, int=2)
 double 형 실수를 지정한 소수점 이하 출력 개수로, 개행문자(CR+LF)와 함께 출력합니다.
 
size_t println (const Printable &)
 Printable을 구현한 클래스를, 개행문자(CR+LF)와 함께 출력합니다.
 
size_t println (void)
 개행문자(CR+LF)를 출력합니다.
 
virtual int printf (const char *,...)
 printf 출력을 내보냅니다. More...
 

Protected Member Functions

void receive (uint8_t data)
 
- Protected Member Functions inherited from Stream
int timedRead ()
 
int timedPeek ()
 
int peekNextDigit ()
 
long parseInt (char skipChar)
 
float parseFloat (char skipChar)
 
- Protected Member Functions inherited from Print
void setWriteError (int err=1)
 

Protected Attributes

bool began = false
 
bool rxEnabled = false
 
bool notifyImmediatelyOnRx = false
 
volatile bool txBusy = false
 
const uint16_t RxBufferSize
 
uint8_t * rxBuffer = nullptr
 
volatile uint16_t rxBufferHead = 0
 
volatile uint16_t rxBufferTail = 0
 
const uint16_t TxBufferSize
 
uint8_t * txBuffer = nullptr
 
volatile uint16_t txBufferHead = 0
 
volatile uint16_t txBufferTail = 0
 
void(* doAfterReceive )(void *ctx) = nullptr
 
- Protected Attributes inherited from Stream
unsigned long _timeout
 
unsigned long _startMillis
 

Detailed Description

시리얼 포트를 제어하기 위한 클래스

Member Function Documentation

◆ begin()

virtual error_t SerialPort::begin ( uint32_t  speed = 115200,
Config_t  config = _8N1 
)
pure virtual

시리얼 포트를 초기화합니다.

Parameters
speed설정 가능한 speed는 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 또는 115200 입니다.
configData bit, parity, stop bit 등을 설정합니다.

◆ end()

virtual void SerialPort::end ( )
virtual

시리얼 포트를 종료합니다.

Tx, Rx 핀들은 input 상태가 됩니다.

◆ getInputData()

char* SerialPort::getInputData ( uint8_t *  len)

입력이 완료된 문자열을 가져옵니다.

Parameters
len[out]문자열 길이를 반환받을 포인터

◆ input()

error_t SerialPort::input ( char *  str,
uint8_t  len,
char  terminator 
)

포트로부터 문자열 입력을 받습니다.

terminator 를 수신할 때까지 buf 에 문자열이 저장됩니다. 문자열 입력이 완료되면 onReceive() 함수로 지정된 콜백함수가 호출되며, getInputData() 로 문자열을 가져올 수 있습니다. 문자열 길이는 (len - 1) 을 넘을 수 없습니다. 이미 문자열 입력을 받고 있는 포트에서 이 함수를 호출 시 새로 문자열을 받습니다.

Parameters
str문자열 입력이 저장될 포인터
lenstr 의 길이
terminator문자열 종료를 의미하는 문자
Returns
  • ERROR_SUCCESS : 문자열을 정상적으로 입력받기 시작함
  • ERROR_INVALID_ARGS : len 이 2 보다 작거나 str 이 NULL 이라서 실패

◆ inputKeyboard()

error_t SerialPort::inputKeyboard ( char *  str,
uint8_t  len 
)

포트와 연결된 키보드로부터 문자열 입력을 받습니다.

Carrige return (0x0D) 또는 NULL (0x00) 을 수신할 때까지 str 에 문자열이 저장됩니다. Back-space (0x80) 를 수신하면 가장 마지막 문자를 제거합니다. 문자열 입력이 완료되면 onReceive() 함수로 지정된 콜백함수가 호출되며, getInputData() 로 문자열을 가져올 수 있습니다. 문자열 길이는 (len - 1) 을 넘을 수 없습니다. 이미 문자열 입력을 받고 있는 포트에서 이 함수를 호출시 새로 문자열을 받습니다.

Parameters
str문자열 입력이 저장될 포인터
lenstr 의 길이
Returns
  • ERROR_SUCCESS : 문자열을 정상적으로 입력받기 시작함
  • ERROR_INVALID_ARGS : len 이 2 보다 작거나 str 이 NULL 이라서 실패

◆ listen()

virtual void SerialPort::listen ( )
pure virtual

포트로부터 문자 입력을 받기 시작합니다.

기본으로는 수신이 불가능한 상태이므로 시리얼 포트를 통해 입력을 받고 싶을 때 호출해야 합니다.

◆ onReceive() [1/3]

void SerialPort::onReceive ( void(*)(SerialPort &)  func,
bool  interrupt = false 
)

포트로 문자가 입력될 때마다 호출될 콜백함수를 지정합니다.

콜백함수를 인터럽트 모드에서 실행할 지 지정할 수 있습니다.

Parameters
func콜백될 함수 포인터
interrupt인터럽트 모드에서 콜백할 지 여부

◆ onReceive() [2/3]

void SerialPort::onReceive ( void(*)(void *)  func,
void *  ctx,
bool  interrupt = false 
)

포트로 문자가 입력될 때마다 호출될 콜백함수를 지정합니다.

콜백함수를 인터럽트 모드에서 실행할 지 지정할 수 있습니다.

Parameters
func콜백될 함수 포인터
ctx콜백시 함께 전달될 인자 포인터
interrupt인터럽트 모드에서 콜백할 지 여부

◆ onReceive() [3/3]

void SerialPort::onReceive ( void(*)(void *, SerialPort &)  func,
void *  ctx,
bool  interrupt = false 
)

포트로 문자가 입력될 때마다 호출될 콜백함수를 지정합니다.

콜백함수를 인터럽트 모드에서 실행할 지 지정할 수 있습니다.

Parameters
func콜백될 함수 포인터
ctx콜백시 함께 전달될 인자 포인터
interrupt인터럽트 모드에서 콜백할 지 여부

◆ peek()

virtual int SerialPort::peek ( )
virtual

포트 내부 수신버퍼의 가장 앞에 위치한 문자를 반한합니다.

이 함수가 호출되더라도 수신버퍼의 내용에는 변화가 없습니다.

Implements Stream.

◆ read()

virtual int SerialPort::read ( )
virtual

포트 내부 버퍼에 수신된 문자를 하다 꺼냅니다.

내부 버퍼가 비어있으면 -1이 반환됩니다.

Implements Stream.

◆ readBytes() [1/2]

uint8_t SerialPort::readBytes ( char *  buf,
uint8_t  len 
)

포트 내부 버퍼에 수신된 문자들을 하나 이상 len 이하 꺼냅니다.

Parameters
buf꺼낸 문자들을 저장할 버퍼 포인터
len꺼낼 문자들의 최대 갯수
Returns
꺼낸 문자의 갯수

◆ readBytes() [2/2]

uint8_t SerialPort::readBytes ( uint8_t *  buf,
uint8_t  len 
)

포트 내부 버퍼에 수신된 문자들을 하나 이상 len 이하 꺼냅니다.

Parameters
buf꺼낸 문자들을 저장할 버퍼 포인터
len꺼낼 문자들의 최대 갯수
Returns
꺼낸 문자의 갯수

◆ write() [1/5]

size_t Print::write
inline

데이터 배열을 출력합니다.

Parameters
buf전송할 배열의 시작 포인터
len전송할 배열의 길이 (byte)
94  {
95  return write((const uint8_t *)buffer, size);
96  }
virtual size_t write(uint8_t)=0
문자 하나를 출력합니다.

◆ write() [2/5]

size_t Print::write
inline

문자열을 출력합니다.

Parameters
cstr출력할 문자열. Null로 종료되는(null-terminated) 문자열이어야 합니다.
Returns
전송된 문자 수
75  {
76  if (str == NULL) return 0;
77  return write((const uint8_t *)str, strlen(str));
78  }

◆ write() [3/5]

virtual size_t Print::write

데이터 배열을 출력합니다.

Parameters
buf전송할 배열의 시작 포인터
len전송할 배열의 길이 (byte)

◆ write() [4/5]

virtual size_t SerialPort::write ( uint8_t  )
virtual

문자 하나를 출력합니다.

Parameters
val전송할 문자
Returns
전송된 문자 수

Implements Print.

◆ write() [5/5]

virtual size_t Print::write

문자 하나를 출력합니다.

Parameters
val전송할 문자
Returns
전송된 문자 수

The documentation for this class was generated from the following file: