41#ifndef HITEC_SESSION_H
42#define HITEC_SESSION_H
58#define HITEC_SES_TRIES 3u
60#define HITEC_SES_C_GAP_MS 2u
63#define HITEC_SES_D_GAP_MS HITEC_D_WRITE_GAP_MS
66#define HITEC_SES_D_ENTRY_WAIT_MS HITEC_D_REBOOT_WAIT_MS
69#define HITEC_SES_C_ENTRY_WINDOW_US 2000000u
75#define HITEC_SES_C_NEXT_WINDOW_US 1000000u
80#define HITEC_SES_POWER_WINDOW_US 1000u
82#define HITEC_SES_OFF_MS 500u
84#define HITEC_SES_OFF_MS_MAX 10000u
86#define HITEC_SES_SET_BYTES 32u
#define s
Short name for esc_stick_s inside the five stick-class files.
Definition esc_stick_panel_int.h:295
Hitec servo programming protocols: the register models, the parameter table and the write plans.
bool hitec_session_init(hitec_session_t *s, uint8_t series, uint8_t clock)
Prepare a session for one series.
Definition hitec_session.c:339
hitec_ses_t hitec_session_leave(hitec_session_t *s)
Leave programming mode.
Definition hitec_session.c:532
hitec_ses_t hitec_session_feed(hitec_session_t *s, uint32_t now, const hitec_ses_result_t *r)
Take the result of the step that is out.
Definition hitec_session.c:900
hitec_ses_t hitec_session_result(const hitec_session_t *s)
The running operation's state.
Definition hitec_session.c:558
bool hitec_session_abort(hitec_session_t *s)
End the running operation with HITEC_SES_ERR_ABORTED.
Definition hitec_session.c:544
hitec_ses_t hitec_session_read_set(hitec_session_t *s, const uint8_t *addrs, uint16_t n)
Read n addresses into the image, which keeps the rest.
Definition hitec_session.c:403
hitec_ses_t hitec_session_read_all(hitec_session_t *s)
Read the series' full set: hitec_d_read_list() or hitec_c_read_ranges().
Definition hitec_session.c:383
hitec_ses_t hitec_session_write(hitec_session_t *s, const hitec_image_t *target)
Write the servo from the image to target, then read it back.
Definition hitec_session.c:485
hitec_ses_kind_t hitec_session_next(hitec_session_t *s, uint32_t now, hitec_ses_step_t *out)
The step to run at now.
Definition hitec_session.c:652
bool hitec_ses_in_set(const uint8_t *set, uint8_t addr)
True when address addr is in the set set.
Definition hitec_session.c:37
hitec_ses_t hitec_session_run_plan(hitec_session_t *s, const hitec_plan_t *plan, const hitec_image_t *expect)
Run a plan the caller built, such as hitec_d_factory_plan(), then read back as hitec_session_write() ...
Definition hitec_session.c:507
hitec_ses_t hitec_session_enter(hitec_session_t *s, bool power, uint16_t off_ms)
Enter programming mode.
Definition hitec_session.c:355
hitec_ses_kind_t
What a step asks of the caller.
Definition hitec_session.h:97
@ HITEC_SES_STEP_POWER
Definition hitec_session.h:99
@ HITEC_SES_STEP_WAIT
Definition hitec_session.h:100
@ HITEC_SES_STEP_DONE
Definition hitec_session.h:101
@ HITEC_SES_STEP_XFER
Definition hitec_session.h:98
hitec_dec_t
The decoder of a step's capture.
Definition hitec_session.h:109
@ HITEC_DEC_LISTEN
Definition hitec_session.h:113
@ HITEC_DEC_C
Definition hitec_session.h:111
@ HITEC_DEC_D
Definition hitec_session.h:112
@ HITEC_DEC_NONE
Definition hitec_session.h:110
#define HITEC_SES_SET_BYTES
Bytes of an address set: one bit for each of 256 addresses.
Definition hitec_session.h:86
hitec_ses_clock_t
The clock the caller passes.
Definition hitec_session.h:91
@ HITEC_SES_CLOCK_MS
Definition hitec_session.h:93
@ HITEC_SES_CLOCK_US
Definition hitec_session.h:92
hitec_ses_run_t
How a step ended.
Definition hitec_session.h:127
@ HITEC_SES_RAN
It ran to its end; rx and value are the decoder's.
Definition hitec_session.h:129
@ HITEC_SES_CUT
An abort, a close or a stop cut it.
Definition hitec_session.h:131
@ HITEC_SES_FAILED
It did not run: refused, not started, the supply refused, or the link was lost.
Definition hitec_session.h:134
hitec_ses_t
Result of an operation.
Definition hitec_session.h:145
@ HITEC_SES_BUSY
Definition hitec_session.h:147
@ HITEC_SES_ERR_LINK
Definition hitec_session.h:165
@ HITEC_SES_ERR_CUT
Definition hitec_session.h:164
@ HITEC_SES_ERR_ARG
Definition hitec_session.h:149
@ HITEC_SES_ERR_WRITE
Definition hitec_session.h:156
@ HITEC_SES_ERR_VERIFY
Definition hitec_session.h:158
@ HITEC_SES_ERR_READ
Definition hitec_session.h:155
@ HITEC_SES_ERR_ABORTED
Definition hitec_session.h:166
@ HITEC_SES_ERR_BUSY
Definition hitec_session.h:148
@ HITEC_SES_ERR_ENTRY
Definition hitec_session.h:153
@ HITEC_SES_ERR_PLAN
Definition hitec_session.h:160
@ HITEC_SES_OK
Definition hitec_session.h:146
@ HITEC_SES_ERR_STEP
Definition hitec_session.h:162
@ HITEC_SES_ERR_NO_SERVO
Definition hitec_session.h:152
@ HITEC_SES_ERR_NOT_IN_MODE
Definition hitec_session.h:151
Hitec servo programming protocols: frames, transactions, the reply decoders and the driver interface.
The registers or cells of one servo, as read.
Definition hitec_reg.h:95
An ordered list of writes.
Definition hitec_reg.h:602
The result of a step.
Definition hitec_session.h:138
uint16_t value
Definition hitec_session.h:141
uint8_t run
Definition hitec_session.h:139
uint8_t rx
Definition hitec_session.h:140
One step.
Definition hitec_session.h:117
uint16_t wait_ms
Definition hitec_session.h:122
uint8_t dec_arg
Definition hitec_session.h:120
uint8_t kind
Definition hitec_session.h:118
uint16_t off_ms
Definition hitec_session.h:121
hitec_xfer_t xfer
Definition hitec_session.h:123
uint8_t decoder
Definition hitec_session.h:119
The session with one servo.
Definition hitec_session.h:170
uint8_t todo[HITEC_SES_SET_BYTES]
Definition hitec_session.h:200
hitec_image_t target
Definition hitec_session.h:198
uint8_t compare
Definition hitec_session.h:210
uint16_t done
Definition hitec_session.h:193
uint32_t t_mark
Definition hitec_session.h:201
uint8_t gap_on
Definition hitec_session.h:207
uint16_t off_ms
Definition hitec_session.h:195
uint8_t result
Definition hitec_session.h:185
uint8_t phase
Definition hitec_session.h:204
uint8_t series
Definition hitec_session.h:182
uint8_t step_index
Definition hitec_session.h:190
uint8_t op
Definition hitec_session.h:203
hitec_plan_t plan
Definition hitec_session.h:178
uint8_t last_rx
Definition hitec_session.h:186
uint8_t plan_result
Definition hitec_session.h:191
uint8_t sent
Definition hitec_session.h:211
uint16_t total
Definition hitec_session.h:194
uint8_t out
Definition hitec_session.h:205
uint8_t abort
Definition hitec_session.h:206
uint32_t gap
Definition hitec_session.h:202
hitec_image_t image
Definition hitec_session.h:172
uint8_t in_mode
Definition hitec_session.h:184
uint8_t clock
Definition hitec_session.h:183
uint8_t power
Definition hitec_session.h:209
hitec_ses_step_t step
Definition hitec_session.h:199
uint8_t diff[HITEC_SES_SET_BYTES]
Bit a of byte a / 8, bit a % 8: address a differs after a write's read-back.
Definition hitec_session.h:181
uint8_t unsure
Definition hitec_session.h:213
uint8_t fail_addr
Definition hitec_session.h:187
uint8_t addr
Definition hitec_session.h:208
uint8_t tries
Definition hitec_session.h:189
One transaction.
Definition hitec_wire.h:233