rcbench
Servo and ESC test bench: panel, IOmcu and shared C
Loading...
Searching...
No Matches
hitec_session.h
Go to the documentation of this file.
1
40
41#ifndef HITEC_SESSION_H
42#define HITEC_SESSION_H
43
44#include <stdbool.h>
45#include <stdint.h>
46
47#include "hitec_reg.h"
48#include "hitec_wire.h"
49
50#ifdef __cplusplus
51extern "C" {
52#endif
53
54/* --- timings -------------------------------------------------------------- */
55
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
87
88/* --- steps and results ---------------------------------------------------- */
89
95
103
115
117typedef struct {
118 uint8_t kind;
119 uint8_t decoder;
120 uint8_t dec_arg;
121 uint16_t off_ms;
122 uint16_t wait_ms;
125
136
138typedef struct {
139 uint8_t run;
140 uint8_t rx;
141 uint16_t value;
143
168
170typedef struct {
171 /* --- for the caller to read ------------------------------------------- */
182 uint8_t series;
183 uint8_t clock;
184 uint8_t in_mode;
185 uint8_t result;
186 uint8_t last_rx;
187 uint8_t fail_addr;
189 uint8_t tries;
190 uint8_t step_index;
191 uint8_t plan_result;
193 uint16_t done;
194 uint16_t total;
195 uint16_t off_ms;
196
197 /* --- private ----------------------------------------------------------- */
201 uint32_t t_mark;
202 uint32_t gap;
203 uint8_t op;
204 uint8_t phase;
205 uint8_t out;
206 uint8_t abort;
207 uint8_t gap_on;
208 uint8_t addr;
209 uint8_t power;
210 uint8_t compare;
211 uint8_t sent;
213 uint8_t unsure;
216
217/* --- operations ----------------------------------------------------------- */
218
230bool hitec_session_init(hitec_session_t *s, uint8_t series, uint8_t clock);
231
257 uint16_t off_ms);
258
272
286 uint16_t n);
287
332 const hitec_image_t *target);
333
347 const hitec_plan_t *plan,
348 const hitec_image_t *expect);
349
363
376
377/* --- stepping ------------------------------------------------------------- */
378
392 hitec_ses_step_t *out);
393
419 const hitec_ses_result_t *r);
420
429
437bool hitec_ses_in_set(const uint8_t *set, uint8_t addr);
438
439#ifdef __cplusplus
440}
441#endif
442
443#endif /* HITEC_SESSION_H */
#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