Skip to content

Commit 9b7a755

Browse files
author
Richard Unger
committed
fixing bugs in new IO code
1 parent 00cfedf commit 9b7a755

File tree

5 files changed

+35
-6
lines changed

5 files changed

+35
-6
lines changed

src/comms/SimpleFOCRegisters.cpp

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ bool SimpleFOCRegisters::registerToComms(RegisterIO& comms, uint8_t reg, FOCMoto
3434
break;
3535
case SimpleFOCRegister::REG_POSITION:
3636
if (motor->sensor) {
37-
comms << (uint32_t)motor->sensor->getFullRotations();
37+
comms << (uint32_t)motor->sensor->getFullRotations(); // TODO fix me!
3838
comms << motor->sensor->getMechanicalAngle();
3939
}
4040
else {
@@ -51,6 +51,24 @@ bool SimpleFOCRegisters::registerToComms(RegisterIO& comms, uint8_t reg, FOCMoto
5151
else
5252
comms << motor->shaft_angle;
5353
break;
54+
case SimpleFOCRegister::REG_SENSOR_MECHANICAL_ANGLE:
55+
if (motor->sensor)
56+
comms << motor->sensor->getMechanicalAngle(); // stored angle
57+
else
58+
comms << motor->shaft_angle;
59+
break;
60+
case SimpleFOCRegister::REG_SENSOR_VELOCITY:
61+
if (motor->sensor)
62+
comms << motor->sensor->getVelocity(); // stored angle
63+
else
64+
comms << motor->shaft_velocity;
65+
break;
66+
case SimpleFOCRegister::REG_SENSOR_TIMESTAMP:
67+
if (motor->sensor)
68+
comms << (uint32_t)motor->sensor->angle_prev_ts; // stored angle
69+
else
70+
comms << (uint32_t)0;
71+
break;
5472

5573
case SimpleFOCRegister::REG_TELEMETRY_REG:
5674
if (Telemetry::num_telemetry > 0){
@@ -405,6 +423,9 @@ bool SimpleFOCRegisters::commsToRegister(RegisterIO& comms, uint8_t reg, FOCMoto
405423
case SimpleFOCRegister::REG_POSITION:
406424
case SimpleFOCRegister::REG_VELOCITY:
407425
case SimpleFOCRegister::REG_SENSOR_ANGLE:
426+
case SimpleFOCRegister::REG_SENSOR_MECHANICAL_ANGLE:
427+
case SimpleFOCRegister::REG_SENSOR_VELOCITY:
428+
case SimpleFOCRegister::REG_SENSOR_TIMESTAMP:
408429
case SimpleFOCRegister::REG_VOLTAGE_Q:
409430
case SimpleFOCRegister::REG_VOLTAGE_D:
410431
case SimpleFOCRegister::REG_CURRENT_Q:
@@ -433,6 +454,9 @@ uint8_t SimpleFOCRegisters::sizeOfRegister(uint8_t reg){
433454
case SimpleFOCRegister::REG_ANGLE:
434455
case SimpleFOCRegister::REG_VELOCITY:
435456
case SimpleFOCRegister::REG_SENSOR_ANGLE:
457+
case SimpleFOCRegister::REG_SENSOR_MECHANICAL_ANGLE:
458+
case SimpleFOCRegister::REG_SENSOR_VELOCITY:
459+
case SimpleFOCRegister::REG_SENSOR_TIMESTAMP:
436460
case SimpleFOCRegister::REG_VOLTAGE_Q:
437461
case SimpleFOCRegister::REG_VOLTAGE_D:
438462
case SimpleFOCRegister::REG_CURRENT_Q:
@@ -494,7 +518,7 @@ uint8_t SimpleFOCRegisters::sizeOfRegister(uint8_t reg){
494518
return 2*telemetry->numRegisters + 1;
495519
}
496520
else
497-
return 0;
521+
return 1;
498522
case SimpleFOCRegister::REG_DRIVER_ENABLE:
499523
case SimpleFOCRegister::REG_REPORT: // size can vary, handled in Commander if used - may discontinue this feature
500524
case SimpleFOCRegister::REG_ENABLE_ALL: // write-only

src/comms/SimpleFOCRegisters.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ typedef enum : uint8_t {
2727
REG_POSITION = 0x10, // RO - int32_t full rotations + float position (0-2PI, in radians) (4 bytes + 4 bytes)
2828
REG_VELOCITY = 0x11, // RO - float
2929
REG_SENSOR_ANGLE = 0x12, // RO - float
30+
REG_SENSOR_MECHANICAL_ANGLE = 0x13, // RO - float
31+
REG_SENSOR_VELOCITY = 0x14, // RO - float
32+
REG_SENSOR_TIMESTAMP = 0x15,// RO - uint32_t
3033

3134
REG_PHASE_VOLTAGE = 0x16, // R/W - 3xfloat = 12 bytes
3235
REG_PHASE_STATE = 0x17, // R/W - 3 bytes (1 byte per phase)

src/comms/streams/BinaryIO.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,13 @@ BinaryIO& BinaryIO::operator>>(uint8_t &value) {
114114

115115
PacketIO& BinaryIO::operator>>(Packet& value) {
116116
while (!in_sync && _io.available() > 0) {
117-
if (_io.read() == MARKER_BYTE)
117+
if (_io.peek() == MARKER_BYTE)
118118
in_sync = true;
119+
else
120+
_io.read();
119121
}
120122
if (_io.peek() == MARKER_BYTE) {
121-
_io.read(); // discard the \n
123+
_io.read(); // discard the marker
122124
}
123125
if (!in_sync || _io.available() < 3) { // size, frame type, payload = 3 bytes minimum frame size
124126
value.type = 0x00;

src/comms/streams/PacketCommander.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ void PacketCommander::handleRegisterPacket(bool write, uint8_t reg) {
7676

7777
bool PacketCommander::commsToRegister(uint8_t reg){
7878
switch (reg) {
79-
case REG_MOTOR_ADDRESS:
79+
case SimpleFOCRegister::REG_MOTOR_ADDRESS:
8080
uint8_t val;
8181
*_io >> val;
8282
if (val >= numMotors)

src/comms/streams/TextIO.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ TextIO& TextIO::operator>>(float &value) {
7979
if (in_sep) {
8080
_io.read(); // discard the separator
8181
}
82-
value = _io.parseFloat(LookaheadMode::SKIP_NONE);
82+
value = _io.parseFloat(LookaheadMode::SKIP_NONE); // TODO LookaheadMode is not defined on ESP32
8383
in_sep = true;
8484
return *this;
8585
};

0 commit comments

Comments
 (0)