diff --git a/source/private/DeviceMode.m b/source/private/DeviceMode.m index a66536f6af7a31a9bc94813cb63420cf4c898720..beaae0299598448cd9c8d6689072796b4eabdd09 100755 --- a/source/private/DeviceMode.m +++ b/source/private/DeviceMode.m @@ -7,45 +7,18 @@ function mode = DeviceMode(type, modeNo) end try - switch type - case DeviceType.NXTTouch - mode = DeviceMode.NXTTouch(modeNo); - case DeviceType.NXTLight - mode = DeviceMode.NXTLight(modeNo); - case DeviceType.NXTSound - mode = DeviceMode.NXTSound(modeNo); - case DeviceType.NXTColor - mode = DeviceMode.NXTColor(modeNo); - case DeviceType.NXTUltraSonic - mode = DeviceMode.NXTUltraSonic(modeNo); - case DeviceType.NXTTemperature - mode = DeviceMode.NXTTemperature(modeNo); - case DeviceType.LargeMotor - mode = DeviceMode.Motor(modeNo); - case DeviceType.MediumMotor - mode = DeviceMode.Motor(modeNo); - case DeviceType.Touch - mode = DeviceMode.Touch(modeNo); - case DeviceType.Color - mode = DeviceMode.Color(modeNo); - case DeviceType.UltraSonic - mode = DeviceMode.UltraSonic(modeNo); - case DeviceType.Gyro - 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... + % Motors are a special case where the mode name does not equal the type name + if type == DeviceType.LargeMotor || type == DeviceType.MediumMotor + mode = DeviceMode.Motor(modeNo); + else + mode = DeviceMode.(char(type))(modeNo); + end + catch ME + if strcmp(ME.identifier,'MATLAB:undefinedVarOrClass') + mode = DeviceMode.Default.Undefined; % Need to think about this... + else + error('ModeNo ''%d'' not valid for given type.', modeNo); end - catch - error('MATLAB:RWTHMindstormsEV3:noclass:DeviceMode:invalidInputValue',... - 'ModeNo ''%d'' not valid for given type.', modeNo); end end diff --git a/source/private/isModeValid.m b/source/private/isModeValid.m index 1bec154a662a1d0acf7804b69014a689949fd97f..37638483673a654c555398a802cec3fcdf3df0b8 100755 --- a/source/private/isModeValid.m +++ b/source/private/isModeValid.m @@ -1,78 +1,11 @@ function isValid = isModeValid(mode, type) % Returns whether given mode is a valid mode in given type. - isValid = true; - if strcmp(class(mode), 'DeviceMode.Default') return; end - - switch type - case DeviceType.NXTTouch - if ~strcmp(class(mode), 'DeviceMode.NXTTouch') - isValid = false; - end - case DeviceType.NXTLight - if ~strcmp(class(mode), 'DeviceMode.NXTLight') - isValid = false; - end - case DeviceType.NXTSound - if ~strcmp(class(mode), 'DeviceMode.NXTSound') - isValid = false; - end - case DeviceType.NXTColor - if ~strcmp(class(mode), 'DeviceMode.NXTColor') - isValid = false; - end - case DeviceType.NXTUltraSonic - if ~strcmp(class(mode), 'DeviceMode.NXTUltraSonic') - isValid = false; - end - case DeviceType.NXTTemperature - if ~strcmp(class(mode), 'DeviceMode.NXTTemperature') - isValid = false; - end - case DeviceType.LargeMotor - if ~strcmp(class(mode), 'DeviceMode.Motor') - isValid = false; - end - case DeviceType.MediumMotor - if ~strcmp(class(mode), 'DeviceMode.Motor') - isValid = false; - end - case DeviceType.Touch - if ~strcmp(class(mode), 'DeviceMode.Touch') - isValid = false; - end - case DeviceType.Color - if ~strcmp(class(mode), 'DeviceMode.Color') - isValid = false; - end - case DeviceType.UltraSonic - if ~strcmp(class(mode), 'DeviceMode.UltraSonic') - isValid = false; - end - case DeviceType.Gyro - if ~strcmp(class(mode), 'DeviceMode.Gyro') - isValid = false; - end - case DeviceType.InfraRed - 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 -end - + + % A mode is valid for a given type if the name of the type (e.g. Color) + % equals the name of the enumeration corresponding to the mode (e.g. Color in + % DeviceMode.Color.Ambient) + isValid = strcmp(char(type), strrep(class(mode), 'DeviceMode.', '')); +end \ No newline at end of file