예제 #1
0
        public void TestNotificationReceived()
        {
            var connection = Mock.Create <IConnection>();

            //setting mock
            Mock.Arrange(() => connection.WriteValue(Arg.IsAny <byte[]>())).Returns((byte[] b) => true);

            var sensor = new DistanceColorSensor(connection, Ports.PORT_D);

            sensor.OnChange += Changes;

            _expectedResult = new DistanceColorSensorEventArgs
            {
                ColorDetected = Color.Red,
                Distance      = 2,
                Partial       = 0.5
            };

            var data = new byte[] { 0, 0, 0, 0, (byte)_expectedResult.ColorDetected, (byte)_expectedResult.Distance, 0, (byte)(1.0 / _expectedResult.Partial) };

            sensor.SetMode(DistanceColorSensorMods.COLOR_DISTANCE_FLOAT);
            sensor.FireEvent(data);

            Assert.True(_success);
        }
예제 #2
0
        internal void FireEvent(byte[] data)
        {
            DistanceColorSensorEventArgs args = new DistanceColorSensorEventArgs();
            var handler = OnChange;

            if (handler == null)
            {
                return;
            }

            switch (_mode)
            {
            case DistanceColorSensorMods.COLOR_ONLY:
                args.ColorDetected = (Color)data[4];
                break;

            case DistanceColorSensorMods.DISTANCE_INCHES:
            case DistanceColorSensorMods.DISTANCE_HOW_CLOSE:
            case DistanceColorSensorMods.DISTANCE_SUBINCH_HOW_CLOSE:
                args.Distance = data[4];
                break;

            case DistanceColorSensorMods.COUNT_2INCH:
                args.Count = data[4];
                break;

            case DistanceColorSensorMods.COLOR_DISTANCE_FLOAT:
            {
                args.ColorDetected = (Color)data[4];
                args.Distance      = data[5];
                args.Partial       = data[7] == 0 ? 0 : 1.0 / data[7];
                break;
            }

            case DistanceColorSensorMods.LUMINOSITY:
                args.Luminosity = (double)data[4] / 1023.0;
                break;
            }

            handler.Invoke(this, args);
            LoggerHelper.Instance.Debug("DistanceColorSensor::FireEvent OnChange");
        }
예제 #3
0
 private void Changes(object sender, DistanceColorSensorEventArgs e)
 {
     _success = (e.Distance == _expectedResult.Distance) &&
                (e.ColorDetected == _expectedResult.ColorDetected) &&
                (Math.Abs(e.Partial - _expectedResult.Partial) < 0.01);
 }