pdcomm_gem_equipment_publish_alarm
함수
알람 하나의 현재 상태를 S5F1 Alarm Report Send로 게시합니다.
PdcommStatus pdcomm_gem_equipment_publish_alarm(PdcommTcpEndpoint *endpoint, uint32_t id, uint8_t reply_expected, PdcommTcpToken *out_token)보고서에는 L[ALCD, ALID, ALTX]가 담기며, ALCD의 알람 설정 비트는 현재 관측한 상태에서 가져옵니다. 게시하려면 GEM 통신이 COMMUNICATING 상태이고 호스트가 이 알람의 보고를 활성화해야 합니다. 큐에 넣는 본문은 알람의 독립된 스냅샷입니다.
W=1이면 요청이 네이티브 GEM 대기 슬롯 32개 중 하나를 차지하며, 이후 pdcomm_gem_handle_event()가 결과 유형이 #PDCOMM_GEM_ALARM_ACK이고 ACKC5 값을 담은 RESPONSE 결과를 만듭니다. W=0이면 대기 슬롯을 쓰지 않으므로, TCP에 아직 여유가 있으면 슬롯 32개가 모두 사용 중이어도 보고서를 제출할 수 있습니다. 이때 TCP의 #PDCOMM_TCP_W0_WRITTEN 이벤트는 프레임을 로컬에서 기록했다는 뜻일 뿐, 호스트가 수신했다는 뜻은 아닙니다.
매개변수
| 이름 | 설명 |
|---|---|
endpoint | GEM 장비와 알람 저장소가 구성된 엔드포인트입니다. |
id | 게시할 알람 ID(ALID)입니다. |
reply_expected | W=1로 보내려면(S5F2 요청) 1, W=0으로 보내려면 0입니다. |
out_token | 접수된 메시지의 전송 토큰을 받습니다. 먼저 0으로 초기화되므로 실패하면 항상 0입니다. |
반환값
메시지를 큐에 넣었으면 #PDCOMM_OK를 반환합니다(큐 접수만 뜻함). endpoint 또는 out_token이 NULL이거나 reply_expected가 0이나 1이 아니면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. id가 구성된 알람이 아니면 #PDCOMM_OUT_OF_RANGE를 반환합니다. 엔드포인트에 GEM 장비 또는 알람 저장소가 없거나, 알람의 보고가 비활성화되었거나, 통신이 COMMUNICATING 상태가 아니거나, HSMS 세션이 선택(selected) 상태가 아니면 #PDCOMM_INVALID_STATE를 반환합니다. 준비된 TCP 이벤트(staged event)가 있거나, 대기 슬롯 32개가 모두 사용 중이거나(W=1일 때만), TCP 큐가 가득 찼거나 정지 중이면 #PDCOMM_BACKPRESSURE를 반환합니다. 메시지가 엔드포인트 한도를 넘으면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. #PDCOMM_ALLOCATION_FAILED를 반환할 수도 있습니다. 엔드포인트가 오염(poisoned) 상태이거나 패닉(panic)을 격리했으면 #PDCOMM_POISONED를 반환합니다. 그 밖에 pdcomm_tcp_request()와 같은 다른 TCP 제출 상태 코드를 반환할 수 있습니다.