Skip to content

Commit 0bb5e72

Browse files
committed
add support for mindsensors.com GlideWheel-AS AngleSensor
1 parent 0335563 commit 0bb5e72

3 files changed

Lines changed: 92 additions & 1 deletion

File tree

drivers/legoev3/nxt_i2c_sensor.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ enum nxt_i2c_sensor_type {
105105
HT_NXT_SUPER_PRO_SENSOR,
106106
HT_NXT_SENSOR_MUX,
107107
MS_8CH_SERVO,
108+
MS_ANGLE_SENSOR,
108109
MS_LIGHT_SENSOR_ARRAY,
109110
NUM_NXT_I2C_SENSORS
110111
};
@@ -129,6 +130,7 @@ enum nxt_i2c_sensor_type {
129130
{ "ht-super-pro", HT_NXT_SUPER_PRO_SENSOR }, \
130131
{ "ht-nxt-smux", HT_NXT_SENSOR_MUX }, \
131132
{ "ms-8ch-servo", MS_8CH_SERVO }, \
133+
{ "ms-angle-sensor", MS_ANGLE_SENSOR }, \
132134
{ "ms-light-array", MS_LIGHT_SENSOR_ARRAY }, \
133135
{ }
134136

drivers/legoev3/nxt_i2c_sensor_core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ static struct i2c_driver nxt_i2c_sensor_driver = {
376376
.remove = nxt_i2c_sensor_remove,
377377
.class = I2C_CLASS_LEGOEV3,
378378
.detect = nxt_i2c_sensor_detect,
379-
.address_list = I2C_ADDRS(0x01, 0x02, 0x08, 0x0A, 0x58),
379+
.address_list = I2C_ADDRS(0x01, 0x02, 0x08, 0x0A, 0x18, 0x58),
380380
};
381381
module_i2c_driver(nxt_i2c_sensor_driver);
382382

drivers/legoev3/nxt_i2c_sensor_defs.c

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1590,6 +1590,95 @@ const struct nxt_i2c_sensor_info nxt_i2c_sensor_defs[] = {
15901590
},
15911591
},
15921592
},
1593+
[MS_ANGLE_SENSOR] = {
1594+
/**
1595+
* @vendor_name: mindsensors.com
1596+
* @vendor_part_number: AngleSensor
1597+
* @vendor_part_name: GlideWheel-AS
1598+
* @vendor_website: http://www.mindsensors.com/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=173
1599+
* @default_address: 0x18
1600+
*/
1601+
.name = "ms-angle-sensor",
1602+
.vendor_id = "mndsnsrs",
1603+
.product_id = "AngSens",
1604+
.num_modes = 4,
1605+
.ms_mode_info = {
1606+
[0] = {
1607+
/**
1608+
* @description: Angle
1609+
* @value0: Angle
1610+
* @units_description: degrees
1611+
*/
1612+
.name = "MS-AS-ANGLE",
1613+
.data_sets = 1,
1614+
.data_type = MSENSOR_DATA_S32,
1615+
.units = "deg",
1616+
},
1617+
[1] = {
1618+
/**
1619+
* @description: High-precision angle
1620+
* @value0: Angle
1621+
* @units_description: degrees
1622+
*/
1623+
.name = "MS-AS-ANGLE2",
1624+
.raw_max = 360,
1625+
.si_max = 1800,
1626+
.data_sets = 1,
1627+
.decimals = 1,
1628+
.data_type = MSENSOR_DATA_S32,
1629+
.units = "deg",
1630+
},
1631+
[2] = {
1632+
/**
1633+
* @description: Rotational Speed
1634+
* @value0: Rotational Speed (-4000 to 4000)
1635+
* @units_description: revolutions per minute
1636+
*/
1637+
.name = "MS-AS-RPM",
1638+
.raw_max = 100,
1639+
.si_max = 100,
1640+
.data_sets = 1,
1641+
.units = "rpm",
1642+
.data_type = MSENSOR_DATA_S16,
1643+
},
1644+
[3] = {
1645+
/**
1646+
* [^mode3-value1]: Angle value times 2
1647+
* (i.e. value of 10 = angle of 5 degrees).
1648+
* Allows for 0.5 degree precision.
1649+
* [^mode3-value2]: Value needs to be converted to
1650+
* 16-bit signed integer. Example:
1651+
* `if (value2 > 32767) value2 = value2 - 65536`
1652+
*
1653+
* @description: All values
1654+
* @value0: Angle
1655+
* @value1: Angle x2
1656+
* @value1_footnote: [^mode3-value1]
1657+
* @value2: Rotational Speed
1658+
* @value2_footnote: [^mode3-value2]
1659+
*/
1660+
.name = "MS-AS-ALL",
1661+
.raw_max = 100,
1662+
.si_max = 100,
1663+
.data_sets = 3,
1664+
.data_type = MSENSOR_DATA_S32,
1665+
},
1666+
},
1667+
.i2c_mode_info = {
1668+
[0] = {
1669+
.read_data_reg = 0x42,
1670+
},
1671+
[1] = {
1672+
.read_data_reg = 0x46,
1673+
},
1674+
[2] = {
1675+
.read_data_reg = 0x4A,
1676+
},
1677+
[3] = {
1678+
.read_data_reg = 0x42,
1679+
},
1680+
},
1681+
},
15931682
[MS_LIGHT_SENSOR_ARRAY] = {
15941683
/**
15951684
* [^address]: The address is programmable. See manufacturer

0 commit comments

Comments
 (0)