55#define KST_REG_COUNT 32u
56#define KST_REG_MAX 0x1Fu
66#define KST_HALF_CELL_NS 25400u
68#define KST_HALF_CELL_CYCLES_150MHZ 3810u
75#define KST_SERVO_CELL_NS 51150u
76#define KST_SERVO_HALF_CELL_NS 25575u
78#define KST_FRAME_BITS 27u
79#define KST_REPLY_BITS 11u
85#define KST_SYNC_PULSES 64u
88#define KST_FRAME_MAX_HALF_CELLS 127u
89#define KST_FRAME_LEVEL_BYTES 16u
99#define KST_RELEASE_NS 50000u
104#define KST_READ_ACCEPT_MIN_NS 350000u
105#define KST_READ_ACCEPT_MAX_NS 600000u
107#define KST_READ_WINDOW_NS 1500000u
109#define KST_WRITE_ACCEPT_MIN_NS 3300000u
110#define KST_WRITE_ACCEPT_MAX_NS 4200000u
112#define KST_WRITE_WINDOW_NS 8000000u
117#define KST_GLITCH_NS 1500u
119#define KST_RX_SEARCH_NS 8000u
124#define KST_RX_CONFIRM_NS 12800u
130#define KST_RX_HALF_CELL_MIN_NS 24300u
131#define KST_RX_HALF_CELL_MAX_NS 26900u
138#define KST_RX_FINAL_EDGE_MAX_NS 100000u
140#define KST_RX_QUIET_AFTER_NS 200000u
147#define KST_CAP_MAX_EDGES 48u
169 uint8_t
level[KST_FRAME_LEVEL_BYTES];
bool kst_frame_read(uint8_t reg, kst_frame_t *out)
Read frame for register reg.
Definition kst_wire.c:68
kst_rx_t kst_reply_decode(const kst_capture_t *cap, kst_expect_t expect, kst_reply_t *out)
Decode a reply window.
Definition kst_wire.c:306
bool kst_frame_write(uint8_t reg, uint8_t value, kst_frame_t *out)
Write frame.
Definition kst_wire.c:77
void kst_frame_sync(kst_frame_t *out)
The sync burst that puts a servo into programming mode.
Definition kst_wire.c:86
bool kst_frame_level(const kst_frame_t *frame, unsigned index)
Level of half-cell index; false past the end.
Definition kst_wire.c:98
kst_expect_t
What the master sent, which decides the accept window and the flags.
Definition kst_wire.h:243
@ KST_EXPECT_READ
Definition kst_wire.h:244
@ KST_EXPECT_SYNC
Definition kst_wire.h:246
@ KST_EXPECT_WRITE
Definition kst_wire.h:245
kst_frame_kind_t
Kind of a master frame.
Definition kst_wire.h:152
@ KST_FRAME_READ
Definition kst_wire.h:153
@ KST_FRAME_WRITE
Definition kst_wire.h:154
@ KST_FRAME_SYNC
Definition kst_wire.h:155
uint32_t kst_frame_duration_ns(const kst_frame_t *frame)
Time the frame takes on the wire, in ns.
Definition kst_wire.c:106
uint32_t kst_reply_window_ns(kst_expect_t expect)
Accept window and capture length for expect.
Definition kst_wire.c:113
#define KST_CAP_MAX_EDGES
Edges a capture holds.
Definition kst_wire.h:147
kst_rx_t
Result of decoding one reply window.
Definition kst_wire.h:254
@ KST_RX_CELL
Definition kst_wire.h:260
@ KST_RX_FLAGS
Definition kst_wire.h:263
@ KST_RX_CAPTURE
Definition kst_wire.h:267
@ KST_RX_OVERFLOW
Definition kst_wire.h:266
@ KST_RX_LATE
Definition kst_wire.h:259
@ KST_RX_OK
Definition kst_wire.h:255
@ KST_RX_WINDOW
Definition kst_wire.h:265
@ KST_RX_QUIET
Definition kst_wire.h:257
@ KST_RX_FINAL_EDGE
Definition kst_wire.h:264
@ KST_RX_START_LEVEL
Definition kst_wire.h:258
@ KST_RX_LENGTH
Definition kst_wire.h:261
@ KST_RX_NO_REPLY
Definition kst_wire.h:256
@ KST_RX_RATE
Definition kst_wire.h:262
The reply window as the driver saw it.
Definition kst_wire.h:230
uint8_t level0
Definition kst_wire.h:232
uint32_t edge_ns[KST_CAP_MAX_EDGES]
Definition kst_wire.h:237
uint8_t overflow
Definition kst_wire.h:234
uint32_t window_ns
Definition kst_wire.h:231
uint8_t n_edges
Definition kst_wire.h:236
A master frame as line levels, one per half-cell.
Definition kst_wire.h:166
uint8_t kind
Definition kst_wire.h:167
uint8_t n_half
Definition kst_wire.h:168
uint8_t level[KST_FRAME_LEVEL_BYTES]
Definition kst_wire.h:169
A decoded reply window.
Definition kst_wire.h:271
uint8_t glitches
Definition kst_wire.h:275
uint8_t flags
Definition kst_wire.h:274
uint8_t result
Definition kst_wire.h:272
uint32_t delay_ns
Definition kst_wire.h:276
uint8_t value
Definition kst_wire.h:273
uint32_t half_cell_ns
Definition kst_wire.h:277