Loading...
Searching...
No Matches
protocol.h File Reference
#include <stdint.h>
Include dependency graph for protocol.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define PROTOCOL_VERSION   4
 
#define UD_COMMAND_MODE   0
 
#define UD_COMMAND_POS_1   1
 
#define UD_COMMAND_POS_2   3
 
#define UD_COMMAND_VEL_1   5
 
#define UD_COMMAND_VEL_2   6
 
#define UD_COMMAND_IQ_1   7
 
#define UD_COMMAND_IQ_2   8
 
#define UD_COMMAND_KP_1   9
 
#define UD_COMMAND_KP_2   10
 
#define UD_COMMAND_KD_1   11
 
#define UD_COMMAND_KD_2   12
 
#define UD_COMMAND_ISAT_12   13
 
#define UD_COMMAND_MODE_ES   (1<<15)
 Enable system.
 
#define UD_COMMAND_MODE_EM1   (1<<14)
 Enable motor 1.
 
#define UD_COMMAND_MODE_EM2   (1<<13)
 Enable motor 2.
 
#define UD_COMMAND_MODE_EPRE   (1<<12)
 Raise an error if position rollover.
 
#define UD_COMMAND_MODE_EI1OC   (1<<11)
 Enable Index Offset Compensation for Motor 1.
 
#define UD_COMMAND_MODE_EI2OC   (1<<10)
 Enable Index Offset Compensation for Motor 2.
 
#define UD_COMMAND_MODE_TIMEOUT   (0xFF<<0)
 Disable system if no valid SPI packet is received during this time [in ms]. (0 = disabled)
 
#define UD_QN_POS   24
 
#define UD_QN_VEL   11
 
#define UD_QN_IQ   10
 
#define UD_QN_ISAT   3
 
#define UD_QN_CR   15
 
#define UD_QN_ADC   16
 
#define UD_QN_KP   11
 
#define UD_QN_KD   10
 
#define IMU_QN_ACC   11
 
#define IMU_QN_GYR   11
 
#define IMU_QN_EF   13
 
#define UD_SENSOR_STATUS   0
 
#define UD_SENSOR_TIMESTAMP   1
 
#define UD_SENSOR_POS_1   2
 
#define UD_SENSOR_POS_2   4
 
#define UD_SENSOR_VEL_1   6
 
#define UD_SENSOR_VEL_2   7
 
#define UD_SENSOR_IQ_1   8
 
#define UD_SENSOR_IQ_2   9
 
#define UD_SENSOR_CR_1   10
 
#define UD_SENSOR_CR_2   11
 
#define UD_SENSOR_ADC_1   12
 
#define UD_SENSOR_ADC_2   13
 
#define UD_SENSOR_STATUS_SE   (1<<15)
 System is enabled.
 
#define UD_SENSOR_STATUS_M1E   (1<<14)
 Motor 1 is enabled.
 
#define UD_SENSOR_STATUS_M1R   (1<<13)
 Motor 1 is ready.
 
#define UD_SENSOR_STATUS_M2E   (1<<12)
 Motor 2 is enabled.
 
#define UD_SENSOR_STATUS_M2R   (1<<11)
 Motor 2 is ready.
 
#define UD_SENSOR_STATUS_IDX1D   (1<<10)
 Encoder 1 index has been detected.
 
#define UD_SENSOR_STATUS_IDX2D   (1<<9)
 Encoder 2 index has been detected.
 
#define UD_SENSOR_STATUS_IDX1T   (1<<8)
 Flips each time encoder 1 index is detected.
 
#define UD_SENSOR_STATUS_IDX2T   (1<<7)
 Flips each time encoder 1 index is detected.
 
#define UD_SENSOR_STATUS_ERROR   (0xF<<0)
 Error code.
 
#define UD_SENSOR_STATUS_ERROR_NO_ERROR   0
 No error.
 
#define UD_SENSOR_STATUS_ERROR_ENCODER1   1
 Encoder 1 error too high.
 
#define UD_SENSOR_STATUS_ERROR_SPI_RECV_TIMEOUT   2
 Timeout for receiving current references exceeded.
 
#define UD_SENSOR_STATUS_ERROR_CRIT_TEMP   3
 Motor temperature reached critical value.
 
#define UD_SENSOR_STATUS_ERROR_POSCONV   4
 Some error in the SpinTAC Position Convert module.
 
#define UD_SENSOR_STATUS_ERROR_POS_ROLLOVER   5
 Position Rollover occured.
 
