pdcomm_gem_equipment_respond_constants
함수
수신한 S2F15에 대해 S2F16 응답을 보내고 수락한 값을 적용합니다.
PdcommStatus pdcomm_gem_equipment_respond_constants(PdcommTcpEndpoint *endpoint, PdcommGemResult *result, uint8_t decision, PdcommGemConstantReply *reply)S2F15는 결과 유형이 #PDCOMM_GEM_CONSTANT_CHANGES_RECEIVED인 #PDCOMM_GEM_PRIMARY로 반환되며 자동 확인 응답은 없습니다. 결과는 수신 검증, 원래 값, 후보 저장소를 소유합니다. 수신 검증에서 요청을 거부했다면 decision과 관계없이 응답은 항상 그 EAC 1(알 수 없는 ECID) 또는 3(잘못된 값)을 담습니다. 그렇지 않으면 응답은 decision을 담으며, EAC 0 응답이 성공했을 때만 후보를 저장소로 교체합니다. 물리적 동작, 영구 저장, 이벤트 발행은 하지 않습니다. 다른 변경이나 재구성이 일어나면 후보는 오래된(stale) 상태가 되어 더 이상 적용할 수 없지만, 유효한 비적용 결정으로 거부하고 수신 트랜잭션을 해제할 수는 있습니다. 응답 생성이나 송신에 실패해도 후보, 현재 저장소, 재시도 가능성은 유지됩니다. 성공할 때만 responded와 응답 필드를 설정합니다. 빈 S2F15에 EAC 0으로 응답하면 applied는 0으로 보고됩니다. 원래 TCP 이벤트는 이미 해제되어 있어도 됩니다.
매개변수
| 이름 | 설명 |
|---|---|
endpoint | result를 만든 장비 엔드포인트입니다. Communicating 상태여야 합니다. |
result | 결과 유형이 #PDCOMM_GEM_CONSTANT_CHANGES_RECEIVED인 결과입니다. |
decision | #PDCOMM_GEM_CONSTANT_APPLY, #PDCOMM_GEM_CONSTANT_CANNOT_PERFORM, #PDCOMM_GEM_CONSTANT_OUT_OF_RANGE 또는 4부터 63까지의 장비별 EAC입니다. |
reply | 호출자 저장 공간입니다. 먼저 reply->struct_size를 설정합니다. 알려진 필드는 먼저 0으로 초기화되고, 성공하면 보낸 EAC와 적용 플래그를 받습니다. |
반환값
S2F16을 큐에 넣었으면 #PDCOMM_OK를 반환합니다. reply가 NULL이거나 너무 작거나, endpoint 또는 result가 NULL이거나, decision이 1이거나 63보다 크거나, result가 수신한 S2F15가 아니면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. 결과에 이미 응답했거나, 다른 엔드포인트, 연결 세대 또는 선택(selection)에 속하거나, 수신 트랜잭션이 사라졌거나, EAC 0 결정이 오래된 후보를 대상으로 하면 #PDCOMM_STALE_TOKEN을 반환합니다. 엔드포인트가 장비가 아니거나 Communicating 상태가 아니면 #PDCOMM_INVALID_STATE를 반환합니다. 준비된 TCP 이벤트(staged event)가 있거나 송신 큐가 가득 차면 #PDCOMM_BACKPRESSURE를 반환합니다. 그 밖에 #PDCOMM_LIMIT_EXCEEDED, #PDCOMM_ALLOCATION_FAILED, #PDCOMM_IO_ERROR, #PDCOMM_POISONED를 반환합니다.
참고
- 스레드 안전성: 이 호출은
result를 변경합니다. 같은 결과에 대한 getter나 해제와 절대 동시에 실행하지 않습니다.