From f6412c71bb8b34ded2453ce1cde4a93ce2c91c7d Mon Sep 17 00:00:00 2001 From: Tim Stadtmann <tim.stadtmann@rwth-aachen.de> Date: Thu, 8 Dec 2016 18:23:24 +0100 Subject: [PATCH] Add support for HT-sensors -> Magnetic Compass, Accelerometer and Color --- source/+DeviceMode/HTAccelerometer.m | 7 +++++++ source/+DeviceMode/HTColor.m | 12 ++++++++++++ source/+DeviceMode/HTCompass.m | 6 ++++++ source/DeviceMode.m | 6 ++++++ source/DeviceType.m | 3 +++ source/private/isModeValid.m | 12 ++++++++++++ typedata.ods | Bin 51555 -> 52303 bytes 7 files changed, 46 insertions(+) create mode 100644 source/+DeviceMode/HTAccelerometer.m create mode 100644 source/+DeviceMode/HTColor.m create mode 100644 source/+DeviceMode/HTCompass.m diff --git a/source/+DeviceMode/HTAccelerometer.m b/source/+DeviceMode/HTAccelerometer.m new file mode 100644 index 0000000..6808afd --- /dev/null +++ b/source/+DeviceMode/HTAccelerometer.m @@ -0,0 +1,7 @@ +classdef HTAccelerometer < uint8 + enumeration + Acceleration (0) + AccelerationAllAxes (1) + end +end + diff --git a/source/+DeviceMode/HTColor.m b/source/+DeviceMode/HTColor.m new file mode 100644 index 0000000..bbd2aca --- /dev/null +++ b/source/+DeviceMode/HTColor.m @@ -0,0 +1,12 @@ +classdef HTColor < uint8 + enumeration + Col (0) + Red (1) + Green (2) + Blue (3) + White (4) + Raw (5) + Nrm (6) + All (7) + end +end \ No newline at end of file diff --git a/source/+DeviceMode/HTCompass.m b/source/+DeviceMode/HTCompass.m new file mode 100644 index 0000000..1ed8055 --- /dev/null +++ b/source/+DeviceMode/HTCompass.m @@ -0,0 +1,6 @@ +classdef HTCompass < uint8 + enumeration + Degrees (0) + end +end + diff --git a/source/DeviceMode.m b/source/DeviceMode.m index 146666f..a66536f 100755 --- a/source/DeviceMode.m +++ b/source/DeviceMode.m @@ -34,6 +34,12 @@ function mode = DeviceMode(type, modeNo) mode = DeviceMode.Gyro(modeNo); case DeviceType.InfraRed mode = DeviceMode.InfraRed(modeNo); + case DeviceType.HTColor + mode = DeviceMode.HTColor(modeNo); + case DeviceType.HTCompass + mode = DeviceMode.HTCompass(modeNo); + case DeviceType.HTAccelerometer + mode = DeviceMode.HTAccelerometer(modeNo); otherwise mode = DeviceMode.Default.Undefined; % Need to think about this... end diff --git a/source/DeviceType.m b/source/DeviceType.m index 4afa3f9..1fb6e75 100644 --- a/source/DeviceType.m +++ b/source/DeviceType.m @@ -13,6 +13,9 @@ classdef DeviceType < uint8 UltraSonic (30) Gyro (32) InfraRed (33) + HTColor (54) + HTCompass (56) + HTAccelerometer (58) Unknown (125) None (126) Error (127) diff --git a/source/private/isModeValid.m b/source/private/isModeValid.m index debc72a..1bec154 100755 --- a/source/private/isModeValid.m +++ b/source/private/isModeValid.m @@ -59,6 +59,18 @@ function isValid = isModeValid(mode, type) if ~strcmp(class(mode), 'DeviceMode.InfraRed') isValid = false; end + case DeviceType.HTColor + if ~strcmp(class(mode), 'DeviceMode.HTColor') + isValid = false; + end + case DeviceType.HTCompass + if ~strcmp(class(mode), 'DeviceMode.HTCompass') + isValid = false; + end + case DeviceType.HTAccelerometer + if ~strcmp(class(mode), 'DeviceMode.HTAccelerometer') + isValid = false; + end otherwise isValid = false; end diff --git a/typedata.ods b/typedata.ods index 1a573c687ac47d297f1673388f58e428095cfc15..95323d3b03637ef0ecf89a9e9eb583304d2e3ea8 100644 GIT binary patch delta 7510 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 SVoEzU+3ch`+sWe~X8-^W0Yb<C delta 6807 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 -- GitLab