Skip to content

Commit 079afd0

Browse files
committed
lib/ev3dev: support u16 and u32 sensor data
This fixes the Ev3devSensor class for sensors that use these types.
1 parent 0f008dd commit 079afd0

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

bricks/ev3dev/pbdevice.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,15 @@ static pbio_error_t get_values(pbdevice_t *pbdev, uint8_t mode, int32_t *values)
161161
case LEGO_SENSOR_DATA_TYPE_INT16:
162162
values[i] = *((int16_t *)(data + i * 2));
163163
break;
164+
case LEGO_SENSOR_DATA_TYPE_UINT16:
165+
values[i] = *((uint16_t *)(data + i * 2));
166+
break;
164167
case LEGO_SENSOR_DATA_TYPE_INT32:
165168
values[i] = *((int32_t *)(data + i * 4));
166169
break;
170+
case LEGO_SENSOR_DATA_TYPE_UINT32:
171+
values[i] = *((uint32_t *)(data + i * 4));
172+
break;
167173
case LEGO_SENSOR_DATA_TYPE_INT16_BE:
168174
values[i] = (int16_t) __builtin_bswap16(*(uint16_t *) (data + i * 2));
169175
break;

lib/ev3dev/include/ev3dev_stretch/lego_sensor.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ typedef enum {
3333
* Unsigned 8-bit integer.
3434
*/
3535
LEGO_SENSOR_DATA_TYPE_UINT8,
36+
/**
37+
* Unsigned 16-bit integer.
38+
*/
39+
LEGO_SENSOR_DATA_TYPE_UINT16,
40+
/**
41+
* Unsigned 32-bit integer.
42+
*/
43+
LEGO_SENSOR_DATA_TYPE_UINT32,
3644
/**
3745
* Big-endian, signed 16-bit integer.
3846
*/

lib/ev3dev/src/ev3dev_stretch/lego_sensor.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,9 +228,15 @@ pbio_error_t lego_sensor_get_info(lego_sensor_t *sensor, uint8_t *data_len, lego
228228
else if (!strcmp(s_data_type, "s16")) {
229229
*data_type = LEGO_SENSOR_DATA_TYPE_INT16;
230230
}
231+
else if (!strcmp(s_data_type, "u16")) {
232+
*data_type = LEGO_SENSOR_DATA_TYPE_UINT16;
233+
}
231234
else if (!strcmp(s_data_type, "s32")) {
232235
*data_type = LEGO_SENSOR_DATA_TYPE_INT32;
233236
}
237+
else if (!strcmp(s_data_type, "u32")) {
238+
*data_type = LEGO_SENSOR_DATA_TYPE_UINT32;
239+
}
234240
else if (!strcmp(s_data_type, "s16_be")) {
235241
*data_type = LEGO_SENSOR_DATA_TYPE_INT16_BE;
236242
}

0 commit comments

Comments
 (0)