#define UD_SENSOR_STATUS_ERROR_ENCODER2   6
 Encoder 2 error too high.
 
#define UD_SENSOR_STATUS_ERROR_OTHER   7
 Some other error.
 
#define UD_LENGTH   14
 UD packets length in word (16 bits)
 
#define SUB_REG_u16(p_packet, pos)   (*((uint16_t *) ((p_packet) + (pos))))
 
#define SUB_REG_u32(p_packet, pos)   (*((uint32_t *) ((p_packet) + (pos))))
 
#define SUB_REG_16(p_packet, pos)   (*((int16_t *) ((p_packet) + (pos))))
 
#define SUB_REG_32(p_packet, pos)   (*((int32_t *) ((p_packet) + (pos))))
 
#define D32Q24_TO_D16QN(a, n)   ((a)>>(24-(n))&0xFFFF)
 
#define D32Q24_TO_D8QN(a, n)   ((a)>>(24-(n))&0xFF)
 
#define uD16QN_TO_D32Q24(a, n)   (((uint32_t)(a))<<(24-(n)))
 
#define uD8QN_TO_D32Q24(a, n)   (((uint32_t)(a))<<(24-(n)))
 
#define D16QN_TO_D32Q24(a, n)   (((int32_t)(a))<<(24-(n)))
 
#define D8QN_TO_D32Q24(a, n)   (((int32_t)(a))<<(24-(n)))
 
#define D32QN_TO_FLOAT(a, n)   ((float)(a)) / (1<<(n))
 
#define D16QN_TO_FLOAT(a, n)   ((float)(a)) / (1<<(n))
 
#define D8QN_TO_FLOAT(a, n)   ((float)(a)) / (1<<(n))
 
#define FLOAT_TO_uD32QN(a, n)   ((uint32_t) std::min(std::max(((a) * (1<<(n))), 0.0), 4294967295.0))
 
#define FLOAT_TO_uD16QN(a, n)   ((uint16_t) std::min(std::max(((a) * (1<<(n))), 0.0), 65535.0))
 
#define FLOAT_TO_uD8QN(a, n)   ((uint8_t) std::min(std::max(((a) * (1<<(n))), 0.0), 255.0))
 
#define FLOAT_TO_D32QN(a, n)   ((int32_t) std::min(std::max(((a) * (1<<(n))), -2147483647.0), 2147483647.0))
 
#define FLOAT_TO_D16QN(a, n)   ((int16_t) std::min(std::max((a) * (1<<(n)), -32767.0), 32767.0))
 
#define FLOAT_TO_D8QN(a, n)   ((int8_t) std::min(std::max(((a) * (1<<(n))), -127.0), +127.0))
 

Macro Definition Documentation

◆ D16QN_TO_D32Q24

#define D16QN_TO_D32Q24 (   a,
  n 
)    (((int32_t)(a))<<(24-(n)))

◆ D16QN_TO_FLOAT

#define D16QN_TO_FLOAT (   a,
  n 
)    ((float)(a)) / (1<<(n))

◆ D32Q24_TO_D16QN

#define D32Q24_TO_D16QN (   a,
  n 
)    ((a)>>(24-(n))&0xFFFF)

◆ D32Q24_TO_D8QN

#define D32Q24_TO_D8QN (   a,
  n 
)    ((a)>>(24-(n))&0xFF)

◆ D32QN_TO_FLOAT

#define D32QN_TO_FLOAT (   a,
  n 
)    ((float)(a)) / (1<<(n))

◆ D8QN_TO_D32Q24

#define D8QN_TO_D32Q24 (   a,
  n 
)    (((int32_t)(a))<<(24-(n)))

◆ D8QN_TO_FLOAT

#define D8QN_TO_FLOAT (   a,
  n 
)    ((float)(a)) / (1<<(n))

◆ FLOAT_TO_D16QN

#define FLOAT_TO_D16QN (   a,
  n 
)    ((int16_t) std::min(std::max((a) * (1<<(n)), -32767.0), 32767.0))

◆ FLOAT_TO_D32QN

#define FLOAT_TO_D32QN (   a,
  n 
)    ((int32_t) std::min(std::max(((a) * (1<<(n))), -2147483647.0), 2147483647.0))

◆ FLOAT_TO_D8QN

#define FLOAT_TO_D8QN (   a,
  n 
)    ((int8_t) std::min(std::max(((a) * (1<<(n))), -127.0), +127.0))

◆ FLOAT_TO_uD16QN

