pdcomm_gem_formatted_program_capability_respond
함수
수신한 S7F21 요청에 카탈로그 내용으로 S7F22 응답을 보냅니다.
PdcommStatus pdcomm_gem_formatted_program_capability_respond(PdcommTcpEndpoint *endpoint, PdcommGemResult *result)첫 호출에서 현재 카탈로그를 result에 확보하고 그 스냅샷을 보냅니다. #PDCOMM_BACKPRESSURE 같은 실패 뒤에 다시 시도하면 그사이 카탈로그가 바뀌었더라도 같은 스냅샷을 보냅니다. 송신에 성공하면 결과 유형이 #PDCOMM_GEM_REPLIED가 되고 reply_sent가 1이 되며, 이후 호출은 다시 보내지 않고 #PDCOMM_OK를 반환합니다. 이때부터 기능 접근자 함수는 보낸 스냅샷을 읽습니다.
매개변수
| 이름 | 설명 |
|---|---|
endpoint | result를 만든 장비 엔드포인트입니다. |
result | 결과 유형이 #PDCOMM_GEM_FORMATTED_PROGRAM_CAPABILITY_RECEIVED인 결과입니다. |
반환값
S7F22를 큐에 넣었거나 이미 보냈으면 #PDCOMM_OK를 반환합니다. endpoint 또는 result가 NULL이면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. 엔드포인트가 통신 중인 GEM 장비가 아니거나, 기능 서비스가 구성되지 않았거나, result가 기능 결과가 아니거나, 설치된 카탈로그가 없으면 #PDCOMM_INVALID_STATE를 반환합니다. result가 이 엔드포인트의 수신 요청이 아니거나, 수신한 뒤 HSMS 세션이 다시 선택되거나 다시 연결되었으면 #PDCOMM_STALE_TOKEN을 반환합니다. 엔드포인트에 준비된 TCP 이벤트(staged event)가 있거나 송신 큐가 가득 차면 #PDCOMM_BACKPRESSURE를 반환합니다(나중에 다시 시도합니다). 구성된 한도 안에서 스냅샷을 확보하거나 인코딩할 수 없으면 #PDCOMM_LIMIT_EXCEEDED 또는 #PDCOMM_INVALID_DATA를 반환합니다. #PDCOMM_ALLOCATION_FAILED와 #PDCOMM_POISONED를 반환할 수도 있습니다. 응답 송신에서 #PDCOMM_IO_ERROR 같은 그 밖의 TCP 상태 코드가 나올 수 있습니다.
참고
- 응답할 때까지 요청은
max_received슬롯 하나와 HSMS 수신 트랜잭션을 차지합니다. 둘 다 세션이 끝나면 해제됩니다.