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

pdcomm_gem_formatted_program_transfer_respond_and_store

함수

수신한 S7F23에 대해 S7F24 확인 응답을 보내고 프로그램에 저장 동작을 적용합니다.

PdcommStatus pdcomm_gem_formatted_program_transfer_respond_and_store(PdcommTcpEndpoint *endpoint, PdcommGemResult *result, uint8_t acknowledgement, uint32_t action)

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

장비 전용입니다. ACKC7 코드와 저장 동작을 모두 직접 고르며, 코드가 동작을 정하지는 않습니다. 저장 동작이면 먼저 저장소에 프로그램을 예약하고, 그다음 S7F24를 큐에 넣은 뒤에야 저장소 변경을 확정합니다. 예약이 대기 중인 동안 로컬 저장소 변경은 #PDCOMM_INVALID_STATE를 반환합니다. 끝난 세션의 예약은 해제됩니다.

S7F24를 준비하기 전에 호출이 실패하면(예: #PDCOMM_GEM_FORMATTED_PROGRAM_CREATE_ONLY인데 PPID가 이미 있는 경우) 아무것도 보내지 않으며, 다른 코드나 동작으로 다시 호출할 수 있습니다. 응답을 준비한 뒤에는 같은 코드와 동작으로만 다시 시도해야 합니다. 응답이 확정된 뒤 같은 코드와 동작으로 다시 호출하면 다시 보내지 않고 #PDCOMM_OK를 반환합니다.

매개변수

이름설명
endpointGEM COMMUNICATING 상태인 장비 엔드포인트입니다. RESPOND_ONLY가 아닌 동작에는 저장소를 소유한 정형 프로그램 조회 서비스도 필요합니다.
result결과 유형이 #PDCOMM_GEM_FORMATTED_PROGRAM_TRANSFER_RECEIVED인 결과입니다.
acknowledgement0부터 7까지의 ACKC7 코드입니다.
action#PDCOMM_GEM_FORMATTED_PROGRAM_RESPOND_ONLY, #PDCOMM_GEM_FORMATTED_PROGRAM_CREATE_ONLY, #PDCOMM_GEM_FORMATTED_PROGRAM_REPLACE_ONLY, #PDCOMM_GEM_FORMATTED_PROGRAM_UPSERT 중 하나입니다.

반환값

S7F24를 큐에 넣고 동작을 확정했거나, 같은 코드와 동작으로 둘 다 이미 처리했으면 #PDCOMM_OK를 반환합니다. endpoint 또는 result가 NULL이거나, acknowledgement가 7보다 크거나, action을 알 수 없으면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. 엔드포인트가 COMMUNICATING 상태의 장비가 아니거나, 필요한 서비스가 구성되지 않았거나, result가 전송 결과가 아니거나, 동작이 저장소와 충돌하거나(CREATE_ONLY인데 PPID가 있거나 REPLACE_ONLY인데 PPID가 없는 경우), 다른 전송 응답이 저장소 예약을 잡고 있으면 #PDCOMM_INVALID_STATE를 반환합니다. result가 수신한 S7F23이 아니거나, 다른 엔드포인트 또는 이전 HSMS 세션이나 선택(selection)에서 왔거나, 이미 응답했거나 다른 코드 또는 동작으로 준비되었으면 #PDCOMM_STALE_TOKEN을 반환합니다. 저장소 한도를 넘게 되면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. 준비된 TCP 이벤트를 먼저 비워야 하거나 TCP 송신 큐가 가득 차면 #PDCOMM_BACKPRESSURE를 반환합니다(나중에 다시 시도합니다). 응답을 큐에 넣을 수 없으면 그 밖의 TCP 상태 코드를 반환합니다. 엔드포인트가 오염(poisoned) 상태이면 #PDCOMM_POISONED를 반환합니다.

참고

  • 스레드 안전성: endpoint에 대한 다른 모든 호출과 직렬화하며, 이 호출 중에는 다른 스레드에서 result를 읽지 않습니다.