#define FLOAT_TO_uD16QN (   a,
  n 
)    ((uint16_t) std::min(std::max(((a) * (1<<(n))), 0.0), 65535.0))

◆ FLOAT_TO_uD32QN

#define FLOAT_TO_uD32QN (   a,
  n 
)    ((uint32_t) std::min(std::max(((a) * (1<<(n))), 0.0), 4294967295.0))

◆ FLOAT_TO_uD8QN

#define FLOAT_TO_uD8QN (   a,
  n 
)    ((uint8_t) std::min(std::max(((a) * (1<<(n))), 0.0), 255.0))

◆ IMU_QN_ACC

#define IMU_QN_ACC   11

◆ IMU_QN_EF

#define IMU_QN_EF   13

◆ IMU_QN_GYR

#define IMU_QN_GYR   11

◆ PROTOCOL_VERSION

#define PROTOCOL_VERSION   4

◆ SUB_REG_16

#define SUB_REG_16 (   p_packet,
  pos 
)    (*((int16_t *) ((p_packet) + (pos))))

◆ SUB_REG_32

#define SUB_REG_32 (   p_packet,
  pos 
)    (*((int32_t *) ((p_packet) + (pos))))

◆ SUB_REG_u16

#define SUB_REG_u16 (   p_packet,
  pos 
)    (*((uint16_t *) ((p_packet) + (pos))))

◆ SUB_REG_u32

#define SUB_REG_u32 (   p_packet,
  pos 
)    (*((uint32_t *) ((p_packet) + (pos))))

◆ uD16QN_TO_D32Q24

#define uD16QN_TO_D32Q24 (   a,
  n 
)    (((uint32_t)(a))<<(24-(n)))

◆ uD8QN_TO_D32Q24

#define uD8QN_TO_D32Q24 (   a,
  n 
)    (((uint32_t)(a))<<(24-(n)))

◆ UD_COMMAND_IQ_1

#define UD_COMMAND_IQ_1   7

◆ UD_COMMAND_IQ_2

#define UD_COMMAND_IQ_2   8

◆ UD_COMMAND_ISAT_12

#define UD_COMMAND_ISAT_12   13

◆ UD_COMMAND_KD_1

#define UD_COMMAND_KD_1   11

◆ UD_COMMAND_KD_2

#define UD_COMMAND_KD_2   12

◆ UD_COMMAND_KP_1

#define UD_COMMAND_KP_1   9

◆ UD_COMMAND_KP_2

#define UD_COMMAND_KP_2   10

◆ UD_COMMAND_MODE

#define UD_COMMAND_MODE   0

◆ UD_COMMAND_MODE_EI1OC

#define UD_COMMAND_MODE_EI1OC   (1<<11)

Enable Index Offset Compensation for Motor 1.

◆ UD_COMMAND_MODE_EI2OC

#define UD_COMMAND_MODE_EI2OC   (1<<10)

Enable Index Offset Compensation for Motor 2.

◆ UD_COMMAND_MODE_EM1

#define UD_COMMAND_MODE_EM1   (1<<14)

Enable motor 1.

◆ UD_COMMAND_MODE_EM2

#define UD_COMMAND_MODE_EM2   (1<<13)

Enable motor 2.

◆ UD_COMMAND_MODE_EPRE

#define UD_COMMAND_MODE_EPRE   (1<<12)

Raise an error if position rollover.

◆ UD_COMMAND_MODE_ES

#define UD_COMMAND_MODE_ES   (1<<15)

Enable system.

◆ UD_COMMAND_MODE_TIMEOUT

#define UD_COMMAND_MODE_TIMEOUT   (0xFF<<0)

Disable system if no valid SPI packet is received during this time [in ms]. (0 = disabled)

◆ UD_COMMAND_POS_1

#define UD_COMMAND_POS_1   1

◆ UD_COMMAND_POS_2

#define UD_COMMAND_POS_2   3

◆ UD_COMMAND_VEL_1

#define UD_COMMAND_VEL_1   5

◆ UD_COMMAND_VEL_2

#define UD_COMMAND_VEL_2   6

◆ UD_LENGTH

#define UD_LENGTH   14

UD packets length in word (16 bits)

◆ UD_QN_ADC

#define UD_QN_ADC   16

◆ UD_QN_CR

#define UD_QN_CR   15

◆ UD_QN_IQ

#define UD_QN_IQ   10

◆ UD_QN_ISAT

#define UD_QN_ISAT   3

