57 lines
2.5 KiB
C
57 lines
2.5 KiB
C
/*
|
||
* 被控站STARTDT/STOPDT:受理时改变传输状态,发送完成只校验CON结果。
|
||
* 本层不执行socket I/O、不维护发送队列、不计时;所有调用必须串行。
|
||
*/
|
||
#ifndef IEC104_LINK_SLAVE_STARTSTOP_H
|
||
#define IEC104_LINK_SLAVE_STARTSTOP_H
|
||
#include "IEC104_Link_Common.h"
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
/*
|
||
* 每个合法STARTDT_ACT生成6字节CON,立即置STARTED/IDLE,可结束停止等待。
|
||
* 先预留发送空间再调用,OK后按FIFO提交;提交失败须断链,不能回滚后重放。
|
||
* 不暂存相反请求、不撤回已排队CON、不重置序号;非法输入FATAL且不修改输出。
|
||
*/
|
||
extern IEC104_LinkResult_t IEC104_Link_Handle_Startdt_Act(
|
||
IEC104_LinkState_t *state, const IEC104_ApciInfo_t *apci,
|
||
uint8_t *response, uint16_t capacity);
|
||
|
||
/* 恰好6字节为OK,否则FATAL;完成不修改当前启停状态。 */
|
||
extern IEC104_LinkResult_t IEC104_Link_Complete_Startdt_Con_Send(
|
||
IEC104_LinkState_t *state, int sent_len);
|
||
|
||
/*
|
||
* 合法STOP立即置STOPPED/STOP_DRAINING,返回OK,不生成报文。
|
||
* 既有START_CON仍按FIFO完成;不等待它、不暂存STOP、不因启停交错断链。
|
||
* 排空中的重复STOP返回IGNORED且不延长期限;STOPPED/IDLE再次STOP会重新应答。
|
||
* 非法输入返回FATAL且不修改状态。
|
||
*/
|
||
extern IEC104_LinkResult_t IEC104_Link_Handle_Stopdt_Act(
|
||
IEC104_LinkState_t *state, const IEC104_ApciInfo_t *apci);
|
||
|
||
/* 只读查询:1可生成S或STOP_CON,0无义务或等待,-1非法。 */
|
||
extern int IEC104_Link_Can_Prepare_Stopdt_Response(const IEC104_LinkState_t *state);
|
||
|
||
/*
|
||
* 先确认已收到的数据,再等待本端已预留I帧获ACK,不发送新的业务I帧。
|
||
* 已排队且覆盖V(R)的S允许STOP_CON紧随排队,发送及完成顺序由FIFO保证。
|
||
* FRAME_READY写response和tx;生成STOP_CON即结束排空,保持STOPPED。
|
||
* 后到START可结束未生成CON的排空;已生成的CON仍须按序完成。
|
||
* WAIT_SEND等既有S,WAIT_PEER_ACK等I帧确认,NOT_ACTIVE表示无停止义务。
|
||
*/
|
||
extern IEC104_StopdtPrepareResult_t IEC104_Link_Prepare_Stopdt_Response(
|
||
IEC104_LinkState_t *state, uint8_t *response, uint16_t capacity,
|
||
IEC104_StopdtTx_t *tx);
|
||
|
||
/* 恰好6字节为OK,否则FATAL;旧STOP_CON完成不覆盖后到START的状态。 */
|
||
extern IEC104_LinkResult_t IEC104_Link_Complete_Stopdt_Con_Send(
|
||
IEC104_LinkState_t *state, int sent_len);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif /* IEC104_LINK_SLAVE_STARTSTOP_H */
|