rcbench
Servo and ESC test bench: panel, IOmcu and shared C
Loading...
Searching...
No Matches
kst_reg.h
Go to the documentation of this file.
1
32
33#ifndef KST_REG_H
34#define KST_REG_H
35
36#include <stdbool.h>
37#include <stddef.h>
38#include <stdint.h>
39
40#include "kst_wire.h"
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
47typedef struct {
48 uint8_t r[KST_REG_COUNT];
50
52#define KST_REG_DUTY_COPY 0x01u
53#define KST_REG_DUTY 0x02u
54#define KST_REG_NODE_ADDR 0x1Du
55
108
110typedef uint64_t kst_field_set_t;
112#define KST_FIELD_BIT(id) ((kst_field_set_t)1 << (id))
113
125
137
139typedef struct {
140 const char *name;
141 uint8_t lo_reg;
142 uint8_t lo_shift;
143 uint8_t lo_bits;
144 uint8_t hi_reg;
145 uint8_t hi_shift;
146 uint8_t hi_bits;
147 uint8_t access;
148 uint8_t unit;
149 uint8_t conv;
151
159
168
176uint8_t kst_field_reg_mask(kst_field_id_t id, uint8_t reg);
177
185uint16_t kst_field_get(const kst_image_t *img, kst_field_id_t id);
186
198bool kst_field_set(kst_image_t *img, kst_field_id_t id, uint16_t raw);
199
211bool kst_field_edit(kst_image_t *img, kst_field_id_t id, uint16_t raw);
212
240bool kst_field_display(kst_field_id_t id, uint16_t raw, int32_t *display);
241
254bool kst_field_raw_from_display(kst_field_id_t id, int32_t display,
255 uint16_t *raw);
256
257/* --- servo type ----------------------------------------------------------- */
258
274
282
289const char *kst_type_name(kst_type_t type);
290
291/* --- layout fingerprint --------------------------------------------------- */
292
312
314typedef struct {
315 uint16_t rules;
316 uint32_t regs;
318
328bool kst_fingerprint(const kst_image_t *img, kst_fingerprint_t *out);
329
330#ifdef __cplusplus
331}
332#endif
333
334#endif /* KST_REG_H */
uint16_t kst_field_raw_max(kst_field_id_t id)
Largest raw value the field's bits hold; 0 for an id outside the table.
Definition kst_reg.c:113
uint64_t kst_field_set_t
A set of fields, bit n for field n.
Definition kst_reg.h:110
kst_unit_t
Unit of a displayed value.
Definition kst_reg.h:127
@ KST_UNIT_TENTH_US
Definition kst_reg.h:130
@ KST_UNIT_TENTH_S
Definition kst_reg.h:133
@ KST_UNIT_BOOL
Definition kst_reg.h:129
@ KST_UNIT_RAW
Definition kst_reg.h:128
@ KST_UNIT_PERCENT
Definition kst_reg.h:131
@ KST_UNIT_TENTH_PERCENT
Definition kst_reg.h:132
@ KST_UNIT_FACTOR
Definition kst_reg.h:134
@ KST_UNIT_COUNT_OF
Definition kst_reg.h:135
bool kst_field_edit(kst_image_t *img, kst_field_id_t id, uint16_t raw)
Set a field as an edit does: kst_field_set(), and for KST_F_DUTY the copy in register 0x01 as well.
Definition kst_reg.c:177
const kst_field_t * kst_field(kst_field_id_t id)
The table row of id; NULL for an id outside the table.
Definition kst_reg.c:87
const char * kst_type_name(kst_type_t type)
"V8", "V6", and "" for any other value.
Definition kst_reg.c:314
bool kst_fingerprint(const kst_image_t *img, kst_fingerprint_t *out)
True when the image has the measured layout.
Definition kst_reg.c:339
bool kst_field_display(kst_field_id_t id, uint16_t raw, int32_t *display)
Raw value to displayed value.
Definition kst_reg.c:200
kst_type_t kst_type(const kst_image_t *img)
The type of img; KST_TYPE_NONE for NULL.
Definition kst_reg.c:306
kst_field_id_t
Every bit of the 32 registers belongs to exactly one field.
Definition kst_reg.h:61
@ KST_F_NEUTRAL
Definition kst_reg.h:77
@ KST_F_R14
Definition kst_reg.h:93
@ KST_F_PROT1_EN
Definition kst_reg.h:90
@ KST_F_SPD
Definition kst_reg.h:100
@ KST_F_LEFT_ANGLE
Definition kst_reg.h:85
@ KST_F_R0A_B5
Definition kst_reg.h:78
@ KST_F_R1C_B74
Definition kst_reg.h:101
@ KST_F_BOOST
Definition kst_reg.h:65
@ KST_F_GYRO
Definition kst_reg.h:104
@ KST_F_20K_SEL
Definition kst_reg.h:69
@ KST_F_PROT_POT_ERR
Definition kst_reg.h:96
@ KST_F_PULSE_LOWER
Definition kst_reg.h:75
@ KST_F_POT_SAM_TIMES
Definition kst_reg.h:98
@ KST_F_ALLOW_UNCONT
Definition kst_reg.h:73
@ KST_F_PROT1_PWM
Definition kst_reg.h:94
@ KST_F_STRETCH
Definition kst_reg.h:66
@ KST_F_RIGHT_ANGLE
Definition kst_reg.h:86
@ KST_F_R12_B54
Definition kst_reg.h:89
@ KST_F_R06
Definition kst_reg.h:74
@ KST_F_DEAD_BAND
Definition kst_reg.h:71
@ KST_F_PROT1_TIME
Definition kst_reg.h:92
@ KST_F_UNCONT_POS
Definition kst_reg.h:81
@ KST_F_R12_B20
Definition kst_reg.h:87
@ KST_F_DUTY
Definition kst_reg.h:64
@ KST_F_R18_B74
Definition kst_reg.h:97
@ KST_F_R12_B7
Definition kst_reg.h:91
@ KST_F_R0D_B76
Definition kst_reg.h:82
@ KST_F_R16
Definition kst_reg.h:95
@ KST_F_SOFT_START
Definition kst_reg.h:67
@ KST_F_PULSE_UPPER
Definition kst_reg.h:76
@ KST_F_UNCONT_TIME
Definition kst_reg.h:83
@ KST_F_REVERSION
Definition kst_reg.h:79
@ KST_F_NODE_ADDR
Definition kst_reg.h:102
@ KST_F_DUTY_COPY
Definition kst_reg.h:63
@ KST_F_R0A_B7
Definition kst_reg.h:80
@ KST_F_R04_B54
Definition kst_reg.h:68
@ KST_F_R1F_B71
Definition kst_reg.h:105
@ KST_F_LOCK
Definition kst_reg.h:72
@ KST_F_R1E
Definition kst_reg.h:103
@ KST_F_R0F
Definition kst_reg.h:84
@ KST_F_PROT1_CANCLE
Definition kst_reg.h:88
@ KST_F_PROT_PWM_ERR
Definition kst_reg.h:99
@ KST_F_R00
Definition kst_reg.h:62
@ KST_F_SPD_SEL
Definition kst_reg.h:70
uint16_t kst_field_get(const kst_image_t *img, kst_field_id_t id)
Raw value of a field; 0 for a bad argument.
Definition kst_reg.c:137
kst_access_t
Who may change a field.
Definition kst_reg.h:119
@ KST_ACCESS_LOCKED
Definition kst_reg.h:121
@ KST_ACCESS_NEVER
Definition kst_reg.h:123
@ KST_ACCESS_EDITABLE
Definition kst_reg.h:120
uint8_t kst_field_reg_mask(kst_field_id_t id, uint8_t reg)
Bits of register reg that belong to id.
Definition kst_reg.c:120
kst_fp_rule_t
What both known images have in common and the vendor tool forces on every write.
Definition kst_reg.h:300
@ KST_FP_R04_B54
Definition kst_reg.h:305
@ KST_FP_R1F_B71
Definition kst_reg.h:308
@ KST_FP_STRETCH_INDEX
Definition kst_reg.h:309
@ KST_FP_R06
Definition kst_reg.h:303
@ KST_FP_R12_UNNAMED
Definition kst_reg.h:307
@ KST_FP_R0A_B5_B7
Definition kst_reg.h:306
@ KST_FP_R00
Definition kst_reg.h:301
@ KST_FP_DUTY_COPY
Definition kst_reg.h:302
@ KST_FP_R1E
Definition kst_reg.h:304
bool kst_field_raw_from_display(kst_field_id_t id, int32_t display, uint16_t *raw)
Displayed value to the nearest raw value.
Definition kst_reg.c:248
kst_type_t
The servo type of an image.
Definition kst_reg.h:269
@ KST_TYPE_V8
Definition kst_reg.h:270
@ KST_TYPE_V6
Definition kst_reg.h:271
@ KST_TYPE_NONE
Definition kst_reg.h:272
bool kst_field_set(kst_image_t *img, kst_field_id_t id, uint16_t raw)
Set a field's bits.
Definition kst_reg.c:156
KST servo programming protocol: frames and the reply decoder.
#define KST_REG_COUNT
The servo decodes 5 address bits: registers 0x00 to 0x1F.
Definition kst_wire.h:55
One row of the field table.
Definition kst_reg.h:139
uint8_t access
Definition kst_reg.h:147
uint8_t lo_shift
Definition kst_reg.h:142
uint8_t hi_reg
Definition kst_reg.h:144
uint8_t lo_reg
Definition kst_reg.h:141
uint8_t hi_bits
Definition kst_reg.h:146
const char * name
Definition kst_reg.h:140
uint8_t lo_bits
Definition kst_reg.h:143
uint8_t unit
Definition kst_reg.h:148
uint8_t conv
Definition kst_reg.h:149
uint8_t hi_shift
Definition kst_reg.h:145
Broken rules and deviating registers of an image.
Definition kst_reg.h:314
uint32_t regs
Definition kst_reg.h:316
uint16_t rules
Definition kst_reg.h:315
The 32 registers, by address.
Definition kst_reg.h:47