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

pdcomm_gem_equipment_respond_command

함수

수신한 S2F41에 대해 S2F42 Host Command Acknowledge를 보냅니다.

PdcommStatus pdcomm_gem_equipment_respond_command(PdcommTcpEndpoint *endpoint, PdcommGemResult *result, uint8_t decision, const PdcommGemCommandIssue *issues, size_t count, PdcommGemCommandReply *reply)

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

검증 결과와 완료 메타데이터는 요청이 도착했을 때 고정되며, 이후 제어 상태가 바뀌어도 그대로입니다.

  • 검증에서 요청을 거부했으면 원래의 HCACK과 CPACK 엔트리를 보냅니다. 이때도 decision은 0부터 6까지여야 하며, issues와 count는 무시합니다.
  • 검증에서 요청을 수락했으면 decision을 HCACK으로 보냅니다. 문제(issue)를 담을 수 있는 결정은 #PDCOMM_GEM_COMMAND_PARAMETER_ERRORS뿐이며(코드 1~3), 문제를 담지 않아도 됩니다. 원래 명령 한도(max_errors, max_identifier_bytes)가 적용됩니다.

응답 전체를 보내기 전에 준비합니다. 송신에 성공해야만 결과의 responded, reply_sent, 실제 확인 응답 값이 설정됩니다. 실패하면 reply를 지우며 결과는 다시 시도할 수 있는 상태로 남습니다. 같은 결정으로 다시 시도하고, 이미 완료한 작업은 다시 실행하지 않습니다. 지연 작업은 HCACK 4 응답이 접수된 뒤에만 시작합니다. 완료 CEID는 실제 HCACK이 0 또는 4일 때만 반환됩니다. 이벤트는 pdcomm_gem_equipment_publish_event()로 따로 보고합니다. 원래 TCP 이벤트는 이미 해제되어 있어도 됩니다.

매개변수

이름설명
endpointresult를 만든 장비 엔드포인트입니다.
result결과 유형이 #PDCOMM_GEM_COMMAND_RECEIVED인 요청 결과입니다.
decision수락된 요청에 보낼 HCACK입니다. PDCOMM_GEM_COMMAND_* 값 0~6 중 하나입니다.
issues결정 3에 쓰는 count개의 CPACK 엔트리 배열입니다. count가 0이면 NULL일 수 있습니다.
count엔트리 개수입니다. decision이 3이 아니면 0이어야 합니다.
reply호출자 저장 공간입니다. 호출 전에 reply->struct_size를 설정합니다. 먼저 지워지고, 성공하면 기록됩니다.

반환값

S2F42를 큐에 넣었으면 #PDCOMM_OK를 반환합니다. endpoint, result 또는 reply가 NULL이거나, reply->struct_size가 너무 작거나, decision이 6보다 크거나, result가 원격 명령 결과가 아니거나, 3이 아닌 결정에 문제를 지정했거나, 문제 이름이 NULL이거나 유효하지 않거나, 문제 코드가 1~3 범위를 벗어나면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. count가 max_errors를 넘거나, 문제 이름이 max_identifier_bytes를 넘거나, 메시지가 항목 한도를 넘으면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. result가 호스트 응답이거나, 엔드포인트에 GEM 장비가 없거나, 통신이 COMMUNICATING 상태가 아니면 #PDCOMM_INVALID_STATE를 반환합니다. 요청이 다른 엔드포인트나 이전 연결 세대 또는 선택(selection)에서 왔거나, 이미 응답했거나, 응답 슬롯이 더 이상 열려 있지 않으면 #PDCOMM_STALE_TOKEN을 반환합니다. 준비된 TCP 이벤트(staged event)가 있거나 TCP 큐가 가득 차면 #PDCOMM_BACKPRESSURE를 반환합니다. #PDCOMM_ALLOCATION_FAILED를 반환할 수도 있습니다. 엔드포인트가 오염(poisoned) 상태이거나 패닉(panic)을 격리했으면 #PDCOMM_POISONED를 반환합니다. 그 밖에 pdcomm_tcp_reply()와 마찬가지로 다른 TCP 응답 상태 코드를 반환할 수 있습니다.

참고

  • 스레드 안전성: 이 호출은 result를 변경합니다. 같은 결과에 대한 getter나 pdcomm_gem_result_destroy()와 동시에 실행하지 않습니다.