68#ifndef RCBENCH_HITEC_LINK_H
69#define RCBENCH_HITEC_LINK_H
83#define HITEC_LINK_MINOR LINK_MINOR_HITEC
87#define HITEC_LINK_POLL_MS 5u
89#define HITEC_LINK_HELD_MS 100u
91#define HITEC_LINK_IDLE_MS 500u
94#define HITEC_LINK_RETRIES 3u
96#define HITEC_LINK_PASS_MAX 4u
99#define HITEC_LINK_RUN_MAX_MS 25000u
101#define HITEC_LINK_NO_PIN 0xFFFFu
104#define HITEC_LINK_NO_ANSWER (-1)
107#define HITEC_LINK_ACK 0
122 HITEC_LINK_START_OK = 0,
132 HITEC_LINK_OUT_NONE = 0,
233#define HITEC_LINK_STAGED (LINK_HT_W_STAGED + 1u)
341 uint8_t family, uint8_t drive,
391 uint16_t ma, uint32_t
id);
void hitec_link_init(hitec_link_t *l)
Sets up the module: no IOmcu, nothing owed.
Definition hitec_link.c:192
unsigned hitec_link_service(hitec_link_t *l, uint32_t now_ms, hitec_link_xchg_fn xchg, void *ctx)
Up to HITEC_LINK_PASS_MAX exchanges through xchg: one pass.
Definition hitec_link.c:1027
void hitec_link_abort(hitec_link_t *l)
STOP, or the operator's cancel.
Definition hitec_link.c:477
hitec_link_start_t hitec_link_open(hitec_link_t *l, uint8_t port, uint8_t family, uint8_t drive, uint32_t id)
OPEN port for family and drive.
Definition hitec_link.c:315
bool hitec_link_has_page(const hitec_link_t *l)
Whether the IOmcu has the page.
Definition hitec_link.c:234
bool hitec_link_outcome(hitec_link_t *l, hitec_link_outcome_t *out)
How the last request went, once.
Definition hitec_link.c:1061
hitec_link_start_t hitec_link_clear(hitec_link_t *l, uint8_t port, uint32_t id)
CLEAR the STOPPED flag of port.
Definition hitec_link.c:372
void hitec_link_readout(const hitec_link_t *l, hitec_link_readout_t *r)
The screen's copy of the page.
Definition hitec_link.c:1071
hitec_link_start_t hitec_link_step(hitec_link_t *l, uint8_t port, const hitec_ses_step_t *st, uint16_t mv, uint16_t ma, uint32_t id)
Run one session step on port: an XFER as SEND, LISTEN or LEVEL by its kind, or a POWER at mv and ma w...
Definition hitec_link.c:413
void hitec_link_done(hitec_link_t *l, int result, const uint16_t *regs)
How the exchange hitec_link_next() gave went.
Definition hitec_link.c:971
hitec_link_phase_t hitec_link_phase(const hitec_link_t *l)
Where the module is.
Definition hitec_link.c:1056
void hitec_link_lost(hitec_link_t *l)
The link went: a request on its way ends as HITEC_LINK_OUT_NO_ANSWER and nothing is read or written u...
Definition hitec_link.c:199
hitec_link_start_t hitec_link_close(hitec_link_t *l, uint8_t port, uint32_t id)
CLOSE port: any port the page holds, one another writer opened included. The supply is left as it is.
Definition hitec_link.c:366
bool hitec_link_next(hitec_link_t *l, uint32_t now_ms, hitec_link_xfer_t *x)
The next exchange owed at now_ms, into x; false for none.
Definition hitec_link.c:601
void hitec_link_came_up(hitec_link_t *l, uint16_t minor)
An IOmcu answered with protocol minor minor.
Definition hitec_link.c:221
#define HITEC_LINK_STAGED
Staged registers 4 to 21 and VIEW, as they go out.
Definition hitec_link.h:233
hitec_link_phase_t
Where the module is.
Definition hitec_link.h:110
@ HITEC_LINK_SYNC
Definition hitec_link.h:113
@ HITEC_LINK_FETCHING
Definition hitec_link.h:117
@ HITEC_LINK_SENDING
Definition hitec_link.h:115
@ HITEC_LINK_NO_PAGE
Definition hitec_link.h:112
@ HITEC_LINK_DOWN
Definition hitec_link.h:111
@ HITEC_LINK_RUNNING
Definition hitec_link.h:116
@ HITEC_LINK_READY
Definition hitec_link.h:114
hitec_link_outcome_kind_t
How a request went.
Definition hitec_link.h:131
@ HITEC_LINK_OUT_RESTARTED
Definition hitec_link.h:139
@ HITEC_LINK_OUT_NO_ANSWER
Definition hitec_link.h:137
@ HITEC_LINK_OUT_DONE
Definition hitec_link.h:133
@ HITEC_LINK_OUT_REFUSED
Definition hitec_link.h:134
@ HITEC_LINK_OUT_NACK
Definition hitec_link.h:136
@ HITEC_LINK_OUT_DROPPED
Definition hitec_link.h:143
hitec_link_start_t
What a request answers.
Definition hitec_link.h:121
@ HITEC_LINK_START_NO_PAGE
Definition hitec_link.h:124
@ HITEC_LINK_START_ARG
Definition hitec_link.h:127
@ HITEC_LINK_START_BUSY
Definition hitec_link.h:125
@ HITEC_LINK_START_DOWN
Definition hitec_link.h:123
int(*) hitec_link_xchg_fn(void *ctx, const hitec_link_xfer_t *x, uint16_t *regs)
The caller's exchange: makes x and fills regs with the x->n registers of a read that was answered wit...
Definition hitec_link.h:229
Hitec servo programming protocols: the session with one servo, as a state machine that hands out step...
Hitec servo programming protocols: frames, transactions, the reply decoders and the driver interface.
#define HITEC_RX_MAX
Definition hitec_wire.h:204
The page map: what the panel can ask the IOmcu for, and set.
@ LINK_HT_DATA
Definition link_pages.h:2244
link_hitec_state_t
Where the port is.
Definition link_pages.h:2377
link_hitec_refusal_t
Why a command that was taken did nothing: LINK_HT_RESULT's high byte.
Definition link_pages.h:2459
link_hitec_op_t
The operations of a command.
Definition link_pages.h:2418
#define LINK_HT_W_CMD_FRAME
Registers of the command, from LINK_HT_W_CMD: one frame.
Definition link_pages.h:2350
The outcome of a request that ended.
Definition hitec_link.h:148
uint32_t window_us
Definition hitec_link.h:177
uint32_t id
Definition hitec_link.h:153
bool have_cap
Definition hitec_link.h:167
uint32_t t_us
Definition hitec_link.h:176
uint8_t nack
Definition hitec_link.h:155
uint16_t framing
Definition hitec_link.h:178
bool taken
Definition hitec_link.h:156
uint16_t cap
Definition hitec_link.h:168
hitec_link_outcome_kind_t kind
Definition hitec_link.h:149
uint8_t answer_id
Definition hitec_link.h:169
uint8_t port
Definition hitec_link.h:152
link_hitec_refusal_t refusal
Definition hitec_link.h:154
uint8_t bytes[HITEC_RX_MAX]
Definition hitec_link.h:172
uint8_t n
Definition hitec_link.h:171
link_hitec_op_t op
Definition hitec_link.h:150
hitec_ses_result_t ses
The step's result for hitec_session_feed(): RAN for a request that ended LINK_HITEC_RESULT_DONE,...
Definition hitec_link.h:166
uint8_t result
Definition hitec_link.h:158
uint32_t delay_ns
Definition hitec_link.h:175
bool have_run
Definition hitec_link.h:173
The screen's copy of the page: a plain value.
Definition hitec_link.h:182
hitec_link_phase_t phase
Definition hitec_link.h:183
bool hold_supply
Definition hitec_link.h:186
uint16_t line
Definition hitec_link.h:205
bool have_line
Definition hitec_link.h:203
bool known
Definition hitec_link.h:188
uint8_t port_no
Definition hitec_link.h:190
uint16_t seq
Definition hitec_link.h:199
uint16_t bit_ns
Definition hitec_link.h:207
link_hitec_op_t op
Definition hitec_link.h:200
uint16_t pin
Definition hitec_link.h:204
uint16_t count
Definition hitec_link.h:201
uint16_t minor
Definition hitec_link.h:184
bool held
Definition hitec_link.h:193
bool stopped
Definition hitec_link.h:194
uint16_t flags
Definition hitec_link.h:191
link_hitec_state_t state
Definition hitec_link.h:189
bool ours
Definition hitec_link.h:195
The state of the HITEC link module.
Definition hitec_link.h:236
uint8_t polled
Definition hitec_link.h:244
uint8_t doubt_abort
Definition hitec_link.h:276
uint8_t phase
Definition hitec_link.h:241
uint8_t cmd_live
Definition hitec_link.h:270
uint8_t op
Definition hitec_link.h:256
uint16_t cmd_proto[LINK_HT_W_CMD_FRAME]
Definition hitec_link.h:262
uint16_t minor
Definition hitec_link.h:239
uint8_t pending
Definition hitec_link.h:242
uint8_t taken
Definition hitec_link.h:265
uint8_t cmd_abort
Definition hitec_link.h:271
uint16_t seq
Definition hitec_link.h:248
uint8_t ours
Definition hitec_link.h:250
uint16_t staged[HITEC_LINK_STAGED]
Definition hitec_link.h:260
uint8_t limit_cut
Definition hitec_link.h:267
uint8_t active
Definition hitec_link.h:255
uint8_t poll_now
Definition hitec_link.h:245
uint8_t cmd_doubt
Definition hitec_link.h:273
uint32_t id
Definition hitec_link.h:258
uint16_t line[3]
Definition hitec_link.h:252
uint8_t stage_at
Definition hitec_link.h:259
uint8_t port
Definition hitec_link.h:257
uint8_t verdict
Definition hitec_link.h:263
uint8_t known
Definition hitec_link.h:240
hitec_link_outcome_t outcome
Definition hitec_link.h:287
uint16_t cmd[LINK_HT_W_CMD_FRAME]
Definition hitec_link.h:281
uint8_t doubt_nack
Definition hitec_link.h:278
uint32_t now_ms
Definition hitec_link.h:247
uint16_t end[LINK_HT_DATA]
Definition hitec_link.h:284
uint8_t tries
Definition hitec_link.h:243
uint8_t outcome_new
Definition hitec_link.h:286
uint32_t status_ms
Definition hitec_link.h:246
uint8_t page
Definition hitec_link.h:238
uint8_t abort_wanted
Definition hitec_link.h:282
uint8_t have_line
Definition hitec_link.h:251
uint16_t status[LINK_HT_DATA]
Definition hitec_link.h:249
uint8_t cmd_tries
Definition hitec_link.h:272
uint32_t taken_ms
Definition hitec_link.h:266
uint8_t up
Definition hitec_link.h:237
One exchange for the caller to make.
Definition hitec_link.h:211
uint8_t page
Definition hitec_link.h:213
uint16_t regs[4]
Definition hitec_link.h:216
bool write
Definition hitec_link.h:212
uint8_t off
Definition hitec_link.h:214
uint8_t n
Definition hitec_link.h:215
The result of a step.
Definition hitec_session.h:138
One step.
Definition hitec_session.h:117