◆ UD_QN_KD

#define UD_QN_KD   10

◆ UD_QN_KP

#define UD_QN_KP   11

◆ UD_QN_POS

#define UD_QN_POS   24

◆ UD_QN_VEL

#define UD_QN_VEL   11

◆ UD_SENSOR_ADC_1

#define UD_SENSOR_ADC_1   12

◆ UD_SENSOR_ADC_2

#define UD_SENSOR_ADC_2   13

◆ UD_SENSOR_CR_1

#define UD_SENSOR_CR_1   10

◆ UD_SENSOR_CR_2

#define UD_SENSOR_CR_2   11

◆ UD_SENSOR_IQ_1

#define UD_SENSOR_IQ_1   8

◆ UD_SENSOR_IQ_2

#define UD_SENSOR_IQ_2   9

◆ UD_SENSOR_POS_1

#define UD_SENSOR_POS_1   2

◆ UD_SENSOR_POS_2

#define UD_SENSOR_POS_2   4

◆ UD_SENSOR_STATUS

#define UD_SENSOR_STATUS   0

◆ UD_SENSOR_STATUS_ERROR

#define UD_SENSOR_STATUS_ERROR   (0xF<<0)

Error code.

◆ UD_SENSOR_STATUS_ERROR_CRIT_TEMP

#define UD_SENSOR_STATUS_ERROR_CRIT_TEMP   3

Motor temperature reached critical value.

Note
This is currently unused as no temperature sensing is done.

◆ UD_SENSOR_STATUS_ERROR_ENCODER1

#define UD_SENSOR_STATUS_ERROR_ENCODER1   1

Encoder 1 error too high.

◆ UD_SENSOR_STATUS_ERROR_ENCODER2

#define UD_SENSOR_STATUS_ERROR_ENCODER2   6

Encoder 2 error too high.

◆ UD_SENSOR_STATUS_ERROR_NO_ERROR

#define UD_SENSOR_STATUS_ERROR_NO_ERROR   0

No error.

◆ UD_SENSOR_STATUS_ERROR_OTHER

#define UD_SENSOR_STATUS_ERROR_OTHER   7

Some other error.

◆ UD_SENSOR_STATUS_ERROR_POS_ROLLOVER

#define UD_SENSOR_STATUS_ERROR_POS_ROLLOVER   5

Position Rollover occured.

◆ UD_SENSOR_STATUS_ERROR_POSCONV

#define UD_SENSOR_STATUS_ERROR_POSCONV   4

Some error in the SpinTAC Position Convert module.

◆ UD_SENSOR_STATUS_ERROR_SPI_RECV_TIMEOUT

#define UD_SENSOR_STATUS_ERROR_SPI_RECV_TIMEOUT   2

Timeout for receiving current references exceeded.

◆ UD_SENSOR_STATUS_IDX1D

#define UD_SENSOR_STATUS_IDX1D   (1<<10)

Encoder 1 index has been detected.

◆ UD_SENSOR_STATUS_IDX1T

#define UD_SENSOR_STATUS_IDX1T   (1<<8)

Flips each time encoder 1 index is detected.

◆ UD_SENSOR_STATUS_IDX2D

#define UD_SENSOR_STATUS_IDX2D   (1<<9)

Encoder 2 index has been detected.

◆ UD_SENSOR_STATUS_IDX2T

#define UD_SENSOR_STATUS_IDX2T   (1<<7)

Flips each time encoder 1 index is detected.

◆ UD_SENSOR_STATUS_M1E

#define UD_SENSOR_STATUS_M1E   (1<<14)

Motor 1 is enabled.

◆ UD_SENSOR_STATUS_M1R

#define UD_SENSOR_STATUS_M1R   (1<<13)

Motor 1 is ready.

◆ UD_SENSOR_STATUS_M2E

#define UD_SENSOR_STATUS_M2E   (1<<12)

Motor 2 is enabled.

◆ UD_SENSOR_STATUS_M2R

#define UD_SENSOR_STATUS_M2R   (1<<11)

Motor 2 is ready.

◆ UD_SENSOR_STATUS_SE

#define UD_SENSOR_STATUS_SE   (1<<15)

System is enabled.

◆ UD_SENSOR_TIMESTAMP

#define UD_SENSOR_TIMESTAMP   1

◆ UD_SENSOR_VEL_1

#define UD_SENSOR_VEL_1   6

◆ UD_SENSOR_VEL_2

#define UD_SENSOR_VEL_2   7