콘텐츠로 이동
무료 평가 시작

PdcommSecs1Read

형식 별칭

시리얼 스트림에서 블로킹 없이 바이트를 읽습니다.

typedef uint32_t (*PdcommSecs1Read)(void *context, uint8_t *buffer, size_t capacity, size_t *count)

선언 위치: #include <pdcomm_secs1.h>

엔드포인트의 스레드에서 pdcomm_secs1_poll()을 통해서만 호출됩니다. 엔드포인트는 회선 제어 문자를 기다리는 동안에는 1바이트를 요청하고, 그 밖에는 최대 한 블록 분량을 요청하며 PdcommSecs1Options::max_io_chunk를 넘지 않습니다. #PDCOMM_SECS1_IO_OK가 아닌 결과에서는 buffer와 count를 무시합니다.

매개변수

이름설명
contextPdcommSecs1Io::context 값입니다.
buffer최대 capacity바이트를 받을 대상 버퍼입니다.
capacity요청한 바이트 수입니다. 1 이상입니다.
count저장한 바이트 수를 받습니다. 진입 시 0이며, 콜백이 #PDCOMM_SECS1_IO_OK를 반환할 때만 읽습니다.

반환값

*count바이트를 저장했으면 #PDCOMM_SECS1_IO_OK를 반환합니다(0은 스트림 끝을 뜻합니다). 지금 읽을 데이터가 없으면 #PDCOMM_SECS1_IO_WOULD_BLOCK 또는 #PDCOMM_SECS1_IO_INTERRUPTED를 반환합니다. 스트림 끝이면 #PDCOMM_SECS1_IO_CLOSED를 반환합니다. 실패를 보고하려면 그 밖의 PDCOMM_SECS1_IO_* 값을 반환하며, 이때 엔드포인트는 장애 상태가 됩니다.

참고

  • 블로킹하지 않습니다. 블로킹 읽기는 pdcomm_secs1_poll()을 멈추게 합니다. 콜백에서 엔드포인트 함수를 호출하지 않습니다. 재진입하면 #PDCOMM_INVALID_STATE를 반환합니다. capacity보다 큰 개수를 반환하면 상세 코드 #PDCOMM_SECS1_IO_INVALID_DATA와 함께 엔드포인트가 장애 상태가 됩니다.
  • C++ 구현은 반환하기 전에 모든 예외를 잡아야 합니다. pdcomm_secs1.hpp가 안전한 타입 어댑터를 제공합니다.