Motion Master
Loading...
Searching...
No Matches
circulo_encoder_configuration.h
Go to the documentation of this file.
1#pragma once
2
3#include <chrono>
4#include <cstdint>
5
6#include "util.h"
7
8class Cia402Drive;
10
12 public:
14 Cia402Drive& cia402_drive, uint8_t encoder_ordinal,
15 uint8_t battery_mode_max_acceleration, uint32_t external_circulo_type,
16 const std::function<void()>& started_callback = {},
17 const std::function<void(uint8_t)>& progress_callback = {});
18
20
21 private:
22 Cia402Drive& cia402_drive_;
23 uint8_t encoder_ordinal_;
24 uint8_t battery_mode_max_acceleration_;
25 uint32_t external_circulo_type_;
28 uint8_t singleturn_bits_ = 0;
29
30 const std::function<void()>& started_callback_;
31 const std::function<void(uint8_t)>& progress_callback_;
32
33 double progress_ = 0;
34
35 // Prevent multiple encoder configurations from running on the same device
36 // at the same time
37 static inline std::unordered_map<int32_t, std::mutex> mutex_map_;
38
39 // Registers that have CALIBRATION written are not used by
40 // configuration. They will be written when calibrating the encoder.
41
42 // Singleturn
43 // Tuple: {Circulo type that uses the register value, address, value}
44 static inline const std::list<std::tuple<CirculoType, uint8_t, uint8_t>>
45 singleturn_address_value_list_ = {
46 // Register 0x00 = 0x00 (default=0x00)
47 {CirculoType::kUnspecified, 0x00, 0x00},
48
49 // Register 0x01 = CALIBRATION (default = 0x00)
50 // Register 0x02 = CALIBRATION (default = 0x00)
51 // Register 0x03 = CALIBRATION (default = 0x00)
52 // Register 0x04 = CALIBRATION (default = 0x00)
53 // Register 0x05 = 0x88 (default = 0x88)
54 {CirculoType::kUnspecified, 0x05, 0x88},
55
56 // Register 0x06 = 0x00 (default = 0x00)
57 {CirculoType::kUnspecified, 0x06, 0x00},
58
59 // Register 0x07 = CALIBRATION (default = 0x00)
60 // Register 0x08 = CALIBRATION (default = 0x00)
61 // Register 0x09 = CALIBRATION (default = 0x00)
62 // Register 0x0A = CALIBRATION (default = 0x00)
63 // Register 0x0B = 0x02 (default = 0x02)
64 {CirculoType::kCirculo7, 0x0B, 0x02},
65 {CirculoType::kCirculo7Smm, 0x0B, 0x52},
66 {CirculoType::kCirculo9, 0x0B, 0x02},
67 {CirculoType::kCirculo9Smm, 0x0B, 0x52},
68 {CirculoType::kCirculo18Bit, 0x0B, 0x52},
69
70 // Register 0x0C = 0x6C (Mask AN_MAX error; default = 0x00)
71 {CirculoType::kUnspecified, 0x0C, 0x6C},
72
73 // Register 0x0D = 0xC0 (default = 0x00)
74 {CirculoType::kUnspecified, 0x0D, 0xC0},
75
76 // Register 0x0E = 0x04 (default=0x06)
77 {CirculoType::kUnspecified, 0x0E, 0x04},
78
79 // Register 0x0F = MPC, the master period count: 0x04 for 16 pole
80 // pairs, 0x05 for 32, 0x06 for 64 (default=0x05)
81 {CirculoType::kCirculo7, 0x0F, 0x05},
82 {CirculoType::kCirculo7Smm, 0x0F, 0x05},
83 {CirculoType::kCirculo9, 0x0F, 0x06},
84 {CirculoType::kCirculo9Smm, 0x0F, 0x06},
85 {CirculoType::kCirculo18Bit, 0x0F, 0x04},
86
87 // Register 0x10 = 0x00 (default=0x00)
88 {CirculoType::kUnspecified, 0x10, 0x00},
89
90 // Register 0x11 = OUT_MSB, which puts the MSB of the output word at
91 // bit 13 plus the value. So 0x04 for 18 singleturn bits, 0x05 for 19,
92 // 0x06 for 20. (default=0xA5)
93 {CirculoType::kCirculo7, 0x11, 0x05},
94 {CirculoType::kCirculo7Smm, 0x11, 0x05},
95 {CirculoType::kCirculo9, 0x11, 0x06},
96 {CirculoType::kCirculo9Smm, 0x11, 0x06},
97 {CirculoType::kCirculo18Bit, 0x11, 0x04},
98
99 // Register 0x12 = 0x00 (default=0x00)
100 {CirculoType::kUnspecified, 0x12, 0x00},
101
102 // Register 0x13/0x14 = 0xFF/0x0F (default=0xFF/0x0F)
103 {CirculoType::kUnspecified, 0x13, 0xFF},
104 {CirculoType::kUnspecified, 0x14, 0x0F},
105
106 // Register 0x15 = 0x13 (default=0x13)
107 {CirculoType::kUnspecified, 0x15, 0x13},
108
109 // Register 0x16 = 0x10 (default=0x10)
110 {CirculoType::kUnspecified, 0x16, 0x10},
111
112 // Register 0x17 = 0x02 (default=0x02)
113 {CirculoType::kUnspecified, 0x17, 0x02},
114
115 // Register 0x18 = 0x00 (default=0x00)
116 {CirculoType::kUnspecified, 0x18, 0x00},
117
118 // Write the iC-MU configuration to EEPROM
119 {CirculoType::kUnspecified, 0x75, 0x01}};
120
121 // Multiturn - Stage 1
122 // Tuple: {Circulo type that uses the register value, address, value}
123 static inline const std::list<std::tuple<CirculoType, uint8_t, uint8_t>>
124 multiturn_address_value_stage_1_list_ = {
126
127 // Register 0x00 = 0x00 (default=0x00)
128 {CirculoType::kUnspecified, 0x00, 0x00},
129
130 // Register 0x01 = CALIBRATION (default=0x00)
131 // Register 0x02 = CALIBRATION (default=0x00)
132 // Register 0x03 = CALIBRATION (default=0x00)
133 // Register 0x04 = CALIBRATION (default=0x00)
134 // Register 0x05 = 0x88 (default=0x88)
135 {CirculoType::kUnspecified, 0x05, 0x88},
136
137 // Register 0x06 = 0x00 (default=0x00)
138 {CirculoType::kUnspecified, 0x06, 0x00},
139
140 // Register 0x07 = CALIBRATION (default=0x00)
141 // Register 0x08 = CALIBRATION (default=0x00)
142 // Register 0x09 = CALIBRATION (default=0x00)
143 // Register 0x0A = CALIBRATION (default=0x00)
144 // Register 0x0B = 0x02 (default=0x02)
145 {CirculoType::kCirculo7, 0x0B, 0x02},
146 {CirculoType::kCirculo7Smm, 0x0B, 0x52},
147 {CirculoType::kCirculo9, 0x0B, 0x02},
148 {CirculoType::kCirculo9Smm, 0x0B, 0x52},
149 {CirculoType::kCirculo18Bit, 0x0B, 0x52},
150
151 // Register 0x0C = 0x6C (Mask AN_MAX error; default=0x00)
152 {CirculoType::kUnspecified, 0x0C, 0x6C},
153
154 // Register 0x0D = 0xC0 (default=0x00)
155 {CirculoType::kUnspecified, 0x0D, 0xC0},
156
157 // Register 0x0E = 0x44 (default=0x06)
158 {CirculoType::kUnspecified, 0x0E, 0x44},
159
160 // Register 0x0F = MPC, the master period count: 0x04 for 16 pole
161 // pairs, 0x05 for 32, 0x06 for 64 (default=0x05)
162 {CirculoType::kCirculo7, 0x0F, 0x05},
163 {CirculoType::kCirculo7Smm, 0x0F, 0x05},
164 {CirculoType::kCirculo9, 0x0F, 0x06},
165 {CirculoType::kCirculo9Smm, 0x0F, 0x06},
166 {CirculoType::kCirculo18Bit, 0x0F, 0x04},
167
168 // Register 0x10 = 0x6F (default=0x00)
169 {CirculoType::kUnspecified, 0x10, 0x6F},
170
171 // Register 0x11 = OUT_MSB over the singleturn bits plus the 18
172 // multiturn bits, so bit 13 + the value is the top bit of the whole
173 // word. 18 + 18 bits is 0x16, 19 + 18 is 0x17, 20 + 18 is 0x18.
174 // (default=0xA5)
175 {CirculoType::kCirculo7, 0x11, 0x17},
176 {CirculoType::kCirculo7Smm, 0x11, 0x17},
177 {CirculoType::kCirculo9, 0x11, 0x18},
178 {CirculoType::kCirculo9Smm, 0x11, 0x18},
179 {CirculoType::kCirculo18Bit, 0x11, 0x16},
180
181 // Register 0x12 = 0x00 (default=0x00)
182 {CirculoType::kUnspecified, 0x12, 0x00},
183
184 // Register 0x13/0x14 = 0xFF/0x0F (default=0xFF/0x0F)
185 {CirculoType::kUnspecified, 0x13, 0xFF},
186 {CirculoType::kUnspecified, 0x14, 0x0F},
187
188 // Register 0x15 = 0x13 (default=0x13)
189 {CirculoType::kUnspecified, 0x15, 0x13},
190
191 // Register 0x16 = 0x10 (default=0x10)
192 {CirculoType::kUnspecified, 0x16, 0x10},
193
194 // Register 0x17 = 0x02 (default=0x02)
195 {CirculoType::kUnspecified, 0x17, 0x02},
196
197 // Register 0x18 = 0x00 (default=0x00)
198 {CirculoType::kUnspecified, 0x18, 0x00},
199
201
202 // Configure I2C_DEVID (0x5E) to WRITE_EEPROM (0xA0). This tells the
203 // iC-MU that we want to use the I2C communication to write to the
204 // EEPROM.
205 {CirculoType::kUnspecified, 0x5E, 0xA0},
206
207 // Set the I2C_RAM_START (0x5C) to USER_EXCHANGE_REGISTERS_1 (0x60).
208 // This tells the iC-MU that the first value that he should write to
209 // the EEPROM is in the iC-MU RAM address 0x60. These
210 // USER_EXCHANGE_REGISTERS are used exclusively to store values that
211 // should be written to an external device via I2C (like the EEPROM
212 // or the iC-PVL).
213 {CirculoType::kUnspecified, 0x5C, 0x60},
214
215 // Set I2C_DEV_START (0x5B) to 0x40. This sets the first EEPROM
216 // address that should be written. Basically this means that the
217 // value written in the iC-MU RAM address 0x60 will be written to
218 // the EEPROM address 0x40. The reason why we start at EEPROM
219 // address 0x40 is that the EEPROM range 0x00-0x3F is used for the
220 // iC-MU configuration, and the iC-PVL configuration is stored in
221 // the range 0x40-0x4C, storing the value of the iC-PVL register
222 // 0x00 in EEPROM address 0x40, iC-PVL register 0x01 in EEPROM
223 // address 0x41, and so on.
224 {CirculoType::kUnspecified, 0x5B, 0x40},
225
226 // Set I2C_RAM_END (0x5D) to 0x6C. This tells the iC-MU when to stop
227 // writing the values in the USER_EXCHANGE_REGISTERS to the EEPROM.
228 // Since we want to write 13 values (EEPROM address 0x40 to address
229 // 0x4C), we need to use USER_EXCHANGE_REGISTERS_1 (0x60) to
230 // USER_EXCHANGE_REGISTERS_13 (0x6C).
231 {CirculoType::kUnspecified, 0x5D, 0x6C}};
232
233 // Multiturn - Stage 2 - CRC
234 // Tuple: {Circulo type that uses the register value, encoder position,
235 // address, value}
236 static inline const std::list<
237 std::tuple<CirculoType, EncoderLocation, uint8_t, uint8_t>>
238 multiturn_address_value_stage_2_list_ = {
239 // iC-PVL register 0x00 = 0x28 (default=0x00)
241 0x28},
242
243 // iC-PVL register 0x01 = 0x09 (default=0x00)
245 0x09},
246
247 // iC-PVL register 0x02 = PCR, the period counts per revolution less
248 // one: 0x0F for 16 pole pairs, 0x1F for 32, 0x3F for 64
249 // (default=0x00)
252 0x1F},
255 0x3F},
257 0x0F},
258
259 // iC-PVL register 0x03 = {Motor shaft: 0x5D, Driving shaft: 0x68}
260 // (default=0x00)
263 0x68},
264
265 // iC-PVL register 0x04 = 0x50 (default=0x00)
267 0x50},
268
269 // iC-PVL register 0x05 = 0x30 (default=0x00)
271
272 // iC-PVL register 0x06 - calculated CRC value of the previous
273 // registers: 0x00-0x05 (default=0x00)
274 };
275
276 // Multiturn - Stage 3
277 // Tuple: {address, value}
278 static inline const std::list<std::tuple<uint8_t, uint8_t>>
279 multiturn_address_value_stage_3_list_ = {
280 // iC-PVL registers 0x07-0x0B = 0x0000000000 (default=0x00)
281 {0x67, 0x00}, {0x68, 0x00}, {0x69, 0x00}, {0x6A, 0x00}, {0x6B, 0x00},
282
283 // iC-PVL register 0x0C - calculated CRC value of the previous
284 // registers: 0x07-0x0B (default=0x00)
285 };
286
287 // Multiturn - Stage 4 - Write REBOOT to iC-PVL. This will force iC-PVL to
288 // re-read the EEPROM and load those values in the RAM.
289 static inline const std::list<std::tuple<uint8_t, uint8_t>>
290 multiturn_address_value_stage_4_list_ = {
291 // Configure I2C_DEVID (0x5E) to WRITE_ICPVL (0xC2). This tells the
292 // iC-MU that we want to use the I2C communication to write to the
293 // iC-PVL.
294 {0x5E, 0xC2},
295
296 // Set the I2C_RAM_START (0x5C) to USER_EXCHANGE_REGISTERS_1 (0x60).
297 // This tells the iC-MU that the first value that he should write to
298 // the iC-PVL is in the iC-MU RAM address 0x60. These
299 // USER_EXCHANGE_REGISTERS are used exclusively to store values that
300 // should be written to an external device via I2C (like the EEPROM
301 // or the iC-PVL).
302 {0x5C, 0x60},
303
304 // Set I2C_DEV_START (0x5B) to 0x11. This sets the first iC-PVL
305 // register that should be written. Basically this means that the
306 // value written in the iC-MU RAM address 0x60 will be written to
307 // the iC-PVL register 0x11.
308 {0x5B, 0x11},
309
310 // Set I2C_RAM_END (0x5D) to 0x60. This tells the iC-MU when to stop
311 // writing the values in the USER_EXCHANGE_REGISTERS to the iC-PVL.
312 // Since we want to only write one value (iC-PVL address 0x11), we
313 // need to use only USER_EXCHANGE_REGISTERS_1 (0x60), so both
314 // I2C_RAM_END and I2C_RAM_START are set to that value.
315 {0x5D, 0x60},
316
317 // Now we can write each of the values we want to write to the
318 // iC-PVL in the USER_EXCHANGE_REGISTERS. iC-PVL register 0x11 =
319 // 0x03 (default=0x00). This will write REBOOT to the iC-PVL CMD
320 // register.
321 {0x60, 0x03},
322
323 // Set CMD_MU (0x75) to I2C_COM (0x0A). This will start the I2C
324 // communication with all the parameters that were configured above,
325 // effectively writing the REBOOT command to the iC-PVL.
326 {0x75, 0x0A}};
327
328 // Multiturn - Stage 5 - Reset iC-PVL errors (SCLR) and re-calculate
329 // absolute position (ABS_RESET)
330 static inline const std::list<std::tuple<uint8_t, uint8_t>>
331 multiturn_address_value_stage_5_list_ = {
332 // Configure I2C_DEVID (0x5E) to WRITE_ICPVL (0xC2). This tells the
333 // iC-MU that we want to use the I2C communication to write to the
334 // iC-PVL.
335 {0x5E, 0xC2},
336
337 // Set the I2C_RAM_START (0x5C) to USER_EXCHANGE_REGISTERS_1 (0x60).
338 // This tells the iC-MU that the first value that he should write to
339 // the iC-PVL is in the iC-MU RAM address 0x60. These
340 // USER_EXCHANGE_REGISTERS are used exclusively to store values that
341 // should be written to an external device via I2C (like the EEPROM
342 // or the iC-PVL).
343 {0x5C, 0x60},
344
345 // Set I2C_DEV_START (0x5B) to 0x11. This sets the first iC-PVL
346 // register that should be written. Basically this means that the
347 // value written in the iC-MU RAM address 0x60 will be written to
348 // the iC-PVL register 0x11.
349 {0x5B, 0x11},
350
351 // Set I2C_RAM_END (0x5D) to 0x60. This tells the iC-MU when to stop
352 // writing the values in the USER_EXCHANGE_REGISTERS to the iC-PVL.
353 // Since we want to only write one value (iC-PVL address 0x11), we
354 // need to use only USER_EXCHANGE_REGISTERS_1 (0x60), so both
355 // I2C_RAM_END and I2C_RAM_START are set to that value.
356 {0x5D, 0x60},
357
358 // Now we can write each of the values we want to write to the
359 // iC-PVL in the USER_EXCHANGE_REGISTERS.
360
361 // iC-PVL register 0x11 = 0x05 (default=0x00). This will write SCLR
362 // to the iC-PVL CMD register.
363 {0x60, 0x05},
364
365 // Set CMD_MU (0x75) to I2C_COM (0x0A). This will start the I2C
366 // communication with all the parameters
367 // that were configured above, effectively writing the SCLR command
368 // to the iC-PVL.
369 {0x75, 0x0A},
370
371 // Send ABS_RESET command to iC-MU
372 {0x75, 0x03}};
373
374 // Stage 6
375 static inline const std::list<std::tuple<uint8_t, uint8_t>>
376 multiturn_address_value_stage_6_list_ = {
377 // Change value of I2C_POS to 1 to be able to read the sync bits
378 // iC-PVL register 0x05 = 0xB0 (value before = 0x30)
379 // Configure I2C_DEVID (0x5E) to WRITE_ICPVL (0xC2). This tells the
380 // iC-MU that we want to use the I2C communication to write to the
381 // iC-PVL.
382 {0x5E, 0xC2},
383
384 // Set the I2C_RAM_START (0x5C) to USER_EXCHANGE_REGISTERS_1 (0x60).
385 // This tells the iC-MU that the first value that he should write to
386 // the iC-PVL is in the iC-MU RAM address 0x60. These
387 // USER_EXCHANGE_REGISTERS are used exclusively to store values that
388 // should be written to an external device via I2C (like the EEPROM
389 // or the iC-PVL).
390 {0x5C, 0x60},
391
392 // Set I2C_DEV_START (0x5B) to 0x05. This sets the first iC-PVL
393 // register that should be written. Basically this means that the
394 // value written in the iC-MU RAM address 0x60 will be written to
395 // the iC-PVL register 0x05.
396 {0x5B, 0x05},
397
398 // Set I2C_RAM_END (0x5D) to 0x60. This tells the iC-MU when to stop
399 // writing the values in the USER_EXCHANGE_REGISTERS to the iC-PVL.
400 // Since we want to only write one value (iC-PVL address 0x05), we
401 // need to use only USER_EXCHANGE_REGISTERS_1 (0x60), so both
402 // I2C_RAM_END and I2C_RAM_START are set to that value.
403 {0x5D, 0x60},
404
405 // Now we can write each of the values we want to write to the
406 // iC-PVL in the USER_EXCHANGE_REGISTERS.
407
408 // iC-PVL register 0x05 = 0xB0 (default=0x00). This will write 0xB0
409 // to the iC-PVL 0x05 register.
410 {0x60, 0xB0},
411
412 // Set CMD_MU (0x75) to I2C_COM (0x0A). This will start the I2C
413 // communication with all the parameters that were configured above,
414 // effectively writing the SCLR command to the iC-PVL.
415 {0x75, 0x0A},
416
417 // Read iC-PVL sync bits (iC-PVL address 0x0D, bit 2:0)
418
419 // Configure I2C_DEVID (0x5E) to READ_ICPVL (0xC3). This tells the
420 // iC-MU that we want to use the I2C communication to read the
421 // iC-PVL.
422 {0x5E, 0xC3},
423
424 // Set the I2C_RAM_START (0x5C) to USER_EXCHANGE_REGISTERS_1 (0x60).
425 // This tells the iC-MU that the first value that he should write to
426 // the iC-PVL is in the iC-MU RAM address 0x60. These
427 // USER_EXCHANGE_REGISTERS are used exclusively to store values that
428 // should be written to an external device via I2C (like the EEPROM
429 // or the iC-PVL).
430 {0x5C, 0x60},
431
432 // Set I2C_DEV_START (0x5B) to 0x0D. This sets the first iC-PVL
433 // register that should be read. Basically this means that the value
434 // read in the iC-PVL register 0x0D will be written in the iC-MU RAM
435 // address 0x60.
436 {0x5B, 0x0D},
437
438 // Set I2C_RAM_END (0x5D) to 0x60. This tells the iC-MU when to stop
439 // reading the values and writing them to the
440 // USER_EXCHANGE_REGISTERS to the iC-PVL. Since we want to only read
441 // one value (iC-PVL address 0x0D), we need to use only
442 // USER_EXCHANGE_REGISTERS_1 (0x60), so both I2C_RAM_END and
443 // I2C_RAM_START are set to that value.
444 {0x5D, 0x60},
445
446 // Set CMD_MU (0x75) to I2C_COM (0x0A). This will start the I2C
447 // communication with all the parameters that were configured above,
448 // effectively reading the iC-PVL register 0x0D to the iC-MU
449 // register 0x60.
450 {0x75, 0x0A}};
451
452 // Stage 7
453 static inline const std::list<std::tuple<uint8_t, uint8_t>>
454 multiturn_address_value_stage_7_list_ = {
455 // Change value of I2C_POS back to 0
456
457 // iC-PVL register 0x05 = 0x30
458 // Configure I2C_DEVID (0x5E) to WRITE_ICPVL (0xC2). This tells the
459 // iC-MU that we want to use the I2C communication to write to the
460 // iC-PVL.
461 {0x5E, 0xC2},
462
463 // Set the I2C_RAM_START (0x5C) to USER_EXCHANGE_REGISTERS_1 (0x60).
464 // This tells the iC-MU that the first value that he should write to
465 // the iC-PVL is in the iC-MU RAM address 0x60. These
466 // USER_EXCHANGE_REGISTERS are used exclusively to store values that
467 // should be written to an external device via I2C (like the EEPROM
468 // or the iC-PVL).
469 {0x5C, 0x60},
470
471 // Set I2C_DEV_START (0x5B) to 0x05. This sets the first iC-PVL
472 // register that should be written. Basically this means that the
473 // value written in the iC-MU RAM address 0x60 will be written to
474 // the iC-PVL register 0x05.
475 {0x5B, 0x05},
476
477 // Set I2C_RAM_END (0x5D) to 0x60. This tells the iC-MU when to stop
478 // writing the values in the USER_EXCHANGE_REGISTERS to the iC-PVL.
479 // Since we want to only write one value (iC-PVL address 0x05), we
480 // need to use only USER_EXCHANGE_REGISTERS_1 (0x60), so both
481 // I2C_RAM_END and I2C_RAM_START are set to that value.
482 {0x5D, 0x60},
483
484 // Now we can write each of the values we want to write to the
485 // iC-PVL in the USER_EXCHANGE_REGISTERS.
486
487 // iC-PVL register 0x05 = 0x30 (default=0x00). This will write 0x30
488 // to the iC-PVL 0x05 register.
489 {0x60, 0x30},
490
491 // Set CMD_MU (0x75) to I2C_COM (0x0A). This will start the I2C
492 // communication with all the parameters that were configured above,
493 // effectively writing the SCLR command to the iC-PVL.
494 {0x75, 0x0A}};
495
496 MotionMasterError configure_singleturn();
497
498 MotionMasterError configure_multiturn();
499
500 void add_action_to_progress(uint32_t total_actions,
501 uint32_t actions_to_add = 1);
502
503 void sleep_with_progress(uint32_t milliseconds, uint32_t total_actions);
504
505 MotionMasterError ignore_biss_status_bits(bool ignore);
506
507 MotionMasterError write_register(uint8_t address, uint8_t value);
508
509 static uint8_t crc(const std::vector<uint8_t>& data);
510};
CirculoType
Definition util.h:57
@ kCirculo7
Definition util.h:59
@ kCirculo9Smm
Definition util.h:62
@ kUnspecified
Definition util.h:58
@ kCirculo7Smm
Definition util.h:60
@ kCirculo9
Definition util.h:61
@ kCirculo18Bit
Definition util.h:65
EncoderLocation
Definition util.h:80
@ kMotorShaft
Definition util.h:80
@ kUnspecified
Definition util.h:80
@ kDrivingShaft
Definition util.h:80
Definition cia402_drive.h:120
MotionMasterError start()
Definition circulo_encoder_configuration.cc:29
CirculoEncoderConfiguration(Cia402Drive &cia402_drive, uint8_t encoder_ordinal, uint8_t battery_mode_max_acceleration, uint32_t external_circulo_type, const std::function< void()> &started_callback={}, const std::function< void(uint8_t)> &progress_callback={})
Definition circulo_encoder_configuration.cc:17
Definition motion_master_error.h:6
uint8_t * value
Definition co_dictionary.h:9