diff --git a/.github/workflows/main-ci.yml b/.github/workflows/main-ci.yml index 30a0fd6344..46c7ebcb88 100644 --- a/.github/workflows/main-ci.yml +++ b/.github/workflows/main-ci.yml @@ -3,6 +3,7 @@ name: Main Build on: workflow_dispatch: pull_request: + branches: [ main ] push: branches: [ main ] diff --git a/Source/MF.Sensors.slnf b/Source/MF.Sensors.slnf index d5564d95dc..7657c7b980 100644 --- a/Source/MF.Sensors.slnf +++ b/Source/MF.Sensors.slnf @@ -5,8 +5,9 @@ "..\\..\\MQTTnet\\Source\\MQTTnet\\MQTTnet.csproj", "..\\..\\Meadow.Contracts\\Source\\Meadow.Contracts\\Meadow.Contracts.csproj", "..\\..\\Meadow.Core\\source\\Meadow.Core\\Meadow.Core.csproj", - "..\\..\\Meadow.Core\\source\\Meadow.F7\\Meadow.F7.csproj", - "..\\..\\Meadow.Logging\\lib\\Meadow.Logging.csproj", + "..\\..\\Meadow.Core\\source\\implementations\\f7\\Meadow.F7\\Meadow.F7.csproj", + "..\\..\\Meadow.Logging\\Source\\Meadow.Logging\\lib\\Meadow.Logging.csproj", + "..\\..\\Meadow.Modbus\\src\\Meadow.Modbus\\Meadow.Modbus.csproj", "..\\..\\Meadow.Units\\Source\\Meadow.Units\\Meadow.Units.csproj", "Meadow.Foundation.Core\\Meadow.Foundation.Core.csproj", "Meadow.Foundation.Peripherals\\Sensors.Atmospheric.AdafruitMPRLS\\Driver\\Sensors.Atmospheric.AdafruitMPRLS.csproj", @@ -138,8 +139,10 @@ "Meadow.Foundation.Peripherals\\Sensors.Motion.Mpu6050\\Samples\\Mpu6050_Sample\\Mpu6050_Sample.csproj", "Meadow.Foundation.Peripherals\\Sensors.Motion.ParallaxPir\\Driver\\Sensors.Motion.ParallaxPir.csproj", "Meadow.Foundation.Peripherals\\Sensors.Motion.ParallaxPir\\Samples\\ParallaxPir_Sample\\ParallaxPir_Sample.csproj", - "Meadow.Foundation.Peripherals\\Sensors.Power.Ina260\\Driver\\Sensors.Power.Ina260.csproj", - "Meadow.Foundation.Peripherals\\Sensors.Power.Ina260\\Samples\\Ina260_Sample\\Ina260_Sample.csproj", + "Meadow.Foundation.Peripherals\\Sensors.Power.Ina2xx\\Driver\\Sensors.Power.Ina2xx.csproj", + "Meadow.Foundation.Peripherals\\Sensors.Power.Ina2xx\\Samples\\Ina219_Sample\\Ina219_Sample.csproj", + "Meadow.Foundation.Peripherals\\Sensors.Power.Ina2xx\\Samples\\Ina228_Sample\\Ina228_Sample.csproj", + "Meadow.Foundation.Peripherals\\Sensors.Power.Ina2xx\\Samples\\Ina260_Sample\\Ina260_Sample.csproj", "Meadow.Foundation.Peripherals\\Sensors.Radio.Rfid.IDxxLA\\Driver\\Sensors.Radio.Rfid.IDxxLA.csproj", "Meadow.Foundation.Peripherals\\Sensors.Radio.Rfid.IDxxLA\\Samples\\IDxxLA_Sample\\IDxxLA_Sample.csproj", "Meadow.Foundation.Peripherals\\Sensors.Radio.Rfid.Rc522\\Driver\\Sensors.Radio.Rfid.Rc522.csproj", diff --git a/Source/Meadow.Foundation.Core.Samples/Audio.PiezoSpeaker_Sample/Audio.PiezoSpeaker_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Audio.PiezoSpeaker_Sample/Audio.PiezoSpeaker_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Audio.PiezoSpeaker_Sample/Audio.PiezoSpeaker_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Audio.PiezoSpeaker_Sample/Audio.PiezoSpeaker_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Audio.PiezoSpeaker_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Audio.PiezoSpeaker_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Audio.PiezoSpeaker_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Generators.SoftPwmPort_Sample/Generators.SoftPwmPort_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Generators.SoftPwmPort_Sample/Generators.SoftPwmPort_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Generators.SoftPwmPort_Sample/Generators.SoftPwmPort_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Generators.SoftPwmPort_Sample/Generators.SoftPwmPort_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Generators.SoftPwmPort_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Generators.SoftPwmPort_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Generators.SoftPwmPort_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/Leds.LedBarGraph_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/Leds.LedBarGraph_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/Leds.LedBarGraph_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/Leds.LedBarGraph_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/Leds.Led_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/Leds.Led_Sample.csproj index 3019211fae..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/Leds.Led_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/Leds.Led_Sample.csproj @@ -9,15 +9,7 @@ App - - - - - - Always - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/Leds.PwmLedBarGraph_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/Leds.PwmLedBarGraph_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/Leds.PwmLedBarGraph_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/Leds.PwmLedBarGraph_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/Leds.PwmLed_Onboard_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/Leds.PwmLed_Onboard_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/Leds.PwmLed_Onboard_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/Leds.PwmLed_Onboard_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/Leds.PwmLed_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/Leds.PwmLed_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/Leds.PwmLed_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/Leds.PwmLed_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/Leds.RgbLed_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/Leds.RgbLed_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/Leds.RgbLed_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/Leds.RgbLed_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/Leds.RgbPwmLed_Onboard_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/Leds.RgbPwmLed_Onboard_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/Leds.RgbPwmLed_Onboard_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/Leds.RgbPwmLed_Onboard_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/Leds.RgbPwmLed_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/Leds.RgbPwmLed_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/Leds.RgbPwmLed_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/Leds.RgbPwmLed_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Motor.BidirectionalDcMotor_Sample/Motor.BidirectionalDcMotor_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Motor.BidirectionalDcMotor_Sample/Motor.BidirectionalDcMotor_Sample.csproj index 818477e94d..28f6080700 100644 --- a/Source/Meadow.Foundation.Core.Samples/Motor.BidirectionalDcMotor_Sample/Motor.BidirectionalDcMotor_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Motor.BidirectionalDcMotor_Sample/Motor.BidirectionalDcMotor_Sample.csproj @@ -10,12 +10,7 @@ 10 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Motor.BidirectionalDcMotor_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Motor.BidirectionalDcMotor_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Motor.BidirectionalDcMotor_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Motor.HBridgeMotor_Sample/Motor.HBridgeMotor_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Motor.HBridgeMotor_Sample/Motor.HBridgeMotor_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Motor.HBridgeMotor_Sample/Motor.HBridgeMotor_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Motor.HBridgeMotor_Sample/Motor.HBridgeMotor_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Motor.HBridgeMotor_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Motor.HBridgeMotor_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Motor.HBridgeMotor_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/Relays.Relay_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/Relays.Relay_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/Relays.Relay_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/Relays.Relay_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_BasicSample/Sensors.Buttons.PushButton_BasicSample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_BasicSample/Sensors.Buttons.PushButton_BasicSample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_BasicSample/Sensors.Buttons.PushButton_BasicSample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_BasicSample/Sensors.Buttons.PushButton_BasicSample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_BasicSample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_BasicSample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_BasicSample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_Sample/Sensors.Buttons.PushButton_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_Sample/Sensors.Buttons.PushButton_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_Sample/Sensors.Buttons.PushButton_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_Sample/Sensors.Buttons.PushButton_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Environmental.AnalogWaterLevel_Sample/Sensors.Environmental.AnalogWaterLevel_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Environmental.AnalogWaterLevel_Sample/Sensors.Environmental.AnalogWaterLevel_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Environmental.AnalogWaterLevel_Sample/Sensors.Environmental.AnalogWaterLevel_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Environmental.AnalogWaterLevel_Sample/Sensors.Environmental.AnalogWaterLevel_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Environmental.AnalogWaterLevel_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.Environmental.AnalogWaterLevel_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Environmental.AnalogWaterLevel_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.HID.AnalogJoystick_Sample/Sensors.HID.AnalogJoystick_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.HID.AnalogJoystick_Sample/Sensors.HID.AnalogJoystick_Sample.csproj index 36ac801164..7ec339c822 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.HID.AnalogJoystick_Sample/Sensors.HID.AnalogJoystick_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.HID.AnalogJoystick_Sample/Sensors.HID.AnalogJoystick_Sample.csproj @@ -13,12 +13,7 @@ 8.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.HID.AnalogJoystick_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.HID.AnalogJoystick_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.HID.AnalogJoystick_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.HallEffect_Sample/Sensors.HallEffect_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.HallEffect_Sample/Sensors.HallEffect_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.HallEffect_Sample/Sensors.HallEffect_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.HallEffect_Sample/Sensors.HallEffect_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.HallEffect_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.HallEffect_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.HallEffect_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Light.AnalogLightSensor_Sample/Sensors.Light.AnalogLightSensor_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Light.AnalogLightSensor_Sample/Sensors.Light.AnalogLightSensor_Sample.csproj index cc7c8b6bae..cc82b99e91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Light.AnalogLightSensor_Sample/Sensors.Light.AnalogLightSensor_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Light.AnalogLightSensor_Sample/Sensors.Light.AnalogLightSensor_Sample.csproj @@ -14,12 +14,7 @@ - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Light.AnalogLightSensor_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.Light.AnalogLightSensor_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Light.AnalogLightSensor_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoderWithButton_Sample/Sensors.Rotary.RotaryEncoderWithButton_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoderWithButton_Sample/Sensors.Rotary.RotaryEncoderWithButton_Sample.csproj index 4f7f364ac4..004277e409 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoderWithButton_Sample/Sensors.Rotary.RotaryEncoderWithButton_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoderWithButton_Sample/Sensors.Rotary.RotaryEncoderWithButton_Sample.csproj @@ -11,12 +11,7 @@ - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoderWithButton_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoderWithButton_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoderWithButton_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoder_Sample/Sensors.Rotary.RotaryEncoder_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoder_Sample/Sensors.Rotary.RotaryEncoder_Sample.csproj index 4f7f364ac4..004277e409 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoder_Sample/Sensors.Rotary.RotaryEncoder_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoder_Sample/Sensors.Rotary.RotaryEncoder_Sample.csproj @@ -11,12 +11,7 @@ - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoder_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoder_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoder_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.DipSwitch_Sample/Sensors.Switches.DipSwitch_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.DipSwitch_Sample/Sensors.Switches.DipSwitch_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.DipSwitch_Sample/Sensors.Switches.DipSwitch_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.DipSwitch_Sample/Sensors.Switches.DipSwitch_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.DipSwitch_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.DipSwitch_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.DipSwitch_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpdtSwitch_Sample/Sensors.Switches.SpdtSwitch_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpdtSwitch_Sample/Sensors.Switches.SpdtSwitch_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpdtSwitch_Sample/Sensors.Switches.SpdtSwitch_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpdtSwitch_Sample/Sensors.Switches.SpdtSwitch_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpdtSwitch_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpdtSwitch_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpdtSwitch_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpstSwitch_Sample/Sensors.Switches.SpstSwitch_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpstSwitch_Sample/Sensors.Switches.SpstSwitch_Sample.csproj index 8ad9998fa1..7eba3d3988 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpstSwitch_Sample/Sensors.Switches.SpstSwitch_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpstSwitch_Sample/Sensors.Switches.SpstSwitch_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpstSwitch_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpstSwitch_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpstSwitch_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Temperature.AnalogTemperature_Sample/Sensors.Temperature.AnalogTemperature_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Temperature.AnalogTemperature_Sample/Sensors.Temperature.AnalogTemperature_Sample.csproj index cc7c8b6bae..cc82b99e91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Temperature.AnalogTemperature_Sample/Sensors.Temperature.AnalogTemperature_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Temperature.AnalogTemperature_Sample/Sensors.Temperature.AnalogTemperature_Sample.csproj @@ -14,12 +14,7 @@ - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Temperature.AnalogTemperature_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Core.Samples/Sensors.Temperature.AnalogTemperature_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Temperature.AnalogTemperature_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/Leds/Led.Animations.cs b/Source/Meadow.Foundation.Core/Leds/Led.Animations.cs index 340db15f55..64df4cdd25 100644 --- a/Source/Meadow.Foundation.Core/Leds/Led.Animations.cs +++ b/Source/Meadow.Foundation.Core/Leds/Led.Animations.cs @@ -15,9 +15,7 @@ public partial class Led private CancellationTokenSource? cancellationTokenSource = null; - /// - /// Stops the current LED animation - /// + /// public async Task StopAnimation() { if (animationTask != null) @@ -29,19 +27,13 @@ public async Task StopAnimation() } } - /// - /// Start the Blink animation which sets turns the LED on and off on an interval of 1 second (500ms on, 500ms off) - /// + /// public Task StartBlink() { return StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); } - /// - /// Start the Blink animation which sets turns the LED on and off with the specified durations - /// - /// The duration the LED stays on - /// The duration the LED stays off + /// public async Task StartBlink(TimeSpan onDuration, TimeSpan offDuration) { await StopAnimation(); diff --git a/Source/Meadow.Foundation.Core/Leds/Led.cs b/Source/Meadow.Foundation.Core/Leds/Led.cs index cb9b212391..07e68cbd26 100644 --- a/Source/Meadow.Foundation.Core/Leds/Led.cs +++ b/Source/Meadow.Foundation.Core/Leds/Led.cs @@ -11,9 +11,7 @@ public partial class Led : ILed, IDisposable { readonly bool createdPort = false; - /// - /// Turns on LED with current color or turns it off - /// + /// public bool IsOn { get => isOn; diff --git a/Source/Meadow.Foundation.Core/Leds/PwmLed.Animations.cs b/Source/Meadow.Foundation.Core/Leds/PwmLed.Animations.cs index a9f0568861..78cf7a02b8 100644 --- a/Source/Meadow.Foundation.Core/Leds/PwmLed.Animations.cs +++ b/Source/Meadow.Foundation.Core/Leds/PwmLed.Animations.cs @@ -6,14 +6,12 @@ namespace Meadow.Foundation.Leds { public partial class PwmLed { - private readonly object syncRoot = new object(); + private readonly object syncRoot = new(); private Task? animationTask = null; private CancellationTokenSource? cancellationTokenSource = null; - /// - /// Stops any running animations. - /// + /// public async Task StopAnimation() { if (animationTask != null) @@ -25,12 +23,20 @@ public async Task StopAnimation() } } - /// - /// Start a Blink animation which sets the brightness of the LED alternating between a low and high brightness setting. - /// - /// The maximum brightness of the animation - /// The minimum brightness of the animation - public async Task StartBlink(float highBrightness = 1f, float lowBrightness = 0f) + /// + public Task StartBlink() + { + return StartBlink(1f, 0f); + } + + /// + public Task StartBlink(TimeSpan onDuration, TimeSpan offDuration) + { + return StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); + } + + /// + public async Task StartBlink(float highBrightness, float lowBrightness) { ValidateBrightness(highBrightness, lowBrightness); @@ -39,13 +45,7 @@ public async Task StartBlink(float highBrightness = 1f, float lowBrightness = 0f await StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); } - /// - /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. - /// - /// The duration the LED stays in high brightness - /// The duration the LED stays in low brightness - /// The maximum brightness of the animation - /// The minimum brightness of the animation + /// public async Task StartBlink( TimeSpan highBrightnessDuration, TimeSpan lowBrightnessDuration, @@ -76,11 +76,7 @@ public async Task StartBlink( } } - /// - /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting. - /// - /// The maximum brightness of the animation - /// The minimum brightness of the animation + /// public async Task StartPulse(float highBrightness = 1, float lowBrightness = 0.15F) { ValidateBrightness(highBrightness, lowBrightness); @@ -90,12 +86,7 @@ public async Task StartPulse(float highBrightness = 1, float lowBrightness = 0.1 await StartPulse(TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); } - /// - /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. - /// - /// The pulse animation duration - /// The maximum brightness of the animation - /// The minimum brightness of the animation + /// public async Task StartPulse( TimeSpan pulseDuration, float highBrightness = 1, @@ -113,7 +104,7 @@ public async Task StartPulse( { float brightness = lowBrightness; bool ascending = true; - var intervalTime = TimeSpan.FromMilliseconds(60); // 60 milliseconds is probably the fastest update we want to do, given that threads are given 20 milliseconds by default. + var intervalTime = TimeSpan.FromMilliseconds(16); float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); float delta = (highBrightness - lowBrightness) / steps; diff --git a/Source/Meadow.Foundation.Core/Leds/PwmLed.cs b/Source/Meadow.Foundation.Core/Leds/PwmLed.cs index 796aed29a3..7800862ad6 100644 --- a/Source/Meadow.Foundation.Core/Leds/PwmLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/PwmLed.cs @@ -25,9 +25,7 @@ public partial class PwmLed : IPwmLed, IDisposable /// public Voltage MIN_FORWARD_VOLTAGE => new Voltage(0); - /// - /// Turns on LED with current color or turns it off - /// + /// public bool IsOn { get => isOn; @@ -49,9 +47,7 @@ public bool IsOn /// public Voltage ForwardVoltage { get; protected set; } - /// - /// The brightness value assigned to the LED - /// + /// public float Brightness { get; protected set; } = 1f; /// @@ -72,7 +68,7 @@ public PwmLed( IPin pin, Voltage forwardVoltage, CircuitTerminationType terminationType = CircuitTerminationType.CommonGround) : - this(pin.CreatePwmPort(new Frequency(100, Frequency.UnitType.Hertz)), forwardVoltage, terminationType) + this(pin.CreatePwmPort(new Frequency(1000, Frequency.UnitType.Hertz)), forwardVoltage, terminationType) { createdPwm = true; } @@ -115,10 +111,7 @@ protected void ValidateForwardVoltages(Voltage forwardVoltage) } } - /// - /// Sets the LED to a specific brightness. - /// - /// Valid values are from 0 to 1, inclusive + /// public void SetBrightness(float brightness) { if (brightness < 0 || brightness > 1) diff --git a/Source/Meadow.Foundation.Core/Leds/RgbLed.cs b/Source/Meadow.Foundation.Core/Leds/RgbLed.cs index 03f6fc2fae..9eda560357 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbLed.cs @@ -36,9 +36,7 @@ public partial class RgbLed : IRgbLed, IDisposable /// public CommonType Common { get; protected set; } - /// - /// Turns on LED with current color or turns it off - /// + /// public bool IsOn { get => isOn; diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Animations.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Animations.cs index 194cf32547..e1864e6e9e 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Animations.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Animations.cs @@ -1,4 +1,5 @@ -using System; +using Meadow.Peripherals.Leds; +using System; using System.Threading; using System.Threading.Tasks; @@ -26,6 +27,30 @@ public async Task StopAnimation() } } + /// + public Task StartBlink() + { + return StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), 1f, 0f); + } + + /// + public Task StartBlink(RgbLedColors color) + { + return StartBlink(color.AsColor(), TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), 1f, 0f); + } + + /// + public Task StartBlink(TimeSpan onDuration, TimeSpan offDuration) + { + return StartBlink(onDuration, offDuration, 1f, 0f); + } + + /// + public Task StartBlink(RgbLedColors color, TimeSpan onDuration, TimeSpan offDuration) + { + return StartBlink(color.AsColor(), onDuration, offDuration, 1f, 0f); + } + /// public Task StartBlink(float highBrightness = 1f, float lowBrightness = 0f) { diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs index 52813eed51..64ef94a254 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs @@ -10,15 +10,12 @@ namespace Meadow.Foundation.Leds /// public partial class RgbPwmLed : IRgbPwmLed, IDisposable { - readonly bool createdPorts = false; - - static readonly Frequency DefaultFrequency = new Frequency(200, Frequency.UnitType.Hertz); - - readonly float DEFAULT_DUTY_CYCLE = 0f; - - readonly double maxRedDutyCycle = 1; - readonly double maxGreenDutyCycle = 1; - readonly double maxBlueDutyCycle = 1; + private readonly bool createdPorts = false; + private static readonly Frequency DefaultFrequency = new Frequency(200, Frequency.UnitType.Hertz); + private readonly float DEFAULT_DUTY_CYCLE = 0f; + private readonly double maxRedDutyCycle = 1; + private readonly double maxGreenDutyCycle = 1; + private readonly double maxBlueDutyCycle = 1; /// /// Maximum forward voltage (3.3 Volts) @@ -40,7 +37,8 @@ public bool IsOn isOn = value; } } - bool isOn; + + private bool isOn; /// /// The current LED color @@ -281,6 +279,12 @@ public void SetColor(Color color, float brightness = 1) BluePwm.DutyCycle = (float)(Color.B / 255.0 * maxBlueDutyCycle * brightness); } + /// + public void SetColor(RgbLedColors color) + { + SetColor(color.AsColor()); + } + /// public void Dispose() { diff --git a/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj b/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj index 83c58b11e2..78aba0b9a9 100644 --- a/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj +++ b/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 Wilderness Labs, Inc @@ -27,6 +27,6 @@ - + diff --git a/Source/Meadow.Foundation.Core/Motors/BidirectionalDcMotor.cs b/Source/Meadow.Foundation.Core/Motors/BidirectionalDcMotor.cs index e739e2489b..4e3b4486ac 100644 --- a/Source/Meadow.Foundation.Core/Motors/BidirectionalDcMotor.cs +++ b/Source/Meadow.Foundation.Core/Motors/BidirectionalDcMotor.cs @@ -79,7 +79,10 @@ public BidirectionalDcMotor( /// public void Stop() { - _outputA.State = _outputB.State = _energizeHigh ? false : true; + var state = !_energizeHigh; + if (state == _outputA.State && state == _outputB.State) return; + + _outputA.State = _outputB.State = state; StateChanged?.Invoke(this, State); } @@ -88,7 +91,9 @@ public void Stop() /// public void StartClockwise() { - _outputA.State = !(_outputB.State = _energizeHigh ? true : false); + var state = !(_outputB.State = _energizeHigh); + if (state == _outputA.State) return; + _outputA.State = state; StateChanged?.Invoke(this, State); } @@ -97,7 +102,9 @@ public void StartClockwise() /// public void StartCounterClockwise() { - _outputA.State = !(_outputB.State = _energizeHigh ? false : true); + var state = !(_outputB.State = !_energizeHigh); + if (state == _outputA.State) return; + _outputA.State = state; StateChanged?.Invoke(this, State); } } diff --git a/Source/Meadow.Foundation.Core/Simulation/SimulatedAccelerometer.cs b/Source/Meadow.Foundation.Core/Simulation/SimulatedAccelerometer.cs new file mode 100644 index 0000000000..a7ac5978b1 --- /dev/null +++ b/Source/Meadow.Foundation.Core/Simulation/SimulatedAccelerometer.cs @@ -0,0 +1,56 @@ +using Meadow.Peripherals.Sensors; +using Meadow.Peripherals.Sensors.Motion; +using Meadow.Units; +using System; + +namespace Meadow.Foundation.Sensors; + +/// +/// Represents a simulated accelerometer +/// +public class SimulatedAccelerometer : SimulatedSamplingSensorBase, IAccelerometer +{ + /// + public Acceleration3D? Acceleration3D { get; private set; } + + /// + public override SimulationBehavior[] SupportedBehaviors => new[] { SimulationBehavior.RandomWalk }; + + /// + public override Type ValueType => typeof(Acceleration3D); + + /// + /// Creates a SimulatedAccelerometer instance + /// + public SimulatedAccelerometer() + { + Acceleration3D = new Acceleration3D + { + X = new Acceleration(0, Acceleration.UnitType.Gravity), + Y = new Acceleration(0, Acceleration.UnitType.Gravity), + Z = new Acceleration(1, Acceleration.UnitType.Gravity), + }; + } + + /// + public override void SetSensorValue(object value) + { + Acceleration3D = (Acceleration3D)value; + } + + /// + protected override Acceleration3D GenerateSimulatedValue(SimulationBehavior behavior) + { + switch (behavior) + { + case SimulationBehavior.RandomWalk: + var rX = new Acceleration(GetRandomDouble(-0.5, 0.5), Acceleration.UnitType.Gravity); + var rY = new Acceleration(GetRandomDouble(-0.5, 0.5), Acceleration.UnitType.Gravity); + var rZ = new Acceleration(GetRandomDouble(-0.5, 0.5), Acceleration.UnitType.Gravity); + Acceleration3D = new Acceleration3D(rX, rY, rZ); + break; + } + + return Acceleration3D!.Value; + } +} diff --git a/Source/Meadow.Foundation.Core/Simulation/SimulatedAnalogInputPort.cs b/Source/Meadow.Foundation.Core/Simulation/SimulatedAnalogInputPort.cs new file mode 100644 index 0000000000..c97bbe5e63 --- /dev/null +++ b/Source/Meadow.Foundation.Core/Simulation/SimulatedAnalogInputPort.cs @@ -0,0 +1,165 @@ +using Meadow.Hardware; +using Meadow.Units; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace Meadow.Foundation.Sensors; + +/// +/// Represents a simulated analog input port +/// +public class SimulatedAnalogInputPort : SimulatedSensorBase, IAnalogInputPort +{ + private Timer simulationTimer; + private Voltage oldVoltage; + private List>> observers = new(); + + /// + public Voltage[] VoltageSampleBuffer { get; } + + /// + public Voltage ReferenceVoltage { get; set; } + + /// + public Voltage Voltage { get; private set; } + + /// + public TimeSpan UpdateInterval { get; private set; } + + /// + public int SampleCount => 3; + + /// + public TimeSpan SampleInterval { get; } + + /// + public IAnalogChannelInfo Channel { get; } + + /// + public IPin Pin { get; } = default!; + + /// + public override Type ValueType => typeof(double); + + /// + public event EventHandler>? Updated; + + /// + /// Creates a SimulatedAnalogInputPort instance + /// + public SimulatedAnalogInputPort() + { + VoltageSampleBuffer = new Voltage[SampleCount]; + SampleInterval = TimeSpan.FromMilliseconds(10); + ReferenceVoltage = 3.3.Volts(); + Channel = new AnalogChannelInfo("SIM", 16, true, false); + simulationTimer = new Timer(SimulationTimerProc, null, -1, -1); + } + + private void SimulationTimerProc(object _) + { + for (var i = 0; i < VoltageSampleBuffer.Length; i++) + { + switch (SimulationBehavior) + { + case Peripherals.Sensors.SimulationBehavior.RandomWalk: + VoltageSampleBuffer[i] = new Voltage(GetRandomDouble(0, ReferenceVoltage.Volts), Voltage.UnitType.Volts); + break; + } + Thread.Sleep(SampleInterval); + } + + simulationTimer.Change(UpdateInterval, TimeSpan.FromMilliseconds(-1)); + + RaiseChangedAndNotify(); + } + + /// + public void Dispose() + { + } + + /// + public Task Read() + { + Voltage = new Voltage(VoltageSampleBuffer.Average(s => s.Volts), Voltage.UnitType.Volts); + return Task.FromResult(Voltage); + } + + /// + public void StartUpdating(TimeSpan? updateInterval = null) + { + if (updateInterval != null) + { + UpdateInterval = updateInterval.Value; + } + + simulationTimer.Change(UpdateInterval, TimeSpan.FromMilliseconds(-1)); + } + + /// + public void StopUpdating() + { + simulationTimer.Change(-1, -1); + } + + /// + public IDisposable Subscribe(IObserver> observer) + { + lock (observers) + { + observers.Add(observer); + return new Unsubscriber(observers, observer); + } + } + + /// + public override void SetSensorValue(object value) + { + for (var i = 0; i < VoltageSampleBuffer.Length; i++) + { + VoltageSampleBuffer[i] = (Voltage)value; + } + + RaiseChangedAndNotify(); + } + + private void RaiseChangedAndNotify() + { + var newVoltage = Read().Result; + var changeResult = new ChangeResult + { + New = newVoltage, + Old = oldVoltage, + }; + + Updated?.Invoke(this, changeResult); + + lock (observers) + { + observers.ForEach(x => x.OnNext(changeResult)); + } + + oldVoltage = newVoltage; + } + + private class Unsubscriber : IDisposable + { + private readonly List>> _observers; + private readonly IObserver> _observer; + + public Unsubscriber(List>> observers, IObserver> observer) + { + _observers = observers; + _observer = observer; + } + + public void Dispose() + { + if (!(_observer == null)) _observers.Remove(_observer); + } + } +} diff --git a/Source/Meadow.Foundation.Core/Simulation/SimulatedCurrentSensor.cs b/Source/Meadow.Foundation.Core/Simulation/SimulatedCurrentSensor.cs new file mode 100644 index 0000000000..ba06e26925 --- /dev/null +++ b/Source/Meadow.Foundation.Core/Simulation/SimulatedCurrentSensor.cs @@ -0,0 +1,54 @@ +using Meadow.Peripherals.Sensors; +using Meadow.Units; +using System; + +namespace Meadow.Foundation.Sensors; + +/// +/// Represents a simulated current sensor +/// +public class SimulatedCurrentSensor : SimulatedSamplingSensorBase, ICurrentSensor +{ + private Current maxCurrent; + private Current minCurrent; + + /// + public Current? Current { get; private set; } + + /// + public override SimulationBehavior[] SupportedBehaviors => new[] { SimulationBehavior.RandomWalk }; + + /// + public override Type ValueType => typeof(Current); + + /// + /// Creates a SimulatedAccelerometer instance + /// + public SimulatedCurrentSensor(Current? maxCurrent = null, Current? minCurrent = null) + { + this.minCurrent = minCurrent ?? new Current(0, Units.Current.UnitType.Amps); + this.maxCurrent = maxCurrent ?? new Current(1, Units.Current.UnitType.Amps); + + Current = 0.Amps(); + } + + /// + public override void SetSensorValue(object value) + { + Current = (Current)value; + } + + /// + protected override Current GenerateSimulatedValue(SimulationBehavior behavior) + { + switch (behavior) + { + case SimulationBehavior.RandomWalk: + var r = GetRandomDouble(minCurrent.Amps, maxCurrent.Amps); + Current = new Current(r); + break; + } + + return Current!.Value; + } +} diff --git a/Source/Meadow.Foundation.Core/Simulation/SimulatedHumiditySensor.cs b/Source/Meadow.Foundation.Core/Simulation/SimulatedHumiditySensor.cs new file mode 100644 index 0000000000..0bcdb7196c --- /dev/null +++ b/Source/Meadow.Foundation.Core/Simulation/SimulatedHumiditySensor.cs @@ -0,0 +1,35 @@ +using Meadow.Peripherals.Sensors; +using Meadow.Peripherals.Sensors.Atmospheric; +using Meadow.Units; +using System; + +namespace Meadow.Foundation.Sensors; + +public class SimulatedHumiditySensor : SimulatedSamplingSensorBase, IHumiditySensor +{ + private Random random = new Random(); + + public RelativeHumidity? Humidity { get; private set; } + public override Type ValueType => typeof(RelativeHumidity); + + public SimulatedHumiditySensor() + { + Humidity = new RelativeHumidity(25, RelativeHumidity.UnitType.Percent); + } + + public override void SetSensorValue(object value) + { + Humidity = (RelativeHumidity)value; + } + + protected override RelativeHumidity GenerateSimulatedValue(SimulationBehavior behavior) + { + switch (behavior) + { + case SimulationBehavior.RandomWalk: + var delta = random.NextDouble() * 10d - 5d; + return new RelativeHumidity(Humidity.Value.Percent + delta); + } + return Humidity!.Value; + } +} diff --git a/Source/Meadow.Foundation.Core/Simulation/SimulatedMoistureSensor.cs b/Source/Meadow.Foundation.Core/Simulation/SimulatedMoistureSensor.cs new file mode 100644 index 0000000000..585d088bd2 --- /dev/null +++ b/Source/Meadow.Foundation.Core/Simulation/SimulatedMoistureSensor.cs @@ -0,0 +1,38 @@ +using Meadow.Peripherals.Sensors; +using Meadow.Peripherals.Sensors.Moisture; +using System; + +namespace Meadow.Foundation.Sensors; + +public class SimulatedMoistureSensor : SimulatedSamplingSensorBase, IMoistureSensor +{ + private Random random = new Random(); + + public double? Moisture { get; private set; } + public override Type ValueType => typeof(double); + + public SimulatedMoistureSensor() + { + Moisture = 0.5d; + } + + public override void SetSensorValue(object value) + { + var val = Convert.ToDouble(value); + if (val < 0) val = 0d; + if (val > 1) val = 1.0d; + + Moisture = val; + } + + protected override double GenerateSimulatedValue(SimulationBehavior behavior) + { + switch (behavior) + { + case SimulationBehavior.RandomWalk: + var delta = random.NextDouble() / 100d - 0.5; + return Moisture!.Value + delta; + } + return Moisture ?? 0; + } +} diff --git a/Source/Meadow.Foundation.Core/Simulation/SimulatedSamplingSensorBase.cs b/Source/Meadow.Foundation.Core/Simulation/SimulatedSamplingSensorBase.cs new file mode 100644 index 0000000000..c64833de39 --- /dev/null +++ b/Source/Meadow.Foundation.Core/Simulation/SimulatedSamplingSensorBase.cs @@ -0,0 +1,76 @@ +using Meadow.Peripherals.Sensors; +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Meadow.Foundation.Sensors; + +/// +/// Represents the base logic for a simulated sample sensor +/// +public abstract class SimulatedSamplingSensorBase : SimulatedSensorBase, ISamplingSensor + where UNIT : struct +{ + /// + public event EventHandler>? Updated; + + private Timer updateTimer; + + /// + public TimeSpan UpdateInterval { get; private set; } + /// + public bool IsSampling { get; private set; } + /// + protected UNIT? PreviousReading { get; private set; } + + /// + /// Generates a value based on the provided behavior + /// + /// The behavior to use when generating a value + protected abstract UNIT GenerateSimulatedValue(SimulationBehavior behavior); + + /// + /// Called from derived classes + /// + protected SimulatedSamplingSensorBase() + { + UpdateInterval = TimeSpan.FromSeconds(5); + updateTimer = new Timer(UpdateTimerProc, null, -1, -1); + } + + private async void UpdateTimerProc(object _) + { + var newVal = await Read(); + + Updated?.Invoke(this, new ChangeResult(newVal, PreviousReading)); + PreviousReading = newVal; + + updateTimer.Change(UpdateInterval, TimeSpan.FromMilliseconds(-1)); + } + + /// + public Task Read() + { + return Task.FromResult(GenerateSimulatedValue(SimulationBehavior)); + } + + /// + public void StartUpdating(TimeSpan? updateInterval = null) + { + IsSampling = true; + + if (updateInterval != null) + { + UpdateInterval = updateInterval.Value; + } + + updateTimer.Change(UpdateInterval, TimeSpan.FromMilliseconds(-1)); + } + + /// + public void StopUpdating() + { + IsSampling = false; + updateTimer.Change(TimeSpan.FromMilliseconds(-1), TimeSpan.FromMilliseconds(-1)); + } +} diff --git a/Source/Meadow.Foundation.Core/Simulation/SimulatedSensorBase.cs b/Source/Meadow.Foundation.Core/Simulation/SimulatedSensorBase.cs new file mode 100644 index 0000000000..625c504ecb --- /dev/null +++ b/Source/Meadow.Foundation.Core/Simulation/SimulatedSensorBase.cs @@ -0,0 +1,43 @@ +using Meadow.Peripherals.Sensors; +using System; + +namespace Meadow.Foundation.Sensors; + +/// +/// Contains the base logic form simple simulated sensors +/// +public abstract class SimulatedSensorBase : ISimulatedSensor +{ + private Random random = new Random(); + + /// + /// The currently set behavior for the sensor + /// + protected SimulationBehavior SimulationBehavior { get; private set; } + + /// + public virtual SimulationBehavior[] SupportedBehaviors => new[] { SimulationBehavior.None }; + + /// + public abstract Type ValueType { get; } + + /// + public abstract void SetSensorValue(object value); + + /// + public virtual void StartSimulation(SimulationBehavior behavior) + { + SimulationBehavior = behavior; + } + + /// + /// Generates a random double value between the two provided values + /// + /// Inclusive lower bound value + /// Exclusive upper bound value + /// + protected double GetRandomDouble(double minValue, double maxValue) + { + return random.NextDouble() * (maxValue - minValue) + minValue; + } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Driver/Audio.MicroAudio.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Driver/Audio.MicroAudio.csproj index e51786d56c..69cd786cc4 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Driver/Audio.MicroAudio.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Driver/Audio.MicroAudio.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Samples/Audio.MicroAudio_Sample/Audio.MicroAudio_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Samples/Audio.MicroAudio_Sample/Audio.MicroAudio_Sample.csproj index 0ac97b0cb8..094ecd5cd1 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Samples/Audio.MicroAudio_Sample/Audio.MicroAudio_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Samples/Audio.MicroAudio_Sample/Audio.MicroAudio_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Samples/Audio.MicroAudio_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Samples/Audio.MicroAudio_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Samples/Audio.MicroAudio_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.AdafruitIO/Driver/DataLoggers.AdafruitIO.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.AdafruitIO/Driver/DataLoggers.AdafruitIO.csproj index 080b4fa4b6..44f0f8d586 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.AdafruitIO/Driver/DataLoggers.AdafruitIO.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.AdafruitIO/Driver/DataLoggers.AdafruitIO.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.SensorReading/Driver/DataLoggers.SensorReading.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.SensorReading/Driver/DataLoggers.SensorReading.csproj index f6daf73b29..42aa653a89 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.SensorReading/Driver/DataLoggers.SensorReading.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.SensorReading/Driver/DataLoggers.SensorReading.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.ThingSpeak/Driver/DataLoggers.ThingSpeak.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.ThingSpeak/Driver/DataLoggers.ThingSpeak.csproj index 61c0a5ccfd..f81f3afbde 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.ThingSpeak/Driver/DataLoggers.ThingSpeak.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.ThingSpeak/Driver/DataLoggers.ThingSpeak.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItemBase.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItem.cs similarity index 86% rename from Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItemBase.cs rename to Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItem.cs index ec091b5a94..b27c56c7f3 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItemBase.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItem.cs @@ -1,6 +1,4 @@ -using System.Text.Json.Serialization; - namespace Meadow.Foundation.Displays.UI { /// @@ -11,37 +9,31 @@ public class MenuItem /// /// Sub items in the menu /// - [JsonPropertyName("sub")] public MenuItem[]? SubItems { get; set; } /// /// The text on the menu item /// - [JsonPropertyName("text")] public string Text { get; set; } /// /// The optional command when the item is selected /// - [JsonPropertyName("command")] public string Command { get; set; } /// /// The menu item type /// - [JsonPropertyName("type")] public string Type { get; set; } /// /// The menu item id /// - [JsonPropertyName("id")] public string Id { get; set; } /// /// The menu item value /// - [JsonPropertyName("value")] public object? Value { get; set; } /// @@ -54,6 +46,19 @@ public class MenuItem /// public bool IsEditable => Value != null; + /// + /// Creates a new MenuItem object + /// + public MenuItem() + { + Text = string.Empty; + Command = string.Empty; + Id = string.Empty; + Type = string.Empty; + Value = null; + SubItems = null; + } + /// /// Creates a new MenuItem object /// diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj index c5f22aed70..d093d88f28 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,7 +22,7 @@ - - + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs index a201db7a24..5b5e1626be 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs @@ -1,9 +1,9 @@ using Meadow.Foundation.Displays.UI.InputTypes; +using Meadow.Foundation.Serialization; using Meadow.Peripherals.Displays; using System; using System.Collections; using System.Collections.Generic; -using System.Text.Json; namespace Meadow.Foundation.Displays.UI { @@ -72,7 +72,7 @@ public TextDisplayMenu(ITextDisplay display, MenuItem[] menuItems, bool showBack { var menuString = System.Text.Encoding.Default.GetString(menuJson); - return JsonSerializer.Deserialize(menuString); + return MicroJson.Deserialize(menuString); } void Init(ITextDisplay display, MenuPage menuPage) diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenuTft_Sample/TextDisplayMenuTft_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenuTft_Sample/TextDisplayMenuTft_Sample.csproj index 7271a5fa6c..6ebba269d0 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenuTft_Sample/TextDisplayMenuTft_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenuTft_Sample/TextDisplayMenuTft_Sample.csproj @@ -15,12 +15,12 @@ - - - + + + - + Always diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenuTft_Sample/app.build.yaml b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenuTft_Sample/app.build.yaml new file mode 100644 index 0000000000..f8a9df20ae --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenuTft_Sample/app.build.yaml @@ -0,0 +1,2 @@ +Deploy: + NoLink: [ TextDisplayMenu ] \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenuTft_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenuTft_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenuTft_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/TextDisplayMenu_GameMenu_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/TextDisplayMenu_GameMenu_Sample.csproj index 9461590ad2..4c9b192fb6 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/TextDisplayMenu_GameMenu_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/TextDisplayMenu_GameMenu_Sample.csproj @@ -15,12 +15,12 @@ - - - + + + - + Always diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/app.build.yaml b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/app.build.yaml new file mode 100644 index 0000000000..f8a9df20ae --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/app.build.yaml @@ -0,0 +1,2 @@ +Deploy: + NoLink: [ TextDisplayMenu ] \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/TextDisplayMenu_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/TextDisplayMenu_Sample.csproj index 9461590ad2..4c9b192fb6 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/TextDisplayMenu_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/TextDisplayMenu_Sample.csproj @@ -15,12 +15,12 @@ - - - + + + - + Always diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/app.build.yaml b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/app.build.yaml new file mode 100644 index 0000000000..f8a9df20ae --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/app.build.yaml @@ -0,0 +1,2 @@ +Deploy: + NoLink: [ TextDisplayMenu ] \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font12x16.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font12x16.cs index a831ca1dd7..6de8aa625e 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font12x16.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font12x16.cs @@ -20,102 +20,130 @@ public class Font12x16 : IFont /// private static readonly byte[][] _fontTable = { - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0020( ) - new byte[] {0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0021(!) - new byte[] {0x00, 0x00, 0x00, 0x98, 0x81, 0x19, 0x98, 0x81, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0022(") - new byte[] {0x00, 0x80, 0x19, 0x98, 0x81, 0x19, 0xFE, 0xE7, 0x7F, 0x98, 0x81, 0x19, 0xFE, 0xE7, 0x7F, 0x98, 0x81, 0x19, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00}, //0023(#) - new byte[] {0x00, 0x00, 0x06, 0xF8, 0xC1, 0x3F, 0x6C, 0xC3, 0x06, 0xFC, 0x81, 0x3F, 0x60, 0x03, 0x36, 0x6C, 0xC3, 0x1F, 0xF8, 0x00, 0x06, 0x00, 0x00, 0x00}, //0024($) - new byte[] {0x00, 0xC0, 0x00, 0x12, 0x26, 0x71, 0x92, 0xC3, 0x1C, 0xE0, 0x00, 0x07, 0x38, 0xC3, 0x49, 0x8E, 0x64, 0x48, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00}, //0025(%) - new byte[] {0x00, 0x80, 0x03, 0x7C, 0xC0, 0x06, 0x6C, 0x80, 0x03, 0x7C, 0xE6, 0x6F, 0xC6, 0x63, 0x1C, 0xC6, 0xE3, 0x6F, 0x7C, 0x06, 0x00, 0x00, 0x00, 0x00}, //0026(&) - new byte[] {0x00, 0x80, 0x01, 0x18, 0x80, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0027(') - new byte[] {0x00, 0x00, 0x0C, 0xE0, 0x00, 0x07, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x70, 0x00, 0x0E, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00}, //0028(() - new byte[] {0x00, 0x00, 0x03, 0x70, 0x00, 0x0E, 0xC0, 0x00, 0x0C, 0xC0, 0x00, 0x0C, 0xC0, 0x00, 0x0C, 0xC0, 0x00, 0x07, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, //0029()) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x09, 0x60, 0xC0, 0x3F, 0x60, 0x00, 0x09, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002A(*) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0xFC, 0xC3, 0x3F, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002B(+) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x04, 0x40, 0x00, 0x06}, //002C(,) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xC3, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002D(-) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //002E(.) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x06, 0x70, 0x80, 0x03, 0x1C, 0xE0, 0x00, 0x07, 0x38, 0xC0, 0x01, 0x0E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002F(/) - new byte[] {0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x70, 0x86, 0x67, 0x6C, 0x66, 0x66, 0x66, 0x36, 0xE6, 0x61, 0x0E, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0030(0) - new byte[] {0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0031(1) - new byte[] {0x00, 0xC0, 0x3F, 0xFC, 0x07, 0x60, 0x00, 0x06, 0x60, 0xFC, 0xE7, 0x3F, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //0032(2) - new byte[] {0x00, 0xE0, 0x3F, 0xFE, 0x07, 0x60, 0x00, 0x06, 0x60, 0xFC, 0xC3, 0x3F, 0x00, 0x06, 0x60, 0x00, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0033(3) - new byte[] {0x00, 0x60, 0x30, 0x06, 0x63, 0x30, 0x06, 0x63, 0x30, 0x06, 0xE3, 0x7F, 0xFE, 0x07, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00}, //0034(4) - new byte[] {0x00, 0xE0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0xFE, 0xE3, 0x7F, 0x00, 0x06, 0x60, 0x00, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0035(5) - new byte[] {0x00, 0xC0, 0x3F, 0xFE, 0x63, 0x00, 0x06, 0x60, 0x00, 0xFE, 0xE3, 0x7F, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0036(6) - new byte[] {0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00}, //0037(7) - new byte[] {0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFC, 0xE3, 0x7F, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0038(8) - new byte[] {0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xC7, 0x7F, 0x00, 0x06, 0x60, 0x00, 0xC6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0039(9) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //003A(:) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x04, 0x60, 0x00, 0x00}, //003B(;) - new byte[] {0x00, 0x00, 0x18, 0xC0, 0x01, 0x0E, 0x70, 0x80, 0x03, 0x18, 0x80, 0x01, 0x38, 0x00, 0x07, 0xE0, 0x00, 0x1C, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00}, //003C(<) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xE7, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xE7, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //003D(=) - new byte[] {0x00, 0x80, 0x01, 0x38, 0x00, 0x07, 0xE0, 0x00, 0x1C, 0x80, 0x01, 0x18, 0xC0, 0x01, 0x0E, 0x70, 0x80, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, //003E(>) - new byte[] {0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x60, 0x00, 0x06, 0x60, 0xE0, 0x07, 0x7E, 0x60, 0x00, 0x06, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //003F(?) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0xF6, 0x67, 0x3F, 0x06, 0xE0, 0x7F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00}, //0040(@) - new byte[] {0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xE7, 0x7F, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0041(A) - new byte[] {0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xE3, 0x3F, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0042(B) - new byte[] {0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0043(C) - new byte[] {0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0044(D) - new byte[] {0x00, 0xE0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0xFE, 0xE3, 0x3F, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //0045(E) - new byte[] {0x00, 0xE0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0xFE, 0xE3, 0x3F, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, //0046(F) - new byte[] {0x00, 0xC0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0x86, 0x67, 0x78, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0047(G) - new byte[] {0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xE7, 0x7F, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0048(H) - new byte[] {0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0049(I) - new byte[] {0x00, 0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //004A(J) - new byte[] {0x00, 0x60, 0x18, 0xC6, 0x61, 0x0E, 0x76, 0xE0, 0x03, 0x1E, 0xE0, 0x03, 0x76, 0x60, 0x0E, 0xC6, 0x61, 0x38, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00}, //004B(K) - new byte[] {0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //004C(L) - new byte[] {0x00, 0x60, 0x60, 0x0E, 0xE7, 0x79, 0xFE, 0x67, 0x6F, 0x66, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //004D(M) - new byte[] {0x00, 0x60, 0x60, 0x0E, 0xE6, 0x61, 0x3E, 0x66, 0x67, 0xE6, 0x66, 0x7C, 0x86, 0x67, 0x70, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //004E(N) - new byte[] {0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //004F(O) - new byte[] {0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xE7, 0x3F, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, //0050(P) - new byte[] {0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x01, 0x78, 0x00, 0x06, 0x00}, //0051(Q) - new byte[] {0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xE3, 0x7F, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0052(R) - new byte[] {0x00, 0xC0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0xFE, 0xC3, 0x7F, 0x00, 0x06, 0x60, 0x00, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0053(S) - new byte[] {0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0054(T) - new byte[] {0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0055(U) - new byte[] {0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0xC6, 0x30, 0x0C, 0x83, 0x19, 0x98, 0x01, 0x0F, 0xF0, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0056(V) - new byte[] {0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //0057(W) - new byte[] {0x00, 0x60, 0x60, 0x0E, 0xC7, 0x39, 0xF8, 0x01, 0x0F, 0x60, 0x00, 0x06, 0xF0, 0x80, 0x1F, 0x9C, 0xE3, 0x70, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0058(X) - new byte[] {0x00, 0x60, 0x60, 0x06, 0xC6, 0x30, 0x0C, 0x83, 0x19, 0x98, 0x01, 0x0F, 0xF0, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0059(Y) - new byte[] {0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x70, 0x80, 0x03, 0x1C, 0xE0, 0x00, 0x07, 0x38, 0xC0, 0x01, 0x0E, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //005A(Z) - new byte[] {0x00, 0x00, 0x1F, 0xF0, 0x01, 0x03, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x30, 0x00, 0x1F, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00}, //005B([) - new byte[] {0x00, 0x00, 0x00, 0x06, 0xE0, 0x00, 0x1C, 0x80, 0x03, 0x70, 0x00, 0x0E, 0xC0, 0x01, 0x38, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //005C(\) - new byte[] {0x00, 0x00, 0x1F, 0xF0, 0x01, 0x18, 0x80, 0x01, 0x18, 0x80, 0x01, 0x18, 0x80, 0x01, 0x18, 0x80, 0x01, 0x1F, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00}, //005D(]) - new byte[] {0x60, 0x00, 0x0F, 0xF8, 0xC1, 0x39, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //005E(^) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //005F(_) - new byte[] {0x0C, 0xC0, 0x01, 0x38, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0060(`) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xFC, 0x07, 0x60, 0xFC, 0xE7, 0x7F, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00}, //0061(a) - new byte[] {0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0062(b) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x7F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00}, //0063(c) - new byte[] {0x00, 0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0xC6, 0x7F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00}, //0064(d) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0xFE, 0xE7, 0x7F, 0x06, 0xE0, 0x3F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0065(e) - new byte[] {0x00, 0x00, 0x3F, 0xF8, 0x83, 0x01, 0x18, 0xE0, 0x0F, 0xFE, 0x80, 0x01, 0x18, 0x80, 0x01, 0x18, 0x80, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, //0066(f) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x60, 0xFC, 0xC7, 0x3F}, //0067(g) - new byte[] {0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0068(h) - new byte[] {0x00, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0069(i) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x66, 0x60, 0xFE, 0xC7, 0x3F}, //006A(j) - new byte[] {0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x30, 0x86, 0x63, 0x1C, 0xFE, 0xE0, 0x1F, 0x86, 0x63, 0x70, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //006B(k) - new byte[] {0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //006C(l) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x39, 0xFE, 0x67, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x00, 0x00, 0x00, 0x00}, //006D(m) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //006E(n) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //006F(o) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFE, 0x63, 0x00, 0x06, 0x60, 0x00}, //0070(p) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x60, 0x00, 0x06, 0x60}, //0071(q) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, //0072(r) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0xFE, 0x67, 0x00, 0xFE, 0xC3, 0x7F, 0x00, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0073(s) - new byte[] {0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0xC0, 0x3F, 0xFC, 0x03, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0074(t) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00}, //0075(u) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x06, 0xC6, 0x30, 0x0C, 0x83, 0x19, 0xF8, 0x01, 0x0F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0076(v) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x7F, 0x9C, 0x03, 0x00, 0x00, 0x00, 0x00}, //0077(w) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x0E, 0xC7, 0x39, 0xF8, 0x81, 0x1F, 0x9C, 0xE3, 0x70, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0078(x) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x60, 0xFC, 0xC7, 0x3F}, //0079(y) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x38, 0xE0, 0x81, 0x07, 0x1C, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //007A(z) - new byte[] {0x00, 0x00, 0x18, 0xC0, 0x01, 0x0E, 0x60, 0x00, 0x06, 0x30, 0x00, 0x03, 0x60, 0x00, 0x06, 0xE0, 0x00, 0x1C, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00}, //007B({) - new byte[] {0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00}, //007C(|) - new byte[] {0x00, 0x80, 0x01, 0x38, 0x00, 0x07, 0x60, 0x00, 0x06, 0xC0, 0x00, 0x0C, 0x60, 0x00, 0x06, 0x70, 0x80, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, //007D(}) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x73, 0xFC, 0xE3, 0x1E, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //007E(~) - }; + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0020( ) + new byte[]{0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0021(!) + new byte[]{0x00, 0x00, 0x00, 0x98, 0x81, 0x19, 0x98, 0x81, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0022(") + new byte[]{0x00, 0x80, 0x19, 0x98, 0x81, 0x19, 0xFE, 0xE7, 0x7F, 0x98, 0x81, 0x19, 0xFE, 0xE7, 0x7F, 0x98, 0x81, 0x19, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00}, //0023(#) + new byte[]{0x00, 0x00, 0x06, 0xF8, 0xC1, 0x3F, 0x6C, 0xC3, 0x06, 0xFC, 0x81, 0x3F, 0x60, 0x03, 0x36, 0x6C, 0xC3, 0x1F, 0xF8, 0x00, 0x06, 0x00, 0x00, 0x00}, //0024($) + new byte[]{0x00, 0xC0, 0x00, 0x12, 0x26, 0x71, 0x92, 0xC3, 0x1C, 0xE0, 0x00, 0x07, 0x38, 0xC3, 0x49, 0x8E, 0x64, 0x48, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00}, //0025(%) + new byte[]{0x00, 0x80, 0x03, 0x7C, 0xC0, 0x06, 0x6C, 0x80, 0x03, 0x7C, 0xE6, 0x6F, 0xC6, 0x63, 0x1C, 0xC6, 0xE3, 0x6F, 0x7C, 0x06, 0x00, 0x00, 0x00, 0x00}, //0026(&) + new byte[]{0x00, 0x80, 0x01, 0x18, 0x80, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0027(') + new byte[]{0x00, 0x00, 0x0C, 0xE0, 0x00, 0x07, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x70, 0x00, 0x0E, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00}, //0028(() + new byte[]{0x00, 0x00, 0x03, 0x70, 0x00, 0x0E, 0xC0, 0x00, 0x0C, 0xC0, 0x00, 0x0C, 0xC0, 0x00, 0x0C, 0xC0, 0x00, 0x07, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, //0029()) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x09, 0x60, 0xC0, 0x3F, 0x60, 0x00, 0x09, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002A(*) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0xFC, 0xC3, 0x3F, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002B(+) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x04, 0x40, 0x00, 0x06}, //002C(,) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xC3, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002D(-) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //002E(.) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x06, 0x70, 0x80, 0x03, 0x1C, 0xE0, 0x00, 0x07, 0x38, 0xC0, 0x01, 0x0E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002F(/) + new byte[]{0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x70, 0x86, 0x67, 0x6C, 0x66, 0x66, 0x66, 0x36, 0xE6, 0x61, 0x0E, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0030(0) + new byte[]{0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0031(1) + new byte[]{0x00, 0xC0, 0x3F, 0xFC, 0x07, 0x60, 0x00, 0x06, 0x60, 0xFC, 0xE7, 0x3F, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //0032(2) + new byte[]{0x00, 0xE0, 0x3F, 0xFE, 0x07, 0x60, 0x00, 0x06, 0x60, 0xFC, 0xC3, 0x3F, 0x00, 0x06, 0x60, 0x00, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0033(3) + new byte[]{0x00, 0x60, 0x30, 0x06, 0x63, 0x30, 0x06, 0x63, 0x30, 0x06, 0xE3, 0x7F, 0xFE, 0x07, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00}, //0034(4) + new byte[]{0x00, 0xE0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0xFE, 0xE3, 0x7F, 0x00, 0x06, 0x60, 0x00, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0035(5) + new byte[]{0x00, 0xC0, 0x3F, 0xFE, 0x63, 0x00, 0x06, 0x60, 0x00, 0xFE, 0xE3, 0x7F, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0036(6) + new byte[]{0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00}, //0037(7) + new byte[]{0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFC, 0xE3, 0x7F, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0038(8) + new byte[]{0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xC7, 0x7F, 0x00, 0x06, 0x60, 0x00, 0xC6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0039(9) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //003A(:) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x04, 0x60, 0x00, 0x00}, //003B(;) + new byte[]{0x00, 0x00, 0x18, 0xC0, 0x01, 0x0E, 0x70, 0x80, 0x03, 0x18, 0x80, 0x01, 0x38, 0x00, 0x07, 0xE0, 0x00, 0x1C, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00}, //003C(<) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xE7, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xE7, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //003D(=) + new byte[]{0x00, 0x80, 0x01, 0x38, 0x00, 0x07, 0xE0, 0x00, 0x1C, 0x80, 0x01, 0x18, 0xC0, 0x01, 0x0E, 0x70, 0x80, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, //003E(>) + new byte[]{0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x60, 0x00, 0x06, 0x60, 0xE0, 0x07, 0x7E, 0x60, 0x00, 0x06, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //003F(?) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0xF6, 0x67, 0x3F, 0x06, 0xE0, 0x7F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00}, //0040(@) + new byte[]{0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xE7, 0x7F, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0041(A) + new byte[]{0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xE3, 0x3F, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0042(B) + new byte[]{0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0043(C) + new byte[]{0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0044(D) + new byte[]{0x00, 0xE0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0xFE, 0xE3, 0x3F, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //0045(E) + new byte[]{0x00, 0xE0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0xFE, 0xE3, 0x3F, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, //0046(F) + new byte[]{0x00, 0xC0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0x86, 0x67, 0x78, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0047(G) + new byte[]{0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xE7, 0x7F, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0048(H) + new byte[]{0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0049(I) + new byte[]{0x00, 0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //004A(J) + new byte[]{0x00, 0x60, 0x18, 0xC6, 0x61, 0x0E, 0x76, 0xE0, 0x03, 0x1E, 0xE0, 0x03, 0x76, 0x60, 0x0E, 0xC6, 0x61, 0x38, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00}, //004B(K) + new byte[]{0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //004C(L) + new byte[]{0x00, 0x60, 0x60, 0x0E, 0xE7, 0x79, 0xFE, 0x67, 0x6F, 0x66, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //004D(M) + new byte[]{0x00, 0x60, 0x60, 0x0E, 0xE6, 0x61, 0x3E, 0x66, 0x67, 0xE6, 0x66, 0x7C, 0x86, 0x67, 0x70, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //004E(N) + new byte[]{0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //004F(O) + new byte[]{0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xE7, 0x3F, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, //0050(P) + new byte[]{0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x01, 0x78, 0x00, 0x06, 0x00}, //0051(Q) + new byte[]{0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0xFE, 0xE3, 0x7F, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0052(R) + new byte[]{0x00, 0xC0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0xFE, 0xC3, 0x7F, 0x00, 0x06, 0x60, 0x00, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0053(S) + new byte[]{0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0054(T) + new byte[]{0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0055(U) + new byte[]{0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0xC6, 0x30, 0x0C, 0x83, 0x19, 0x98, 0x01, 0x0F, 0xF0, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0056(V) + new byte[]{0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //0057(W) + new byte[]{0x00, 0x60, 0x60, 0x0E, 0xC7, 0x39, 0xF8, 0x01, 0x0F, 0x60, 0x00, 0x06, 0xF0, 0x80, 0x1F, 0x9C, 0xE3, 0x70, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0058(X) + new byte[]{0x00, 0x60, 0x60, 0x06, 0xC6, 0x30, 0x0C, 0x83, 0x19, 0x98, 0x01, 0x0F, 0xF0, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0059(Y) + new byte[]{0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x70, 0x80, 0x03, 0x1C, 0xE0, 0x00, 0x07, 0x38, 0xC0, 0x01, 0x0E, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //005A(Z) + new byte[]{0x00, 0x00, 0x1F, 0xF0, 0x01, 0x03, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x30, 0x00, 0x1F, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00}, //005B([) + new byte[]{0x00, 0x00, 0x00, 0x06, 0xE0, 0x00, 0x1C, 0x80, 0x03, 0x70, 0x00, 0x0E, 0xC0, 0x01, 0x38, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //005C(\) + new byte[]{0x00, 0x00, 0x1F, 0xF0, 0x01, 0x18, 0x80, 0x01, 0x18, 0x80, 0x01, 0x18, 0x80, 0x01, 0x18, 0x80, 0x01, 0x1F, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00}, //005D(]) + new byte[]{0x60, 0x00, 0x0F, 0xF8, 0xC1, 0x39, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //005E(^) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //005F(_) + new byte[]{0x0C, 0xC0, 0x01, 0x38, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0060(`) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xFC, 0x07, 0x60, 0xFC, 0xE7, 0x7F, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00}, //0061(a) + new byte[]{0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0062(b) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0xFE, 0x67, 0x00, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x7F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00}, //0063(c) + new byte[]{0x00, 0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0xC6, 0x7F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00}, //0064(d) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0xFE, 0xE7, 0x7F, 0x06, 0xE0, 0x3F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //0065(e) + new byte[]{0x00, 0x00, 0x3F, 0xF8, 0x83, 0x01, 0x18, 0xE0, 0x0F, 0xFE, 0x80, 0x01, 0x18, 0x80, 0x01, 0x18, 0x80, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, //0066(f) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x60, 0xFC, 0xC7, 0x3F}, //0067(g) + new byte[]{0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0068(h) + new byte[]{0x00, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0069(i) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x30, 0x00, 0x03, 0x30, 0x00, 0xC3, 0x30, 0xFC, 0x83, 0x1F}, //006A(j) + new byte[]{0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x30, 0x86, 0x63, 0x1C, 0xFE, 0xE0, 0x1F, 0x86, 0x63, 0x70, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //006B(k) + new byte[]{0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //006C(l) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x39, 0xFE, 0x67, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x00, 0x00, 0x00, 0x00}, //006D(m) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //006E(n) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //006F(o) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFE, 0x63, 0x00, 0x06, 0x60, 0x00}, //0070(p) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0xFE, 0x67, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x60, 0x00, 0x06, 0x60}, //0071(q) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0xFE, 0x67, 0x60, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, //0072(r) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0xFE, 0x67, 0x00, 0xFE, 0xC3, 0x7F, 0x00, 0xE6, 0x7F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //0073(s) + new byte[]{0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0xC0, 0x3F, 0xFC, 0x03, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0074(t) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00}, //0075(u) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x06, 0xC6, 0x30, 0x0C, 0x83, 0x19, 0xF8, 0x01, 0x0F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, //0076(v) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x7F, 0x9C, 0x03, 0x00, 0x00, 0x00, 0x00}, //0077(w) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x0E, 0xC7, 0x39, 0xF8, 0x81, 0x1F, 0x9C, 0xE3, 0x70, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, //0078(x) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xFC, 0x07, 0x60, 0xFC, 0xC7, 0x3F}, //0079(y) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x38, 0xE0, 0x81, 0x07, 0x1C, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00}, //007A(z) + new byte[]{0x00, 0x00, 0x18, 0xC0, 0x01, 0x0E, 0x60, 0x00, 0x06, 0x30, 0x00, 0x03, 0x60, 0x00, 0x06, 0xE0, 0x00, 0x1C, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00}, //007B({) + new byte[]{0x00, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x00}, //007C(|) + new byte[]{0x00, 0x80, 0x01, 0x38, 0x00, 0x07, 0x60, 0x00, 0x06, 0xC0, 0x00, 0x0C, 0x60, 0x00, 0x06, 0x70, 0x80, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, //007D(}) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x73, 0xFC, 0xE3, 0x1E, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //007E(~) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00A0( ) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06}, //00A1(¡) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x80, 0x1F, 0xFC, 0xC3, 0x36, 0x6C, 0xC0, 0x06, 0x6C, 0xC3, 0x3F, 0xF8, 0x01, 0x06, 0x00, 0x00, 0x00}, //00A2(¢) + new byte[]{0x00, 0x00, 0x0F, 0xF8, 0x81, 0x19, 0x18, 0xC0, 0x0F, 0xFC, 0x80, 0x01, 0x1C, 0xC0, 0x00, 0x06, 0xE0, 0x3F, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00}, //00A3(£) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x82, 0x16, 0xF0, 0x80, 0x19, 0x98, 0x01, 0x0F, 0x68, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00A4(¤) + new byte[]{0x00, 0x60, 0x60, 0x0E, 0xC7, 0x39, 0xF8, 0x01, 0x0F, 0xFE, 0xE7, 0x7F, 0x60, 0xE0, 0x7F, 0xFE, 0x07, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00}, //00A5(¥) + new byte[]{0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06}, //00A6(¦) + new byte[]{0xFC, 0xE3, 0x7F, 0x06, 0xE6, 0x01, 0xFC, 0xC1, 0x3F, 0x0E, 0x67, 0x60, 0x0E, 0xC7, 0x3F, 0xF8, 0x03, 0x78, 0x06, 0xE6, 0x7F, 0xFC, 0x03, 0x00}, //00A7(§) + new byte[]{0x00, 0x80, 0x19, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00A8(¨) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x80, 0x1F, 0xFC, 0xE3, 0x70, 0x66, 0x66, 0x61, 0x16, 0x66, 0x66, 0x0E, 0xC7, 0x3F, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00}, //00A9(©) + new byte[]{0x00, 0x00, 0x0F, 0x08, 0x01, 0x10, 0xF0, 0x81, 0x10, 0x88, 0x01, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AA(ª) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0xC1, 0x0C, 0x66, 0xC0, 0x0C, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00}, //00AB(«) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x60, 0x00, 0x06, 0x60, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00}, //00AC(¬) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AD(­) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x80, 0x1F, 0xFC, 0x63, 0x60, 0x76, 0x66, 0x69, 0x76, 0x66, 0x69, 0x06, 0xC6, 0x3F, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00}, //00AE(®) + new byte[]{0x00, 0xE0, 0x7F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AF(¯) + new byte[]{0x00, 0x00, 0x0F, 0x90, 0x00, 0x09, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B0(°) + new byte[]{0x00, 0x00, 0x00, 0x60, 0x00, 0x06, 0x60, 0xC0, 0x3F, 0xFC, 0x03, 0x06, 0x60, 0x00, 0x06, 0x00, 0xC0, 0x3F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00}, //00B1(±) + new byte[]{0x00, 0x80, 0x0F, 0x80, 0x80, 0x0F, 0x08, 0x80, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B2(²) + new byte[]{0x00, 0x80, 0x0F, 0x80, 0x00, 0x0F, 0x80, 0x00, 0x08, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B3(³) + new byte[]{0xC0, 0x00, 0x0E, 0x70, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B4(´) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0x66, 0x60, 0x06, 0xE6, 0x7F, 0xF6, 0x67, 0x00, 0x06, 0x60, 0x00}, //00B5(µ) + new byte[]{0x00, 0xC0, 0x7F, 0xFE, 0xE7, 0x19, 0x9E, 0xC1, 0x19, 0x98, 0x81, 0x19, 0x98, 0x81, 0x19, 0x98, 0x81, 0x19, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00}, //00B6(¶) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x0F, 0xF0, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B7(·) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x18, 0x00, 0x07, 0xC0, 0x00, 0x07}, //00B8(¸) + new byte[]{0x00, 0x00, 0x01, 0x10, 0x00, 0x01, 0x10, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B9(¹) + new byte[]{0x00, 0x80, 0x07, 0x84, 0x40, 0x08, 0x84, 0x40, 0x08, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00BA(º) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x80, 0x19, 0x30, 0x83, 0x19, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00}, //00BB(») + }; /// /// Get the binary representation of an ASCII character from the @@ -131,11 +159,20 @@ public byte[] this[char character] get { var index = (byte)character; - if ((index < 32) || (index >= 127)) + if ((index < 32) || (index > 187)) { - return _fontTable[0x20]; + return _fontTable[0]; } - return _fontTable[(byte)character - 0x20]; + if (index > 126 && index < 160) + { + return _fontTable[0];//space + } + if (index > 159) + { + return _fontTable[index - 0x20 - 0x21]; + } + //32 to 126 + return _fontTable[index - 0x20]; } } } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font12x20.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font12x20.cs index f4a0b6f91d..1f85389f05 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font12x20.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font12x20.cs @@ -236,7 +236,7 @@ public byte[] this[char character] } if (index > 159) { - return _fontTable[index - 55]; + return _fontTable[index - 0x20 - 0x21]; } //32 to 126 return _fontTable[index - 0x20]; diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font16x24.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font16x24.cs new file mode 100644 index 0000000000..7b9ebf9476 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font16x24.cs @@ -0,0 +1,179 @@ +namespace Meadow.Foundation.Graphics +{ + /// + /// Represents a 16x24 bitmap font + /// + public class Font16x24 : IFont + { + /// + /// Width of a character in the font. + /// + public int Width => 16; + + /// + /// Height of a character in the font. + /// + public int Height => 24; + + /// + /// Font table containing the binary representation of ASCII characters. + /// + private static readonly byte[][] _fontTable = + { + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0020( ) + new byte[]{0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0021(!) + new byte[]{0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0022(") + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0xFC, 0x3F, 0xFC, 0x3F, 0x60, 0x06, 0x60, 0x06, 0xFC, 0x3F, 0xFC, 0x3F, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0023(#) + new byte[]{0x80, 0x01, 0x80, 0x01, 0xF0, 0x0F, 0xF8, 0x1F, 0x98, 0x19, 0x98, 0x01, 0x98, 0x01, 0x98, 0x01, 0x98, 0x01, 0xF8, 0x0F, 0xF0, 0x1F, 0x80, 0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0x19, 0x80, 0x19, 0x98, 0x19, 0xF8, 0x1F, 0xF0, 0x0F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00}, //0024($) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x60, 0x3C, 0x70, 0x66, 0x38, 0x66, 0x1C, 0x3C, 0x0E, 0x18, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x18, 0x70, 0x3C, 0x38, 0x66, 0x1C, 0x66, 0x0E, 0x3C, 0x06, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0025(%) + new byte[]{0xF0, 0x01, 0xF8, 0x03, 0x18, 0x03, 0x18, 0x03, 0x18, 0x03, 0x18, 0x03, 0x18, 0x03, 0xF8, 0x03, 0xF0, 0x01, 0xFC, 0x07, 0xFE, 0x6F, 0x06, 0x6C, 0x06, 0x7C, 0x06, 0x3C, 0x06, 0x18, 0x06, 0x18, 0x06, 0x3C, 0x06, 0x3C, 0xFE, 0x6F, 0xFC, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0026(&) + new byte[]{0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0027(') + new byte[]{0x00, 0x0E, 0x00, 0x0F, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0x70, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x70, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x0F, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00}, //0028(() + new byte[]{0x38, 0x00, 0x78, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, //0029()) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x38, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xFC, 0x3F, 0xFC, 0x3F, 0xE0, 0x07, 0x70, 0x0E, 0x38, 0x1C, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002A(*) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xF8, 0x1F, 0xF8, 0x1F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002B(+) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00}, //002C(,) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002D(-) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002E(.) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002F(/) + new byte[]{0xF8, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x70, 0x06, 0x78, 0x06, 0x7C, 0x06, 0x6E, 0x06, 0x67, 0x86, 0x63, 0xC6, 0x61, 0xE6, 0x60, 0x76, 0x60, 0x3E, 0x60, 0x1E, 0x60, 0x0E, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0030(0) + new byte[]{0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0031(1) + new byte[]{0xFE, 0x3F, 0xFE, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0032(2) + new byte[]{0xFE, 0x3F, 0xFE, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0xF8, 0x3F, 0xF8, 0x3F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0033(3) + new byte[]{0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0034(4) + new byte[]{0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x3F, 0xFE, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0035(5) + new byte[]{0xFC, 0x3F, 0xFE, 0x3F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0036(6) + new byte[]{0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0037(7) + new byte[]{0xFC, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFC, 0x3F, 0xFC, 0x3F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0038(8) + new byte[]{0xFC, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0xFC, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0039(9) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //003A(:) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00}, //003B(;) + new byte[]{0x00, 0x00, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //003C(<) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //003D(=) + new byte[]{0x00, 0x00, 0x18, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //003E(>) + new byte[]{0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //003F(?) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xF6, 0x7F, 0xF6, 0x3F, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0040(@) + new byte[]{0xFC, 0x3F, 0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0041(A) + new byte[]{0xFE, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x3F, 0xFE, 0x3F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0042(B) + new byte[]{0xFC, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0043(C) + new byte[]{0xFE, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0044(D) + new byte[]{0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x1F, 0xFE, 0x1F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0045(E) + new byte[]{0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x1F, 0xFE, 0x1F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0046(F) + new byte[]{0xFC, 0x7F, 0xFE, 0x7F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x78, 0x06, 0x78, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0047(G) + new byte[]{0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0048(H) + new byte[]{0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0049(I) + new byte[]{0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //004A(J) + new byte[]{0x06, 0x30, 0x06, 0x38, 0x06, 0x1C, 0x06, 0x0E, 0x06, 0x07, 0x86, 0x03, 0xC6, 0x01, 0xE6, 0x00, 0x76, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x76, 0x00, 0xE6, 0x00, 0xC6, 0x01, 0x86, 0x03, 0x06, 0x07, 0x06, 0x0E, 0x06, 0x1C, 0x06, 0x38, 0x06, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //004B(K) + new byte[]{0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //004C(L) + new byte[]{0x06, 0x60, 0x0E, 0x70, 0x1E, 0x78, 0x3E, 0x7C, 0x76, 0x6E, 0xE6, 0x67, 0xC6, 0x63, 0x86, 0x61, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //004D(M) + new byte[]{0x06, 0x60, 0x0E, 0x60, 0x1E, 0x60, 0x3E, 0x60, 0x76, 0x60, 0xE6, 0x60, 0xC6, 0x61, 0x86, 0x63, 0x06, 0x67, 0x06, 0x6E, 0x06, 0x7C, 0x06, 0x78, 0x06, 0x70, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //004E(N) + new byte[]{0xFC, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //004F(O) + new byte[]{0xFE, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0050(P) + new byte[]{0xFC, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x30, 0x00, 0x00}, //0051(Q) + new byte[]{0xFE, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0052(R) + new byte[]{0xFC, 0x7F, 0xFE, 0x7F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x3F, 0xFC, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0053(S) + new byte[]{0xFE, 0x7F, 0xFE, 0x7F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0054(T) + new byte[]{0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0055(U) + new byte[]{0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0056(V) + new byte[]{0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0057(W) + new byte[]{0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x01, 0x80, 0x01, 0xC0, 0x03, 0xE0, 0x07, 0x70, 0x0E, 0x38, 0x1C, 0x1C, 0x38, 0x0E, 0x70, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0058(X) + new byte[]{0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0059(Y) + new byte[]{0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //005A(Z) + new byte[]{0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x07, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //005B([) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //005C(\) + new byte[]{0xE0, 0x03, 0xE0, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //005D(]) + new byte[]{0x80, 0x01, 0xC0, 0x03, 0xE0, 0x07, 0x70, 0x0E, 0x38, 0x1C, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //005E(^) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //005F(_) + new byte[]{0x0C, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0060(`) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0xFC, 0x7F, 0x00, 0x60, 0x00, 0x60, 0xFC, 0x7F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0061(a) + new byte[]{0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0062(b) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0xFE, 0x7F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0063(c) + new byte[]{0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0xFC, 0x7F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0064(d) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x3F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0065(e) + new byte[]{0x00, 0x7F, 0x80, 0x7F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xF0, 0x3F, 0xF0, 0x3F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0066(f) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x7F, 0x00, 0x60, 0x00, 0x60, 0xFC, 0x7F, 0xFC, 0x3F}, //0067(g) + new byte[]{0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0068(h) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0069(i) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0xF8, 0x1F, 0xF0, 0x0F}, //006A(j) + new byte[]{0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x06, 0x0C, 0x07, 0x8C, 0x03, 0xCC, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0xCC, 0x03, 0x0C, 0x07, 0x0C, 0x0E, 0x0C, 0x1C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //006B(k) + new byte[]{0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //006C(l) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x3E, 0xFE, 0x7F, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //006D(m) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //006E(n) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //006F(o) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00}, //0070(p) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60}, //0071(q) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0072(r) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0xFE, 0x7F, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0073(s) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFE, 0x7F, 0xFE, 0x7F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0074(t) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0075(u) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0076(v) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0xFE, 0x7F, 0x7C, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0077(w) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x0E, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xF0, 0x0F, 0x38, 0x1C, 0x1C, 0x38, 0x0E, 0x70, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0078(x) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x7F, 0x00, 0x60, 0x00, 0x60, 0xFC, 0x7F, 0xFC, 0x3F}, //0079(y) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0x70, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //007A(z) + new byte[]{0x00, 0x0C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x01, 0x80, 0x01, 0x80, 0x03, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x0C}, //007B({) + new byte[]{0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01}, //007C(|) + new byte[]{0x60, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0x80, 0x01, 0x80, 0x03, 0x00, 0x03, 0x00, 0x07, 0x00, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0x60, 0x00}, //007D(}) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x30, 0xF8, 0x39, 0x9C, 0x1F, 0x0C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //007E(~) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00A0( ) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01}, //00A1(¡) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFC, 0x7F, 0xFE, 0x7F, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0xFE, 0x7F, 0xFC, 0x7F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00}, //00A2(¢) + new byte[]{0x80, 0x3F, 0xC0, 0x7F, 0xC0, 0x60, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xF8, 0x1F, 0xF8, 0x1F, 0xC0, 0x00, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00A3(£) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x4F, 0xFC, 0x3F, 0x1C, 0x38, 0x0E, 0x70, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x1C, 0x38, 0xFC, 0x3F, 0xF2, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00A4(¤) + new byte[]{0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x03, 0xFE, 0x7F, 0xFE, 0x7F, 0x80, 0x01, 0x80, 0x01, 0xFE, 0x7F, 0xFE, 0x7F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00A5(¥) + new byte[]{0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01}, //00A6(¦) + new byte[]{0xFC, 0x3F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x00, 0x06, 0x00, 0x1C, 0x00, 0xFC, 0x1F, 0xFE, 0x3F, 0x1E, 0x70, 0x0E, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x70, 0x0E, 0x78, 0xFC, 0x7F, 0xF8, 0x3F, 0x00, 0x38, 0x00, 0x60, 0x00, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFC, 0x3F}, //00A7(§) + new byte[]{0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00A8(¨) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x02, 0x40, 0xF2, 0x5F, 0xFA, 0x5F, 0x1A, 0x40, 0x1A, 0x40, 0x1A, 0x40, 0x1A, 0x40, 0x1A, 0x40, 0x1A, 0x40, 0xFA, 0x5F, 0xF2, 0x5F, 0x02, 0x40, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00A9(©) + new byte[]{0xE0, 0x07, 0x00, 0x08, 0x00, 0x08, 0xE0, 0x0F, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AA(ª) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x18, 0x60, 0x0C, 0x30, 0x06, 0x18, 0x03, 0x30, 0x06, 0x60, 0x0C, 0xC0, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AB(«) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AC(¬) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AD(­) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x02, 0x40, 0xFA, 0x4F, 0xFA, 0x5F, 0x1A, 0x58, 0x1A, 0x58, 0xFA, 0x4F, 0xFA, 0x4F, 0x1A, 0x58, 0x1A, 0x58, 0x1A, 0x58, 0x1A, 0x58, 0x02, 0x40, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AE(®) + new byte[]{0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AF(¯) + new byte[]{0xE0, 0x03, 0x30, 0x06, 0x10, 0x04, 0x10, 0x04, 0x10, 0x04, 0x30, 0x06, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B0(°) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFC, 0x3F, 0xFC, 0x3F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B1(±) + new byte[]{0xE0, 0x07, 0x20, 0x04, 0x00, 0x04, 0xE0, 0x07, 0x20, 0x00, 0x20, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B2(²) + new byte[]{0xE0, 0x07, 0x00, 0x04, 0x00, 0x04, 0xC0, 0x07, 0x00, 0x04, 0x00, 0x04, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B3(³) + new byte[]{0x00, 0x06, 0x00, 0x07, 0x80, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B4(´) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x3F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00}, //00B5(µ) + new byte[]{0xFC, 0x7F, 0xFE, 0x7F, 0x36, 0x0C, 0x36, 0x0C, 0x36, 0x0C, 0x3E, 0x0C, 0x3C, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B6(¶) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xC0, 0x03, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B7(·) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x03, 0x00, 0x06, 0x00, 0x06, 0xE0, 0x07, 0xE0, 0x03}, //00B8(¸) + new byte[]{0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B9(¹) + new byte[]{0xE0, 0x03, 0x30, 0x06, 0x10, 0x04, 0x10, 0x04, 0x10, 0x04, 0x30, 0x06, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00BA(º) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x03, 0x30, 0x06, 0x60, 0x0C, 0xC0, 0x18, 0x60, 0x0C, 0x30, 0x06, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00BB(») + }; + + /// + /// Get the binary representation of an ASCII character from the + /// font table. + /// + /// Character to look up. + /// + /// Byte array containing the rows of pixels in the character. Unknown byte codes will result in a space being + /// returned. + /// + public byte[] this[char character] + { + get + { + var index = (byte)character; + if ((index < 32) || (index > 187)) + { + return _fontTable[0]; + } + if (index > 126 && index < 160) + { + return _fontTable[0];//space + } + if (index > 159) + { + return _fontTable[index - 0x20 - 0x21]; + } + //32 to 126 + return _fontTable[index - 0x20]; + } + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font4x6.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font4x6.cs index c3a24353cc..f1b40fbafc 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font4x6.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font4x6.cs @@ -134,7 +134,7 @@ public byte[] this[char character] var index = (byte)character; if ((index < 32) || (index > 127)) { - return _fontTable[0x20]; + return _fontTable[0]; } return _fontTable[(byte)character - 0x20]; } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font4x8.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font4x8.cs index 98c918e16a..1f26a16c8d 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font4x8.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font4x8.cs @@ -134,7 +134,7 @@ public byte[] this[char character] var index = (byte)character; if ((index < 32) || (index > 127)) { - return _fontTable[0x20]; + return _fontTable[0]; } return _fontTable[(byte)character - 0x20]; } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font6x8.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font6x8.cs index 707f8a0c8f..e199744702 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font6x8.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font6x8.cs @@ -133,7 +133,7 @@ public byte[] this[char character] var index = (byte)character; if ((index < 32) || (index >= 127)) { - return _fontTable[0x20]; + return _fontTable[0]; } return _fontTable[(byte)character - 0x20]; } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font8x12.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font8x12.cs index ac73be1c80..f3e8e32a9e 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font8x12.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font8x12.cs @@ -20,103 +20,130 @@ public class Font8x12 : IFont /// private static readonly byte[][] _fontTable = { - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, // U+0020 (space) - new byte[] {0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, }, // U+0021 (!) - new byte[] {0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, // U+0022 (") - new byte[] {0x00, 0x14, 0x14, 0x7f, 0x14, 0x7f, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, }, // U+0023 (#) - new byte[] {0x08, 0x3e, 0x49, 0x09, 0x3e, 0x48, 0x49, 0x3e, 0x08, 0x00, 0x00, 0x00, }, // U+0024 ($) - new byte[] {0x02, 0x45, 0x22, 0x10, 0x08, 0x04, 0x22, 0x51, 0x20, 0x00, 0x00, 0x00, }, // U+0025 (%) - new byte[] {0x00, 0x04, 0x0a, 0x0a, 0x04, 0x2a, 0x11, 0x11, 0x2e, 0x00, 0x00, 0x00, }, // U+0026 (&) - new byte[] {0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, // U+0027 (') - new byte[] {0x08, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, }, // U+0028 (() - new byte[] {0x08, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, }, // U+0029 ()) - new byte[] {0x00, 0x08, 0x2a, 0x1c, 0x7f, 0x1c, 0x2a, 0x08, 0x00, 0x00, 0x00, 0x00, }, // U+002A (*) - new byte[] {0x00, 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, }, // U+002B (+) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, }, // U+002C (,) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, // U+002D (-) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, }, // U+002E (.) - new byte[] {0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, }, // U+002F (/) - new byte[] {0x3e, 0x41, 0x61, 0x51, 0x49, 0x45, 0x43, 0x41, 0x3e, 0x00, 0x00, 0x00, }, // U+0030 (0) - new byte[] {0x08, 0x0c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c, 0x00, 0x00, 0x00, }, // U+0031 (1) - new byte[] {0x3e, 0x41, 0x40, 0x20, 0x18, 0x04, 0x02, 0x01, 0x7f, 0x00, 0x00, 0x00, }, // U+0032 (2) - new byte[] {0x3e, 0x41, 0x40, 0x40, 0x3c, 0x40, 0x40, 0x41, 0x3e, 0x00, 0x00, 0x00, }, // U+0033 (3) - new byte[] {0x20, 0x30, 0x28, 0x24, 0x22, 0x7f, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, }, // U+0034 (4) - new byte[] {0x7f, 0x01, 0x01, 0x01, 0x3f, 0x40, 0x40, 0x41, 0x3e, 0x00, 0x00, 0x00, }, // U+0035 (5) - new byte[] {0x3e, 0x41, 0x01, 0x01, 0x3f, 0x41, 0x41, 0x41, 0x3e, 0x00, 0x00, 0x00, }, // U+0036 (6) - new byte[] {0x7f, 0x40, 0x20, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, }, // U+0037 (7) - new byte[] {0x3e, 0x41, 0x41, 0x41, 0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00, 0x00, 0x00, }, // U+0038 (8) - new byte[] {0x3e, 0x41, 0x41, 0x41, 0x7e, 0x40, 0x40, 0x41, 0x3e, 0x00, 0x00, 0x00, }, // U+0039 (9) - new byte[] {0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, }, // U+003A (:) - new byte[] {0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, }, // U+003B (//) - new byte[] {0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00, }, // U+003C (<) - new byte[] {0x00, 0x00, 0x00, 0x7f, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, // U+003D (=) - new byte[] {0x04, 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, }, // U+003E (>) - new byte[] {0x3e, 0x41, 0x41, 0x20, 0x10, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, }, // U+003F (?) - new byte[] {0x3e, 0x41, 0x59, 0x55, 0x55, 0x25, 0x1d, 0x41, 0x3e, 0x00, 0x00, 0x00, }, // U+0040 (@) - new byte[] {0x1c, 0x22, 0x41, 0x41, 0x7f, 0x41, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, }, // U+0041 (A) - new byte[] {0x3f, 0x41, 0x41, 0x41, 0x3f, 0x41, 0x41, 0x41, 0x3f, 0x00, 0x00, 0x00, }, // U+0042 (B) - new byte[] {0x3c, 0x42, 0x01, 0x01, 0x01, 0x01, 0x01, 0x42, 0x3c, 0x00, 0x00, 0x00, }, // U+0043 (C) - new byte[] {0x3f, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x00, 0x00, 0x00, }, // U+0044 (D) - new byte[] {0x7f, 0x01, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00, }, // U+0045 (E) - new byte[] {0x7f, 0x01, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, }, // U+0046 (F) - new byte[] {0x3c, 0x42, 0x01, 0x01, 0x01, 0x71, 0x41, 0x42, 0x3c, 0x00, 0x00, 0x00, }, // U+0047 (G) - new byte[] {0x41, 0x41, 0x41, 0x41, 0x7f, 0x41, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, }, // U+0048 (H) - new byte[] {0x1c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c, 0x00, 0x00, 0x00, }, // U+0049 (I) - new byte[] {0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x0e, 0x00, 0x00, 0x00, }, // U+004A (J) - new byte[] {0x21, 0x11, 0x09, 0x05, 0x03, 0x05, 0x09, 0x11, 0x21, 0x00, 0x00, 0x00, }, // U+004B (K) - new byte[] {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x00, 0x00, 0x00, }, // U+004C (L) - new byte[] {0x41, 0x63, 0x55, 0x49, 0x41, 0x41, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, }, // U+004D (M) - new byte[] {0x41, 0x41, 0x43, 0x45, 0x49, 0x51, 0x61, 0x41, 0x41, 0x00, 0x00, 0x00, }, // U+004E (N) - new byte[] {0x1c, 0x22, 0x41, 0x41, 0x41, 0x41, 0x41, 0x22, 0x1c, 0x00, 0x00, 0x00, }, // U+004F (O) - new byte[] {0x3f, 0x41, 0x41, 0x41, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, }, // U+0050 (P) - new byte[] {0x1c, 0x22, 0x41, 0x41, 0x41, 0x41, 0x51, 0x22, 0x5c, 0x00, 0x00, 0x00, }, // U+0051 (Q) - new byte[] {0x3f, 0x41, 0x41, 0x41, 0x3f, 0x41, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, }, // U+0052 (R) - new byte[] {0x3e, 0x41, 0x01, 0x01, 0x3e, 0x40, 0x40, 0x41, 0x3e, 0x00, 0x00, 0x00, }, // U+0053 (S) - new byte[] {0x7f, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, }, // U+0054 (T) - new byte[] {0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x3e, 0x00, 0x00, 0x00, }, // U+0055 (U) - new byte[] {0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00, }, // U+0056 (V) - new byte[] {0x41, 0x41, 0x41, 0x41, 0x41, 0x49, 0x55, 0x63, 0x41, 0x00, 0x00, 0x00, }, // U+0057 (W) - new byte[] {0x41, 0x41, 0x22, 0x14, 0x08, 0x14, 0x22, 0x41, 0x41, 0x00, 0x00, 0x00, }, // U+0058 (X) - new byte[] {0x41, 0x41, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, }, // U+0059 (Y) - new byte[] {0x7f, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x7f, 0x00, 0x00, 0x00, }, // U+005A (Z) - new byte[] {0x3c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x3c, 0x00, 0x00, 0x00, }, // U+005B ([) - new byte[] {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, }, // U+005C (\) - new byte[] {0x1e, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1e, 0x00, 0x00, 0x00, }, // U+005D (]) - new byte[] {0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, // U+005E (^) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, }, // U+005F (_) - new byte[] {0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, // U+0060 (`) - new byte[] {0x00, 0x00, 0x00, 0x1c, 0x22, 0x21, 0x21, 0x31, 0x2e, 0x00, 0x00, 0x00, }, // U+0061 (a) - new byte[] {0x01, 0x01, 0x01, 0x1d, 0x23, 0x21, 0x21, 0x23, 0x1d, 0x00, 0x00, 0x00, }, // U+0062 (b) - new byte[] {0x00, 0x00, 0x00, 0x1e, 0x21, 0x01, 0x01, 0x21, 0x1e, 0x00, 0x00, 0x00, }, // U+0063 (c) - new byte[] {0x20, 0x20, 0x20, 0x2e, 0x31, 0x21, 0x21, 0x31, 0x2e, 0x00, 0x00, 0x00, }, // U+0064 (d) - new byte[] {0x00, 0x00, 0x00, 0x1e, 0x21, 0x21, 0x3f, 0x01, 0x3e, 0x00, 0x00, 0x00, }, // U+0065 (e) - new byte[] {0x18, 0x04, 0x04, 0x04, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, }, // U+0066 (f) - new byte[] {0x00, 0x00, 0x00, 0x2c, 0x32, 0x21, 0x21, 0x21, 0x3e, 0x20, 0x21, 0x1e, }, // U+0067 (g) - new byte[] {0x01, 0x01, 0x01, 0x0d, 0x13, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, }, // U+0068 (h) - new byte[] {0x00, 0x08, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, }, // U+0069 (i) - new byte[] {0x00, 0x08, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x06, 0x00, }, // U+006A (j) - new byte[] {0x01, 0x01, 0x11, 0x09, 0x05, 0x03, 0x05, 0x09, 0x11, 0x00, 0x00, 0x00, }, // U+006B (k) - new byte[] {0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, }, // U+006C (l) - new byte[] {0x00, 0x00, 0x00, 0x36, 0x49, 0x49, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, }, // U+006D (m) - new byte[] {0x00, 0x00, 0x00, 0x1d, 0x23, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, }, // U+006E (n) - new byte[] {0x00, 0x00, 0x00, 0x1e, 0x21, 0x21, 0x21, 0x21, 0x1e, 0x00, 0x00, 0x00, }, // U+006F (o) - new byte[] {0x00, 0x00, 0x00, 0x1d, 0x23, 0x21, 0x21, 0x23, 0x1d, 0x01, 0x01, 0x01, }, // U+0070 (p) - new byte[] {0x00, 0x00, 0x00, 0x2e, 0x31, 0x21, 0x21, 0x31, 0x2e, 0x20, 0x20, 0x20, }, // U+0071 (q) - new byte[] {0x00, 0x00, 0x00, 0x1d, 0x23, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, }, // U+0072 (r) - new byte[] {0x00, 0x00, 0x00, 0x1e, 0x21, 0x06, 0x18, 0x21, 0x1e, 0x00, 0x00, 0x00, }, // U+0073 (s) - new byte[] {0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, }, // U+0074 (t) - new byte[] {0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x1e, 0x00, 0x00, 0x00, }, // U+0075 (u) - new byte[] {0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x0a, 0x04, 0x00, 0x00, 0x00, }, // U+0076 (v) - new byte[] {0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0x49, 0x49, 0x36, 0x00, 0x00, 0x00, }, // U+0077 (w) - new byte[] {0x00, 0x00, 0x00, 0x21, 0x12, 0x0c, 0x0c, 0x12, 0x21, 0x00, 0x00, 0x00, }, // U+0078 (x) - new byte[] {0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3e, 0x20, 0x21, 0x1e, }, // U+0079 (y) - new byte[] {0x00, 0x00, 0x00, 0x3f, 0x10, 0x08, 0x04, 0x02, 0x3f, 0x00, 0x00, 0x00, }, // U+007A (z) - new byte[] {0x18, 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x04, 0x18, 0x00, 0x00, 0x00, }, // U+007B ({) - new byte[] {0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, }, // U+007C (|) - new byte[] {0x0c, 0x10, 0x10, 0x10, 0x20, 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, }, // U+007D (}) - new byte[] {0x26, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, // U+007E (~) - new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, // U+007F - }; + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0020( ) + new byte[]{0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, //0021(!) + new byte[]{0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0022(") + new byte[]{0x00, 0x14, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00}, //0023(#) + new byte[]{0x08, 0x3E, 0x49, 0x09, 0x3E, 0x48, 0x49, 0x3E, 0x08, 0x00, 0x00, 0x00}, //0024($) + new byte[]{0x02, 0x45, 0x22, 0x10, 0x08, 0x04, 0x22, 0x51, 0x20, 0x00, 0x00, 0x00}, //0025(%) + new byte[]{0x00, 0x04, 0x0A, 0x0A, 0x04, 0x2A, 0x11, 0x11, 0x2E, 0x00, 0x00, 0x00}, //0026(&) + new byte[]{0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0027(') + new byte[]{0x08, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00}, //0028(() + new byte[]{0x08, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00}, //0029()) + new byte[]{0x00, 0x08, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x08, 0x00, 0x00, 0x00, 0x00}, //002A(*) + new byte[]{0x00, 0x08, 0x08, 0x08, 0x7F, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00}, //002B(+) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00}, //002C(,) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //002D(-) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00}, //002E(.) + new byte[]{0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00}, //002F(/) + new byte[]{0x3E, 0x41, 0x61, 0x51, 0x49, 0x45, 0x43, 0x41, 0x3E, 0x00, 0x00, 0x00}, //0030(0) + new byte[]{0x08, 0x0C, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00, 0x00, 0x00}, //0031(1) + new byte[]{0x3E, 0x41, 0x40, 0x20, 0x18, 0x04, 0x02, 0x01, 0x7F, 0x00, 0x00, 0x00}, //0032(2) + new byte[]{0x3E, 0x41, 0x40, 0x40, 0x3C, 0x40, 0x40, 0x41, 0x3E, 0x00, 0x00, 0x00}, //0033(3) + new byte[]{0x20, 0x30, 0x28, 0x24, 0x22, 0x7F, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00}, //0034(4) + new byte[]{0x7F, 0x01, 0x01, 0x01, 0x3F, 0x40, 0x40, 0x41, 0x3E, 0x00, 0x00, 0x00}, //0035(5) + new byte[]{0x3E, 0x41, 0x01, 0x01, 0x3F, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x00, 0x00}, //0036(6) + new byte[]{0x7F, 0x40, 0x20, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00}, //0037(7) + new byte[]{0x3E, 0x41, 0x41, 0x41, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x00, 0x00}, //0038(8) + new byte[]{0x3E, 0x41, 0x41, 0x41, 0x7E, 0x40, 0x40, 0x41, 0x3E, 0x00, 0x00, 0x00}, //0039(9) + new byte[]{0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00}, //003A(:) + new byte[]{0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00}, //003B(;) + new byte[]{0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00}, //003C(<) + new byte[]{0x00, 0x00, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //003D(=) + new byte[]{0x04, 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00}, //003E(>) + new byte[]{0x3E, 0x41, 0x41, 0x40, 0x30, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, //003F(?) + new byte[]{0x3E, 0x41, 0x59, 0x55, 0x55, 0x25, 0x1D, 0x41, 0x3E, 0x00, 0x00, 0x00}, //0040(@) + new byte[]{0x3E, 0x41, 0x41, 0x41, 0x7F, 0x41, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00}, //0041(A) + new byte[]{0x3F, 0x41, 0x41, 0x41, 0x3F, 0x41, 0x41, 0x41, 0x3F, 0x00, 0x00, 0x00}, //0042(B) + new byte[]{0x3E, 0x41, 0x01, 0x01, 0x01, 0x01, 0x01, 0x41, 0x3E, 0x00, 0x00, 0x00}, //0043(C) + new byte[]{0x3F, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x3F, 0x00, 0x00, 0x00}, //0044(D) + new byte[]{0x7F, 0x01, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x7F, 0x00, 0x00, 0x00}, //0045(E) + new byte[]{0x7F, 0x01, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00}, //0046(F) + new byte[]{0x3E, 0x41, 0x01, 0x01, 0x01, 0x71, 0x41, 0x41, 0x3E, 0x00, 0x00, 0x00}, //0047(G) + new byte[]{0x41, 0x41, 0x41, 0x41, 0x7F, 0x41, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00}, //0048(H) + new byte[]{0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00}, //0049(I) + new byte[]{0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x1C, 0x00, 0x00, 0x00}, //004A(J) + new byte[]{0x21, 0x11, 0x09, 0x05, 0x03, 0x05, 0x09, 0x11, 0x21, 0x00, 0x00, 0x00}, //004B(K) + new byte[]{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x7F, 0x00, 0x00, 0x00}, //004C(L) + new byte[]{0x41, 0x63, 0x55, 0x49, 0x41, 0x41, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00}, //004D(M) + new byte[]{0x41, 0x41, 0x43, 0x45, 0x49, 0x51, 0x61, 0x41, 0x41, 0x00, 0x00, 0x00}, //004E(N) + new byte[]{0x3E, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x00, 0x00}, //004F(O) + new byte[]{0x3F, 0x41, 0x41, 0x41, 0x3F, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00}, //0050(P) + new byte[]{0x3E, 0x41, 0x41, 0x41, 0x41, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x00, 0x00}, //0051(Q) + new byte[]{0x3F, 0x41, 0x41, 0x41, 0x3F, 0x41, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00}, //0052(R) + new byte[]{0x3E, 0x41, 0x01, 0x01, 0x3E, 0x40, 0x40, 0x41, 0x3E, 0x00, 0x00, 0x00}, //0053(S) + new byte[]{0x7F, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00}, //0054(T) + new byte[]{0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x00, 0x00}, //0055(U) + new byte[]{0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00}, //0056(V) + new byte[]{0x41, 0x41, 0x41, 0x41, 0x41, 0x49, 0x55, 0x63, 0x41, 0x00, 0x00, 0x00}, //0057(W) + new byte[]{0x41, 0x41, 0x22, 0x14, 0x08, 0x14, 0x22, 0x41, 0x41, 0x00, 0x00, 0x00}, //0058(X) + new byte[]{0x41, 0x41, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00}, //0059(Y) + new byte[]{0x7F, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x7F, 0x00, 0x00, 0x00}, //005A(Z) + new byte[]{0x3C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x3C, 0x00, 0x00, 0x00}, //005B([) + new byte[]{0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00}, //005C(\) + new byte[]{0x1E, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1E, 0x00, 0x00, 0x00}, //005D(]) + new byte[]{0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //005E(^) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00}, //005F(_) + new byte[]{0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0060(`) + new byte[]{0x00, 0x00, 0x00, 0x1E, 0x20, 0x3E, 0x21, 0x21, 0x3E, 0x00, 0x00, 0x00}, //0061(a) + new byte[]{0x01, 0x01, 0x01, 0x1F, 0x21, 0x21, 0x21, 0x21, 0x1F, 0x00, 0x00, 0x00}, //0062(b) + new byte[]{0x00, 0x00, 0x00, 0x3E, 0x01, 0x01, 0x01, 0x01, 0x3E, 0x00, 0x00, 0x00}, //0063(c) + new byte[]{0x20, 0x20, 0x20, 0x3E, 0x21, 0x21, 0x21, 0x21, 0x3E, 0x00, 0x00, 0x00}, //0064(d) + new byte[]{0x00, 0x00, 0x00, 0x1E, 0x21, 0x21, 0x3F, 0x01, 0x3E, 0x00, 0x00, 0x00}, //0065(e) + new byte[]{0x38, 0x04, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00}, //0066(f) + new byte[]{0x00, 0x00, 0x00, 0x1E, 0x21, 0x21, 0x21, 0x21, 0x3E, 0x20, 0x20, 0x1E}, //0067(g) + new byte[]{0x01, 0x01, 0x01, 0x1F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00}, //0068(h) + new byte[]{0x00, 0x08, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00}, //0069(i) + new byte[]{0x00, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x12, 0x0C, 0x00}, //006A(j) + new byte[]{0x01, 0x01, 0x11, 0x09, 0x05, 0x03, 0x05, 0x09, 0x11, 0x00, 0x00, 0x00}, //006B(k) + new byte[]{0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00}, //006C(l) + new byte[]{0x00, 0x00, 0x00, 0x37, 0x49, 0x49, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00}, //006D(m) + new byte[]{0x00, 0x00, 0x00, 0x1F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00}, //006E(n) + new byte[]{0x00, 0x00, 0x00, 0x1E, 0x21, 0x21, 0x21, 0x21, 0x1E, 0x00, 0x00, 0x00}, //006F(o) + new byte[]{0x00, 0x00, 0x00, 0x1F, 0x21, 0x21, 0x21, 0x21, 0x1F, 0x01, 0x01, 0x01}, //0070(p) + new byte[]{0x00, 0x00, 0x00, 0x3E, 0x21, 0x21, 0x21, 0x21, 0x3E, 0x20, 0x20, 0x20}, //0071(q) + new byte[]{0x00, 0x00, 0x00, 0x1F, 0x21, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00}, //0072(r) + new byte[]{0x00, 0x00, 0x00, 0x1E, 0x21, 0x06, 0x18, 0x21, 0x1E, 0x00, 0x00, 0x00}, //0073(s) + new byte[]{0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00}, //0074(t) + new byte[]{0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x1E, 0x00, 0x00, 0x00}, //0075(u) + new byte[]{0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x0A, 0x04, 0x00, 0x00, 0x00}, //0076(v) + new byte[]{0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0x49, 0x49, 0x36, 0x00, 0x00, 0x00}, //0077(w) + new byte[]{0x00, 0x00, 0x00, 0x21, 0x12, 0x0C, 0x0C, 0x12, 0x21, 0x00, 0x00, 0x00}, //0078(x) + new byte[]{0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3E, 0x20, 0x20, 0x1E}, //0079(y) + new byte[]{0x00, 0x00, 0x00, 0x3F, 0x10, 0x08, 0x04, 0x02, 0x3F, 0x00, 0x00, 0x00}, //007A(z) + new byte[]{0x18, 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x04, 0x18, 0x00, 0x00, 0x00}, //007B({) + new byte[]{0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00}, //007C(|) + new byte[]{0x0C, 0x10, 0x10, 0x10, 0x20, 0x10, 0x10, 0x10, 0x0C, 0x00, 0x00, 0x00}, //007D(}) + new byte[]{0x26, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //007E(~) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00A0(�) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08}, //00A1(�) + new byte[]{0x08, 0x08, 0x3E, 0x09, 0x09, 0x09, 0x09, 0x09, 0x3E, 0x08, 0x08, 0x00}, //00A2(�) + new byte[]{0x38, 0x44, 0x04, 0x1F, 0x04, 0x04, 0x04, 0x02, 0x7F, 0x00, 0x00, 0x00}, //00A3(�) + new byte[]{0x00, 0x00, 0x41, 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x41, 0x00, 0x00, 0x00}, //00A4(�) + new byte[]{0x41, 0x22, 0x14, 0x08, 0x7F, 0x08, 0x7F, 0x08, 0x08, 0x00, 0x00, 0x00}, //00A5(�) + new byte[]{0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08}, //00A6(�) + new byte[]{0x3E, 0x41, 0x03, 0x1D, 0x21, 0x42, 0x5C, 0x60, 0x41, 0x3E, 0x00, 0x00}, //00A7(�) + new byte[]{0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00A8(�) + new byte[]{0x00, 0x00, 0x3E, 0x41, 0x5D, 0x45, 0x5D, 0x41, 0x3E, 0x00, 0x00, 0x00}, //00A9(�) + new byte[]{0x1C, 0x20, 0x3C, 0x22, 0x22, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AA(�) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x44, 0x22, 0x11, 0x22, 0x44, 0x00, 0x00, 0x00}, //00AB(�) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00}, //00AC(�) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AD(�) + new byte[]{0x00, 0x00, 0x3E, 0x41, 0x4D, 0x4D, 0x55, 0x41, 0x3E, 0x00, 0x00, 0x00}, //00AE(�) + new byte[]{0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00AF(�) + new byte[]{0x0C, 0x12, 0x12, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B0(�) + new byte[]{0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00}, //00B1(�) + new byte[]{0x1E, 0x10, 0x1E, 0x02, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B2(�) + new byte[]{0x1E, 0x10, 0x1C, 0x10, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B3(�) + new byte[]{0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B4(�) + new byte[]{0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x31, 0x2F, 0x01, 0x01, 0x01}, //00B5(�) + new byte[]{0x7C, 0x26, 0x27, 0x26, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00}, //00B6(�) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B7(�) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0C, 0x10, 0x0C}, //00B8(�) + new byte[]{0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00B9(�) + new byte[]{0x04, 0x0A, 0x0A, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //00BA(�) + new byte[]{0x00, 0x00, 0x00, 0x00, 0x09, 0x12, 0x24, 0x12, 0x09, 0x00, 0x00, 0x00}, //00BB(�) + }; /// /// Get the binary representation of an ASCII character from the @@ -124,7 +151,7 @@ public class Font8x12 : IFont /// /// Character to look up. /// - /// Byte array containing the rows of pixels in the character. Unknown byte codes will result in a space being + /// Byte array containing the rows of pixels in the character. Unknown byte codes will result in a space being /// returned. /// public byte[] this[char character] @@ -132,13 +159,21 @@ public byte[] this[char character] get { var index = (byte)character; - if ((index < 32) || (index > 127)) + if ((index < 32) || (index > 187)) { - return _fontTable[0x20]; + return _fontTable[0]; } - return _fontTable[(byte)character - 0x20]; + if (index > 126 && index < 160) + { + return _fontTable[0];//space + } + if (index > 159) + { + return _fontTable[index - 0x20 - 0x21]; + } + //32 to 126 + return _fontTable[index - 0x20]; } } } -} - +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font8x16.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font8x16.cs index a9cc9e9f07..4492c59248 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font8x16.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Fonts/Font8x16.cs @@ -134,7 +134,7 @@ public byte[] this[char character] var index = (byte)character; if ((index < 32) || (index > 127)) { - return _fontTable[0x20]; + return _fontTable[0]; } return _fontTable[(byte)character - 0x20]; } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Graphics.MicroGraphics.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Graphics.MicroGraphics.csproj index 681bcfac9b..8b949e6ae4 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Graphics.MicroGraphics.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Graphics.MicroGraphics.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Image.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Image.cs index e6f71d6242..43598373ae 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Image.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Image.cs @@ -71,6 +71,15 @@ public static Image LoadFromResource(string name) throw new ArgumentException("Requested resource not found"); } + /// + /// Load an image from a Stream + /// + /// The resource stream + public static Image LoadFromStream(Stream stream) + { + return new Image(stream); + } + private Image(Stream source) { // determine type var buffer = new byte[2]; @@ -133,30 +142,17 @@ private void LoadBitmap(Stream source) var compression = BitConverter.ToInt32(dib, 30 - 14); var dataSize = BitConverter.ToInt32(dib, 34 - 14); - //compression masks - uint redMask = 0; - uint greenMask = 0; - uint blueMask = 0; - uint alphaMask = 0; + if (BitsPerPixel < 8) + { + throw new NotSupportedException("Unsupported color depth"); + } - switch (compression) + if (compression != 0 && compression != 3) { - case 0: - // no compression, just pull the data - break; - case 3: - // BI_BITFIELDS compression - redMask = BitConverter.ToUInt32(dib, 0x36 - 14); - greenMask = BitConverter.ToUInt32(dib, 0x3a - 14); - blueMask = BitConverter.ToUInt32(dib, 0x3e - 14); - alphaMask = BitConverter.ToUInt32(dib, 0x42 - 14); - break; - default: - throw new NotSupportedException("Unsupported bitmap compression"); + throw new NotSupportedException("Unsupported bitmap compression"); } - var bytesPerRow = width * (BitsPerPixel >> 3); - // BMP row length is evenly divisible by 4 + var bytesPerRow = width * BitsPerPixel / 8; var mod = bytesPerRow % 4; var rowPad = mod == 0 ? 0 : 4 - mod; var pixelBufferSize = height * bytesPerRow; @@ -168,15 +164,24 @@ private void LoadBitmap(Stream source) // we need to read row-by-row and put these into the pixel buffer if (compression == 3) { - var index = bytesPerRow * (height - 1); - int dataIndex = 0; - for (var row = 0; row < height; row++) + if (BitsPerPixel == 24) { + var masks = new byte[16]; + source.Read(masks, 0, masks.Length); + + uint redMask = BitConverter.ToUInt32(masks, 0); + uint greenMask = BitConverter.ToUInt32(masks, 4); + uint blueMask = BitConverter.ToUInt32(masks, 8); + uint alphaMask = BitConverter.ToUInt32(masks, 12); + + var index = bytesPerRow * (height - 1); + int dataIndex = 0; source.Seek(index + dataOffset, SeekOrigin.Begin); + + var pixel = new byte[4]; + for (var col = 0; col < width; col++) { - // Read the pixel data - var pixel = new byte[4]; source.Read(pixel, 0, 4); // Apply bit masks to the pixel data @@ -195,7 +200,30 @@ private void LoadBitmap(Stream source) if (rowPad > 0) source.Seek(rowPad, SeekOrigin.Current); index -= bytesPerRow; } + + if (BitsPerPixel == 16) + { + var index = bytesPerRow * (height - 1); + int dataIndex = 0; + for (var row = 0; row < height; row++) + { + source.Seek(index + dataOffset, SeekOrigin.Begin); + for (var col = 0; col < width; col++) + { + // Read the pixel data + byte[] pixel = new byte[2]; + source.Read(pixel, 0, 2); + + pixelData[dataIndex++] = pixel[0]; + pixelData[dataIndex++] = pixel[1]; + } + + if (rowPad > 0) source.Seek(rowPad, SeekOrigin.Current); + index -= bytesPerRow; + } + } } + //assume uncompressed else if (invertedRows) //uncompressed inverted { var index = 0; @@ -220,7 +248,6 @@ private void LoadBitmap(Stream source) } // TODO: determine if it's grayscale? - switch (BitsPerPixel) { case 32: @@ -266,5 +293,16 @@ private void ConvertRGBBufferToBGRBuffer(byte[] buffer) buffer[i + 2] = temp; } } + + private int GetShiftCount(uint mask) + { + int count = 0; + while ((mask & 1) == 0) + { + mask >>= 1; + count++; + } + return count; + } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs index a50151537f..da76e9e0ae 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs @@ -435,7 +435,7 @@ public void DrawHorizontalLine(int x, int y, int length) /// The color of the line public void DrawHorizontalLine(int x, int y, int length, Color color) { - if (length == 0) + if (length == 0 || y + Stroke <= 0 || y - Stroke >= Height) { return; } @@ -446,6 +446,16 @@ public void DrawHorizontalLine(int x, int y, int length, Color color) length *= -1; } + if (x < 0) + { + length += x; + x = 0; + } + else if (x + length > Width) + { + length = Width - x; + } + int yOffset = 0; int height = 1; @@ -480,11 +490,7 @@ public void DrawVerticalLine(int x, int y, int length) { DrawVerticalLine(x, y, length, PenColor); - if (Stroke == 1) - { - - } - else + if (Stroke > 1) { int xOffset = Stroke >> 1; @@ -504,12 +510,27 @@ public void DrawVerticalLine(int x, int y, int length) /// The color of the line public void DrawVerticalLine(int x, int y, int length, Color color) { + if (length == 0 || x + Stroke <= 0 || x - Stroke >= Width) + { + return; + } + if (length < 0) { y += length; length *= -1; } + if (y < 0) + { + length += y; + y = 0; + } + else if (y + length > Height) + { + length = Height - y; + } + int yOffset = 0; int width = 1; @@ -543,8 +564,8 @@ public void DrawArc(int centerX, int centerY, int radius, Angle startAngle, Angl int offset = centerBetweenPixels ? 1 : 0; - double startAngleRadians = startAngle.Radians; - double endAngleRadians = endAngle.Radians; + float startAngleRadians = (float)startAngle.Radians; + float endAngleRadians = (float)endAngle.Radians; if (startAngleRadians > endAngleRadians) { @@ -565,14 +586,14 @@ void DrawArcPoint(int x, int y, Color color) while (x <= y) { - double angle1 = Math.Atan2(y, -x); - double angle2 = Math.Atan2(x, -y); - double angle3 = Math.Atan2(-x, -y); - double angle4 = Math.Atan2(-y, -x); - double angle5 = Math.Atan2(-y, x); - double angle6 = Math.Atan2(-x, y); - double angle7 = Math.Atan2(x, y); - double angle8 = Math.Atan2(y, x); + float angle1 = MathF.Atan2(y, -x); + float angle2 = MathF.Atan2(x, -y); + float angle3 = MathF.Atan2(-x, -y); + float angle4 = MathF.Atan2(-y, -x); + float angle5 = MathF.Atan2(-y, x); + float angle6 = MathF.Atan2(-x, y); + float angle7 = MathF.Atan2(x, y); + float angle8 = MathF.Atan2(y, x); if (angle1 >= startAngleRadians && angle1 <= endAngleRadians) { DrawArcPoint(centerX + y - offset, centerY - x, color); } if (angle2 >= startAngleRadians && angle2 <= endAngleRadians) { DrawArcPoint(centerX + x - offset, centerY - y, color); } @@ -1152,7 +1173,7 @@ public void DrawHorizontalGradient(int x, int y, int width, int height, Color co for (int i = 0; i < height; i++) { var color = colorLeft.Blend(colorRight, (float)i / height); - DrawLine(x, i + y, x + width, i + y, color); + DrawHorizontalLine(x, i + y, width, color); } } @@ -1169,8 +1190,8 @@ public void DrawVerticalGradient(int x, int y, int width, int height, Color colo { for (int i = 0; i < width; i++) { - var color = colorTop.Blend(colorBottom, (float)i / height); - DrawLine(x + i, y, x + i, y + height, color); + var color = colorTop.Blend(colorBottom, (float)i / width); + DrawVerticalLine(x + i, y, height, color); } } @@ -1502,20 +1523,33 @@ private byte[] GetBytesForTextBitmap(string text, IFont font) { byte[] bitmap; - if (font.Width == 8) //just copy bytes + if (font.Width == 8) { - bitmap = new byte[text.Length * font.Height * (font.Width >> 3)]; + bitmap = new byte[text.Length * font.Height]; - byte[] characterMap; + for (int i = 0; i < text.Length; i++) + { //copy data for 1 character at a time going top to bottom + for (int j = 0; j < font.Height; j++) + { + bitmap[i + (j * text.Length)] = font[text[i]][j]; + } + } + } + else if (font.Width == 16) + { + int len = text.Length * 2; // Each character takes up 2 bytes per row + bitmap = new byte[len * font.Height]; + int bitmapIndex; for (int i = 0; i < text.Length; i++) { - characterMap = font[text[i]]; + byte[] charMap = font[text[i]]; - //copy data for 1 character at a time going top to bottom - for (int segment = 0; segment < font.Height; segment++) - { - bitmap[i + (segment * text.Length)] = characterMap[segment]; + for (int j = 0; j < font.Height; j++) + { // Calculate the starting index in the bitmap array for this row and character + bitmapIndex = (i * 2) + (j * len); + bitmap[bitmapIndex] = charMap[j * 2]; // First byte of the row + bitmap[bitmapIndex + 1] = charMap[j * 2 + 1]; // Second byte of the row } } } @@ -1553,14 +1587,7 @@ private byte[] GetBytesForTextBitmap(string text, IFont font) } else if (font.Width == 6) { - var len = text.Length; - - if (text.Length % 4 != 0) - { - len += 4 - (text.Length % 4); //character length - } - len = len * 3 / 4; //length in bytes - + int len = (text.Length + 3) / 4 * 3; // Adjusted to handle padding in one line. bitmap = new byte[len * font.Height]; byte[] charMap1, charMap2, charMap3, charMap4; @@ -1622,7 +1649,7 @@ private byte[] GetBytesForTextBitmap(string text, IFont font) } else { - throw new Exception("Font width must be 4, 6, 8, or 12"); + throw new Exception("Font width must be 4, 6, 8, 12 or 16"); } return bitmap; } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Point3d.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Point3d.cs index cdd36ac1fe..bbb5931169 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Point3d.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Point3d.cs @@ -131,9 +131,9 @@ public void Offset(Point3d point3d) /// True if both instances are equal, false otherwise public override bool Equals(object obj) { - if (obj is Point3d) + if (obj is Point3d d) { - return Equals((Point3d)obj); + return Equals(d); } return false; diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Size.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Size.cs index 75beb87191..2f0d1bc6b5 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Size.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Size.cs @@ -105,9 +105,9 @@ public static Size From(Point point) /// True if both instances are equal, false otherwise public override bool Equals(object obj) { - if (obj is Size) + if (obj is Size size) { - return Equals((Size)obj); + return Equals(size); } return false; @@ -131,4 +131,4 @@ public override string ToString() return $"Width: {Width}, Height: {Height}"; } } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Samples/ImageLoadSample/ImageLoad_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Samples/ImageLoadSample/ImageLoad_Sample.csproj index 8476273455..f72b5cf7b4 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Samples/ImageLoadSample/ImageLoad_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Samples/ImageLoadSample/ImageLoad_Sample.csproj @@ -29,12 +29,7 @@ - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/ChartControl.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/ChartControl.cs new file mode 100644 index 0000000000..6c0a4ee222 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/ChartControl.cs @@ -0,0 +1,120 @@ +namespace Meadow.Foundation.Graphics.MicroLayout; + +/// +/// An abstract base class for Chart controls +/// +public abstract class ChartControl : ThemedControl +{ + private IFont _axisFont = default!; + + /// + /// The default color for axis lines + /// + public static Color DefaultAxisColor = Color.Gray; + + /// + /// The default color for axis labels + /// + public static Color DefaultAxisLabelColor = Color.White; + + /// + /// The default chart background color + /// + public static Color DefaultBackgroundColor = Color.Black; + + /// + /// The default width of the control margin + /// + protected const int DefaultMargin = 5; + + /// + /// The default width of the control's axis lines + /// + protected const int DefaultAxisStroke = 4; + + /// + /// The IFont used to for displaying axis labels + /// + public IFont? AxisFont { get; set; } + /// + /// The chart's background color + /// + public Color BackgroundColor { get; set; } = DefaultBackgroundColor; + /// + /// The color used to draw the chart axes lines + /// + public Color AxisColor { get; set; } = DefaultAxisColor; + /// + /// The color used to draw the chart axes labels + /// + public Color AxisLabelColor { get; set; } = DefaultAxisLabelColor; + /// + /// The width of the axes lines + /// + public int AxisStroke { get; set; } = DefaultAxisStroke; + + /// + /// Gets or sets the height of the chart (non-axis) area + /// + protected int ChartAreaHeight { get; set; } + /// + /// Gets or sets the width of the chart (non-axis) area + /// + protected int ChartAreaWidth { get; set; } + /// + /// Gets or sets the left of the chart (non-axis) area + /// + protected int ChartAreaLeft { get; set; } + /// + /// Gets or sets the top of the chart (non-axis) area + /// + protected int ChartAreaTop { get; set; } + /// + /// Gets or sets the bottom of the chart (non-axis) area + /// + protected int ChartAreaBottom { get; set; } + + /// + /// Gets or sets the X offset withing the chart's parent + /// + protected int ParentOffsetX => (Parent?.Left ?? 0); + /// + /// Gets or sets the Y offset withing the chart's parent + /// + protected int ParentOffsetY => (Parent?.Top ?? 0); + + /// + /// Creates a DisplayLineChart instance + /// + /// The control's left position + /// The control's top position + /// The control's width + /// The control's height + public ChartControl(int left, int top, int width, int height) + : base(left, top, width, height) + { + } + + /// + /// Get either the specified or default font for the axes + /// + /// + protected IFont GetAxisFont() + { + if (AxisFont == null) + { + _axisFont = new Font6x8(); + } + else + { + _axisFont = AxisFont; + } + + return _axisFont; + } + + /// + public override void ApplyTheme(DisplayTheme theme) + { + } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/LineChart.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/LineChart.cs index 361a507c4e..ae48076b13 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/LineChart.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/LineChart.cs @@ -5,52 +5,12 @@ namespace Meadow.Foundation.Graphics.MicroLayout; /// /// An X/Y Line chart /// -public class LineChart : ThemedControl +public class LineChart : ChartControl { - /// - /// The default color for axis lines - /// - public static Color DefaultAxisColor = Color.Gray; - - /// - /// The default color for axis labels - /// - public static Color DefaultAxisLabelColor = Color.White; - - /// - /// The default chart background color - /// - public static Color DefaultBackgroundColor = Color.Black; - - private const int DefaultMargin = 5; - private const int DefaultAxisStroke = 4; - - private IFont _axisFont = default!; - /// /// When true, Y-value origin (zero) is always displayed, otherwise the Y axis is scaled based on the data range. /// public bool AlwaysShowYOrigin { get; set; } = true; - /// - /// The IFont used to for displaying axis labels - /// - public IFont? AxisFont { get; set; } - /// - /// The chart's background color - /// - public Color BackgroundColor { get; set; } = DefaultBackgroundColor; - /// - /// The color used to draw the chart axes lines - /// - public Color AxisColor { get; set; } = DefaultAxisColor; - /// - /// The color used to draw the chart axes labels - /// - public Color AxisLabelColor { get; set; } = DefaultAxisLabelColor; - /// - /// The width of the axes lines - /// - public int AxisStroke { get; set; } = DefaultAxisStroke; // public bool ShowXAxisLabels { get; set; } /// @@ -69,13 +29,6 @@ public class LineChart : ThemedControl private int XAxisScaledPosition { get; set; } private double HorizontalScale { get; set; } // pixels per X units private double HorizontalMinimum { get; set; } // X units at left of chart - private int ChartAreaHeight { get; set; } - private int ChartAreaWidth { get; set; } - private int ChartAreaLeft { get; set; } - private int ChartAreaTop { get; set; } - private int ChartAreaBottom { get; set; } - private int ParentOffsetX => (Parent?.Left ?? 0); - private int ParentOffsetY => (Parent?.Top ?? 0); /// /// Creates a DisplayLineChart instance @@ -89,65 +42,63 @@ public LineChart(int left, int top, int width, int height) { } - /// - public override void ApplyTheme(DisplayTheme theme) - { - } - /// protected override void OnDraw(MicroGraphics graphics) { graphics.DrawRectangle(Left, Top, Width, Height, BackgroundColor, true); - ChartAreaTop = Top + DefaultMargin; + ChartAreaTop = Top + DefaultMargin * 2 - AxisStroke; ChartAreaBottom = Bottom - DefaultMargin; - // determine overall min/max - var minX = Series.Min(s => s.Points.MinX); - var maxX = Series.Max(s => s.Points.MaxX); - - if (AlwaysShowYOrigin) + if (Series.Count > 0) { - var min = Series.Min(s => s.Points.MinY); - var max = Series.Max(s => s.Points.MaxY); + // determine overall min/max + var minX = Series.Min(s => s.Points.MinX); + var maxX = Series.Max(s => s.Points.MaxX); - if (min > 0) - { - YMinimumValue = 0; - YMaximumValue = max; - } - else if (max < 0) + if (AlwaysShowYOrigin) { - YMinimumValue = min; - YMaximumValue = 0; + var min = Series.Min(s => s.Points.MinY); + var max = Series.Max(s => s.Points.MaxY); + + if (min > 0) + { + YMinimumValue = 0; + YMaximumValue = max; + } + else if (max < 0) + { + YMinimumValue = min; + YMaximumValue = 0; + } + else + { + YMinimumValue = min; + YMaximumValue = max; + } } else { - YMinimumValue = min; - YMaximumValue = max; + // set chart top/bottom at 10% above/below the min/max + var ymin = Series.Min(s => s.Points.MinY); + YMinimumValue = (ymin > 0) ? ymin * 0.9 : ymin * 1.1; + var ymax = Series.Max(s => s.Points.MaxY); + YMaximumValue = (ymax > 0) ? ymax * 1.1 : ymax * 0.9; } - } - else - { - // set chart top/bottom at 10% above/below the min/max - var ymin = Series.Min(s => s.Points.MinY); - YMinimumValue = (ymin > 0) ? ymin * 0.9 : ymin * 1.1; - var ymax = Series.Max(s => s.Points.MaxY); - YMaximumValue = (ymax > 0) ? ymax * 1.1 : ymax * 0.9; - } - ChartAreaHeight = Height - (2 * DefaultMargin) - (DefaultAxisStroke / 2); - VerticalScale = ChartAreaHeight / (YMaximumValue - YMinimumValue); // pixels per vertical unit + ChartAreaHeight = Height - DefaultMargin * 3; + VerticalScale = ChartAreaHeight / (YMaximumValue - YMinimumValue); // pixels per vertical unit - DrawYAxis(graphics); - DrawXAxis(graphics, YMinimumValue, YMaximumValue); + DrawYAxis(graphics); + DrawXAxis(graphics, YMinimumValue, YMaximumValue); - foreach (var series in Series) - { - DrawSeries(graphics, series); - } + foreach (var series in Series) + { + DrawSeries(graphics, series); + } - DrawAxisLabels(graphics); + DrawAxisLabels(graphics); + } graphics.Show(); } @@ -172,7 +123,7 @@ private void DrawAxisLabels(MicroGraphics graphics) // max label graphics.DrawText( x: Left + DefaultMargin + ParentOffsetX, - y: ChartAreaTop + font.Height + ParentOffsetY, + y: ChartAreaTop - font.Height + DefaultMargin, color: AxisLabelColor, text: YMaximumValue.ToString("0.0"), font: font); @@ -194,40 +145,25 @@ private void DrawXAxis(MicroGraphics graphics, double minY, double maxY) // axis is at 0 XAxisYIntercept = 0; - XAxisScaledPosition = Bottom - DefaultMargin - DefaultAxisStroke + (int)(minY * VerticalScale); + XAxisScaledPosition = Bottom - DefaultMargin + (int)(minY * VerticalScale); } else { // axis at min Y XAxisYIntercept = YMinimumValue; - XAxisScaledPosition = Bottom - DefaultMargin - DefaultAxisStroke; + XAxisScaledPosition = ChartAreaBottom - DefaultMargin * 2 + AxisStroke * 2; } // for now it's a fixed line at the bottom - graphics.Stroke = DefaultAxisStroke; - graphics.DrawLine( - ChartAreaLeft + ParentOffsetX, - XAxisScaledPosition + ParentOffsetY, - Right - DefaultMargin, + graphics.Stroke = AxisStroke; + graphics.DrawHorizontalLine( + ChartAreaLeft, //ChartAreaLeft - AxisStroke + ParentOffsetX, XAxisScaledPosition, + ChartAreaWidth, AxisColor); } - private IFont GetAxisFont() - { - if (AxisFont == null) - { - _axisFont = new Font8x16(); - } - else - { - _axisFont = AxisFont; - } - - return _axisFont; - } - private void DrawYAxis(MicroGraphics graphics) { var leftMargin = DefaultMargin + AxisStroke; @@ -239,17 +175,15 @@ private void DrawYAxis(MicroGraphics graphics) } // TODO: deal with chart with negative values - - ChartAreaLeft = Left + leftMargin; - ChartAreaWidth = Width - ChartAreaLeft - DefaultMargin - DefaultAxisStroke * 2; + ChartAreaLeft = Left + leftMargin + AxisStroke; + ChartAreaWidth = Right - ChartAreaLeft - DefaultMargin - AxisStroke; // for now it's a fixed line at the left - graphics.Stroke = DefaultAxisStroke; - graphics.DrawLine( - ChartAreaLeft + ParentOffsetX, - Top + DefaultMargin + ParentOffsetY, - ChartAreaLeft, - Bottom - DefaultMargin, + graphics.Stroke = AxisStroke; + graphics.DrawVerticalLine( + ChartAreaLeft - AxisStroke, + ChartAreaTop, + ChartAreaHeight + AxisStroke, AxisColor); } @@ -260,15 +194,15 @@ private void DrawSeries(MicroGraphics graphics, LineChartSeries series) var xRange = series.Points.MaxX - minX; var yRange = series.Points.MaxY; // - minY; // assuming axis at 0 right now - LineSeriesPoint lastPoint = new LineSeriesPoint(); + var lastPoint = new LineSeriesPoint(); var first = true; graphics.Stroke = series.LineStroke; foreach (var point in series.Points) { - var scaledX = ChartAreaLeft + DefaultAxisStroke * 2 + DefaultMargin + (int)(point.X / xRange * ChartAreaWidth); - var scaledY = Bottom - DefaultMargin - (DefaultAxisStroke / 2) - (int)((point.Y - YMinimumValue) * VerticalScale); + var scaledX = ChartAreaLeft + (int)(point.X / xRange * ChartAreaWidth); + var scaledY = (ChartAreaTop + ChartAreaHeight) - (int)((point.Y - YMinimumValue) * VerticalScale); if (series.ShowLines) { @@ -292,8 +226,13 @@ private void DrawSeries(MicroGraphics graphics, LineChartSeries series) if (series.ShowPoints) { - graphics.DrawCircle(scaledX + ParentOffsetX, scaledY + ParentOffsetY, series.PointSize, series.PointColor, true); + graphics.DrawCircle( + scaledX + ParentOffsetX, + scaledY + ParentOffsetY, + series.PointSize, + series.PointColor, + true); } } } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/LineChartSeriesCollection.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/LineChartSeriesCollection.cs index 9bc4698972..fca8ee3540 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/LineChartSeriesCollection.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/LineChartSeriesCollection.cs @@ -10,6 +10,11 @@ public class LineChartSeriesCollection : IEnumerable { private readonly List _series = new(); + /// + /// Gets the number of Series in the collection + /// + public int Count => _series.Count; + /// /// Adds one or more LineChartSeries to the collection /// diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/VerticalBarChart.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/VerticalBarChart.cs new file mode 100644 index 0000000000..45f3b2577d --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Charts/VerticalBarChart.cs @@ -0,0 +1,163 @@ +using System.Linq; + +namespace Meadow.Foundation.Graphics.MicroLayout; + +/// +/// A vertical bar chart +/// +public class VerticalBarChart : ChartControl +{ + private float[]? _series; + private int _barSpacing = 1; + private string _xlabelFormat = "N1"; + private Color _seriesColor = Color.White; + private bool _showXLabels = true; + + /// + /// Creates a vertical bar chart instance + /// + /// The control's left position + /// The control's top position + /// The control's width + /// The control's height + public VerticalBarChart(int left, int top, int width, int height) + : base(left, top, width, height) + { + } + + /// + /// Creates a vertical bar chart instance + /// + /// The control's left position + /// The control's top position + /// The control's width + /// The control's height + /// A series of data to plot + public VerticalBarChart(int left, int top, int width, int height, float[] series) + : base(left, top, width, height) + { + Series = series; + } + + /// + /// Gets or sets a series of float values to plot + /// + public float[]? Series + { + get => _series; + set => SetInvalidatingProperty(ref _series, value); + } + + /// + /// Gets or sets the padding around a bar + /// + /// This property behaves like a margin, so the space between any two bars will be twice this value + public int BarSpacing + { + get => _barSpacing; + set => SetInvalidatingProperty(ref _barSpacing, value); + } + + /// + /// Gets or sets the string formatting (i.e. "N0" for a 0-decimal number) to apply to the X axis labels + /// + public string XAxisLabelFormat + { + get => _xlabelFormat; + set => SetInvalidatingProperty(ref _xlabelFormat, value); + } + + /// + /// Gets or sets the visibility of the X axis labels + /// + public bool ShowXAxisLabels + { + get => _showXLabels; + set => SetInvalidatingProperty(ref _showXLabels, value); + } + + /// + /// Gets or sets the color of the plotted series (bars) + /// + public Color SeriesColor + { + get => _seriesColor; + set => SetInvalidatingProperty(ref _seriesColor, value); + } + + /// + protected override void OnDraw(MicroGraphics graphics) + { + graphics.DrawRectangle(Left, Top, Width, Height, BackgroundColor, true); + + var font = GetAxisFont(); + + ChartAreaTop = Top + DefaultMargin * 2 - AxisStroke; + ChartAreaBottom = Bottom - DefaultMargin - AxisStroke; + if (ShowXAxisLabels) + { + ChartAreaBottom -= font.Height; + } + ChartAreaHeight = Height - DefaultMargin * 3; + + int yLabelWidth = 0; + if (Series != null) + { + // if we add Y labels (future feature), turn this on + //yLabelWidth = graphics.MeasureText(Series.Max().ToString(XAxisLabelFormat), font).Width; + } + ChartAreaLeft = Left + DefaultMargin + yLabelWidth; + + ChartAreaWidth = Width - DefaultMargin; + + if (Series != null) + { + DrawSeries(graphics, Series, font); + } + + graphics.DrawRectangle( + ChartAreaLeft, + ChartAreaBottom, + ChartAreaWidth - DefaultMargin, + AxisStroke, + color: AxisColor, + filled: true); + + } + + private void DrawSeries(MicroGraphics graphics, float[] series, IFont font) + { + var barWidth = (ChartAreaWidth / series.Length) - 2 * BarSpacing; + var halfWidth = barWidth / 2; + + var x = ChartAreaLeft + BarSpacing; + + var heightScale = ChartAreaHeight * 0.9f / series.Max(); + + foreach (var item in series) + { + var barHeight = (int)(heightScale * item); + + graphics.DrawRectangle( + x, + ChartAreaBottom - barHeight, + barWidth, + barHeight, + color: SeriesColor, + filled: true); + + if (ShowXAxisLabels) + { + graphics.DrawText( + x + halfWidth, + ChartAreaBottom + DefaultMargin + AxisStroke, + alignmentH: HorizontalAlignment.Center, + color: AxisLabelColor, + text: item.ToString(XAxisLabelFormat), + font: font); + } + + x += barWidth + 2 * BarSpacing; + } + } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/Circle.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/Circle.cs index dff34de8e5..534847e5da 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/Circle.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/Circle.cs @@ -1,17 +1,13 @@ namespace Meadow.Foundation.Graphics.MicroLayout; -public struct Coordinate2D -{ - public int X { get; set; } - public int Y { get; set; } -} - /// /// Represents a circle in the user interface. /// public class Circle : ThemedControl { - private Color _foreColor; + private Color foreColor; + private Point center; + private int radius; /// /// Gets or sets a value indicating whether the Circle is filled with the foreground color. @@ -25,7 +21,7 @@ public class Circle : ThemedControl /// The Y coordinate of the circles's center. /// The radius of the circle. public Circle(int centerX, int centerY, int radius) - : base(centerX - radius, centerY - radius, radius * 2, radius * 2) + : this(new Point(centerX, centerY), radius) { } @@ -34,9 +30,11 @@ public Circle(int centerX, int centerY, int radius) /// /// The coordinate of the circles's center. /// The radius of the circle. - public Circle(Coordinate2D center, int radius) + public Circle(Point center, int radius) : base(center.X - radius, center.Y - radius, radius * 2, radius * 2) { + this.center = center; + this.radius = radius; } /// @@ -56,23 +54,54 @@ public override void ApplyTheme(DisplayTheme theme) /// public Color ForeColor { - get => _foreColor; - set => SetInvalidatingProperty(ref _foreColor, value); + get => foreColor; + set => SetInvalidatingProperty(ref foreColor, value); } /// /// Gets or sets the foreground color of the Circle. /// - public int Radius + public Point Center + { + get => center; + set => SetInvalidatingProperty(ref center, value); + } + + /// + public override int Left + { + get => center.X - radius; + set + { + center.X = value + radius; + Invalidate(); + } + } + + /// + public override int Top { - get => Width / 2; + get => center.Y - radius; set { - // keep centered - var coeff = (value > Radius) ? -1 : 1; - var offset = value - Radius; + center.Y = value + radius; + Invalidate(); + } + } - Width = value * 2; + /// + /// Gets or sets the foreground color of the Circle. + /// + public int Radius + { + get => radius; + set + { + radius = value; + Left = center.X - radius; + Width = radius * 2; + Top = center.Y - radius; + Height = radius * 2; } } @@ -84,10 +113,7 @@ protected override void OnDraw(MicroGraphics graphics) { if (ForeColor != Color.Transparent) { - var radius = (Right - Left) / 2; - var centerX = Left + radius; - var centerY = Top + radius; - graphics.DrawCircle(centerX, centerY, radius, ForeColor, IsFilled); + graphics.DrawCircle(center.X, center.Y, radius, ForeColor, IsFilled); } } } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/Crosshair.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/Crosshair.cs new file mode 100644 index 0000000000..cbf2162691 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/Crosshair.cs @@ -0,0 +1,52 @@ +namespace Meadow.Foundation.Graphics.MicroLayout; + +/// +/// Represents a circle in the user interface. +/// +public class Crosshair : ThemedControl +{ + private Color _foreColor = Color.Black; + private int _lineWidth; + + /// + /// Initializes a new instance of the class with the specified dimensions and center point. + /// + /// The X coordinate of the crosshair's center. + /// The Y coordinate of the crosshair's center. + /// The with and height of the crosshair. + /// The line width of the crosshair + public Crosshair(int centerX, int centerY, int size = 20, int linewidth = 3) + : base(centerX, centerY, size, size) + { + _lineWidth = linewidth; + } + + /// + public override void ApplyTheme(DisplayTheme theme) + { + if (theme != null) + { + if (theme.ForegroundColor != null) this.ForeColor = theme.ForegroundColor.Value; + } + } + + /// + /// Gets or sets the foreground color of the Crosshair. + /// + public Color ForeColor + { + get => _foreColor; + set => SetInvalidatingProperty(ref _foreColor, value); + } + + /// + protected override void OnDraw(MicroGraphics graphics) + { + if (ForeColor != Color.Transparent) + { + // position is the center of the crosshair + graphics.DrawRectangle(Left - Width / 2, Top - _lineWidth / 2, Width, _lineWidth, ForeColor, true); + graphics.DrawRectangle(Left - _lineWidth / 2, Top - Height / 2, _lineWidth, Height, ForeColor, true); + } + } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/GradientBox.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/GradientBox.cs new file mode 100644 index 0000000000..0bd9707235 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/GradientBox.cs @@ -0,0 +1,76 @@ +namespace Meadow.Foundation.Graphics.MicroLayout; + +/// +/// Represents a rectangular gradient display box in the user interface. +/// +public class GradientBox : ThemedControl +{ + /// + /// Gets or sets a value indicating whether the gradient direction is horizontal or vertical. + /// + public bool IsHorizontal { get; set; } = true; + + /// + /// Gets or sets the start color of the gradient box. Left color if Horizontal, Top color if vertical. + /// + public Color StartColor + { + get => _startColor; + set => SetInvalidatingProperty(ref _startColor, value); + } + private Color _startColor; + + /// + /// Gets or sets the start color of the gradient box. Right color if Horizontal, Bottom color if vertical. + /// + public Color EndColor + { + get => _endColor; + set => SetInvalidatingProperty(ref _endColor, value); + } + private Color _endColor; + + /// + /// Initializes a new instance of the class with the specified dimensions. + /// + /// The left coordinate of the display box. + /// The top coordinate of the display box. + /// The width of the display box. + /// The height of the display box. + public GradientBox(int left, int top, int width, int height) + : base(left, top, width, height) + { + } + + /// + /// Applies the specified display theme to the display gradient box. + /// + /// The display theme to apply. + public override void ApplyTheme(DisplayTheme theme) + { + if (theme != null) + { + if (theme.StartColor != null) this.StartColor = theme.StartColor.Value; + if (theme.EndColor != null) this.EndColor = theme.EndColor.Value; + } + } + + /// + /// Draws the display gradient box on the specified surface. + /// + /// The surface to draw the display box on. + protected override void OnDraw(MicroGraphics graphics) + { + if (StartColor != Color.Transparent || EndColor != Color.Transparent) + { + if (IsHorizontal) + { + graphics.DrawHorizontalGradient(Left + (Parent?.Left ?? 0), Top + (Parent?.Top ?? 0), Width, Height, StartColor, EndColor); + } + else + { + graphics.DrawVerticalGradient(Left + (Parent?.Left ?? 0), Top + (Parent?.Top ?? 0), Width, Height, StartColor, EndColor); + } + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/Picture.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/Picture.cs index 307fdba929..3db4fa7963 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/Picture.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Controls/Picture.cs @@ -11,7 +11,7 @@ public class Picture : ThemedControl private Color _backColor = Color.Transparent; private VerticalAlignment _verticalAlignment = VerticalAlignment.Center; private HorizontalAlignment _horizontalAlignment = HorizontalAlignment.Center; - private MF.Image _image = default!; + private MF.Image? _image = default!; /// /// Initializes a new instance of the class with the specified dimensions and image. @@ -21,7 +21,7 @@ public class Picture : ThemedControl /// The width of the image display control. /// The height of the image display control. /// The image to be displayed. - public Picture(int left, int top, int width, int height, MF.Image image) + public Picture(int left, int top, int width, int height, MF.Image? image = null) : base(left, top, width, height) { Image = image; @@ -42,7 +42,7 @@ public override void ApplyTheme(DisplayTheme theme) /// /// Gets or sets the image to be displayed on the image display control. /// - public MF.Image Image + public MF.Image? Image { get => _image; set => SetInvalidatingProperty(ref _image, value); @@ -81,6 +81,8 @@ public Color BackColor /// The surface to draw the image display control on. protected override void OnDraw(MicroGraphics graphics) { + if (Image == null) { return; } + if (BackColor != Color.Transparent) { graphics.DrawRectangle( diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/DisplayScreen.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/DisplayScreen.cs index f364ee6468..a95fe899dd 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/DisplayScreen.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/DisplayScreen.cs @@ -12,18 +12,18 @@ public class DisplayScreen { private readonly IPixelDisplay _display; private readonly MicroGraphics _graphics; - private readonly ITouchScreen? _touchScreen; private bool _updateInProgress = false; + private Color _backgroundColor; /// - /// Gets the collection of controls on the display screen. + /// Gets the Touchscreen associated with the display screen /// - public ControlsCollection Controls { get; } + public ITouchScreen? TouchScreen { get; } /// - /// Gets or sets the background color of the display screen. + /// Gets the collection of controls on the display screen. /// - public Color BackgroundColor { get; set; } + public ControlsCollection Controls { get; } /// /// Gets the width of the display screen. @@ -56,12 +56,12 @@ public DisplayScreen(IPixelDisplay physicalDisplay, RotationType rotation = Rota _graphics.Rotation = rotation; - _touchScreen = touchScreen; + TouchScreen = touchScreen; - if (_touchScreen != null) + if (TouchScreen != null) { - _touchScreen.TouchDown += _touchScreen_TouchDown; - _touchScreen.TouchUp += _touchScreen_TouchUp; + TouchScreen.TouchDown += _touchScreen_TouchDown; + TouchScreen.TouchUp += _touchScreen_TouchUp; } if (theme?.Font != null) @@ -69,7 +69,7 @@ public DisplayScreen(IPixelDisplay physicalDisplay, RotationType rotation = Rota _graphics.CurrentFont = theme.Font; } - BackgroundColor = theme?.BackgroundColor ?? Color.Black; + _backgroundColor = theme?.BackgroundColor ?? _display.DisabledColor; if (Resolver.App != null) { @@ -81,24 +81,45 @@ public DisplayScreen(IPixelDisplay physicalDisplay, RotationType rotation = Rota } } - private void _touchScreen_TouchUp(int x, int y) + /// + /// Gets or sets the background color of the display screen. + /// + public Color BackgroundColor { - lock (Controls.SyncRoot) + get => _backgroundColor; + set { - foreach (var control in Controls) + if (value == BackgroundColor) return; + _backgroundColor = value; + Invalidate(); + } + } + + private void _touchScreen_TouchUp(ITouchScreen source, TouchPoint point) + { + if (Monitor.TryEnter(Controls.SyncRoot, 100)) + { + try { - if (control is IClickableControl c) + foreach (var control in Controls) { - if (control.Contains(x, y)) + if (control is IClickableControl c) { - c.Pressed = false; + if (control.Contains(point.ScreenX, point.ScreenY)) + { + c.Pressed = false; + } } } } + finally + { + Monitor.Exit(Controls.SyncRoot); + } } } - private void _touchScreen_TouchDown(int x, int y) + private void _touchScreen_TouchDown(ITouchScreen source, TouchPoint point) { lock (Controls.SyncRoot) { @@ -106,7 +127,7 @@ private void _touchScreen_TouchDown(int x, int y) { if (control is IClickableControl c) { - if (control.Contains(x, y)) + if (control.Contains(point.ScreenX, point.ScreenY)) { c.Pressed = true; } @@ -128,7 +149,7 @@ private void RefreshTree(IControl control) control.Invalidate(); control.Refresh(_graphics); - if (control is Layout l) + if (control is MicroLayout l) { foreach (var c in l.Controls) { diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/DisplayTheme.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/DisplayTheme.cs index 4b18e438a3..5bb7b5bea5 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/DisplayTheme.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/DisplayTheme.cs @@ -5,6 +5,16 @@ /// public class DisplayTheme { + /// + /// Gets or sets the start color for gradient-capable controls using this theme. + /// + public Color? StartColor { get; set; } + + /// + /// Gets or sets the end color for gradient-capable controls using this theme. + /// + public Color? EndColor { get; set; } + /// /// Gets or sets the background color for display controls using this theme. /// diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Graphics.MicroLayout.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Graphics.MicroLayout.csproj index 774defe9cc..85e3d6aacb 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Graphics.MicroLayout.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Graphics.MicroLayout.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 true @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Layouts/AbsoluteLayout.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Layouts/AbsoluteLayout.cs index 14dec02065..a4607c07eb 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Layouts/AbsoluteLayout.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Layouts/AbsoluteLayout.cs @@ -3,7 +3,7 @@ /// /// A layout requiring absolute positioning of all child controls /// -public class AbsoluteLayout : Layout +public class AbsoluteLayout : MicroLayout { /// /// Creates a full-screen DisplayAbsoluteLayout diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Layouts/Layout.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/MicroLayout.cs similarity index 93% rename from Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Layouts/Layout.cs rename to Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/MicroLayout.cs index c50a546cd5..2e02df8c3e 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Layouts/Layout.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/MicroLayout.cs @@ -5,7 +5,7 @@ namespace Meadow.Foundation.Graphics.MicroLayout; /// /// A base class for display layouts /// -public abstract class Layout : ThemedControl +public abstract class MicroLayout : ThemedControl { private Color? _backColor; @@ -17,7 +17,7 @@ public abstract class Layout : ThemedControl /// The layout's top position /// The layout's width /// The layout's height - protected Layout(DisplayScreen screen, int left, int top, int width, int height) + protected MicroLayout(DisplayScreen screen, int left, int top, int width, int height) : base(left, top, width, height) { Controls = new ControlsCollection(screen, this); diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/BarChart_Sample/BarChart_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/BarChart_Sample/BarChart_Sample.csproj new file mode 100644 index 0000000000..240df949b7 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/BarChart_Sample/BarChart_Sample.csproj @@ -0,0 +1,25 @@ + + + + Exe + net8.0-windows + enable + enable + + + + + + + + + + + PreserveNewest + + + Always + + + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/BarChart_Sample/Program.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/BarChart_Sample/Program.cs new file mode 100644 index 0000000000..fb5e53730b --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/BarChart_Sample/Program.cs @@ -0,0 +1,80 @@ +using Meadow.Foundation.Graphics; +using Meadow.Foundation.Graphics.MicroLayout; + +namespace Meadow.Foundation.Displays.UI; + +public class MeadowApp : App +{ + private DisplayScreen? screen; + + public static async Task Main(string[] args) + { + ApplicationConfiguration.Initialize(); + await MeadowOS.Start(args); + } + + public override Task Run() + { + var display = new WinFormsDisplay(); + display.ControlBox = true; + + var labelFont = new Font12x20(); + + screen = new DisplayScreen(display); + screen.BackgroundColor = Color.AntiqueWhite; + + var random = new Random(); + var seriesA = new float[10]; + for (var i = 0; i < seriesA.Length; i++) + { + seriesA[i] = random.NextSingle() * 10; + } + var seriesB = new float[12]; + for (var i = 0; i < seriesB.Length; i++) + { + seriesB[i] = random.NextSingle() * 10; + } + var seriesC = new float[23]; + for (var i = 0; i < seriesC.Length; i++) + { + seriesC[i] = random.NextSingle() * 10; + } + + var chartA = new VerticalBarChart(0, 0, screen.Width / 2, screen.Height / 2, seriesA) + { + AxisLabelColor = Color.Red, + AxisColor = Color.DarkRed, + AxisStroke = 3, + BarSpacing = 3, + SeriesColor = Color.DarkBlue, + AxisFont = new Font8x8(), + }; + var chartB = new VerticalBarChart(0, screen.Height / 2, screen.Width, screen.Height / 2, seriesB) + { + AxisLabelColor = Color.Yellow, + AxisColor = Color.DarkRed, + AxisStroke = 3, + BarSpacing = 3, + SeriesColor = Color.DarkGreen, + AxisFont = new Font12x20(), + XAxisLabelFormat = "N2" + }; + var chartC = new VerticalBarChart(screen.Width / 2, 0, screen.Width / 2, screen.Height / 2, seriesC) + { + AxisLabelColor = Color.Orange, + AxisColor = Color.Magenta, + AxisStroke = 2, + BarSpacing = 2, + SeriesColor = Color.Purple, + AxisFont = new Font12x20(), + ShowXAxisLabels = false + }; + + + screen.Controls.Add(chartA, chartB, chartC); + + System.Windows.Forms.Application.Run(display); + + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/HMI_Sample/HMI_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/HMI_Sample/HMI_Sample.csproj index 08678ba3e0..240df949b7 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/HMI_Sample/HMI_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/HMI_Sample/HMI_Sample.csproj @@ -2,15 +2,15 @@ Exe - net7.0-windows + net8.0-windows enable enable - - - + + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/HMI_Sample/Program.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/HMI_Sample/Program.cs index 1002163cea..aa57d1904b 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/HMI_Sample/Program.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/HMI_Sample/Program.cs @@ -6,7 +6,7 @@ namespace Meadow.Foundation.Displays.UI; public class MeadowApp : App { - private DisplayScreen? _screen; + private DisplayScreen? screen; public static async Task Main(string[] args) { @@ -21,16 +21,15 @@ public override Task Run() var labelFont = new Font12x20(); - _screen = new DisplayScreen(display); - _screen.BackgroundColor = Color.AntiqueWhite; + screen = new DisplayScreen(display); + screen.BackgroundColor = Color.AntiqueWhite; - var splashLayout = new AbsoluteLayout(_screen, 0, 0, _screen.Width, _screen.Height) + var splashLayout = new AbsoluteLayout(screen, 0, 0, screen.Width, screen.Height) { - // BackgroundColor = Color.Blue }; var logo = Image.LoadFromFile("logo.bmp"); - var wlLabel = new Graphics.MicroLayout.Label(0, 10, _screen.Width, 32) + var wlLabel = new Graphics.MicroLayout.Label(0, 10, screen.Width, 32) { TextColor = Color.White, BackColor = Color.DarkRed, @@ -38,17 +37,15 @@ public override Task Run() }; var logoImg = new Graphics.MicroLayout.Picture( 0, 0, - _screen.Width, - _screen.Height, + screen.Width, + screen.Height, logo ); splashLayout.Controls.Add(logoImg, wlLabel); + var chartLayout = new AbsoluteLayout(screen, 0, 0, screen.Width, screen.Height); - - var chartLayout = new AbsoluteLayout(_screen, 0, 0, _screen.Width, _screen.Height); - - var chart1Label = new Graphics.MicroLayout.Label(0, 0, _screen.Width, 16) + var chart1Label = new Graphics.MicroLayout.Label(0, 0, screen.Width, 16) { Text = "Values for process A", TextColor = Color.Aquamarine, @@ -56,7 +53,7 @@ public override Task Run() Font = labelFont, }; - var chart1 = new LineChart(0, 16, _screen.Width, (_screen.Height / 2) - 16) + var chart1 = new LineChart(0, 16, screen.Width, (screen.Height / 2) - 16) { BackgroundColor = Color.FromHex("111111"), ShowYAxisLabels = true @@ -66,7 +63,7 @@ public override Task Run() GetSineSeries(), GetCosineSeries(4, 4.2, 0)); - var chart2Label = new Graphics.MicroLayout.Label(0, _screen.Height / 2, _screen.Width, 16) + var chart2Label = new Graphics.MicroLayout.Label(0, screen.Height / 2, screen.Width, 16) { Text = "Values for process B", TextColor = Color.BlueViolet, @@ -74,7 +71,7 @@ public override Task Run() Font = labelFont, }; - var chart2 = new LineChart(0, (_screen.Height / 2) + 16, _screen.Width, (_screen.Height / 2) - 16) + var chart2 = new LineChart(0, (screen.Height / 2) + 16, screen.Width, (screen.Height / 2) - 16) { BackgroundColor = Color.FromHex("222222"), ShowYAxisLabels = true @@ -86,7 +83,7 @@ public override Task Run() chartLayout.Controls.Add(chart1Label, chart2Label, chart1, chart2); - _screen.Controls.Add(splashLayout, chartLayout); + screen.Controls.Add(splashLayout, chartLayout); chartLayout.IsVisible = false; diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/Ili9488Charts_Sample/Ili9488Charts_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/Ili9488Charts_Sample/Ili9488Charts_Sample.csproj index 035a9eb0e5..1ec33271af 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/Ili9488Charts_Sample/Ili9488Charts_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/Ili9488Charts_Sample/Ili9488Charts_Sample.csproj @@ -2,23 +2,17 @@ Exe - net7.0 + net8.0 enable enable - - - - - - - - - - PreserveNewest - + + + + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/Ili9488Charts_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/Ili9488Charts_Sample/MeadowApp.cs index a1fef1ebb0..093fa96fe0 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/Ili9488Charts_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/Ili9488Charts_Sample/MeadowApp.cs @@ -95,7 +95,6 @@ public void Sweep() Thread.Sleep(50); } - } public static async Task Main(string[] args) diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/Ili9488Charts_Sample/libmpsse.dll b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/Ili9488Charts_Sample/libmpsse.dll deleted file mode 100644 index a3d19379e8..0000000000 Binary files a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/Ili9488Charts_Sample/libmpsse.dll and /dev/null differ diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/MAX7219_Sample/MAX7219_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/MAX7219_Sample/MAX7219_Sample.csproj index cecc93b920..5280e31e67 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/MAX7219_Sample/MAX7219_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/MAX7219_Sample/MAX7219_Sample.csproj @@ -2,23 +2,17 @@ Exe - net7.0 + net8.0-windows enable enable - - - - - - - - - - PreserveNewest - + + + + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/MAX7219_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/MAX7219_Sample/MeadowApp.cs index d638fd64b7..df401e53f9 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/MAX7219_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/MAX7219_Sample/MeadowApp.cs @@ -39,7 +39,6 @@ public void Text() label.Text = "HELLO"; screen.Controls.Add(label); - } public void TextOnBox() @@ -86,7 +85,6 @@ public void Sweep() Thread.Sleep(50); } - } public static async Task Main(string[] args) diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/MAX7219_Sample/libmpsse.dll b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/MAX7219_Sample/libmpsse.dll deleted file mode 100644 index a3d19379e8..0000000000 Binary files a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Samples/MAX7219_Sample/libmpsse.dll and /dev/null differ diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/NmeaProcessor.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/NmeaProcessor.cs index b6646fce18..46369ae663 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/NmeaProcessor.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/NmeaProcessor.cs @@ -46,7 +46,7 @@ public NmeaSentenceProcessor() /// NMEA decoder public void RegisterDecoder(INmeaDecoder decoder) { - Resolver.Log.Info($"Registering decoder: {decoder.Prefix}"); + Resolver.Log.Trace($"Registering decoder: {decoder.Prefix}"); if (decoders.ContainsKey(decoder.Prefix)) { throw new Exception(decoder.Prefix + " already registered."); diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/Sensors.Location.Gnss.NmeaProcessor.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/Sensors.Location.Gnss.NmeaProcessor.csproj index 2034fca762..662a628618 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/Sensors.Location.Gnss.NmeaProcessor.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/Sensors.Location.Gnss.NmeaProcessor.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Wilderness Labs, Inc netstandard2.1 Library @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Samples/NmeaProcessor_Sample/NmeaProcessor_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Samples/NmeaProcessor_Sample/NmeaProcessor_Sample.csproj index 1306636ea2..c71cd1f2f1 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Samples/NmeaProcessor_Sample/NmeaProcessor_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Samples/NmeaProcessor_Sample/NmeaProcessor_Sample.csproj @@ -13,12 +13,7 @@ - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Samples/NmeaProcessor_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Samples/NmeaProcessor_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Samples/NmeaProcessor_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/DateTimeConverters.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/DateTimeConverters.cs new file mode 100644 index 0000000000..7f8b7fbe35 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/DateTimeConverters.cs @@ -0,0 +1,87 @@ +using System; +using System.Globalization; + +namespace Meadow.Foundation.Serialization; + +internal static class DateTimeConverters +{ + /// + /// Converts an ISO 8601 time/input formatted string into a DateTime object. + /// + /// Date time string in ISO 8601 format. + /// A new DateTime object representing the input date and time. + /// Thrown when the input string is not in the expected ISO 8601 format. + public static DateTime FromIso8601(string input) + { + // Check if format contains the timezone ID, UTC reference + bool isUtc = input.EndsWith("Z"); + + if (DateTime.TryParseExact(input, "yyyy-MM-ddTHH:mm:ss.FFFK", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var dateTime)) + { + if (!isUtc && input.Length > 19) + { + string offset = input[19..]; + TimeSpan timeOffset = TimeSpan.Parse(offset); + dateTime = dateTime.Add(timeOffset); + } + + return dateTime; + } + + throw new ArgumentException("Invalid ISO 8601 format", nameof(input)); + } + + /// + /// Converts a DateTime object into an ISO 8601 string in UTC format. + /// + /// The DateTime to convert. + /// DateTime as an ISO 8601 string in UTC format. + public static string ToIso8601(DateTime dateTime) + { + return $"{dateTime:yyyy-MM-ddTHH:mm:ss.FFFZ}"; + } + + /// + /// Converts a DateTime object into an ISO 8601 string in UTC format. + /// + /// The DateTime to convert. + /// DateTime as an ISO 8601 string in UTC format. + public static string ToIso8601(DateTimeOffset dateTime) + { + return $"{dateTime:yyyy-MM-ddTHH:mm:ss.FFFZ}"; + } + + /// + /// Converts a DateTime to the ASP.NET Ajax JSON format. + /// + /// The DateTime to convert. + /// A string representation of the DateTime in ASP.NET Ajax JSON format. + public static string ToASPNetAjax(DateTime dateTime) + { + return $@"\/Date({dateTime.Ticks})\/"; + } + + /// + /// Converts a DateTime to the ASP.NET Ajax JSON format. + /// + /// The DateTime to convert. + /// A string representation of the DateTime in ASP.NET Ajax JSON format. + public static string ToASPNetAjax(DateTimeOffset dateTime) + { + return $@"\/Date({dateTime.Ticks})\/"; + } + + /// + /// Converts an ASP.NET Ajax JSON string to DateTime + /// + /// The ajax formatted date time string + /// A new DateTime object representing the input date and time. + public static DateTime FromASPNetAjax(string ajax) + { + string[] parts = ajax.Split(new char[] { '(', ')' }); + + long ticks = Convert.ToInt64(parts[1]); + + return new DateTime(ticks, DateTimeKind.Utc); + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/JsonIgnoreAttribute.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/JsonIgnoreAttribute.cs new file mode 100644 index 0000000000..0dccb7a106 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/JsonIgnoreAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace Meadow.Foundation.Serialization; + +/// +/// Specifies that a property should be ignored when serializing an object to JSON. +/// +/// +/// This attribute can be applied to properties in a class to indicate that the property +/// should not be included in the JSON representation of the object. This can be useful +/// for properties that do not contain information relevant to the purpose of the serialization, +/// or for properties that might contain sensitive information. +/// +[AttributeUsage(AttributeTargets.Property, Inherited = true)] +public class JsonIgnoreAttribute : Attribute +{ +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.Enums.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.Enums.cs new file mode 100644 index 0000000000..afc69e4b1c --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.Enums.cs @@ -0,0 +1,26 @@ +namespace Meadow.Foundation.Serialization; + +internal enum NumberStyle +{ + Decimal = 1, + Hexadecimal +} + +public static partial class MicroJson +{ + /// + /// Enumeration of the popular formats of time and date with Json. + /// + public enum DateTimeFormat + { + /// + /// ISO 8601 format for time and date representation in JSON. + /// + ISO8601, + + /// + /// ASP.NET Ajax JSON format for time and date representation. + /// + Ajax + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.Parser.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.Parser.cs new file mode 100644 index 0000000000..b77dc525b7 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.Parser.cs @@ -0,0 +1,514 @@ +using System; +using System.Collections; +using System.Globalization; +using System.Text; + +namespace Meadow.Foundation.Serialization; + +/// +/// Parses JSON strings into a Hashtable, mapping property names to their values. +/// Values can be Hashtables (for nested objects), ArrayLists (for collections), +/// or value types (e.g., string, int, bool, Guid, DateTime). +/// +internal class Parser +{ + protected enum Token + { + None = 0, + ObjectBegin, // { + ObjectEnd, // } + ArrayBegin, // [ + ArrayEnd, // ] + PropertySeparator, // : + ItemsSeparator, // , + StringType, // " <-- string of characters + NumberType, // 0-9 <-- number, fixed or floating point + BooleanTrue, // true + BooleanFalse, // false + NullType // null + } + + /// + /// Parses the string json into a value + /// + /// A JSON string. + /// An ArrayList, a Hashtable, a double, long, a string, null, true, or false + public static object? JsonDecode(string json) + { + bool success = true; + + return JsonDecode(json, ref success); + } + + /// + /// Parses the string json into a value + /// + /// A JSON string. + /// true if successfu; + /// The decoded object + public static object? JsonDecode(string json, ref bool success) + { + success = false; + + if (json != null) + { + char[] charArray = json.ToCharArray(); + int index = 0; + object? value = ParseValue(charArray, ref index, ref success); + return value; + } + return null; + } + + /// + /// Parses a JSON object from the provided character array. + /// + /// The JSON character array. + /// The current index in the character array. + /// A reference indicating the success of the parsing operation. + /// A Hashtable representing the parsed JSON object, or null if parsing fails. + protected static Hashtable? ParseObject(char[] json, ref int index, ref bool success) + { + var table = new Hashtable(); + Token token; + + // { + NextToken(json, ref index); + + bool done = false; + while (!done) + { + token = LookAhead(json, index); + if (token == Token.None) + { + success = false; + return null; + } + else if (token == Token.ItemsSeparator) + { + NextToken(json, ref index); + } + else if (token == Token.ObjectEnd) + { + NextToken(json, ref index); + return table; + } + else + { // name + string? name = ParseString(json, ref index, ref success); + if (!success) + { + return null; + } + + // : + if (NextToken(json, ref index) != Token.PropertySeparator) + { + success = false; + return null; + } + + // value + object? value = ParseValue(json, ref index, ref success); + if (!success) + { + return null; + } + + table[name] = value; + } + } + + return table; + } + + + /// + /// Parses a JSON array from the provided character array. + /// + /// The JSON character array. + /// The current index in the character array. + /// A reference indicating the success of the parsing operation. + /// An ArrayList representing the parsed JSON array, or null if parsing fails. + protected static ArrayList? ParseArray(char[] json, ref int index, ref bool success) + { + var array = new ArrayList(); + + // [ + NextToken(json, ref index); + + bool done = false; + while (!done) + { + Token token = LookAhead(json, index); + if (token == Token.None) + { + success = false; + return null; + } + else if (token == Token.ItemsSeparator) + { + NextToken(json, ref index); + } + else if (token == Token.ArrayEnd) + { + NextToken(json, ref index); + break; + } + else + { + object? value = ParseValue(json, ref index, ref success); + if (!success) + { + return null; + } + + array.Add(value); + } + } + + return array; + } + + /// + /// Parses a JSON value from the provided character array. + /// + /// The JSON character array. + /// The current index in the character array. + /// A reference indicating the success of the parsing operation. + /// The parsed JSON value as an object, or null if parsing fails. + protected static object? ParseValue(char[] json, ref int index, ref bool success) + { + switch (LookAhead(json, index)) + { + case Token.StringType: + return ParseString(json, ref index, ref success); + case Token.NumberType: + return ParseNumber(json, ref index, ref success); + case Token.ObjectBegin: + return ParseObject(json, ref index, ref success); + case Token.ArrayBegin: + return ParseArray(json, ref index, ref success); + case Token.BooleanTrue: + NextToken(json, ref index); + return true; + case Token.BooleanFalse: + NextToken(json, ref index); + return false; + case Token.NullType: + NextToken(json, ref index); + return null; + case Token.None: + break; + } + + success = false; + return null; + } + + /// + /// Parses a JSON string from the provided character array. + /// + /// The JSON character array. + /// The current index in the character array. + /// A reference indicating the success of the parsing operation. + /// The parsed JSON string, or null if parsing fails. + protected static string? ParseString(char[] json, ref int index, ref bool success) + { + var result = new StringBuilder(); + + success = true; + + AdvanceIndexPastWhitespace(json, ref index); + + char character; + bool complete = false; + + index++; + while (!complete) + { + if (index == json.Length) + { + break; + } + + character = json[index++]; + if (character == '"') + { + complete = true; + break; + } + else if (character == '\\') + { + if (index == json.Length) + { + break; + } + + character = json[index++]; + if (character == '"') + { + result.Append('"'); + } + else if (character == '\\') + { + result.Append('\\'); + } + else if (character == '/') + { + result.Append('/'); + } + else if (character == 'b') + { + result.Append('\b'); + } + else if (character == 'f') + { + result.Append('\f'); + } + else if (character == 'n') + { + result.Append('\n'); + } + else if (character == 'r') + { + result.Append('\r'); + } + else if (character == 't') + { + result.Append('\t'); + } + else if (character == 'u') + { + int remainingLength = json.Length - index; + if (remainingLength >= 4) + { + // parse the 32 bit hex into an integer codepoint + if (!(success = UInt32Converters.TryParse(new string(json, index, 4), NumberStyle.Hexadecimal, out uint codePoint))) + { + return string.Empty; + } + + // convert the integer codepoint to a unicode char and add to string + result.Append(UInt32Converters.ConvertUnicodeToAsciiString((int)codePoint)); + + // skip 4 chars + index += 4; + } + else + { + break; + } + } + } + else + { + result.Append(character); + } + } + + if (!complete) + { + success = false; + return null; + } + + return result.ToString(); + } + + /// + /// Determines the type of number (int, double, etc) and returns an object + /// containing that value. + /// + /// The JSON character array. + /// The current index in the character array. + /// A reference indicating the success of the parsing operation. + /// The parsed number as an object, or null if parsing fails. + protected static object? ParseNumber(char[] json, ref int index, ref bool success) + { + AdvanceIndexPastWhitespace(json, ref index); + + int lastIndex = GetLastIndexOfNumber(json, index); + int charLength = lastIndex - index + 1; + var value = new string(json, index, charLength); + + index = lastIndex + 1; + success = true; + + string dot = CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator; + string comma = CultureInfo.InvariantCulture.NumberFormat.NumberGroupSeparator; + + // Detecting and parsing the number based on its characteristics + if (value.Contains(dot) || value.Contains(comma) || value.Contains("e") || value.Contains("E")) + { + // Parse as a double for floating-point numbers + if (double.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out double dblValue)) + { + return dblValue; + } + } + else if (value.StartsWith("0x", StringComparison.OrdinalIgnoreCase) || value.IndexOfAny("abcdefABCDEF".ToCharArray()) >= 0) + { + // Parse as a hexadecimal number + if (long.TryParse(value[2..], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out long hexValue)) + { + return hexValue; + } + } + else + { + // Parse as a long integer for decimal numbers + if (long.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out long intValue)) + { + return intValue; + } + } + + success = false; + return null; + } + + /// + /// Gets the last index of a number in the JSON data starting from the specified index. + /// + /// The JSON character array. + /// The starting index in the character array. + /// The last index of the number in the character array. + protected static int GetLastIndexOfNumber(char[] json, int index) + { + int lastIndex; + + for (lastIndex = index; lastIndex < json.Length; lastIndex++) + { + // Check if the character is a part of a number + if ("0123456789+-.eE".IndexOf(json[lastIndex]) == -1) + { + break; + } + } + + return lastIndex - 1; + } + + /// + /// Advances the index past any whitespace characters in the JSON data. + /// + /// The JSON character array. + /// The current index in the character array. + protected static void AdvanceIndexPastWhitespace(char[] json, ref int index) + { + for (; index < json.Length; index++) + { + if (!char.IsWhiteSpace(json[index])) + { + break; + } + } + } + + /// + /// Looks ahead in the JSON data to determine the next token without advancing the index. + /// + /// The JSON character array. + /// The current index in the character array. + /// The next token in the character array. + protected static Token LookAhead(char[] json, int index) + { + int saveIndex = index; + return NextToken(json, ref saveIndex); + } + + /// + /// Gets the next token in the JSON data and advances the index accordingly. + /// + /// The JSON character array. + /// The current index in the character array. + /// The next token in the character array. + protected static Token NextToken(char[] json, ref int index) + { + AdvanceIndexPastWhitespace(json, ref index); + + if (index == json.Length) + { + return Token.None; + } + + char nextCharacter = json[index]; + index++; + + switch (nextCharacter) + { + case '{': + return Token.ObjectBegin; + case '}': + return Token.ObjectEnd; + case '[': + return Token.ArrayBegin; + case ']': + return Token.ArrayEnd; + case ',': + return Token.ItemsSeparator; + case '"': + return Token.StringType; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + return Token.NumberType; + case ':': + return Token.PropertySeparator; + } + index--; + + int remainingLength = json.Length - index; + + // false + if (remainingLength >= 5) + { + if (json[index] == 'f' && + json[index + 1] == 'a' && + json[index + 2] == 'l' && + json[index + 3] == 's' && + json[index + 4] == 'e') + { + index += 5; + return Token.BooleanFalse; + } + } + + // true + if (remainingLength >= 4) + { + if (json[index] == 't' && + json[index + 1] == 'r' && + json[index + 2] == 'u' && + json[index + 3] == 'e') + { + index += 4; + return Token.BooleanTrue; + } + } + + // null + if (remainingLength >= 4) + { + if (json[index] == 'n' && + json[index + 1] == 'u' && + json[index + 2] == 'l' && + json[index + 3] == 'l') + { + index += 4; + return Token.NullType; + } + } + + return Token.None; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.TypeSafe.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.TypeSafe.cs new file mode 100644 index 0000000000..f07c6409b2 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.TypeSafe.cs @@ -0,0 +1,336 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Meadow.Foundation.Serialization; + +public static partial class MicroJson +{ + /// + /// Deserializes a JSON array into a list of objects of type T. + /// + /// The type of objects in the list. + /// The JSON array to deserialize. + /// A list of objects of type T. + public static List DeserializeList(ArrayList array) + where T : new() + { + var result = new List(array.Count); + DeserializeList(array, typeof(T), ref result); + return result; + } + + /// + /// Deserializes a JSON array into a list of objects of type T. + /// + /// The type of objects in the list. + /// The JSON array to deserialize. + /// The type of objects in the list as a . + /// + /// A list of objects of type T. + private static void DeserializeList(ArrayList array, Type type, ref List instance) + where T : new() + { + foreach (var item in array) + { + if (item is string jsonString) + { + var deserializedItem = Deserialize(jsonString); + instance.Add(deserializedItem); + } + else if (item is Hashtable hashtable) + { + object? listItem = Activator.CreateInstance(); + Deserialize(hashtable, typeof(T), ref listItem!); + instance.Add((T)listItem); + } + else + { + throw new ArgumentException("Unsupported type in ArrayList for deserialization."); + } + } + } + + /// + /// Deserializes a JSON array into an array of objects of type T. + /// + /// The type of objects in the array. + /// The JSON array to deserialize. + /// An array of objects of type T. + public static T[] DeserializeArray(ArrayList array) + where T : new() + { + var result = new T[array.Count]; + var index = 0; + + foreach (string item in array) + { + result[index++] = Deserialize(item); + } + + return result; + } + + /// + /// Deserializes an object of type T from a JSON string. + /// + /// The type of object to deserialize. + /// A UTF8-encoded JSON string to deserialize. + /// An object of type T. + public static T Deserialize(byte[] encodedData) + { + return Deserialize(Encoding.UTF8.GetString(encodedData)); + } + + /// + /// Deserializes an object of type T from a JSON string. + /// + /// The type of object to deserialize. + /// The JSON string to deserialize. + /// An object of type T. + public static T Deserialize(string json) + { + var type = typeof(T); + + return (T)Deserialize(json, type); + } + + /// + /// Deserializes an object of type T from a JSON string. + /// + /// The type of object to deserialize. + /// The JSON string to deserialize. + /// An object of the specified type + public static object Deserialize(string json, Type type) + { + if (type.IsArray) + { + var elementType = type.GetElementType(); + var rootArray = DeserializeString(json) as ArrayList; + var targetArray = Array.CreateInstance(elementType, rootArray?.Count ?? 0); + + var index = 0; + + if (rootArray is not null) + { + foreach (var item in rootArray) + { + if (item is Hashtable h) + { + object instance = Activator.CreateInstance(elementType); + Deserialize(h, elementType, ref instance); + targetArray.SetValue(instance, index++); + } + else + { + var instance = Convert.ChangeType(item, elementType); + targetArray.SetValue(instance, index++); + } + } + } + + return targetArray; + } + else if (typeof(IDictionary).IsAssignableFrom(type)) + { + if (type.IsGenericType) + { + if (DeserializeString(json) is not Hashtable table) + { + throw new ArgumentException("Invalid JSON data or format not supported"); + } + + return DeserializeHashtableToDictionary(table, type) + ?? throw new NotSupportedException($"Type '{type.Name}' not supported"); + } + throw new NotSupportedException($"Type '{type.Name}' not supported"); + } + else if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) + { + var elementType = type.GetGenericArguments()[0]; + var rootArray = DeserializeString(json) as ArrayList; + var targetList = Activator.CreateInstance(typeof(List<>).MakeGenericType(elementType)); + + var addMethod = targetList.GetType().GetMethod("Add"); + + if (rootArray is not null) + { + foreach (Hashtable item in rootArray) + { + object instance = Activator.CreateInstance(elementType); + Deserialize(item, elementType, ref instance); + addMethod.Invoke(targetList, new[] { instance }); + } + } + + return targetList; + } + else + { + object instance = Activator.CreateInstance(type); + Deserialize(json, type, ref instance); + + return instance; + } + } + + private static IDictionary? DeserializeHashtableToDictionary(Hashtable hashtable, Type dictionaryType) + { + var genericArguments = dictionaryType.GetGenericArguments(); + var keyType = genericArguments[0]; + var valueType = genericArguments[1]; + + var dictionary = (IDictionary)Activator.CreateInstance(dictionaryType); + + foreach (DictionaryEntry entry in hashtable) + { + object key = Convert.ChangeType(entry.Key, keyType); + object value = Convert.ChangeType(entry.Value, valueType); + dictionary.Add(key, value); + } + + return dictionary; + } + + /// + /// Deserializes an object of the specified type from a JSON string. + /// + /// The JSON string to deserialize. + /// The type of object to deserialize as a . + /// The object instance to populate. + private static void Deserialize(string json, Type type, ref object instance) + { + var root = DeserializeString(json) as Hashtable; + + Deserialize(root, type, ref instance); + } + + /// + /// Deserializes an object of the specified type from a Hashtable. + /// + /// The Hashtable representing the JSON data. + /// The type of object to deserialize as a . + /// The object instance to populate. + private static void Deserialize(Hashtable? root, Type type, ref object instance) + { + var values = root ?? throw new ArgumentException(); + + var props = type.GetProperties( + System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic) + .Where(p => p.GetCustomAttributes(typeof(JsonIgnoreAttribute), true).Length == 0) + .ToList(); + + foreach (string v in values.Keys) + { + var prop = props.FirstOrDefault(p => string.Compare(p.Name, v, StringComparison.OrdinalIgnoreCase) == 0); + + if (prop != null && prop.CanWrite) + { + Type propType = prop.PropertyType; + + if (propType.IsEnum) + { + prop.SetValue(instance, Enum.Parse(propType, values[v].ToString())); + } + else if (propType.IsArray) + { + var al = values[v] as ArrayList; + var elementType = propType.GetElementType(); + var targetArray = Array.CreateInstance(elementType, al!.Count); + for (int i = 0; i < al.Count; i++) + { + object arrayItem = Activator.CreateInstance(elementType); + Deserialize(al[i] as Hashtable, elementType, ref arrayItem); + targetArray.SetValue(arrayItem, i); + } + prop.SetValue(instance, targetArray); + } + else if (propType.IsGenericType && propType.GetGenericTypeDefinition() == typeof(List<>)) + { + var listType = propType.GetGenericArguments()[0]; + var list = Activator.CreateInstance(propType); + var addMethod = propType.GetMethod("Add"); + + foreach (var item in (ArrayList)values[v]) + { + object listItem = Activator.CreateInstance(listType); + Deserialize(item as Hashtable, listType, ref listItem); + addMethod.Invoke(list, new[] { listItem }); + } + + prop.SetValue(instance, list); + } + else if (propType.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IDictionary<,>))) + { + var dictionary = DeserializeHashtableToDictionary((Hashtable)values[v], propType) + ?? throw new NotSupportedException($"Type '{type.Name}' not supported"); + prop.SetValue(instance, dictionary); + } + else if (IsComplexType(propType)) + { + if (values[v] is Hashtable hashtableValue) + { + object complexInstance = Activator.CreateInstance(propType); + Deserialize(hashtableValue, propType, ref complexInstance); + prop.SetValue(instance, complexInstance); + } + else if (propType == typeof(DateTimeOffset)) + { + var dto = DateTimeOffset.Parse(values[v].ToString()); + prop.SetValue(instance, dto); + } + else if (propType == typeof(object)) + { + prop.SetValue(instance, DeserializeDynamic(values[v])); + } + else + { + throw new NotSupportedException($"Unable to deserialize type '{propType}'"); + } + } + else + { + if (values[v] != null && values[v] != DBNull.Value) + { + prop.SetValue(instance, Convert.ChangeType(values[v], propType)); + } + } + } + } + } + + private static bool IsComplexType(Type type) + { + if (type.IsPrimitive || + type.IsEnum || + type == typeof(string) || + type == typeof(decimal) || + type == typeof(DateTime) || + type == typeof(Guid) + ) + { + return false; + } + + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) + { + return IsComplexType(Nullable.GetUnderlyingType(type)); + } + + return true; + } + + private static object? DeserializeDynamic(object jsonValue) + { + return jsonValue switch + { + string stringValue => stringValue, + double doubleValue => doubleValue, + long longValue => longValue, + bool boolValue => boolValue, + _ => throw new NotSupportedException($"Unable to deserialize dynamic type '{jsonValue.GetType()}'") + }; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.cs new file mode 100644 index 0000000000..78e941febe --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/MicroJson.cs @@ -0,0 +1,222 @@ +using System; +using System.Collections; +using System.Linq; +using System.Reflection; +using System.Text; + +namespace Meadow.Foundation.Serialization; + +/// +/// JSON Serialization and Deserialization library for .NET +/// +public static partial class MicroJson +{ + /// + /// Desrializes a Json string into an object. + /// + /// + /// An ArrayList, a Hashtable, a double, a long, a string, null, true, or false + public static object? Deserialize(string json) + { + return DeserializeString(json); + } + + /// + /// Deserializes a Json string into an object. + /// + /// + /// An ArrayList, a Hashtable, a double, a long, a string, null, true, or false + public static object? DeserializeString(string json) + { + return Parser.JsonDecode(json); + } + + /// + /// Converts an object to a JSON string. + /// + /// The value to convert. + /// The format to use for DateTime values. Defaults to ISO 8601 format. + /// True to convert all properties to camel case during serialization + /// The JSON object as a string or null when the value type is not supported. + /// For objects, only public properties with getters are converted. + public static string? Serialize(object o, DateTimeFormat dateTimeFormat = DateTimeFormat.ISO8601, bool convertNamesToCamelCase = true) + { + if (o == null) + { + return "null"; + } + + Type type = o.GetType(); + + if (type.IsEnum) + { + // Serialize enum values by converting them to integers + return $"{(int)o}"; + } + + switch (Type.GetTypeCode(type)) + { + case TypeCode.Boolean: + return (bool)o ? "true" : "false"; + case TypeCode.String: + return $"\"{o}\"" + .Replace("\n", "\\n") + .Replace("\r", "\\r"); + case TypeCode.Char: + return $"\"{o}\""; + case TypeCode.Single: + case TypeCode.Double: + case TypeCode.Decimal: + case TypeCode.Byte: + case TypeCode.SByte: + case TypeCode.Int16: + case TypeCode.UInt16: + case TypeCode.Int32: + case TypeCode.UInt32: + case TypeCode.Int64: + case TypeCode.UInt64: + return o.ToString(); + case TypeCode.DateTime: + return dateTimeFormat switch + { + DateTimeFormat.Ajax => $"\"{DateTimeConverters.ToASPNetAjax((DateTime)o)}\"", + _ => $"\"{DateTimeConverters.ToIso8601((DateTime)o)}\"", + }; + default: + if (type == typeof(DateTimeOffset)) + { + return dateTimeFormat switch + { + DateTimeFormat.Ajax => $"\"{DateTimeConverters.ToASPNetAjax((DateTimeOffset)o)}\"", + _ => $"\"{DateTimeConverters.ToIso8601((DateTimeOffset)o)}\"", + }; + } + if (type == typeof(Guid)) + { + return $"\"{o}\""; + } + else if (type == typeof(Single) || type == typeof(Double) || type == typeof(Decimal) || type == typeof(float)) + { + return o.ToString(); + } + break; + } + + if (o is IDictionary dictionary && !type.IsArray) + { + return SerializeIDictionary(dictionary, dateTimeFormat); + } + + if (o is IEnumerable enumerable) + { + return SerializeIEnumerable(enumerable, dateTimeFormat); + } + + if (o is DictionaryEntry entry) + { + var hashtable = new Hashtable + { + { entry.Key, entry.Value } + }; + return SerializeIDictionary(hashtable, dateTimeFormat); + } + + if (type.IsClass) + { + var hashtable = new Hashtable(); + + // Use PropertyInfo instead of MethodInfo for better performance + var properties = type + .GetProperties(BindingFlags.Public | BindingFlags.Instance) + .Where(p => p.GetCustomAttributes(typeof(JsonIgnoreAttribute), true).Length == 0); + + foreach (PropertyInfo property in properties) + { + object returnObject = property.GetValue(o); + var name = convertNamesToCamelCase + ? char.ToLowerInvariant(property.Name[0]) + property.Name[1..] + : property.Name; + + // camel case the name + hashtable.Add(name, returnObject); + } + + return SerializeIDictionary(hashtable, dateTimeFormat); + } + + throw new NotSupportedException($"Serialization of type {type.Name} is not supported"); + } + + /// + /// Converts an IEnumerable to a JSON string. + /// + /// The IEnumerable to convert. + /// The format to use for DateTime values. Defaults to ISO 8601 format. + /// The JSON array as a string or null when the value type is not supported. + private static string SerializeIEnumerable(IEnumerable enumerable, DateTimeFormat dateTimeFormat = DateTimeFormat.ISO8601) + { + var result = new StringBuilder("["); + + foreach (object current in enumerable) + { + if (result.Length > 1) + { + result.Append(","); + } + + result.Append(Serialize(current, dateTimeFormat)); + } + + result.Append("]"); + return result.ToString(); + } + + /// + /// Converts an IDictionary to a JSON string. + /// + /// The IDictionary to convert. + /// The format to use for DateTime values. Defaults to ISO 8601 format. + /// The JSON object as a string or null when the value type is not supported. + private static string SerializeIDictionary(IDictionary dictionary, DateTimeFormat dateTimeFormat = DateTimeFormat.ISO8601) + { + var result = new StringBuilder("{"); + + foreach (DictionaryEntry entry in dictionary) + { + if (result.Length > 1) + { + result.Append(","); + } + + result.Append($"\"{entry.Key}\":{Serialize(entry.Value, dateTimeFormat)}"); + } + + result.Append("}"); + return result.ToString(); + } + + + /// + /// Safely serialize a String into a JSON string value, escaping all backslash and quote characters. + /// + /// The string to serialize. + /// The serialized JSON string. + public static string SerializeString(string input) + { + if (input.IndexOfAny(new[] { '\\', '\"' }) < 0) + { + return input; + } + + var result = new StringBuilder(input.Length + 1); // we know there is at least 1 char to escape + foreach (char ch in input) + { + if (ch == '\\' || ch == '\"') + { + result.Append('\\'); + } + result.Append(ch); + } + return result.ToString(); + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/Readme.md b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/Readme.md new file mode 100644 index 0000000000..bf053a3cd4 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/Readme.md @@ -0,0 +1,100 @@ +# Meadow.Foundation.Serialization.MicroJson + +**Lightweight .NET Json serializer/deserializer** + +The **MicroJson** library is included in the **Meadow.Foundation.Serialization.MicroJson** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. + +This driver is part of the [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/) peripherals library, an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT applications. + +For more information on developing for Meadow, visit [developer.wildernesslabs.co](http://developer.wildernesslabs.co/). + +To view all Wilderness Labs open-source projects, including samples, visit [github.com/wildernesslabs](https://github.com/wildernesslabs/). + +## Installation + +You can install the library from within Visual studio using the the NuGet Package Manager or from the command line using the .NET CLI: + +`dotnet add package Meadow.Foundation.Serialization.MicroJson` +## Usage + +```csharp +public static void Main(string[] args) +{ + var resourceData = LoadResource("menu.json"); + + var menuJson = new string(System.Text.Encoding.UTF8.GetChars(resourceData)); + + DeserializeTypeSafe(menuJson); + DeserializeAsHashtable(menuJson); +} + +private static void DeserializeTypeSafe(string menuJson) +{ + string testJsonItem = "{\"ScreenX\":290,\"ScreenY\":210,\"RawX\":3341,\"RawY\":3353}"; + var point = MicroJson.Deserialize(testJsonItem); + + string testJsonArray = "[{\"ScreenX\":30,\"ScreenY\":30,\"RawX\":522,\"RawY\":514},{\"ScreenX\":290,\"ScreenY\":210,\"RawX\":3341,\"RawY\":3353}]"; + + var points = MicroJson.Deserialize(testJsonArray); + + var menu = MicroJson.Deserialize(menuJson); +} + +private static void DeserializeAsHashtable(string menuJson) +{ + var menuData = MicroJson.DeserializeString(menuJson) as Hashtable; + + if (menuData["menu"] == null) + { + throw new ArgumentException("JSON root must contain a 'menu' item"); + } + + Console.WriteLine($"Root element is {menuData["menu"]}"); + + var items = (ArrayList)menuData["menu"]; + + foreach (Hashtable item in items) + { + Console.WriteLine($"Found {item["text"]}"); + } +} + +private static byte[] LoadResource(string filename) +{ + var assembly = Assembly.GetExecutingAssembly(); + var resourceName = $"MicroJson_Sample.{filename}"; + + using Stream stream = assembly.GetManifestResourceStream(resourceName); + using var ms = new MemoryStream(); + stream.CopyTo(ms); + return ms.ToArray(); +} + +``` +## How to Contribute + +- **Found a bug?** [Report an issue](https://github.com/WildernessLabs/Meadow_Issues/issues) +- Have a **feature idea or driver request?** [Open a new feature request](https://github.com/WildernessLabs/Meadow_Issues/issues) +- Want to **contribute code?** Fork the [Meadow.Foundation](https://github.com/WildernessLabs/Meadow.Foundation) repository and submit a pull request against the `develop` branch + + +## Need Help? + +If you have questions or need assistance, please join the Wilderness Labs [community on Slack](http://slackinvite.wildernesslabs.co/). +## About Meadow + +Meadow is a complete, IoT platform with defense-grade security that runs full .NET applications on embeddable microcontrollers and Linux single-board computers including Raspberry Pi and NVIDIA Jetson. + +### Build + +Use the full .NET platform and tooling such as Visual Studio and plug-and-play hardware drivers to painlessly build IoT solutions. + +### Connect + +Utilize native support for WiFi, Ethernet, and Cellular connectivity to send sensor data to the Cloud and remotely control your peripherals. + +### Deploy + +Instantly deploy and manage your fleet in the cloud for OtA, health-monitoring, logs, command + control, and enterprise backend integrations. + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/Serialization.MicroJson.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/Serialization.MicroJson.csproj new file mode 100644 index 0000000000..3752529c48 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/Serialization.MicroJson.csproj @@ -0,0 +1,26 @@ + + + 1.11.0 + Readme.md + Apache-2.0 + true + Wilderness Labs, Inc + netstandard2.1 + Library + MicroJson + Wilderness Labs, Inc + http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ + Meadow.Foundation.Serialization.MicroJson + icon.png + https://github.com/WildernessLabs/Meadow.Foundation + Micro,Json,Serialize,Deserialize,serializer,deserializer,IoT,C#,Meadow,Meadow.Foundation,.NET + true + Lightweight .NET Json serializer/deserializer + enable + 10.0 + + + + + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/UInt32Converters.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/UInt32Converters.cs new file mode 100644 index 0000000000..e58baf6a00 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/UInt32Converters.cs @@ -0,0 +1,35 @@ +using System; + +namespace Meadow.Foundation.Serialization; + +/// +/// Provides utility methods for converting and parsing UInt32 values. +/// +internal static class UInt32Converters +{ + /// + /// Tries to parse a string representation of a UInt32 value with the specified number style. + /// + /// The string to parse. + /// The number style to use during parsing. + /// When the method returns, contains the parsed UInt32 value. + /// true if the parsing was successful; otherwise, false. + public static bool TryParse(string str, NumberStyle style, out UInt32 result) + { + bool parsingResult = UInt64Converters.TryParse(str, style == NumberStyle.Hexadecimal, out ulong tmp, out bool sign); + result = (UInt32)tmp; + + return parsingResult && !sign; + } + + /// + /// Converts a Unicode character to a string of its ASCII equivalent. + /// This method is suitable for ordinary characters. + /// + /// The Unicode code point. + /// The string representation of the ASCII character. + public static string ConvertUnicodeToAsciiString(int codePoint) + { + return new string((char)codePoint, 1); + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/UInt64Converters.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/UInt64Converters.cs new file mode 100644 index 0000000000..6023466a0d --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/UInt64Converters.cs @@ -0,0 +1,143 @@ +using System; +using System.Globalization; + +namespace Meadow.Foundation.Serialization; + +internal static class UInt64Converters +{ + /// + /// The maximum number of digits supported for parsing double values. + /// + public const int MaxDoubleDigits = 16; + + /// + /// Parse integer values using localized number format information. + /// + /// + /// + /// + /// + /// true if succesful + public static bool TryParse(string input, bool parseHex, out ulong result, out bool sign) + { + // Check for hexadecimal prefix + if (input.Length >= 2 && input.StartsWith("0x", StringComparison.OrdinalIgnoreCase)) + { + input = input[2..]; + parseHex = true; + } + + char character; + bool isOverflow = false; + result = 0; + + int length = input.Length; + int currentIndex = 0; + while (currentIndex < length && char.IsWhiteSpace(input[currentIndex])) + { + currentIndex++; + } + + NumberFormatInfo nfi = CultureInfo.CurrentUICulture.NumberFormat; + string posSign = nfi.PositiveSign; + string negSign = nfi.NegativeSign; + sign = false; + + while (currentIndex < length) + { + character = input[currentIndex]; + if (!parseHex && (character == negSign[0] || character == posSign[0])) + { + sign = character == negSign[0]; + ++currentIndex; + } + else if ((parseHex && ((character >= 'A' && character <= 'F') || (character >= 'a' && character <= 'f'))) || + (character >= '0' && character <= '9')) + { + break; + } + else + { + return false; + } + } + + if (currentIndex >= length) + { + return false; + } + + uint low = 0; + uint high = 0; + uint digit; + ulong lowPart, highPart; + + // Parse the value based on the selected format + do + { + character = input[currentIndex]; + if ((character >= '0' && character <= '9') || (parseHex && ((character >= 'A' && character <= 'F') || (character >= 'a' && character <= 'f')))) + { + digit = parseHex ? + (uint)(char.IsDigit(character) ? character - '0' : char.ToUpper(character) - 'A' + 10) : + (uint)(character - '0'); + + if (!isOverflow) + { + lowPart = low * ((ulong)(parseHex ? 16 : 10)); + highPart = high * ((ulong)(parseHex ? 16 : 10)); + highPart += lowPart >> 32; + + if (highPart > 0xFFFFFFFF) + { + isOverflow = true; + } + else + { + lowPart = (lowPart & 0xFFFFFFFF) + digit; + highPart += (lowPart >> 32); + + if (highPart > 0xFFFFFFFF) + { + isOverflow = true; + } + else + { + low = unchecked((uint)lowPart); + high = unchecked((uint)highPart); + } + } + } + currentIndex++; + } + else + { + break; + } + } while (currentIndex < length); + + if (currentIndex < length) + { + do + { + character = input[currentIndex]; + if (char.IsWhiteSpace(character)) + { + ++currentIndex; + } + else + { + break; + } + } while (currentIndex < length); + + if (currentIndex < length) + { + return false; + } + } + + result = (((ulong)high) << 32) | low; + return !isOverflow; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/MicroJson_ArrayList_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/MicroJson_ArrayList_Sample.csproj new file mode 100644 index 0000000000..16ccb4da76 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/MicroJson_ArrayList_Sample.csproj @@ -0,0 +1,21 @@ + + + + Exe + net8.0 + enable + + + + + + + + + + + + + + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Models/PieceType.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Models/PieceType.cs new file mode 100644 index 0000000000..3c5aa08393 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Models/PieceType.cs @@ -0,0 +1,10 @@ +namespace BlockPuzzleCore; + +public enum PieceType +{ + Horizontal2, + Horizontal3, + Vertical2, + Vertical3, + Solve +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Models/Puzzle.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Models/Puzzle.cs new file mode 100644 index 0000000000..34b9117b76 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Models/Puzzle.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; + +namespace BlockPuzzleCore; + +public class Puzzle +{ + public List Pieces { get; set; } + + public int MinMoves { get; set; } = -1; + public int NumBlocks => Pieces.Count; + + public Puzzle() + { + Pieces = []; + } + + public bool AddPiece(int x, int y, PieceType type) + { + PuzzlePiece piece = new PuzzlePiece(x, y, type); + + Pieces.Add(piece); + + return true; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Models/PuzzlePiece.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Models/PuzzlePiece.cs new file mode 100644 index 0000000000..fcfcaa31ce --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Models/PuzzlePiece.cs @@ -0,0 +1,43 @@ +namespace BlockPuzzleCore; + +public class PuzzlePiece +{ + public int X { get; set; } + public int Y { get; set; } + + public int Width => PieceType switch + { + PieceType.Horizontal2 or PieceType.Solve => 2, + PieceType.Horizontal3 => 3, + _ => 1, + }; + + public int Height => PieceType switch + { + PieceType.Vertical2 => 2, + PieceType.Vertical3 => 3, + _ => 1, + }; + + public PieceType PieceType { get; set; } + + public bool IsSolved => PieceType == PieceType.Solve && X == 4 && Y == 2; + + public bool IsHorizontalPiece => PieceType == PieceType.Horizontal2 || PieceType == PieceType.Horizontal3 || PieceType == PieceType.Solve; + + public PuzzlePiece() + { } + + public PuzzlePiece(int x, int y, PieceType type) + { + X = x; + Y = y; + PieceType = type; + } + + public void MovePiece(int x, int y) + { + X = x; + Y = y; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Program.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Program.cs new file mode 100644 index 0000000000..4483dd6481 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/Program.cs @@ -0,0 +1,70 @@ +using BlockPuzzleCore; +using Meadow.Foundation.Serialization; +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; + +namespace MicroJson_ArrayList_Sample; + +internal class Program +{ + static void Main(string[] args) + { + Console.WriteLine("Hello, MicroJson - Arrays and Lists"); + + SerializeEnum(); + + SerializePuzzle(); + + LoadPuzzles(); + } + + static void SerializeEnum() + { + var value = PieceType.Horizontal2; + + var enumJson = MicroJson.Serialize(value); + Console.WriteLine(enumJson); + } + + static void SerializePuzzle() + { + var puzzle = new Puzzle(); + puzzle.AddPiece(0, 0, PieceType.Horizontal2); + puzzle.AddPiece(0, 2, PieceType.Vertical2); + puzzle.AddPiece(2, 0, PieceType.Horizontal3); + puzzle.AddPiece(2, 3, PieceType.Vertical3); + puzzle.AddPiece(4, 0, PieceType.Solve); + + var puzzleJson = MicroJson.Serialize(puzzle); + + Console.WriteLine(puzzleJson); + } + + static IEnumerable LoadPuzzles() + { + byte[] resourceData = LoadResource("puzzles.json"); + var puzzleJson = new string(System.Text.Encoding.UTF8.GetChars(resourceData)); + + var puzzlesArray = MicroJson.Deserialize(puzzleJson); + Console.WriteLine($"Decoded {puzzlesArray.Length} puzzles into an array"); + + var puzzlesList = MicroJson.Deserialize>(puzzleJson); + Console.WriteLine($"Decoded {puzzlesList.Count} puzzles into a list"); + + return puzzlesList; + } + + static byte[] LoadResource(string filename) + { + var assembly = Assembly.GetExecutingAssembly(); + var resourceName = $"MicroJson_ArrayList_Sample.{filename}"; + + using Stream stream = assembly.GetManifestResourceStream(resourceName); + using var ms = new MemoryStream(); + + stream?.CopyTo(ms); + return ms.ToArray(); + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/puzzles.json b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/puzzles.json new file mode 100644 index 0000000000..49b9df2c14 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_ArrayList_Sample/puzzles.json @@ -0,0 +1 @@ +[{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":0,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":3,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":5,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":14},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":4,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":3,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":15},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":4,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":1,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":4,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":0,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":15},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":3,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":5,"Y":1,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":4,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":1,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true}],"NumberOfMoves":18},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":0,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":0,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":5,"Y":0,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":3,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":3,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true}],"NumberOfMoves":16},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":5,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":15},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":5,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":4,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":3,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":14},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":3,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":5,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":0,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true}],"NumberOfMoves":13},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":3,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":4,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true}],"NumberOfMoves":18},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":4,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":3,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":3,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":13}] \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/MicroJson_Complex_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/MicroJson_Complex_Sample.csproj new file mode 100644 index 0000000000..f629da7080 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/MicroJson_Complex_Sample.csproj @@ -0,0 +1,21 @@ + + + + Exe + net8.0 + enable + + + + + + + + + + + + + + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/Program.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/Program.cs new file mode 100644 index 0000000000..1e0ec3a93b --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/Program.cs @@ -0,0 +1,33 @@ +using Meadow.Foundation.Serialization; +using System; +using System.IO; +using System.Reflection; +using WifiWeather.DTOs; + +namespace MicroJson_Complex_Sample; + +internal class Program +{ + static void Main(string[] args) + { + Console.WriteLine("Hello, MicroJson - Complex Json"); + + var jsonData = LoadResource("weather.json"); + + var weather = MicroJson.Deserialize(jsonData); + + Console.WriteLine($"Temperature is: {weather.main.temp - 273.15:N1}C"); + } + + static byte[] LoadResource(string filename) + { + var assembly = Assembly.GetExecutingAssembly(); + var resourceName = $"MicroJson_Complex_Sample.{filename}"; + + using Stream stream = assembly.GetManifestResourceStream(resourceName); + using var ms = new MemoryStream(); + + stream?.CopyTo(ms); + return ms.ToArray(); + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/WeatherReadingDTO.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/WeatherReadingDTO.cs new file mode 100644 index 0000000000..9a9fc40d89 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/WeatherReadingDTO.cs @@ -0,0 +1,63 @@ +namespace WifiWeather.DTOs +{ + public class WeatherReadingDTO + { + public Coordinates coord { get; set; } + public Weather[] weather { get; set; } + public WeatherValues main { get; set; } + public int visibility { get; set; } + public Wind wind { get; set; } + public Clouds clouds { get; set; } + public int dt { get; set; } + public System sys { get; set; } + public long timezone { get; set; } + public int id { get; set; } + public string name { get; set; } + public int cod { get; set; } + } + + public class Coordinates + { + public double lon { get; set; } + public double lat { get; set; } + } + + public class Weather + { + public int id { get; set; } + public string nain { get; set; } + public string description { get; set; } + public string icon { get; set; } + } + + public class WeatherValues + { + public double temp { get; set; } + public double feels_like { get; set; } + public double temp_min { get; set; } + public double temp_max { get; set; } + public int pressure { get; set; } + public int humidity { get; set; } + } + + public class Wind + { + public decimal speed { get; set; } + public int deg { get; set; } + public double gust { get; set; } + } + + public class Clouds + { + public int all { get; set; } + } + + public class System + { + public int Type { get; set; } + public int Id { get; set; } + public string country { get; set; } + public long sunrise { get; set; } + public long sunset { get; set; } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/weather.json b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/weather.json new file mode 100644 index 0000000000..8d6cebfcd0 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Complex_Sample/weather.json @@ -0,0 +1,43 @@ +{ + "coord": { + "lon": -123.1193, + "lat": 49.2497 + }, + "weather": [ + { + "id": 803, + "main": "Clouds", + "description": "broken clouds", + "icon": "04d" + } + ], + "base": "stations", + "main": { + "temp": 279.01, + "feels_like": 276, + "temp_min": 277.58, + "temp_max": 279.94, + "pressure": 1028, + "humidity": 84 + }, + "visibility": 10000, + "wind": { + "speed": 4.12, + "deg": 90 + }, + "clouds": { + "all": 75 + }, + "dt": 1710347018, + "sys": { + "type": 2, + "id": 2011597, + "country": "CA", + "sunrise": 1710340135, + "sunset": 1710382486 + }, + "timezone": -25200, + "id": 6173331, + "name": "Vancouver", + "cod": 200 +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/CalibrationPoint.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/CalibrationPoint.cs new file mode 100644 index 0000000000..d054df97e9 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/CalibrationPoint.cs @@ -0,0 +1,42 @@ +namespace MicroJson_Sample; + +public struct CalibrationPoint +{ + /// + /// Creates a CalibrationPoint instance + /// + /// The raw touchscreen X value + /// The equivalent screen X coordinate for the raw X value + /// The raw touchscreen Y value + /// The equivalent screen Y coordinate for the raw Y value + public CalibrationPoint(int rawX, int screenX, int rawY, int screenY) + { + ScreenX = screenX; + ScreenY = screenY; + RawX = rawX; + RawY = rawY; + } + + /// + /// The equivalent screen X coordinate for the raw X value + /// + public int ScreenX { get; set; } + /// + /// The equivalent screen Y coordinate for the raw Y value + /// + public int ScreenY { get; set; } + /// + /// The raw touchscreen X value + /// + public int RawX { get; set; } + /// + /// The raw touchscreen Y value + /// + public int RawY { get; set; } + + /// + public override string ToString() + { + return $"({RawX}->{ScreenX}, {RawY}->{ScreenY})"; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/MenuItem.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/MenuItem.cs new file mode 100644 index 0000000000..9e21c6abfd --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/MenuItem.cs @@ -0,0 +1,15 @@ +namespace MicroJson_Sample; + +internal class MenuContainer +{ + public MenuItem[] Menu { get; set; } +} + +internal class MenuItem +{ + public string Text { get; set; } + public string Id { get; set; } + public string Type { get; set; } + public int Value { get; set; } + public MenuItem[] Sub { get; set; } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/MicroJson_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/MicroJson_Sample.csproj new file mode 100644 index 0000000000..871da55b05 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/MicroJson_Sample.csproj @@ -0,0 +1,12 @@ + + + Exe + net8.0 + + + + + + + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/Program.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/Program.cs new file mode 100644 index 0000000000..261d606479 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/Program.cs @@ -0,0 +1,66 @@ +using Meadow.Foundation.Serialization; +using System; +using System.Collections; +using System.IO; +using System.Reflection; + +namespace MicroJson_Sample; + +internal class Program +{ + // + + public static void Main(string[] args) + { + var resourceData = LoadResource("menu.json"); + + var menuJson = new string(System.Text.Encoding.UTF8.GetChars(resourceData)); + + DeserializeTypeSafe(menuJson); + DeserializeAsHashtable(menuJson); + } + + private static void DeserializeTypeSafe(string menuJson) + { + string testJsonItem = "{\"ScreenX\":290,\"ScreenY\":210,\"RawX\":3341,\"RawY\":3353}"; + var point = MicroJson.Deserialize(testJsonItem); + + string testJsonArray = "[{\"ScreenX\":30,\"ScreenY\":30,\"RawX\":522,\"RawY\":514},{\"ScreenX\":290,\"ScreenY\":210,\"RawX\":3341,\"RawY\":3353}]"; + + var points = MicroJson.Deserialize(testJsonArray); + + var menu = MicroJson.Deserialize(menuJson); + } + + private static void DeserializeAsHashtable(string menuJson) + { + var menuData = MicroJson.DeserializeString(menuJson) as Hashtable; + + if (menuData["menu"] == null) + { + throw new ArgumentException("JSON root must contain a 'menu' item"); + } + + Console.WriteLine($"Root element is {menuData["menu"]}"); + + var items = (ArrayList)menuData["menu"]; + + foreach (Hashtable item in items) + { + Console.WriteLine($"Found {item["text"]}"); + } + } + + private static byte[] LoadResource(string filename) + { + var assembly = Assembly.GetExecutingAssembly(); + var resourceName = $"MicroJson_Sample.{filename}"; + + using Stream stream = assembly.GetManifestResourceStream(resourceName); + using var ms = new MemoryStream(); + stream.CopyTo(ms); + return ms.ToArray(); + } + + // +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/menu.json b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/menu.json new file mode 100644 index 0000000000..92ba26244c --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Samples/MicroJson_Sample/menu.json @@ -0,0 +1,71 @@ +{ + "menu": [ + { + "text": "My Temp: {value}", + "id": "displayTemp", + "value": 77 + }, + { + "text": "My Age: {value}", + "id": "displayAge", + "value": 12 + }, + { + "text": "My Time", + "id": "time", + "type": "TimeDetailed" + }, + { + "text": "Edit Temp", + "id": "temp", + "type": "Temperature", + "value": 77 + }, + { + "text": "Edit Age", + "id": "age", + "type": "Age", + "value": 12 + }, + { + "text": "Parent", + "sub": [ + { "text": "Child 1" }, + { "text": "Child 2" }, + { "text": "Child 3" } + ] + }, + { + "text": "My Command", + "command": "DoSomething" + }, + { "text": "Quit" }, + { "text": "Item 7" }, + { + "text": "Item 8", + "sub": [ + { "text": "Sub Item A" }, + { "text": "Sub Item B" }, + { + "text": "Sub Item C", + "sub": [ + { "text": "Sub Item D" }, + { "text": "Sub Item E" }, + { "text": "Sub Item F" } + ] + } + ] + }, + { "text": "Item 9" }, + { "text": "Item 10" }, + { "text": "Item 11" }, + { + "text": "Item 12", + "sub": [ + { "text": "Sub Item X" }, + { "text": "Sub Item Y" }, + { "text": "Sub Item Z" } + ] + } + ] +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/BasicTests.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/BasicTests.cs new file mode 100644 index 0000000000..a54d48c5cf --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/BasicTests.cs @@ -0,0 +1,154 @@ +using Meadow.Foundation.Serialization; +using System; +using System.Text.Json; +using Xunit; + +namespace Unit.Tests; + +public class BasicTests +{ + [Fact] + public void DateTimeSerializationTest() + { + var input = new DateTimeClass + { + DTField = DateTime.Now, + DTOField = DateTimeOffset.UtcNow + }; + + var json = MicroJson.Serialize(input); + + Assert.NotNull(json); + var test = JsonSerializer.Deserialize(json, + new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true + }); + Assert.NotNull(test); + // the fraction of a second will be lost, so equality won't work + Assert.True(Math.Abs((input.DTField - test.DTField).TotalSeconds) < 1, "DateTime failed"); + Assert.True(Math.Abs((input.DTOField - test.DTOField).TotalSeconds) < 1, "DateTimeOffset failed"); + } + + [Fact] + public void DateTimeDeserializationTest() + { + var input = new DateTimeClass + { + DTField = DateTime.Now, + DTOField = DateTimeOffset.UtcNow + }; + + var json = JsonSerializer.Serialize(input); + + var test = MicroJson.Deserialize(json); + + Assert.NotNull(test); + // the fraction of a second will be lost, so equality won't work + Assert.True(Math.Abs((input.DTField - test.DTField).TotalSeconds) < 1, "DateTime failed"); + Assert.True(Math.Abs((input.DTOField - test.DTOField).TotalSeconds) < 1, "DateTimeOffset failed"); + } + + [Fact] + public void SimpleIntegerPropertyTest() + { + var input = """ + { + "Value": 23 + } + """; + + var result = MicroJson.Deserialize(input); + + Assert.Equal(23, result.Value); + } + + [Fact] + public void SimpleStringArrayTest() + { + var input = """ + [ + "Value1", + "Value2", + "Value3" + ] + """; + + var result = MicroJson.Deserialize(input); + + Assert.Equal(3, result.Length); + } + + [Fact] + public void SerializeToCamelCaseTest() + { + var item = new IntegerClass { Value = 23 }; + var json = MicroJson.Serialize(item); + + Assert.Contains("value", json); + Assert.DoesNotContain("Value", json); + } + + [Fact] + public void SerializeToNonCamelCaseTest() + { + var item = new IntegerClass { Value = 23 }; + var json = MicroJson.Serialize(item, convertNamesToCamelCase: false); + + Assert.Contains("Value", json); + Assert.DoesNotContain("value", json); + } + + [Fact] + public void SerializeDataWithSpecialStringCharactersTest() + { + var testStrings = new string[] + { + "Hello\nThere", + "Hello\r\nThere", + "Hello{There}" + }; + + foreach (var s in testStrings) + { + var item = new StringFieldClass + { + FieldA = s + }; + + var json = MicroJson.Serialize(item); + + var opts = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + }; + var testResult = JsonSerializer.Deserialize(json, opts); + + Assert.NotNull(testResult); + Assert.Equal(s, testResult.FieldA); + } + } + + [Fact] + public void DeserializeDataWithContainsCarriageReturnsTest() + { + var input = """ + { + "Value": "hello + there + data" + } + """; + + var result = MicroJson.Deserialize(input); + + Assert.NotNull(result); + } + + [Fact] + public void DeserializeJsonWithExtraField() + { + var result = MicroJson.Deserialize("{\"stringArg\":\"my string\",\"value\":23}"); + Assert.Equal(23, result.Value); + } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/CloudEntityTests.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/CloudEntityTests.cs new file mode 100644 index 0000000000..6e1c2f4acd --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/CloudEntityTests.cs @@ -0,0 +1,112 @@ +using Meadow.Cloud; +using Meadow.Foundation.Serialization; +using Meadow.Update; +using System; +using System.Collections.Generic; +using System.Text.Json; +using Xunit; + +namespace Unit.Tests; + +public class CloudEntityTests +{ + [Fact] + public void SerializeJsonElement_ShouldThrow() + { + var data1 = new CloudEvent + { + EventId = 110, + Description = "Atmospheric reading", + Measurements = new Dictionary() + { + { "TemperatureCelsius", 27.716796875 }, + { "HumidityPercent", 33.6125501896705 }, + { "PressureMillibar", 2.32899230499455 } + } + }; + + var json1 = MicroJson.Serialize(data1); + Assert.NotNull(json1); + + var data2 = JsonSerializer.Deserialize(json1, new JsonSerializerOptions(JsonSerializerDefaults.Web)); + Assert.NotNull(data2); + + // system.text.json will deserialize the Measurement values to JsonEleemnts, not doubles + Assert.Throws(() => { var json2 = MicroJson.Serialize(data2); }); + } + + [Fact] + public void CloudEventSerializationTest() + { + var ce = new CloudEvent() + { + EventId = 2000, + Description = "Cloud Sample Data", + Timestamp = DateTime.UtcNow, + Measurements = new Dictionary + { + { "Int value", 31 }, + { "StringValue", "37-A2-0A-94-FA-42-EC-3F" } + } + }; + + var json = MicroJson.Serialize(ce); + Assert.NotNull(json); + + var item = JsonSerializer.Deserialize(json); + + Assert.NotNull(item); + // the fraction of a second will be lost, so equality won't work + Assert.True(Math.Abs((item.Timestamp - ce.Timestamp).TotalSeconds) < 1, "Timestamp failed"); + } + + [Fact] + public void UpdateMessageSerializationTest() + { + UpdateMessage message = new() + { + + }; + + var json = MicroJson.Serialize(message); + } + + [Fact] + public void MeadowCommandSerializationTest() + { + var command = new MeadowCommand("command name", + new Dictionary + { + { "field 1", 23 }, + { "field 2", "foo" }, + { "field 3", true }, + { "field 4", 42.2d } + }); + + var json = MicroJson.Serialize(command); + } + + [Fact] + public void MeadowCommandDeserializationTest() + { + var expected = new Dictionary + { + { "field 1", 23L }, + { "field 2", "foo" }, + { "field 3", true }, + { "field 4", 42.2d } + }; + + var json = "{\"field 1\":23,\"field 2\":\"foo\",\"field 3\":true,\"field 4\":42.2}"; + var result = MicroJson.Deserialize>(json); + + Assert.NotNull(result); + Assert.Equal(4, result.Count); + foreach (var kvp in expected) + { + Assert.True(result.ContainsKey(kvp.Key)); + // this fails because the boxed '23' values arent-'t equat + // Assert.True(result[kvp.Key] == kvp.Value, $"{result[kvp.Key]} != {kvp.Value}"); + } + } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/IgnorePropertyTests.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/IgnorePropertyTests.cs new file mode 100644 index 0000000000..d7f48d1a87 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/IgnorePropertyTests.cs @@ -0,0 +1,38 @@ +using Meadow.Foundation.Serialization; +using Xunit; + +namespace Unit.Tests; + +public class IgnorePropertyTests +{ + [Fact] + public void SkipDeserializingIgnoredPropertyTest() + { + var input = """ + { + "ValueA": 23 + "ValueB": "This should not appear" + "ValueC": true + } + """; + + var result = MicroJson.Deserialize(input); + + Assert.Null(result.ValueB); + } + + [Fact] + public void SkipSerializingIgnoredPropertyTest() + { + var item = new IgnorableContainerClass + { + ValueA = 42, + ValueB = "This should not appear", + ValueC = true + }; + + var result = MicroJson.Serialize(item); + + Assert.DoesNotContain("ValueB", result); + } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/Inputs.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/Inputs.cs new file mode 100644 index 0000000000..8b34047640 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/Inputs.cs @@ -0,0 +1,27 @@ +using System; +using System.IO; +using System.Linq; +using System.Reflection; + +namespace Unit.Tests; + +public static class Inputs +{ + public static string GetInputResource(string name) + { + var resName = Assembly + .GetExecutingAssembly() + .GetManifestResourceNames() + .Where(n => n.EndsWith(name)) + .FirstOrDefault(); + + if (resName == null) + { + throw new Exception("Resource not found"); + } + + return new StreamReader( + Assembly.GetExecutingAssembly().GetManifestResourceStream(resName)) + .ReadToEnd(); + } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/MenuJsonTests.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/MenuJsonTests.cs new file mode 100644 index 0000000000..9185e3aa56 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/MenuJsonTests.cs @@ -0,0 +1,16 @@ +using Meadow.Foundation.Serialization; +using Xunit; + +namespace Unit.Tests; + +public class MenuJsonTests +{ + [Fact] + public void DeserializeMenuTest() + { + var json = Inputs.GetInputResource("menu.json"); + var result = MicroJson.Deserialize(json); + + Assert.NotNull(result); + } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/MicroJson.Unit.Tests.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/MicroJson.Unit.Tests.csproj new file mode 100644 index 0000000000..9b47e7bdc2 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/MicroJson.Unit.Tests.csproj @@ -0,0 +1,44 @@ + + + + Readme.md + net8.0 + enable + + false + true + + + + + + + + + + + + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/PuzzleJsonTests.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/PuzzleJsonTests.cs new file mode 100644 index 0000000000..fa020bb622 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/PuzzleJsonTests.cs @@ -0,0 +1,50 @@ +using Meadow.Foundation.Serialization; +using System.Collections.Generic; +using Xunit; + +namespace Unit.Tests; + +public class PuzzleJsonTests +{ + [Fact] + public void DeserializePuzzlesAsArrayTest() + { + var json = Inputs.GetInputResource("puzzles.json"); + var result = MicroJson.Deserialize(json); + + Assert.NotNull(result); + Assert.Equal(10, result.Length); + + foreach (var puzzle in result) + { + Assert.NotNull(puzzle); + Assert.NotNull(puzzle.Pieces); + + foreach (var piece in puzzle.Pieces) + { + Assert.NotNull(piece); + } + } + } + + [Fact] + public void DeserializePuzzlesAsListTest() + { + var json = Inputs.GetInputResource("puzzles.json"); + var result = MicroJson.Deserialize>(json); + + Assert.NotNull(result); + Assert.Equal(10, result.Count); + + foreach (var puzzle in result) + { + Assert.NotNull(puzzle); + Assert.NotNull(puzzle.Pieces); + + foreach (var piece in puzzle.Pieces) + { + Assert.NotNull(piece); + } + } + } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/WeatherJsonTests.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/WeatherJsonTests.cs new file mode 100644 index 0000000000..551881028f --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/WeatherJsonTests.cs @@ -0,0 +1,37 @@ +using Meadow.Foundation.Serialization; +using Xunit; + +namespace Unit.Tests; + +public class WeatherJsonTests +{ + [Fact] + public void MatchedCaseWeatherDeserializationTest() + { + var json = Inputs.GetInputResource("weather.json"); + var result = MicroJson.Deserialize(json); + + Assert.NotNull(result); + Assert.NotNull(result.clouds); + Assert.NotNull(result.wind); + Assert.NotNull(result.main); + Assert.NotNull(result.weather); + Assert.NotNull(result.coord); + Assert.NotNull(result.sys); + } + + [Fact] + public void CamelCasedWeatherDeserializationTest() + { + var json = Inputs.GetInputResource("weather.json"); + var result = MicroJson.Deserialize(json); + + Assert.NotNull(result); + Assert.NotNull(result.Clouds); + Assert.NotNull(result.Wind); + Assert.NotNull(result.Main); + Assert.NotNull(result.Weather); + Assert.NotNull(result.Coord); + Assert.NotNull(result.Sys); + } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/inputs/menu.json b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/inputs/menu.json new file mode 100644 index 0000000000..92ba26244c --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/inputs/menu.json @@ -0,0 +1,71 @@ +{ + "menu": [ + { + "text": "My Temp: {value}", + "id": "displayTemp", + "value": 77 + }, + { + "text": "My Age: {value}", + "id": "displayAge", + "value": 12 + }, + { + "text": "My Time", + "id": "time", + "type": "TimeDetailed" + }, + { + "text": "Edit Temp", + "id": "temp", + "type": "Temperature", + "value": 77 + }, + { + "text": "Edit Age", + "id": "age", + "type": "Age", + "value": 12 + }, + { + "text": "Parent", + "sub": [ + { "text": "Child 1" }, + { "text": "Child 2" }, + { "text": "Child 3" } + ] + }, + { + "text": "My Command", + "command": "DoSomething" + }, + { "text": "Quit" }, + { "text": "Item 7" }, + { + "text": "Item 8", + "sub": [ + { "text": "Sub Item A" }, + { "text": "Sub Item B" }, + { + "text": "Sub Item C", + "sub": [ + { "text": "Sub Item D" }, + { "text": "Sub Item E" }, + { "text": "Sub Item F" } + ] + } + ] + }, + { "text": "Item 9" }, + { "text": "Item 10" }, + { "text": "Item 11" }, + { + "text": "Item 12", + "sub": [ + { "text": "Sub Item X" }, + { "text": "Sub Item Y" }, + { "text": "Sub Item Z" } + ] + } + ] +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/inputs/puzzles.json b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/inputs/puzzles.json new file mode 100644 index 0000000000..49b9df2c14 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/inputs/puzzles.json @@ -0,0 +1 @@ +[{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":0,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":3,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":5,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":14},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":4,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":3,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":15},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":4,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":1,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":4,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":0,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":15},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":3,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":5,"Y":1,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":4,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":1,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true}],"NumberOfMoves":18},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":0,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":0,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":5,"Y":0,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":3,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":3,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true}],"NumberOfMoves":16},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":5,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":15},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":5,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":4,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":3,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":14},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":3,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":5,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":0,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true}],"NumberOfMoves":13},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":4,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":3,"Y":2,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":4,"Y":2,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":3,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":1,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":1,"Y":4,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true}],"NumberOfMoves":18},{"Pieces":[{"X":0,"Y":2,"PieceType":4,"IsSolved":false,"IsHorizontalPiece":true},{"X":2,"Y":4,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":3,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":3,"PieceType":1,"IsSolved":false,"IsHorizontalPiece":true},{"X":0,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":0,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":3,"Y":0,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false},{"X":2,"Y":5,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":5,"Y":3,"PieceType":3,"IsSolved":false,"IsHorizontalPiece":false},{"X":1,"Y":0,"PieceType":0,"IsSolved":false,"IsHorizontalPiece":true},{"X":4,"Y":1,"PieceType":2,"IsSolved":false,"IsHorizontalPiece":false}],"NumberOfMoves":13}] \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/inputs/weather.json b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/inputs/weather.json new file mode 100644 index 0000000000..8d6cebfcd0 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/inputs/weather.json @@ -0,0 +1,43 @@ +{ + "coord": { + "lon": -123.1193, + "lat": 49.2497 + }, + "weather": [ + { + "id": 803, + "main": "Clouds", + "description": "broken clouds", + "icon": "04d" + } + ], + "base": "stations", + "main": { + "temp": 279.01, + "feels_like": 276, + "temp_min": 277.58, + "temp_max": 279.94, + "pressure": 1028, + "humidity": 84 + }, + "visibility": 10000, + "wind": { + "speed": 4.12, + "deg": 90 + }, + "clouds": { + "all": 75 + }, + "dt": 1710347018, + "sys": { + "type": 2, + "id": 2011597, + "country": "CA", + "sunrise": 1710340135, + "sunset": 1710382486 + }, + "timezone": -25200, + "id": 6173331, + "name": "Vancouver", + "cod": 200 +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/MenuItem.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/MenuItem.cs new file mode 100644 index 0000000000..61fd9c615c --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/MenuItem.cs @@ -0,0 +1,15 @@ +namespace Unit.Tests; + +internal class MenuContainer +{ + public MenuItem[] Menu { get; set; } +} + +internal class MenuItem +{ + public string Text { get; set; } + public string Id { get; set; } + public string Type { get; set; } + public int Value { get; set; } + public MenuItem[] Sub { get; set; } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/PieceType.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/PieceType.cs new file mode 100644 index 0000000000..fddf48d83d --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/PieceType.cs @@ -0,0 +1,10 @@ +namespace Unit.Tests; + +public enum PieceType +{ + Horizontal2, + Horizontal3, + Vertical2, + Vertical3, + Solve +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/Puzzle.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/Puzzle.cs new file mode 100644 index 0000000000..766e94dd1a --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/Puzzle.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; + +namespace Unit.Tests; + +public class Puzzle +{ + public List Pieces { get; set; } + + public int MinMoves { get; set; } = -1; + public int NumBlocks => Pieces.Count; + + public Puzzle() + { + Pieces = []; + } + + public bool AddPiece(int x, int y, PieceType type) + { + PuzzlePiece piece = new PuzzlePiece(x, y, type); + + Pieces.Add(piece); + + return true; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/PuzzlePiece.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/PuzzlePiece.cs new file mode 100644 index 0000000000..22e2dd474d --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/PuzzlePiece.cs @@ -0,0 +1,43 @@ +namespace Unit.Tests; + +public class PuzzlePiece +{ + public int X { get; set; } + public int Y { get; set; } + + public int Width => PieceType switch + { + PieceType.Horizontal2 or PieceType.Solve => 2, + PieceType.Horizontal3 => 3, + _ => 1, + }; + + public int Height => PieceType switch + { + PieceType.Vertical2 => 2, + PieceType.Vertical3 => 3, + _ => 1, + }; + + public PieceType PieceType { get; set; } + + public bool IsSolved => PieceType == PieceType.Solve && X == 4 && Y == 2; + + public bool IsHorizontalPiece => PieceType == PieceType.Horizontal2 || PieceType == PieceType.Horizontal3 || PieceType == PieceType.Solve; + + public PuzzlePiece() + { } + + public PuzzlePiece(int x, int y, PieceType type) + { + X = x; + Y = y; + PieceType = type; + } + + public void MovePiece(int x, int y) + { + X = x; + Y = y; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/TestTypes.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/TestTypes.cs new file mode 100644 index 0000000000..363670c81e --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/TestTypes.cs @@ -0,0 +1,36 @@ +using Meadow.Foundation.Serialization; +using System; + +namespace Unit.Tests; + +// {"stringArg":"my string","value":23} +internal class SimpleCommand +{ + public string StringArg { get; set; } + public int Value { get; set; } +} + +internal class StringFieldClass +{ + public string FieldA { get; set; } = string.Empty; + public string? FieldB { get; set; } +} + +internal class DateTimeClass +{ + public DateTime DTField { get; set; } + public DateTimeOffset DTOField { get; set; } +} + +internal class IntegerClass +{ + public int Value { get; set; } +} + +internal class IgnorableContainerClass +{ + public int ValueA { get; set; } + [JsonIgnore] + public string? ValueB { get; set; } + public bool ValueC { get; set; } +} diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/WeatherReadingDTO.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/WeatherReadingDTO.cs new file mode 100644 index 0000000000..2fc07cb9f7 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Tests/MicroJson.Unit.Tests/test types/WeatherReadingDTO.cs @@ -0,0 +1,78 @@ +namespace Unit.Tests; + +public class WeatherReadingDTOCamelCase +{ + public Coordinates Coord { get; set; } + public Weather[] Weather { get; set; } + public WeatherValues Main { get; set; } + public int Visibility { get; set; } + public Wind Wind { get; set; } + public Clouds Clouds { get; set; } + public int Dt { get; set; } + public System Sys { get; set; } + public long Timezone { get; set; } + public int Id { get; set; } + public string Name { get; set; } + public int Cod { get; set; } +} + +public class WeatherReadingDTO +{ + public Coordinates coord { get; set; } + public Weather[] weather { get; set; } + public WeatherValues main { get; set; } + public int visibility { get; set; } + public Wind wind { get; set; } + public Clouds clouds { get; set; } + public int dt { get; set; } + public System sys { get; set; } + public long timezone { get; set; } + public int id { get; set; } + public string name { get; set; } + public int cod { get; set; } +} + +public class Coordinates +{ + public double lon { get; set; } + public double lat { get; set; } +} + +public class Weather +{ + public int id { get; set; } + public string nain { get; set; } + public string description { get; set; } + public string icon { get; set; } +} + +public class WeatherValues +{ + public double temp { get; set; } + public double feels_like { get; set; } + public double temp_min { get; set; } + public double temp_max { get; set; } + public int pressure { get; set; } + public int humidity { get; set; } +} + +public class Wind +{ + public decimal speed { get; set; } + public int deg { get; set; } + public double gust { get; set; } +} + +public class Clouds +{ + public int all { get; set; } +} + +public class System +{ + public int Type { get; set; } + public int Id { get; set; } + public string country { get; set; } + public long sunrise { get; set; } + public long sunset { get; set; } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Driver/Audio.Mp3.Yx5300.csproj b/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Driver/Audio.Mp3.Yx5300.csproj index 45957ab9cd..d6e81629c2 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Driver/Audio.Mp3.Yx5300.csproj +++ b/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Driver/Audio.Mp3.Yx5300.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Samples/Yx5300_Sample/Yx5300_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Samples/Yx5300_Sample/Yx5300_Sample.csproj index 0d1a38faaf..71e58ea28c 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Samples/Yx5300_Sample/Yx5300_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Samples/Yx5300_Sample/Yx5300_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Samples/Yx5300_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Samples/Yx5300_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Samples/Yx5300_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Audio.Radio.Tea5767.csproj b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Audio.Radio.Tea5767.csproj index 3d525ac020..3ae5f730e4 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Audio.Radio.Tea5767.csproj +++ b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Audio.Radio.Tea5767.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Samples/Tea5767_Sample/Tea5767_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Samples/Tea5767_Sample/Tea5767_Sample.csproj index f962822a57..7f1379531f 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Samples/Tea5767_Sample/Tea5767_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Samples/Tea5767_Sample/Tea5767_Sample.csproj @@ -9,14 +9,9 @@ App - + - - - - - Always - + diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Samples/Tea5767_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Samples/Tea5767_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Samples/Tea5767_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsoleDisplay.CharacterBuffer.cs b/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsole.CharacterBuffer.cs similarity index 98% rename from Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsoleDisplay.CharacterBuffer.cs rename to Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsole.CharacterBuffer.cs index db10107d16..6728abd0ef 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsoleDisplay.CharacterBuffer.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsole.CharacterBuffer.cs @@ -3,7 +3,7 @@ namespace Meadow.Foundation.Displays { - public partial class AsciiConsoleDisplay + public partial class AsciiConsole { internal class CharacterBuffer : IPixelBuffer { diff --git a/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsoleDisplay.cs b/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsole.cs similarity index 93% rename from Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsoleDisplay.cs rename to Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsole.cs index cbc43c8f32..b5864dd3bb 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsoleDisplay.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/AsciiConsole.cs @@ -6,7 +6,7 @@ namespace Meadow.Foundation.Displays; /// /// Represents a display driver for an ASCII console /// -public partial class AsciiConsoleDisplay : IPixelDisplay +public partial class AsciiConsole : IPixelDisplay { private readonly CharacterBuffer _buffer; private const string _colors = " `.-':_,^=;><+!rc*/z?sLTv)J7(|Fi{C}fI31tlu[neoZ5Yxjya]2ESwqkP6h9d4VpOGbUAKXHm8RD#$Bg0MNWQ%&@"; // 92 "colors" @@ -27,11 +27,11 @@ public partial class AsciiConsoleDisplay : IPixelDisplay public IPixelBuffer PixelBuffer => _buffer; /// - /// Creates a new instance with the specified width and height + /// Creates a new instance with the specified width and height /// /// The width in pixels /// The height in pixels - public AsciiConsoleDisplay(int width, int height) + public AsciiConsole(int width, int height) { Console.Clear(); Console.SetCursorPosition(0, 0); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/Displays.AsciiConsole.csproj b/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/Displays.AsciiConsole.csproj index 24f0955b5c..8a9c101d7e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/Displays.AsciiConsole.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Driver/Displays.AsciiConsole.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsoleDisplay_Sample/AsciiConsoleDisplay_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsole_Sample/AsciiConsole_Sample.csproj similarity index 88% rename from Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsoleDisplay_Sample/AsciiConsoleDisplay_Sample.csproj rename to Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsole_Sample/AsciiConsole_Sample.csproj index 9728c2c298..88bb67a0d6 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsoleDisplay_Sample/AsciiConsoleDisplay_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsole_Sample/AsciiConsole_Sample.csproj @@ -9,8 +9,8 @@ - - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsoleDisplay_Sample/Program.cs b/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsole_Sample/Program.cs similarity index 92% rename from Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsoleDisplay_Sample/Program.cs rename to Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsole_Sample/Program.cs index b989abfae4..2b65febf4f 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsoleDisplay_Sample/Program.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.AsciiConsole/Samples/AsciiConsole_Sample/Program.cs @@ -3,7 +3,7 @@ using Meadow.Foundation.Graphics; using Meadow.Foundation.Graphics.MicroLayout; -namespace AsciiConsoleDisplay_Sample; +namespace AsciiConsole_Sample; internal class Program { @@ -21,7 +21,7 @@ private static async Task MovingBox() .ToArray(); var colorIndex = 0; - var display = new AsciiConsoleDisplay(20, 15); + var display = new AsciiConsole(20, 15); var screen = new DisplayScreen(display); var box = new Box(0, 0, 4, 3) { @@ -62,7 +62,7 @@ private static async Task MovingBox() private static void DrawShapes() { - var display = new AsciiConsoleDisplay(80, 60); + var display = new AsciiConsole(80, 60); var graphics = new MicroGraphics(display) { @@ -80,7 +80,7 @@ private static void DrawShapes() private static async Task CycleColors() { - var display = new AsciiConsoleDisplay(40, 30); + var display = new AsciiConsole(40, 30); var colors = typeof(Color).GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public).Where(c => c.FieldType == typeof(Color)); foreach (var color in colors) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Displays.Ch1115.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Displays.Ch1115.csproj index 6bfb5fedb0..5923dffbc6 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Displays.Ch1115.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Displays.Ch1115.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/Ch1115_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/Ch1115_Sample.csproj index 50a484896d..24037f8a54 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/Ch1115_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/Ch1115_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Displays.Gtk.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Displays.Gtk.csproj index b30099f417..7b307749fc 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Displays.Gtk.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Displays.Gtk.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md 10.0 Apache-2.0 @@ -29,6 +29,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Gtk.cs b/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Gtk.cs index 4e55c7b192..a8fbb892e5 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Gtk.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Gtk.cs @@ -10,20 +10,16 @@ namespace Meadow.Foundation.Displays; /// /// Represents a GTK graphics display /// -public class GtkDisplay : IPixelDisplay, ITouchScreen +public class GtkDisplay : IResizablePixelDisplay, ITouchScreen { - /// - /// Event fired when the display gets a mouse down - /// + /// public event Hardware.TouchEventHandler TouchDown = default!; - /// - /// Event fired when the display gets a mouse up - /// + /// public event Hardware.TouchEventHandler TouchUp = default!; - /// - /// Event fired when the display gets a mouse click - /// + /// public event Hardware.TouchEventHandler TouchClick = default!; + /// + public event Hardware.TouchEventHandler TouchMoved = default!; private Window _window = default!; private IPixelBuffer _pixelBuffer = default!; @@ -34,6 +30,9 @@ public class GtkDisplay : IPixelDisplay, ITouchScreen private EventWaitHandle ShowComplete { get; } = new EventWaitHandle(true, EventResetMode.ManualReset); + /// + public RotationType Rotation => RotationType.Normal; + /// public IPixelBuffer PixelBuffer => _pixelBuffer; @@ -49,6 +48,9 @@ public class GtkDisplay : IPixelDisplay, ITouchScreen /// public ColorMode SupportedColorModes => ColorMode.Format24bppRgb888 | ColorMode.Format16bppRgb565 | ColorMode.Format32bppRgba8888; + /// + public bool IsTouched { get; private set; } + static GtkDisplay() { Application.Init(); @@ -74,6 +76,12 @@ public GtkDisplay(int width, int height, ColorMode mode = ColorMode.Format24bppR Initialize(width, height, mode); } + /// + public void Resize(int width, int height, float displayScale = 1) + { + throw new NotSupportedException(); + } + private void Initialize(int width, int height, ColorMode mode) { _window = new Window(WindowType.Popup); @@ -108,15 +116,15 @@ private void Initialize(int width, int height, ColorMode mode) private void RaiseTouchDown(double x, double y) { _leftButtonState = true; - TouchDown?.Invoke((int)x, (int)y); + TouchDown?.Invoke(this, TouchPoint.FromScreenData((int)x, (int)y, 0, (int)x, (int)y, 0)); } private void RaiseTouchUp(double x, double y) { - TouchUp?.Invoke((int)x, (int)y); + TouchUp?.Invoke(this, TouchPoint.FromScreenData((int)x, (int)y, 0, (int)x, (int)y, 0)); if (_leftButtonState) { - TouchClick?.Invoke((int)x, (int)y); + TouchClick?.Invoke(this, TouchPoint.FromScreenData((int)x, (int)y, 0, (int)x, (int)y, 0)); } _leftButtonState = false; @@ -133,9 +141,11 @@ private void WindowWidgetEvent(object o, WidgetEventArgs args) { case Gdk.ModifierType.None: RaiseTouchDown(b.X, b.Y); + IsTouched = true; break; case Gdk.ModifierType.Button1Mask: RaiseTouchUp(b.X, b.Y); + IsTouched = false; break; } break; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/Displays.Lcd.CharacterDisplay.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/Displays.Lcd.CharacterDisplay.csproj index abfef93bf3..38007c7b82 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/Displays.Lcd.CharacterDisplay.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/Displays.Lcd.CharacterDisplay.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/CharacterDisplay_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/CharacterDisplay_Sample.csproj index 97e5aac956..362a19f5f6 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/CharacterDisplay_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/CharacterDisplay_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/Displays.Led.FourDigitSevenSegment.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/Displays.Led.FourDigitSevenSegment.csproj index 20e37829a4..96b56625c9 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/Displays.Led.FourDigitSevenSegment.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/Displays.Led.FourDigitSevenSegment.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Samples/FourDigitSevenSegment_Sample/FourDigitSevenSegment_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Samples/FourDigitSevenSegment_Sample/FourDigitSevenSegment_Sample.csproj index 23587ab739..2a19fed64b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Samples/FourDigitSevenSegment_Sample/FourDigitSevenSegment_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Samples/FourDigitSevenSegment_Sample/FourDigitSevenSegment_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Samples/FourDigitSevenSegment_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Samples/FourDigitSevenSegment_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Samples/FourDigitSevenSegment_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/Displays.Led.FourteenSegment.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/Displays.Led.FourteenSegment.csproj index d1e7159709..b74c5299fe 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/Displays.Led.FourteenSegment.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/Displays.Led.FourteenSegment.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/FourteenSegment_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/FourteenSegment_Sample.csproj index a5463b5f65..f0ffb96a62 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/FourteenSegment_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/FourteenSegment_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj index 5d1323fa68..9956895cc9 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Samples/SevenSegment_Sample/SevenSegment_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Samples/SevenSegment_Sample/SevenSegment_Sample.csproj index d7c535d185..66d10039e7 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Samples/SevenSegment_Sample/SevenSegment_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Samples/SevenSegment_Sample/SevenSegment_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Samples/SevenSegment_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Samples/SevenSegment_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Samples/SevenSegment_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/Displays.Led.SixteenSegment.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/Displays.Led.SixteenSegment.csproj index 5bf5029f91..6b9c19e001 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/Displays.Led.SixteenSegment.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/Displays.Led.SixteenSegment.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/SixteenSegment_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/SixteenSegment_Sample.csproj index 1c83f9334c..c73037e20d 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/SixteenSegment_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/SixteenSegment_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Displays.Max7219.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Displays.Max7219.csproj index fbfdbd80ba..f09055a6a8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Displays.Max7219.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Displays.Max7219.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/Max7219_8x8x4_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/Max7219_8x8x4_Sample.csproj index 5f43cac140..018a71f507 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/Max7219_8x8x4_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/Max7219_8x8x4_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/Max7219_8x8x4x2_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/Max7219_8x8x4x2_Sample.csproj index 5f43cac140..018a71f507 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/Max7219_8x8x4x2_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/Max7219_8x8x4x2_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_Sample/Max7219_7Segment_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_Sample/Max7219_7Segment_Sample.csproj index 5f43cac140..018a71f507 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_Sample/Max7219_7Segment_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_Sample/Max7219_7Segment_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Displays.Pcd8544.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Displays.Pcd8544.csproj index ca4b1b3410..bad6d4e1fc 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Displays.Pcd8544.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Displays.Pcd8544.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/Pcd8544_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/Pcd8544_Sample.csproj index 654f14b94c..d22bf1a4af 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/Pcd8544_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/Pcd8544_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Displays.Sh110x.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Displays.Sh110x.csproj index b919c2b29c..d9f10c2961 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Displays.Sh110x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Displays.Sh110x.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -13,7 +13,7 @@ Sh110x Wilderness Labs, Inc http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ - Meadow.Foundation.Displays.Sh1106 + Meadow.Foundation.Displays.Sh110x https://github.com/WildernessLabs/Meadow.Foundation Meadow,Meadow.Foundation,Displays,LCD,Sh1106,SH1107,oled,monochrome true @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Readme.md index 2175c11d21..c3403d368c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Readme.md +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Readme.md @@ -1,8 +1,8 @@ -# Meadow.Foundation.Displays.Sh1106 +# Meadow.Foundation.Displays.Sh110x **S1106 and SH1107 SPI and I2C monochrome OLED displays** -The **Sh110x** library is included in the **Meadow.Foundation.Displays.Sh1106** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. +The **Sh110x** library is included in the **Meadow.Foundation.Displays.Sh110x** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. This driver is part of the [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/) peripherals library, an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT applications. @@ -14,7 +14,7 @@ To view all Wilderness Labs open-source projects, including samples, visit [gith You can install the library from within Visual studio using the the NuGet Package Manager or from the command line using the .NET CLI: -`dotnet add package Meadow.Foundation.Displays.Sh1106` +`dotnet add package Meadow.Foundation.Displays.Sh110x` ## Usage ```csharp diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/Sh1106_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/Sh1106_Sample.csproj index c4321c75f0..93bd06799e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/Sh1106_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/Sh1106_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/Sh1107_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/Sh1107_Sample.csproj index c4321c75f0..93bd06799e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/Sh1107_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/Sh1107_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/Displays.Silk.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/Displays.Silk.csproj new file mode 100644 index 0000000000..5846d4dbe5 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/Displays.Silk.csproj @@ -0,0 +1,35 @@ + + + Readme.md + 1.11.0 + 10.0 + Apache-2.0 + true + net8.0 + Library + enable + Meadow.Silk + enable + Wilderness Labs, Inc + Wilderness Labs, Inc + http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ + Meadow.Foundation.Displays.Silk + icon.png + https://github.com/WildernessLabs/Meadow.Foundation + Meadow.Foundation,Display,Silk,Skia + true + Display driver for Meadow using Silk.NET and SkiaSharp + true + + + + + + + + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/Readme.md new file mode 100644 index 0000000000..d09c03ac34 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/Readme.md @@ -0,0 +1,92 @@ +# Meadow.Foundation.Displays.Silk + +**Display driver for Meadow using Silk.NET and SkiaSharp** + +The **Meadow.Silk** library is included in the **Meadow.Foundation.Displays.Silk** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. + +This driver is part of the [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/) peripherals library, an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT applications. + +For more information on developing for Meadow, visit [developer.wildernesslabs.co](http://developer.wildernesslabs.co/). + +To view all Wilderness Labs open-source projects, including samples, visit [github.com/wildernesslabs](https://github.com/wildernesslabs/). + +## Installation + +You can install the library from within Visual studio using the the NuGet Package Manager or from the command line using the .NET CLI: + +`dotnet add package Meadow.Foundation.Displays.Silk` +## Usage + +```csharp +public class Program +{ +static SilkDisplay? display; +static MicroGraphics graphics = default!; + +public static void Main() +{ + Initialize(); + Run(); + + Thread.Sleep(Timeout.Infinite); +} + +public static void Initialize() +{ + display = new SilkDisplay(640, 480, displayScale: 1f); + + graphics = new MicroGraphics(display) + { + CurrentFont = new Font16x24(), + Stroke = 1 + }; +} + +public static void Run() +{ + graphics.Clear(); + + graphics.DrawText(10, 10, "Silk.NET", Color.White); + + graphics.DrawText(10, 40, "1234567890!@#$%^&*(){}[],./<>?;':", Color.LawnGreen); + graphics.DrawText(10, 70, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", Color.Cyan); + graphics.DrawText(10, 100, "abcdefghijklmnopqrstuvwxyz", Color.Yellow); + graphics.DrawText(10, 130, "Temp: 21.5°C", Color.Orange); + + graphics.DrawTriangle(10, 220, 50, 260, 10, 260, Color.Red); + graphics.DrawRectangle(20, 185, 80, 40, Color.Yellow, false); + graphics.DrawCircle(50, 240, 40, Color.Blue, false); + + graphics.Show(); + + display!.Run(); +} +} +``` +## How to Contribute + +- **Found a bug?** [Report an issue](https://github.com/WildernessLabs/Meadow_Issues/issues) +- Have a **feature idea or driver request?** [Open a new feature request](https://github.com/WildernessLabs/Meadow_Issues/issues) +- Want to **contribute code?** Fork the [Meadow.Foundation](https://github.com/WildernessLabs/Meadow.Foundation) repository and submit a pull request against the `develop` branch + + +## Need Help? + +If you have questions or need assistance, please join the Wilderness Labs [community on Slack](http://slackinvite.wildernesslabs.co/). +## About Meadow + +Meadow is a complete, IoT platform with defense-grade security that runs full .NET applications on embeddable microcontrollers and Linux single-board computers including Raspberry Pi and NVIDIA Jetson. + +### Build + +Use the full .NET platform and tooling such as Visual Studio and plug-and-play hardware drivers to painlessly build IoT solutions. + +### Connect + +Utilize native support for WiFi, Ethernet, and Cellular connectivity to send sensor data to the Cloud and remotely control your peripherals. + +### Deploy + +Instantly deploy and manage your fleet in the cloud for OtA, health-monitoring, logs, command + control, and enterprise backend integrations. + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/SilkDisplay.cs b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/SilkDisplay.cs new file mode 100644 index 0000000000..d219a740a9 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/SilkDisplay.cs @@ -0,0 +1,279 @@ +using Meadow.Hardware; +using Meadow.Peripherals.Displays; +using Silk.NET.Input; +using Silk.NET.Maths; +using Silk.NET.Windowing; +using Silk.NET.Windowing.Glfw; +using SkiaSharp; + +namespace Meadow.Foundation.Displays; + +/// +/// Represents a pixel display using Silk.NET and OpenGL +/// +public class SilkDisplay : IResizablePixelDisplay, ITouchScreen +{ + private IWindow window; + private SkiaPixelBuffer pixelBuffer = default!; + private GRGlInterface grglInterface; + private GRContext context; + private SKSurface surface; + private SKCanvas canvas; + private int virtualWidth; + private int virtualHeight; + private float displayScale; + + /// + public event TouchEventHandler TouchDown = default!; + /// + public event TouchEventHandler TouchUp = default!; + /// + public event TouchEventHandler TouchClick = default!; + /// + public event TouchEventHandler TouchMoved = default!; + + /// + public RotationType Rotation => RotationType.Normal; + + /// + public IPixelBuffer PixelBuffer => pixelBuffer; + + /// + public ColorMode ColorMode => pixelBuffer.ColorMode; + + /// + public int Width => pixelBuffer.Width; + + /// + public int Height => pixelBuffer.Height; + + /// + public ColorMode SupportedColorModes => ColorMode.Format24bppRgb888 | ColorMode.Format16bppRgb565 | ColorMode.Format32bppRgba8888; + + /// + public bool IsTouched { get; private set; } + + /// + /// Create a new SilkDisplay + /// + /// Width of display in pixels + /// Height of display in pixels + /// + public SilkDisplay(int width = 800, int height = 600, float displayScale = 1.0f) + { + this.displayScale = displayScale; + virtualWidth = (int)(width * displayScale); + virtualHeight = (int)(height * displayScale); + Initialize(virtualWidth, virtualHeight); + } + + /// + public void Resize(int width, int height, float displayScale = 1) + { + pixelBuffer = new SkiaPixelBuffer(width, height); + + this.displayScale = displayScale; + virtualWidth = (int)(width * displayScale); + virtualHeight = (int)(height * displayScale); + window.Size = new Vector2D(virtualWidth, virtualHeight); + + WindowExtensions.Center(window); + + CreateOrUpdateDrawingSurface(virtualWidth, virtualHeight); + } + + private void Initialize(int width, int height) + { + pixelBuffer = new SkiaPixelBuffer(width, height); + + var options = WindowOptions.Default; + options.Size = new Vector2D(width, height); + options.Title = "Meadow Desktop"; + options.PreferredStencilBufferBits = 8; + options.PreferredBitDepth = new Vector4D(8, 8, 8, 8); + options.WindowBorder = WindowBorder.Fixed; + GlfwWindowing.Use(); + window = Window.Create(options); + window.Load += OnWindowLoad; + window.Render += OnWindowRender; + window.Initialize(); + + WindowExtensions.Center(window); + + grglInterface = GRGlInterface.Create(name => window.GLContext!.TryGetProcAddress(name, out var addr) ? addr : 0); + grglInterface.Validate(); + context = GRContext.CreateGl(grglInterface); + CreateOrUpdateDrawingSurface(width, height); + } + + private void CreateOrUpdateDrawingSurface(int width, int height) + { + var renderTarget = new GRBackendRenderTarget(width, height, 0, 8, new GRGlFramebufferInfo(0, 0x8058)); // 0x8058 = GL_RGBA8` + if (canvas != null) canvas.Dispose(); + if (surface != null) surface.Dispose(); + surface = SKSurface.Create(context, renderTarget, GRSurfaceOrigin.BottomLeft, SKColorType.Rgba8888); + canvas = surface.Canvas; + } + + private void OnWindowLoad() + { + IInputContext input = window.CreateInput(); + var mouse = input.Mice.FirstOrDefault(); + + if (mouse != null) + { + mouse.MouseDown += (s, e) => + { + IsTouched = true; + TouchDown?.Invoke(this, + TouchPoint.FromScreenData( + (int)(mouse.Position.X / displayScale), + (int)(mouse.Position.Y / displayScale), + 0, -1, -1, null)); + }; + mouse.MouseUp += (s, e) => + { + IsTouched = false; + TouchUp?.Invoke(this, + TouchPoint.FromScreenData( + (int)(mouse.Position.X / displayScale), + (int)(mouse.Position.Y / displayScale), + 0, -1, -1, null)); + }; + mouse.Click += (s, e, v) => + { + TouchClick?.Invoke(this, + TouchPoint.FromScreenData( + (int)(v.X / displayScale), + (int)(v.Y / displayScale), + 0, -1, -1, null)); + }; + mouse.MouseMove += (s, e) => + { + TouchMoved?.Invoke(this, + TouchPoint.FromScreenData( + (int)(mouse.Position.X / displayScale), + (int)(mouse.Position.Y / displayScale), + 0, -1, -1, null)); + }; + } + } + + private void OnWindowRender(double obj) + { + canvas.DrawBitmap(pixelBuffer.SKBitmap, + SKRect.Create(0, 0, Width, Height), + SKRect.Create(0, 0, virtualWidth, virtualHeight)); + + canvas.Flush(); + } + + /// + /// Run the application + /// + public void Run() + { + window.Run(); + window.Reset(); + window.Dispose(); + } + + /// + /// Performs a full display update + /// + public void Show() + { + } + + /// + /// Partial screen update + /// + /// + /// + /// + /// + public void Show(int left, int top, int right, int bottom) + { + Show(); + } + + /// + /// Clears the display buffer + /// + /// + public void Clear(bool updateDisplay = false) + { + pixelBuffer.Clear(); + } + + /// + /// Fills the entire display with a given color + /// + /// + /// + public void Fill(Color fillColor, bool updateDisplay = false) + { + pixelBuffer.Fill(fillColor); + + if (updateDisplay) + { + Show(); + } + } + + /// + /// Fills a region with a given color + /// + /// + /// + /// + /// + /// + public void Fill(int x, int y, int width, int height, Color fillColor) + { + pixelBuffer.Fill(x, y, width, height, fillColor); + } + + /// + /// Fills a pixel with a given color + /// + /// + /// + /// + public void DrawPixel(int x, int y, Color color) + { + pixelBuffer.SetPixel(x, y, color); + } + + /// + /// Fills a pixel with either black or white + /// + /// + /// + /// + public void DrawPixel(int x, int y, bool colored) + { + DrawPixel(x, y, colored ? Color.White : Color.Black); + } + + /// + /// Inverts the pixel at the given location + /// + /// + /// + public void InvertPixel(int x, int y) + { + pixelBuffer.InvertPixel(x, y); + } + + /// + /// Draws to the pixel buffer at a specified location + /// + /// + /// + /// + public void WriteBuffer(int x, int y, IPixelBuffer displayBuffer) + { + pixelBuffer.WriteBuffer(x, y, displayBuffer); + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/SkiaPixelBuffer.cs b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/SkiaPixelBuffer.cs new file mode 100644 index 0000000000..137f16ea76 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Driver/SkiaPixelBuffer.cs @@ -0,0 +1,69 @@ +using Meadow.Peripherals.Displays; +using SkiaSharp; + +namespace Meadow.Foundation.Displays; + +internal class SkiaPixelBuffer : IPixelBuffer +{ + public SKBitmap SKBitmap { get; } + + public int Width => SKBitmap.Width; + public int Height => SKBitmap.Height; + + public ColorMode ColorMode => ColorMode.Format32bppRgba8888; + + public int BitDepth => 32; + + public int ByteCount => SKBitmap.ByteCount; + + public byte[] Buffer => SKBitmap.GetPixelSpan().ToArray(); + + public SkiaPixelBuffer(int width, int height) + { + SKBitmap = new SKBitmap(new SKImageInfo(width, height, SKColorType.Rgba8888)); + } + + public void Clear() + { + SKBitmap.Erase(SKColors.Black); + } + + public void Fill(Color color) + { + SKBitmap.Erase(new SKColor(color.R, color.G, color.B)); + } + + public void Fill(int originX, int originY, int width, int height, Color color) + { + SKBitmap.Erase( + new SKColor(color.R, color.G, color.B), + new SKRectI(originX, originY, originX + width, originY + height)); + } + + public Color GetPixel(int x, int y) + { + var px = SKBitmap.GetPixel(x, y); + return new Color(px.Red, px.Green, px.Blue); + } + + public void InvertPixel(int x, int y) + { + throw new NotImplementedException(); + } + + public void SetPixel(int x, int y, Color color) + { + SKBitmap.SetPixel(x, y, new SKColor(color.R, color.G, color.B)); + } + + public void WriteBuffer(int originX, int originY, IPixelBuffer buffer) + { + for (var x = 0; x < buffer.Width; x++) + { + for (var y = 0; y < buffer.Height; y++) + { + SetPixel(originX + x, originY + y, buffer.GetPixel(x, y)); + } + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Silk/Samples/Silk_Sample/Program.cs b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Samples/Silk_Sample/Program.cs new file mode 100644 index 0000000000..1a5ace69da --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Samples/Silk_Sample/Program.cs @@ -0,0 +1,54 @@ +using Meadow; +using Meadow.Foundation.Displays; +using Meadow.Foundation.Graphics; + +namespace SilkDisplay_Sample; + +// + +public class Program +{ + static SilkDisplay? display; + static MicroGraphics graphics = default!; + + public static void Main() + { + Initialize(); + Run(); + + Thread.Sleep(Timeout.Infinite); + } + + public static void Initialize() + { + display = new SilkDisplay(640, 480, displayScale: 1f); + + graphics = new MicroGraphics(display) + { + CurrentFont = new Font16x24(), + Stroke = 1 + }; + } + + public static void Run() + { + graphics.Clear(); + + graphics.DrawText(10, 10, "Silk.NET", Color.White); + + graphics.DrawText(10, 40, "1234567890!@#$%^&*(){}[],./<>?;':", Color.LawnGreen); + graphics.DrawText(10, 70, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", Color.Cyan); + graphics.DrawText(10, 100, "abcdefghijklmnopqrstuvwxyz", Color.Yellow); + graphics.DrawText(10, 130, "Temp: 21.5°C", Color.Orange); + + graphics.DrawTriangle(10, 220, 50, 260, 10, 260, Color.Red); + graphics.DrawRectangle(20, 185, 80, 40, Color.Yellow, false); + graphics.DrawCircle(50, 240, 40, Color.Blue, false); + + graphics.Show(); + + display!.Run(); + } +} + +// \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Silk/Samples/Silk_Sample/Silk_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Samples/Silk_Sample/Silk_Sample.csproj new file mode 100644 index 0000000000..3c26a04547 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Silk/Samples/Silk_Sample/Silk_Sample.csproj @@ -0,0 +1,12 @@ + + + Exe + net8.0 + enable + enable + 10.0 + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Displays.Ssd130x.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Displays.Ssd130x.csproj index 7cf1c47151..adbea14749 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Displays.Ssd130x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Displays.Ssd130x.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1039_3DCube_Sample/Ssd1039_3DCube_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1039_3DCube_Sample/Ssd1039_3DCube_Sample.csproj index b672c2f844..aff8b0d9f6 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1039_3DCube_Sample/Ssd1039_3DCube_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1039_3DCube_Sample/Ssd1039_3DCube_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1039_3DCube_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1039_3DCube_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1039_3DCube_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1306_Sample/Ssd1306_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1306_Sample/Ssd1306_Sample.csproj index b672c2f844..aff8b0d9f6 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1306_Sample/Ssd1306_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1306_Sample/Ssd1306_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1306_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1306_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1306_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Game_Sample/Ssd1309_Game_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Game_Sample/Ssd1309_Game_Sample.csproj index b672c2f844..aff8b0d9f6 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Game_Sample/Ssd1309_Game_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Game_Sample/Ssd1309_Game_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Game_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Game_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Game_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Sample/Ssd1309_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Sample/Ssd1309_Sample.csproj index b672c2f844..aff8b0d9f6 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Sample/Ssd1309_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Sample/Ssd1309_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Displays.Ssd1327.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Displays.Ssd1327.csproj index ae9b58dc43..054c55bd32 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Displays.Ssd1327.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Displays.Ssd1327.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Readme.md index 30a6cd131d..df4dc6ea2c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Readme.md +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Readme.md @@ -42,7 +42,7 @@ public override Task Run() for (int i = 10; i > 0; i--) { //iterate across different brightnesses - graphics.DrawText(0, i * 11, "SSD1327", Color.FromRgb(i * 0.1, i * 0.1, i * 0.1)); + graphics.DrawText(0, i * 11, "SSD1327", Color.FromRgb(i * 0.1f, i * 0.1f, i * 0.1f)); } graphics.Show(); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/MeadowApp.cs index 16d5f8d4f3..1c0fd500ca 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/MeadowApp.cs @@ -36,7 +36,7 @@ public override Task Run() for (int i = 10; i > 0; i--) { //iterate across different brightnesses - graphics.DrawText(0, i * 11, "SSD1327", Color.FromRgb(i * 0.1, i * 0.1, i * 0.1)); + graphics.DrawText(0, i * 11, "SSD1327", Color.FromRgb(i * 0.1f, i * 0.1f, i * 0.1f)); } graphics.Show(); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/Ssd1327_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/Ssd1327_Sample.csproj index 9dc3b82cff..3dcc12b50b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/Ssd1327_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/Ssd1327_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/Displays.St7565.csproj b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/Displays.St7565.csproj index 53811bfff8..c3e1059862 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/Displays.St7565.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/Displays.St7565.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Samples/St7565_Sample/St7565_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Samples/St7565_Sample/St7565_Sample.csproj index 9ea3ac030f..7eb711b47e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Samples/St7565_Sample/St7565_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Samples/St7565_Sample/St7565_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Samples/St7565_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Samples/St7565_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Samples/St7565_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Displays.TftSpi.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Displays.TftSpi.csproj index 34ff2a29ee..866b62ab7d 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Displays.TftSpi.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Displays.TftSpi.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,7 +22,7 @@ - - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/Gc9a01_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/Gc9a01_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/Gc9a01_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/Gc9a01_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/Hx8357b_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/Hx8357b_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/Hx8357b_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/Hx8357b_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/Hx8357d_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/Hx8357d_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/Hx8357d_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/Hx8357d_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/Ili9163_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/Ili9163_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/Ili9163_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/Ili9163_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/Ili9341_Jpg_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/Ili9341_Jpg_Sample.csproj index eb9c491f8b..54c3e2432d 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/Ili9341_Jpg_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/Ili9341_Jpg_Sample.csproj @@ -13,8 +13,8 @@ - - + + @@ -25,9 +25,4 @@ PreserveNewest - - - Always - - diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/Ili9341_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/Ili9341_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/Ili9341_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/Ili9341_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/Ili9481_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/Ili9481_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/Ili9481_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/Ili9481_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/Ili9486_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/Ili9486_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/Ili9486_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/Ili9486_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/Ili9488_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/Ili9488_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/Ili9488_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/Ili9488_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/Rm68140_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/Rm68140_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/Rm68140_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/Rm68140_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/S6D02A1_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/S6D02A1_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/S6D02A1_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/S6D02A1_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/ST7789_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/ST7789_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/ST7789_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/ST7789_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/Ssd1331_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/Ssd1331_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/Ssd1331_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/Ssd1331_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/Ssd1351_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/Ssd1351_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/Ssd1351_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/Ssd1351_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/St7735_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/St7735_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/St7735_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/St7735_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/St7796s_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/St7796s_Sample.csproj index 0e99eab3da..fa4e552f39 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/St7796s_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/St7796s_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Driver/Displays.Tm1637.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Driver/Displays.Tm1637.csproj index b1373120c8..4c4921390c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Driver/Displays.Tm1637.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Driver/Displays.Tm1637.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Samples/Tm1637_Sample/Tm1637_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Samples/Tm1637_Sample/Tm1637_Sample.csproj index cd436758af..c78f278e2c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Samples/Tm1637_Sample/Tm1637_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Samples/Tm1637_Sample/Tm1637_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Samples/Tm1637_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Samples/Tm1637_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Samples/Tm1637_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Uc1609c/Driver/Displays.Uc1609c.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Uc1609c/Driver/Displays.Uc1609c.csproj index b14ed40413..2c64fbfd05 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Uc1609c/Driver/Displays.Uc1609c.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Uc1609c/Driver/Displays.Uc1609c.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Uc1609c/Samples/Uc1609c_Sample/Uc1609c_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Uc1609c/Samples/Uc1609c_Sample/Uc1609c_Sample.csproj index 246100716c..d4cec0abc3 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Uc1609c/Samples/Uc1609c_Sample/Uc1609c_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Uc1609c/Samples/Uc1609c_Sample/Uc1609c_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Uc1609c/Samples/Uc1609c_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Uc1609c/Samples/Uc1609c_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Uc1609c/Samples/Uc1609c_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Displays.WinForms.csproj b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Displays.WinForms.csproj index 55f4f53147..91eed0deff 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Displays.WinForms.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Displays.WinForms.csproj @@ -1,11 +1,12 @@ - 1.9.0 + 1.11.0 Readme.md 10.0 Apache-2.0 true net7.0-windows + true true enable enable @@ -32,6 +33,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Readme.md index 64854cd6c1..d3ff26167a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Readme.md +++ b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Readme.md @@ -20,31 +20,35 @@ You can install the library from within Visual studio using the the NuGet Packag ```csharp public class MeadowApp : App { -WinFormsDisplay? _display; -MicroGraphics _graphics = default!; +WinFormsDisplay? display; +MicroGraphics graphics = default!; public override Task Initialize() { - _display = new WinFormsDisplay(240, 320); + display = new WinFormsDisplay(640, 480, displayScale: 1f); - _graphics = new MicroGraphics(_display) + graphics = new MicroGraphics(display) { - CurrentFont = new Font12x20(), + CurrentFont = new Font16x24(), Stroke = 1 }; _ = Task.Run(() => { - Thread.Sleep(2000); + graphics.Clear(); - _graphics.Clear(); + graphics.DrawText(10, 10, "16x24 font on WinForms", Color.White); - _graphics.DrawTriangle(10, 30, 50, 50, 10, 50, Color.Red); - _graphics.DrawRectangle(20, 45, 40, 20, Color.Yellow, false); - _graphics.DrawCircle(50, 50, 40, Color.Blue, false); - _graphics.DrawText(5, 5, "Meadow F7", Color.White); + graphics.DrawText(10, 40, "1234567890!@#$%^&*(){}[],./<>?;':", Color.LawnGreen); + graphics.DrawText(10, 70, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", Color.Cyan); + graphics.DrawText(10, 100, "abcdefghijklmnopqrstuvwxyz", Color.Yellow); + graphics.DrawText(10, 130, "Temp: 21.5°C", Color.Orange); - _graphics.Show(); + graphics.DrawTriangle(10, 220, 50, 260, 10, 260, Color.Red); + graphics.DrawRectangle(20, 185, 80, 40, Color.Yellow, false); + graphics.DrawCircle(50, 240, 40, Color.Blue, false); + + graphics.Show(); }); return Task.CompletedTask; @@ -52,7 +56,7 @@ public override Task Initialize() public override Task Run() { - Application.Run(_display!); + Application.Run(display!); return Task.CompletedTask; } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/WinForms.cs b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/WinForms.cs index 453b13dd21..f40481a355 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/WinForms.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/WinForms.cs @@ -6,79 +6,120 @@ namespace Meadow.Foundation.Displays; /// /// Represents a WinForms graphics display /// -public class WinFormsDisplay : Form, IPixelDisplay, ITouchScreen +public class WinFormsDisplay : Form, IResizablePixelDisplay, ITouchScreen { - /// - /// Event fired when the display gets a mouse down - /// - public event TouchEventHandler TouchDown = default!; - /// - /// Event fired when the display gets a mouse up - /// - public event TouchEventHandler TouchUp = default!; - /// - /// Event fired when the display gets a mouse click - /// - public event TouchEventHandler TouchClick = default!; + /// + public event TouchEventHandler? TouchDown = default!; + /// + public event TouchEventHandler? TouchUp = default!; + /// + public event TouchEventHandler? TouchClick = default!; + /// + public event TouchEventHandler? TouchMoved = default!; + + /// + public new int Width => virtualWidth; + + /// + public new int Height => virtualHeight; + + private WinFormsPixelBuffer buffer; - private readonly WinFormsPixelBuffer _buffer; + /// + public RotationType Rotation => RotationType.Normal; /// public ColorMode ColorMode => PixelBuffer.ColorMode; /// - public IPixelBuffer PixelBuffer => _buffer; + public IPixelBuffer PixelBuffer => buffer; /// public ColorMode SupportedColorModes => ColorMode.Format24bppRgb888; + /// + public bool IsTouched { get; private set; } + + private int virtualWidth; + private int virtualHeight; + private float displayScale; + /// /// Create a new WinFormsDisplay /// /// Width of the display, in pixels /// Height of the display, in pixels /// The ColorMode of the display - public WinFormsDisplay(int width = 800, int height = 600, ColorMode colorMode = ColorMode.Format16bppRgb565) + /// The scale of the display + public WinFormsDisplay(int width = 800, int height = 600, ColorMode colorMode = ColorMode.Format16bppRgb565, float displayScale = 1.0f) { - this.Width = width + (Width - ClientSize.Width); - this.Height = height + (Height - ClientSize.Height); + this.displayScale = displayScale; - this.Text = "Meadow WinFormsDisplay"; - this.DoubleBuffered = true; - this.FormBorderStyle = FormBorderStyle.FixedDialog; - this.StartPosition = FormStartPosition.CenterScreen; + ClientSize = new Size((int)(width * displayScale), (int)(height * displayScale)); + + Text = "Meadow WinFormsDisplay"; + DoubleBuffered = true; + FormBorderStyle = FormBorderStyle.FixedDialog; + StartPosition = FormStartPosition.CenterScreen; var iconStream = typeof(WinFormsDisplay).Assembly.GetManifestResourceStream("Displays.WinForms.icon.ico"); - this.Icon = new Icon(iconStream!); + Icon = new Icon(iconStream!); - _buffer = new WinFormsPixelBuffer(width, height, colorMode); + virtualWidth = width; + virtualHeight = height; + buffer = new WinFormsPixelBuffer(width, height, colorMode); + } + + /// + public void Resize(int width, int height, float displayScale = 1) + { + lock (buffer) + { + this.displayScale = displayScale; + ClientSize = new Size((int)(width * displayScale), (int)(height * displayScale)); + virtualWidth = width; + virtualHeight = height; + buffer = new WinFormsPixelBuffer(width, height, buffer.ColorMode); + } + this.Invalidate(); } /// protected override void Dispose(bool disposing) { - _buffer?.Dispose(); + buffer?.Dispose(); base.Dispose(disposing); } /// protected override void OnMouseDown(MouseEventArgs e) { - TouchDown?.Invoke(e.X, e.Y); + int virtualX = (int)(e.X / displayScale); + int virtualY = (int)(e.Y / displayScale); + TouchDown?.Invoke(this, TouchPoint.FromScreenData(virtualX, virtualY, 0, virtualX, virtualY, 0)); + IsTouched = true; base.OnMouseDown(e); } /// protected override void OnMouseUp(MouseEventArgs e) { - TouchUp?.Invoke(e.X, e.Y); + int virtualX = (int)(e.X / displayScale); + int virtualY = (int)(e.Y / displayScale); + TouchUp?.Invoke(this, TouchPoint.FromScreenData(virtualX, virtualY, 0, virtualX, virtualY, 0)); + IsTouched = false; base.OnMouseUp(e); } /// protected override void OnClick(EventArgs e) { - TouchClick?.Invoke(-1, -1); + Point clientPoint = PointToClient(Cursor.Position); + + int virtualX = (int)(clientPoint.X / displayScale); + int virtualY = (int)(clientPoint.Y / displayScale); + + TouchClick?.Invoke(this, TouchPoint.FromScreenData(virtualX, virtualY, 0, virtualX, virtualY, 0)); base.OnClick(e); } @@ -87,21 +128,21 @@ protected override void OnClick(EventArgs e) /// void IPixelDisplay.Show() { - if (this.IsDisposed) + if (IsDisposed) { return; } try { - this.Invalidate(true); + Invalidate(true); if (InvokeRequired) { Invoke(Update); } else { - this.Update(); + Update(); } } catch (ObjectDisposedException) @@ -119,7 +160,12 @@ void IPixelDisplay.Show() /// void IPixelDisplay.Show(int left, int top, int right, int bottom) { - this.Invalidate(new Rectangle(left, top, right - left, bottom - top), true); + var scaledLeft = (int)(left * displayScale); + var scaledTop = (int)(top * displayScale); + var scaledRight = (int)((right - left) * displayScale); + var scaledBottom = (int)((bottom - top) * displayScale); + + Invalidate(new Rectangle(scaledLeft, scaledTop, scaledRight, scaledBottom), true); } /// @@ -128,13 +174,13 @@ void IPixelDisplay.Show(int left, int top, int right, int bottom) /// void IPixelDisplay.Clear(bool updateDisplay) { - lock (_buffer) + lock (buffer) { - _buffer.Clear(); + buffer.Clear(); } if (updateDisplay) { - this.Show(); + Show(); } } @@ -145,13 +191,13 @@ void IPixelDisplay.Clear(bool updateDisplay) /// void IPixelDisplay.Fill(Color fillColor, bool updateDisplay) { - lock (_buffer) + lock (buffer) { - _buffer.Fill(fillColor); + buffer.Fill(fillColor); } if (updateDisplay) { - this.Show(); + Show(); } } @@ -165,9 +211,9 @@ void IPixelDisplay.Fill(Color fillColor, bool updateDisplay) /// void IPixelDisplay.Fill(int x, int y, int width, int height, Color fillColor) { - lock (_buffer) + lock (buffer) { - _buffer.Fill(x, y, width, height, fillColor); + buffer.Fill(x, y, width, height, fillColor); } } @@ -179,9 +225,9 @@ void IPixelDisplay.Fill(int x, int y, int width, int height, Color fillColor) /// void IPixelDisplay.DrawPixel(int x, int y, Color color) { - lock (_buffer) + lock (buffer) { - _buffer.SetPixel(x, y, color); + buffer.SetPixel(x, y, color); } } @@ -193,9 +239,9 @@ void IPixelDisplay.DrawPixel(int x, int y, Color color) /// void IPixelDisplay.DrawPixel(int x, int y, bool enabled) { - lock (_buffer) + lock (buffer) { - _buffer.SetPixel(x, y, enabled ? Color.White : Color.Black); + buffer.SetPixel(x, y, enabled ? Color.White : Color.Black); } } @@ -206,9 +252,9 @@ void IPixelDisplay.DrawPixel(int x, int y, bool enabled) /// void IPixelDisplay.InvertPixel(int x, int y) { - lock (_buffer) + lock (buffer) { - _buffer.InvertPixel(x, y); + buffer.InvertPixel(x, y); } } @@ -220,18 +266,22 @@ void IPixelDisplay.InvertPixel(int x, int y) /// void IPixelDisplay.WriteBuffer(int x, int y, IPixelBuffer displayBuffer) { - lock (_buffer) + lock (buffer) { - _buffer.WriteBuffer(x, y, displayBuffer); + buffer.WriteBuffer(x, y, displayBuffer); } } /// protected override void OnPaint(PaintEventArgs e) { - lock (_buffer) + lock (buffer) { - e.Graphics.DrawImage(_buffer.Image, 0, 0); + // Apply scaling + e.Graphics.ScaleTransform(displayScale, displayScale); + + // Draw the scaled image + e.Graphics.DrawImage(buffer.Image, 0, 0, virtualWidth, virtualHeight); base.OnPaint(e); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/WinFormsPixelBuffer.cs b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/WinFormsPixelBuffer.cs index 9e9d127075..9df6ff63eb 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/WinFormsPixelBuffer.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/WinFormsPixelBuffer.cs @@ -7,8 +7,8 @@ namespace Meadow.Foundation.Displays; /// internal class WinFormsPixelBuffer : IPixelBuffer, IDisposable { - private readonly Bitmap _bmp; - private readonly byte[] _buffer; + private readonly Bitmap bmp; + private readonly byte[] buffer; /// /// Gets the buffer width, in pixels @@ -30,15 +30,15 @@ internal class WinFormsPixelBuffer : IPixelBuffer, IDisposable /// /// Gets the buffer size in bytes /// - public int ByteCount => _buffer.Length; + public int ByteCount => buffer.Length; /// /// Gets the buffer backing array /// - public byte[] Buffer => _buffer; + public byte[] Buffer => buffer; /// /// Gets the buffer as a System.Drawing.Bitmap /// - public Bitmap Image => _bmp; + public Bitmap Image => bmp; /// /// Creates an instance of a WinFormsPixelBuffer @@ -53,10 +53,10 @@ public WinFormsPixelBuffer(int width, int height, ColorMode colorMode = ColorMod ColorMode = colorMode; // TODO: use this buffer in a future version for improved perf - _bmp = new Bitmap(Width, Height); - var data = _bmp.LockBits(new Rectangle(0, 0, Width, Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb); - _buffer = new byte[Math.Abs(data.Stride * Height)]; - _bmp.UnlockBits(data); + bmp = new Bitmap(Width, Height); + var data = bmp.LockBits(new Rectangle(0, 0, Width, Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb); + buffer = new byte[Math.Abs(data.Stride * Height)]; + bmp.UnlockBits(data); } /// @@ -64,12 +64,10 @@ public WinFormsPixelBuffer(int width, int height, ColorMode colorMode = ColorMod /// public void Clear() { - lock (_bmp) + lock (bmp) { - using (var g = System.Drawing.Graphics.FromImage(_bmp)) - { - g.FillRectangle(new SolidBrush(System.Drawing.Color.Black), 0, 0, Width, Height); - } + using var g = System.Drawing.Graphics.FromImage(bmp); + g.FillRectangle(new SolidBrush(System.Drawing.Color.Black), 0, 0, Width, Height); } } @@ -79,12 +77,10 @@ public void Clear() /// public void Fill(Color color) { - lock (_bmp) + lock (bmp) { - using (var g = System.Drawing.Graphics.FromImage(_bmp)) - { - g.FillRectangle(new SolidBrush(System.Drawing.Color.FromArgb(color.R, color.G, color.B)), 0, 0, Width, Height); - } + using var g = System.Drawing.Graphics.FromImage(bmp); + g.FillRectangle(new SolidBrush(System.Drawing.Color.FromArgb(color.R, color.G, color.B)), 0, 0, Width, Height); } } @@ -100,12 +96,10 @@ public void Fill(int originX, int originY, int width, int height, Color color) { try { - lock (_bmp) + lock (bmp) { - using (var g = System.Drawing.Graphics.FromImage(_bmp)) - { - g.FillRectangle(new SolidBrush(System.Drawing.Color.FromArgb(color.R, color.G, color.B)), originX, originY, width, height); - } + using var g = System.Drawing.Graphics.FromImage(bmp); + g.FillRectangle(new SolidBrush(System.Drawing.Color.FromArgb(color.R, color.G, color.B)), originX, originY, width, height); } } catch (ArgumentException) @@ -125,9 +119,9 @@ public void Fill(int originX, int originY, int width, int height, Color color) /// public Color GetPixel(int x, int y) { - lock (_bmp) + lock (bmp) { - var p = _bmp.GetPixel(x, y); + var p = bmp.GetPixel(x, y); return Color.FromRgba(p.R, p.G, p.B, p.A); } } @@ -151,12 +145,12 @@ public void InvertPixel(int x, int y) /// public void SetPixel(int x, int y, Color color) { - // TODO: use lockbits and set the _buffer instead - lock (_bmp) + // TODO: use lockbits and set the buffer instead + lock (bmp) { try { - _bmp.SetPixel(x, y, System.Drawing.Color.FromArgb(color.R, color.G, color.B)); + bmp.SetPixel(x, y, System.Drawing.Color.FromArgb(color.R, color.G, color.B)); } catch (InvalidOperationException) { @@ -174,7 +168,7 @@ public void SetPixel(int x, int y, Color color) /// public void WriteBuffer(int originX, int originY, IPixelBuffer buffer) { - lock (_bmp) + lock (bmp) { for (var x = 0; x < buffer.Width; x++) { @@ -188,6 +182,6 @@ public void WriteBuffer(int originX, int originY, IPixelBuffer buffer) public void Dispose() { - _bmp?.Dispose(); + bmp?.Dispose(); } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Samples/WinForms_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Samples/WinForms_Sample/MeadowApp.cs index c4de8ea0f8..d6501591db 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Samples/WinForms_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Samples/WinForms_Sample/MeadowApp.cs @@ -9,31 +9,35 @@ namespace WinForms_Sample; public class MeadowApp : App { - WinFormsDisplay? _display; - MicroGraphics _graphics = default!; + WinFormsDisplay? display; + MicroGraphics graphics = default!; public override Task Initialize() { - _display = new WinFormsDisplay(240, 320); + display = new WinFormsDisplay(640, 480, displayScale: 1f); - _graphics = new MicroGraphics(_display) + graphics = new MicroGraphics(display) { - CurrentFont = new Font12x20(), + CurrentFont = new Font16x24(), Stroke = 1 }; _ = Task.Run(() => { - Thread.Sleep(2000); + graphics.Clear(); - _graphics.Clear(); + graphics.DrawText(10, 10, "16x24 font on WinForms", Color.White); - _graphics.DrawTriangle(10, 30, 50, 50, 10, 50, Color.Red); - _graphics.DrawRectangle(20, 45, 40, 20, Color.Yellow, false); - _graphics.DrawCircle(50, 50, 40, Color.Blue, false); - _graphics.DrawText(5, 5, "Meadow F7", Color.White); + graphics.DrawText(10, 40, "1234567890!@#$%^&*(){}[],./<>?;':", Color.LawnGreen); + graphics.DrawText(10, 70, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", Color.Cyan); + graphics.DrawText(10, 100, "abcdefghijklmnopqrstuvwxyz", Color.Yellow); + graphics.DrawText(10, 130, "Temp: 21.5°C", Color.Orange); - _graphics.Show(); + graphics.DrawTriangle(10, 220, 50, 260, 10, 260, Color.Red); + graphics.DrawRectangle(20, 185, 80, 40, Color.Yellow, false); + graphics.DrawCircle(50, 240, 40, Color.Blue, false); + + graphics.Show(); }); return Task.CompletedTask; @@ -41,7 +45,7 @@ public override Task Initialize() public override Task Run() { - Application.Run(_display!); + Application.Run(display!); return Task.CompletedTask; } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Samples/WinForms_Sample/WinForms_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Samples/WinForms_Sample/WinForms_Sample.csproj index ee9b9127d6..fbbd91b549 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Samples/WinForms_Sample/WinForms_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Samples/WinForms_Sample/WinForms_Sample.csproj @@ -7,7 +7,7 @@ 10.0 - - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Displays.ePaper.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Displays.ePaper.csproj index a85989d7d5..8b803cc889 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Displays.ePaper.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Displays.ePaper.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0373_Sample/IL0373_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0373_Sample/IL0373_Sample.csproj index 3d4fa4961e..cc1140e32e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0373_Sample/IL0373_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0373_Sample/IL0373_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0373_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0373_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0373_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0376F_Sample/IL0376F_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0376F_Sample/IL0376F_Sample.csproj index 3d4fa4961e..cc1140e32e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0376F_Sample/IL0376F_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0376F_Sample/IL0376F_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0376F_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0376F_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0376F_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0398_Sample/IL0398_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0398_Sample/IL0398_Sample.csproj index 3d4fa4961e..cc1140e32e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0398_Sample/IL0398_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0398_Sample/IL0398_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0398_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0398_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0398_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL3897_Sample/IL3897_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL3897_Sample/IL3897_Sample.csproj index 3d4fa4961e..cc1140e32e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL3897_Sample/IL3897_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL3897_Sample/IL3897_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL3897_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL3897_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL3897_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874V03_Sample/IL91874V03_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874V03_Sample/IL91874V03_Sample.csproj index 3d4fa4961e..cc1140e32e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874V03_Sample/IL91874V03_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874V03_Sample/IL91874V03_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874V03_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874V03_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874V03_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874_Sample/IL91874_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874_Sample/IL91874_Sample.csproj index 3d4fa4961e..cc1140e32e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874_Sample/IL91874_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874_Sample/IL91874_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1608_Sample/SSD1608_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1608_Sample/SSD1608_Sample.csproj index 3d4fa4961e..cc1140e32e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1608_Sample/SSD1608_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1608_Sample/SSD1608_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1608_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1608_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1608_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1680_Sample/SSD1680_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1680_Sample/SSD1680_Sample.csproj index 3d4fa4961e..cc1140e32e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1680_Sample/SSD1680_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1680_Sample/SSD1680_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1680_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1680_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1680_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1681_Sample/SSD1681_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1681_Sample/SSD1681_Sample.csproj index 3d4fa4961e..cc1140e32e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1681_Sample/SSD1681_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1681_Sample/SSD1681_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1681_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1681_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1681_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/UC8151C_Sample/UC8151C_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/UC8151C_Sample/UC8151C_Sample.csproj index 3d4fa4961e..cc1140e32e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/UC8151C_Sample/UC8151C_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/UC8151C_Sample/UC8151C_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/UC8151C_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/UC8151C_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/UC8151C_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Displays.ePaperWaveShare.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Displays.ePaperWaveShare.csproj index 4f1589dda9..3fa5022bdc 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Displays.ePaperWaveShare.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Displays.ePaperWaveShare.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/Epd5in65f_Sample/Epd5in65f_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/Epd5in65f_Sample/Epd5in65f_Sample.csproj index f72e00482c..5737184f77 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/Epd5in65f_Sample/Epd5in65f_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/Epd5in65f_Sample/Epd5in65f_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/Epd5in65f_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/Epd5in65f_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/Epd5in65f_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdColor_Sample/EpdColor_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdColor_Sample/EpdColor_Sample.csproj index f72e00482c..5737184f77 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdColor_Sample/EpdColor_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdColor_Sample/EpdColor_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdColor_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdColor_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdColor_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdMonochrome_Sample/EpdMonochrome_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdMonochrome_Sample/EpdMonochrome_Sample.csproj index f72e00482c..5737184f77 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdMonochrome_Sample/EpdMonochrome_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdMonochrome_Sample/EpdMonochrome_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdMonochrome_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdMonochrome_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdMonochrome_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/ICs.ADC.Ads1x15.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/ICs.ADC.Ads1x15.csproj index 2bc7f1037e..1c440e4be1 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/ICs.ADC.Ads1x15.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/ICs.ADC.Ads1x15.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/Ads1015_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/Ads1015_Sample.csproj index 909cefce61..eb40de29e6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/Ads1015_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/Ads1015_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/Ads1115_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/Ads1115_Sample.csproj index 909cefce61..eb40de29e6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/Ads1115_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/Ads1115_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Driver/ICs.ADC.Mcp3xxx.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Driver/ICs.ADC.Mcp3xxx.csproj index b0710ed38f..cd87aee1a7 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Driver/ICs.ADC.Mcp3xxx.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Driver/ICs.ADC.Mcp3xxx.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable Apache-2.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3001_Sample/Mcp3001_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3001_Sample/Mcp3001_Sample.csproj index 1a04007f13..b37e67dbc6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3001_Sample/Mcp3001_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3001_Sample/Mcp3001_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3001_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3001_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3001_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3002_Sample/Mcp3002_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3002_Sample/Mcp3002_Sample.csproj index 1a04007f13..b37e67dbc6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3002_Sample/Mcp3002_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3002_Sample/Mcp3002_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3002_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3002_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3002_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3004_Sample/Mcp3004_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3004_Sample/Mcp3004_Sample.csproj index 1a04007f13..b37e67dbc6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3004_Sample/Mcp3004_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3004_Sample/Mcp3004_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3004_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3004_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3004_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3008_Sample/Mcp3008_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3008_Sample/Mcp3008_Sample.csproj index 1a04007f13..b37e67dbc6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3008_Sample/Mcp3008_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3008_Sample/Mcp3008_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3008_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3008_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3008_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3201_Sample/Mcp3201_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3201_Sample/Mcp3201_Sample.csproj index 1a04007f13..b37e67dbc6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3201_Sample/Mcp3201_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3201_Sample/Mcp3201_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3201_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3201_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3201_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3202_Sample/Mcp3202_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3202_Sample/Mcp3202_Sample.csproj index 1a04007f13..b37e67dbc6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3202_Sample/Mcp3202_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3202_Sample/Mcp3202_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3202_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3202_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3202_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3204_Sample/Mcp3204_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3204_Sample/Mcp3204_Sample.csproj index 1a04007f13..b37e67dbc6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3204_Sample/Mcp3204_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3204_Sample/Mcp3204_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3204_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3204_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3204_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3208_Sample/Mcp3208_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3208_Sample/Mcp3208_Sample.csproj index 1a04007f13..b37e67dbc6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3208_Sample/Mcp3208_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3208_Sample/Mcp3208_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3208_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3208_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADCs.Mcp3xxx/Samples/Mcp3208_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DAC.Mcp492x/Driver/ICs.DAC.Mcp492x.csproj b/Source/Meadow.Foundation.Peripherals/ICs.DAC.Mcp492x/Driver/ICs.DAC.Mcp492x.csproj index a045585c07..aa1189b3cf 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.DAC.Mcp492x/Driver/ICs.DAC.Mcp492x.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.DAC.Mcp492x/Driver/ICs.DAC.Mcp492x.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 true @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/ICs.DigiPots.Ds3502.csproj b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/ICs.DigiPots.Ds3502.csproj index 97e2886318..0280924d4a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/ICs.DigiPots.Ds3502.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/ICs.DigiPots.Ds3502.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj index 5a0ef7cad8..ba06523426 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/ICs.DigiPots.Mcp4xxx.csproj b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/ICs.DigiPots.Mcp4xxx.csproj index 4ea91ac11f..62fc474629 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/ICs.DigiPots.Mcp4xxx.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/ICs.DigiPots.Mcp4xxx.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/Mcp4162_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/Mcp4162_Sample.csproj index db5869229c..f08713019d 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/Mcp4162_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/Mcp4162_Sample.csproj @@ -10,12 +10,7 @@ 10 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/ICs.EEPROM.At24Cxx.csproj b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/ICs.EEPROM.At24Cxx.csproj index 093e3d645e..2634385308 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/ICs.EEPROM.At24Cxx.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/ICs.EEPROM.At24Cxx.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Samples/At24Cxx_Sample/At24Cxx_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Samples/At24Cxx_Sample/At24Cxx_Sample.csproj index 1920c3456d..f819bd6bba 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Samples/At24Cxx_Sample/At24Cxx_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Samples/At24Cxx_Sample/At24Cxx_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Samples/At24Cxx_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Samples/At24Cxx_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Samples/At24Cxx_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/ICs.FanControllers.Emc2101.csproj b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/ICs.FanControllers.Emc2101.csproj index 928755eb9a..97b0fdcd4d 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/ICs.FanControllers.Emc2101.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/ICs.FanControllers.Emc2101.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -21,7 +21,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Samples/Emc2101_Sample/Emc2101_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Samples/Emc2101_Sample/Emc2101_Sample.csproj index f3ebae7301..27889e666a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Samples/Emc2101_Sample/Emc2101_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Samples/Emc2101_Sample/Emc2101_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Samples/Emc2101_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Samples/Emc2101_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Samples/Emc2101_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Driver/ICs.IOExpanders.AnalogMux.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Driver/ICs.IOExpanders.AnalogMux.csproj index 4f576b48de..d8b5766037 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Driver/ICs.IOExpanders.AnalogMux.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Driver/ICs.IOExpanders.AnalogMux.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md 10.0 Apache-2.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Samples/Nxp74HC4051_Sample/Nxp74HC4051_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Samples/Nxp74HC4051_Sample/Nxp74HC4051_Sample.csproj index 0ca0a68eee..27c07329e8 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Samples/Nxp74HC4051_Sample/Nxp74HC4051_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Samples/Nxp74HC4051_Sample/Nxp74HC4051_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Samples/Nxp74HC4051_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Samples/Nxp74HC4051_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Samples/Nxp74HC4051_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/ICs.IOExpanders.As1115.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/ICs.IOExpanders.As1115.csproj index 4a7afc9188..77135d5afd 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/ICs.IOExpanders.As1115.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/ICs.IOExpanders.As1115.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Samples/As1115_Sample/As1115_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Samples/As1115_Sample/As1115_Sample.csproj index 63d391e546..9cab203f31 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Samples/As1115_Sample/As1115_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Samples/As1115_Sample/As1115_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Samples/As1115_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Samples/As1115_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Samples/As1115_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Cp2112/Driver/ICs.IOExpanders.Cp2112.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Cp2112/Driver/ICs.IOExpanders.Cp2112.csproj index d68c5eba44..32a6232f61 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Cp2112/Driver/ICs.IOExpanders.Cp2112.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Cp2112/Driver/ICs.IOExpanders.Cp2112.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Cp2112/Samples/Cp2112_Windows_Sample/Cp2112_Windows_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Cp2112/Samples/Cp2112_Windows_Sample/Cp2112_Windows_Sample.csproj index 0c352614e4..c1d86a342e 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Cp2112/Samples/Cp2112_Windows_Sample/Cp2112_Windows_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Cp2112/Samples/Cp2112_Windows_Sample/Cp2112_Windows_Sample.csproj @@ -17,7 +17,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Native/Windows/Win32/libmpsse.dll b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Native/Windows/Win32/libmpsse.dll deleted file mode 100644 index e35567c25b..0000000000 Binary files a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Native/Windows/Win32/libmpsse.dll and /dev/null differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Native/Windows/x64/libmpsse.dll b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Native/Windows/x64/libmpsse.dll deleted file mode 100644 index a3d19379e8..0000000000 Binary files a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Native/Windows/x64/libmpsse.dll and /dev/null differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Samples/Ft232h_Windows_Sample/Ft232h_Windows_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Samples/Ft232h_Windows_Sample/Ft232h_Windows_Sample.csproj deleted file mode 100644 index e0581ad838..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Samples/Ft232h_Windows_Sample/Ft232h_Windows_Sample.csproj +++ /dev/null @@ -1,26 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - PreserveNewest - - - - - - - - - - - - - - diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Data Sheets/AN_108_Command_Processor_for_MPSSE_and_MCU_Host_Bus_Emulation_Modes.pdf b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Datasheet/AN_108_Command_Processor_for_MPSSE_and_MCU_Host_Bus_Emulation_Modes.pdf similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Data Sheets/AN_108_Command_Processor_for_MPSSE_and_MCU_Host_Bus_Emulation_Modes.pdf rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Datasheet/AN_108_Command_Processor_for_MPSSE_and_MCU_Host_Bus_Emulation_Modes.pdf diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Data Sheets/D2XX_Programmers_Guide.pdf b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Datasheet/D2XX_Programmers_Guide.pdf similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Data Sheets/D2XX_Programmers_Guide.pdf rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Datasheet/D2XX_Programmers_Guide.pdf diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Data Sheets/ftd2xx.h b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Datasheet/ftd2xx.h similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Data Sheets/ftd2xx.h rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Datasheet/ftd2xx.h diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/AssemblyInfo.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/AssemblyInfo.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/AssemblyInfo.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/AssemblyInfo.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Ft2232Expander.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Drivers/Ft2232.cs similarity index 69% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Ft2232Expander.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Drivers/Ft2232.cs index fef53e9d97..8213b72e1a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Ft2232Expander.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Drivers/Ft2232.cs @@ -3,9 +3,12 @@ namespace Meadow.Foundation.ICs.IOExpanders; -public class Ft2232Expander : FtdiExpander +/// +/// Represents an FT2232 USB IO expander +/// +public class Ft2232 : FtdiExpander { - internal Ft2232Expander() + internal Ft2232() { } @@ -13,8 +16,7 @@ internal Ft2232Expander() public override II2cBus CreateI2cBus(int channel = 0, I2cBusSpeed busSpeed = I2cBusSpeed.Standard) { // TODO: depends on part - // TODO: make sure no SPI is in use - var bus = new Ft23xxxI2cBus(this, busSpeed); + var bus = new Ft23xxI2cBus(this, busSpeed); bus.Configure(); return bus; } @@ -22,8 +24,6 @@ public override II2cBus CreateI2cBus(int channel = 0, I2cBusSpeed busSpeed = I2c /// public override ISpiBus CreateSpiBus(int channel, SpiClockConfiguration configuration) { - // TODO: make sure no SPI is in use - throw new NotSupportedException(); } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Ft232hExpander.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Drivers/Ft232h.cs similarity index 83% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Ft232hExpander.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Drivers/Ft232h.cs index c55211e98d..bd38999f12 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Ft232hExpander.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Drivers/Ft232h.cs @@ -2,9 +2,12 @@ namespace Meadow.Foundation.ICs.IOExpanders; -public class Ft232hExpander : FtdiExpander +/// +/// Represents an FT232H USB IO expander +/// +public class Ft232h : FtdiExpander { - internal Ft232hExpander() + internal Ft232h() { } @@ -22,9 +25,8 @@ public override II2cBus CreateI2cBus(int channel = 0, I2cBusSpeed busSpeed = I2c public override ISpiBus CreateSpiBus(int channel, SpiClockConfiguration configuration) { // TODO: make sure no SPI is in use - var bus = new Ft232hSpiBus(this, configuration); bus.Configure(); return bus; } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Drivers/Ft4232.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Drivers/Ft4232.cs new file mode 100644 index 0000000000..d328e21bd8 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Drivers/Ft4232.cs @@ -0,0 +1,29 @@ +using Meadow.Hardware; +using System; + +namespace Meadow.Foundation.ICs.IOExpanders; + +/// +/// Represents an FT4232 USB IO expander +/// +public class Ft4232 : FtdiExpander +{ + internal Ft4232() + { + } + + /// + public override II2cBus CreateI2cBus(int channel = 0, I2cBusSpeed busSpeed = I2cBusSpeed.Standard) + { + // TODO: depends on part + var bus = new Ft23xxI2cBus(this, busSpeed); + bus.Configure(); + return bus; + } + + /// + public override ISpiBus CreateSpiBus(int channel, SpiClockConfiguration configuration) + { + throw new NotSupportedException(); + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Exceptions.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Exceptions.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Exceptions.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Exceptions.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.DigitalOutputPort.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.DigitalOutputPort.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.DigitalOutputPort.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.DigitalOutputPort.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.Ft232hI2cBus.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.Ft232hI2cBus.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.Ft232hI2cBus.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.Ft232hI2cBus.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.Ft232hSpiBus.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.Ft232hSpiBus.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.Ft232hSpiBus.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.Ft232hSpiBus.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.Ft23xxxI2cBus.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.Ft23xxI2cBus.cs similarity index 98% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.Ft23xxxI2cBus.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.Ft23xxI2cBus.cs index 216e5f4523..62b8f7f9b4 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.Ft23xxxI2cBus.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.Ft23xxI2cBus.cs @@ -5,9 +5,9 @@ namespace Meadow.Foundation.ICs.IOExpanders; public abstract partial class FtdiExpander { - public class Ft23xxxI2cBus : I2CBus, II2cBus + public class Ft23xxI2cBus : I2CBus, II2cBus { - internal Ft23xxxI2cBus(FtdiExpander expander, I2cBusSpeed busSpeed) + internal Ft23xxI2cBus(FtdiExpander expander, I2cBusSpeed busSpeed) : base(expander, busSpeed) { } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.I2CBus.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.I2CBus.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.I2CBus.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.I2CBus.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.PinDefinitions.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.PinDefinitions.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.PinDefinitions.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.PinDefinitions.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.SpiBus.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.SpiBus.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.SpiBus.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.SpiBus.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.cs similarity index 93% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.cs index ed4f640a9a..9de7f9a81b 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpander.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpander.cs @@ -50,7 +50,7 @@ internal static FtdiExpander Create( { FtdiExpander expander = deviceType switch { - FtDeviceType.Ft232H => new Ft232hExpander + FtDeviceType.Ft232H => new Ft232h { Index = index, Flags = flags, @@ -60,7 +60,7 @@ internal static FtdiExpander Create( Description = description, Handle = handle }, - FtDeviceType.Ft2232 => new Ft2232Expander + FtDeviceType.Ft2232 => new Ft2232 { Index = index, Flags = flags, @@ -281,11 +281,21 @@ public ISpiBus CreateSpiBus(IPin clock, IPin copi, IPin cipo, Frequency speed) return CreateSpiBus(0, new SpiClockConfiguration(speed)); } + /// + /// Creates a SPI bus instance for the requested control pins and bus speed + /// + /// The SPI clock configuration. + /// Returns an instance of . public ISpiBus CreateSpiBus(SpiClockConfiguration configuration) { return CreateSpiBus(0, configuration); } + /// + /// Creates an SPI bus on the expander. + /// + /// The channel number to use for the SPI bus. + /// Returns an instance of . public ISpiBus CreateSpiBus(int channel = 0) { return CreateSpiBus(channel, new SpiClockConfiguration(1000000.Hertz())); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpanderCollection.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpanderCollection.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/FtdiExpanderCollection.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/FtdiExpanderCollection.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/I2CClockRate.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/I2CClockRate.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/I2CClockRate.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/I2CClockRate.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/ICs.IOExpanders.Ftxxxx.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/ICs.IOExpanders.Ftxxxx.csproj new file mode 100644 index 0000000000..c4f4551f59 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/ICs.IOExpanders.Ftxxxx.csproj @@ -0,0 +1,28 @@ + + + + 1.11.0 + Readme.md + enable + 10.0 + Apache-2.0 + true + icon.png + Wilderness Labs, Inc + netstandard2.1 + Library + Ft2xxx + Wilderness Labs, Inc + http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ + Meadow.Foundation.ICs.IOExpanders.Ft232h + https://github.com/WildernessLabs/Meadow.Foundation + Meadow.Foundation,IOExpanders,expander,IO,Ft232h,ft2232,ft4232 + true + Ft2xxx family of USB IOExpanders for GPIO, I2C, SPI on Windows + + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Native.Ftd2xx.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Native.Ftd2xx.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Native.Ftd2xx.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Native.Ftd2xx.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Native.I2CTransferOptions.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Native.I2CTransferOptions.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Native.I2CTransferOptions.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Native.I2CTransferOptions.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Native.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Native.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Native.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Native.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Readme.md similarity index 94% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Readme.md rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Readme.md index a63471ccb4..834d48c7fc 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/Readme.md +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Driver/Readme.md @@ -1,8 +1,8 @@ # Meadow.Foundation.ICs.IOExpanders.Ft232h -**Ft232h USB IOExpander for GPIO, I2C, SPI on Windows** +**Ft2xxx family of USB IOExpanders for GPIO, I2C, SPI on Windows** -The **Ft232h** library is included in the **Meadow.Foundation.ICs.IOExpanders.Ft232h** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. +The **Ft2xxx** library is included in the **Meadow.Foundation.ICs.IOExpanders.Ft232h** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. This driver is part of the [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/) peripherals library, an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT applications. diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Samples/Ft232h_Sample/Ft232h_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Samples/Ft232h_Sample/Ft232h_Sample.csproj new file mode 100644 index 0000000000..78728f3e98 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Samples/Ft232h_Sample/Ft232h_Sample.csproj @@ -0,0 +1,16 @@ + + + + Exe + net7.0 + enable + enable + + + + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Samples/Ft232h_Windows_Sample/Program.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Samples/Ft232h_Sample/Program.cs similarity index 72% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Samples/Ft232h_Windows_Sample/Program.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Samples/Ft232h_Sample/Program.cs index ef7baf3c25..052e70ad28 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Samples/Ft232h_Windows_Sample/Program.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Samples/Ft232h_Sample/Program.cs @@ -10,24 +10,10 @@ var count = FtdiExpanderCollection.Devices.Count(); var expander = FtdiExpanderCollection.Devices[0]; -//await TestBME280(ft232); -//await TestIli9341(ft232h); //await TestGpio(FtdiExpanderCollection.Devices); //await TestI2C(FtdiExpanderCollection.Devices[0]); await TestSPI(FtdiExpanderCollection.Devices[0]); - -//async Task TestBME280(Ft232h expander) -//{ -// var bme = new Bme280(expander.CreateI2cBus()); - -// while (true) -// { -// var reading = await bme.Read(); -// Debug.WriteLine($"Temp: {reading.Temperature.Value.Fahrenheit}F Humidity: {reading.Humidity.Value.Percent}%"); -// await Task.Delay(1000); -// } -//} async Task TestSPI(FtdiExpander expander) { var mcp = new Mcp3201( @@ -50,13 +36,12 @@ async Task TestSPI(FtdiExpander expander) await Task.Delay(1000); } - } async Task TestI2C(FtdiExpander expander) { var sensor = new Veml7700(expander.CreateI2cBus()); - //var sensor = new Pct2075(expander.CreateI2cBus()); + while (true) { Debug.WriteLine("Reading..."); @@ -109,26 +94,4 @@ async Task TestGpio(IEnumerable expanders) await Task.Delay(1000); s = !s; } -} - -//async Task TestIli9341(Ft232h expander) -//{ -// var ili = new Ili9341( -// expander.CreateSpiBus(), -// expander.CreateDigitalOutputPort(expander.Pins.C0), -// expander.CreateDigitalOutputPort(expander.Pins.C2), -// expander.CreateDigitalOutputPort(expander.Pins.C1), -// 480, -// 320 -// ); - -// while (true) -// { -// ili.Fill(Color.Red); -// await Task.Delay(1000); -// ili.Fill(Color.Green); -// await Task.Delay(1000); -// ili.Fill(Color.Blue); -// await Task.Delay(1000); -// } -//} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Tests/FT232.Unit.Tests/FT232.Unit.Tests.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Tests/FT232.Unit.Tests/FT232.Unit.Tests.csproj similarity index 92% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Tests/FT232.Unit.Tests/FT232.Unit.Tests.csproj rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Tests/FT232.Unit.Tests/FT232.Unit.Tests.csproj index eff479b76f..f88a07f68e 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Tests/FT232.Unit.Tests/FT232.Unit.Tests.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Tests/FT232.Unit.Tests/FT232.Unit.Tests.csproj @@ -25,7 +25,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Tests/FT232.Unit.Tests/UnitTest1.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Tests/FT232.Unit.Tests/UnitTest1.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Tests/FT232.Unit.Tests/UnitTest1.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Tests/FT232.Unit.Tests/UnitTest1.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Tests/FT232.Unit.Tests/Usings.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Tests/FT232.Unit.Tests/Usings.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Tests/FT232.Unit.Tests/Usings.cs rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/Tests/FT232.Unit.Tests/Usings.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/readme.md b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/readme.md similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/readme.md rename to Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ftxxxx/readme.md diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj index e700bf757c..8f2b46fe27 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/Ht16k33_Character_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/Ht16k33_Character_Sample.csproj index 33ef721b11..72e8b7aa52 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/Ht16k33_Character_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/Ht16k33_Character_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/Ht16k33_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/Ht16k33_Sample.csproj index 33ef721b11..72e8b7aa52 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/Ht16k33_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/Ht16k33_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/ICs.IOExpanders.Is31fl3731.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/ICs.IOExpanders.Is31fl3731.csproj index 816ec5f14f..0183070206 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/ICs.IOExpanders.Is31fl3731.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/ICs.IOExpanders.Is31fl3731.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Samples/Is31fl3731_Sample/Is31fl3731_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Samples/Is31fl3731_Sample/Is31fl3731_Sample.csproj index 2a5e8bd8b5..e0b163dd6e 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Samples/Is31fl3731_Sample/Is31fl3731_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Samples/Is31fl3731_Sample/Is31fl3731_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Samples/Is31fl3731_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Samples/Is31fl3731_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Samples/Is31fl3731_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/ICs.IOExpanders.Mcp23xxx.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/ICs.IOExpanders.Mcp23xxx.csproj index 20bdd9274f..8f666d4635 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/ICs.IOExpanders.Mcp23xxx.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/ICs.IOExpanders.Mcp23xxx.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md 10.0 Apache-2.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.DigitalInterruptPort.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.DigitalInterruptPort.cs index 621b62be21..ec1ecc7565 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.DigitalInterruptPort.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.DigitalInterruptPort.cs @@ -14,7 +14,7 @@ public class DigitalInterruptPort : DigitalInterruptPortBase public override bool State => state; private bool state = false; - private int lastUpdate; + private DateTime lastUpdate; /// public override ResistorMode Resistor @@ -52,13 +52,13 @@ public DigitalInterruptPort(IPin pin, InterruptMode interruptMode = InterruptMod /// The new port state internal void Update(bool newState) { - var now = Environment.TickCount; - - if (now - lastUpdate < DebounceDuration.TotalMilliseconds) + if (DateTime.UtcNow - lastUpdate < DebounceDuration) { return; } + var now = DateTime.UtcNow; + if (newState != state) { switch (InterruptMode) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23008_Sample/Mcp23008_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23008_Sample/Mcp23008_Sample.csproj index ae4f6d29af..e3282f0101 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23008_Sample/Mcp23008_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23008_Sample/Mcp23008_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23008_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23008_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23008_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23009_Sample/Mcp23009_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23009_Sample/Mcp23009_Sample.csproj index ae4f6d29af..e3282f0101 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23009_Sample/Mcp23009_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23009_Sample/Mcp23009_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23009_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23009_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23009_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23017_Sample/Mcp23017_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23017_Sample/Mcp23017_Sample.csproj index ae4f6d29af..e3282f0101 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23017_Sample/Mcp23017_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23017_Sample/Mcp23017_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23017_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23017_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23017_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23018_Sample/Mcp23018_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23018_Sample/Mcp23018_Sample.csproj index ae4f6d29af..e3282f0101 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23018_Sample/Mcp23018_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23018_Sample/Mcp23018_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23018_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23018_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23018_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s08_Sample/Mcp23s08_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s08_Sample/Mcp23s08_Sample.csproj index ae4f6d29af..e3282f0101 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s08_Sample/Mcp23s08_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s08_Sample/Mcp23s08_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s08_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s08_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s08_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s09_Sample/Mcp23s09_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s09_Sample/Mcp23s09_Sample.csproj index ae4f6d29af..e3282f0101 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s09_Sample/Mcp23s09_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s09_Sample/Mcp23s09_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s09_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s09_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s09_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s17_Sample/Mcp23s17_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s17_Sample/Mcp23s17_Sample.csproj index ae4f6d29af..e3282f0101 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s17_Sample/Mcp23s17_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s17_Sample/Mcp23s17_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s17_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s17_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s17_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s18_Sample/Mcp23s18_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s18_Sample/Mcp23s18_Sample.csproj index ae4f6d29af..e3282f0101 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s18_Sample/Mcp23s18_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s18_Sample/Mcp23s18_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s18_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s18_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s18_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/Mcp23x08_Input_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/Mcp23x08_Input_Sample.csproj index 557ecdc0f0..e3282f0101 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/Mcp23x08_Input_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/Mcp23x08_Input_Sample.csproj @@ -9,12 +9,7 @@ App - - + + - - - Always - - diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/Mcp23x17_Input_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/Mcp23x17_Input_Sample.csproj index 557ecdc0f0..e3282f0101 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/Mcp23x17_Input_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/Mcp23x17_Input_Sample.csproj @@ -9,12 +9,7 @@ App - - + + - - - Always - - diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9671/Driver/ICs.IOExpanders.Pca9671.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9671/Driver/ICs.IOExpanders.Pca9671.csproj index 833dc263d1..e3a35af4ce 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9671/Driver/ICs.IOExpanders.Pca9671.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9671/Driver/ICs.IOExpanders.Pca9671.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md 10.0 Apache-2.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9671/Samples/Pca9671_Sample/Pca9671_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9671/Samples/Pca9671_Sample/Pca9671_Sample.csproj index 9bcf835866..881069b8ad 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9671/Samples/Pca9671_Sample/Pca9671_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9671/Samples/Pca9671_Sample/Pca9671_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9671/Samples/Pca9671_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9671/Samples/Pca9671_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9671/Samples/Pca9671_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/ICs.IOExpanders.Pca9685.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/ICs.IOExpanders.Pca9685.csproj index 9e1171307c..3960cf0e2a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/ICs.IOExpanders.Pca9685.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/ICs.IOExpanders.Pca9685.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/Pca9685_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/Pca9685_Sample.csproj index bc279cc32b..94c8835bbc 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/Pca9685_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/Pca9685_Sample.csproj @@ -10,12 +10,7 @@ ICs.IOExpanders - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pca8574.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pca8574.cs index 0c024c7af4..839da99c55 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pca8574.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pca8574.cs @@ -26,5 +26,15 @@ public Pca8574(II2cBus i2cBus, byte address, IPin? interruptPin) public Pca8574(II2cBus i2cBus, byte address, IDigitalInterruptPort? interruptPort = default) : base(i2cBus, address, interruptPort) { } + + /// + /// Helper method to get address from address pin configuration + /// + /// State of A0 address pin - true if high + /// State of A1 address pin - true if high + /// State of A2 address pin - true if high + /// The device address + public static byte GetAddressForPins(bool pinA0, bool pinA1, bool pinA2) + => GetAddressFromPins(pinA0, pinA1, pinA2, false); } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pca8574a.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pca8574a.cs new file mode 100644 index 0000000000..7283be9057 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pca8574a.cs @@ -0,0 +1,40 @@ +using Meadow.Hardware; + +namespace Meadow.Foundation.ICs.IOExpanders +{ + /// + /// Represents the Pca8574a 8-bit I/O I2C expander + /// + public class Pca8574a : Pcx8574 + { + /// + /// Initializes a new instance of the Pca8574a device + /// + /// The I2C bus the peripheral is connected to + /// The I2C bus address of the peripheral + /// The interrupt pin + public Pca8574a(II2cBus i2cBus, byte address, IPin? interruptPin) + : base(i2cBus, address, interruptPin) + { } + + /// + /// Initializes a new instance of the Pca8574a device + /// + /// The I2C bus the peripheral is connected to + /// The I2C bus address of the peripheral + /// The interrupt port + public Pca8574a(II2cBus i2cBus, byte address, IDigitalInterruptPort? interruptPort = default) + : base(i2cBus, address, interruptPort) + { } + + /// + /// Helper method to get address from address pin configuration + /// + /// State of A0 address pin - true if high + /// State of A1 address pin - true if high + /// State of A2 address pin - true if high + /// The device address + public static byte GetAddressForPins(bool pinA0, bool pinA1, bool pinA2) + => GetAddressFromPins(pinA0, pinA1, pinA2, true); + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pca8575.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pca8575.cs index c084cc7e85..e34a01a675 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pca8575.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pca8575.cs @@ -26,5 +26,15 @@ public Pca8575(II2cBus i2cBus, byte address, IPin? interruptPin) public Pca8575(II2cBus i2cBus, byte address, IDigitalInterruptPort? interruptPort = default) : base(i2cBus, address, interruptPort) { } + + /// + /// Helper method to get address from address pin configuration + /// + /// State of A0 address pin - true if high + /// State of A1 address pin - true if high + /// State of A2 address pin - true if high + /// The device address + public static byte GetAddressForPins(bool pinA0, bool pinA1, bool pinA2) + => GetAddressFromPins(pinA0, pinA1, pinA2, false); } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pcf8574.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pcf8574.cs index 756beb84aa..5c9332cd92 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pcf8574.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pcf8574.cs @@ -26,5 +26,15 @@ public Pcf8574(II2cBus i2cBus, byte address, IPin? interruptPin) public Pcf8574(II2cBus i2cBus, byte address, IDigitalInterruptPort? interruptPort = default) : base(i2cBus, address, interruptPort) { } + + /// + /// Helper method to get address from address pin configuration + /// + /// State of A0 address pin - true if high + /// State of A1 address pin - true if high + /// State of A2 address pin - true if high + /// The device address + public static byte GetAddressForPins(bool pinA0, bool pinA1, bool pinA2) + => GetAddressFromPins(pinA0, pinA1, pinA2, false); } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pcf8574a.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pcf8574a.cs new file mode 100644 index 0000000000..a34a1bbe7e --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pcf8574a.cs @@ -0,0 +1,40 @@ +using Meadow.Hardware; + +namespace Meadow.Foundation.ICs.IOExpanders +{ + /// + /// Represents the Pcf8574a 8-bit I/O I2C expander + /// + public class Pcf8574a : Pcx8574 + { + /// + /// Initializes a new instance of the Pcf8574a device + /// + /// The I2C bus the peripheral is connected to + /// The I2C bus address of the peripheral + /// The interrupt pin + public Pcf8574a(II2cBus i2cBus, byte address, IPin? interruptPin) + : base(i2cBus, address, interruptPin) + { } + + /// + /// Initializes a new instance of the Pcf8574a device + /// + /// The I2C bus the peripheral is connected to + /// The I2C bus address of the peripheral + /// The interrupt port + public Pcf8574a(II2cBus i2cBus, byte address, IDigitalInterruptPort? interruptPort = default) + : base(i2cBus, address, interruptPort) + { } + + /// + /// Helper method to get address from address pin configuration + /// + /// State of A0 address pin - true if high + /// State of A1 address pin - true if high + /// State of A2 address pin - true if high + /// The device address + public static byte GetAddressForPins(bool pinA0, bool pinA1, bool pinA2) + => GetAddressFromPins(pinA0, pinA1, pinA2, true); + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pcf8575.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pcf8575.cs index f5e921841a..30112d90a5 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pcf8575.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Drivers/Pcf8575.cs @@ -26,5 +26,15 @@ public Pcf8575(II2cBus i2cBus, byte address, IPin? interruptPin) public Pcf8575(II2cBus i2cBus, byte address, IDigitalInterruptPort? interruptPort = default) : base(i2cBus, address, interruptPort) { } + + /// + /// Helper method to get address from address pin configuration + /// + /// State of A0 address pin - true if high + /// State of A1 address pin - true if high + /// State of A2 address pin - true if high + /// The device address + public static byte GetAddressForPins(bool pinA0, bool pinA1, bool pinA2) + => GetAddressFromPins(pinA0, pinA1, pinA2, false); } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/ICs.IOExpanders.Pcx857x.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/ICs.IOExpanders.Pcx857x.csproj index 13a041b68c..589e94f6a4 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/ICs.IOExpanders.Pcx857x.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/ICs.IOExpanders.Pcx857x.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md 10.0 Apache-2.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Pcx857x.AddressTable.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Pcx857x.AddressTable.cs index fa03e3818f..2d80b6a562 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Pcx857x.AddressTable.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Pcx857x.AddressTable.cs @@ -10,7 +10,7 @@ public partial class Pcx857x /// State of A2 address pin - true if high /// Is an A hardware variant, this shifts the address returned by 24 /// The device address - public static byte GetAddressFromPins(bool pinA0, bool pinA1, bool pinA2, bool isATypeDevice = false) + internal static byte GetAddressFromPins(bool pinA0, bool pinA1, bool pinA2, bool isATypeDevice) { /* A2 A1 A0 HexAddr. Dec.Addr. diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Pcx857x.DigitalInterruptPort.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Pcx857x.DigitalInterruptPort.cs index 7d839648b1..1f56366e13 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Pcx857x.DigitalInterruptPort.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Driver/Pcx857x.DigitalInterruptPort.cs @@ -30,7 +30,7 @@ public override ResistorMode Resistor public override bool State => state; private bool state = false; - private int lastUpdate; + private DateTime lastUpdate; private ResistorMode resistorMode = ResistorMode.Disabled; @@ -68,13 +68,13 @@ public DigitalInterruptPort(IPin pin, InterruptMode interruptMode = InterruptMod /// The new port state internal void Update(bool newState) { - var now = Environment.TickCount; - - if (now - lastUpdate < DebounceDuration.TotalMilliseconds) + if (DateTime.UtcNow - lastUpdate < DebounceDuration) { return; } + var now = DateTime.UtcNow; + if (newState != state) { switch (InterruptMode) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8574_Sample/Pca8574_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8574_Sample/Pca8574_Sample.csproj index dee5dc7968..08929a714c 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8574_Sample/Pca8574_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8574_Sample/Pca8574_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8574_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8574_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8574_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8575_Sample/Pca8575_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8575_Sample/Pca8575_Sample.csproj index dee5dc7968..08929a714c 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8575_Sample/Pca8575_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8575_Sample/Pca8575_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8575_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8575_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pca8575_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8574_Sample/Pcf8574_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8574_Sample/Pcf8574_Sample.csproj index dee5dc7968..08929a714c 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8574_Sample/Pcf8574_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8574_Sample/Pcf8574_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8574_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8574_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8574_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8575_Sample/Pcf8575_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8575_Sample/Pcf8575_Sample.csproj index dee5dc7968..08929a714c 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8575_Sample/Pcf8575_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8575_Sample/Pcf8575_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8575_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8575_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pcx857x/Samples/Pcf8575_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Datasheet/SC16IS752_Breakout.svg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Datasheet/SC16IS752_Breakout.svg new file mode 100644 index 0000000000..0077415864 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Datasheet/SC16IS752_Breakout.svg @@ -0,0 +1,796 @@ + + + + + + + + + + + + + + + + + prefix0000_546b1ed84314972f38e68356627cbbee_1_breadboard.svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TxA + RtsA + CtsA + TxB + RxB + RtsB + CtsB + RxA + GP7 + GP5 + GP4 + GP3 + GP2 + GP1 + GP0 + GP6 + VCC + RESET + A0/CS + A1/SI + NC/SO + IRQ + I2C/SPI + SCL/SCLK + SDA/VSS + GND + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Datasheet/SC16IS752_Breakout_schematic.svg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Datasheet/SC16IS752_Breakout_schematic.svg new file mode 100644 index 0000000000..65ee941dcc --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Datasheet/SC16IS752_Breakout_schematic.svg @@ -0,0 +1,1154 @@ + + + SC16IS752_Schema + + + + + + generic_female_pin_header_10_100mil_10thin_double_schematic.svg + + + + + TxA + + + + GP7 + + + + RxA + + + + GP6 + + + + RtsA + + + + GP5 + + + + CtsA + + + + GP4 + + + + TxB + + + + RxB + + + + RtsB + + + + CtsB + + + + GP3 + + + + GP2 + + + + GP1 + + + + GP0 + + + + VCC + + + + GND + + + + RESET + + + + A0/CS + + + + A1/SI + + + + NC/SO + + + + IRQ + + + + I2C/SPI + + + + SCL/SCLK + + + + SDA/VSS + + + + SC16IS752_Schema + + + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Drivers/Sc16is752.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Drivers/Sc16is752.cs index 206bf570c8..eba98bf2ef 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Drivers/Sc16is752.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Drivers/Sc16is752.cs @@ -13,7 +13,9 @@ public class Sc16is752 : Sc16is7x2 /// /// The oscillator frequency of the device. /// An optional digital interrupt port for IRQ (Interrupt Request). - public Sc16is752(Frequency oscillatorFrequency, IDigitalInterruptPort? irq) : base(oscillatorFrequency, irq) + /// An interrupt triggered by a GPIO change, will remain until handled. State will also be kept. + public Sc16is752(Frequency oscillatorFrequency, IDigitalInterruptPort? irq, bool latchGpioInterrupt = false) + : base(oscillatorFrequency, irq, latchGpioInterrupt) { } @@ -24,7 +26,9 @@ public Sc16is752(Frequency oscillatorFrequency, IDigitalInterruptPort? irq) : ba /// The oscillator frequency of the device. /// The I2C address of the device (default is 0x48). /// An optional digital interrupt port for IRQ (Interrupt Request). - public Sc16is752(II2cBus i2cBus, Frequency oscillatorFrequency, Addresses address = Addresses.Address_0x48, IDigitalInterruptPort? irq = null) : base(i2cBus, oscillatorFrequency, address, irq) + /// An interrupt triggered by a GPIO change, will remain until handled. State will also be kept. + public Sc16is752(II2cBus i2cBus, Frequency oscillatorFrequency, Addresses address = Addresses.Address_0x48, IDigitalInterruptPort? irq = null, bool latchGpioInterrupt = false) + : base(i2cBus, oscillatorFrequency, address, irq, latchGpioInterrupt) { } @@ -35,7 +39,9 @@ public Sc16is752(II2cBus i2cBus, Frequency oscillatorFrequency, Addresses addres /// The oscillator frequency of the device. /// An optional digital output port for chip select (CS). /// An optional digital interrupt port for IRQ (Interrupt Request). - public Sc16is752(ISpiBus spiBus, Frequency oscillatorFrequency, IDigitalOutputPort? chipSelect = null, IDigitalInterruptPort? irq = null) : base(spiBus, oscillatorFrequency, chipSelect, irq) + /// An interrupt triggered by a GPIO change, will remain until handled. State will also be kept. + public Sc16is752(ISpiBus spiBus, Frequency oscillatorFrequency, IDigitalOutputPort? chipSelect = null, IDigitalInterruptPort? irq = null, bool latchGpioInterrupt = false) + : base(spiBus, oscillatorFrequency, chipSelect, irq, latchGpioInterrupt) { } } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Drivers/Sc16is762.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Drivers/Sc16is762.cs index aac961f8cb..dd5d355505 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Drivers/Sc16is762.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Drivers/Sc16is762.cs @@ -13,7 +13,9 @@ public class Sc16is762 : Sc16is7x2 /// /// The oscillator frequency of the device. /// An optional digital interrupt port for IRQ (Interrupt Request). - public Sc16is762(Frequency oscillatorFrequency, IDigitalInterruptPort? irq) : base(oscillatorFrequency, irq) + /// An interrupt triggered by a GPIO change, will remain until handled. State will also be kept. + public Sc16is762(Frequency oscillatorFrequency, IDigitalInterruptPort? irq, bool latchGpioInterrupt = false) + : base(oscillatorFrequency, irq, latchGpioInterrupt) { } /// @@ -23,7 +25,9 @@ public Sc16is762(Frequency oscillatorFrequency, IDigitalInterruptPort? irq) : ba /// The oscillator frequency of the device. /// The I2C address of the device (default is 0x48). /// An optional digital interrupt port for IRQ (Interrupt Request). - public Sc16is762(II2cBus i2cBus, Frequency oscillatorFrequency, Addresses address = Addresses.Address_0x48, IDigitalInterruptPort? irq = null) : base(i2cBus, oscillatorFrequency, address, irq) + /// An interrupt triggered by a GPIO change, will remain until handled. State will also be kept. + public Sc16is762(II2cBus i2cBus, Frequency oscillatorFrequency, Addresses address = Addresses.Address_0x48, IDigitalInterruptPort? irq = null, bool latchGpioInterrupt = false) + : base(i2cBus, oscillatorFrequency, address, irq, latchGpioInterrupt) { } @@ -34,7 +38,9 @@ public Sc16is762(II2cBus i2cBus, Frequency oscillatorFrequency, Addresses addres /// The oscillator frequency of the device. /// An optional digital output port for chip select (CS). /// An optional digital interrupt port for IRQ (Interrupt Request). - public Sc16is762(ISpiBus spiBus, Frequency oscillatorFrequency, IDigitalOutputPort? chipSelect = null, IDigitalInterruptPort? irq = null) : base(spiBus, oscillatorFrequency, chipSelect, irq) + /// An interrupt triggered by a GPIO change, will remain until handled. State will also be kept. + public Sc16is762(ISpiBus spiBus, Frequency oscillatorFrequency, IDigitalOutputPort? chipSelect = null, IDigitalInterruptPort? irq = null, bool latchGpioInterrupt = false) + : base(spiBus, oscillatorFrequency, chipSelect, irq, latchGpioInterrupt) { } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/FifoBuffer.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/FifoBuffer.cs new file mode 100644 index 0000000000..74aeee7fe5 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/FifoBuffer.cs @@ -0,0 +1,137 @@ +using System; +using System.Text; + +namespace Meadow.Foundation.ICs.IOExpanders; + +/// +/// This FIFO buffer is implemented as a circular buffer. (Standard computer science stuff) +/// It operates on bytes. The only special method is WriteString, +/// which writes a string to the buffer after converting it with Encoding.ASCII.GetBytes(). +/// +public class FifoBuffer +{ + private readonly byte[] _buffer; + private int _nextRead; + private int _nextWrite; + private int _count; + + /// + /// The number of bytes that can be stored in the buffer. + /// + public int Capacity => _buffer.Length; + + /// + /// The number of bytes currently stored in the buffer. Increases with Write() and decreases with Read(). + /// + public int Count => _count; + + /// + /// Create a FIFO byte buffer with a specified capacity. + /// The buffer is circular, so it will reuse the allocated space. + /// Write operations will consume space in the buffer, and read operations will free up space. + /// If you try to write more data than its capacity, it will throw an error. + /// + /// The size of the circular buffer, containing bytes. + /// + public FifoBuffer(int capacity) + { + if (capacity < 1) + throw new ArgumentException("Capacity must be greater than 0.", nameof(capacity)); + + _buffer = new byte[capacity]; + _nextRead = 0; // The next read position. + _nextWrite = 0; // The next write position. + _count = 0; // The number of items in the buffer. + } + + /// + /// Clear/empty the FIFO buffer. + /// + public void Clear() + { + _nextRead = 0; // The read position. + _nextWrite = 0; // The write position. + _count = 0; // The number of items in the buffer. + } + + /// + /// Add new item to the _nestWrite position in the buffer. + /// Then move the _nextWrite position. If it goes beyond the capacity, it will wrap around to 0. + /// If you try to write more data than the capacity, it will throw an error. + /// + /// + /// + public void Write(byte item) + { + if (_count == Capacity) + throw new InvalidOperationException("The buffer is full."); + + _buffer[_nextWrite] = item; + _nextWrite = (_nextWrite + 1) % Capacity; // Move _nextWrite forward and possibly wrap. + _count++; + } + + /// + /// Method to remove and return the oldest item. The one at the _nextRead position. + /// The _nextRead position will be moved. If it goes beyond the capacity, it will wrap around to 0. + /// If you try to read from an empty buffer, it will throw an error. + /// + /// + /// + public byte Read() + { + if (_count == 0) + throw new InvalidOperationException("The buffer is empty."); + + var item = _buffer[_nextRead]; + _nextRead = (_nextRead + 1) % Capacity; // Move _nextRead forward and possibly wrap. + _count--; + return item; + } + + /// + /// Peek at element at index, relative to the _nextRead position. + /// The byte at relative index 0 is the oldest one, so looking at [0] is the same as Peek(). + /// + /// + /// + /// + public byte this[int index] + { + get + { + if (index < 0 || index >= _count) + throw new ArgumentOutOfRangeException(nameof(index)); + return _buffer[(_nextRead + index) % Capacity]; + } + } + + /// + /// Method to just return the oldest item. The one at the _nextRead position. (Withoit removing it) + /// If the buffer is empty, it will throw an error. + /// + /// + /// + public byte Peek() + { + if (_count == 0) + throw new InvalidOperationException("The buffer is empty."); + + return _buffer[_nextRead]; + } + + /// + /// Bonus method to add a string to the buffer. + /// Each character in the string will be converted to a byte and written to the buffer. + /// This method can be usefull if you need to tag some data written to the buffer with a string. + /// + /// + public void WriteString(string text) + { + byte[] bytes = Encoding.ASCII.GetBytes(text); + foreach (var c in text) + { + Write((byte)c); + } + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/ICs.IOExpanders.Sc16is7x2.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/ICs.IOExpanders.Sc16is7x2.csproj index 95fffbff9f..17f51b5b51 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/ICs.IOExpanders.Sc16is7x2.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/ICs.IOExpanders.Sc16is7x2.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 true @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.DigitalInputPort.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.DigitalInputPort.cs new file mode 100644 index 0000000000..7b35cd2bb8 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.DigitalInputPort.cs @@ -0,0 +1,93 @@ +using Meadow.Hardware; +using System; + +namespace Meadow.Foundation.ICs.IOExpanders +{ + /// + /// Represents an Sc16is7x2 SPI/I2C dual UART (with 8 GPIO's) + /// + public partial class Sc16is7x2 + { + /// + /// Represents an SC16IS7x2 digital input port + /// Mostly copied from the MCP23xxx implementation + /// + public class DigitalInputPort : DigitalInputPortBase + { + /// + public override bool State + { + get + { + if (Pin.Controller is Sc16is7x2 controller) + { + Update(controller.ReadPort(Pin)); + } + return state; + } + } + private bool state = false; + + /// + public override ResistorMode Resistor + { + get => portResistorMode; + set => throw new NotSupportedException("Cannot change port resistor mode after the port is created"); + } + private readonly ResistorMode portResistorMode; + + /// + /// Create a new DigitalInputPort object + /// + /// The GPIO pin to configure as an input pin + /// The initial state of the pin + /// The resistor mode used by the interrupt pin + public DigitalInputPort(IPin pin, bool initState, ResistorMode resistorMode = ResistorMode.Disabled) + : base(pin, (IDigitalChannelInfo)pin.SupportedChannels![0]) + { + portResistorMode = resistorMode; + state = initState; + } + + /// + /// Update the port value + /// + /// The new port state + internal void Update(bool newState) + { + if (newState == state) return; + + bool oldState = state; + state = newState; + if (StateChanged != null) + StateChanged(this, new StateChangedEventArgs() { OldState = oldState, NewState = newState }); + } + + /// + /// Event to be raised whenever the port state changes. + /// + /// + /// + public delegate void StateChangedHandler(object sender, StateChangedEventArgs e); + /// + /// Event to be raised whenever the port state changes. + /// + public event StateChangedHandler? StateChanged; + + /// + /// Event arguments for the StateChanged event + /// + public class StateChangedEventArgs + { + /// + /// The new pin state + /// + public bool NewState { get; set; } + /// + /// The old pin state + /// + public bool OldState { get; set; } + } + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.DigitalOutputPort.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.DigitalOutputPort.cs new file mode 100644 index 0000000000..562713851d --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.DigitalOutputPort.cs @@ -0,0 +1,51 @@ +using Meadow.Hardware; + +namespace Meadow.Foundation.ICs.IOExpanders +{ + public partial class Sc16is7x2 + { + /// + /// Represents an Sc16is7x2 DigitalOutputPort + /// Copied from the Mcp23xxx implementation + /// + public class DigitalOutputPort : DigitalOutputPortBase + { + /// + /// Enable the caller to receive pin state updates + /// + /// + /// + public delegate void SetPinStateDelegate(IPin pin, bool state); + + /// + /// The SetPinState delegate + /// + public SetPinStateDelegate SetPinState = default!; + + /// + /// The port state + /// True for high, false for low + /// + public override bool State + { + get => state; + set => SetPinState?.Invoke(Pin, state = value); + } + bool state; + + /// + /// Create a new DigitalOutputPort + /// + /// The pin representing the port + /// The initial port state + /// An IPin instance + public DigitalOutputPort( + IPin pin, + bool initialState = false, + OutputType outputType = OutputType.OpenDrain) + : base(pin, (IDigitalChannelInfo)pin.SupportedChannels![0], initialState, outputType) + { + } + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Enums.cs index 3b705e9f98..5bfe9545c9 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Enums.cs @@ -121,6 +121,9 @@ internal enum Channels internal static class RegisterBits { + public const byte IOCTL_IO_LATCH = 1 << 0; + public const byte IOCTL_GPIO_7to4 = 1 << 1; + public const byte IOCTL_GPIO_3to0 = 1 << 2; public const byte IOCTL_RESET = 1 << 3; public const byte FCR_FIFO_ENABLE = 1 << 0; @@ -137,7 +140,14 @@ internal static class RegisterBits public const byte LCR_PARITY_EVEN = 3 << 3; // bits 3 and 4 public const byte LCR_DIVISOR_LATCH_ENABLE = 1 << 7; + public const byte LSR_DATA_READY = 1 << 0; + public const byte LSR_OVERRUN_ERROR = 1 << 1; + public const byte LSR_PARITY_ERROR = 1 << 2; + public const byte LSR_FRAMING_ERROR = 1 << 3; + public const byte LSR_BREAK_INTERRUPT = 1 << 4; public const byte LSR_THR_EMPTY = 1 << 5; + public const byte LSR_TX_EMPTY = 1 << 6; + public const byte LSR_FIFO_DATA_ERROR = 1 << 7; public const byte IIR_RHR_INTERRUPT = 1 << 2; @@ -154,7 +164,83 @@ internal static class RegisterBits public const byte EFCR_RTSCON = 1 << 4; public const byte EFCR_RTSINVER = 1 << 5; + // Interrupt Identification Register + // IIR[5:0] Pri. level Interrupt type Interrupt source + // ------------------------------------------------------------- + // 00 0001 None None None + // 00 0110 1 Receiver line status Overrun Error(OE), Framing Error(FE), Parity Error, (PE), or Break Interrupt(BI) errors occur in characters in the RX FIFO + // 00 1100 2 RX time-out Stale data in RX FIFO + // 00 0100 2 RHR interrupt Receive data ready (FIFO disable) or RX FIFO above trigger level (FIFO enable) + // 00 0010 3 THR interrupt Transmit FIFO empty (FIFO disable) or TX FIFO passes above trigger level (FIFO enable) + // 00 0000 4 Modem status Change of state of modem input pins + // 11 0000 5 I/O pins Input pins change of state. (GPIO) + // 01 0000 6 Xoff interrupt Receive Xoff character(s)/special character + // 10 0000 7 CTS, RTS RTS pin or CTS pin change state from active(LOW) to inactive(HIGH) + public const byte IIR_Id0 = 1 << 0; + public const byte IIR_Id1 = 1 << 1; + public const byte IIR_Id2 = 1 << 2; + public const byte IIR_Id3 = 1 << 3; + public const byte IIR_Id4 = 1 << 4; + public const byte IIR_Id5 = 1 << 5; + public const byte IIR_IdNone = IIR_Id0; + public const byte IIR_IdReceiverLineStatus = IIR_Id1 + IIR_Id2; + public const byte IIR_IdRxTimeout = IIR_Id2 + IIR_Id3; + public const byte IIR_IdRHR = IIR_Id2; + public const byte IIR_IdTHR = IIR_Id1; + public const byte IIR_IdModemStatus = 0; + public const byte IIR_IdGpioPins = IIR_Id4 + IIR_Id5; + public const byte IIR_IdXoff = IIR_Id4; + public const byte IIR_IdCtsRts = IIR_Id5; + } + + /// + /// The interrupt sources for the SC16IS7x2 + /// Using a bit mask to allow for multiple sources to be set, with minimal overhead. + /// Really not sure if multiple sources can be active at the same time, but making it possible. + /// + public enum InterruptSourceType + { + /// + /// Unknown Interrupt Identification Register (IIR) status + /// + Unknown = -1, + /// + /// No interrupt. + /// + None = 0, + /// + /// Overrun Error(OE), Framing Error(FE), Parity Error, (PE), or Break Interrupt(BI) errors occur in characters in the RX FIFO. + /// + ReceiverLineStatus = 1, + /// + /// Stale data in RX FIFO. + /// + RxTimeout = 2, + /// + /// Receive data ready (FIFO disable) or RX FIFO above trigger level (FIFO enable) + /// + RHR = 4, + /// + /// Transmit FIFO empty (FIFO disable) or TX FIFO passes above trigger level (FIFO enable) + /// + THR = 8, + /// + /// Change of state of modem input pins. + /// + ModemStatus = 16, + /// + /// Input pins change of state. (GPIO) + /// + GpioPins = 32, + /// + /// Receive Xoff character(s)/special character. + /// + Xoff = 64, + /// + /// RTS pin or CTS pin change state from active(LOW) to inactive(HIGH). + /// + CtsRts = 128 } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.I2c.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.I2c.cs index 0f675d3e75..0137598dc5 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.I2c.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.I2c.cs @@ -24,8 +24,9 @@ public partial class Sc16is7x2 : II2cPeripheral /// The I2C address /// The frequency of the oscillator connected to the SC16IS /// An optional interrupt port used to detect change conditions on the peripheral - public Sc16is7x2(II2cBus i2cBus, Frequency oscillatorFrequency, Addresses address = Addresses.Default, IDigitalInterruptPort? irq = null) - : this(oscillatorFrequency, irq) + /// An interrupt triggered by a GPIO change, will remain until handled. State will also be kept. + public Sc16is7x2(II2cBus i2cBus, Frequency oscillatorFrequency, Addresses address = Addresses.Default, IDigitalInterruptPort? irq = null, bool latchGpioInterrupt = false) + : this(oscillatorFrequency, irq, latchGpioInterrupt) { _i2cComms = new I2cCommunications(i2cBus, (byte)address); } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.PinDefinitions.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.PinDefinitions.cs new file mode 100644 index 0000000000..d6499ecbc1 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.PinDefinitions.cs @@ -0,0 +1,150 @@ +using Meadow.Hardware; +using System.Collections; +using System.Collections.Generic; + +namespace Meadow.Foundation.ICs.IOExpanders +{ + /// + /// Represents an Sc16is7x2 SPI/I2C dual UART (with 8 GPIO's) + /// + public abstract partial class Sc16is7x2 + { + /// + /// Pin definitions for the 8 GPIO pins + /// 03.12.2023: This is a copy of the Mcp23x0x.PinDefinitions.cs file. + /// + public class PinDefinitions : IPinDefinitions + { + /// + /// The controller for the pins + /// + public IPinController? Controller { get; set; } + + /// + /// List of pins + /// + public IList AllPins { get; } = new List(); + + /// + /// Pin GP0 + /// + public IPin GP0 => new Pin( + Controller, + "GP0", (byte)0x00, + new List { + new DigitalChannelInfo("GP0"), + } + ); + + /// + /// Pin GP1 + /// + public IPin GP1 => new Pin( + Controller, + "GP1", (byte)0x01, + new List { + new DigitalChannelInfo("GP1"), + } + ); + + /// + /// Pin GP2 + /// + public IPin GP2 => new Pin( + Controller, + "GP2", (byte)0x02, + new List { + new DigitalChannelInfo("GP2"), + } + ); + + /// + /// Pin GP3 + /// + public IPin GP3 => new Pin( + Controller, + "GP3", (byte)0x03, + new List { + new DigitalChannelInfo("GP3"), + } + ); + + /// + /// Pin GP4 + /// + public IPin GP4 => new Pin( + Controller, + "GP4", (byte)0x04, + new List { + new DigitalChannelInfo("GP4"), + } + ); + + /// + /// Pin GP5 + /// + public IPin GP5 => new Pin( + Controller, + "GP5", (byte)0x05, + new List { + new DigitalChannelInfo("GP5"), + } + ); + + /// + /// Pin GP6 + /// + public IPin GP6 => new Pin( + Controller, + "GP6", (byte)0x06, + new List { + new DigitalChannelInfo("GP6"), + } + ); + + /// + /// Pin GP7 + /// + public IPin GP7 => new Pin( + Controller, + "GP7", (byte)0x07, + new List { + new DigitalChannelInfo("GP7"), + } + ); + + /// + /// Create a new PinDefinitions object + /// + public PinDefinitions(Sc16is7x2 controller) + { + Controller = (IPinController?)controller; + InitAllPins(); + } + + /// + /// Initialize all pins + /// + protected void InitAllPins() + { + // add all our pins to the collection + AllPins.Add(GP0); + AllPins.Add(GP1); + AllPins.Add(GP2); + AllPins.Add(GP3); + AllPins.Add(GP4); + AllPins.Add(GP5); + AllPins.Add(GP6); + AllPins.Add(GP7); + } + + /// + /// Get Pins + /// + /// IEnumerator of IPin with all pins + public IEnumerator GetEnumerator() => AllPins.GetEnumerator(); + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + } + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Sc16SerialPortName.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Sc16SerialPortName.cs index 026588eab4..c89d0af905 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Sc16SerialPortName.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Sc16SerialPortName.cs @@ -1,5 +1,4 @@ - -using Meadow.Hardware; +using Meadow.Hardware; namespace Meadow.Foundation.ICs.IOExpanders { diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Sc16is7x2Channel.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Sc16is7x2Channel.cs index a12cac8dd2..f215edac64 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Sc16is7x2Channel.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Sc16is7x2Channel.cs @@ -1,5 +1,4 @@ - -using Meadow.Hardware; +using Meadow.Hardware; using System; using System.Threading; @@ -24,7 +23,10 @@ public class Sc16is7x2Channel : ISerialPort private StopBits _stopBits; /// - public int BytesToRead => _controller.GetReadFifoCount(_channel); + public int BytesToRead => (_irqReadBuffer == null) + ? _controller.GetReadFifoCount(_channel) + : _controller.GetReadFifoCount(_channel) + _irqReadBuffer.Count; + /// public bool IsOpen { get; private set; } @@ -47,7 +49,23 @@ public class Sc16is7x2Channel : ISerialPort private readonly Channels _channel; private readonly IDigitalInterruptPort? _irq; - internal Sc16is7x2Channel(Sc16is7x2 controller, string portName, Channels channel, int baudRate = 9600, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One, bool isRS485 = false, bool invertDE = false, IDigitalInterruptPort? irq = null) + private readonly FifoBuffer? _irqReadBuffer; + + /// + /// This method is never called directly from user code. + /// + /// The parent Sc16is7x2 controller. + /// Firendly port name + /// Channel port code + /// + /// + /// + /// + /// + /// + /// The IDigitalInterruptPort connected to the IRQ pin on SC16IS7x2. + /// An interrupt from SC16IS7x2 will not be reset until all bytes in the FIFO are read. So we need a local buffer. + internal Sc16is7x2Channel(Sc16is7x2 controller, string portName, Channels channel, int baudRate = 9600, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One, bool isRS485 = false, bool invertDE = false, IDigitalInterruptPort? irq = null, int readBufferSize = 1024) { PortName = portName; _controller = controller; @@ -61,17 +79,44 @@ internal Sc16is7x2Channel(Sc16is7x2 controller, string portName, Channels channe if (irq != null) { + // Setting up IRQ read with a large software FIFO buffer to offload the hardware FIFO of only 64 bytes. _irq = irq; + _irqReadBuffer = new FifoBuffer(readBufferSize); _controller.EnableReceiveInterrupts(_channel); _irq.Changed += OnInterruptLineChanged; } + + // https://github.com/WildernessLabs/Meadow_Issues/issues/74 + // For some reason (missing hot-paths?), the first interrupt is very slow. So we'll try to perform some dummy runs to pave the way. + // Doesn't really work... problem seems to be before our interrupt handler is called. + + //OnInterruptLineChanged(null, new DigitalPortResult()); + //ReadByte(); + //Read(new byte[0], 0, 0); + //ReadAll(); + //if (_controller._irq is VirtualDigitalInterruptPort a) + // a.RaiseInterrupt(this, new DigitalPortResult()); } - private void OnInterruptLineChanged(object sender, DigitalPortResult e) + internal void OnInterruptLineChanged(object sender, DigitalPortResult e) { - if (_controller.ReceiveInterruptPending(_channel)) + // If the first message after reboot is longer than the FIFO buffer, we already have a buffer overrun at this point. + // For any consecutive messages, it works fine. + // Ref: https://github.com/WildernessLabs/Meadow_Issues/issues/74 + //int count = _controller.GetReadFifoCount(_channel); + //Resolver.Log.Info($"Channel {_channel} port FIFO: {count} bytes"); + + if (_irqReadBuffer == null) { - this.DataReceived?.Invoke(this, new SerialDataReceivedEventArgs(SerialDataType.Chars)); + if (_controller.ReceiveInterruptPending(_channel)) + this.DataReceived?.Invoke(this, new SerialDataReceivedEventArgs(SerialDataType.Chars)); + } + else + { + // If this is IRQ reading, shortcut the user callback. Empty FIFO ASAP. + ReadAllIrqFifo(); + if (_irqReadBuffer.Count > 0) + this.DataReceived?.Invoke(this, new SerialDataReceivedEventArgs(SerialDataType.Chars)); } } @@ -128,75 +173,170 @@ private void InitializeRS485(bool invertDE) _controller.EnableRS485(_channel, invertDE); } + /// + /// Try to read all bytes from the FIFO buffer. + /// + internal void ReadAllIrqFifo() + { + if (_irqReadBuffer == null) return; + int totalRead = 0; + int count = _controller.GetReadFifoCount(_channel); // How may bytes to read. + while (count > 0) + { + for (int i = 0; i < count; i++) + _irqReadBuffer.Write((byte)_controller.ReadByte(_channel)); + totalRead += count; + count = _controller.GetReadFifoCount(_channel); // Check that we're all done. To make sure IRQ is reset. + + byte lsr = _controller.ReadChannelRegister(Registers.LSR, _channel); + if ((lsr & RegisterBits.LSR_OVERRUN_ERROR) > 0) + { + _irqReadBuffer.WriteString("[BUFFER OVERRUN]"); // Not sure to keep this, but nice when debugging. + BufferOverrun?.Invoke(this, EventArgs.Empty); + } + } + if (totalRead > 0) + { + Resolver.Log.Info($"---> ReadAllIrqFifo: Channel {_channel} port read {totalRead} bytes"); + } + } + /// public int ReadByte() { - // check if data is available - if (!_controller.IsFifoDataAvailable(_channel)) + if (_irqReadBuffer == null) { - return -1; - } + // The normal way... + // check if data is available + if (!_controller.IsFifoDataAvailable(_channel)) + { + return -1; + } - // read the data - return _controller.ReadByte(_channel); + // read the data + return _controller.ReadByte(_channel); + } + else + { + // IRQ fast read.... + ReadAllIrqFifo(); + if (_irqReadBuffer.Count == 0) + return -1; + else + return _irqReadBuffer.Read(); + } } /// public int Read(byte[] buffer, int offset, int count) { var timeout = -1; - if (ReadTimeout.TotalMilliseconds > 0) { timeout = Environment.TickCount + (int)ReadTimeout.TotalMilliseconds; } - var available = _controller.GetReadFifoCount(_channel); - - // read either the available or count, whichever is less, unless available is 0, in which case we wait until timeout - while (available == 0) + if (_irqReadBuffer == null) { - Thread.Sleep(10); - available = _controller.GetReadFifoCount(_channel); + // The normal way... + var available = _controller.GetReadFifoCount(_channel); - if (timeout > 0) + // read either the available or count, whichever is less, unless available is 0, in which case we wait until timeout + while (available == 0) { - if (Environment.TickCount >= timeout) + Thread.Sleep(10); + available = _controller.GetReadFifoCount(_channel); + + if (timeout > 0) { - throw new TimeoutException(); + if (Environment.TickCount >= timeout) + { + throw new TimeoutException(); + } } } - } - var toRead = available <= count ? available : count; + var toRead = available <= count ? available : count; - for (var i = 0; i < toRead; i++) - { - buffer[i + offset] = _controller.ReadByte(_channel); + for (var i = 0; i < toRead; i++) + { + buffer[i + offset] = _controller.ReadByte(_channel); + } + + return toRead; } + else + { + // IRQ fast read.... + ReadAllIrqFifo(); // Always read whatever is in the FIFO. + + // Read either the available or count, whichever is less, unless available is 0, in which case we wait until timeout + // Do we have to wait for some data? + while (_irqReadBuffer.Count == 0) + { + Thread.Sleep(10); + + ReadAllIrqFifo(); + if (_irqReadBuffer.Count > 0) break; - return toRead; + if (timeout > 0) + { + if (Environment.TickCount >= timeout) + { + throw new TimeoutException(); + } + } + } + + // Read the requested count bytes, or all available, whichever is less + var toRead = _irqReadBuffer.Count <= count ? _irqReadBuffer.Count : count; + for (var i = 0; i < toRead; i++) + { + buffer[i + offset] = _irqReadBuffer.Read(); + } + return toRead; + } } /// public byte[] ReadAll() { - var available = _controller.GetReadFifoCount(_channel); - var buffer = new byte[available]; - Read(buffer, 0, available); - return buffer; + if (_irqReadBuffer == null) + { + // The normal way... + var available = _controller.GetReadFifoCount(_channel); + var buffer = new byte[available]; + Read(buffer, 0, available); + return buffer; + } + else + { + // IRQ fast read.... + ReadAllIrqFifo(); // Always read whatever is in the FIFO. + var available = _irqReadBuffer.Count; + var buffer = new byte[available]; + for (int i = 0; i < available; i++) + { + buffer[i] = _irqReadBuffer.Read(); + } + return buffer; + } } /// public void ClearReceiveBuffer() { _controller.ResetReadFifo(_channel); + if (_irqReadBuffer != null) + _irqReadBuffer.Clear(); } /// public void Close() { IsOpen = false; + if (_irqReadBuffer != null) + _irqReadBuffer.Clear(); } /// diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Spi.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Spi.cs index 57c4d97eb0..01daa1b509 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Spi.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.Spi.cs @@ -34,8 +34,9 @@ public partial class Sc16is7x2 : ISpiPeripheral /// The chip-select port used for the peripheral /// The frequency of the oscillator connected to the SC16IS /// An optional interrupt port used to detect change conditions on the peripheral - public Sc16is7x2(ISpiBus spiBus, Frequency oscillatorFrequency, IDigitalOutputPort? chipSelect = null, IDigitalInterruptPort? irq = null) - : this(oscillatorFrequency, irq) + /// An interrupt triggered by a GPIO change, will remain until handled. State will also be kept. + public Sc16is7x2(ISpiBus spiBus, Frequency oscillatorFrequency, IDigitalOutputPort? chipSelect = null, IDigitalInterruptPort? irq = null, bool latchGpioInterrupt = false) + : this(oscillatorFrequency, irq, latchGpioInterrupt) { _spiComms = new SpiCommunications(spiBus, chipSelect, DefaultSpiBusSpeed); } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.cs index a7317365d4..593ab0e188 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/Sc16is7x2.cs @@ -1,14 +1,14 @@ - +using System; using Meadow.Hardware; using Meadow.Units; -using System; +using Meadow.Utilities; namespace Meadow.Foundation.ICs.IOExpanders { /// - /// Represents an Sc16is7x2 SPI/I2C UART + /// Represents an Sc16is7x2 SPI/I2C dual UART (with 8 GPIO's) /// - public abstract partial class Sc16is7x2 : ISerialController + public abstract partial class Sc16is7x2 : ISerialController, IDigitalInputOutputController { /// /// The port name for Port A @@ -24,11 +24,25 @@ public abstract partial class Sc16is7x2 : ISerialController private Sc16is7x2Channel? _channelB; private Frequency _oscillatorFrequency; private IDigitalInterruptPort? _irq; + private bool _latchGpioInterrupt; - internal Sc16is7x2(Frequency oscillatorFrequency, IDigitalInterruptPort? irq) + /// + /// 03.12.2023: Sc16is7x2 pin definitions for GPIO pins. + /// + public PinDefinitions Pins { get; } + + internal Sc16is7x2(Frequency oscillatorFrequency, IDigitalInterruptPort? irq, bool latchGpioInterrupt = false) { _oscillatorFrequency = oscillatorFrequency; _irq = irq; + _latchGpioInterrupt = latchGpioInterrupt; + + Pins = new PinDefinitions(this); + + if (irq != null) + { + irq.Changed += GpioInterruptHandler; + } } private IByteCommunications Comms @@ -49,27 +63,27 @@ private IByteCommunications Comms /// The data bits used in communication /// The parity used in communication /// The stop bits used in communication - /// The buffer read buffer size - public ISerialPort CreateSerialPort(SerialPortName portName, int baudRate = 9600, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One, int readBufferSize = 64) + /// The software FIFO read buffer size. (Not the 64 bytes on chip FIFO) + public ISerialPort CreateSerialPort(SerialPortName portName, int baudRate = 9600, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One, int readBufferSize = 1024) { - if (_irq != null && _irq.InterruptMode != InterruptMode.EdgeRising) - { - throw new ArgumentException("If an interrupt port is provided, it must be a rising edge interrupt"); - } + //if (_irq != null && _irq.InterruptMode != InterruptMode.EdgeRising) + //{ + // throw new ArgumentException("If an interrupt port is provided, it must be a rising edge interrupt"); + //} switch (portName.SystemName) { case "A": if (_channelA == null) { - _channelA = new Sc16is7x2Channel(this, portName.FriendlyName, Channels.A, baudRate, dataBits, parity, stopBits, irq: _irq); + _channelA = new Sc16is7x2Channel(this, portName.FriendlyName, Channels.A, baudRate, dataBits, parity, stopBits, irq: _irq, readBufferSize: readBufferSize); return _channelA; } throw new PortInUseException($"{portName.FriendlyName} already in use"); case "B": if (_channelB == null) { - _channelB = new Sc16is7x2Channel(this, portName.FriendlyName, Channels.B, baudRate, dataBits, parity, stopBits, irq: _irq); + _channelB = new Sc16is7x2Channel(this, portName.FriendlyName, Channels.B, baudRate, dataBits, parity, stopBits, irq: _irq, readBufferSize: readBufferSize); return _channelB; } throw new PortInUseException($"{portName.FriendlyName} already in use"); @@ -290,14 +304,457 @@ private byte ReadChannelRegister(Registers register, Channels channel) { // see page 40 of the data sheet for explanation of this var subaddress = (byte)(((byte)register << 3) | ((byte)channel << 1)); - return Comms.ReadRegister(subaddress); + byte v = Comms.ReadRegister(subaddress); + if (register == Registers.IOState) + { + //Resolver.Log.Info($"ReadChannelRegister: {register} {channel} {v:X2}"); + if (v == 0) + { + byte v2 = Comms.ReadRegister(subaddress); + if (v2 != v) + { + v = v2; // Fix buggy value! + Resolver.Log.Info($"ReadChannelRegister: {register} {channel} {v2:X2} (Corrected value!)"); + } + } + } + return v; } private void WriteChannelRegister(Registers register, Channels channel, byte value) { // see page 40 of the data sheet for explanation of this var subaddress = (byte)(((byte)register << 3) | ((byte)channel << 1)); + //if (register == Registers.IOState) + //{ + // Resolver.Log.Info($"WriteChannelRegister: {register} {channel} {value:X2}"); + //} Comms.WriteRegister(subaddress, value); } + + private void SetChannelRegisterBits(Registers register, Channels channel, byte value) + { + byte currentValue = ReadChannelRegister(register, channel); + currentValue |= value; // Set the bits we're going to change + WriteChannelRegister(register, channel, currentValue); + } + + private void ClearChannelRegisterBits(Registers register, Channels channel, byte mask) + { + byte currentValue = ReadChannelRegister(register, channel); + currentValue &= (byte)~mask; // Flip all bits in value, then AND with currentValue + WriteChannelRegister(register, channel, currentValue); + } + + + /********************* GPIO **********************/ + + private bool initDone = false; + private void InitGpio() + { + if (initDone) return; + + var a = ReadChannelRegister(Registers.IER, Channels.A); + a &= unchecked((byte)~RegisterBits.IER_SLEEP_MODE_ENABLE); + WriteChannelRegister(Registers.IER, Channels.A, a); + var b = ReadChannelRegister(Registers.IER, Channels.B); + b &= unchecked((byte)~RegisterBits.IER_SLEEP_MODE_ENABLE); + WriteChannelRegister(Registers.IER, Channels.B, b); + + byte ioControlBefore = ReadGpioRegister(Registers.IOControl); + if (_latchGpioInterrupt) + SetGpioRegisterBit(Registers.IOControl, RegisterBits.IOCTL_IO_LATCH); + else + ClearGpioRegisterBits(Registers.IOControl, RegisterBits.IOCTL_IO_LATCH); + ClearGpioRegisterBits(Registers.IOControl, RegisterBits.IOCTL_GPIO_7to4); + ClearGpioRegisterBits(Registers.IOControl, RegisterBits.IOCTL_GPIO_3to0); + byte ioControlAfter = ReadGpioRegister(Registers.IOControl); + //Resolver.Log.Info($"ioControl: {ioControlBefore} -> {ioControlAfter}"); + + // Set direction of all GPIO's to input + WriteGpioRegister(Registers.IODir, ioDir); + + initDone = true; + } + + int debugId = 0; + byte lastInputState = 0; + private void GpioInterruptHandler(object sender, DigitalPortResult e) + { + try + { + //lock(this) + { + //int id = debugId++; + //Resolver.Log.Info($"GpioInterruptHandler... {id}"); + + //// Prioritize reading the IRQ FIFO's + //if (_channelA?.IsOpen ?? false) + // _channelA.OnInterruptLineChanged(sender, e); + //if (_channelB?.IsOpen ?? false) + // _channelB.OnInterruptLineChanged(sender, e); + + byte iir = GetInterruptSource(); + + //Resolver.Log.Info($"HandleGpioInterrupt. Interrupt pin state: {e.Old?.State} {e.New.State} {e.New.Time.ToString("hh:mm:ss.fffffff")} {_irq?.State}"); + byte state = ReadGpioRegister(Registers.IOState); + byte dirMask = (byte)~ioDir; // Only look at the input pins + byte masked = (byte)(state & dirMask); + //Resolver.Log.Info($"State: {state:X2} {dirMask:X2} {masked:X2}"); + //Resolver.Log.Info($"LastState: {lastState} NewState: {state}"); + if (masked == lastInputState) return; + + byte diff = (byte)(masked ^ lastInputState); + //Resolver.Log.Info($"GPIO state: {lastState} -> {state}"); + for (byte i = 0; i < 8; i++) + { + if ((diff & (1 << i)) == 0) continue; // No change on this pin + if (gpioPorts[i] == null) continue; // No input port defined for this pin + if (gpioPorts[i] is DigitalInputPort port) + { + var newState = BitHelpers.GetBitValue(state, i); + port.Update(newState); + } + } + lastInputState = masked; + + //PrintAddressContent(); + //byte irqTest = ReadGpioRegister(Registers.IOIntEna); + //if (irqTest != irqEna) + //{ + // Resolver.Log.Info($"irqTest: {irqTest} irqEna: {irqEna}"); + // WriteGpioRegister(Registers.IOIntEna, irqEna); + //} + + //Resolver.Log.Info($"DONE. {id}"); + } + } + catch (Exception ex) + { + Resolver.Log.Info($"Error in GpioInterruptHandler: {ex.Message}"); + } + } + + /****************** INPUT PORTS ******************/ + + private IDigitalPort[] gpioPorts = new IDigitalPort[8]; + + /// + /// Create a digital input port on a SC16IS7x2 IO expander. + /// + /// The GPIO pin to use. + /// SC16IS7x2 GPIO's does not support pullup or pulldown on inputs. + /// + /// + public IDigitalInputPort CreateDigitalInputPort( + IPin pin, ResistorMode resistorMode = ResistorMode.Disabled) + { + InitGpio(); + + byte pinIndex = (byte)pin.Key; + if (gpioPorts[pinIndex] != null) + { + throw new Exception($"Port {pin.Name} already in use"); + } + + if (IsValidPin(pin)) + { + if (resistorMode != ResistorMode.Disabled) + { + throw new Exception("Only ResistorMode.Disabled is supported. The GPIO ports of SC16IS7x2 does not need/support external pull-up or pull-down resistors."); + } + + var state = ReadGpioRegister(Registers.IOState); + var initState = BitHelpers.GetBitValue(state, pinIndex); + var port = new DigitalInputPort(pin, initState); + gpioPorts[pinIndex] = port; + ConfigureInputPort(pin); + + byte inputMask = (byte)~ioDir; + lastInputState = (byte)(state & inputMask); + + return port; + } + throw new Exception("Pin is out of range"); + } + + byte irqEna = 0; + + /// + /// Configure the hardware port settings on the SC16IS7x2 + /// + /// The MCP pin associated with the port + /// Throw exception if pin is out of range + private void ConfigureInputPort(IPin pin) + { + if (IsValidPin(pin)) + { + byte bitIndex = (byte)pin.Key; + + // Set the port direction + PreValidatedSetPortDirection(pin, PortDirectionType.Input); + + if (_irq != null) + { + irqEna = BitHelpers.SetBit(irqEna, bitIndex, true); + SetGpioRegisterBit(Registers.IOIntEna, bitIndex); + } + else + { + ClearGpioRegisterBit(Registers.IOIntEna, bitIndex); + } + } + else + { + throw new Exception("Pin is out of range"); + } + } + + private byte ioDir = 0; // All GPIO's are inputs by default + + /// + /// Sets the direction of a port using pre-cached information. + /// This overload assumes the pin has been pre-verified as valid. + /// + private void PreValidatedSetPortDirection(IPin pin, PortDirectionType direction) + { + byte bitIndex = (byte)pin.Key; + // On SC16IS7x2, 0/false = input, 1/true = output) + byte newIoDir = BitHelpers.SetBit(ioDir, bitIndex, direction == PortDirectionType.Output); + if (newIoDir == ioDir) return; + + //Resolver.Log.Info($"newIoDir: {newIoDir}"); + WriteGpioRegister(Registers.IODir, newIoDir); + ioDir = newIoDir; + } + + /// + /// Sets the direction of a port + /// + /// The pin representing the port + /// The port direction (input or output) + public void SetPortDirection(IPin pin, PortDirectionType direction) + { + if (IsValidPin(pin)) + { + PreValidatedSetPortDirection(pin, direction); + } + else + { + throw new Exception("Pin is out of range"); + } + } + + /// + /// Gets the value of a particular port. + /// + /// + /// + public bool ReadPort(IPin pin) + { + if (!IsValidPin(pin)) + throw new Exception("Pin is out of range"); + + bool portDir = BitHelpers.GetBitValue(ioDir, (byte)pin.Key); + // On SC16IS7x2, 0/false = input, 1/true = output + if (portDir == true) + throw new Exception($"Cant read from port {pin.Name}. It is not configured as input"); + + var gpio = ReadGpioRegister(Registers.IOState); + + // Return the value on that port + return BitHelpers.GetBitValue(gpio, (byte)pin.Key); + } + + + /***************** OUTPUT PORTS ******************/ + + /// + /// Create a digital output port on a SC16IS7x2 IO expander. + /// + /// The GPIO pin to use. + /// Initial state. Either true or false. + /// Always push/pull on SC16IS7x2. + /// + /// + public IDigitalOutputPort CreateDigitalOutputPort(IPin pin, bool initialState = false, OutputType outputType = OutputType.PushPull) + { + InitGpio(); + + byte pinIndex = (byte)pin.Key; + if (gpioPorts[pinIndex] != null) + { + throw new Exception($"Port {pin.Name} already in use"); + } + + if (outputType != OutputType.PushPull) + { + throw new NotImplementedException("Only OutputType.PushPull is supported on SC16IS7x2"); + } + + ConfigureOutputPort(pin, initialState); + var port = new Sc16is7x2.DigitalOutputPort(pin, initialState, outputType); + byte bitIndex = (byte)pin.Key; + port.SetPinState += (_pin, state) => WriteToGpioPort(pin, state); + gpioPorts[pinIndex] = port; + + return port; + } + + private void ConfigureOutputPort(IPin pin, bool initialState) + { + if (IsValidPin(pin)) + { + // Set the port direction + PreValidatedSetPortDirection(pin, PortDirectionType.Output); + WriteToGpioPort(pin, initialState); + } + else + { + throw new Exception("Pin is out of range"); + } + } + + /// + /// Sets a particular pin's value. If that pin is not + /// in output mode, this method will first set its + /// mode to output. + /// + /// This overload takes in cached details that are assumed + /// to be accurate for better performance. + /// + private void WriteToGpioPort(IPin pin, bool value) + { + byte bitIndex = (byte)pin.Key; + if (value) + SetGpioRegisterBit(Registers.IOState, bitIndex); + else + ClearGpioRegisterBit(Registers.IOState, bitIndex); + } + + /*********** INPUT/OUTPUT PORT HELPERS ***********/ + + /// + /// Get the Interrupt Identification Register (IIR) value. + /// + /// + public byte GetInterruptSource() + { + byte iir = ReadGpioRegister(Registers.IIR); + iir &= RegisterBits.IIR_Id0 + + RegisterBits.IIR_Id1 + + RegisterBits.IIR_Id2 + + RegisterBits.IIR_Id3 + + RegisterBits.IIR_Id4 + + RegisterBits.IIR_Id5; + return iir; + } + + /// + /// Get the interrupt source type from the IIR register value. (Interrupt Identification Register) + /// Ref. page 14 and 24 in datasheet. Mostly for debugging. + /// Not sure if multiple sources can be active at the same time. If so, this will need to be modified. + /// + /// The IIR register value. (Interrupt Identification Register) + /// + public InterruptSourceType GetInterruptSourceType(byte iir) + { + iir &= (RegisterBits.IIR_Id0 + + RegisterBits.IIR_Id1 + + RegisterBits.IIR_Id2 + + RegisterBits.IIR_Id3 + + RegisterBits.IIR_Id4 + + RegisterBits.IIR_Id5); + if (iir == RegisterBits.IIR_IdNone) return InterruptSourceType.None; + if (iir == RegisterBits.IIR_IdReceiverLineStatus) return InterruptSourceType.ReceiverLineStatus; + if (iir == RegisterBits.IIR_IdRxTimeout) return InterruptSourceType.RxTimeout; + if (iir == RegisterBits.IIR_IdRHR) return InterruptSourceType.RHR; + if (iir == RegisterBits.IIR_IdTHR) return InterruptSourceType.THR; + if (iir == RegisterBits.IIR_IdModemStatus) return InterruptSourceType.ModemStatus; + if (iir == RegisterBits.IIR_IdGpioPins) return InterruptSourceType.GpioPins; + if (iir == RegisterBits.IIR_IdXoff) return InterruptSourceType.Xoff; + if (iir == RegisterBits.IIR_IdCtsRts) return InterruptSourceType.CtsRts; + Resolver.Log.Info($"UNKNOWN INTERRUPT SOURCE (or combination): {iir}"); + return InterruptSourceType.Unknown; + } + + /// + /// Is the pin valid for this device instance + /// + /// The IPin to validate + /// True if pin is valid + protected bool IsValidPin(IPin pin) => Pins.AllPins.Contains(pin); + + private byte ReadGpioRegister(Registers register) + { + return ReadChannelRegister(register, Channels.Both); + } + + private void WriteGpioRegister(Registers register, byte value) + { + WriteChannelRegister(register, Channels.Both, value); + } + + private void SetGpioRegisterBits(Registers register, byte value) + { + SetChannelRegisterBits(register, Channels.Both, value); + } + + private void ClearGpioRegisterBits(Registers register, byte mask) + { + ClearChannelRegisterBits(register, Channels.Both, mask); + } + + private void SetGpioRegisterBit(Registers register, int bitIndex) + { + SetChannelRegisterBit(register, Channels.Both, bitIndex); + } + + private void SetChannelRegisterBit(Registers register, Channels channel, int bitIndex) + { + if (bitIndex > 7 || bitIndex < 0) { throw new ArgumentOutOfRangeException(); } + + var oldValue = ReadChannelRegister(register, channel); + byte newValue = (byte)(oldValue | ((byte)(1 << bitIndex))); + WriteChannelRegister(register, channel, newValue); + } + + private void ClearGpioRegisterBit(Registers register, int bitIndex) + { + ClearChannelRegisterBit(register, Channels.Both, bitIndex); + } + + private void ClearChannelRegisterBit(Registers register, Channels channel, int bitIndex) + { + if (bitIndex > 7 || bitIndex < 0) { throw new ArgumentOutOfRangeException(); } + var oldValue = ReadChannelRegister(register, channel); + var newValue = (byte)(oldValue & ((byte)~(1 << bitIndex))); + WriteChannelRegister(register, channel, newValue); + //var check = ReadChannelRegister(register, channel); + //Resolver.Log.Info($"ClearChannelRegisterBit: Old={oldValue} New={newValue} Check={check}"); + } + + /// + /// Print the content of the address space for debugging purposes. + /// + public void PrintAddressContent() + { + Resolver.Log.Info($"Register: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F"); + string a = $"Channel A: "; + for (int r = 0; r < 16; r++) + a += $"{ReadChannelRegister((Registers)r, Channels.A):X2} "; + Resolver.Log.Info(a); + string b = $"Channel B: "; + for (int r = 0; r < 16; r++) + b += $"{ReadChannelRegister((Registers)r, Channels.B):X2} "; + Resolver.Log.Info(b); + } + + public string ByteToBinaryString(byte b) + { + // Format the byte as a binary string and pad it with zeroes + string binaryString = $"0b{Convert.ToString(b, 2).PadLeft(8, '0')}"; + return binaryString; + } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup1.jpg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup1.jpg new file mode 100644 index 0000000000..566d31246d Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup1.jpg differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup10.jpg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup10.jpg new file mode 100644 index 0000000000..0a5f705b6f Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup10.jpg differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup2.jpg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup2.jpg new file mode 100644 index 0000000000..129533a4bc Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup2.jpg differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup3.jpg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup3.jpg new file mode 100644 index 0000000000..ce92d14130 Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup3.jpg differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup4.jpg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup4.jpg new file mode 100644 index 0000000000..e8201af83f Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup4.jpg differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup5.jpg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup5.jpg new file mode 100644 index 0000000000..572e9cbc19 Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup5.jpg differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup6.jpg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup6.jpg new file mode 100644 index 0000000000..e53c9b9cfa Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup6.jpg differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup7.jpg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup7.jpg new file mode 100644 index 0000000000..62b5a86b57 Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup7.jpg differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup8.jpg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup8.jpg new file mode 100644 index 0000000000..00947ace4d Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup8.jpg differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup9.jpg b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup9.jpg new file mode 100644 index 0000000000..cda6a67bed Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/BreadboardSetup9.jpg differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart.sln b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart.sln new file mode 100644 index 0000000000..3173fb7107 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart.sln @@ -0,0 +1,65 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34723.18 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InterruptDrivenUart", "InterruptDrivenUart\InterruptDrivenUart.csproj", "{65AE7AD0-E9E1-44BB-A2AC-61F1D9A40737}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Sc16is7x2", "..\..\Driver\ICs.IOExpanders.Sc16is7x2.csproj", "{C33FA668-EC3D-4F6F-8ACF-0606A7F64AEB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Foundation.Core", "..\..\..\..\Meadow.Foundation.Core\Meadow.Foundation.Core.csproj", "{76845A42-388B-4279-B763-584D743B621E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Contracts", "..\..\..\..\..\..\Meadow.Contracts\Source\Meadow.Contracts\Meadow.Contracts.csproj", "{3C7EABE0-07E1-4697-88E1-3F0A626E6D20}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Logging", "..\..\..\..\..\..\Meadow.Logging\Source\Meadow.Logging\lib\Meadow.Logging.csproj", "{6A68E331-C200-48EB-BC8A-10FA08703453}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Units", "..\..\..\..\..\..\Meadow.Units\Source\Meadow.Units\Meadow.Units.csproj", "{8CD28F85-231A-4B4A-92FF-255E0DF750D2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {65AE7AD0-E9E1-44BB-A2AC-61F1D9A40737}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {65AE7AD0-E9E1-44BB-A2AC-61F1D9A40737}.Debug|Any CPU.Build.0 = Debug|Any CPU + {65AE7AD0-E9E1-44BB-A2AC-61F1D9A40737}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {65AE7AD0-E9E1-44BB-A2AC-61F1D9A40737}.Release|Any CPU.ActiveCfg = Release|Any CPU + {65AE7AD0-E9E1-44BB-A2AC-61F1D9A40737}.Release|Any CPU.Build.0 = Release|Any CPU + {65AE7AD0-E9E1-44BB-A2AC-61F1D9A40737}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C33FA668-EC3D-4F6F-8ACF-0606A7F64AEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C33FA668-EC3D-4F6F-8ACF-0606A7F64AEB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C33FA668-EC3D-4F6F-8ACF-0606A7F64AEB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C33FA668-EC3D-4F6F-8ACF-0606A7F64AEB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C33FA668-EC3D-4F6F-8ACF-0606A7F64AEB}.Release|Any CPU.Build.0 = Release|Any CPU + {C33FA668-EC3D-4F6F-8ACF-0606A7F64AEB}.Release|Any CPU.Deploy.0 = Release|Any CPU + {76845A42-388B-4279-B763-584D743B621E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76845A42-388B-4279-B763-584D743B621E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76845A42-388B-4279-B763-584D743B621E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {76845A42-388B-4279-B763-584D743B621E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76845A42-388B-4279-B763-584D743B621E}.Release|Any CPU.Build.0 = Release|Any CPU + {76845A42-388B-4279-B763-584D743B621E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3C7EABE0-07E1-4697-88E1-3F0A626E6D20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3C7EABE0-07E1-4697-88E1-3F0A626E6D20}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C7EABE0-07E1-4697-88E1-3F0A626E6D20}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3C7EABE0-07E1-4697-88E1-3F0A626E6D20}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3C7EABE0-07E1-4697-88E1-3F0A626E6D20}.Release|Any CPU.Build.0 = Release|Any CPU + {3C7EABE0-07E1-4697-88E1-3F0A626E6D20}.Release|Any CPU.Deploy.0 = Release|Any CPU + {6A68E331-C200-48EB-BC8A-10FA08703453}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A68E331-C200-48EB-BC8A-10FA08703453}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A68E331-C200-48EB-BC8A-10FA08703453}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A68E331-C200-48EB-BC8A-10FA08703453}.Release|Any CPU.Build.0 = Release|Any CPU + {8CD28F85-231A-4B4A-92FF-255E0DF750D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8CD28F85-231A-4B4A-92FF-255E0DF750D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8CD28F85-231A-4B4A-92FF-255E0DF750D2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {8CD28F85-231A-4B4A-92FF-255E0DF750D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8CD28F85-231A-4B4A-92FF-255E0DF750D2}.Release|Any CPU.Build.0 = Release|Any CPU + {8CD28F85-231A-4B4A-92FF-255E0DF750D2}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6B9B6361-5867-45DF-9E6A-72834F5788E3} + EndGlobalSection +EndGlobal diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/.vscode/launch.json b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/.vscode/launch.json new file mode 100644 index 0000000000..7418146b7f --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Deploy", + "type": "meadow", + "request": "launch", + "preLaunchTask": "meadow: Build" + } + ] +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/InterruptDrivenUart.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/InterruptDrivenUart.csproj new file mode 100644 index 0000000000..369718eaf4 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/InterruptDrivenUart.csproj @@ -0,0 +1,26 @@ + + + netstandard2.1 + true + Library + App + + + + + + + + Always + + + Always + + + Always + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/MeadowApp.cs new file mode 100644 index 0000000000..73a4b83148 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/MeadowApp.cs @@ -0,0 +1,174 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.ICs.IOExpanders; +using Meadow.Hardware; +using System; +using System.Text; +using System.Threading.Tasks; + +#nullable enable + +namespace ICs.IOExpanders.Sc16is752_Sample +{ + public class MeadowApp : App + { + private Sc16is752? _expander = null; + private ISerialPort? _sc16is7x2Port = null; + private IDigitalInterruptPort? _sharedIrqPort = null; + + // LONG MESSAGE TESTS (using extra IRQ driven buffer): + // The following speed tests have been performed with Meadow v2.d and OS v1.10.0: + // Test data sent from a second Meadow running the SerialTestGenerator app. + // NB! These tests are using VERY LONG messages. (300 bytes) You may achieve much higher speeds with + // short messages only. (<=64 bytes, the size of the SC16IS7x2 FIFO buffer) + // Continous reading driven by IRQ works, but NOT the FIRST time the callback is invoked. + // Probably because of this: https://github.com/WildernessLabs/Meadow_Issues/issues/74 + private const int Rate = 9600; // Continous IRQ read works, but I2C bus speed must be <= 1MHz (FastPlus). + //private const int Rate = 19200; // Continous IRQ read works, but I2C bus speed must be 400KHz (Fast) or 1MHz (FastPlus). + //private const int Rate = 38400; // Continous IRQ read DOES NOT WORK(!), regardless of I2C bus speed. + //private const int Rate = 57600; // Continous IRQ read DOES NOT WORK(!), regardless of I2C bus speed. + + private const I2cBusSpeed I2cSpeed = I2cBusSpeed.Standard; + + // Some GPIO tests, too. GPIO0-3 are output pins. GPIO4-7 are input pins. + // Connect pin 0 to 4, 1 to 5, 2 to 6, 3 to 7. + private Sc16is7x2.DigitalOutputPort?[] _expOutputs = new Sc16is7x2.DigitalOutputPort[4]; + + public override async Task Initialize() + { + // NOTE: This sample connects PortA on the expander back to COM1 on the F7Feather + Resolver.Log.Info("Initialize..."); + + var address = Sc16is7x2.Addresses.Address_0x48; // Set A0 ans A1 to 3.3V to get this address. + try + { + _sharedIrqPort = Device.CreateDigitalInterruptPort(Device.Pins.D00, InterruptMode.EdgeFalling, ResistorMode.Disabled); + + var i2c = Device.CreateI2cBus(I2cSpeed); + var frequency = new Meadow.Units.Frequency(1.8432, Meadow.Units.Frequency.UnitType.Megahertz); + _expander = new Sc16is752(i2c, frequency, address, _sharedIrqPort); + _sc16is7x2Port = _expander.PortA.CreateSerialPort(Rate, readBufferSize: 8192); + + var outPins = new IPin[] { _expander.Pins.GP0, _expander.Pins.GP1, _expander.Pins.GP2, _expander.Pins.GP3 }; + var inPins = new IPin[] { _expander.Pins.GP4, _expander.Pins.GP5, _expander.Pins.GP6, _expander.Pins.GP7 }; + for(int i = 0; i < 4; i++) + { + _expOutputs[i] = _expander.CreateDigitalOutputPort(outPins[i], false, OutputType.PushPull) as Sc16is7x2.DigitalOutputPort; + var inPort = _expander.CreateDigitalInputPort(inPins[i]) as Sc16is7x2.DigitalInputPort; + inPort!.StateChanged += (s, e) => + { + Resolver.Log.Info($"---> StateChanged {inPort.Pin.Name}: {e.OldState} -> {e.NewState}"); + }; + } + + // We (this main program) can also handle the IRQ's, but should we should be last in the queue. + _sharedIrqPort.Changed += (s, e) => + { + string oldValue = e.Old != null ? e.Old.Value.State.ToString() : "None"; + //Resolver.Log.Info($"---> IRQ: {oldValue} -> {e.New.State}"); + //if (e.New.State == false) Resolver.Log.Info($"---> IRQ. Main app can also subscribe."); + }; + } + catch (Exception ex) + { + Resolver.Log.Error($"Failed to initialize 0x{(byte)address:X2}: {ex.Message}"); + await Task.Delay(1000); + } + } + + string _irqReceiveText = string.Empty; + string _sc16is7x2Name = "SC16IS752"; + + public async override Task Run() + { + if (_expander == null || _sc16is7x2Port == null) + return; + + // Test IRQ callbacks for serial port. This will called AFTER the driver has read the data. + _sc16is7x2Port.DataReceived += (s, e) => + { + var bytes = _sc16is7x2Port.ReadAll(); + _irqReceiveText += Encoding.ASCII.GetString(bytes); + // Disabling this. It may be too slow inside an interrupt handler... + //Resolver.Log.Info($" ---> {_sc16is7x2Name} port read: irqReceiveText={NiceMsg(_irqReceiveText)} [{_sc16is7x2Name} IRQ callback is working!]"); + }; + _sc16is7x2Port.BufferOverrun += (s, e) => + { + Resolver.Log.Error($" ---> {_sc16is7x2Name} buffer overrun!"); + }; + + Resolver.Log.Info($"Opening port {_sc16is7x2Name}..."); + _sc16is7x2Port.Open(); + + for (int i = 0; i < 100; i++) + { + // Test receiving message + await Receive(_sc16is7x2Name, _sc16is7x2Port); + } + + Resolver.Log.Info($"ALL DONE."); + while (true) + { + await Task.Delay(1000); + } + } + + /// + /// The RX/TX FIFO's on SC16IS7x2 are 64 bytes each. So, we can read max 64 bytes at once. + /// KW: I'm trying to implement support for reading more than 64 bytes, but this requires IRQ callback to work. + /// + /// + /// + /// + /// + /// + private async Task Receive( + //string senderName, ISerialPort senderPort, + string receiverName, ISerialPort receiverPort) + { + try + { + _irqReceiveText = string.Empty; // Clear the IRQ receive buffer. + + // Wait for possible IRQ callback's to receive data. + Resolver.Log.Info($"Waiting for IRQ initiated external messages (and changing some GPIO's)..."); + + for (int i = 0; i < 4; i++) + { + bool newState = !_expOutputs[i]!.State; // NB! The two !'s have quite different meaning. + Resolver.Log.Info($"*** Setting output {_expOutputs[i]!.Pin.Name} to {newState} ***"); + _expOutputs[i]!.State = newState; + await Task.Delay(4000); + } + + if (_irqReceiveText.Length > 0) + { + Resolver.Log.Info($"Received {_irqReceiveText.Length} bytes on {receiverName} using IRQ callback: {NiceMsg(_irqReceiveText)}"); + } + + // Read any left over bytes. (Text received without IRQ callback) + var leftOvers = receiverPort.ReadAll(); + if (leftOvers.Length == 0) + { + Resolver.Log.Info("No left over bytes! :-)"); + } + else + { + string leftOverText = Encoding.ASCII.GetString(leftOvers); + Resolver.Log.Info($"Read {leftOvers.Length} left over bytes on {receiverName} WITHOUT IRQ callback: {NiceMsg(leftOverText)}"); + } + + Resolver.Log.Info($"Done."); + } + catch (Exception ex) + { + Resolver.Log.Error($"Test error: {ex.Message}"); + } + } + + private string NiceMsg(string message) + { + return $"\"{message.Replace("\n", "\\n")}\""; + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/app.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/app.config.yaml new file mode 100644 index 0000000000..26f9a96116 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/app.config.yaml @@ -0,0 +1,36 @@ +# Uncomment additional options as needed. +# To learn more about these config options, including custom application configuration settings, check out the Application Settings Configuration documentation. +# http://developer.wildernesslabs.co/Meadow/Meadow.OS/Configuration/Application_Settings_Configuration/ + +# App lifecycle configuration. +Lifecycle: + + # Control whether Meadow will restart when an unhandled app exception occurs. Combine with Lifecycle > AppFailureRestartDelaySeconds to control restart timing. + RestartOnAppFailure: false + + # When app set to restart automatically on app failure, +# AppFailureRestartDelaySeconds: 15 + +# Logging configuration. +Logging: + + # Adjust the level of logging detail. + LogLevel: + + # Trace, Debug, Information, Warning, or Error + Default: Information + +# Meadow.Cloud configuration. +MeadowCloud: + + # Enable Logging, Events, Command + Control +# Enabled: false + + # Enable Over-the-air Updates +# EnableUpdates: false + + # Enable Health Metrics +# EnableHealthMetrics: false + + # How often to send metrics to Meadow.Cloud +# HealthMetricsIntervalMinutes: 60 \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/meadow.config.yaml new file mode 100644 index 0000000000..a5c6f825e7 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/meadow.config.yaml @@ -0,0 +1,62 @@ +# Acceptable values for true: true, 1, yes +# Acceptable values for false: false, 0, no + +# Main Device Config +Device: + + # Name of the device on the network. + Name: MeadowDevice + + # Uncomment if SD card hardware present on this hardware + # (e.g., Core-Compute module with SD add-on)? Optional; default value is `false`. +# SdStorageSupported: true + +# Control how the ESP coprocessor will start and operate. +Coprocessor: + + # Should the ESP32 automatically attempt to connect to an access point at startup? + # If set to true, wifi.yaml credentials must be stored in the device. +# AutomaticallyStartNetwork: true + + # Should the ESP32 automatically reconnect to the configured access point? +# AutomaticallyReconnect: true + + # Maximum number of retry attempts for connections etc. before an error code is returned. +# MaximumRetryCount: 7 + +# Network configuration. +Network: + + # Network Interface (Default value is WiFi with DHCP) +# Interfaces: +# - Name: Ethernet +# UseDHCP: false +# IPAddress: 192.168.1.60 +# NetMask: 255.255.255.0 +# Gateway: 192.168.1.254 +# - Name: WiFi +# UseDHCP: true +# IPAddress: +# NetMask: +# Gateway: + + # Default Interface +# DefaultInterface: Wifi + + # Automatically attempt to get the time at startup? +# GetNetworkTimeAtStartup: true + + # Time synchronization period in seconds. +# NtpRefreshPeriod: 600 + + # Name of the NTP servers. +# NtpServers: +# - 0.pool.ntp.org +# - 1.pool.ntp.org +# - 2.pool.ntp.org +# - 3.pool.ntp.org + + # IP addresses of the DNS servers. +# DnsServers: +# - 1.1.1.1 +# - 8.8.8.8 \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/wifi.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/wifi.config.yaml new file mode 100644 index 0000000000..13adcf19cf --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/InterruptDrivenUart/wifi.config.yaml @@ -0,0 +1,12 @@ +# Uncomment to set the default Wi-Fi credentials. (This file will be processed into secure storage on the ESP32 and then deleted from the device.) +# To learn more about these config options, including custom application configuration settings, check out the Application Settings Configuration documentation. +# http://developer.wildernesslabs.co/Meadow/Meadow.OS/Configuration/WiFi_Configuration/ + +# WiFi network credentials +Credentials: + + # WiFi SSID +# Ssid: YourSSID + + # WiFi Password +# Password: SSIDPassword \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/ReadMe.txt b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/ReadMe.txt new file mode 100644 index 0000000000..2039b61a9f --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/ReadMe.txt @@ -0,0 +1,59 @@ +This project tests reading data from the SC16IS7x2 UART using the interrupt signal from SC16IS7x2. +The UART channel A is tested by using a second Meadow running the "SerialTestGenerator" test project. +The GPIO's are also tested by configuring GP0-3 as output and GP4-7 as input. + +Requirements: + - TWO Meadow devices (during driver development it's nice to separate sender and receiver) + - An SC16IS7x2 breakout + - A push button + - A 1K ohm resistor + +Hookup: + - The "first" Meadow running the "InterruptDrivenUart" project. + The SC16IS7x2 is connected like this (breakout board pin -> Meadow pin): + VCC -> 3.3V + GND -> GND + SCL -> CLK (D8) with a 4.7K ohm pull-up to 3.3V. (Picture may show 1K) + SDA -> DAT (D7) with a 4.7K ohm pull-up to 3.3V. (Picture may show 1K) + A0 -> 3.3V + A1 -> 3.3V + IRQ -> D0 with a 1K ohm pull-up to 3.3V + GP0 -> GP4 (Configured as output -> input) + GP1 -> GP5 (Configured as output -> input) + GP2 -> GP6 (Configured as output -> input) + GP3 -> GP7 (Configured as output -> input) + + - The "second" Meadow running the "SerialTestGenerator" project to generate messages: + A push button should be connected between 3.3V and the D0 GIPO. + The Meadow COM1 TX (D12) should be connected to the SC16IS7x2 PortA RX pin. + The Meadow COM1 RX (D13) should be connected to the SC16IS7x2 PortA TX pin. + +While testing, it is the output from the "first" Meadow ("InterruptDrivenUart") that is most interesting. +You can connect the 3.3V and GND of the two Meadows together, so that the SerialTestGenerator app +on the "second" Meadow is always running. +A long button press will generate a message of 24 bytes. ("Meadow calling! Wakeup!\n") +A short button press will generate a message of 300 bytes. + +The "first" Meadow will set up SC16IS7x2 to listen for UART messages using IRQ, then execute this loop: + - Wait for 15 seconds. + - Write the texts received by the DataReceived event handler. + - Check for any left over data in the FIFO buffers. Both the hardware and software buffers. + If the IRQ handler has left any data in the buffers, that would indicate a problem with the IRQ signal. + +NB! The first time you send a message to the SC16IS7x2 after a reboot, you will probably get a buffer overrun error + if the message is long (300 bytes). This happens because the HW FIFO is only 64 bytes, and the Meadow uses a very + long time to route the first interrupt call to the SC16IS7x2 driver. + I think this is the reason: https://github.com/WildernessLabs/Meadow_Issues/issues/74 + However, any following messages are handled fine. + Also, if the first message is short, it will work fine because it will fit inside the 64 byte HW FIFO. + +NB2! I you keep pressing the button quite often during the test, you might get a message like this in the output: + "ReadChannelRegister: IOState A CC (Corrected value!)" + This can happen when the GPIO's are changing while the UART is kept busy. For some reason when reading IOState + the result may be 0 even though it clearly shouldn't be. I have put in a correction mechanism in the + Sc16is7x2.ReadChannelRegister method to correct this special case. (If address is IOState and result is 0, + we're reading it again. If the new result is different from 0 we use that instead and print a warning) + +I hope this will be useful to someone. +Have fun! +Kaare Wehn diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/Test.fzz b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/Test.fzz new file mode 100644 index 0000000000..d262477794 Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDrivenUart/Test.fzz differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator.sln b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator.sln new file mode 100644 index 0000000000..b20383c34b --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator.sln @@ -0,0 +1,27 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34723.18 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SerialTestGenerator", "SerialTestGenerator\SerialTestGenerator.csproj", "{F870446D-BA8B-43A5-ADAB-FE42439335E0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F870446D-BA8B-43A5-ADAB-FE42439335E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F870446D-BA8B-43A5-ADAB-FE42439335E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F870446D-BA8B-43A5-ADAB-FE42439335E0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F870446D-BA8B-43A5-ADAB-FE42439335E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F870446D-BA8B-43A5-ADAB-FE42439335E0}.Release|Any CPU.Build.0 = Release|Any CPU + {F870446D-BA8B-43A5-ADAB-FE42439335E0}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C8DC4492-1C91-4562-844D-6916B6C206CD} + EndGlobalSection +EndGlobal diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/.vscode/launch.json b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/.vscode/launch.json new file mode 100644 index 0000000000..7418146b7f --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Deploy", + "type": "meadow", + "request": "launch", + "preLaunchTask": "meadow: Build" + } + ] +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/MeadowApp.cs new file mode 100644 index 0000000000..7ed8b81731 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/MeadowApp.cs @@ -0,0 +1,103 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Leds; +using Meadow.Foundation.Sensors.Buttons; +using Meadow.Hardware; +using Meadow.Peripherals.Leds; +using System; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Sc16is7x2_SerialTestGen +{ + public class MeadowApp : App + { + RgbPwmLed onboardLed; + + PushButton _pushButton; + ISerialPort? _com1Port = null; + const int Rate = 9600; // OK + //const int Rate = 19200; // OK + //const int Rate = 38400; // Too high for the Meadow/SC16IS752 + //const int Rate = 57600; // Too high for the Meadow/SC16IS752 + + public override Task Initialize() + { + Resolver.Log.Info("Initialize..."); + + _com1Port = Device.PlatformOS.GetSerialPortName("COM1")?.CreateSerialPort(Rate); + _com1Port.Open(); + + // Initialize by sending Device and Pins + _pushButton = new PushButton(Device.Pins.D00, ResistorMode.InternalPullDown); + _pushButton.LongClicked += (s, e) => + { + Resolver.Log.Info("LongClicked"); + string sendText = "Meadow calling! Wakeup!\n"; + var sendBytes = Encoding.ASCII.GetBytes(sendText); + Resolver.Log.Info($"Writing {sendBytes.Length} bytes on port COM1: {NiceMsg(sendText)}"); + _com1Port.Write(sendBytes); + }; + _pushButton.Clicked += (s, e) => + { + Resolver.Log.Info("Clicked"); + // Send long message. (300 characters) Much larger than the FIFO buffer in SC16IS7x2. + string sendText = + "Meadow calling! aaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg hhhhhhhhh iiiiiiiii " + + "000000000 111111111 222222222 333333333 444444444 555555555 666666666 777777777 888888888 999999999 " + + "qqqqqqqqq rrrrrrrrr sssssssss ttttttttt uuuuuuuuu vvvvvvvvv wwwwwwwww xxxxxxxxx yyyyyyyyy zzzzzzzzz\n"; + var sendBytes = Encoding.ASCII.GetBytes(sendText); + Resolver.Log.Info($"Writing {sendBytes.Length} bytes on port COM1: {NiceMsg(sendText)}"); + _com1Port.Write(sendBytes); + }; + + onboardLed = new RgbPwmLed( + redPwmPin: Device.Pins.OnboardLedRed, + greenPwmPin: Device.Pins.OnboardLedGreen, + bluePwmPin: Device.Pins.OnboardLedBlue, + CommonType.CommonAnode); + + return base.Initialize(); + } + + public override Task Run() + { + Resolver.Log.Info("Run..."); + + return CycleColors(TimeSpan.FromMilliseconds(1000)); + } + + private string NiceMsg(string message) + { + return $"\"{message.Replace("\n", "\\n")}\""; + } + + async Task CycleColors(TimeSpan duration) + { + Resolver.Log.Info("Cycle colors..."); + + while (true) + { + await ShowColorPulse(Color.Blue, duration); + await ShowColorPulse(Color.Cyan, duration); + await ShowColorPulse(Color.Green, duration); + await ShowColorPulse(Color.GreenYellow, duration); + await ShowColorPulse(Color.Yellow, duration); + await ShowColorPulse(Color.Orange, duration); + await ShowColorPulse(Color.OrangeRed, duration); + await ShowColorPulse(Color.Red, duration); + await ShowColorPulse(Color.MediumVioletRed, duration); + await ShowColorPulse(Color.Purple, duration); + await ShowColorPulse(Color.Magenta, duration); + await ShowColorPulse(Color.Pink, duration); + } + } + + async Task ShowColorPulse(Color color, TimeSpan duration) + { + await onboardLed.StartPulse(color, duration / 2); + await Task.Delay(duration); + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/SerialTestGenerator.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/SerialTestGenerator.csproj new file mode 100644 index 0000000000..310b42d473 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/SerialTestGenerator.csproj @@ -0,0 +1,23 @@ + + + netstandard2.1 + true + Library + App + + + + + + + + Always + + + Always + + + Always + + + \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/app.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/app.config.yaml new file mode 100644 index 0000000000..26f9a96116 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/app.config.yaml @@ -0,0 +1,36 @@ +# Uncomment additional options as needed. +# To learn more about these config options, including custom application configuration settings, check out the Application Settings Configuration documentation. +# http://developer.wildernesslabs.co/Meadow/Meadow.OS/Configuration/Application_Settings_Configuration/ + +# App lifecycle configuration. +Lifecycle: + + # Control whether Meadow will restart when an unhandled app exception occurs. Combine with Lifecycle > AppFailureRestartDelaySeconds to control restart timing. + RestartOnAppFailure: false + + # When app set to restart automatically on app failure, +# AppFailureRestartDelaySeconds: 15 + +# Logging configuration. +Logging: + + # Adjust the level of logging detail. + LogLevel: + + # Trace, Debug, Information, Warning, or Error + Default: Information + +# Meadow.Cloud configuration. +MeadowCloud: + + # Enable Logging, Events, Command + Control +# Enabled: false + + # Enable Over-the-air Updates +# EnableUpdates: false + + # Enable Health Metrics +# EnableHealthMetrics: false + + # How often to send metrics to Meadow.Cloud +# HealthMetricsIntervalMinutes: 60 \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/meadow.config.yaml new file mode 100644 index 0000000000..a5c6f825e7 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/meadow.config.yaml @@ -0,0 +1,62 @@ +# Acceptable values for true: true, 1, yes +# Acceptable values for false: false, 0, no + +# Main Device Config +Device: + + # Name of the device on the network. + Name: MeadowDevice + + # Uncomment if SD card hardware present on this hardware + # (e.g., Core-Compute module with SD add-on)? Optional; default value is `false`. +# SdStorageSupported: true + +# Control how the ESP coprocessor will start and operate. +Coprocessor: + + # Should the ESP32 automatically attempt to connect to an access point at startup? + # If set to true, wifi.yaml credentials must be stored in the device. +# AutomaticallyStartNetwork: true + + # Should the ESP32 automatically reconnect to the configured access point? +# AutomaticallyReconnect: true + + # Maximum number of retry attempts for connections etc. before an error code is returned. +# MaximumRetryCount: 7 + +# Network configuration. +Network: + + # Network Interface (Default value is WiFi with DHCP) +# Interfaces: +# - Name: Ethernet +# UseDHCP: false +# IPAddress: 192.168.1.60 +# NetMask: 255.255.255.0 +# Gateway: 192.168.1.254 +# - Name: WiFi +# UseDHCP: true +# IPAddress: +# NetMask: +# Gateway: + + # Default Interface +# DefaultInterface: Wifi + + # Automatically attempt to get the time at startup? +# GetNetworkTimeAtStartup: true + + # Time synchronization period in seconds. +# NtpRefreshPeriod: 600 + + # Name of the NTP servers. +# NtpServers: +# - 0.pool.ntp.org +# - 1.pool.ntp.org +# - 2.pool.ntp.org +# - 3.pool.ntp.org + + # IP addresses of the DNS servers. +# DnsServers: +# - 1.1.1.1 +# - 8.8.8.8 \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/wifi.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/wifi.config.yaml new file mode 100644 index 0000000000..13adcf19cf --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/InterruptDriverUart_TestGen/SerialTestGenerator/wifi.config.yaml @@ -0,0 +1,12 @@ +# Uncomment to set the default Wi-Fi credentials. (This file will be processed into secure storage on the ESP32 and then deleted from the device.) +# To learn more about these config options, including custom application configuration settings, check out the Application Settings Configuration documentation. +# http://developer.wildernesslabs.co/Meadow/Meadow.OS/Configuration/WiFi_Configuration/ + +# WiFi network credentials +Credentials: + + # WiFi SSID +# Ssid: YourSSID + + # WiFi Password +# Password: SSIDPassword \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is752_Sample/Sc16is752_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is752_Sample/Sc16is752_Sample.csproj index 27c5738856..d0a6099155 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is752_Sample/Sc16is752_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is752_Sample/Sc16is752_Sample.csproj @@ -10,12 +10,7 @@ enable - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is752_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is752_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is752_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is762_Sample/Sc16is762_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is762_Sample/Sc16is762_Sample.csproj index 27c5738856..d0a6099155 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is762_Sample/Sc16is762_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is762_Sample/Sc16is762_Sample.csproj @@ -10,12 +10,7 @@ enable - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is762_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is762_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Samples/Sc16is762_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/ICs.IOExpanders.SerialWombat.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/ICs.IOExpanders.SerialWombat.csproj index 82aba711f7..095e06110c 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/ICs.IOExpanders.SerialWombat.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/ICs.IOExpanders.SerialWombat.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md 10.0 Apache-2.0 @@ -22,8 +22,8 @@ - - - + + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_ADC_Sample/Sw18AB_ADC_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_ADC_Sample/Sw18AB_ADC_Sample.csproj index a74c084108..36ea4908d7 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_ADC_Sample/Sw18AB_ADC_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_ADC_Sample/Sw18AB_ADC_Sample.csproj @@ -17,12 +17,7 @@ - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_ADC_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_ADC_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_ADC_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Core_Sample/Sw18AB_Core_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Core_Sample/Sw18AB_Core_Sample.csproj index 715d642fcb..46843435eb 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Core_Sample/Sw18AB_Core_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Core_Sample/Sw18AB_Core_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Core_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Core_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Core_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_PWM_Sample/Sw18AB_PWM_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_PWM_Sample/Sw18AB_PWM_Sample.csproj index 715d642fcb..46843435eb 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_PWM_Sample/Sw18AB_PWM_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_PWM_Sample/Sw18AB_PWM_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_PWM_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_PWM_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_PWM_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Sample/Sw18AB_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Sample/Sw18AB_Sample.csproj index 715d642fcb..46843435eb 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Sample/Sw18AB_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Sample/Sw18AB_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Ultrasonic_Sample/Sw18AB_Ultrasonic_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Ultrasonic_Sample/Sw18AB_Ultrasonic_Sample.csproj index a74c084108..36ea4908d7 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Ultrasonic_Sample/Sw18AB_Ultrasonic_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Ultrasonic_Sample/Sw18AB_Ultrasonic_Sample.csproj @@ -17,12 +17,7 @@ - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Ultrasonic_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Ultrasonic_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Ultrasonic_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/ICs.IOExpanders.Tca9548a.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/ICs.IOExpanders.Tca9548a.csproj index 6fb721ac5e..14cc5d13df 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/ICs.IOExpanders.Tca9548a.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/ICs.IOExpanders.Tca9548a.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Samples/Tca9548a_Sample/Tca9548a_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Samples/Tca9548a_Sample/Tca9548a_Sample.csproj index d10d351773..2664cb1b02 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Samples/Tca9548a_Sample/Tca9548a_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Samples/Tca9548a_Sample/Tca9548a_Sample.csproj @@ -10,13 +10,8 @@ ICs.IOExpanders - - - - - - - Always - + + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Samples/Tca9548a_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Samples/Tca9548a_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Samples/Tca9548a_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj index 18104361f6..8ac1fe4116 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Samples/x74595_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Samples/x74595_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Samples/x74595_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Samples/x74595_Sample/x74595_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Samples/x74595_Sample/x74595_Sample.csproj index 974333b1a4..ede71ff0d4 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Samples/x74595_Sample/x74595_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Samples/x74595_Sample/x74595_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Leds.Apa102.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Leds.Apa102.csproj index 338976c89e..91a65ea2e7 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Leds.Apa102.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Leds.Apa102.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/Apa102_Display_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/Apa102_Display_Sample.csproj index a8bf76e05d..31736d3f84 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/Apa102_Display_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/Apa102_Display_Sample.csproj @@ -9,13 +9,8 @@ App - - - - - - - Always - + + + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/MeadowApp.cs index dd1e709321..2175ccb544 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/MeadowApp.cs @@ -32,14 +32,14 @@ public override async Task Run() while (true) { canvas.Clear(); - canvas.DrawText(0, 1, "MEADOW", Colors.AzureBlue.WithBrightness(0.25)); - canvas.DrawText(24, 1, "F7", Colors.ChileanFire.WithBrightness(0.25)); + canvas.DrawText(0, 1, "MEADOW", Colors.AzureBlue.WithBrightness(0.25f)); + canvas.DrawText(24, 1, "F7", Colors.ChileanFire.WithBrightness(0.25f)); canvas.Show(); await Task.Delay(1000); canvas.Clear(); - canvas.DrawText(0, 1, "Rocks", Colors.PearGreen.WithBrightness(0.25)); + canvas.DrawText(0, 1, "Rocks", Colors.PearGreen.WithBrightness(0.25f)); canvas.Show(); await Task.Delay(1000); @@ -54,7 +54,7 @@ public static Color AzureBlue { var azureBlue = Color.FromHex("#23abe3"); // make it way less bright - return Color.FromHsba(azureBlue.Hue, azureBlue.Saturation, 0.025); + return Color.FromHsba(azureBlue.Hue, azureBlue.Saturation, 0.025f); } } public static Color ChileanFire @@ -63,7 +63,7 @@ public static Color ChileanFire { var chileanFire = Color.FromHex("#ef7d3b"); // make it way less bright - return Color.FromHsba(chileanFire.Hue, chileanFire.Saturation, 0.025); + return Color.FromHsba(chileanFire.Hue, chileanFire.Saturation, 0.025f); } } public static Color PearGreen @@ -72,7 +72,7 @@ public static Color PearGreen { var PearGreen = Color.FromHex("#c9db31"); // make it way less bright - return Color.FromHsba(PearGreen.Hue, PearGreen.Saturation, 0.025); + return Color.FromHsba(PearGreen.Hue, PearGreen.Saturation, 0.025f); } } } diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/Apa102_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/Apa102_Sample.csproj index aa83007b43..16afe2430c 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/Apa102_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/Apa102_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Leds.Pca9633.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Leds.Pca9633.csproj index d790b9fcba..40f76fdaf1 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Leds.Pca9633.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Leds.Pca9633.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Samples/Pca9633_Sample/Pca9633_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Samples/Pca9633_Sample/Pca9633_Sample.csproj index 3d59de491e..c26fff32f5 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Samples/Pca9633_Sample/Pca9633_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Samples/Pca9633_Sample/Pca9633_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Samples/Pca9633_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Samples/Pca9633_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Samples/Pca9633_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Ws2812/Driver/Leds.Ws2812.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Ws2812/Driver/Leds.Ws2812.csproj index 68ccd4ba4b..add8d2185c 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Ws2812/Driver/Leds.Ws2812.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Ws2812/Driver/Leds.Ws2812.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Ws2812/Samples/Ws2812_Sample/Ws2812_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Ws2812/Samples/Ws2812_Sample/Ws2812_Sample.csproj index df995e1d00..441e92e638 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Ws2812/Samples/Ws2812_Sample/Ws2812_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Ws2812/Samples/Ws2812_Sample/Ws2812_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Ws2812/Samples/Ws2812_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Leds.Ws2812/Samples/Ws2812_Sample/meadow.config.yaml deleted file mode 100644 index d3ffee70d0..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Leds.Ws2812/Samples/Ws2812_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Driver/Motors.ElectronicSpeedController.csproj b/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Driver/Motors.ElectronicSpeedController.csproj index e7791280f7..6d9c90257c 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Driver/Motors.ElectronicSpeedController.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Driver/Motors.ElectronicSpeedController.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Samples/ElectronicSpeedController_Sample/ElectronicSpeedController_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Samples/ElectronicSpeedController_Sample/ElectronicSpeedController_Sample.csproj index c023e838df..60d6835831 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Samples/ElectronicSpeedController_Sample/ElectronicSpeedController_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Samples/ElectronicSpeedController_Sample/ElectronicSpeedController_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Samples/ElectronicSpeedController_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Samples/ElectronicSpeedController_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Samples/ElectronicSpeedController_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/CwCcwStepper.cs b/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/CwCcwStepper.cs index 5715ee3daf..8a0aa2f2ff 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/CwCcwStepper.cs +++ b/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/CwCcwStepper.cs @@ -137,8 +137,6 @@ public override Task Rotate(int steps, RotationDirection direction, Frequency ra { if (steps < -1) throw new ArgumentOutOfRangeException(nameof(steps)); - Resolver.Log.Info($"Moving {steps} steps at {rate.Hertz}Hz"); - // usPerCall is calculated async at startup. This loop is to make sure it's calculated before the first Rotate is run while (_usPerCall == 0) { @@ -147,7 +145,6 @@ public override Task Rotate(int steps, RotationDirection direction, Frequency ra if (steps == 0) { - Resolver.Log.Info($"no move required"); return Task.CompletedTask; } diff --git a/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/Motors.GpioStepper.csproj b/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/Motors.GpioStepper.csproj index 9f8fc84e38..1efb3759df 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/Motors.GpioStepper.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/Motors.GpioStepper.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/StepDirStepper.cs b/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/StepDirStepper.cs index cc02c277d2..b69fabbcb7 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/StepDirStepper.cs +++ b/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Driver/StepDirStepper.cs @@ -137,8 +137,6 @@ public override Task Rotate(int steps, RotationDirection direction, Frequency ra { if (steps < -1) throw new ArgumentOutOfRangeException(nameof(steps)); - Resolver.Log.Info($"Moving {steps} steps at {rate.Hertz}Hz"); - // usPerCall is calculated async at startup. This loop is to make sure it's calculated before the first Rotate is run while (_usPerCall == 0) { @@ -147,7 +145,6 @@ public override Task Rotate(int steps, RotationDirection direction, Frequency ra if (steps == 0) { - Resolver.Log.Info($"no move required"); return Task.CompletedTask; } @@ -227,8 +224,6 @@ public override Task Rotate(int steps, RotationDirection direction, Frequency ra if (infiniteRun) step = 0; } - Resolver.Log.Info($"done stepping. At position {_positionStep}"); - if (_enablePort != null) { _enablePort.State = !InverseLogic; diff --git a/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Samples/GpioStepper_Sample/GpioStepper_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Samples/GpioStepper_Sample/GpioStepper_Sample.csproj index 22956c9e92..25dac4cc66 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Samples/GpioStepper_Sample/GpioStepper_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Samples/GpioStepper_Sample/GpioStepper_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Samples/GpioStepper_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Samples/GpioStepper_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Motors.GpioStepper/Samples/GpioStepper_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Driver/Motors.Stepper.A4988.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Driver/Motors.Stepper.A4988.csproj index 34de43d308..2934d1b6ff 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Driver/Motors.Stepper.A4988.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Driver/Motors.Stepper.A4988.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Samples/A4988_Sample/A4988_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Samples/A4988_Sample/A4988_Sample.csproj index e1c7c64895..9b2ed1beca 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Samples/A4988_Sample/A4988_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Samples/A4988_Sample/A4988_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Samples/A4988_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Samples/A4988_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Samples/A4988_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Driver/Motors.Stepper.Uln2003.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Driver/Motors.Stepper.Uln2003.csproj index 1b11c5e25d..486f2a473f 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Driver/Motors.Stepper.Uln2003.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Driver/Motors.Stepper.Uln2003.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Samples/Uln2003_Sample/Uln2003_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Samples/Uln2003_Sample/Uln2003_Sample.csproj index ab00a03f31..39a37871f1 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Samples/Uln2003_Sample/Uln2003_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Samples/Uln2003_Sample/Uln2003_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Samples/Uln2003_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Samples/Uln2003_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Samples/Uln2003_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj index 859a332fb6..4789900018 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Encoder_Sample/Tb67h420ftg_Encoder_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Encoder_Sample/Tb67h420ftg_Encoder_Sample.csproj index c7a4b98e77..cdc100747f 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Encoder_Sample/Tb67h420ftg_Encoder_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Encoder_Sample/Tb67h420ftg_Encoder_Sample.csproj @@ -9,13 +9,8 @@ App - - - - - - - Always - + + + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Encoder_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Encoder_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Encoder_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Sample/Tb67h420ftg_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Sample/Tb67h420ftg_Sample.csproj index 56256e5268..95b7784e9c 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Sample/Tb67h420ftg_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Sample/Tb67h420ftg_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/RTCs.Ds1307.csproj b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/RTCs.Ds1307.csproj index 3cc99d0d73..07123f5ad4 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/RTCs.Ds1307.csproj +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/RTCs.Ds1307.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Samples/Ds1307_Sample/Ds1307_Sample.csproj b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Samples/Ds1307_Sample/Ds1307_Sample.csproj index 5cf8e6166a..8a8a9fec62 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Samples/Ds1307_Sample/Ds1307_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Samples/Ds1307_Sample/Ds1307_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Samples/Ds1307_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Samples/Ds1307_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Samples/Ds1307_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/RTCs.Ds323x.csproj b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/RTCs.Ds323x.csproj index 46769998f6..311778f5cb 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/RTCs.Ds323x.csproj +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/RTCs.Ds323x.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Samples/Ds323x_Sample/Ds323x_Sample.csproj b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Samples/Ds323x_Sample/Ds323x_Sample.csproj index 361e2af52d..b943e7ce4b 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Samples/Ds323x_Sample/Ds323x_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Samples/Ds323x_Sample/Ds323x_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Samples/Ds323x_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Samples/Ds323x_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Samples/Ds323x_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/Sensors.Atmospheric.AdafruitMPRLS.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/Sensors.Atmospheric.AdafruitMPRLS.csproj index fec84edbc1..8de652edf5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/Sensors.Atmospheric.AdafruitMPRLS.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/Sensors.Atmospheric.AdafruitMPRLS.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Samples/AdafruitMPRLS_Sample/AdafruitMPRLS_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Samples/AdafruitMPRLS_Sample/AdafruitMPRLS_Sample.csproj index a8d46ced21..6fef156b11 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Samples/AdafruitMPRLS_Sample/AdafruitMPRLS_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Samples/AdafruitMPRLS_Sample/AdafruitMPRLS_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Samples/AdafruitMPRLS_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Samples/AdafruitMPRLS_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Samples/AdafruitMPRLS_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Sensors.Atmospheric.Bh1900Nux.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Sensors.Atmospheric.Bh1900Nux.csproj index d5c8a32fc4..b8c45dd2f6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Sensors.Atmospheric.Bh1900Nux.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Sensors.Atmospheric.Bh1900Nux.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -26,6 +26,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/Bh1900Nux_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/Bh1900Nux_Sample.csproj index f8cd16deb3..a067fb1e7c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/Bh1900Nux_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/Bh1900Nux_Sample.csproj @@ -12,12 +12,7 @@ 8.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Address.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Address.cs deleted file mode 100644 index d252eafac3..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Address.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace Meadow.Foundation.Sensors.Atmospheric -{ - public partial class Bme280 - { - /// - /// Valid I2C addresses for the sensor - /// - public enum Addresses : byte - { - /// - /// Bus address 0x76 - /// - Address_0x76 = 0x76, - /// - /// Bus address 0x77 - /// - Address_0x77 = 0x77, - /// - /// Default bus address - /// - Default = Address_0x76 - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.ChipType.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.ChipType.cs deleted file mode 100644 index 2bda5db263..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.ChipType.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace Meadow.Foundation.Sensors.Atmospheric -{ - public partial class Bme280 - { - /// - /// BMx280 type to support both the BME280 and the BMP280 - /// - public enum ChipType : byte - { - /// - /// BMP280 - /// - BMP = 0x58, - /// - /// BME280 - /// - BME = 0x60 - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.CompensationData.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.CompensationData.cs deleted file mode 100644 index 755d2a615b..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.CompensationData.cs +++ /dev/null @@ -1,30 +0,0 @@ -namespace Meadow.Foundation.Sensors.Atmospheric -{ - public partial class Bme280 - { - /// - /// Compensation data. - /// - struct CompensationData - { - public ushort T1; - public short T2; - public short T3; - public ushort P1; - public short P2; - public short P3; - public short P4; - public short P5; - public short P6; - public short P7; - public short P8; - public short P9; - public byte H1; - public short H2; - public byte H3; - public short H4; - public short H5; - public sbyte H6; - } - } -} diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Configuration.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Configuration.cs deleted file mode 100644 index 1f8f933a9f..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Configuration.cs +++ /dev/null @@ -1,44 +0,0 @@ -namespace Meadow.Foundation.Sensors.Atmospheric -{ - public partial class Bme280 - { - /// - /// BME280 configuration class - /// - public class Configuration - { - /// - /// Temperature over sampling configuration - /// - public Oversample TemperatureOverSampling { get; set; } - - /// - /// Pressure over sampling configuration - /// - public Oversample PressureOversampling { get; set; } - - /// - /// Humidity over sampling configuration - /// - public Oversample HumidityOverSampling { get; set; } - - /// - /// Set the operating mode for the sensor - /// - public Modes Mode { get; set; } - - /// - /// Set the standby period for the sensor - /// - public StandbyDuration Standby { get; set; } - - /// - /// Determine the time constant for the IIR filter - /// - /// - /// See section 3.44 of the datasheet for more information - /// - public FilterCoefficient Filter { get; set; } - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.FilterCoefficient.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.FilterCoefficient.cs deleted file mode 100644 index 77e6cf9fc8..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.FilterCoefficient.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace Meadow.Foundation.Sensors.Atmospheric -{ - public partial class Bme280 - { - /// - /// Valid filter co-efficient values - /// - public enum FilterCoefficient : byte - { - /// - /// Off - /// - Off = 0, - /// - /// 2x - /// - Two, - /// - /// 4c - /// - Four, - /// - /// 8x - /// - Eight, - /// - /// 16x - /// - Sixteen - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Modes.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Modes.cs deleted file mode 100644 index c881d4c5ab..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Modes.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace Meadow.Foundation.Sensors.Atmospheric -{ - public partial class Bme280 - { - /// - /// Valid values for the operating mode of the sensor. - /// - public enum Modes : byte - { - /// - /// no operation, all registers accessible, lowest power, selected after startup - /// - Sleep = 0, - /// - /// perform one measurement, store results and return to sleep mode - /// - Forced = 1, - /// - /// perpetual cycling of measurements and inactive periods. - /// - Normal = 3 - } - } -} diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Oversample.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Oversample.cs deleted file mode 100644 index b2130f8af7..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Oversample.cs +++ /dev/null @@ -1,44 +0,0 @@ -namespace Meadow.Foundation.Sensors.Atmospheric -{ - public partial class Bme280 - { - /// - /// Valid oversampling values. - /// - /// - /// 000 - Data output set to 0x8000 - /// 001 - Oversampling x1 - /// 010 - Oversampling x2 - /// 011 - Oversampling x4 - /// 100 - Oversampling x8 - /// 101, 110, 111 - Oversampling x16 - /// - public enum Oversample : byte - { - /// - /// No sampling - /// - Skip = 0, - /// - /// 1x oversampling - /// - OversampleX1, - /// - /// 2x oversampling - /// - OversampleX2, - /// - /// 4x oversampling - /// - OversampleX4, - /// - /// 8x oversampling - /// - OversampleX8, - /// - /// 16x oversampling - /// - OversampleX16 - } - } -} diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Register.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Register.cs deleted file mode 100644 index d490a4b996..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Register.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Meadow.Foundation.Sensors.Atmospheric -{ - public partial class Bme280 - { - internal enum Register : byte - { - ChipID = 0xd0, - Reset = 0xe0, - Humidity = 0xf2, - Status = 0xf3, - Measurement = 0xf4, - Configuration = 0xf5, - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.StandbyDuration.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.StandbyDuration.cs deleted file mode 100644 index ed76af6370..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.StandbyDuration.cs +++ /dev/null @@ -1,44 +0,0 @@ -namespace Meadow.Foundation.Sensors.Atmospheric -{ - public partial class Bme280 - { - /// - /// Valid values for the inactive duration in normal mode. - /// - public enum StandbyDuration : byte - { - /// - /// 0.5 milliseconds - /// - MsHalf = 0, - /// - /// 62.5 milliseconds - /// - Ms62Half, - /// - /// 125 milliseconds - /// - Ms125, - /// - /// 250 milliseconds - /// - Ms250, - /// - /// 500 milliseconds - /// - Ms500, - /// - /// 1000 milliseconds - /// - Ms1000, - /// - /// 10 milliseconds - /// - Ms10, - /// - /// 20 milliseconds - /// - Ms20 - } - } -} diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Sensors.Atmospheric.Bme68x.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Sensors.Atmospheric.Bme68x.csproj index 0fc648c5c3..dfed5802e7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Sensors.Atmospheric.Bme68x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Sensors.Atmospheric.Bme68x.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 icon.png Wilderness Labs, Inc netstandard2.1 @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/Bme680_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/Bme680_Sample.csproj index 86b26b8d6f..78cfc545e2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/Bme680_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/Bme680_Sample.csproj @@ -13,12 +13,7 @@ 8.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/Bme688_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/Bme688_Sample.csproj index 86b26b8d6f..78cfc545e2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/Bme688_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/Bme688_Sample.csproj @@ -13,12 +13,7 @@ 8.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj index ccb5b52577..c4cfa0fdff 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Samples/Bmp085_Sample/Bmp085_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Samples/Bmp085_Sample/Bmp085_Sample.csproj index e1507a2147..9a665f5054 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Samples/Bmp085_Sample/Bmp085_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Samples/Bmp085_Sample/Bmp085_Sample.csproj @@ -11,12 +11,7 @@ 10.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Samples/Bmp085_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Samples/Bmp085_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Samples/Bmp085_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Sensors.Atmospheric.Bmp180.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Sensors.Atmospheric.Bmp180.csproj index 9c483b35d3..f35c47eea0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Sensors.Atmospheric.Bmp180.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Sensors.Atmospheric.Bmp180.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 true @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Samples/Bmp180_Sample/Bmp180_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Samples/Bmp180_Sample/Bmp180_Sample.csproj index 89b43288a6..ee15da2291 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Samples/Bmp180_Sample/Bmp180_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Samples/Bmp180_Sample/Bmp180_Sample.csproj @@ -10,12 +10,7 @@ 10.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Samples/Bmp180_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Samples/Bmp180_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Samples/Bmp180_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Datasheet/BST-BME280_DS001-10.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Datasheet/BST-BME280_DS001-10.pdf similarity index 100% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Datasheet/BST-BME280_DS001-10.pdf rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Datasheet/BST-BME280_DS001-10.pdf diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Datasheet/bst-bmp280-ds001.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Datasheet/bst-bmp280-ds001.pdf new file mode 100644 index 0000000000..a784d91908 Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Datasheet/bst-bmp280-ds001.pdf differ diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Bmx280.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Bmx280.Enums.cs new file mode 100644 index 0000000000..75a1978836 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Bmx280.Enums.cs @@ -0,0 +1,173 @@ +namespace Meadow.Foundation.Sensors.Atmospheric +{ + public abstract partial class Bmx280 + { + /// + /// Valid I2C addresses for the sensor + /// + public enum Addresses : byte + { + /// + /// Bus address 0x76 + /// + Address_0x76 = 0x76, + /// + /// Bus address 0x77 + /// + Address_0x77 = 0x77, + /// + /// Default bus address + /// + Default = Address_0x76 + } + + /// + /// BMx280 type to support both the BME280 and the BMP280 + /// + public enum ChipType : byte + { + /// + /// BMP280 + /// + BMP = 0x58, + /// + /// BME280 + /// + BME = 0x60 + } + + /// + /// Valid filter co-efficient values + /// + public enum FilterCoefficient : byte + { + /// + /// Off + /// + Off = 0, + /// + /// 2x + /// + Two, + /// + /// 4c + /// + Four, + /// + /// 8x + /// + Eight, + /// + /// 16x + /// + Sixteen + } + + /// + /// Valid values for the inactive duration in normal mode. + /// + public enum StandbyDuration : byte + { + /// + /// 0.5 milliseconds + /// + MsHalf = 0, + /// + /// 62.5 milliseconds + /// + Ms62Half, + /// + /// 125 milliseconds + /// + Ms125, + /// + /// 250 milliseconds + /// + Ms250, + /// + /// 500 milliseconds + /// + Ms500, + /// + /// 1000 milliseconds + /// + Ms1000, + /// + /// 10 milliseconds + /// + Ms10, + /// + /// 20 milliseconds + /// + Ms20 + } + + /// + /// Valid values for the operating mode of the sensor. + /// + public enum Modes : byte + { + /// + /// no operation, all registers accessible, lowest power, selected after startup + /// + Sleep = 0, + /// + /// perform one measurement, store results and return to sleep mode + /// + Forced = 1, + /// + /// perpetual cycling of measurements and inactive periods. + /// + Normal = 3 + } + + /// + /// Valid oversampling values. + /// + /// + /// 000 - Data output set to 0x8000 + /// 001 - Oversampling x1 + /// 010 - Oversampling x2 + /// 011 - Oversampling x4 + /// 100 - Oversampling x8 + /// 101, 110, 111 - Oversampling x16 + /// + public enum Oversample : byte + { + /// + /// No sampling + /// + Skip = 0, + /// + /// 1x oversampling + /// + OversampleX1, + /// + /// 2x oversampling + /// + OversampleX2, + /// + /// 4x oversampling + /// + OversampleX4, + /// + /// 8x oversampling + /// + OversampleX8, + /// + /// 16x oversampling + /// + OversampleX16 + } + + internal enum Register : byte + { + ChipID = 0xd0, + Reset = 0xe0, + Humidity = 0xf2, + Status = 0xf3, + Measurement = 0xf4, + Configuration = 0xf5, + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Bmx280.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Bmx280.cs new file mode 100644 index 0000000000..161a51758b --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Bmx280.cs @@ -0,0 +1,106 @@ +using Meadow.Hardware; +using Meadow.Units; +using System; +using System.Threading.Tasks; +using HU = Meadow.Units.RelativeHumidity.UnitType; +using PU = Meadow.Units.Pressure.UnitType; +using TU = Meadow.Units.Temperature.UnitType; + +namespace Meadow.Foundation.Sensors.Atmospheric; + +/// +/// Shared logic for the BMx280 family of sensors +/// +partial class Bmx280 +{ + /// + /// Update the sensor information from the BMx280 + /// + internal static Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure)> + ReadSensor(IByteCommunications bmx280Comms, Memory readBuffer, CompensationData compensationData) + { + (Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure) conditions; + + bmx280Comms.ReadRegister(0xf7, readBuffer.Span[0..8]); + + var adcTemperature = (readBuffer.Span[3] << 12) | (readBuffer.Span[4] << 4) | ((readBuffer.Span[5] >> 4) & 0x0f); + var tvar1 = (((adcTemperature >> 3) - (compensationData.T1 << 1)) * compensationData.T2) >> 11; + var tvar2 = (((((adcTemperature >> 4) - compensationData.T1) * + ((adcTemperature >> 4) - compensationData.T1)) >> 12) * compensationData.T3) >> 14; + var tfine = tvar1 + tvar2; + + conditions.Temperature = new Units.Temperature((float)(((tfine * 5) + 128) >> 8) / 100, TU.Celsius); + + long pvar1 = tfine - 128000; + var pvar2 = pvar1 * pvar1 * compensationData.P6; + pvar2 += (pvar1 * compensationData.P5) << 17; + pvar2 += (long)compensationData.P4 << 35; + pvar1 = ((pvar1 * pvar1 * compensationData.P8) >> 8) + ((pvar1 * compensationData.P2) << 12); + pvar1 = ((((long)1 << 47) + pvar1) * compensationData.P1) >> 33; + if (pvar1 == 0) + { + conditions.Pressure = new Pressure(0, PU.Pascal); + } + else + { + var adcPressure = (readBuffer.Span[0] << 12) | (readBuffer.Span[1] << 4) | ((readBuffer.Span[2] >> 4) & 0x0f); + long pressure = 1048576 - adcPressure; + pressure = (((pressure << 31) - pvar2) * 3125) / pvar1; + pvar1 = (compensationData.P9 * (pressure >> 13) * (pressure >> 13)) >> 25; + pvar2 = (compensationData.P8 * pressure) >> 19; + pressure = ((pressure + pvar1 + pvar2) >> 8) + ((long)compensationData.P7 << 4); + conditions.Pressure = new Pressure((double)pressure / 256, PU.Pascal); + } + + var adcHumidity = (readBuffer.Span[6] << 8) | readBuffer.Span[7]; + var v_x1_u32r = tfine - 76800; + + v_x1_u32r = ((((adcHumidity << 14) - (compensationData.H4 << 20) - (compensationData.H5 * v_x1_u32r)) + + 16384) >> 15) * + ((((((((v_x1_u32r * compensationData.H6) >> 10) * + (((v_x1_u32r * compensationData.H3) >> 11) + 32768)) >> 10) + 2097152) * + compensationData.H2) + 8192) >> 14); + v_x1_u32r = v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * compensationData.H1) >> 4); + + v_x1_u32r = v_x1_u32r < 0 ? 0 : v_x1_u32r; + v_x1_u32r = v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r; + + conditions.Humidity = new RelativeHumidity((v_x1_u32r >> 12) / 1024, HU.Percent); + + return Task.FromResult(conditions); + } + + /// + /// Reads the sensor compensation data + /// + internal static void ReadCompensationData(IByteCommunications bmx280Comms, Memory readBuffer, ref CompensationData compensationData) + { + // read the temperature and pressure data into the internal read buffer + bmx280Comms.ReadRegister(0x88, readBuffer.Span[0..24]); + + // Temperature + compensationData.T1 = (ushort)(readBuffer.Span[0] + (readBuffer.Span[1] << 8)); + compensationData.T2 = (short)(readBuffer.Span[2] + (readBuffer.Span[3] << 8)); + compensationData.T3 = (short)(readBuffer.Span[4] + (readBuffer.Span[5] << 8)); + // Pressure + compensationData.P1 = (ushort)(readBuffer.Span[6] + (readBuffer.Span[7] << 8)); + compensationData.P2 = (short)(readBuffer.Span[8] + (readBuffer.Span[9] << 8)); + compensationData.P3 = (short)(readBuffer.Span[10] + (readBuffer.Span[11] << 8)); + compensationData.P4 = (short)(readBuffer.Span[12] + (readBuffer.Span[13] << 8)); + compensationData.P5 = (short)(readBuffer.Span[14] + (readBuffer.Span[15] << 8)); + compensationData.P6 = (short)(readBuffer.Span[16] + (readBuffer.Span[17] << 8)); + compensationData.P7 = (short)(readBuffer.Span[18] + (readBuffer.Span[19] << 8)); + compensationData.P8 = (short)(readBuffer.Span[20] + (readBuffer.Span[21] << 8)); + compensationData.P9 = (short)(readBuffer.Span[22] + (readBuffer.Span[23] << 8)); + + // Humidity - read twice because it's in non-sequential registers + bmx280Comms.ReadRegister(0xa1, readBuffer.Span[0..1]); + compensationData.H1 = readBuffer.Span[0]; + bmx280Comms.ReadRegister(0xe1, readBuffer.Span[0..7]); + compensationData.H2 = (short)(readBuffer.Span[0] + (readBuffer.Span[1] << 8)); + compensationData.H3 = readBuffer.Span[2]; + compensationData.H4 = (short)((readBuffer.Span[3] << 4) + (readBuffer.Span[4] & 0xf)); + compensationData.H5 = (short)(((readBuffer.Span[4] & 0xf) >> 4) + (readBuffer.Span[5] << 4)); + compensationData.H6 = (sbyte)readBuffer.Span[6]; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/CompensationData.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/CompensationData.cs new file mode 100644 index 0000000000..90a4963fd2 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/CompensationData.cs @@ -0,0 +1,23 @@ +namespace Meadow.Foundation.Sensors.Atmospheric; + +internal struct CompensationData +{ + public ushort T1; + public short T2; + public short T3; + public ushort P1; + public short P2; + public short P3; + public short P4; + public short P5; + public short P6; + public short P7; + public short P8; + public short P9; + public byte H1; + public short H2; + public byte H3; + public short H4; + public short H5; + public sbyte H6; +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Configuration.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Configuration.cs new file mode 100644 index 0000000000..6d8a60136e --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Configuration.cs @@ -0,0 +1,42 @@ +using static Meadow.Foundation.Sensors.Atmospheric.Bmx280; + +namespace Meadow.Foundation.Sensors.Atmospheric; + +/// +/// BME280 configuration class +/// +internal class Configuration +{ + /// + /// Temperature over sampling configuration + /// + public Oversample TemperatureOverSampling { get; set; } + + /// + /// Pressure over sampling configuration + /// + public Oversample PressureOversampling { get; set; } + + /// + /// Humidity over sampling configuration + /// + public Oversample HumidityOverSampling { get; set; } + + /// + /// Set the operating mode for the sensor + /// + public Modes Mode { get; set; } + + /// + /// Set the standby period for the sensor + /// + public StandbyDuration Standby { get; set; } + + /// + /// Determine the time constant for the IIR filter + /// + /// + /// See section 3.44 of the datasheet for more information + /// + public FilterCoefficient Filter { get; set; } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Drivers/Bme280.cs similarity index 64% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Drivers/Bme280.cs index 702a5db41f..5f59729890 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Drivers/Bme280.cs @@ -4,9 +4,7 @@ using Meadow.Units; using System; using System.Threading.Tasks; -using HU = Meadow.Units.RelativeHumidity.UnitType; -using PU = Meadow.Units.Pressure.UnitType; -using TU = Meadow.Units.Temperature.UnitType; +using static Meadow.Foundation.Sensors.Atmospheric.Bmx280; namespace Meadow.Foundation.Sensors.Atmospheric; @@ -91,7 +89,7 @@ event EventHandler> ISamplingSensor.Updated /// /// Sensor configuration /// - protected Configuration configuration; + private readonly Configuration configuration; /// /// The temperature from the last reading @@ -99,20 +97,19 @@ event EventHandler> ISamplingSensor.Updated public Units.Temperature? Temperature => Conditions.Temperature; /// - /// The pressure, in hectopascals (hPa), from the last reading. 1 hPa - /// is equal to one millibar, or 1/10th of a kilopascal (kPa)/centibar. + /// The pressure from the last reading /// public Pressure? Pressure => Conditions.Pressure; /// - /// The humidity, in percent relative humidity, from the last reading.. + /// The realtive humidity from the last reading /// public RelativeHumidity? Humidity => Conditions.Humidity; /// /// The default SPI bus speed for the device /// - public Frequency DefaultSpiBusSpeed => new Frequency(10000, Frequency.UnitType.Kilohertz); + public Frequency DefaultSpiBusSpeed => new(10000, Frequency.UnitType.Kilohertz); /// /// The SPI bus speed for the device @@ -142,7 +139,7 @@ public SpiClockConfiguration.Mode SpiBusMode /// public byte DefaultI2cAddress => (byte)Addresses.Default; - private IDigitalOutputPort? chipSelectPort; + private readonly IDigitalOutputPort? chipSelectPort; /// /// Initializes a new instance of the BME280 class @@ -184,7 +181,7 @@ public Bme280(ISpiBus spiBus, IDigitalOutputPort chipSelectPort) /// protected void Initialize() { - ReadCompensationData(); + Bmx280.ReadCompensationData(bme280Comms, readBuffer, ref compensationData); configuration.Mode = Modes.Sleep; configuration.Filter = FilterCoefficient.Off; @@ -227,7 +224,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T /// protected override async Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure)> ReadSensor() { - //TODO: set an update flag on the oversample properties and set + // TODO: set an update flag on the oversample properties and set // these once, unless the update flag has been set. configuration.TemperatureOverSampling = TemperatureSampleCount; configuration.PressureOversampling = PressureSampleCount; @@ -242,62 +239,15 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T await Task.Delay(100); //give the BME280 time to read new values } - (Units.Temperature Temperature, RelativeHumidity Humidity, Pressure Pressure) conditions; - - bme280Comms.ReadRegister(0xf7, readBuffer.Span[0..8]); - - var adcTemperature = (readBuffer.Span[3] << 12) | (readBuffer.Span[4] << 4) | ((readBuffer.Span[5] >> 4) & 0x0f); - var tvar1 = (((adcTemperature >> 3) - (compensationData.T1 << 1)) * compensationData.T2) >> 11; - var tvar2 = (((((adcTemperature >> 4) - compensationData.T1) * - ((adcTemperature >> 4) - compensationData.T1)) >> 12) * compensationData.T3) >> 14; - var tfine = tvar1 + tvar2; - - conditions.Temperature = new Units.Temperature((float)(((tfine * 5) + 128) >> 8) / 100, TU.Celsius); - - long pvar1 = tfine - 128000; - var pvar2 = pvar1 * pvar1 * compensationData.P6; - pvar2 += (pvar1 * compensationData.P5) << 17; - pvar2 += (long)compensationData.P4 << 35; - pvar1 = ((pvar1 * pvar1 * compensationData.P8) >> 8) + ((pvar1 * compensationData.P2) << 12); - pvar1 = ((((long)1 << 47) + pvar1) * compensationData.P1) >> 33; - if (pvar1 == 0) - { - conditions.Pressure = new Pressure(0, PU.Pascal); - } - else - { - var adcPressure = (readBuffer.Span[0] << 12) | (readBuffer.Span[1] << 4) | ((readBuffer.Span[2] >> 4) & 0x0f); - long pressure = 1048576 - adcPressure; - pressure = (((pressure << 31) - pvar2) * 3125) / pvar1; - pvar1 = (compensationData.P9 * (pressure >> 13) * (pressure >> 13)) >> 25; - pvar2 = (compensationData.P8 * pressure) >> 19; - pressure = ((pressure + pvar1 + pvar2) >> 8) + ((long)compensationData.P7 << 4); - conditions.Pressure = new Pressure((double)pressure / 256, PU.Pascal); - } - - var adcHumidity = (readBuffer.Span[6] << 8) | readBuffer.Span[7]; - var v_x1_u32r = tfine - 76800; - - v_x1_u32r = ((((adcHumidity << 14) - (compensationData.H4 << 20) - (compensationData.H5 * v_x1_u32r)) + - 16384) >> 15) * - ((((((((v_x1_u32r * compensationData.H6) >> 10) * - (((v_x1_u32r * compensationData.H3) >> 11) + 32768)) >> 10) + 2097152) * - compensationData.H2) + 8192) >> 14); - v_x1_u32r = v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * compensationData.H1) >> 4); - - v_x1_u32r = v_x1_u32r < 0 ? 0 : v_x1_u32r; - v_x1_u32r = v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r; - - conditions.Humidity = new RelativeHumidity((v_x1_u32r >> 12) / 1024, HU.Percent); - - return conditions; + return await Bmx280.ReadSensor(bme280Comms, readBuffer, compensationData); } + /// /// Update the configuration for the BME280. /// /// /// This method uses the data in the configuration properties in order to set up the - /// BME280. Ensure that the following are set correctly before calling this method: + /// BME280. Ensure that the following are set correctly before calling this method: /// - Standby /// - Filter /// - HumidityOverSampling @@ -305,11 +255,9 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T /// - PressureOverSampling /// - Mode /// - protected void UpdateConfiguration(Configuration configuration) + private void UpdateConfiguration(Configuration configuration) { - // // Put to sleep to allow the configuration to be changed. - // bme280Comms.WriteRegister((byte)Register.Measurement, 0x00); var data = (byte)((((byte)configuration.Standby << 5) & 0xe0) | (((byte)configuration.Filter << 2) & 0x1c)); @@ -334,57 +282,10 @@ public void Reset() UpdateConfiguration(configuration); } - /// - /// Reads the compensation data. - /// - /// - /// The compensation data is written to the chip at the time of manufacture and cannot be changed. - /// This information is used to convert the readings from the sensor into actual temperature, - /// pressure and humidity readings. - /// From the data sheet, the register addresses and length are: - /// Temperature and pressure: start address 0x88, end address 0x9F (length = 24) - /// Humidity 1: 0xa1, length = 1 - /// Humidity 2 and 3: start address 0xe1, end address 0xe7, (length = 8) - /// - protected void ReadCompensationData() - { - // read the temperature and pressure data into the internal read buffer - bme280Comms.ReadRegister(0x88, readBuffer.Span[0..24]); - - // Temperature - compensationData.T1 = (ushort)(readBuffer.Span[0] + (readBuffer.Span[1] << 8)); - compensationData.T2 = (short)(readBuffer.Span[2] + (readBuffer.Span[3] << 8)); - compensationData.T3 = (short)(readBuffer.Span[4] + (readBuffer.Span[5] << 8)); - // Pressure - compensationData.P1 = (ushort)(readBuffer.Span[6] + (readBuffer.Span[7] << 8)); - compensationData.P2 = (short)(readBuffer.Span[8] + (readBuffer.Span[9] << 8)); - compensationData.P3 = (short)(readBuffer.Span[10] + (readBuffer.Span[11] << 8)); - compensationData.P4 = (short)(readBuffer.Span[12] + (readBuffer.Span[13] << 8)); - compensationData.P5 = (short)(readBuffer.Span[14] + (readBuffer.Span[15] << 8)); - compensationData.P6 = (short)(readBuffer.Span[16] + (readBuffer.Span[17] << 8)); - compensationData.P7 = (short)(readBuffer.Span[18] + (readBuffer.Span[19] << 8)); - compensationData.P8 = (short)(readBuffer.Span[20] + (readBuffer.Span[21] << 8)); - compensationData.P9 = (short)(readBuffer.Span[22] + (readBuffer.Span[23] << 8)); - - // read the humidity data. have to read twice because they're in different, - // non-sequential registers - - // first one - bme280Comms.ReadRegister(0xa1, readBuffer.Span[0..1]); - compensationData.H1 = readBuffer.Span[0]; - // 2-6 - bme280Comms.ReadRegister(0xe1, readBuffer.Span[0..7]); - compensationData.H2 = (short)(readBuffer.Span[0] + (readBuffer.Span[1] << 8)); - compensationData.H3 = readBuffer.Span[2]; - compensationData.H4 = (short)((readBuffer.Span[3] << 4) + (readBuffer.Span[4] & 0xf)); - compensationData.H5 = (short)(((readBuffer.Span[4] & 0xf) >> 4) + (readBuffer.Span[5] << 4)); - compensationData.H6 = (sbyte)readBuffer.Span[6]; - } - /// /// Get the chip ID /// - /// + /// The ID as a byte public byte GetChipID() { bme280Comms.ReadRegister((byte)Register.ChipID, readBuffer.Span[0..1]); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Drivers/Bmp280.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Drivers/Bmp280.cs new file mode 100644 index 0000000000..635ea2fd0a --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Drivers/Bmp280.cs @@ -0,0 +1,315 @@ +using Meadow.Hardware; +using Meadow.Peripherals.Sensors; +using Meadow.Peripherals.Sensors.Atmospheric; +using Meadow.Units; +using System; +using System.Threading.Tasks; +using static Meadow.Foundation.Sensors.Atmospheric.Bmx280; + +namespace Meadow.Foundation.Sensors.Atmospheric; + +/// +/// BMP280 Temperature and Pressure Sensor +/// +/// +/// This class implements the functionality necessary to read the temperature and pressure +/// from the Bosch BMP280 sensor +/// +public partial class Bmp280 : + PollingSensorBase<(Units.Temperature? Temperature, Pressure? Pressure)>, + ITemperatureSensor, IBarometricPressureSensor, ISpiPeripheral, II2cPeripheral, IDisposable +{ + private event EventHandler> _temperatureHandlers = default!; + private event EventHandler> _pressureHandlers = default!; + + event EventHandler> ISamplingSensor.Updated + { + add => _temperatureHandlers += value; + remove => _temperatureHandlers -= value; + } + + event EventHandler> ISamplingSensor.Updated + { + add => _pressureHandlers += value; + remove => _pressureHandlers -= value; + } + + /// + /// Is the object disposed + /// + public bool IsDisposed { get; private set; } + + /// + /// Did we create the port(s) used by the peripheral + /// + private readonly bool createdPort = false; + + /// + /// The read buffer + /// + protected Memory readBuffer = new byte[32]; + + /// + /// The write buffer + /// + protected Memory writeBuffer = new byte[32]; + + /// + /// Temperature oversample count + /// + public Oversample TemperatureSampleCount { get; set; } = Oversample.OversampleX8; + + /// + /// Pressure oversample count + /// + public Oversample PressureSampleCount { get; set; } = Oversample.OversampleX8; + + /// + /// Communication bus used to read and write to the BMP280 sensor + /// + private readonly IByteCommunications bmp280Comms; + + /// + /// Compensation data from the sensor + /// + private CompensationData compensationData; + + /// + /// Sensor configuration + /// + private readonly Configuration configuration; + + /// + /// The temperature from the last reading + /// + public Units.Temperature? Temperature => Conditions.Temperature; + + /// + /// The pressure from the last reading + /// + public Pressure? Pressure => Conditions.Pressure; + + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new(10000, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed + { + get => ((ISpiCommunications)bmp280Comms).BusSpeed; + set => ((ISpiCommunications)bmp280Comms).BusSpeed = value; + } + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => ((ISpiCommunications)bmp280Comms).BusMode; + set => ((ISpiCommunications)bmp280Comms).BusMode = value; + } + + /// + /// The default I2C address for the peripheral + /// + public byte DefaultI2cAddress => (byte)Addresses.Default; + + private readonly IDigitalOutputPort? chipSelectPort; + + /// + /// Initializes a new instance of the BMP280 class + /// + /// I2C Bus to use for communicating with the sensor + /// I2C address of the sensor (default = 0x76) + public Bmp280(II2cBus i2cBus, byte address = (byte)Addresses.Default) + { + bmp280Comms = new I2cCommunications(i2cBus, address); + configuration = new Configuration(); // here to avoid the warning + Initialize(); + } + + /// + /// Initializes a new instance of the BMP280 class + /// + /// The SPI bus connected to the BMP280 + /// The chip select pin + public Bmp280(ISpiBus spiBus, IPin chipSelectPin) : + this(spiBus, chipSelectPin.CreateDigitalOutputPort()) + { + createdPort = true; + } + + /// + /// Initializes a new instance of the BMP280 class + /// + /// The SPI bus connected to the BMP280 + /// The port for the chip select pin + public Bmp280(ISpiBus spiBus, IDigitalOutputPort chipSelectPort) + { + bmp280Comms = new SpiCommunications(spiBus, this.chipSelectPort = chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + configuration = new Configuration(); // here to avoid the warning + Initialize(); + } + + /// + /// Initialize the sensor + /// + protected void Initialize() + { + Bmx280.ReadCompensationData(bmp280Comms, readBuffer, ref compensationData); + + configuration.Mode = Modes.Sleep; + configuration.Filter = FilterCoefficient.Off; + UpdateConfiguration(configuration); + } + + /// + /// Raise events for subscribers and notify of value changes + /// + /// The updated sensor data + protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? Temperature, Pressure? Pressure)> changeResult) + { + if (changeResult.New.Temperature is { } temp) + { + _temperatureHandlers?.Invoke(this, new ChangeResult(temp, changeResult.Old?.Temperature)); + } + if (changeResult.New.Pressure is { } pressure) + { + _pressureHandlers?.Invoke(this, new ChangeResult(pressure, changeResult.Old?.Pressure)); + } + base.RaiseEventsAndNotify(changeResult); + } + + /// + /// Update the sensor information from the BME280. + /// + /// + /// Reads the raw temperature, pressure and humidity data from the BME280 and applies + /// the compensation data to get the actual readings. These are made available through the + /// Temperature, Pressure and Humidity properties. + /// All three readings are taken at once to ensure that the three readings are consistent. + /// Register locations and formulas taken from the Bosch BME280 datasheet revision 1.1, May 2015. + /// Register locations - section 5.3 Memory Map + /// Formulas - section 4.2.3 Compensation Formulas + /// The integer formulas have been used to try and keep the calculations per formant. + /// + protected override async Task<(Units.Temperature? Temperature, Pressure? Pressure)> ReadSensor() + { + // TODO: set an update flag on the oversample properties and set + // these once, unless the update flag has been set. + configuration.TemperatureOverSampling = TemperatureSampleCount; + configuration.PressureOversampling = PressureSampleCount; + + // if we're not in normal mode, set up the BMP280 for a one-time read + if (configuration.Mode != Modes.Normal) + { + configuration.Mode = Modes.Forced; + configuration.Filter = FilterCoefficient.Off; + UpdateConfiguration(configuration); + await Task.Delay(100); //give the BMP280 time to read new values + } + + var data = await Bmx280.ReadSensor(bmp280Comms, readBuffer, compensationData); + return (data.Temperature, data.Pressure); + } + + /// + /// Update the configuration for the BMP280. + /// + /// + /// This method uses the data in the configuration properties in order to set up the + /// BMP280. Ensure that the following are set correctly before calling this method: + /// - Standby + /// - Filter + /// - HumidityOverSampling + /// - TemperatureOverSampling + /// - PressureOverSampling + /// - Mode + /// + private void UpdateConfiguration(Configuration configuration) + { + // Put to sleep to allow the configuration to be changed. + bmp280Comms.WriteRegister((byte)Register.Measurement, 0x00); + + var data = (byte)((((byte)configuration.Standby << 5) & 0xe0) | (((byte)configuration.Filter << 2) & 0x1c)); + bmp280Comms.WriteRegister((byte)Register.Configuration, data); + data = (byte)((byte)configuration.HumidityOverSampling & 0x07); + bmp280Comms.WriteRegister((byte)Register.Humidity, data); + data = (byte)((((byte)configuration.TemperatureOverSampling << 5) & 0xe0) | + (((byte)configuration.PressureOversampling << 2) & 0x1c) | + ((byte)configuration.Mode & 0x03)); + bmp280Comms.WriteRegister((byte)Register.Measurement, data); + } + + /// + /// Reset the sensor. + /// + /// + /// Perform a full power-on-reset of the sensor and reset the configuration of the sensor. + /// + public void Reset() + { + bmp280Comms.WriteRegister((byte)Register.Reset, 0xb6); + UpdateConfiguration(configuration); + } + + /// + /// Get the chip ID + /// + /// The ID as a byte + public byte GetChipID() + { + bmp280Comms.ReadRegister((byte)Register.ChipID, readBuffer.Span[0..1]); + return readBuffer.Span[0]; + } + + /// + /// Start updating + /// + /// The update inverval + public override void StartUpdating(TimeSpan? updateInterval = null) + { + configuration.Mode = Modes.Normal; + UpdateConfiguration(configuration); + + base.StartUpdating(updateInterval); + } + + /// + public void Dispose() + { + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose of the object + /// + /// Is disposing + protected virtual void Dispose(bool disposing) + { + if (!IsDisposed) + { + if (disposing && createdPort) + { + chipSelectPort?.Dispose(); + } + + IsDisposed = true; + } + } + + async Task ISensor.Read() + => (await Read()).Temperature!.Value; + + async Task ISensor.Read() + => (await Read()).Pressure!.Value; +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Readme.md similarity index 66% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Readme.md rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Readme.md index 16d56366bb..01e41baabe 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Readme.md +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Readme.md @@ -1,8 +1,8 @@ -# Meadow.Foundation.Sensors.Atmospheric.Bme280 +# Meadow.Foundation.Sensors.Atmospheric.Bmx280 -**Bosch BME280 SPI and I2C absolute barometric pressure sensor** +**Bosch BMx280 SPI and I2C family of atmospheric sensor** -The **Bme280** library is included in the **Meadow.Foundation.Sensors.Atmospheric.Bme280** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. +The **Bmx280** library is included in the **Meadow.Foundation.Sensors.Atmospheric.Bmx280** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. This driver is part of the [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/) peripherals library, an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT applications. @@ -14,11 +14,13 @@ To view all Wilderness Labs open-source projects, including samples, visit [gith You can install the library from within Visual studio using the the NuGet Package Manager or from the command line using the .NET CLI: -`dotnet add package Meadow.Foundation.Sensors.Atmospheric.Bme280` +`dotnet add package Meadow.Foundation.Sensors.Atmospheric.Bmx280` ## Usage ```csharp -Bme280 sensor; +protected Bme280 sensor; + +protected virtual IPin SpiChipSelect { get; } public override Task Initialize() { @@ -30,17 +32,18 @@ public override Task Initialize() var consumer = Bme280.CreateObserver( handler: result => { - Resolver.Log.Info($"Observer: Temp changed by threshold; new temp: {result.New.Temperature?.Celsius:N2}C, old: {result.Old?.Temperature?.Celsius:N2}C"); + Resolver.Log.Info($"Observer: Temp changed by threshold; new temp: {result.New.Temperature?.Celsius:N1}C, old: {result.Old?.Temperature?.Celsius:N1}C"); }, filter: result => { - if (result.Old is { } old) + if (result.Old?.Temperature is { } oldTemp && + result.Old?.Humidity is { } oldHumidity && + result.New.Temperature is { } newTemp && + result.New.Humidity is { } newHumidity) { - return ( - (result.New.Temperature.Value - old.Temperature.Value).Abs().Celsius > 0.5 - && - (result.New.Humidity.Value - old.Humidity.Value).Percent > 0.05 - ); + return + (newTemp - oldTemp).Abs().Celsius > 0.5 && + (newHumidity - oldHumidity).Percent > 0.05; } return false; } @@ -49,9 +52,16 @@ public override Task Initialize() sensor.Updated += (sender, result) => { - Resolver.Log.Info($" Temperature: {result.New.Temperature?.Celsius:N2}C"); - Resolver.Log.Info($" Relative Humidity: {result.New.Humidity:N2}%"); - Resolver.Log.Info($" Pressure: {result.New.Pressure?.Millibar:N2}mbar ({result.New.Pressure?.Pascal:N2}Pa)"); + try + { + Resolver.Log.Info($" Temperature: {result.New.Temperature?.Celsius:N1}C"); + Resolver.Log.Info($" Relative Humidity: {result.New.Humidity:N1}%"); + Resolver.Log.Info($" Pressure: {result.New.Pressure?.Millibar:N1}mbar ({result.New.Pressure?.Pascal:N1}Pa)"); + } + catch (Exception ex) + { + Resolver.Log.Error(ex, "Error reading sensor"); + } }; return Task.CompletedTask; @@ -61,27 +71,27 @@ public override async Task Run() { var conditions = await sensor.Read(); Resolver.Log.Info("Initial Readings:"); - Resolver.Log.Info($" Temperature: {conditions.Temperature?.Celsius:N2}C"); - Resolver.Log.Info($" Pressure: {conditions.Pressure?.Bar:N2}hPa"); - Resolver.Log.Info($" Relative Humidity: {conditions.Humidity?.Percent:N2}%"); + Resolver.Log.Info($" Temperature: {conditions.Temperature?.Celsius:N1}C"); + Resolver.Log.Info($" Pressure: {conditions.Pressure?.Bar:N1}hPa"); + Resolver.Log.Info($" Relative Humidity: {conditions.Humidity?.Percent:N1}%"); sensor.StartUpdating(TimeSpan.FromSeconds(1)); } -void CreateSpiSensor() +private void CreateSpiSensor() { Resolver.Log.Info("Create BME280 sensor with SPI..."); var spi = Device.CreateSpiBus(); - sensor = new Bme280(spi, Device.Pins.D00.CreateDigitalOutputPort()); + sensor = new Bme280(spi, SpiChipSelect.CreateDigitalOutputPort()); } -void CreateI2CSensor() +private void CreateI2CSensor() { Resolver.Log.Info("Create BME280 sensor with I2C..."); var i2c = Device.CreateI2cBus(); - sensor = new Bme280(i2c, (byte)Bme280.Addresses.Default); // SDA pulled up + sensor = new Bme280(i2c, (byte)Bmx280.Addresses.Default); // SDA pulled up } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Sensors.Atmospheric.Bme280.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Sensors.Atmospheric.Bmx280.csproj similarity index 73% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Sensors.Atmospheric.Bme280.csproj rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Sensors.Atmospheric.Bmx280.csproj index 4a1867d912..b43988a05c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Sensors.Atmospheric.Bme280.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Driver/Sensors.Atmospheric.Bmx280.csproj @@ -1,19 +1,19 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc netstandard2.1 Library - Bme280 + Bmx280 Wilderness Labs, Inc http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ - Meadow.Foundation.Sensors.Atmospheric.Bme280 + Meadow.Foundation.Sensors.Atmospheric.Bmx280 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, Atmospheric, BME280 + Meadow.Foundation,Atmospheric,BME280,BMP280 true - Bosch BME280 SPI and I2C absolute barometric pressure sensor + Bosch BMx280 SPI and I2C family of atmospheric sensor enable @@ -26,6 +26,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_Sample/Bme280_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_Sample/Bme280_Sample.csproj new file mode 100644 index 0000000000..603cef6e23 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_Sample/Bme280_Sample.csproj @@ -0,0 +1,16 @@ + + + https://github.com/WildernessLabs/Meadow.Foundation + Wilderness Labs, Inc + Wilderness Labs, Inc + true + netstandard2.1 + Library + App + 10 + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_Sample/MeadowApp.cs new file mode 100644 index 0000000000..8c15ba006c --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_Sample/MeadowApp.cs @@ -0,0 +1,103 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Sensors.Atmospheric; +using Meadow.Hardware; +using System; +using System.Threading.Tasks; + +namespace Sensors.Atmospheric.BME280_Sample; + +public class CoreComputeApp : MeadowApp +{ + protected override IPin SpiChipSelect => Device.Pins.D00; +} + +public class FeatherApp : MeadowApp +{ + protected override IPin SpiChipSelect => Device.Pins.D00; +} + +public abstract class MeadowApp : App + where T : F7MicroBase +{ + // + + protected Bme280 sensor; + + protected virtual IPin SpiChipSelect { get; } + + public override Task Initialize() + { + Resolver.Log.Info("Initializing..."); + + //CreateSpiSensor(); + CreateI2CSensor(); + + var consumer = Bme280.CreateObserver( + handler: result => + { + Resolver.Log.Info($"Observer: Temp changed by threshold; new temp: {result.New.Temperature?.Celsius:N1}C, old: {result.Old?.Temperature?.Celsius:N1}C"); + }, + filter: result => + { + if (result.Old?.Temperature is { } oldTemp && + result.Old?.Humidity is { } oldHumidity && + result.New.Temperature is { } newTemp && + result.New.Humidity is { } newHumidity) + { + return + (newTemp - oldTemp).Abs().Celsius > 0.5 && + (newHumidity - oldHumidity).Percent > 0.05; + } + return false; + } + ); + sensor.Subscribe(consumer); + + sensor.Updated += (sender, result) => + { + try + { + Resolver.Log.Info($" Temperature: {result.New.Temperature?.Celsius:N1}C"); + Resolver.Log.Info($" Relative Humidity: {result.New.Humidity:N1}%"); + Resolver.Log.Info($" Pressure: {result.New.Pressure?.Millibar:N1}mbar ({result.New.Pressure?.Pascal:N1}Pa)"); + } + catch (Exception ex) + { + Resolver.Log.Error(ex, "Error reading sensor"); + } + }; + + return Task.CompletedTask; + } + + public override async Task Run() + { + var conditions = await sensor.Read(); + Resolver.Log.Info("Initial Readings:"); + Resolver.Log.Info($" Temperature: {conditions.Temperature?.Celsius:N1}C"); + Resolver.Log.Info($" Pressure: {conditions.Pressure?.Bar:N1}hPa"); + Resolver.Log.Info($" Relative Humidity: {conditions.Humidity?.Percent:N1}%"); + + sensor.StartUpdating(TimeSpan.FromSeconds(1)); + } + + private void CreateSpiSensor() + { + Resolver.Log.Info("Create BME280 sensor with SPI..."); + + var spi = Device.CreateSpiBus(); + sensor = new Bme280(spi, SpiChipSelect.CreateDigitalOutputPort()); + } + + private void CreateI2CSensor() + { + Resolver.Log.Info("Create BME280 sensor with I2C..."); + + var i2c = Device.CreateI2cBus(); + sensor = new Bme280(i2c, (byte)Bmx280.Addresses.Default); // SDA pulled up + + } + + // +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_VB_Sample/Bme280_VB_Sample.vbproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_VB_Sample/Bme280_VB_Sample.vbproj new file mode 100644 index 0000000000..36bb4ef9dd --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_VB_Sample/Bme280_VB_Sample.vbproj @@ -0,0 +1,12 @@ + + + netstandard2.1 + true + Library + App + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_VB_Sample/MeadowApp.vb b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_VB_Sample/MeadowApp.vb new file mode 100644 index 0000000000..e9b3c116e0 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bme280_VB_Sample/MeadowApp.vb @@ -0,0 +1,59 @@ +Imports Meadow +Imports Meadow.Devices +Imports Meadow.Foundation.Sensors.Atmospheric + +Public Class FeatherV2App + Inherits MeadowApp(Of F7FeatherV2) + +End Class + +Public Class CoreComputeApp + Inherits MeadowApp(Of F7CoreComputeV2) + +End Class + +Public Class MeadowApp(Of T As F7MicroBase) + Inherits App(Of T) + + Private sensor As Bme280 + + Public Overrides Function Initialize() As Task + Resolver.Log.Info("Initializing...") + + Dim bus = Device.CreateI2cBus() + sensor = New Bme280(bus) + + Dim consumer = Bme280.CreateObserver( + handler:=Sub(result) + Resolver.Log.Info($"Observer: Temp changed by threshold; new temp: {result.New.Temperature?.Celsius:N1}C, old: {result.Old?.Temperature?.Celsius:N1}C") + End Sub, + filter:=Function(result) + If result.Old?.Temperature IsNot Nothing AndAlso + result.Old?.Humidity IsNot Nothing AndAlso + result.New.Temperature IsNot Nothing AndAlso + result.New.Humidity IsNot Nothing Then + + Dim oldTemp = result.Old.Value.Temperature.Value.Celsius + Dim oldHumidity = result.Old.Value.Humidity.Value.Percent + Dim newTemp = result.New.Temperature.Value.Celsius + Dim newHumidity = result.New.Humidity.Value.Percent + + Return Math.Abs(newTemp - oldTemp) > 0.5 AndAlso + (newHumidity - oldHumidity) / oldHumidity > 0.05 + End If + Return False + End Function) + + Return Task.CompletedTask + End Function + + Public Overrides Async Function Run() As Task + Dim conditions = Await sensor.Read() + Resolver.Log.Info("Initial Readings:") + Resolver.Log.Info($" Temperature: {conditions.Temperature?.Celsius:N2}C") + Resolver.Log.Info($" Pressure: {conditions.Pressure?.Bar:N2}hPa") + Resolver.Log.Info($" Relative Humidity: {conditions.Humidity?.Percent:N2}%") + + sensor.StartUpdating(TimeSpan.FromSeconds(1)) + End Function +End Class \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/Bme280_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bmp280_Sample/Bmp280_Sample.csproj similarity index 72% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/Bme280_Sample.csproj rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bmp280_Sample/Bmp280_Sample.csproj index ca92a26ce6..68ae311dec 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/Bme280_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bmp280_Sample/Bmp280_Sample.csproj @@ -12,12 +12,7 @@ 8.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bmp280_Sample/MeadowApp.cs similarity index 58% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/MeadowApp.cs rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bmp280_Sample/MeadowApp.cs index 660e9ebade..3c89c39a3f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmx280/Samples/Bmp280_Sample/MeadowApp.cs @@ -1,17 +1,16 @@ using Meadow; using Meadow.Devices; using Meadow.Foundation.Sensors.Atmospheric; -using Meadow.Hardware; using System; using System.Threading.Tasks; -namespace Sensors.Atmospheric.BME280_Sample +namespace Sensors.Atmospheric.BMP280_Sample { public class MeadowApp : App { // - Bme280 sensor; + Bmp280 sensor; public override Task Initialize() { @@ -20,20 +19,17 @@ public override Task Initialize() //CreateSpiSensor(); CreateI2CSensor(); - var consumer = Bme280.CreateObserver( + var consumer = Bmp280.CreateObserver( handler: result => { - Resolver.Log.Info($"Observer: Temp changed by threshold; new temp: {result.New.Temperature?.Celsius:N2}C, old: {result.Old?.Temperature?.Celsius:N2}C"); + Resolver.Log.Info($"Observer: Temp changed by threshold; new temp: {result.New.Temperature?.Celsius:N1}C, old: {result.Old?.Temperature?.Celsius:N1}C"); }, filter: result => { - if (result.Old is { } old) + if (result.Old?.Temperature is { } oldTemp && + result.New.Temperature is { } newTemp) { - return ( - (result.New.Temperature.Value - old.Temperature.Value).Abs().Celsius > 0.5 - && - (result.New.Humidity.Value - old.Humidity.Value).Percent > 0.05 - ); + return (newTemp - oldTemp).Abs().Celsius > 0.5; } return false; } @@ -42,9 +38,15 @@ public override Task Initialize() sensor.Updated += (sender, result) => { - Resolver.Log.Info($" Temperature: {result.New.Temperature?.Celsius:N2}C"); - Resolver.Log.Info($" Relative Humidity: {result.New.Humidity:N2}%"); - Resolver.Log.Info($" Pressure: {result.New.Pressure?.Millibar:N2}mbar ({result.New.Pressure?.Pascal:N2}Pa)"); + try + { + Resolver.Log.Info($" Temperature: {result.New.Temperature?.Celsius:N1}C"); + Resolver.Log.Info($" Pressure: {result.New.Pressure?.Millibar:N1}mbar ({result.New.Pressure?.Pascal:N1}Pa)"); + } + catch (Exception ex) + { + Resolver.Log.Error(ex, "Error reading sensor"); + } }; return Task.CompletedTask; @@ -54,9 +56,8 @@ public override async Task Run() { var conditions = await sensor.Read(); Resolver.Log.Info("Initial Readings:"); - Resolver.Log.Info($" Temperature: {conditions.Temperature?.Celsius:N2}C"); - Resolver.Log.Info($" Pressure: {conditions.Pressure?.Bar:N2}hPa"); - Resolver.Log.Info($" Relative Humidity: {conditions.Humidity?.Percent:N2}%"); + Resolver.Log.Info($" Temperature: {conditions.Temperature?.Celsius:N1}C"); + Resolver.Log.Info($" Pressure: {conditions.Pressure?.Bar:N1}hPa"); sensor.StartUpdating(TimeSpan.FromSeconds(1)); } @@ -66,7 +67,7 @@ void CreateSpiSensor() Resolver.Log.Info("Create BME280 sensor with SPI..."); var spi = Device.CreateSpiBus(); - sensor = new Bme280(spi, Device.Pins.D00.CreateDigitalOutputPort()); + sensor = new Bmp280(spi, Device.Pins.D00.CreateDigitalOutputPort()); } void CreateI2CSensor() @@ -74,7 +75,7 @@ void CreateI2CSensor() Resolver.Log.Info("Create BME280 sensor with I2C..."); var i2c = Device.CreateI2cBus(); - sensor = new Bme280(i2c, (byte)Bme280.Addresses.Default); // SDA pulled up + sensor = new Bmp280(i2c, (byte)Bmx280.Addresses.Default); // SDA pulled up } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj index 7820b4eeaa..bc18be8866 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Wilderness Labs, Inc netstandard2.1 Library @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/Ccs811_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/Ccs811_Sample.csproj index 3ed934bd41..2be6af975a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/Ccs811_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/Ccs811_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Sensors.Atmospheric.Dhtxx.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Sensors.Atmospheric.Dhtxx.csproj index 7f3c5695e3..9663c8e78c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Sensors.Atmospheric.Dhtxx.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Sensors.Atmospheric.Dhtxx.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 true @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht10_Sample/Dht10_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht10_Sample/Dht10_Sample.csproj index d3158f0471..ee03762ea5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht10_Sample/Dht10_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht10_Sample/Dht10_Sample.csproj @@ -13,12 +13,7 @@ 8.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht10_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht10_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht10_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht12_Sample/Dht12_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht12_Sample/Dht12_Sample.csproj index d3158f0471..ee03762ea5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht12_Sample/Dht12_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht12_Sample/Dht12_Sample.csproj @@ -13,12 +13,7 @@ 8.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht12_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht12_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht12_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hc2/Driver/Sensors.Atmospheric.Hc2.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hc2/Driver/Sensors.Atmospheric.Hc2.csproj index 8ca7fbcf6d..ac1e3f6677 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hc2/Driver/Sensors.Atmospheric.Hc2.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hc2/Driver/Sensors.Atmospheric.Hc2.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hc2/Samples/Hc2_Sample/Hc2_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hc2/Samples/Hc2_Sample/Hc2_Sample.csproj index 92a39dc58d..316d41ec2b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hc2/Samples/Hc2_Sample/Hc2_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hc2/Samples/Hc2_Sample/Hc2_Sample.csproj @@ -12,12 +12,7 @@ 10.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hc2/Samples/Hc2_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hc2/Samples/Hc2_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hc2/Samples/Hc2_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Sensors.Atmospheric.Hih6130.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Sensors.Atmospheric.Hih6130.csproj index 25080f9287..611fdb0f32 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Sensors.Atmospheric.Hih6130.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Sensors.Atmospheric.Hih6130.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 true @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Samples/Hih6130_Sample/Hih6130_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Samples/Hih6130_Sample/Hih6130_Sample.csproj index bd12b1d92b..e71f61399c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Samples/Hih6130_Sample/Hih6130_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Samples/Hih6130_Sample/Hih6130_Sample.csproj @@ -11,12 +11,7 @@ 10.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Samples/Hih6130_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Samples/Hih6130_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Samples/Hih6130_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Sensors.Atmospheric.Htux1d.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Sensors.Atmospheric.Htux1d.csproj index 6f20e6b316..52abd238dc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Sensors.Atmospheric.Htux1d.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Sensors.Atmospheric.Htux1d.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Htu21d_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Htu21d_Sample.csproj index 0ca87da49c..e4d634890f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Htu21d_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Htu21d_Sample.csproj @@ -13,12 +13,7 @@ 9.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Htu31d_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Htu31d_Sample.csproj index 0ca87da49c..e4d634890f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Htu31d_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Htu31d_Sample.csproj @@ -13,12 +13,7 @@ 9.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Sensors.Atmospheric.Mpl3115a2.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Sensors.Atmospheric.Mpl3115a2.csproj index aa694045a6..c59bef6ec5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Sensors.Atmospheric.Mpl3115a2.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Sensors.Atmospheric.Mpl3115a2.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 true @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Samples/Mpl3115a2_Sample/Mpl3115a2_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Samples/Mpl3115a2_Sample/Mpl3115a2_Sample.csproj index dafd3e1a8c..37b02046ae 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Samples/Mpl3115a2_Sample/Mpl3115a2_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Samples/Mpl3115a2_Sample/Mpl3115a2_Sample.csproj @@ -11,12 +11,7 @@ 10.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Samples/Mpl3115a2_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Samples/Mpl3115a2_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Samples/Mpl3115a2_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Sensors.Atmospheric.Ms5611.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Sensors.Atmospheric.Ms5611.csproj index 452e39c21f..6b1d1e145f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Sensors.Atmospheric.Ms5611.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Sensors.Atmospheric.Ms5611.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Samples/Ms5611_Sample/Ms5611_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Samples/Ms5611_Sample/Ms5611_Sample.csproj index 1b7f96c322..232601d377 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Samples/Ms5611_Sample/Ms5611_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Samples/Ms5611_Sample/Ms5611_Sample.csproj @@ -9,12 +9,7 @@ App - + - - - Always - - diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Samples/Ms5611_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Samples/Ms5611_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Samples/Ms5611_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sensors.Atmospheric.Sgp40.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sensors.Atmospheric.Sgp40.csproj index 1f0f66379e..a49267077b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sensors.Atmospheric.Sgp40.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sensors.Atmospheric.Sgp40.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Samples/Sgp40_Sample/Sgp40_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Samples/Sgp40_Sample/Sgp40_Sample.csproj index 7d63d6d6d8..3a2d9a72a4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Samples/Sgp40_Sample/Sgp40_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Samples/Sgp40_Sample/Sgp40_Sample.csproj @@ -11,12 +11,7 @@ 10.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Samples/Sgp40_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Samples/Sgp40_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Samples/Sgp40_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sensors.Atmospheric.Sht31d.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sensors.Atmospheric.Sht31d.csproj index 5ade10407c..c5734d72b5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sensors.Atmospheric.Sht31d.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sensors.Atmospheric.Sht31d.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Samples/Sht31d_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Samples/Sht31d_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Samples/Sht31d_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31d/Samples/Sht31d_Sample/Sht31d_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31d/Samples/Sht31d_Sample/Sht31d_Sample.csproj index 3ee6e68f00..a640ec255e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31d/Samples/Sht31d_Sample/Sht31d_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31d/Samples/Sht31d_Sample/Sht31d_Sample.csproj @@ -10,12 +10,7 @@ 10.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sensors.Atmospheric.Sht4x.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sensors.Atmospheric.Sht4x.csproj index de037764cf..c95a45549d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sensors.Atmospheric.Sht4x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sensors.Atmospheric.Sht4x.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Samples/Sht4x_Sample/Sht4x_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Samples/Sht4x_Sample/Sht4x_Sample.csproj index 07773e16c2..52104bb086 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Samples/Sht4x_Sample/Sht4x_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Samples/Sht4x_Sample/Sht4x_Sample.csproj @@ -12,12 +12,7 @@ 9.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Samples/Sht4x_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Samples/Sht4x_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Samples/Sht4x_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Sensors.Atmospheric.Si70xx.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Sensors.Atmospheric.Si70xx.csproj index c9435b2565..e4eb8846d4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Sensors.Atmospheric.Si70xx.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Sensors.Atmospheric.Si70xx.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 true @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Samples/Si70xx_Sample/Si70xx_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Samples/Si70xx_Sample/Si70xx_Sample.csproj index 82a4bf0b80..77527179b6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Samples/Si70xx_Sample/Si70xx_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Samples/Si70xx_Sample/Si70xx_Sample.csproj @@ -11,12 +11,7 @@ 10.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Samples/Si70xx_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Samples/Si70xx_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Samples/Si70xx_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Sensors.Atmospheric.Th02.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Sensors.Atmospheric.Th02.csproj index 1742cc2586..f06f3b45ea 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Sensors.Atmospheric.Th02.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Sensors.Atmospheric.Th02.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Samples/Th02_Sample/Th02_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Samples/Th02_Sample/Th02_Sample.csproj index 6c07a993ac..b5a45d07b8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Samples/Th02_Sample/Th02_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Samples/Th02_Sample/Th02_Sample.csproj @@ -10,12 +10,7 @@ 10.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Samples/Th02_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Samples/Th02_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Samples/Th02_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Amg8833/Driver/Sensors.Camera.Amg8833.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Amg8833/Driver/Sensors.Camera.Amg8833.csproj index e583d9b2d3..be1d809cfe 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Amg8833/Driver/Sensors.Camera.Amg8833.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Amg8833/Driver/Sensors.Camera.Amg8833.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Amg8833/Samples/Amg8833_Sample/Amg8833_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Amg8833/Samples/Amg8833_Sample/Amg8833_Sample.csproj index dca790a26d..2cdcaeb23e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Amg8833/Samples/Amg8833_Sample/Amg8833_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Amg8833/Samples/Amg8833_Sample/Amg8833_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Amg8833/Samples/Amg8833_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Amg8833/Samples/Amg8833_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Amg8833/Samples/Amg8833_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Sensors.Camera.Mlx90640.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Sensors.Camera.Mlx90640.csproj index a08745371f..b4585f9180 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Sensors.Camera.Mlx90640.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Sensors.Camera.Mlx90640.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Samples/Mlx90640_Sample/Mlx90640_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Samples/Mlx90640_Sample/Mlx90640_Sample.csproj index 87b6cc20cd..ff8d20d274 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Samples/Mlx90640_Sample/Mlx90640_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Samples/Mlx90640_Sample/Mlx90640_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Samples/Mlx90640_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Samples/Mlx90640_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Samples/Mlx90640_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Driver/Sensors.Camera.Vc0706.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Driver/Sensors.Camera.Vc0706.csproj index 0d955627fd..85a3c6d433 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Driver/Sensors.Camera.Vc0706.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Driver/Sensors.Camera.Vc0706.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Samples/Vc0706_Sample/Vc0706_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Samples/Vc0706_Sample/Vc0706_Sample.csproj index a52d437721..ce67a17837 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Samples/Vc0706_Sample/Vc0706_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Samples/Vc0706_Sample/Vc0706_Sample.csproj @@ -12,12 +12,7 @@ - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Samples/Vc0706_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Samples/Vc0706_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Samples/Vc0706_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.A02yyuw/Driver/Sensors.Distance.A02yyuw.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.A02yyuw/Driver/Sensors.Distance.A02yyuw.csproj index 842ce2257c..47d3be959c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.A02yyuw/Driver/Sensors.Distance.A02yyuw.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.A02yyuw/Driver/Sensors.Distance.A02yyuw.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.A02yyuw/Samples/A02yyuw_Sample/A02yyuw_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.A02yyuw/Samples/A02yyuw_Sample/A02yyuw_Sample.csproj index e02bf33542..e518268c06 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.A02yyuw/Samples/A02yyuw_Sample/A02yyuw_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.A02yyuw/Samples/A02yyuw_Sample/A02yyuw_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.A02yyuw/Samples/A02yyuw_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.A02yyuw/Samples/A02yyuw_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.A02yyuw/Samples/A02yyuw_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Driver/Sensors.Distance.Hcsr04.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Driver/Sensors.Distance.Hcsr04.csproj index 7ff330fc1e..566bae0eaa 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Driver/Sensors.Distance.Hcsr04.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Driver/Sensors.Distance.Hcsr04.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Samples/Hcsr04_Sample/Hcsr04_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Samples/Hcsr04_Sample/Hcsr04_Sample.csproj index 27bbc15135..6b41dc3372 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Samples/Hcsr04_Sample/Hcsr04_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Samples/Hcsr04_Sample/Hcsr04_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Samples/Hcsr04_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Samples/Hcsr04_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Samples/Hcsr04_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/Sensors.Distance.MaxBotix.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/Sensors.Distance.MaxBotix.csproj index 90272b45a2..a3ec8774b5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/Sensors.Distance.MaxBotix.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/Sensors.Distance.MaxBotix.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Samples/MaxBotix_Sample/MaxBotix_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Samples/MaxBotix_Sample/MaxBotix_Sample.csproj index 61bdee36b6..c2bb8d19ff 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Samples/MaxBotix_Sample/MaxBotix_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Samples/MaxBotix_Sample/MaxBotix_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Samples/MaxBotix_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Samples/MaxBotix_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Samples/MaxBotix_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Me007ys/Driver/Sensors.Distance.Me007ys.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Me007ys/Driver/Sensors.Distance.Me007ys.csproj index d7c76cf69b..c20229bd92 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Me007ys/Driver/Sensors.Distance.Me007ys.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Me007ys/Driver/Sensors.Distance.Me007ys.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Me007ys/Samples/Me007ys_Sample/Me007ys_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Me007ys/Samples/Me007ys_Sample/Me007ys_Sample.csproj index d15cb0e535..d76a3085b5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Me007ys/Samples/Me007ys_Sample/Me007ys_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Me007ys/Samples/Me007ys_Sample/Me007ys_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Me007ys/Samples/Me007ys_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Me007ys/Samples/Me007ys_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Me007ys/Samples/Me007ys_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Sensors.Distance.Vl53l0x.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Sensors.Distance.Vl53l0x.csproj index f763dc369f..fe38ee2ca5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Sensors.Distance.Vl53l0x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Sensors.Distance.Vl53l0x.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/Vl53l0x_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/Vl53l0x_Sample.csproj index 5278996abb..65372696d8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/Vl53l0x_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/Vl53l0x_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Sensors.Environmental.Ags01Db.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Sensors.Environmental.Ags01Db.csproj index b864e28db3..8a810452b6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Sensors.Environmental.Ags01Db.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Sensors.Environmental.Ags01Db.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Samples/Ags01Db_Sample/Ags01Db_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Samples/Ags01Db_Sample/Ags01Db_Sample.csproj index 85a3c1bda1..2ac2df0086 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Samples/Ags01Db_Sample/Ags01Db_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Samples/Ags01Db_Sample/Ags01Db_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Samples/Ags01Db_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Samples/Ags01Db_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Samples/Ags01Db_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.AtlasScientificGravityDOMeter/Driver/Sensors.Environmental.AtlasScientificGravityDOMeter.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.AtlasScientificGravityDOMeter/Driver/Sensors.Environmental.AtlasScientificGravityDOMeter.csproj index a2d0d10bc0..ceef609955 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.AtlasScientificGravityDOMeter/Driver/Sensors.Environmental.AtlasScientificGravityDOMeter.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.AtlasScientificGravityDOMeter/Driver/Sensors.Environmental.AtlasScientificGravityDOMeter.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.AtlasScientificGravityDOMeter/Samples/AtlasScientificGravityDOMeter_Sample/AtlasScientificGravityDOMeter_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.AtlasScientificGravityDOMeter/Samples/AtlasScientificGravityDOMeter_Sample/AtlasScientificGravityDOMeter_Sample.csproj index 9e1d15833b..ecf74cdbed 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.AtlasScientificGravityDOMeter/Samples/AtlasScientificGravityDOMeter_Sample/AtlasScientificGravityDOMeter_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.AtlasScientificGravityDOMeter/Samples/AtlasScientificGravityDOMeter_Sample/AtlasScientificGravityDOMeter_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.AtlasScientificGravityDOMeter/Samples/AtlasScientificGravityDOMeter_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.AtlasScientificGravityDOMeter/Samples/AtlasScientificGravityDOMeter_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.AtlasScientificGravityDOMeter/Samples/AtlasScientificGravityDOMeter_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.DFRobotGravityDOMeter/Driver/Sensors.Environmental.DFRobotGravityDOMeter.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.DFRobotGravityDOMeter/Driver/Sensors.Environmental.DFRobotGravityDOMeter.csproj index b22458b238..b0c00e6ab1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.DFRobotGravityDOMeter/Driver/Sensors.Environmental.DFRobotGravityDOMeter.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.DFRobotGravityDOMeter/Driver/Sensors.Environmental.DFRobotGravityDOMeter.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.DFRobotGravityDOMeter/Samples/DFRobotGravityDOMeter_Sample/DFRobotGravityDOMeter_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.DFRobotGravityDOMeter/Samples/DFRobotGravityDOMeter_Sample/DFRobotGravityDOMeter_Sample.csproj index d4243e2215..3a8f59e13a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.DFRobotGravityDOMeter/Samples/DFRobotGravityDOMeter_Sample/DFRobotGravityDOMeter_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.DFRobotGravityDOMeter/Samples/DFRobotGravityDOMeter_Sample/DFRobotGravityDOMeter_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.DFRobotGravityDOMeter/Samples/DFRobotGravityDOMeter_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.DFRobotGravityDOMeter/Samples/DFRobotGravityDOMeter_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.DFRobotGravityDOMeter/Samples/DFRobotGravityDOMeter_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Sensors.Environmental.Ens160.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Sensors.Environmental.Ens160.csproj index 7fcdb97476..07156f4973 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Sensors.Environmental.Ens160.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Sensors.Environmental.Ens160.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/Ens160_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/Ens160_Sample.csproj index c7eb360313..951c662d8d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/Ens160_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/Ens160_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/Sensors.Environmental.MiniPID2.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/Sensors.Environmental.MiniPID2.csproj index 7a464b020d..9098aa5785 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/Sensors.Environmental.MiniPID2.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/Sensors.Environmental.MiniPID2.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MiniPID2_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MiniPID2_Sample.csproj index 5a9bd581f6..8983fe9d62 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MiniPID2_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MiniPID2_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj index c173235eaf..ea088deefc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md 10.0 Apache-2.0 @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/NextPm_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/NextPm_Sample.csproj index 47e6c979d1..a38af271e1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/NextPm_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/NextPm_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Readme.md index 4e47b49d65..21721ebed0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Readme.md +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Readme.md @@ -1,8 +1,8 @@ -# Meadow.Foundation.Sensors.Environmental.Pmsa300i +# Meadow.Foundation.Sensors.Environmental.Pmsa003i -**PMSA300I I2C particulate matter AQI sensor** +**PMSA003I I2C particulate matter AQI sensor** -The **Pmsa300i** library is included in the **Meadow.Foundation.Sensors.Environmental.Pmsa300i** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. +The **Pmsa003i** library is included in the **Meadow.Foundation.Sensors.Environmental.Pmsa003i** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. This driver is part of the [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/) peripherals library, an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT applications. @@ -14,7 +14,7 @@ To view all Wilderness Labs open-source projects, including samples, visit [gith You can install the library from within Visual studio using the the NuGet Package Manager or from the command line using the .NET CLI: -`dotnet add package Meadow.Foundation.Sensors.Environmental.Pmsa300i` +`dotnet add package Meadow.Foundation.Sensors.Environmental.Pmsa003i` ## Usage ```csharp diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Sensors.Environmental.Pmsa003i.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Sensors.Environmental.Pmsa003i.csproj index 831efdb2fe..1fba5af27d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Sensors.Environmental.Pmsa003i.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Sensors.Environmental.Pmsa003i.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -10,18 +10,18 @@ Wilderness Labs, Inc netstandard2.1 Library - Pmsa300i + Pmsa003i Wilderness Labs, Inc http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ - Meadow.Foundation.Sensors.Environmental.Pmsa300i + Meadow.Foundation.Sensors.Environmental.Pmsa003i https://github.com/WildernessLabs/Meadow.Foundation - Meadow,Meadow.Foundation,Environmental,Pmsa300i,gas,particle,particulate,matter,AQI,air,quality + Meadow,Meadow.Foundation,Environmental,Pmsa003i,gas,particle,particulate,matter,AQI,air,quality true - PMSA300I I2C particulate matter AQI sensor + PMSA003I I2C particulate matter AQI sensor - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/Pmsa003I_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/Pmsa003I_Sample.csproj index b0ced961f6..6b115a875a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/Pmsa003I_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/Pmsa003I_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Datasheet/CD_AN_SCD30_Interface_Description_D1.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Datasheet/CD_AN_SCD30_Interface_Description_D1.pdf new file mode 100644 index 0000000000..0a8c8144da Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Datasheet/CD_AN_SCD30_Interface_Description_D1.pdf differ diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Datasheet/Sensirion_CO2_Sensors_SCD30_Datasheet.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Datasheet/Sensirion_CO2_Sensors_SCD30_Datasheet.pdf new file mode 100644 index 0000000000..853cc95536 Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Datasheet/Sensirion_CO2_Sensors_SCD30_Datasheet.pdf differ diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Drivers/Scd30.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Drivers/Scd30.cs new file mode 100644 index 0000000000..8be6a78df7 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Drivers/Scd30.cs @@ -0,0 +1,19 @@ +using Meadow.Hardware; + +namespace Meadow.Foundation.Sensors.Environmental +{ + /// + /// Represents an SCD30 C02 sensor + /// + public class Scd30 : Scd30Base + { + /// + /// Create a new Scd30 object + /// + /// The I2C bus + /// The I2C address + public Scd30(II2cBus i2cBus, byte address = (byte)Addresses.Default) + : base(i2cBus, address) + { } + } +} diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Readme.md new file mode 100644 index 0000000000..3101a72a78 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Readme.md @@ -0,0 +1,114 @@ +# Meadow.Foundation.Sensors.Environmental.Scd30 + +**SCD30 I2C C02, temperature, and relative humidity sensor** + +The **Scd30** library is included in the **Meadow.Foundation.Sensors.Environmental.Scd30** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. + +This driver is part of the [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/) peripherals library, an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT applications. + +For more information on developing for Meadow, visit [developer.wildernesslabs.co](http://developer.wildernesslabs.co/). + +To view all Wilderness Labs open-source projects, including samples, visit [github.com/wildernesslabs](https://github.com/wildernesslabs/). + +## Installation + +You can install the library from within Visual studio using the the NuGet Package Manager or from the command line using the .NET CLI: + +`dotnet add package Meadow.Foundation.Sensors.Environmental.Scd30` +## Usage + +```csharp +Scd30 sensor; + +public override Task Initialize() +{ + Resolver.Log.Info("Initializing..."); + + var i2cBus = Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.Standard); + + sensor = new Scd30(i2cBus); + + var consumer = Scd30.CreateObserver( + handler: result => + { + Resolver.Log.Info($"Observer: Temp changed by threshold; new temp: {result.New.Temperature?.Celsius:N2}C, old: {result.Old?.Temperature?.Celsius:N2}C"); + }, + filter: result => + { + if (result.Old?.Temperature is { } oldTemp && + result.Old?.Humidity is { } oldHumidity && + result.New.Temperature is { } newTemp && + result.New.Humidity is { } newHumidity) + { + return ((newTemp - oldTemp).Abs().Celsius > 0.5 && + (newHumidity - oldHumidity).Percent > 0.05); + } + return false; + } + ); + + sensor?.Subscribe(consumer); + + if (sensor != null) + { + sensor.Updated += (sender, result) => + { + Resolver.Log.Info($" Concentration: {result.New.Concentration?.PartsPerMillion:N0}ppm"); + Resolver.Log.Info($" Temperature: {result.New.Temperature?.Celsius:N1}C"); + Resolver.Log.Info($" Relative Humidity: {result.New.Humidity:N0}%"); + }; + } + + //The value 5 is used purely for demonstration purposes. 2 is the sensor default. + sensor?.SetMeasurementInterval(5); + var measurementInterval = sensor?.GetMeasurementInterval(); + Resolver.Log.Info($"Measurement Interval: {measurementInterval}sec"); + + var autoSelfCalibration = sensor?.SelfCalibrationEnabled(); + Resolver.Log.Info($"Auto Self Calibration: {autoSelfCalibration}"); + + var ambientPressure = sensor?.GetAmbientPressureOffset(); + Resolver.Log.Info($"Ambient Pressure offset: {ambientPressure}mbar"); + + var altitudeOffset = sensor?.GetAltitudeOffset(); + Resolver.Log.Info($"Altitude Offset: {altitudeOffset}m"); + + var temperatureOffset = sensor?.GetTemperatureOffset(); + Resolver.Log.Info($"Temperature Offset: {temperatureOffset}C"); + + var forceCalibrationValue = sensor?.GetForceCalibrationValue(); + Resolver.Log.Info($"Force Calibration Value: {forceCalibrationValue}"); + + sensor?.StartUpdating(TimeSpan.FromSeconds(5)); + + return base.Initialize(); +} + +``` +## How to Contribute + +- **Found a bug?** [Report an issue](https://github.com/WildernessLabs/Meadow_Issues/issues) +- Have a **feature idea or driver request?** [Open a new feature request](https://github.com/WildernessLabs/Meadow_Issues/issues) +- Want to **contribute code?** Fork the [Meadow.Foundation](https://github.com/WildernessLabs/Meadow.Foundation) repository and submit a pull request against the `develop` branch + + +## Need Help? + +If you have questions or need assistance, please join the Wilderness Labs [community on Slack](http://slackinvite.wildernesslabs.co/). +## About Meadow + +Meadow is a complete, IoT platform with defense-grade security that runs full .NET applications on embeddable microcontrollers and Linux single-board computers including Raspberry Pi and NVIDIA Jetson. + +### Build + +Use the full .NET platform and tooling such as Visual Studio and plug-and-play hardware drivers to painlessly build IoT solutions. + +### Connect + +Utilize native support for WiFi, Ethernet, and Cellular connectivity to send sensor data to the Cloud and remotely control your peripherals. + +### Deploy + +Instantly deploy and manage your fleet in the cloud for OtA, health-monitoring, logs, command + control, and enterprise backend integrations. + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Scd30Base.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Scd30Base.Enums.cs new file mode 100644 index 0000000000..4579c88091 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Scd30Base.Enums.cs @@ -0,0 +1,45 @@ +namespace Meadow.Foundation.Sensors.Environmental +{ + partial class Scd30Base + { + /// + /// Valid I2C addresses for the sensor + /// + public enum Addresses : byte + { + /// + /// Bus address 0x62 + /// + Address_0x61 = 0x61, + /// + /// Default bus address + /// + Default = Address_0x61 + } + + /// + /// Register addresses + /// + public enum RegisterAddresses : ushort + { + //Basic Commands + StartPeriodicMeasurement = 0x0010, + StopPeriodicMeasurement = 0x0104, + ReadMeasurement = 0x0300, + ReadFirmwareVersion = 0xd100, + + //On-chip output signal compensation + SetTemperatureOffset = 0x5403, + SetAltitude = 0x5102, + + //Field calibration + SetForcedRecalibration = 0x5204, + AutoSelfCalibration = 0x5306, + + //Advanced features + SetMeasurementInterval = 0x4600, + IsDataReady = 0x0202, + SoftRest = 0xd304 + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Scd30Base.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Scd30Base.cs new file mode 100644 index 0000000000..83a41f0432 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Scd30Base.cs @@ -0,0 +1,381 @@ +using Meadow.Hardware; +using Meadow.Peripherals.Sensors; +using Meadow.Peripherals.Sensors.Atmospheric; +using Meadow.Peripherals.Sensors.Environmental; +using Meadow.Units; +using System; +using System.Buffers.Binary; +using System.Threading; +using System.Threading.Tasks; +using Gapotchenko.FX.Data.Integrity.Checksum; + +namespace Meadow.Foundation.Sensors.Environmental +{ + /// + /// Base class for SCD30 C02 sensor + /// + public abstract partial class Scd30Base + : ByteCommsSensorBase<(Concentration? Concentration, + Units.Temperature? Temperature, + RelativeHumidity? Humidity)>, + ITemperatureSensor, IHumiditySensor, ICO2ConcentrationSensor, II2cPeripheral + { + private event EventHandler> _temperatureHandlers = default!; + private event EventHandler> _humidityHandlers = default!; + private event EventHandler> _concentrationHandlers = default!; + + event EventHandler> ISamplingSensor.Updated + { + add => _temperatureHandlers += value; + remove => _temperatureHandlers -= value; + } + + event EventHandler> ISamplingSensor.Updated + { + add => _humidityHandlers += value; + remove => _humidityHandlers -= value; + } + + event EventHandler> ISamplingSensor.Updated + { + add => _concentrationHandlers += value; + remove => _concentrationHandlers -= value; + } + + /// + /// The current C02 concentration value + /// + public Concentration? CO2Concentration => Conditions.Concentration; + + /// + /// The current temperature + /// + public Units.Temperature? Temperature => Conditions.Temperature; + + /// + /// The current humidity + /// + public RelativeHumidity? Humidity => Conditions.Humidity; + + /// + /// The default I2C address for the peripheral + /// + public byte DefaultI2cAddress => (byte)Addresses.Default; + + /// + /// Create a new SCD30Base object + /// + /// + /// The constructor sends the stop periodic updates method otherwise + /// the sensor may not respond to new commands + /// + /// The I2C bus + /// The I2C address + public Scd30Base(II2cBus i2cBus, byte address = (byte)Addresses.Default) + : base(i2cBus, address, readBufferSize: 18, writeBufferSize: 16) + { + } + + /// + /// Soft reset the device + /// + public Task PerformSoftReset() + { + SendCommand(RegisterAddresses.SoftRest); + return Task.Delay(30); + } + + /// + /// Is there sensor measurement data ready + /// + /// True if ready + /// TODO + protected bool IsDataReady() + { + return ReadRegister(RegisterAddresses.IsDataReady)[1] == 1; + } + + /// + /// Set the interval between measurements of the sensor itself. + /// Sensor reads data between 2 or 1800 seconds. + /// + public void SetMeasurementInterval(ushort interval) + { + if (interval is < 2 or > 1800) + { + throw new ArgumentOutOfRangeException(nameof(interval), "Interval must be between 2 and 1800 seconds"); + } + + SendCommand(RegisterAddresses.SetMeasurementInterval, interval); + } + + /// + /// Get the interval between measurements of the sensor itself. + /// Sensor reads data between 2 or 1800 seconds. + /// + public ushort GetMeasurementInterval() + { + return ReadRegisterAsUshort(RegisterAddresses.SetMeasurementInterval); + } + + /// + /// Get the status of the automatic self calibration + /// + /// True if auto calibration is enabled + public bool SelfCalibrationEnabled() + { + return ReadRegister(RegisterAddresses.AutoSelfCalibration)[1] == 1; + } + + /// + /// Enables or disables the automatic self calibration + /// + /// True if auto read from register is the same as given + protected bool SetAutoCalibration(bool enabled) + { + var value = enabled ? (ushort)1 : (ushort)0; + SendCommand(RegisterAddresses.AutoSelfCalibration, value); + return ReadRegister(RegisterAddresses.AutoSelfCalibration)[1] == value; + } + + /// + /// Starts measuring sensor data. + /// + /// + /// The sensor updates based on the measurement interval between 2 and 1800 seconds. + /// Its recommended to choose an update interval between that. + /// You can change the measurement interval later with . + /// + public override void StartUpdating(TimeSpan? updateInterval = null) + { + SendCommand(RegisterAddresses.StartPeriodicMeasurement, 0); + base.StartUpdating(updateInterval); + } + + /// + /// Starts measuring sensor data. + /// + /// + /// The sensor updates based on the measurement interval between 2 and 1800 seconds. + /// Its recommended to choose an update interval between that. + /// You can change the measurement interval later with . + /// + /// + /// Optional parameter to set the ambient pressure in mBar. + /// + public void StartUpdating(ushort ambientPressure, TimeSpan updateInterval) + { + SendCommand(RegisterAddresses.StartPeriodicMeasurement, ambientPressure); + base.StartUpdating(updateInterval); + } + + /// + /// Gets the ambient pressure setting used when measuring started. + /// + public ushort GetAmbientPressureOffset() + { + return ReadRegisterAsUshort(RegisterAddresses.StartPeriodicMeasurement); + } + + /// + /// Sets the Altitude used for ambient pressure calibration. + /// This value is stored on the sensor, even after reboot. + /// + /// Altitude in meters above sea level. + public void SetAltitudeOffset(ushort altitude) + { + SendCommand(RegisterAddresses.SetAltitude, altitude); + } + + /// + /// Gets the Altitude used for ambient pressure calibration. + /// + public ushort GetAltitudeOffset() + { + return ReadRegisterAsUshort(RegisterAddresses.SetAltitude); + } + + /// + /// Sets the temperature to set in hundredths of degrees, used for temperature compensation. + /// + public void SetTemperatureOffset(ushort offset) + { + SendCommand(RegisterAddresses.SetTemperatureOffset, offset); + } + + /// + /// Get the temperature to set in hundredths of degrees, used for temperature compensation. + /// + public ushort GetTemperatureOffset() + { + return ReadRegisterAsUshort(RegisterAddresses.SetTemperatureOffset); + } + + /// + /// Forces the sensor to recalibrate it's CO2 sensor. + /// + /// + /// The calibration value between 400 and 2000 ppm. + /// This value is saved in the sensor, even after reboot. + /// + public void ForceCalibration(ushort reference) + { + if (reference is < 400 or > 2000) + { + throw new ArgumentOutOfRangeException(nameof(reference), "Reference must be between 400 and 2000 ppm"); + } + + SendCommand(RegisterAddresses.SetForcedRecalibration, reference); + } + + /// + /// Get the value used for forced recalibration. + /// + public ushort GetForceCalibrationValue() + { + return ReadRegisterAsUshort(RegisterAddresses.SetForcedRecalibration); + } + + /// + /// Stop the sensor from sampling + /// + private void StopPeriodicUpdates() + { + SendCommand(RegisterAddresses.StopPeriodicMeasurement); + } + + /// + /// Stop updating the sensor + /// + public override void StopUpdating() + { + StopPeriodicUpdates(); + base.StopUpdating(); + } + + private ushort ReadRegisterAsUshort(RegisterAddresses registerAddresses) + { + var result = ReadRegister(registerAddresses); + return BinaryPrimitives.ReadUInt16BigEndian(result[..2]); + } + + private Span ReadRegister(RegisterAddresses registerAddresses, ushort count = 2) + { + SendCommand(registerAddresses); + Thread.Sleep(4); + BusComms.Read(ReadBuffer.Span[..count]); + return ReadBuffer.Span[..count]; + } + + private void SendCommand(RegisterAddresses command, ushort value) + { + var buffer = new byte[5]; + buffer[0] = (byte)((ushort)command >> 8); + buffer[1] = (byte)(ushort)command; + buffer[2] = (byte)(value >> 8); + buffer[3] = (byte)value; + buffer[4] = CalculateCrc8Checksum(buffer[2..4]); + + BusComms.Write(buffer); + } + + private static byte CalculateCrc8Checksum(Span data) + { + var crc8 = new CustomCrc8(0x31, 0xFF, false, false, 0x00); + return crc8.ComputeChecksum(data); + } + + private void SendCommand(RegisterAddresses command) + { + var data = new byte[2]; + data[0] = (byte)((ushort)command >> 8); + data[1] = (byte)(ushort)command; + + BusComms.Write(data); + } + + /// + /// Get Scd30 sensor values. + /// + protected override async Task<(Concentration? Concentration, Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() + { + while (IsDataReady() == false) + { + await Task.Delay(4); + } + + (Concentration Concentration, Units.Temperature Temperature, RelativeHumidity Humidity) conditions; + + SendCommand(RegisterAddresses.ReadMeasurement); + Thread.Sleep(4); + + BusComms.Read(ReadBuffer.Span[..18]); + + for (var i = 0; i < 18; i += 3) + { + if (CalculateCrc8Checksum(ReadBuffer.Span[i..(i + 2)]) != ReadBuffer.Span[i + 2]) + { + throw new Exception("Bad CRC"); + } + } + + var conversionBuffer = new byte[4]; + + ReadBuffer.Span[..4].CopyTo(conversionBuffer); + Array.Reverse(conversionBuffer); + var value = BitConverter.ToSingle(conversionBuffer[..4]); + + conditions.Concentration = new Concentration(value, Units.Concentration.UnitType.PartsPerMillion); + + ReadBuffer.Span[6..10].CopyTo(conversionBuffer); + Array.Reverse(conversionBuffer); + value = BitConverter.ToSingle(conversionBuffer[..4]); + + conditions.Temperature = new Units.Temperature(value, Units.Temperature.UnitType.Celsius); + + ReadBuffer.Span[12..16].CopyTo(conversionBuffer); + Array.Reverse(conversionBuffer); + value = BitConverter.ToSingle(conversionBuffer[..4]); + + conditions.Humidity = new RelativeHumidity(value, RelativeHumidity.UnitType.Percent); + + return conditions; + } + + /// + /// Raise change events for subscribers + /// + /// The change result with the current sensor data + protected void RaiseChangedAndNotify(IChangeResult<(Concentration? Concentration, Units.Temperature? Temperature, RelativeHumidity? Humidity)> changeResult) + { + if (changeResult.New.Temperature is { } temperature) + { + _temperatureHandlers?.Invoke(this, + new ChangeResult(temperature, changeResult.Old?.Temperature)); + } + + if (changeResult.New.Humidity is { } humidity) + { + _humidityHandlers?.Invoke(this, + new ChangeResult(humidity, changeResult.Old?.Humidity)); + } + + if (changeResult.New.Concentration is { } concentration) + { + _concentrationHandlers?.Invoke(this, + new ChangeResult(concentration, changeResult.Old?.Concentration)); + } + + base.RaiseEventsAndNotify(changeResult); + } + + async Task ISensor.Read() + => (await Read()).Temperature!.Value; + + async Task ISensor.Read() + => (await Read()).Humidity!.Value; + + async Task ISensor.Read() + => (await Read()).Concentration!.Value; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Sensors.Environmental.Scd30.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Sensors.Environmental.Scd30.csproj new file mode 100644 index 0000000000..29701eab8d --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Driver/Sensors.Environmental.Scd30.csproj @@ -0,0 +1,30 @@ + + + 1.11.0 + Readme.md + enable + 10.0 + Apache-2.0 + true + icon.png + Wilderness Labs, Inc + netstandard2.1 + Library + Scd30 + Wilderness Labs, Inc + http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ + Meadow.Foundation.Sensors.Environmental.Scd30 + https://github.com/WildernessLabs/Meadow.Foundation + Meadow,Meadow.Foundation,Environmental,SCD30,gas,c02,temperature,relative,humidity + true + SCD30 I2C C02, temperature, and relative humidity sensor + + + + + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Samples/Scd30_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Samples/Scd30_Sample/MeadowApp.cs new file mode 100644 index 0000000000..7353ad2d06 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Samples/Scd30_Sample/MeadowApp.cs @@ -0,0 +1,82 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Sensors.Environmental; +using System; +using System.Threading.Tasks; + +namespace MeadowApp +{ + // Change F7FeatherV2 to F7FeatherV1 for V1.x boards + public class MeadowApp : App + { + // + + Scd30 sensor; + + public override Task Initialize() + { + Resolver.Log.Info("Initializing..."); + + var i2cBus = Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.Standard); + + sensor = new Scd30(i2cBus); + + var consumer = Scd30.CreateObserver( + handler: result => + { + Resolver.Log.Info($"Observer: Temp changed by threshold; new temp: {result.New.Temperature?.Celsius:N2}C, old: {result.Old?.Temperature?.Celsius:N2}C"); + }, + filter: result => + { + if (result.Old?.Temperature is { } oldTemp && + result.Old?.Humidity is { } oldHumidity && + result.New.Temperature is { } newTemp && + result.New.Humidity is { } newHumidity) + { + return ((newTemp - oldTemp).Abs().Celsius > 0.5 && + (newHumidity - oldHumidity).Percent > 0.05); + } + return false; + } + ); + + sensor?.Subscribe(consumer); + + if (sensor != null) + { + sensor.Updated += (sender, result) => + { + Resolver.Log.Info($" Concentration: {result.New.Concentration?.PartsPerMillion:N0}ppm"); + Resolver.Log.Info($" Temperature: {result.New.Temperature?.Celsius:N1}C"); + Resolver.Log.Info($" Relative Humidity: {result.New.Humidity:N0}%"); + }; + } + + //The value 5 is used purely for demonstration purposes. 2 is the sensor default. + sensor?.SetMeasurementInterval(5); + var measurementInterval = sensor?.GetMeasurementInterval(); + Resolver.Log.Info($"Measurement Interval: {measurementInterval}sec"); + + var autoSelfCalibration = sensor?.SelfCalibrationEnabled(); + Resolver.Log.Info($"Auto Self Calibration: {autoSelfCalibration}"); + + var ambientPressure = sensor?.GetAmbientPressureOffset(); + Resolver.Log.Info($"Ambient Pressure offset: {ambientPressure}mbar"); + + var altitudeOffset = sensor?.GetAltitudeOffset(); + Resolver.Log.Info($"Altitude Offset: {altitudeOffset}m"); + + var temperatureOffset = sensor?.GetTemperatureOffset(); + Resolver.Log.Info($"Temperature Offset: {temperatureOffset}C"); + + var forceCalibrationValue = sensor?.GetForceCalibrationValue(); + Resolver.Log.Info($"Force Calibration Value: {forceCalibrationValue}"); + + sensor?.StartUpdating(TimeSpan.FromSeconds(5)); + + return base.Initialize(); + } + + // + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Samples/Scd30_Sample/Scd30_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Samples/Scd30_Sample/Scd30_Sample.csproj new file mode 100644 index 0000000000..086ec2bbf6 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd30/Samples/Scd30_Sample/Scd30_Sample.csproj @@ -0,0 +1,12 @@ + + + netstandard2.1 + true + Library + App + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Sensors.Environmental.Scd4x.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Sensors.Environmental.Scd4x.csproj index 11168072da..9857206643 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Sensors.Environmental.Scd4x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Sensors.Environmental.Scd4x.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd40_Sample/Scd40_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd40_Sample/Scd40_Sample.csproj index 55c575a614..a8c2a05c0a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd40_Sample/Scd40_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd40_Sample/Scd40_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd40_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd40_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd40_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd41_Sample/Scd41_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd41_Sample/Scd41_Sample.csproj index 55c575a614..a8c2a05c0a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd41_Sample/Scd41_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd41_Sample/Scd41_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd41_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd41_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd41_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Sensors.Environmental.Y4000.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Sensors.Environmental.Y4000.csproj index d7f951ee25..a23026b06e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Sensors.Environmental.Y4000.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Sensors.Environmental.Y4000.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,7 +22,7 @@ - - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Samples/Y4000_Sample/Y4000_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Samples/Y4000_Sample/Y4000_Sample.csproj index 4838c5db39..5892a17214 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Samples/Y4000_Sample/Y4000_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Samples/Y4000_Sample/Y4000_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Samples/Y4000_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Samples/Y4000_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Samples/Y4000_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Bg95M3/Driver/Sensors.Gnss.Bg95M3.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Bg95M3/Driver/Sensors.Gnss.Bg95M3.csproj index efa5c9bc6b..3fb7b6679d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Bg95M3/Driver/Sensors.Gnss.Bg95M3.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Bg95M3/Driver/Sensors.Gnss.Bg95M3.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Bg95M3/Samples/Bg95M3_Sample/Bg95M3_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Bg95M3/Samples/Bg95M3_Sample/Bg95M3_Sample.csproj index 905016fdfd..c8901f75f6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Bg95M3/Samples/Bg95M3_Sample/Bg95M3_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Bg95M3/Samples/Bg95M3_Sample/Bg95M3_Sample.csproj @@ -9,8 +9,8 @@ App - - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Bg95M3/Samples/Bg95M3_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Bg95M3/Samples/Bg95M3_Sample/meadow.config.yaml deleted file mode 100644 index 19afb112db..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Bg95M3/Samples/Bg95M3_Sample/meadow.config.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# -# Device specific config. -# -Device: - # - # Name of the device on the network. - # - Name: CellGnssBasics - - # On the Meadow F7v2 Feather, pins I9, H13, and C7 correspond to D00, D01, and D10, respectively. - # If you use different pins, you should reserve the corresponding ones, according to the Meadow F7v2 Feather datasheet. - # For instance, if you want to utilize the A02 Meadow F7v2 Feather pin to turn on the module, - # you should reserve the corresponding A3 MCU pin, instead of C7. - ReservedPins: I9;H13;C7 -# -# Network configuration. -# -Network: - # Which interface should be used? - # - DefaultInterface: Cell diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj index 5219bf8ca4..d00f01b7a8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -23,7 +23,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Samples/Mt3339_Sample/Mt3339_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Samples/Mt3339_Sample/Mt3339_Sample.csproj index c6495fffdb..28b95e9b6d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Samples/Mt3339_Sample/Mt3339_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Samples/Mt3339_Sample/Mt3339_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Samples/Mt3339_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Samples/Mt3339_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Samples/Mt3339_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/Sensors.Gnss.NeoM8.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/Sensors.Gnss.NeoM8.csproj index 0d4a7aef85..69dfe15db5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/Sensors.Gnss.NeoM8.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/Sensors.Gnss.NeoM8.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Samples/NeoM8_Sample/NeoM8_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Samples/NeoM8_Sample/NeoM8_Sample.csproj index d0ca5dd490..0b8e040b21 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Samples/NeoM8_Sample/NeoM8_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Samples/NeoM8_Sample/NeoM8_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Samples/NeoM8_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Samples/NeoM8_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Samples/NeoM8_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/Sensors.Hid.ANONavigationEncoder.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/Sensors.Hid.ANONavigationEncoder.csproj index c7571673c7..0feed5a1f3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/Sensors.Hid.ANONavigationEncoder.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/Sensors.Hid.ANONavigationEncoder.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/ANONavigationEncoder_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/ANONavigationEncoder_Sample.csproj index ca20a33f28..5aed4caedb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/ANONavigationEncoder_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/ANONavigationEncoder_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/Sensors.Hid.As5013.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/Sensors.Hid.As5013.csproj index 8250683e99..5a670bdfa6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/Sensors.Hid.As5013.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/Sensors.Hid.As5013.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Samples/As5013_Sample/As5013_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Samples/As5013_Sample/As5013_Sample.csproj index 5954e84149..fb22ad7bb1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Samples/As5013_Sample/As5013_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Samples/As5013_Sample/As5013_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Samples/As5013_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Samples/As5013_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Samples/As5013_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/Sensors.Hid.Bbq10Keyboard.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/Sensors.Hid.Bbq10Keyboard.csproj index 0b4d8e9857..707d1717a5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/Sensors.Hid.Bbq10Keyboard.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/Sensors.Hid.Bbq10Keyboard.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Samples/Bbq10Keyboard_Sample/Bbq10Keyboard_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Samples/Bbq10Keyboard_Sample/Bbq10Keyboard_Sample.csproj index 32bc0c2292..5230076bae 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Samples/Bbq10Keyboard_Sample/Bbq10Keyboard_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Samples/Bbq10Keyboard_Sample/Bbq10Keyboard_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Samples/Bbq10Keyboard_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Samples/Bbq10Keyboard_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Samples/Bbq10Keyboard_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Keyboard.KeyboardKey.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Keyboard.KeyboardKey.cs index 8f55749296..43afbe3828 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Keyboard.KeyboardKey.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Keyboard.KeyboardKey.cs @@ -45,17 +45,17 @@ internal void SetState(bool newState) case InterruptMode.EdgeRising: if (State) { - RaiseChangedAndNotify(new DigitalPortResult(new DigitalState(State, Environment.TickCount), null)); + RaiseChangedAndNotify(new DigitalPortResult(new DigitalState(State, DateTime.UtcNow), null)); } break; case InterruptMode.EdgeFalling: if (!State) { - RaiseChangedAndNotify(new DigitalPortResult(new DigitalState(State, Environment.TickCount), null)); + RaiseChangedAndNotify(new DigitalPortResult(new DigitalState(State, DateTime.UtcNow), null)); } break; case InterruptMode.EdgeBoth: - RaiseChangedAndNotify(new DigitalPortResult(new DigitalState(State, Environment.TickCount), null)); + RaiseChangedAndNotify(new DigitalPortResult(new DigitalState(State, DateTime.UtcNow), null)); break; } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Keyboard.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Keyboard.cs index 7864828127..60ee38043e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Keyboard.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Keyboard.cs @@ -1,6 +1,6 @@ using Meadow.Hardware; using System; -using System.Collections.Generic; +using System.Collections.Concurrent; using System.Linq; using System.Threading; @@ -12,7 +12,7 @@ namespace Meadow.Foundation.Sensors.Hid; public partial class Keyboard : IDigitalInterruptController, IDigitalOutputController, IDisposable { private static Thread? _thread = null; - private static Dictionary _keys = new Dictionary(); + private static ConcurrentDictionary _keys = new(); private bool _keepScanning = false; private bool _isDisposed = false; @@ -94,7 +94,7 @@ public IDigitalInterruptPort CreateDigitalInterruptPort(IPin pin, InterruptMode var ci = kp.SupportedChannels?.First() as IDigitalChannelInfo ?? throw new ArgumentException("Pin is not a Digital channel"); var kbk = new KeyboardKey(kp, ci, interruptMode); - _keys.Add(key, kbk); + _keys[key] = kbk; return kbk; } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Sensors.Hid.Keyboard.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Sensors.Hid.Keyboard.csproj index e4f85056df..45c2a7d91b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Sensors.Hid.Keyboard.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Sensors.Hid.Keyboard.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md 10.0 Apache-2.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Sensors.Hid.Mpr121.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Sensors.Hid.Mpr121.csproj index efd6f05bde..b96bbe1ce3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Sensors.Hid.Mpr121.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Sensors.Hid.Mpr121.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Samples/Mpr121_Sample/Mpr121_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Samples/Mpr121_Sample/Mpr121_Sample.csproj index 1d601e3392..93a9744f1c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Samples/Mpr121_Sample/Mpr121_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Samples/Mpr121_Sample/Mpr121_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Samples/Mpr121_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Samples/Mpr121_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Samples/Mpr121_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Readme.md index e8c2d0bc01..18a22de738 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Readme.md +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Readme.md @@ -18,7 +18,7 @@ You can install the library from within Visual studio using the the NuGet Packag ## Usage ```csharp -Tsc2004 touchScreen; +private Tsc2004 touchScreen; public override Task Initialize() { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Sensors.Hid.Tsc2004.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Sensors.Hid.Tsc2004.csproj index e7e5a567ce..6580fbee62 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Sensors.Hid.Tsc2004.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Sensors.Hid.Tsc2004.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/MeadowApp.cs index 76eacf5dcd..e5e8df8d99 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/MeadowApp.cs @@ -7,13 +7,13 @@ using System.Threading; using System.Threading.Tasks; -namespace Bbq10Keyboard_Sample +namespace Tsc2004_Sample { public class MeadowApp : App { // - Tsc2004 touchScreen; + private Tsc2004 touchScreen; public override Task Initialize() { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/Tsc2004_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/Tsc2004_Sample.csproj index 01c5347fe9..741986e56a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/Tsc2004_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/Tsc2004_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Sensors.Hid.WiiExtensionControllers.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Sensors.Hid.WiiExtensionControllers.csproj index 073005c659..de130d9873 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Sensors.Hid.WiiExtensionControllers.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Sensors.Hid.WiiExtensionControllers.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/NesClassicController_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/NesClassicController_Sample.csproj index 5908fd566b..8e17ae439c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/NesClassicController_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/NesClassicController_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/SnesClassicController_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/SnesClassicController_Sample.csproj index 5908fd566b..8e17ae439c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/SnesClassicController_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/SnesClassicController_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/WiiClassicControllerPro_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/WiiClassicControllerPro_Sample.csproj index 5908fd566b..8e17ae439c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/WiiClassicControllerPro_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/WiiClassicControllerPro_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/WiiClassicController_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/WiiClassicController_Sample.csproj index 5908fd566b..8e17ae439c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/WiiClassicController_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/WiiClassicController_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/WiiNunchuck_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/WiiNunchuck_Sample.csproj index 5908fd566b..8e17ae439c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/WiiNunchuck_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/WiiNunchuck_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Datasheet/XPT2046.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Datasheet/XPT2046.pdf new file mode 100644 index 0000000000..f625c06d33 Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Datasheet/XPT2046.pdf differ diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Readme.md similarity index 72% rename from Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Readme.md rename to Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Readme.md index 24724d12d2..d4f2fa725f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Readme.md +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Readme.md @@ -1,8 +1,8 @@ -# Meadow.Foundation.Sensors.Power.Ina260 +# Meadow.Foundation.Sensors.Hid.Xpt2046 -**INA260 I2C current and power monitor** +**Xpt2046 SPI, 4-wire resistive touch screen controller** -The **Ina260** library is included in the **Meadow.Foundation.Sensors.Power.Ina260** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. +The **Xpt2046** library is included in the **Meadow.Foundation.Sensors.Hid.Xpt2046** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. This driver is part of the [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/) peripherals library, an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT applications. @@ -14,34 +14,31 @@ To view all Wilderness Labs open-source projects, including samples, visit [gith You can install the library from within Visual studio using the the NuGet Package Manager or from the command line using the .NET CLI: -`dotnet add package Meadow.Foundation.Sensors.Power.Ina260` +`dotnet add package Meadow.Foundation.Sensors.Hid.Xpt2046` ## Usage ```csharp -Ina260 ina260; +private Xpt2046 touchScreen; public override Task Initialize() { Resolver.Log.Info("Initialize..."); - var bus = Device.CreateI2cBus(); - ina260 = new Ina260(bus); + var i2cBus = Device.CreateI2cBus(I2cBusSpeed.Fast); - Resolver.Log.Info($"-- INA260 Sample App ---"); - Resolver.Log.Info($"Manufacturer: {ina260.ManufacturerID}"); - Resolver.Log.Info($"Die: {ina260.DieID}"); - ina260.Updated += (s, v) => - { - Resolver.Log.Info($"{v.New.Item2}V @ {v.New.Item3}A"); - }; + touchScreen = new Xpt2046( + Device.CreateSpiBus(), + Device.Pins.D04.CreateDigitalInterruptPort(InterruptMode.EdgeFalling, ResistorMode.InternalPullUp), + Device.Pins.D05.CreateDigitalOutputPort(true)); + + touchScreen.TouchDown += TouchScreen_TouchDown; return Task.CompletedTask; } -public override Task Run() +private void TouchScreen_TouchDown(ITouchScreen sender, TouchPoint point) { - ina260.StartUpdating(TimeSpan.FromSeconds(2)); - return Task.CompletedTask; + Resolver.Log.Info($"Touch at location: X:{point.ScreenX}, Y:{point.ScreenY}"); } ``` diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/ICs.IOExpanders.Ft232h.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Sensors.Hid.Xpt2046.csproj similarity index 70% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/ICs.IOExpanders.Ft232h.csproj rename to Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Sensors.Hid.Xpt2046.csproj index 7d8db51201..43828d30c2 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ft232h/Driver/ICs.IOExpanders.Ft232h.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Sensors.Hid.Xpt2046.csproj @@ -1,7 +1,7 @@ - 1.9.0 Readme.md + 1.11.0 enable 10.0 Apache-2.0 @@ -10,18 +10,18 @@ Wilderness Labs, Inc netstandard2.1 Library - Ft232h + Xpt2046 Wilderness Labs, Inc http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ - Meadow.Foundation.ICs.IOExpanders.Ft232h + Meadow.Foundation.Sensors.Hid.Xpt2046 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation,IOExpanders,expander,IO,Ft232h + Meadow.Foundation,touch,screen,display,capacitive,XPT2046 true - Ft232h USB IOExpander for GPIO, I2C, SPI on Windows + Xpt2046 SPI, 4-wire resistive touch screen controller - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Xpt2046.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Xpt2046.Enums.cs new file mode 100644 index 0000000000..4695a3b457 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Xpt2046.Enums.cs @@ -0,0 +1,26 @@ +using System; + +namespace Meadow.Foundation.Sensors.Hid; + +public partial class Xpt2046 +{ + private enum Mode + { + Bits_12 = 0, + Bits_8 = 8 + } + + private enum VoltageReference + { + SingleEnded = 0, + Differential = 4 + } + + [Flags] + private enum PowerState + { + PowerDown = 0, + Adc = 1, + Reference = 2, + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Xpt2046.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Xpt2046.cs new file mode 100644 index 0000000000..98bc62514a --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Xpt2046.cs @@ -0,0 +1,242 @@ +using Meadow.Hardware; +using Meadow.Peripherals.Displays; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; + +namespace Meadow.Foundation.Sensors.Hid +{ + /// + /// Represents an XPT2046 4-wire touch screen controller + /// + public partial class Xpt2046 : ICalibratableTouchscreen + { + /// + public event TouchEventHandler? TouchDown = null; + /// + public event TouchEventHandler? TouchUp = null; + /// + public event TouchEventHandler? TouchClick = null; + /// + public event TouchEventHandler? TouchMoved = null; + + private const int SamplePeriodMilliseconds = 100; + private const byte StartBit = 0x80; + + private readonly ISpiBus spiBus; + private readonly IDigitalInterruptPort touchInterrupt; + private readonly IDigitalOutputPort? chipSelect = null; + private Timer sampleTimer; + private bool isSampling = false; + private bool firstTouch = true; + private TouchPoint? lastTouchPosition; + private TouchPoint? penultimatePosition; + private float mX, mY, cX, cY; // linear calibration coefficeints + + /// + public RotationType Rotation { get; } + /// + public bool IsCalibrated { get; private set; } + + /// + public bool IsTouched => isSampling; + + /// + /// Creates an instance of an Xpt2046 + /// + /// The ISpiBus connected to the touchscreen controller + /// The interrupt port connected to the touchscreen controller + /// The chip select port for the touchscreen controller + /// The touchscreen rotation (not the display rotation) + public Xpt2046( + ISpiBus spiBus, + IDigitalInterruptPort touchInterrupt, + IDigitalOutputPort? chipSelect, + RotationType rotation = RotationType.Normal) + { + sampleTimer = new Timer(SampleTimerProc, null, -1, -1); + + this.spiBus = spiBus; + this.touchInterrupt = touchInterrupt; + this.chipSelect = chipSelect; + Rotation = rotation; + + touchInterrupt.Changed += OnTouchInterrupt; + } + + private TouchPoint ConvertRawToTouchPoint(ushort rawX, ushort rawY, ushort rawZ) + { + int x, y; + + // rotate + switch (Rotation) + { + case RotationType._90Degrees: + x = 4095 - rawY; + y = rawX; + break; + case RotationType._180Degrees: + x = 4095 - rawX; + y = 4095 - rawY; + break; + case RotationType._270Degrees: + x = rawY; + y = 4095 - rawX; + break; + default: + x = rawX; + y = rawY; + break; + } + + if (!IsCalibrated) + { + return TouchPoint.FromRawData(x, y, rawZ); + } + + // scale for calibration + var scaledX = ((x * mX) + cX); + var scaledY = ((y * mY) + cY); + + return TouchPoint.FromScreenData((int)scaledX, (int)scaledY, rawZ, rawX, rawY, rawZ); + } + + private void OnTouchInterrupt(object sender, DigitalPortResult e) + { + // high is not touched, low is touched + if (!isSampling) + { + sampleTimer.Change(0, -1); + } + } + + private void SampleTimerProc(object o) + { + if (touchInterrupt.State) + { + // the actual "last" reading for up is often garbage, so go back one before that if we have it + if (penultimatePosition != null) + { + TouchUp?.Invoke(this, penultimatePosition.Value); + } + else if (lastTouchPosition != null) + { + TouchUp?.Invoke(this, lastTouchPosition.Value); + } + isSampling = false; + firstTouch = true; + lastTouchPosition = null; + penultimatePosition = null; + return; + } + + isSampling = true; + + var z = ReadZ(); + var x = ReadX(); + var y = ReadY(); + EnableIrq(); + + var position = ConvertRawToTouchPoint(x, y, z); + + try + { + if (firstTouch) + { + firstTouch = false; + lastTouchPosition = position; + if (lastTouchPosition != null) + { + TouchDown?.Invoke(this, lastTouchPosition.Value); + } + } + else + { + if (!position.Equals(lastTouchPosition)) + { + penultimatePosition = lastTouchPosition; + lastTouchPosition = position; + if (lastTouchPosition != null) + { + TouchMoved?.Invoke(this, lastTouchPosition.Value); + } + } + } + } + catch (Exception ex) + { + Resolver.Log.Warn($"Touchscreen event handler error: {ex.Message}"); + // ignore any unhandled handler exceptions + } + + sampleTimer.Change(SamplePeriodMilliseconds, -1); + } + + private ushort ReadX() + { + return ReadChannel(Channel.X); + } + + private ushort ReadY() + { + return ReadChannel(Channel.Y); + } + + private ushort ReadZ() + { + return ReadChannel(Channel.Z2); + } + + private void EnableIrq() + { + ReadChannel(Channel.Temp, PowerState.PowerDown); + } + + private ushort ReadChannel(Channel channel, PowerState postSamplePowerState = PowerState.Adc, Mode mode = Mode.Bits_12, VoltageReference vref = VoltageReference.Differential) + { + Span txBuffer = stackalloc byte[3]; + Span rxBuffer = stackalloc byte[3]; + + txBuffer[0] = (byte)(StartBit | (byte)channel | (byte)mode | (byte)vref | (byte)postSamplePowerState); + + spiBus.Exchange(chipSelect, txBuffer, rxBuffer); + + return (ushort)((rxBuffer[1] >> 3) << 8 | (rxBuffer[2] >> 3)); + } + + /// + public void SetCalibrationData(IEnumerable data) + { + var points = data.ToArray(); + if (points.Length != 2) { throw new ArgumentException("This touchscreen requires exactly 2 calibration points"); } + + // basic point validation + if (points[1].RawX - points[0].RawX == 0 || + points[1].RawY - points[0].RawY == 0 || + points[1].ScreenX - points[0].ScreenX == 0 || + points[1].ScreenY - points[0].ScreenY == 0) + { + throw new ArgumentOutOfRangeException("Invalid calibration data"); + } + + // simple 2-point linear calibration (fine for small screens) + + mX = (points[1].ScreenX - points[0].ScreenX) / (float)(points[1].RawX - points[0].RawX); + cX = points[0].ScreenX - (points[0].RawX * mX); + mY = (points[1].ScreenY - points[0].ScreenY) / (float)(points[1].RawY - points[0].RawY); + cY = points[0].ScreenY - (points[0].RawY * mY); + + IsCalibrated = true; + } + + private enum Channel : byte + { + Temp = 0x00, + X = 1 << 4, + Z1 = 3 << 4, + Z2 = 4 << 4, + Y = 5 << 4, + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Samples/Xpt2046_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Samples/Xpt2046_Sample/MeadowApp.cs new file mode 100644 index 0000000000..cd3a949a1a --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Samples/Xpt2046_Sample/MeadowApp.cs @@ -0,0 +1,38 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Sensors.Hid; +using Meadow.Hardware; +using System.Threading.Tasks; + +namespace Xpt2046_Sample +{ + public class MeadowApp : App + { + // + + private Xpt2046 touchScreen; + + public override Task Initialize() + { + Resolver.Log.Info("Initialize..."); + + var i2cBus = Device.CreateI2cBus(I2cBusSpeed.Fast); + + touchScreen = new Xpt2046( + Device.CreateSpiBus(), + Device.Pins.D04.CreateDigitalInterruptPort(InterruptMode.EdgeFalling, ResistorMode.InternalPullUp), + Device.Pins.D05.CreateDigitalOutputPort(true)); + + touchScreen.TouchDown += TouchScreen_TouchDown; + + return Task.CompletedTask; + } + + private void TouchScreen_TouchDown(ITouchScreen sender, TouchPoint point) + { + Resolver.Log.Info($"Touch at location: X:{point.ScreenX}, Y:{point.ScreenY}"); + } + + // + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Samples/Xpt2046_Sample/Xpt2046_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Samples/Xpt2046_Sample/Xpt2046_Sample.csproj new file mode 100644 index 0000000000..2c537b558d --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Samples/Xpt2046_Sample/Xpt2046_Sample.csproj @@ -0,0 +1,12 @@ + + + netstandard2.1 + true + Library + App + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Driver/Sensors.Light.Alspt19315C.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Driver/Sensors.Light.Alspt19315C.csproj index a011f71fa7..2a409358a6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Driver/Sensors.Light.Alspt19315C.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Driver/Sensors.Light.Alspt19315C.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Samples/Alspt19315C_Sample/Alspt19315C_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Samples/Alspt19315C_Sample/Alspt19315C_Sample.csproj index 832fb80391..361c7a7e2c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Samples/Alspt19315C_Sample/Alspt19315C_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Samples/Alspt19315C_Sample/Alspt19315C_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Samples/Alspt19315C_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Samples/Alspt19315C_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Samples/Alspt19315C_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Driver/Sensors.Light.AnalogSolarIntensityGauge.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Driver/Sensors.Light.AnalogSolarIntensityGauge.csproj index 30eaf2c3f1..6b928b570c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Driver/Sensors.Light.AnalogSolarIntensityGauge.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Driver/Sensors.Light.AnalogSolarIntensityGauge.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 icon.png Wilderness Labs, Inc netstandard2.1 @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Samples/AnalogSolarIntensityGauge_Sample/AnalogSolarIntensityGauge_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Samples/AnalogSolarIntensityGauge_Sample/AnalogSolarIntensityGauge_Sample.csproj index 09e5142176..3be76b203b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Samples/AnalogSolarIntensityGauge_Sample/AnalogSolarIntensityGauge_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Samples/AnalogSolarIntensityGauge_Sample/AnalogSolarIntensityGauge_Sample.csproj @@ -6,12 +6,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Samples/AnalogSolarIntensityGauge_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Samples/AnalogSolarIntensityGauge_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Samples/AnalogSolarIntensityGauge_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Sensors.Light.Bh1745.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Sensors.Light.Bh1745.csproj index a7bda10ec7..c310aa9335 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Sensors.Light.Bh1745.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Sensors.Light.Bh1745.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Samples/Bh1745_Sample/Bh1745_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Samples/Bh1745_Sample/Bh1745_Sample.csproj index ebc70fd826..5192bb4cf1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Samples/Bh1745_Sample/Bh1745_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Samples/Bh1745_Sample/Bh1745_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Samples/Bh1745_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Samples/Bh1745_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Samples/Bh1745_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj index c7c61c3037..b7a1e12a86 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Samples/Bh1750_Sample/Bh1750_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Samples/Bh1750_Sample/Bh1750_Sample.csproj index 3763594c3d..4a14349f46 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Samples/Bh1750_Sample/Bh1750_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Samples/Bh1750_Sample/Bh1750_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Samples/Bh1750_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Samples/Bh1750_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Samples/Bh1750_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj index 6df76b93ed..a4d36f4e58 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Samples/Max44009_Sample/Max44009_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Samples/Max44009_Sample/Max44009_Sample.csproj index bb2656b0a0..bb7156d066 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Samples/Max44009_Sample/Max44009_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Samples/Max44009_Sample/Max44009_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Samples/Max44009_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Samples/Max44009_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Samples/Max44009_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Sensors.Light.Si1145.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Sensors.Light.Si1145.csproj index 986f36e54e..eb49f6c8ce 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Sensors.Light.Si1145.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Sensors.Light.Si1145.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Samples/Si1145_Sample/Si1145_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Samples/Si1145_Sample/Si1145_Sample.csproj index 5606949279..8f196d329f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Samples/Si1145_Sample/Si1145_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Samples/Si1145_Sample/Si1145_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Samples/Si1145_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Samples/Si1145_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Samples/Si1145_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Driver/Sensors.Light.Temt6000.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Driver/Sensors.Light.Temt6000.csproj index ec0b4db36e..5bade29b93 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Driver/Sensors.Light.Temt6000.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Driver/Sensors.Light.Temt6000.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Samples/Temt6000_Sample/Temt6000_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Samples/Temt6000_Sample/Temt6000_Sample.csproj index c8af69b606..6779078c3a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Samples/Temt6000_Sample/Temt6000_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Samples/Temt6000_Sample/Temt6000_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Samples/Temt6000_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Samples/Temt6000_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Samples/Temt6000_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Sensors.Light.Tsl2591.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Sensors.Light.Tsl2591.csproj index 34d2246b22..fa35c1d25f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Sensors.Light.Tsl2591.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Sensors.Light.Tsl2591.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Samples/Tsl2591_Sample/Tsl2591_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Samples/Tsl2591_Sample/Tsl2591_Sample.csproj index 60528bdc78..c23e99e347 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Samples/Tsl2591_Sample/Tsl2591_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Samples/Tsl2591_Sample/Tsl2591_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Samples/Tsl2591_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Samples/Tsl2591_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Samples/Tsl2591_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Sensors.Light.Veml7700.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Sensors.Light.Veml7700.csproj index 1ce96e35fc..9d46f4549d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Sensors.Light.Veml7700.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Sensors.Light.Veml7700.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Samples/Veml7700_Sample/Veml7700_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Samples/Veml7700_Sample/Veml7700_Sample.csproj index 53187404fc..ab2e2f2a40 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Samples/Veml7700_Sample/Veml7700_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Samples/Veml7700_Sample/Veml7700_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Samples/Veml7700_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Samples/Veml7700_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Samples/Veml7700_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj index 6831b76149..245a4ce5cd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Samples/Hx711_Sample/Hx711_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Samples/Hx711_Sample/Hx711_Sample.csproj index 403649d0d4..e164d8c933 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Samples/Hx711_Sample/Hx711_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Samples/Hx711_Sample/Hx711_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Samples/Hx711_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Samples/Hx711_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Samples/Hx711_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj index 77e9a1bbae..a9c9b67703 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Samples/Nau7802_Sample/Nau7802_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Samples/Nau7802_Sample/Nau7802_Sample.csproj index 8d0bfaa081..0e4738a459 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Samples/Nau7802_Sample/Nau7802_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Samples/Nau7802_Sample/Nau7802_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Samples/Nau7802_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Samples/Nau7802_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Samples/Nau7802_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj index 66e9f420bd..8eea43138e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Samples/Capacitive_Sample/Capacitive_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Samples/Capacitive_Sample/Capacitive_Sample.csproj index 8e95174ffe..6822a96cd9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Samples/Capacitive_Sample/Capacitive_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Samples/Capacitive_Sample/Capacitive_Sample.csproj @@ -12,12 +12,7 @@ 9.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Samples/Capacitive_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Samples/Capacitive_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Samples/Capacitive_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj index 88a8d7f152..164421aab7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Samples/Fc28_Sample/Fc28_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Samples/Fc28_Sample/Fc28_Sample.csproj index e3fa9109e4..8a5aba4dd3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Samples/Fc28_Sample/Fc28_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Samples/Fc28_Sample/Fc28_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Samples/Fc28_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Samples/Fc28_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Samples/Fc28_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj index 355878b2b1..135577a361 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl335_Sample/Adxl335_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl335_Sample/Adxl335_Sample.csproj index cbf53f7e43..2c2cd18a18 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl335_Sample/Adxl335_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl335_Sample/Adxl335_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl335_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl335_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl335_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl337_Sample/Adxl337_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl337_Sample/Adxl337_Sample.csproj index cbf53f7e43..2c2cd18a18 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl337_Sample/Adxl337_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl337_Sample/Adxl337_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl337_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl337_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl337_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl345_Sample/Adxl345_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl345_Sample/Adxl345_Sample.csproj index 2e286168e2..cc2bc85fdb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl345_Sample/Adxl345_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl345_Sample/Adxl345_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl345_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl345_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl345_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl362_Sample/Adxl362_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl362_Sample/Adxl362_Sample.csproj index 2e286168e2..cc2bc85fdb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl362_Sample/Adxl362_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl362_Sample/Adxl362_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl362_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl362_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl362_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl377_Sample/Adxl377_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl377_Sample/Adxl377_Sample.csproj index cbf53f7e43..2c2cd18a18 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl377_Sample/Adxl377_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl377_Sample/Adxl377_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl377_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl377_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl377_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj index 6c339df169..3bc2911726 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Samples/Apds9960_Sample/Apds9960_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Samples/Apds9960_Sample/Apds9960_Sample.csproj index 092787d834..05dc90c3e9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Samples/Apds9960_Sample/Apds9960_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Samples/Apds9960_Sample/Apds9960_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Samples/Apds9960_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Samples/Apds9960_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Samples/Apds9960_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Config.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Config.cs index 61b9b996f0..61a5b62326 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Config.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Config.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Sensors.Accelerometers +namespace Meadow.Foundation.Sensors.Motion { public partial class Bmi270 { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs index 4c137f14f6..0f89c145f8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Sensors.Accelerometers +namespace Meadow.Foundation.Sensors.Motion { public partial class Bmi270 { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Registers.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Registers.cs index 4452310ee4..75c6da0dab 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Registers.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Registers.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Sensors.Accelerometers +namespace Meadow.Foundation.Sensors.Motion { public partial class Bmi270 { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs index daf7772a31..87191666ee 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs @@ -7,7 +7,7 @@ using System.Threading; using System.Threading.Tasks; -namespace Meadow.Foundation.Sensors.Accelerometers +namespace Meadow.Foundation.Sensors.Motion { /// /// Represents a BMI270 inertial measurement unit (IMU) @@ -55,7 +55,7 @@ public partial class Bmi270 : /// protected readonly II2cCommunications i2cComms; - private byte[] readBuffer; + private readonly byte[] readBuffer; /// /// Create a new Bmi270 instance diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Sensors.Motion.Bmi270.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Sensors.Motion.Bmi270.csproj index a0315d6c57..6fdd7343fe 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Sensors.Motion.Bmi270.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Sensors.Motion.Bmi270.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/Bmi270_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/Bmi270_Sample.csproj index 85d317cf36..9cdb936a93 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/Bmi270_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/Bmi270_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/MeadowApp.cs index f71522e60e..4eefbe0a0f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/MeadowApp.cs @@ -1,6 +1,6 @@ using Meadow; using Meadow.Devices; -using Meadow.Foundation.Sensors.Accelerometers; +using Meadow.Foundation.Sensors.Motion; using Meadow.Units; using System; using System.Threading.Tasks; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Sensors.Motion.Bno055.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Sensors.Motion.Bno055.csproj index 63dd3cefc4..97938b71f6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Sensors.Motion.Bno055.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Sensors.Motion.Bno055.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Samples/Bno055_Sample/Bno055_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Samples/Bno055_Sample/Bno055_Sample.csproj index 102ceb0345..9d7e3761af 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Samples/Bno055_Sample/Bno055_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Samples/Bno055_Sample/Bno055_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Samples/Bno055_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Samples/Bno055_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Samples/Bno055_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj index 471169a092..68ff1b3507 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Samples/Hcsens0040_Sample/Hcsens0040_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Samples/Hcsens0040_Sample/Hcsens0040_Sample.csproj index f1c816a5a2..2c6c307b80 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Samples/Hcsens0040_Sample/Hcsens0040_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Samples/Hcsens0040_Sample/Hcsens0040_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Samples/Hcsens0040_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Samples/Hcsens0040_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Samples/Hcsens0040_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Sensors.Motion.Hmc5883.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Sensors.Motion.Hmc5883.csproj index 2b2f9c2194..ae572f5378 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Sensors.Motion.Hmc5883.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Sensors.Motion.Hmc5883.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Hmc5883_Sample/Hmc5883_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Hmc5883_Sample/Hmc5883_Sample.csproj index 7f7d380005..798679edef 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Hmc5883_Sample/Hmc5883_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Hmc5883_Sample/Hmc5883_Sample.csproj @@ -12,12 +12,7 @@ 9.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Hmc5883_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Hmc5883_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Hmc5883_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Qmc5883_Sample/Qmc5883_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Qmc5883_Sample/Qmc5883_Sample.csproj index 7f7d380005..798679edef 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Qmc5883_Sample/Qmc5883_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Qmc5883_Sample/Qmc5883_Sample.csproj @@ -12,12 +12,7 @@ 9.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Qmc5883_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Qmc5883_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Qmc5883_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs index 038b9baf76..8315828322 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs @@ -1,6 +1,6 @@ namespace Meadow.Foundation.Sensors.Motion { - public partial class Lis2Mdl + public partial class Lis2mdl { /// /// Valid I2C addresses for the sensor diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Registers.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Registers.cs index 00b40ebbcd..3200deb227 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Registers.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Registers.cs @@ -1,6 +1,6 @@ namespace Meadow.Foundation.Sensors.Motion { - public partial class Lis2Mdl + public partial class Lis2mdl { private const byte WHO_AM_I = 0x4F; private const byte CFG_REG_A = 0x60; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs index 31da4abb16..ada66ef00f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Sensors.Motion /// Represents a LIS2MDL is a low-power, high-performance 3-axis magnetometer from STMicroelectronics /// with a fixed full range of ±50 gauss and a 16-bit resolution /// - public partial class Lis2Mdl : PollingSensorBase, IMagnetometer, II2cPeripheral + public partial class Lis2mdl : PollingSensorBase, IMagnetometer, II2cPeripheral { /// /// Current Magnetic Field 3D @@ -26,11 +26,11 @@ public partial class Lis2Mdl : PollingSensorBase, IMagnetometer protected readonly II2cCommunications i2cComms; /// - /// Create a new Lis2Mdl instance + /// Create a new Lis2mdl instance /// /// The I2C bus connected to the sensor /// The I2C address - public Lis2Mdl(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Lis2mdl(II2cBus i2cBus, byte address = (byte)Addresses.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Readme.md index 2d50e93335..a8a4ad9124 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Readme.md +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Readme.md @@ -18,18 +18,18 @@ You can install the library from within Visual studio using the the NuGet Packag ## Usage ```csharp -Lis2Mdl sensor; +Lis2mdl sensor; public override Task Initialize() { Resolver.Log.Info("Initialize hardware..."); - sensor = new Lis2Mdl(Device.CreateI2cBus()); + sensor = new Lis2mdl(Device.CreateI2cBus()); // classical .NET events can also be used: sensor.Updated += HandleResult; // Example that uses an IObservable subscription to only be notified when the filter is satisfied - var consumer = Lis2Mdl.CreateObserver(handler: result => HandleResult(this, result), + var consumer = Lis2mdl.CreateObserver(handler: result => HandleResult(this, result), filter: result => FilterResult(result)); sensor.Subscribe(consumer); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Sensors.Motion.Lis2Mdl.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Sensors.Motion.Lis2Mdl.csproj index a784b16bef..6f3ae082b4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Sensors.Motion.Lis2Mdl.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Sensors.Motion.Lis2Mdl.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/Lis2Mdl_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/Lis2Mdl_Sample.csproj index 186a5d942f..85210c6654 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/Lis2Mdl_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/Lis2Mdl_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/MeadowApp.cs index ca291fb930..084ea934ae 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/MeadowApp.cs @@ -11,18 +11,18 @@ public class MeadowApp : App { // - Lis2Mdl sensor; + Lis2mdl sensor; public override Task Initialize() { Resolver.Log.Info("Initialize hardware..."); - sensor = new Lis2Mdl(Device.CreateI2cBus()); + sensor = new Lis2mdl(Device.CreateI2cBus()); // classical .NET events can also be used: sensor.Updated += HandleResult; // Example that uses an IObservable subscription to only be notified when the filter is satisfied - var consumer = Lis2Mdl.CreateObserver(handler: result => HandleResult(this, result), + var consumer = Lis2mdl.CreateObserver(handler: result => HandleResult(this, result), filter: result => FilterResult(result)); sensor.Subscribe(consumer); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis3Mdl/Driver/Sensors.Motion.Lis3Mdl.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis3Mdl/Driver/Sensors.Motion.Lis3Mdl.csproj index 7c03d23ea9..9c229afab2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis3Mdl/Driver/Sensors.Motion.Lis3Mdl.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis3Mdl/Driver/Sensors.Motion.Lis3Mdl.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis3Mdl/Samples/Lis3Mdl_Sample/Lis3Mdl_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis3Mdl/Samples/Lis3Mdl_Sample/Lis3Mdl_Sample.csproj index 9dd0f852d1..bfb0518924 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis3Mdl/Samples/Lis3Mdl_Sample/Lis3Mdl_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis3Mdl/Samples/Lis3Mdl_Sample/Lis3Mdl_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis3Mdl/Samples/Lis3Mdl_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis3Mdl/Samples/Lis3Mdl_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis3Mdl/Samples/Lis3Mdl_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Sensors.Motion.Lsm303agr.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Sensors.Motion.Lsm303agr.csproj index fd3d8c4ea0..9b0a035213 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Sensors.Motion.Lsm303agr.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Sensors.Motion.Lsm303agr.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Samples/Lsm303agr_Sample/Lsm303agr_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Samples/Lsm303agr_Sample/Lsm303agr_Sample.csproj index c578f03711..1407302b70 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Samples/Lsm303agr_Sample/Lsm303agr_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Samples/Lsm303agr_Sample/Lsm303agr_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Samples/Lsm303agr_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Samples/Lsm303agr_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Samples/Lsm303agr_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm6Dsox/Driver/Sensors.Motion.Lsm6Dsox.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm6Dsox/Driver/Sensors.Motion.Lsm6Dsox.csproj index 31b2d153a5..5859bc2b4a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm6Dsox/Driver/Sensors.Motion.Lsm6Dsox.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm6Dsox/Driver/Sensors.Motion.Lsm6Dsox.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm6Dsox/Samples/Lsm6Dsox_Sample/Lsm6Dsox_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm6Dsox/Samples/Lsm6Dsox_Sample/Lsm6Dsox_Sample.csproj index d8e6b28357..35b883c242 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm6Dsox/Samples/Lsm6Dsox_Sample/Lsm6Dsox_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm6Dsox/Samples/Lsm6Dsox_Sample/Lsm6Dsox_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm6Dsox/Samples/Lsm6Dsox_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm6Dsox/Samples/Lsm6Dsox_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm6Dsox/Samples/Lsm6Dsox_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj index 10b9656efd..bc8dfe0f3f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Samples/Mag3110_Sample/Mag3110_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Samples/Mag3110_Sample/Mag3110_Sample.csproj index efb1f6ae59..79bd0e3331 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Samples/Mag3110_Sample/Mag3110_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Samples/Mag3110_Sample/Mag3110_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Samples/Mag3110_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Samples/Mag3110_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Samples/Mag3110_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj index 05b061af08..4f1f2d6e91 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Samples/Mma7660fc_Sample/Mma7660fc_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Samples/Mma7660fc_Sample/Mma7660fc_Sample.csproj index 3b316537aa..578a32ab55 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Samples/Mma7660fc_Sample/Mma7660fc_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Samples/Mma7660fc_Sample/Mma7660fc_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Samples/Mma7660fc_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Samples/Mma7660fc_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Samples/Mma7660fc_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Sensors.Motion.Mmc5603.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Sensors.Motion.Mmc5603.csproj index 1b2796b9fb..7594b1329d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Sensors.Motion.Mmc5603.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Sensors.Motion.Mmc5603.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Samples/Mmc5603_Sample/Mmc5603_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Samples/Mmc5603_Sample/Mmc5603_Sample.csproj index 0ffb8c2761..5d448d8cb6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Samples/Mmc5603_Sample/Mmc5603_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Samples/Mmc5603_Sample/Mmc5603_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Samples/Mmc5603_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Samples/Mmc5603_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Samples/Mmc5603_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Sensors.Motion.Mpu6050.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Sensors.Motion.Mpu6050.csproj index d2629a2835..0b7da2a5f1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Sensors.Motion.Mpu6050.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Sensors.Motion.Mpu6050.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 true @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Samples/Mpu6050_Sample/Mpu6050_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Samples/Mpu6050_Sample/Mpu6050_Sample.csproj index 740dc16e09..321c8998c3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Samples/Mpu6050_Sample/Mpu6050_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Samples/Mpu6050_Sample/Mpu6050_Sample.csproj @@ -12,12 +12,7 @@ 8.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Samples/Mpu6050_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Samples/Mpu6050_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Samples/Mpu6050_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj index ff73055827..8a3d296f12 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Samples/ParallaxPir_Sample/ParallaxPir_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Samples/ParallaxPir_Sample/ParallaxPir_Sample.csproj index d5b2c8e7ec..56c6fc468c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Samples/ParallaxPir_Sample/ParallaxPir_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Samples/ParallaxPir_Sample/ParallaxPir_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Samples/ParallaxPir_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Samples/ParallaxPir_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Samples/ParallaxPir_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.CurrentTransducer/Driver/Sensors.Power.CurrentTransducer.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Power.CurrentTransducer/Driver/Sensors.Power.CurrentTransducer.csproj index 088709739f..898f362d0e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.CurrentTransducer/Driver/Sensors.Power.CurrentTransducer.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.CurrentTransducer/Driver/Sensors.Power.CurrentTransducer.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.CurrentTransducer/Samples/CurrentTransducer_Sample/CurrentTransducer_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Power.CurrentTransducer/Samples/CurrentTransducer_Sample/CurrentTransducer_Sample.csproj index 6ddd9b6e50..94709ca510 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.CurrentTransducer/Samples/CurrentTransducer_Sample/CurrentTransducer_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.CurrentTransducer/Samples/CurrentTransducer_Sample/CurrentTransducer_Sample.csproj @@ -11,12 +11,7 @@ enable - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.CurrentTransducer/Samples/CurrentTransducer_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Power.CurrentTransducer/Samples/CurrentTransducer_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.CurrentTransducer/Samples/CurrentTransducer_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.Enums.cs deleted file mode 100644 index 535aa8fa96..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.Enums.cs +++ /dev/null @@ -1,36 +0,0 @@ -namespace Meadow.Foundation.Sensors.Power -{ - public partial class Ina260 - { - /// - /// Valid I2C addresses for the sensor - /// - public enum Addresses : byte - { - /// - /// Bus address 0x40 - /// - Address_0x40 = 0x40, - /// - /// Bus address 0x41 - /// - Address_0x41 = 0x41, - /// - /// Default bus address - /// - Default = Address_0x40 - } - - private enum Register : byte - { - Config = 0x00, - Current = 0x01, - Voltage = 0x02, - Power = 0x03, - MaskEnable = 0x06, - AlertLimit = 0x07, - ManufacturerID = 0xFE, - DieID = 0xFF - } - } -} diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs deleted file mode 100644 index 62ecbc1678..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs +++ /dev/null @@ -1,118 +0,0 @@ -using Meadow.Hardware; -using Meadow.Units; -using System; -using System.Threading.Tasks; - -namespace Meadow.Foundation.Sensors.Power -{ - /// - /// Represents a INA260 Precision Digital Current and Power Monitor - /// - public partial class Ina260 - : ByteCommsSensorBase<(Units.Power? Power, Voltage? Voltage, Current? Current)>, - II2cPeripheral - { - /// - /// The default I2C address for the peripheral - /// - public byte DefaultI2cAddress => (byte)Addresses.Default; - - /// - /// Raised when the power value changes - /// - public event EventHandler> PowerUpdated = default!; - - /// - /// Raised when the voltage value changes - /// - public event EventHandler> VoltageUpdated = default!; - - /// - /// Raised when the current value changes - /// - public event EventHandler> CurrentUpdated = default!; - - private const float MeasurementScale = 0.00125f; - - /// - /// The value of the current (in Amps) flowing through the shunt resistor from the last reading - /// - public Current? Current => Conditions.Current; - - /// - /// The voltage from the last reading.. - /// - public Voltage? Voltage => Conditions.Voltage; - - /// - /// The power from the last reading.. - /// - public Units.Power? Power => Conditions.Power; - - /// - /// Create a new INA260 object - /// - /// The I2C bus - /// The I2C address - public Ina260(II2cBus i2cBus, byte address = (byte)Addresses.Default) - : base(i2cBus, address) - { - switch (address) - { - case (byte)Addresses.Address_0x40: - case (byte)Addresses.Address_0x41: - // valid; - break; - default: - throw new ArgumentOutOfRangeException("INA260 device address must be either 0x40 or 0x41"); - } - } - - /// - /// Reads data from the sensor - /// - /// The latest sensor reading - protected override Task<(Units.Power? Power, Voltage? Voltage, Current? Current)> ReadSensor() - { - (Units.Power? Power, Voltage? Voltage, Current? Current) conditions; - - conditions.Voltage = new Voltage(BusComms.ReadRegister((byte)Register.Voltage) * MeasurementScale, Units.Voltage.UnitType.Volts); - conditions.Current = new Current(BusComms.ReadRegister((byte)Register.Current) * MeasurementScale, Units.Current.UnitType.Amps); - conditions.Power = new Units.Power(BusComms.ReadRegister((byte)Register.Power) * 0.01f, Units.Power.UnitType.Watts); - - return Task.FromResult(conditions); - } - - /// - /// Raise events for subscribers and notify of value changes - /// - /// The updated sensor data - protected override void RaiseEventsAndNotify(IChangeResult<(Units.Power? Power, Voltage? Voltage, Current? Current)> changeResult) - { - if (changeResult.New.Power is { } power) - { - PowerUpdated?.Invoke(this, new ChangeResult(power, changeResult.Old?.Power)); - } - if (changeResult.New.Voltage is { } volts) - { - VoltageUpdated?.Invoke(this, new ChangeResult(volts, changeResult.Old?.Voltage)); - } - if (changeResult.New.Current is { } amps) - { - CurrentUpdated?.Invoke(this, new ChangeResult(amps, changeResult.Old?.Current)); - } - - base.RaiseEventsAndNotify(changeResult); - } - - /// - /// Reads the unique manufacturer identification number - /// - public int ManufacturerID => BusComms.ReadRegister((byte)Register.ManufacturerID); - - /// - /// Reads the unique die identification number - /// - public int DieID => BusComms.ReadRegister((byte)Register.ManufacturerID); - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/MeadowApp.cs deleted file mode 100644 index c395e4f091..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/MeadowApp.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Meadow; -using Meadow.Devices; -using Meadow.Foundation.Sensors.Power; -using System; -using System.Threading.Tasks; - -namespace MeadowApp -{ - public class MeadowApp : App - { - // - - Ina260 ina260; - - public override Task Initialize() - { - Resolver.Log.Info("Initialize..."); - - var bus = Device.CreateI2cBus(); - ina260 = new Ina260(bus); - - Resolver.Log.Info($"-- INA260 Sample App ---"); - Resolver.Log.Info($"Manufacturer: {ina260.ManufacturerID}"); - Resolver.Log.Info($"Die: {ina260.DieID}"); - ina260.Updated += (s, v) => - { - Resolver.Log.Info($"{v.New.Item2}V @ {v.New.Item3}A"); - }; - - return Task.CompletedTask; - } - - public override Task Run() - { - ina260.StartUpdating(TimeSpan.FromSeconds(2)); - return Task.CompletedTask; - } - - // - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Datasheet/ina219.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Datasheet/ina219.pdf new file mode 100644 index 0000000000..cae8594bef Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Datasheet/ina219.pdf differ diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Datasheet/ina228.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Datasheet/ina228.pdf new file mode 100644 index 0000000000..ae4aa8a698 Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Datasheet/ina228.pdf differ diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Datasheet/ina260.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Datasheet/ina260.pdf similarity index 100% rename from Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Datasheet/ina260.pdf rename to Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Datasheet/ina260.pdf diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Drivers/Ina219.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Drivers/Ina219.cs new file mode 100644 index 0000000000..c27676a630 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Drivers/Ina219.cs @@ -0,0 +1,265 @@ +using Meadow.Hardware; +using Meadow.Units; +using System; +using System.Runtime.CompilerServices; + +namespace Meadow.Foundation.Sensors.Power; + +/// +/// Represents a INA219 Precision Digital Current and Power Monitor +/// +public class Ina219 : Ina2xx +{ + private readonly Voltage _shuntVoltageScale; + private Current _maxExpectedCurrent; + private ushort _calibration; + + /// + /// Create a new INA219 object + /// + /// The I2C bus + /// The I2C address + /// Resistance used for measuring current. null uses default of 0.1 Ohms, to match Adafruit's INA219 breakout board. + protected Ina219(II2cBus i2cBus, byte address, Units.Resistance shuntResistance) + : base(i2cBus, address) + { + _voltageScale = new Voltage(4, Units.Voltage.UnitType.Millivolts); + _shuntVoltageScale = new Voltage(10, Units.Voltage.UnitType.Microvolts); + _shuntResistor = shuntResistance; + } + + /// + /// Create a new INA219 object, with the default current and resistor values to match Adafruit's INA219 breakout board. + /// + /// The I2C bus + /// The I2C address + public Ina219(II2cBus i2cBus, byte address = (byte)Addresses.Default) + : this(i2cBus, address, new Resistance(0.1)) + { } + + /// + public override void Configure() + { + Configure(BusVoltageRange.Range_32V, ADCModes.ADCMode_12bit_532us, + ShuntVoltageRange.Range_320mV, ADCModes.ADCMode_12bit_532us, + Mode.ContinuousAll); + } + + /// + /// Sets Configuration of sensor + /// + /// to use for Bus Voltage measurement + /// ADC resolution/averaging for Bus Voltage + /// to use for Shunt Voltage measurement + /// ADC resolution/averaging for Shunt Voltage + /// selection of values and trigger mode + public void Configure( + BusVoltageRange busVoltageRange = BusVoltageRange.Range_32V, + ADCModes busADCMode = ADCModes.ADCMode_12bit_532us, + ShuntVoltageRange shuntVoltageRange = ShuntVoltageRange.Range_320mV, + ADCModes shuntADCMode = ADCModes.ADCMode_12bit_532us, + Mode mode = Mode.ContinuousAll + ) + { + ushort config = (ushort)((ushort)busVoltageRange | (ushort)shuntVoltageRange | (ushort)busADCMode << 7 | (ushort)shuntADCMode << 3 | (ushort)mode); + WriteRegister(Registers.Config, config); + if (_calibration > 0) + { + WriteRegister(Registers.Calibration, _calibration); + } + + IsConfigured = true; + } + + /// + /// Sets Configuration of sensor, using best shunt voltage range possible based on the max expected current. + /// + /// voltage measurement range + /// Maximum expected current for the application. + /// ADC resolution/averaging setting common to both ADCs + /// selection of values and trigger mode + public void Configure( + BusVoltageRange busVoltageRange, + Current maxExpectedCurrent, + ADCModes adcMode = ADCModes.ADCMode_12bit_532us, + Mode mode = Mode.ContinuousAll) + { + _maxExpectedCurrent = maxExpectedCurrent; + var shuntVoltageRange = SetCalibration(_maxExpectedCurrent); // NOTE: Calibration register needs to be calculated and populated before Current or Power registers will work. + Configure(busVoltageRange, adcMode, shuntVoltageRange, adcMode, mode); + } + + /// + /// _currentScale and _powerScale are set along with _calibration using logic outlined in the datasheet for the INA219 + /// + /// Maximum expected Current in the specific application. + /// suggested to use in configuration + private ShuntVoltageRange SetCalibration(Current maxExpectedCurrent) + { + var maxShuntVoltage = 0.32; + var minimumLSB = maxExpectedCurrent.Microamps / 0x7FFF; + var maximumLSB = maxExpectedCurrent.Microamps / 0x1000; + var selectedLSB = Math.Ceiling(minimumLSB); + _currentScale = new Current(selectedLSB, Units.Current.UnitType.Microamps); + _powerScale = new Units.Power(_currentScale.Amps * 20, Units.Power.UnitType.Watts); + _calibration = (ushort)(0.04096 / (_currentScale.Amps * _shuntResistor.Ohms)); + + var maxCurrentBeforeOverflow = Math.Min(maxShuntVoltage / _shuntResistor.Ohms, _currentScale.Amps * 0x7FFF); + var maxShuntVoltageBeforeOverflow = Math.Min(maxExpectedCurrent.Amps * _shuntResistor.Ohms, maxShuntVoltage); + + return maxShuntVoltageBeforeOverflow switch + { + <= 0.04 => ShuntVoltageRange.Range_40mV, + <= 0.08 => ShuntVoltageRange.Range_80mV, + <= 0.16 => ShuntVoltageRange.Range_160mV, + _ => ShuntVoltageRange.Range_320mV, + }; + } + + /// + public override Units.Current ReadCurrent() + { + var rawRegister = ReadRegisterAsUShort(Registers.Current); + return new Current((short)rawRegister * _currentScale.Amps); + } + + /// + public override Units.Voltage ReadBusVoltage() + { + var rawRegister = ReadRegisterAsUShort(Registers.BusVoltage); + return new Voltage((rawRegister >> 3) * _voltageScale.Volts); + } + + /// + public override Units.Voltage ReadShuntVoltage() + { + var rawRegister = ReadRegisterAsUShort(Registers.ShuntVoltage); + return new Voltage(rawRegister * _shuntVoltageScale.Volts); + } + + /// + public override Units.Power ReadPower() => new Units.Power(ReadRegisterAsUShort(Registers.Power) * _powerScale.Watts); + + /// + internal override void ReadDeviceInfo() + { + ManufacturerID = string.Empty; + DeviceID = DeviceRevision = 0; + } + + #region Enumerations + private enum Registers : byte + { + Config = 0x00, + ShuntVoltage = 0x01, + BusVoltage = 0x02, + Power = 0x03, + Current = 0x04, + Calibration = 0x05, + } + + /// + /// Enumeration of supported voltage measurement ranges. + /// + /// There is no actual reason to not use 32V, as it has the same resolution. + public enum BusVoltageRange : ushort + { + /// 16 Volt measurement range. + Range_16V = 0x0000, + /// 32 Volt measurement range. + Range_32V = 0x2000, + } + + /// + /// Enumeration of supported shunt voltage measurement ranges. + /// + public enum ShuntVoltageRange : ushort + { + /// 40 millivolt measurement range. + Range_40mV = 0x0000, + /// 80 millivolt measurement range. + Range_80mV = 0x0800, + /// 160 millivolt measurement range. + Range_160mV = 0x1000, + /// 320 millivolt measurement range. + Range_320mV = 0x1800, + } + + /// + /// Enumeration of supported ADC Averaging and Conversion time settings. + /// + public enum ADCModes : byte + { + /// 9-bit measurement resolution with 84 µs conversion time. + ADCMode_9bit_84us = 0x00, + /// 10-bit measurement resolution with 148 µs conversion time. + ADCMode_10bit_148us = 0x01, + /// 11-bit measurement resolution with 276 µs conversion time. + ADCMode_11bit_276us = 0x02, + /// 12-bit measurement resolution with 532 µs conversion time. + ADCMode_12bit_532us = 0x03, + /// 12-bit measurement resolution with 532 µs conversion time, averaging 1 sample. + ADCMode_1xAvg_532us = 0x08, + /// 12-bit measurement resolution with 1.064 ms conversion time, averaging 2 samples. + ADCMode_2xAvg_1064us = 0x09, + /// 12-bit measurement resolution with 2.128 ms conversion time, averaging 4 samples. + ADCMode_4xAvg_2128us = 0x0A, + /// 12-bit measurement resolution with 4.256 ms conversion time, averaging 8 samples. + ADCMode_8xAvg_4256us = 0x0B, + /// 12-bit measurement resolution with 8.512 ms conversion time, averaging 16 samples. + ADCMode_16xAvg_8512us = 0x0C, + /// 12-bit measurement resolution with 17.024 ms conversion time, averaging 32 samples. + ADCMode_32xAvg_17024us = 0x0D, + /// 12-bit measurement resolution with 34.048 ms conversion time, averaging 64 samples. + ADCMode_64xAvg_34048us = 0x0E, + /// 12-bit measurement resolution with 68.096 ms conversion time, averaging 128 samples. + ADCMode_128xAvg_68096us = 0x0F, + + } + + /// + /// Enumeration of supported operation modes. + /// + public enum Mode + { + /// Power down (no conversions). + PowerDown = 0x0, + /// Measure Current once. + TriggeredCurrent = 0x1, + /// Measure Voltage once. + TriggeredVoltage = 0x2, + /// Measure Voltage and Current once. + TriggeredAll = 0x3, + /// Power down (no conversions). + PowerDown2 = 0x4, + /// Measure Current continuously. + ContinuousCurrent = 0x5, + /// Measure Voltage continuously. + ContinuousVoltage = 0x6, + /// Measure Voltage and Current continuously (default). + ContinuousAll = 0x7, // default at POR + } + + #endregion + + #region Shorthand + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void WriteRegister(Registers register, byte value) => BusComms.WriteRegister((byte)register, value, ByteOrder.BigEndian); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void WriteRegister(Registers register, ushort value) => BusComms.WriteRegister((byte)register, value, ByteOrder.BigEndian); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void WriteRegister(Registers register, uint value) => BusComms.WriteRegister((byte)register, value, ByteOrder.BigEndian); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ReadRegister(Registers register, Span buffer) => BusComms.ReadRegister((byte)register, buffer); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private byte ReadRegister(Registers register) => BusComms.ReadRegister((byte)register); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private ushort ReadRegisterAsUShort(Registers register) => BusComms.ReadRegisterAsUShort((byte)register, ByteOrder.BigEndian); + #endregion + +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Drivers/Ina228.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Drivers/Ina228.cs new file mode 100644 index 0000000000..b261d358d7 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Drivers/Ina228.cs @@ -0,0 +1,325 @@ +using Meadow.Hardware; +using System; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Meadow.Foundation.Sensors.Power; + +/// +/// Represents a INA228 Precision Digital Current and Power Monitor +/// +public class Ina228 : Ina2xx +{ + private readonly Units.Temperature _temperatureScale; + private Units.Voltage _shuntVoltageScale; + private Units.Energy _energyScale; + private double _chargeScale; + private ushort _calibration = 0x1000; // default on startup + + /// + /// Create a new INA228 object + /// + /// The I2C bus + /// The I2C address + /// Resistor value (in Ohms) used for measuring current. Default matches Adafruit's Breakout board. + public Ina228(II2cBus i2cBus, byte address = (byte)Addresses.Default, double shuntResistance = 0.015) + : base(i2cBus, address) + { + _shuntResistor = new Units.Resistance(shuntResistance); + _voltageScale = new Units.Voltage(195.3125, Units.Voltage.UnitType.Microvolts); + _shuntVoltageScale = new Units.Voltage(312.5, Units.Voltage.UnitType.Nanovolts); + _temperatureScale = new Units.Temperature(7.8125e-6); + // TODO: set scaling/calibration dynamically + _currentScale = new Units.Current(_calibration / (13107.2 * 1e6 * _shuntResistor.Ohms)); + _powerScale = new Units.Power(3.2 * _currentScale.Amps); + _energyScale = new Units.Energy(_powerScale.Watts * 16); + _chargeScale = _currentScale.Amps; + + ReadDeviceInfo(); + } + + /// + public override void Configure() + { + Configure(false, false, 0); + ConfigureConversion(Mode.ContinuousAll, Averaging.Average_1, + voltageTime: ConversionTime.ConversionTime_1052us, + currentTime: ConversionTime.ConversionTime_1052us, + temperatureTime: ConversionTime.ConversionTime_1052us + ); + } + + /// + /// Sets Configuration + /// + public void Configure(bool shuntGain4x = false, bool temperatureCompensation = false, ushort initialConversionDelayMs = 0) + { + if (initialConversionDelayMs > 510) + throw new ArgumentOutOfRangeException(nameof(initialConversionDelayMs), initialConversionDelayMs, null); + ushort config = (ushort)((shuntGain4x ? 0x10 : 0x00) | (temperatureCompensation ? 0x20 : 0x00) | ((initialConversionDelayMs / 2) << 6)); + WriteRegister(Registers.Config, config); + IsConfigured = true; + } + + /// + /// Sets Configuration of ADC conversions + /// + /// selection of values and trigger mode + /// On-chip value averaging + /// Conversion time for Voltage measurements + /// Conversion time for Current measurements + /// Conversion time for Die Temperature measurements + public void ConfigureConversion(Mode mode = Mode.ContinuousAll, + Averaging averaging = Averaging.Average_1, + ConversionTime voltageTime = ConversionTime.ConversionTime_1052us, + ConversionTime currentTime = ConversionTime.ConversionTime_1052us, + ConversionTime temperatureTime = ConversionTime.ConversionTime_1052us + ) + { + ushort adcConfig = (ushort)((ushort)mode << 12 | ((ushort)voltageTime << 9) | ((ushort)currentTime << 6) | ((ushort)temperatureTime << 3) | (ushort)averaging); + WriteRegister(Registers.ADCConfig, adcConfig); + } + + /// + /// _currentScale and _powerScale are set along with _calibration using logic outlined in the datasheet for the INA228 + /// + /// Maximum expected Current in the specific application. + /// true applies 4x gain to shunt measurements + public void SetCalibration(Units.Current maxExpectedCurrent, bool shuntGain4x = false) + { + // apply shuntGain4x to the config register (Read, set/clear bit, write) + ushort config = ReadRegisterAsUShort(Registers.Config); + config = (ushort)((config & ~0x10) | (shuntGain4x ? 0x10 : 0x00)); + WriteRegister(Registers.Config, config); + + // shuntGain4x also affects the calibration and other current derived values + _shuntVoltageScale = new Units.Voltage(shuntGain4x ? 78.125 : 312.5, Units.Voltage.UnitType.Nanovolts); + var maxShuntVoltage = new Units.Voltage(shuntGain4x ? 40.96 : 163.84, Units.Voltage.UnitType.Millivolts); + var maxCurrent = maxShuntVoltage.Volts / _shuntResistor.Ohms; + var currentLSB = Math.Min(maxExpectedCurrent.Amps, maxCurrent) / (1 << 19); + _calibration = (ushort)(13107.2 * 1e6 * currentLSB * _shuntResistor.Ohms * (shuntGain4x ? 4 : 1)); + WriteRegister(Registers.ShuntCal, _calibration); + + _currentScale = new Units.Current(currentLSB); + _powerScale = new Units.Power(_currentScale.Amps * 3.2); + _energyScale = new Units.Energy(_powerScale.Watts * 16); + _chargeScale = _currentScale.Amps; + } + + /// + internal override void ReadDeviceInfo() + { + Span buffer = stackalloc byte[2]; + ReadRegister(Registers.ManufacturerID, buffer); + ManufacturerID = Encoding.ASCII.GetString(buffer); + var deviceInfo = ReadRegisterAsUShort(Registers.DeviceID); + DeviceID = (ushort)(deviceInfo >> 4); + DeviceRevision = (byte)(deviceInfo & 0xF); + } + + #region Measurement + /// + public override Units.Current ReadCurrent() + { + Span buffer = stackalloc byte[3]; + ReadRegister(Registers.Current, buffer); + var sign = buffer[0] >= 0x80; + int register = (sign ? 0x0FFF : 0x0000) << 20 | buffer[0] << 12 | buffer[1] << 4 | buffer[2] >> 4; + return new Units.Current(register * _currentScale.Amps); + } + + /// + public override Units.Voltage ReadBusVoltage() + { + Span buffer = stackalloc byte[3]; + ReadRegister(Registers.BusVoltage, buffer); + int register = buffer[0] << 12 | buffer[1] << 4 | buffer[2] >> 4; + return new Units.Voltage(register * _voltageScale.Volts); + } + + /// + public override Units.Voltage ReadShuntVoltage() + { + Span buffer = stackalloc byte[3]; + ReadRegister(Registers.ShuntVoltage, buffer); + var sign = buffer[0] >= 0x80; + int register = (sign ? 0x0FFF : 0x0000) << 20 | buffer[0] << 12 | buffer[1] << 4 | buffer[2] >> 4; + return new Units.Voltage(register * _shuntVoltageScale.Volts); + } + + /// + public override Units.Power ReadPower() + { + Span buffer = stackalloc byte[3]; + ReadRegister(Registers.Power, buffer); + uint register = (uint)(buffer[0] << 16 | buffer[1] << 8 | buffer[2]); + return new Units.Power(register * _powerScale.Watts); + } + + /// + /// Read the Energy accumulator from the power monitor IC. + /// + /// representing the energy accumulator value. + public Units.Energy ReadEnergyAccumulator() + { + Span buffer = stackalloc byte[5]; + ReadRegister(Registers.Energy, buffer); + long register = (long)buffer[0] << 32 | (long)(buffer[1] << 24 | buffer[2] << 16 | buffer[3] << 8 | buffer[4]); + return new Units.Energy(register * _energyScale.Joules); + } + + /// + /// Read the Charge accumulator from the power monitor IC. + /// + /// representing the charge accumulator value. + public double ReadChargeAccumulator() + { + Span buffer = stackalloc byte[5]; + ReadRegister(Registers.Charge, buffer); + long register = (long)buffer[0] << 32 | (long)(buffer[1] << 24 | buffer[2] << 16 | buffer[3] << 8 | buffer[4]); + return register * _chargeScale; + } + + /// + /// Resets the Energy and Charge accumulators on the power monitor IC. + /// + public void ResetAccumulators() + { + // Read config, set bit, write config + ushort config = ReadRegisterAsUShort(Registers.Config); + config |= 0x4000; + WriteRegister(Registers.Config, config); + } + + #endregion + + #region Enumerations + /// + /// Enumeration of supported operation modes. + /// + public enum Mode + { + /// Power down (no conversions). + PowerDown = 0x0, + /// Measure Voltage once. + TriggeredVoltage = 0x1, + /// Measure Current once. + TriggeredCurrent = 0x2, + /// Measure Voltage and Current once. + TriggeredVoltageCurrent = 0x3, + /// Measure Die Temperature once. + TriggeredTemperature = 0x4, + /// Measure Voltage and Die Temperature once. + TriggeredTemperatureVoltage = 0x5, + /// Measure Current and Die Temperature once. + TriggeredTemperatureCurrent = 0x6, + /// Measure Voltage, Current, and Die Temperature once. + TriggeredAll = 0x7, + /// Power down (no conversions). + PowerDown2 = 0x8, + /// Measure Voltage continuously. + ContinuousVoltage = 0x9, + /// Measure Current continuously. + ContinuousCurrent = 0xA, + /// Measure Voltage and Current continuously. + ContinuousVoltageCurrent = 0xB, + /// Measure Die Temperature continuously. + ContinuousTemperature = 0xC, + /// Measure Voltage and Die Temperature continuously. + ContinuousTemperatureVoltage = 0xD, + /// Measure Current and Die Temperature continuously. + ContinuousTemperatureCurrent = 0xE, + /// Measure Voltage, Current, and Die Temperature continuously (default). + ContinuousAll = 0xF, // default at POR + } + + /// + /// Enumeration of supported ADC conversion times. + /// + /// Note: This is used for Voltage, Current, and Die Temperature with different amounts of bit shifting + public enum ConversionTime + { + /// 50 µs ADC conversion. + ConversionTime_50us = 0x00, + /// 84 µs ADC conversion. + ConversionTime_84us = 0x01, + /// 150 µs ADC conversion. + ConversionTime_150us = 0x02, + /// 280 µs ADC conversion. + ConversionTime_280us = 0x03, + /// 540 µs ADC conversion. + ConversionTime_540us = 0x04, + /// 1.052 ms ADC conversion. (default) + ConversionTime_1052us = 0x05, // default at POR + /// 2.074 ms ADC conversion. + ConversionTime_2074us = 0x06, + /// 4.12 ms ADC conversion. + ConversionTime_4120us = 0x07, + } + + /// + /// Enumeration of supported ADC Sample Averaging values. + /// + public enum Averaging + { + /// No Averaging. (default) + Average_1 = 0x00, // default at POR + /// 4x Sample Averaging. + Average_4 = 0x01, + /// 16x Sample Averaging. + Average_16 = 0x02, + /// 64x Sample Averaging. + Average_64 = 0x03, + /// 128x Sample Averaging. + Average_128 = 0x04, + /// 256x Sample Averaging. + Average_256 = 0x05, + /// 512x Sample Averaging. + Average_512 = 0x06, + /// 1024x Sample Averaging. + Average_1024 = 0x07, + } + + /// + /// Enumeration of device memory registers. + /// + /// Note: Some registers are wider than 16 bits. > + private enum Registers : byte + { + Config = 0x00, + ADCConfig = 0x01, + ShuntCal = 0x02, + ShuntVoltage = 0x04, // 24 bits + BusVoltage = 0x05, // 24 bits + DieTemp = 0x06, + Current = 0x07, // 24 bits + Power = 0x08, // 24 bits + Energy = 0x09, // 40 bits + Charge = 0x0A, // 40 bits + DiagnosticAlert = 0x0B, + ManufacturerID = 0x3E, + DeviceID = 0x3F + } + #endregion + + #region Shorthand + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void WriteRegister(Registers register, byte value) => BusComms.WriteRegister((byte)register, value, ByteOrder.BigEndian); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void WriteRegister(Registers register, ushort value) => BusComms.WriteRegister((byte)register, value, ByteOrder.BigEndian); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void WriteRegister(Registers register, uint value) => BusComms.WriteRegister((byte)register, value, ByteOrder.BigEndian); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ReadRegister(Registers register, Span buffer) => BusComms.ReadRegister((byte)register, buffer); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private byte ReadRegister(Registers register) => BusComms.ReadRegister((byte)register); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private ushort ReadRegisterAsUShort(Registers register) => BusComms.ReadRegisterAsUShort((byte)register, ByteOrder.BigEndian); + #endregion + +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Drivers/Ina260.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Drivers/Ina260.cs new file mode 100644 index 0000000000..8496bb6365 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Drivers/Ina260.cs @@ -0,0 +1,346 @@ +using Meadow.Hardware; +using Meadow.Units; +using System; +using System.Runtime.CompilerServices; +using System.Text; + +namespace Meadow.Foundation.Sensors.Power; + +/// +/// Represents a INA260 Precision Digital Current and Power Monitor +/// +public class Ina260 : Ina2xx +{ + /// + /// Create a new INA260 object + /// + /// The I2C bus + /// The I2C address + /// that can be used to monitor for Alert outputs, triggering + public Ina260(II2cBus i2cBus, byte address = (byte)Addresses.Default, IDigitalInterruptPort? alertPort = null) + : base(i2cBus, address) + { + _voltageScale = new Voltage(1.25, Units.Voltage.UnitType.Millivolts); + _currentScale = new Current(1.25, Units.Current.UnitType.Milliamps); + _powerScale = new Units.Power(10, Units.Power.UnitType.Milliwatts); + _shuntResistor = new Resistance(2, Resistance.UnitType.Milliohms); // Integrated in IC + + _alertPort = alertPort; + + if (_alertPort != null) + { + // TODO: configure _alertPort for open-drain active low signaling. + //_alertPort.Resistor = ; + _alertPort.Changed += AlertPortOnChanged; + } + + ReadDeviceInfo(); + } + + /// + /// Create a new INA2xx object, using the address pin connections to calculate the correct I2C address. + /// + /// The I2C bus + /// specifying what A0 is connected to. + /// specifying what A1 is connected to. + public Ina260(II2cBus i2cBus, AddressConnection a0, AddressConnection a1) + : this(i2cBus, GetAddress(a0, a1)) + { } + + /// + public override void Configure() + { + Configure(); // Call the implementation's version. + } + + /// + /// Sets Configuration of sensor + /// + /// selection of values and trigger mode + /// Conversion time for Current measurements + /// Conversion time for Voltage measurements + /// On-chip value averaging + public void Configure(ConversionTime currentConversionTime = ConversionTime.ConversionTime_1100us, + ConversionTime voltageConversionTime = ConversionTime.ConversionTime_1100us, + Averaging averaging = Averaging.Average_1, + Mode mode = Mode.ContinuousAll) + { + ushort config = (ushort)((ushort)averaging << 9 | ((ushort)voltageConversionTime << 6) | ((ushort)currentConversionTime << 3) | (ushort)mode); + BusComms.WriteRegister(ConfigRegister, config, ByteOrder.BigEndian); + IsConfigured = true; + } + + /// + public override Units.Current ReadCurrent() => new Current((short)ReadRegisterAsUShort(Registers.Current) * _currentScale.Amps, Units.Current.UnitType.Amps); + /// + public override Units.Voltage ReadBusVoltage() => new Voltage(ReadRegisterAsUShort(Registers.BusVoltage) * _voltageScale.Volts, Units.Voltage.UnitType.Volts); + /// + /// Ina260 doesn't directly have a register for this, so we compute from known values. + public override Units.Voltage ReadShuntVoltage() => new((ReadCurrent().Amps * _shuntResistor.Ohms), Units.Voltage.UnitType.Volts); + /// + public override Units.Power ReadPower() => new Units.Power(ReadRegisterAsUShort(Registers.Power) * _powerScale.Watts, Units.Power.UnitType.Watts); + + // TODO: Helpers for triggered measurement? + + /// + internal override void ReadDeviceInfo() + { + Span buffer = stackalloc byte[2]; + ReadRegister(Registers.ManufacturerID, buffer); + ManufacturerID = Encoding.ASCII.GetString(buffer); + var deviceInfo = ReadRegisterAsUShort(Registers.DeviceID); + DeviceID = (ushort)(deviceInfo >> 4); + DeviceRevision = (byte)(deviceInfo & 0xF); + } + private readonly IDigitalInterruptPort? _alertPort; + + #region Alerts + /// + /// Raised when the Alert signal changes. + /// + public event EventHandler AlertChanged = default!; + + private void AlertPortOnChanged(object sender, DigitalPortResult e) + { + OnAlert(sender, EventArgs.Empty); + } + + private void OnAlert(object sender, EventArgs e) + { + AlertChanged?.Invoke(sender, e); + } + + private const double minVoltage = 0; + private const double maxVoltage = 36; + private const double minCurrent = -15; + private const double maxCurrent = 15; + private const double minPower = 0; + private const double maxPower = 419.43; + + /// + /// Configures the Voltage Limit Alert function. + /// + /// threshold for triggering the Alert. + /// State of the alert pin to use for the Alert Signal + /// Whether to latch the Alert until cleared. + /// Set true to trigger an alert when the measured voltage is above the . + /// Thrown if the is outside the limits of the power monitor IC. + public void AlertOnVoltageLimit(Units.Voltage threshold, bool activeHigh = false, bool latching = false, bool overLimit = false) + { + if (threshold.Volts is < minVoltage or > maxVoltage) + throw new ArgumentOutOfRangeException(nameof(threshold), threshold.Volts, null); + + var maskValue = ((overLimit ? MaskEnable.AlertOverVoltageLimit : MaskEnable.AlertUnderVoltageLimit) | + (activeHigh ? MaskEnable.AlertPolarity : 0) | + (latching ? MaskEnable.LatchEnable : 0)); + ushort limitValue = (ushort)(threshold.Volts / _voltageScale.Volts); + + WriteRegister(Registers.MaskEnable, (ushort)maskValue); + WriteRegister(Registers.AlertLimit, limitValue); + } + + /// + /// Configures the Current Limit Alert function. + /// + /// threshold for triggering the Alert. + /// State of the alert pin to use for the Alert Signal + /// Whether to latch the Alert until cleared. + /// Set true to trigger an alert when the measured Current is above the . + /// Thrown if the is outside the limits of the power monitor IC. + public void AlertOnCurrentLimit(Units.Current threshold, bool activeHigh = false, bool latching = false, bool overLimit = false) + { + if (threshold.Amps is < minCurrent or > maxCurrent) + throw new ArgumentOutOfRangeException(nameof(threshold), threshold.Amps, null); + + var maskValue = ((overLimit ? MaskEnable.AlertOverCurrentLimit : MaskEnable.AlertUnderCurrentLimit) | + (activeHigh ? MaskEnable.AlertPolarity : 0) | + (latching ? MaskEnable.LatchEnable : 0)); + // TODO: negative current is allowed. + ushort limitValue = (ushort)(threshold.Amps / _currentScale.Amps); + + WriteRegister(Registers.MaskEnable, (ushort)maskValue); + WriteRegister(Registers.AlertLimit, limitValue); + } + + /// + /// Configures the Power Limit Alert function. + /// + /// threshold for triggering the Alert. + /// State of the alert pin to use for the Alert Signal + /// Whether to latch the Alert until cleared. + /// Thrown if the is outside the limits of the power monitor IC. + public void AlertOnPowerLimit(Units.Power threshold, bool activeHigh = false, bool latching = false) + { + if (threshold.Watts is < minPower or > maxPower) + throw new ArgumentOutOfRangeException(nameof(threshold), threshold.Watts, null); + var maskValue = ((MaskEnable.AlertOverPowerLimit) | + (activeHigh ? MaskEnable.AlertPolarity : 0) | + (latching ? MaskEnable.LatchEnable : 0)); + ushort limitValue = (ushort)(threshold.Watts / _powerScale.Watts); + + WriteRegister(Registers.MaskEnable, (ushort)maskValue); + WriteRegister(Registers.AlertLimit, limitValue); + } + + /// + /// Configures the Alert function to activate when all ADC conversions are complete. + /// + /// State of the alert pin to use for the Alert Signal + /// Whether to latch the Alert until cleared. + public void AlertOnConversionComplete(bool activeHigh = false, bool latching = false) + { + var maskValue = ((MaskEnable.AlertConversionReady) | + (activeHigh ? MaskEnable.AlertPolarity : 0) | + (latching ? MaskEnable.LatchEnable : 0)); + + WriteRegister(Registers.MaskEnable, (ushort)maskValue); + } + #endregion + + /// + /// Reads all status bits. + /// + /// true if the Alert condition was the source of the Alert pin output. + /// true if all conversions and calculations are completed since last time this bit was read. + /// true indicates the internal arithmetic for Power may have exceeded the maximum of 419.43 W + public void GetStatus(out bool alert, out bool conversionReady, out bool overflow) + { + var maskValue = (MaskEnable)ReadRegisterAsUShort(Registers.MaskEnable); + alert = (maskValue & MaskEnable.AlertFunctionFlag) != 0; + conversionReady = (maskValue & MaskEnable.ConversionReady) != 0; + overflow = (maskValue & MaskEnable.MathOverFlow) != 0; + } + + #region Enumerations + private enum Registers : byte + { + Config = 0x00, + Current = 0x01, + BusVoltage = 0x02, + Power = 0x03, + MaskEnable = 0x06, + AlertLimit = 0x07, + ManufacturerID = 0xFE, + DeviceID = 0xFF + } + + /// + /// Enumeration of supported operation modes. + /// + public enum Mode + { + /// Power down (no conversions). + PowerDown = 0x0, + /// Measure Current once. + TriggeredCurrent = 0x1, + /// Measure Voltage once. + TriggeredVoltage = 0x2, + /// Measure Voltage and Current once. + TriggeredAll = 0x3, + /// Power down (no conversions). + PowerDown2 = 0x4, + /// Measure Current continuously. + ContinuousCurrent = 0x5, + /// Measure Voltage continuously. + ContinuousVoltage = 0x6, + /// Measure Voltage and Current continuously (default). + ContinuousAll = 0x7, // default at POR + } + + /// + /// Enumeration of supported ADC conversion times. + /// + /// Note: This is used for Voltage and Current with different amounts of shifting + public enum ConversionTime + { + /// 140 µs ADC conversion. + ConversionTime_140us = 0x00, + /// 204 µs ADC conversion. + ConversionTime_204us = 0x01, + /// 332 µs ADC conversion. + ConversionTime_332us = 0x02, + /// 588 µs ADC conversion. + ConversionTime_588us = 0x03, + /// 1.1 ms ADC conversion. (default) + ConversionTime_1100us = 0x04, // default at POR + /// 2.116 ms ADC conversion. + ConversionTime_2116us = 0x05, + /// 4.156 ms ADC conversion. + ConversionTime_4156us = 0x06, + /// 8.244 ms ADC conversion. + ConversionTime_8244us = 0x07, + } + + /// + /// Enumeration of supported ADC Sample Averaging values. + /// + public enum Averaging + { + /// No Averaging. (default) + Average_1 = 0x00, // default at POR + /// 4x Sample Averaging. + Average_4 = 0x01, + /// 16x Sample Averaging. + Average_16 = 0x02, + /// 64x Sample Averaging. + Average_64 = 0x03, + /// 128x Sample Averaging. + Average_128 = 0x04, + /// 256x Sample Averaging. + Average_256 = 0x05, + /// 512x Sample Averaging. + Average_512 = 0x06, + /// 1024x Sample Averaging. + Average_1024 = 0x07, + } + + [Flags] + private enum MaskEnable : ushort + { + LatchEnable = 0x01, + AlertPolarity = 0x02, + MathOverFlow = 0x04, + ConversionReady = 0x08, + AlertFunctionFlag = 0x10, + AlertConversionReady = 0x400, + AlertOverPowerLimit = 0x800, + AlertUnderVoltageLimit = 0x1000, + AlertOverVoltageLimit = 0x2000, + AlertUnderCurrentLimit = 0x4000, + AlertOverCurrentLimit = 0x8000, + } + #endregion + + #region Shorthand + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void WriteRegister(Registers register, byte value) => BusComms.WriteRegister((byte)register, value, ByteOrder.BigEndian); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void WriteRegister(Registers register, ushort value) => BusComms.WriteRegister((byte)register, value, ByteOrder.BigEndian); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void WriteRegister(Registers register, uint value) => BusComms.WriteRegister((byte)register, value, ByteOrder.BigEndian); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ReadRegister(Registers register, Span buffer) => BusComms.ReadRegister((byte)register, buffer); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private byte ReadRegister(Registers register) => BusComms.ReadRegister((byte)register); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private ushort ReadRegisterAsUShort(Registers register) => BusComms.ReadRegisterAsUShort((byte)register, ByteOrder.BigEndian); + #endregion + + #region IDisposable extras + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (_alertPort != null) + _alertPort.Changed -= AlertPortOnChanged; + base.Dispose(disposing); + } + } + #endregion +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Ina2xx.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Ina2xx.Enums.cs new file mode 100644 index 0000000000..09a776369d --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Ina2xx.Enums.cs @@ -0,0 +1,66 @@ +namespace Meadow.Foundation.Sensors.Power; + +public abstract partial class Ina2xx +{ + /// + /// Valid I2C addresses for the sensor + /// + public enum Addresses : byte + { + /// Bus address 0x40, A1 -> GND, A0 -> GND + Address_0x40 = 0x40, + /// Bus address 0x41, A1 -> GND, A0 -> VS + Address_0x41 = 0x41, + /// Bus address 0x42, A1 -> GND, A0 -> SDA + Address_0x42 = 0x42, + /// Bus address 0x43, A1 -> GND, A0 -> SCL + Address_0x43 = 0x43, + /// Bus address 0x44, A1 -> VS, A0 -> GND + Address_0x44 = 0x44, + /// Bus address 0x45, A1 -> VS, A0 -> VS + Address_0x45 = 0x45, + /// Bus address 0x46, A1 -> VS, A0 -> SDA + Address_0x46 = 0x46, + /// Bus address 0x47, A1 -> VS, A0 -> SCL + Address_0x47 = 0x47, + /// Bus address 0x48, A1 -> SDA, A0 -> GND + Address_0x48 = 0x48, + /// Bus address 0x49, A1 -> SDA, A0 -> VS + Address_0x49 = 0x49, + /// Bus address 0x4A, A1 -> SDA, A0 -> SDA + Address_0x4A = 0x4A, + /// Bus address 0x4B, A1 -> SDA, A0 -> SCL + Address_0x4B = 0x4B, + /// Bus address 0x4C, A1 -> SCL, A0 -> GND + Address_0x4C = 0x4C, + /// Bus address 0x4D, A1 -> SCL, A0 -> VS + Address_0x4D = 0x4D, + /// Bus address 0x4E, A1 -> SCL, A0 -> SDA + Address_0x4E = 0x4E, + /// Bus address 0x4F, A1 -> SCL, A0 -> SCL + Address_0x4F = 0x4F, + /// Default bus address + Default = Address_0x40 + } + + /// + /// Potential connections for the address pins of the IC + /// + public enum AddressConnection : byte + { + /// Address pin is connected to GND + GND = 0, + /// Address pin is connected to VS + VS = 1, + /// Address pin is connected to SDA + SDA = 2, + /// Address pin is connected to SCL + SCL = 3 + } + + /// + /// Common Configuration Register (16 bits) + /// + protected const byte ConfigRegister = 0x00; + private const uint ResetIna2xx = 0x8000; +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Ina2xx.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Ina2xx.cs new file mode 100644 index 0000000000..c9550cb192 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Ina2xx.cs @@ -0,0 +1,190 @@ +using Meadow.Hardware; +using Meadow.Peripherals.Sensors; +using Meadow.Units; +using System; +using System.Threading.Tasks; + +namespace Meadow.Foundation.Sensors.Power; + +/// +/// Represents a INA2xx Series Precision Digital Current and Power Monitor +/// +public abstract partial class Ina2xx + : ByteCommsSensorBase<(Units.Current? Current, Units.Voltage? Voltage, Units.Power? Power)>, + ICurrentSensor, IVoltageSensor, IPowerSensor, II2cPeripheral +{ + /// + /// The default I2C address for the peripheral + /// + public byte DefaultI2cAddress => (byte)Addresses.Default; + + /// + /// Default I2C Bus Speed to use for communication. + /// + public static I2cBusSpeed DefaultBusSpeed => I2cBusSpeed.Fast; + + /// Value of the LSB of the voltage register. + internal Units.Voltage _voltageScale; + /// Value of the LSB of the current register. + internal Units.Current _currentScale; + /// Value of the LSB of the power register. + internal Units.Power _powerScale; + /// Value of the shunt resistor used for current measurements. + internal Units.Resistance _shuntResistor; + + /// + /// Create a new INA2xx object. + /// + /// The I2C bus + /// The I2C address + protected Ina2xx(II2cBus i2cBus, byte address = (byte)Addresses.Default) + : base(i2cBus, address) + { } + + /// + /// Create a new INA2xx object, using the address pin connections to calculate the correct I2C address. + /// + /// The I2C bus + /// specifying what A0 is connected to. + /// specifying what A1 is connected to. + protected Ina2xx(II2cBus i2cBus, AddressConnection a0 = AddressConnection.GND, AddressConnection a1 = AddressConnection.GND) + : this(i2cBus, GetAddress(a0, a1)) + { } + + private event EventHandler>? _currentHandlers = default!; + private event EventHandler>? _voltageHandlers = default!; + private event EventHandler>? _powerHandlers = default!; + + event EventHandler>? ISamplingSensor.Updated + { + add => _currentHandlers += value; + remove => _currentHandlers -= value; + } + + event EventHandler>? ISamplingSensor.Updated + { + add => _voltageHandlers += value; + remove => _voltageHandlers -= value; + } + + event EventHandler>? ISamplingSensor.Updated + { + add => _powerHandlers += value; + remove => _powerHandlers -= value; + } + + /// + /// Lookup the correct address to use for the INA2xx based on the address pin connections. + /// + /// specifying what A0 is connected to. + /// specifying what A1 is connected to. + /// correct value to use, as a byte + public static byte GetAddress(AddressConnection a0, AddressConnection a1) => (byte)((byte)Addresses.Address_0x40 | (byte)a0 | ((byte)a1 << 2)); + + /// + /// Sets the sensor Configuration to default values. Each implementation should provide overloads for specific available options. + /// + public abstract void Configure(); + + /// + /// Returns true if the sensor has been configured, otherwise false + /// + public bool IsConfigured { get; protected set; } + + /// + /// Resets Ina2xx to default settings. + /// + public void Reset() + { + BusComms.WriteRegister(ConfigRegister, ResetIna2xx, ByteOrder.BigEndian); + } + + #region Sensor Values and Events + /// + /// The value of the current (in Amps) flowing through the shunt resistor from the last reading. + /// + public Units.Current? Current => Conditions.Current; + + /// + /// The voltage from the last reading. + /// + public Units.Voltage? Voltage => Conditions.Voltage; + + /// + /// The power from the last reading. + /// + public Units.Power? Power => Conditions.Power; + + /// + /// Raise events for subscribers and notify of value changes. + /// + /// The updated sensor data + protected override void RaiseEventsAndNotify(IChangeResult<(Units.Current? Current, Units.Voltage? Voltage, Units.Power? Power)> changeResult) + { + if (changeResult.New.Current is { } amps) + { + _currentHandlers?.Invoke(this, new ChangeResult(amps, changeResult.Old?.Current)); + } + if (changeResult.New.Voltage is { } volts) + { + _voltageHandlers?.Invoke(this, new ChangeResult(volts, changeResult.Old?.Voltage)); + } + if (changeResult.New.Power is { } power) + { + _powerHandlers?.Invoke(this, new ChangeResult(power, changeResult.Old?.Power)); + } + base.RaiseEventsAndNotify(changeResult); + } + + /// + protected override Task<(Units.Current? Current, Units.Voltage? Voltage, Units.Power? Power)> ReadSensor() + { + if (!IsConfigured) + { + throw new Exception("Sensor must first be configured."); + } + + (Units.Current? Current, Units.Voltage? Voltage, Units.Power? Power) conditions; + + // TODO: What if Mode is not ContinuousAll, so some data might be stale? + conditions.Current = ReadCurrent(); + conditions.Voltage = ReadBusVoltage(); + conditions.Power = ReadPower(); + + return Task.FromResult(conditions); + } + + /// Read the Current measurement from the power monitor IC. + public abstract Units.Current ReadCurrent(); + + /// Read the Voltage measurement from the power monitor IC. + public abstract Units.Voltage ReadBusVoltage(); + + /// Read the Voltage across the Shunt (sense) resistor from the power monitor IC. + public abstract Units.Voltage ReadShuntVoltage(); + + /// Read the Power measurement from the power monitor IC. + public abstract Units.Power ReadPower(); + #endregion + + /// The manufacturer identification, if supported. Otherwise returns an empty string. + public string ManufacturerID { get; internal set; } = string.Empty; + + /// The device identification number, if supported. Otherwise returns 0. + public ushort DeviceID { get; internal set; } + + /// The Device Revision code, if supported. Otherwise returns 0. + public byte DeviceRevision { get; internal set; } + + /// Method for reading the , , and + internal abstract void ReadDeviceInfo(); + + async Task ISensor.Read() + => (await Read()).Current!.Value; + + async Task ISensor.Read() + => (await Read()).Voltage!.Value; + + async Task ISensor.Read() + => (await Read()).Power!.Value; +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Readme.md new file mode 100644 index 0000000000..c7fb6b8fdb --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Readme.md @@ -0,0 +1,77 @@ +# Meadow.Foundation.Sensors.Power.Ina2xx + +**INA2xx Series I2C current and power monitor** + +The **Ina2xx** library is included in the **Meadow.Foundation.Sensors.Power.Ina2xx** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. + +This driver is part of the [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/) peripherals library, an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT applications. + +For more information on developing for Meadow, visit [developer.wildernesslabs.co](http://developer.wildernesslabs.co/). + +To view all Wilderness Labs open-source projects, including samples, visit [github.com/wildernesslabs](https://github.com/wildernesslabs/). + +## Installation + +You can install the library from within Visual studio using the the NuGet Package Manager or from the command line using the .NET CLI: + +`dotnet add package Meadow.Foundation.Sensors.Power.Ina2xx` +## Usage + +```csharp +Ina219 ina219; + +public override Task Initialize() +{ + Resolver.Log.Debug("Initialize..."); + + var bus = Device.CreateI2cBus(I2cBusSpeed.Fast); + ina219 = new Ina219(bus); + ina219.Configure(busVoltageRange: Ina219.BusVoltageRange.Range_32V, + maxExpectedCurrent: new Current(1.0), + adcMode: Ina219.ADCModes.ADCMode_4xAvg_2128us); + Resolver.SensorService.RegisterSensor(ina219); + + Resolver.Log.Info($"--- INA219 Sample App ---"); + ina219.Updated += (sender, result) => + { + Resolver.Log.Info($"{result.New.Voltage:N3} V @ {result.New.Current:N3} A"); + }; + + return Task.CompletedTask; +} + +public override Task Run() +{ + Resolver.Log.Debug("Run..."); + ina219.StartUpdating(TimeSpan.FromSeconds(2)); + return Task.CompletedTask; +} + +``` +## How to Contribute + +- **Found a bug?** [Report an issue](https://github.com/WildernessLabs/Meadow_Issues/issues) +- Have a **feature idea or driver request?** [Open a new feature request](https://github.com/WildernessLabs/Meadow_Issues/issues) +- Want to **contribute code?** Fork the [Meadow.Foundation](https://github.com/WildernessLabs/Meadow.Foundation) repository and submit a pull request against the `develop` branch + + +## Need Help? + +If you have questions or need assistance, please join the Wilderness Labs [community on Slack](http://slackinvite.wildernesslabs.co/). +## About Meadow + +Meadow is a complete, IoT platform with defense-grade security that runs full .NET applications on embeddable microcontrollers and Linux single-board computers including Raspberry Pi and NVIDIA Jetson. + +### Build + +Use the full .NET platform and tooling such as Visual Studio and plug-and-play hardware drivers to painlessly build IoT solutions. + +### Connect + +Utilize native support for WiFi, Ethernet, and Cellular connectivity to send sensor data to the Cloud and remotely control your peripherals. + +### Deploy + +Instantly deploy and manage your fleet in the cloud for OtA, health-monitoring, logs, command + control, and enterprise backend integrations. + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Sensors.Power.Ina2xx.csproj similarity index 70% rename from Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj rename to Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Sensors.Power.Ina2xx.csproj index df96aed1df..0f35fb059f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Driver/Sensors.Power.Ina2xx.csproj @@ -1,19 +1,19 @@ - 1.9.0 true icon.png Wilderness Labs, Inc netstandard2.1 Library - Ina260 + Ina2xx Wilderness Labs, Inc http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ - Meadow.Foundation.Sensors.Power.Ina260 + Meadow.Foundation.Sensors.Power.Ina2xx https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, Sensor, Power, Ina260 + Meadow.Foundation, Sensor, Power, Current, Voltage, Ina260, Ina219, Ina228 + 1.11.0 true - INA260 I2C current and power monitor + INA2xx Series I2C current and power monitor Readme.md @@ -24,6 +24,8 @@ - + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina219_Sample/Ina219_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina219_Sample/Ina219_Sample.csproj new file mode 100644 index 0000000000..71be628ba8 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina219_Sample/Ina219_Sample.csproj @@ -0,0 +1,12 @@ + + + netstandard2.1 + true + Library + App + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina219_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina219_Sample/MeadowApp.cs new file mode 100644 index 0000000000..ba1ced9058 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina219_Sample/MeadowApp.cs @@ -0,0 +1,46 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Sensors.Power; +using System; +using System.Threading.Tasks; +using Meadow.Hardware; +using Meadow.Units; + +namespace MeadowApp +{ + public class MeadowApp : App + { + // + + Ina219 ina219; + + public override Task Initialize() + { + Resolver.Log.Debug("Initialize..."); + + var bus = Device.CreateI2cBus(I2cBusSpeed.Fast); + ina219 = new Ina219(bus); + ina219.Configure(busVoltageRange: Ina219.BusVoltageRange.Range_32V, + maxExpectedCurrent: new Current(1.0), + adcMode: Ina219.ADCModes.ADCMode_4xAvg_2128us); + Resolver.SensorService.RegisterSensor(ina219); + + Resolver.Log.Info($"--- INA219 Sample App ---"); + ina219.Updated += (sender, result) => + { + Resolver.Log.Info($"{result.New.Voltage:N3} V @ {result.New.Current:N3} A"); + }; + + return Task.CompletedTask; + } + + public override Task Run() + { + Resolver.Log.Debug("Run..."); + ina219.StartUpdating(TimeSpan.FromSeconds(2)); + return Task.CompletedTask; + } + + // + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina228_Sample/Ina228_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina228_Sample/Ina228_Sample.csproj new file mode 100644 index 0000000000..71be628ba8 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina228_Sample/Ina228_Sample.csproj @@ -0,0 +1,12 @@ + + + netstandard2.1 + true + Library + App + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina228_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina228_Sample/MeadowApp.cs new file mode 100644 index 0000000000..e1f48ae7fb --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina228_Sample/MeadowApp.cs @@ -0,0 +1,49 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Sensors.Power; +using System; +using System.Threading.Tasks; +using Meadow.Hardware; +using Meadow.Units; + +namespace MeadowApp +{ + public class MeadowApp : App + { + // + + Ina228 ina228; + + public override Task Initialize() + { + Resolver.Log.Debug("Initialize..."); + + var bus = Device.CreateI2cBus(I2cBusSpeed.Fast); + ina228 = new Ina228(bus); + ina228.ConfigureConversion(averaging:Ina228.Averaging.Average_4); + ina228.SetCalibration(new Current(10.0, Current.UnitType.Amps), false); + Resolver.SensorService.RegisterSensor(ina228); + + Resolver.Log.Info($"--- INA228 Sample App ---"); + Resolver.Log.Info($"Manufacturer: {ina228.ManufacturerID}"); + Resolver.Log.Info($"DeviceID: 0x{ina228.DeviceID:X3}"); + Resolver.Log.Info($"Revision: 0x{ina228.DeviceRevision:X2}"); + ina228.Updated += (sender, result) => + { + if (result.New is { Current: { }, Voltage: { } }) + Resolver.Log.Info($"{result.New.Voltage.Value.Millivolts:N3} mV @ {result.New.Current.Value.Milliamps:N3} mA"); + }; + + return Task.CompletedTask; + } + + public override Task Run() + { + Resolver.Log.Debug("Run..."); + ina228.StartUpdating(TimeSpan.FromSeconds(2)); + return Task.CompletedTask; + } + + // + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/Ina260_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina260_Sample/Ina260_Sample.csproj similarity index 70% rename from Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/Ina260_Sample.csproj rename to Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina260_Sample/Ina260_Sample.csproj index 816047bdca..e22f2e344d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/Ina260_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina260_Sample/Ina260_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina260_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina260_Sample/MeadowApp.cs new file mode 100644 index 0000000000..5b34b452cc --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina2xx/Samples/Ina260_Sample/MeadowApp.cs @@ -0,0 +1,46 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Sensors.Power; +using System; +using System.Threading.Tasks; +using Meadow.Hardware; + +namespace MeadowApp +{ + public class MeadowApp : App + { + // + + Ina260 ina260; + + public override Task Initialize() + { + Resolver.Log.Debug("Initialize..."); + + var bus = Device.CreateI2cBus(I2cBusSpeed.Fast); + ina260 = new Ina260(bus); + ina260.Configure(Ina260.ConversionTime.ConversionTime_8244us, Ina260.ConversionTime.ConversionTime_8244us, Ina260.Averaging.Average_4); + //Resolver.SensorService.RegisterSensor(ina260); + + Resolver.Log.Info($"--- INA260 Sample App ---"); + Resolver.Log.Info($"Manufacturer: {ina260.ManufacturerID}"); + Resolver.Log.Info($"DeviceID: 0x{ina260.DeviceID:X3}"); + Resolver.Log.Info($"Revision: 0x{ina260.DeviceRevision:X2}"); + ina260.Updated += (sender, result) => + { + Resolver.Log.Info($"{result.New.Voltage:N3} V @ {result.New.Current:N3} A"); + }; + + return Task.CompletedTask; + } + + public override Task Run() + { + Resolver.Log.Debug("Run..."); + ina260.StartUpdating(TimeSpan.FromSeconds(2)); + return Task.CompletedTask; + } + + // + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj index 9d26feca0a..3e1c46755c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Samples/IDxxLA_Sample/IDxxLA_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Samples/IDxxLA_Sample/IDxxLA_Sample.csproj index bee7f57779..0037527201 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Samples/IDxxLA_Sample/IDxxLA_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Samples/IDxxLA_Sample/IDxxLA_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Samples/IDxxLA_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Samples/IDxxLA_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Samples/IDxxLA_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj index 2c65262c67..6f959497f8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Samples/Ky038_Sample/Ky038_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Samples/Ky038_Sample/Ky038_Sample.csproj index dc85e55841..e3c34d30eb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Samples/Ky038_Sample/Ky038_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Samples/Ky038_Sample/Ky038_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Samples/Ky038_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Samples/Ky038_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Samples/Ky038_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj index e8d5dff915..e607eb4fab 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Samples/Lm75_Sample/Lm75_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Samples/Lm75_Sample/Lm75_Sample.csproj index e39943e8cb..08a56abe28 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Samples/Lm75_Sample/Lm75_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Samples/Lm75_Sample/Lm75_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Samples/Lm75_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Samples/Lm75_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Samples/Lm75_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Sensors.Temperature.Mcp960x.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Sensors.Temperature.Mcp960x.csproj index b926268549..a4710cf240 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Sensors.Temperature.Mcp960x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Sensors.Temperature.Mcp960x.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9600_Sample/Mcp9600_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9600_Sample/Mcp9600_Sample.csproj index 67072997eb..0b12231375 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9600_Sample/Mcp9600_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9600_Sample/Mcp9600_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9600_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9600_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9600_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9601_Sample/Mcp9601_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9601_Sample/Mcp9601_Sample.csproj index 67072997eb..0b12231375 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9601_Sample/Mcp9601_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9601_Sample/Mcp9601_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9601_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9601_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Samples/Mcp9601_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Sensors.Temperature.Mcp9808.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Sensors.Temperature.Mcp9808.csproj index 475eff241b..4e43692566 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Sensors.Temperature.Mcp9808.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Sensors.Temperature.Mcp9808.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md Apache-2.0 true @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Samples/Mcp9808_Sample/Mcp9808_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Samples/Mcp9808_Sample/Mcp9808_Sample.csproj index 368c82a648..b57eb345ea 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Samples/Mcp9808_Sample/Mcp9808_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Samples/Mcp9808_Sample/Mcp9808_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Samples/Mcp9808_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Samples/Mcp9808_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Samples/Mcp9808_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Driver/Readme.md index 85d62d14f9..a0d0d54c16 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Driver/Readme.md +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Driver/Readme.md @@ -1,8 +1,8 @@ -# Meadow.Foundation.Sensors.Temperature.Mcp960x +# Meadow.Foundation.Sensors.Temperature.Pct2075 **Pct2075 I2C temperature sensor** -The **Pct2075** library is included in the **Meadow.Foundation.Sensors.Temperature.Mcp960x** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. +The **Pct2075** library is included in the **Meadow.Foundation.Sensors.Temperature.Pct2075** nuget package and is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform. This driver is part of the [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/) peripherals library, an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT applications. @@ -14,7 +14,7 @@ To view all Wilderness Labs open-source projects, including samples, visit [gith You can install the library from within Visual studio using the the NuGet Package Manager or from the command line using the .NET CLI: -`dotnet add package Meadow.Foundation.Sensors.Temperature.Mcp960x` +`dotnet add package Meadow.Foundation.Sensors.Temperature.Pct2075` ## Usage ```csharp diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Driver/Sensors.Temperature.Pct2075.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Driver/Sensors.Temperature.Pct2075.csproj index ddff24126e..a8450814da 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Driver/Sensors.Temperature.Pct2075.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Driver/Sensors.Temperature.Pct2075.csproj @@ -1,7 +1,7 @@ Readme.md - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -10,7 +10,7 @@ Pct2075 Wilderness Labs, Inc http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ - Meadow.Foundation.Sensors.Temperature.Mcp960x + Meadow.Foundation.Sensors.Temperature.Pct2075 https://github.com/WildernessLabs/Meadow.Foundation Meadow.Foundation,Temperature,PCT2075 true @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Samples/Pct2075_Sample/Pct2075_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Samples/Pct2075_Sample/Pct2075_Sample.csproj index 267db75384..2318e8c6a2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Samples/Pct2075_Sample/Pct2075_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Samples/Pct2075_Sample/Pct2075_Sample.csproj @@ -10,12 +10,7 @@ 10.0 - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Samples/Pct2075_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Samples/Pct2075_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Pct2075/Samples/Pct2075_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj index 27bcffb623..a3310436e9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Samples/Thermistor_Sample/Thermistor_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Samples/Thermistor_Sample/Thermistor_Sample.csproj index c821771c8a..2b26a86b92 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Samples/Thermistor_Sample/Thermistor_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Samples/Thermistor_Sample/Thermistor_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Samples/Thermistor_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Samples/Thermistor_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Samples/Thermistor_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj index 883a8dcbcb..ff72c29154 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 true icon.png Wilderness Labs, Inc @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Samples/Tmp102_Sample/Tmp102_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Samples/Tmp102_Sample/Tmp102_Sample.csproj index 2b8a96ee05..debb9d4746 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Samples/Tmp102_Sample/Tmp102_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Samples/Tmp102_Sample/Tmp102_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Samples/Tmp102_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Samples/Tmp102_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Samples/Tmp102_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj index 7520c0a2b5..731dc39ca8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Wilderness Labs, Inc netstandard2.1 Library @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/SwitchingAnemometer.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/SwitchingAnemometer.cs index 4534cf2627..2b474a2599 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/SwitchingAnemometer.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/SwitchingAnemometer.cs @@ -152,9 +152,7 @@ protected override async Task ReadSensor() StopUpdating(); } - var now = Environment.TickCount; - - if (samples?.Count > 0 && (TimeSpan.FromMilliseconds(now - samples?.Peek().New.Time ?? 0) > NoWindTimeout)) + if (samples?.Count > 0 && (DateTime.UtcNow - samples?.Peek().New.Time > NoWindTimeout)) { //we've exceeded the no wind interval time samples?.Clear(); //will force a zero reading } @@ -168,7 +166,7 @@ protected override async Task ReadSensor() { // skip the first (old will be null) if (sample.Old is { } old) { - speedSum += SwitchIntervalToKmh(TimeSpan.FromMilliseconds(sample.New.Time - old.Time)); + speedSum += SwitchIntervalToKmh(sample.New.Time - old.Time); } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Samples/SwitchingAnemometer_Sample/SwitchingAnemometer_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Samples/SwitchingAnemometer_Sample/SwitchingAnemometer_Sample.csproj index 26afa025da..b2666d8508 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Samples/SwitchingAnemometer_Sample/SwitchingAnemometer_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Samples/SwitchingAnemometer_Sample/SwitchingAnemometer_Sample.csproj @@ -11,12 +11,7 @@ - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Samples/SwitchingAnemometer_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Samples/SwitchingAnemometer_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Samples/SwitchingAnemometer_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj index 044fccde39..ff773c90c9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Samples/SwitchingRainGauge_Sample/SwitchingRainGauge_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Samples/SwitchingRainGauge_Sample/SwitchingRainGauge_Sample.csproj index ed2120277f..849ece8e3f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Samples/SwitchingRainGauge_Sample/SwitchingRainGauge_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Samples/SwitchingRainGauge_Sample/SwitchingRainGauge_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Samples/SwitchingRainGauge_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Samples/SwitchingRainGauge_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Samples/SwitchingRainGauge_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj index 9ed661fab2..6546e80c0a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 Readme.md enable 10.0 @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Samples/WindVane_Sample/WindVane_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Samples/WindVane_Sample/WindVane_Sample.csproj index c782ab8c98..f271557c09 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Samples/WindVane_Sample/WindVane_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Samples/WindVane_Sample/WindVane_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Samples/WindVane_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Samples/WindVane_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Samples/WindVane_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj b/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj index da55611540..2067f7f69a 100644 --- a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj +++ b/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj @@ -1,6 +1,6 @@ - 1.9.0 + 1.11.0 icon.png Wilderness Labs, Inc netstandard2.1 @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Samples/ServoCore_Sample/ServoCore_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Samples/ServoCore_Sample/ServoCore_Sample.csproj index a349c73c29..ed9c619a4b 100644 --- a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Samples/ServoCore_Sample/ServoCore_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Samples/ServoCore_Sample/ServoCore_Sample.csproj @@ -9,12 +9,7 @@ App - - - - - - Always - + + diff --git a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Samples/ServoCore_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Samples/ServoCore_Sample/meadow.config.yaml deleted file mode 100644 index 32363cb69c..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Samples/ServoCore_Sample/meadow.config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -MonoControl: - Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.sln b/Source/Meadow.Foundation.sln index fb3fdeb926..4af3b44e51 100644 --- a/Source/Meadow.Foundation.sln +++ b/Source/Meadow.Foundation.sln @@ -147,7 +147,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bmp085", "Bmp085", "{C724C5 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4A2BBDB4-6130-4C9D-9947-12F39309E8E9}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bme280", "Bme280", "{449B29BE-7A04-4A6D-858B-77C8E81415DE}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bmx280", "Bmx280", "{449B29BE-7A04-4A6D-858B-77C8E81415DE}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{21C511DD-43DD-486E-86D7-18D8F6810ACD}" EndProject @@ -277,9 +277,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hih6130_Sample", "Meadow.Fo EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bmp085", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmp085\Driver\Sensors.Atmospheric.Bmp085.csproj", "{728ECF00-EB02-4981-87F9-A72A163DB93C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bme280_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme280\Samples\Bme280_Sample\Bme280_Sample.csproj", "{59EED95C-1CA7-466C-853C-BF14E1EF43A9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bme280_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmx280\Samples\Bme280_Sample\Bme280_Sample.csproj", "{59EED95C-1CA7-466C-853C-BF14E1EF43A9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bme280", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme280\Driver\Sensors.Atmospheric.Bme280.csproj", "{D94618E1-D812-4CFF-B539-54AE9559F827}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bmx280", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmx280\Driver\Sensors.Atmospheric.Bmx280.csproj", "{D94618E1-D812-4CFF-B539-54AE9559F827}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9341_Jpg_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9341_Jpg_Sample\Ili9341_Jpg_Sample.csproj", "{A5F4A75B-20F6-4CDF-B986-635081894E43}" EndProject @@ -407,14 +407,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Hcsens0040", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hcsens0040_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Hcsens0040\Samples\Hcsens0040_Sample\Hcsens0040_Sample.csproj", "{DA828BA9-E57F-4579-B6B0-55910247408F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ina260", "Ina260", "{18BD90D6-3D88-44A4-A366-134D12F3F823}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ina2xx", "Ina2xx", "{18BD90D6-3D88-44A4-A366-134D12F3F823}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Power.Ina260", "Meadow.Foundation.Peripherals\Sensors.Power.Ina260\Driver\Sensors.Power.Ina260.csproj", "{9B4196EC-9485-43FB-B579-C2E50D0E9A3F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ina260_Sample", "Meadow.Foundation.Peripherals\Sensors.Power.Ina260\Samples\Ina260_Sample\Ina260_Sample.csproj", "{22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tsl2591", "Tsl2591", "{C453850E-43AD-4AE5-82F1-76E0168E7260}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{882011AD-05A3-43F9-9B64-2032982948D6}" @@ -1103,12 +1099,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Y4000_Sample", "Meadow.Foun EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ft232h", "Ft232h", "{4E0052C2-559D-4509-9C42-C6451B1F1FFC}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Ft232h", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ft232h\Driver\ICs.IOExpanders.Ft232h.csproj", "{BEF5B037-DAB7-43C6-8A5C-EB749573C815}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{67B5150B-2FDE-4EA8-93EE-8BB31D5D7789}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ft232h_Windows_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ft232h\Samples\Ft232h_Windows_Sample\Ft232h_Windows_Sample.csproj", "{B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WinForms", "WinForms", "{BBF136B7-361C-4FC2-AACA-6B6ED79BDCF1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.WinForms", "Meadow.Foundation.Peripherals\Displays.WinForms\Driver\Displays.WinForms.csproj", "{2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}" @@ -1185,13 +1177,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Lsm303agr", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lsm303agr_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Lsm303agr\Samples\Lsm303agr_Sample\Lsm303agr_Sample.csproj", "{1B54CA69-FD1F-46FF-9F0C-2AFB00AAB2E1}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lis2Mdl", "Lis2Mdl", "{698A96DD-692F-4ABE-9B4D-9BDA300C8B84}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lis2mdl", "Lis2mdl", "{698A96DD-692F-4ABE-9B4D-9BDA300C8B84}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{385CB50B-4D17-4FFF-BCCE-C8BF9D280A52}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Lis2Mdl", "Meadow.Foundation.Peripherals\Sensors.Motion.Lis2Mdl\Driver\Sensors.Motion.Lis2Mdl.csproj", "{09E368FA-1ACA-4F96-9153-B4959A7EE390}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Lis2mdl", "Meadow.Foundation.Peripherals\Sensors.Motion.Lis2mdl\Driver\Sensors.Motion.Lis2mdl.csproj", "{09E368FA-1ACA-4F96-9153-B4959A7EE390}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lis2Mdl_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Lis2Mdl\Samples\Lis2Mdl_Sample\Lis2Mdl_Sample.csproj", "{6923DB1E-CDDC-4A84-AAEF-6F6F7D9DC406}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lis2mdl_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Lis2mdl\Samples\Lis2mdl_Sample\Lis2mdl_Sample.csproj", "{6923DB1E-CDDC-4A84-AAEF-6F6F7D9DC406}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mcp960x", "Mcp960x", "{CBF95E20-6021-4E5B-807A-E099DBC98764}" EndProject @@ -1419,8 +1411,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AsciiConsole", "AsciiConsol EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{40687DAC-F3EF-4F70-850A-0429B9586648}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AsciiConsoleDisplay_Sample", "Meadow.Foundation.Peripherals\Displays.AsciiConsole\Samples\AsciiConsoleDisplay_Sample\AsciiConsoleDisplay_Sample.csproj", "{2F20AD5B-5879-432B-B44F-8540DAEE5C43}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Amg8833_Sample", "Meadow.Foundation.Peripherals\Sensors.Camera.Amg8833\Samples\Amg8833_Sample\Amg8833_Sample.csproj", "{866EA918-39E3-4440-877C-70A3205A3D00}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.AsciiConsole", "Meadow.Foundation.Peripherals\Displays.AsciiConsole\Driver\Displays.AsciiConsole.csproj", "{27589062-708E-44CD-9DF4-0D16899265FE}" @@ -1429,6 +1419,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{80EC EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinForms_Sample", "Meadow.Foundation.Peripherals\Displays.WinForms\Samples\WinForms_Sample\WinForms_Sample.csproj", "{A5734B07-64C0-4C93-9EB0-390B0B6A075C}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scd30", "Scd30", "{BAACC3E2-3E7E-4BDF-B4FD-23E166D64282}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A3EF6DB1-971C-4891-853A-369652E36959}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Scd30", "Meadow.Foundation.Peripherals\Sensors.Environmental.Scd30\Driver\Sensors.Environmental.Scd30.csproj", "{EACC5CD9-C3EB-4BB3-A137-C0F950592519}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Scd30_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Scd30\Samples\Scd30_Sample\Scd30_Sample.csproj", "{43B00BB5-2F6A-437A-A969-B4ADF2E9F439}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pct2075", "Pct2075", "{7471C6BF-1995-4E56-91E9-86DAAA46C386}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Temperature.Pct2075", "Meadow.Foundation.Peripherals\Sensors.Temperature.Pct2075\Driver\Sensors.Temperature.Pct2075.csproj", "{3C999A94-227A-470F-935E-966E375E40BB}" @@ -1437,6 +1435,62 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{FC2E EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pct2075_Sample", "Meadow.Foundation.Peripherals\Sensors.Temperature.Pct2075\Samples\Pct2075_Sample\Pct2075_Sample.csproj", "{2B29B1A8-8903-4335-A5CC-6FFBD9069C2D}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Touchscreen", "Touchscreen", "{B773E1A0-FA17-4D5A-BAF9-29CA3CF00789}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Xpt2046", "Xpt2046", "{FB71B923-4A40-4C68-BEA9-846A57813ED2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.Xpt2046", "Meadow.Foundation.Peripherals\Sensors.Hid.Xpt2046\Driver\Sensors.Hid.Xpt2046.csproj", "{C399419B-04D5-40A2-9501-F21DEDAF3EC6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Ftxxxx", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ftxxxx\Driver\ICs.IOExpanders.Ftxxxx.csproj", "{5D1417F3-5B31-4560-9943-DF5F74FA14C0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ft232h_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ftxxxx\Samples\Ft232h_Sample\Ft232h_Sample.csproj", "{0189CCB2-916B-4448-BC3B-665736BB8806}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{927B2E17-5220-45B0-B1D7-0BB92A430E68}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xpt2046_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.Xpt2046\Samples\Xpt2046_Sample\Xpt2046_Sample.csproj", "{0592DDD2-FBEE-45DC-9DB0-191EF38FE12C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Serialization.MicroJson", "Serialization.MicroJson", "{B9C2605C-AC98-4BF1-8E3F-8F0F23A694C9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Serialization.MicroJson", "Meadow.Foundation.Libraries_and_Frameworks\Serialization.MicroJson\Driver\Serialization.MicroJson.csproj", "{D8E5BFC6-EE60-4E2D-BDF9-A4FC349A5F44}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{9543AB72-69FA-4C42-90F2-56EF19C3D57A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{CA32D6C5-DD19-4787-8EE1-B92415FEF903}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MicroJson_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Serialization.MicroJson\Samples\MicroJson_Sample\MicroJson_Sample.csproj", "{5F905795-94F9-43F3-A3F8-AD667C55A730}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MicroJson_ArrayList_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Serialization.MicroJson\Samples\MicroJson_ArrayList_Sample\MicroJson_ArrayList_Sample.csproj", "{9F5DD1C6-4A3E-4170-BE18-3FAC3A1E0D48}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Power.Ina2xx", "Meadow.Foundation.Peripherals\Sensors.Power.Ina2xx\Driver\Sensors.Power.Ina2xx.csproj", "{E04713B8-12B6-484A-AE20-4D808BBDA38B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ina219_Sample", "Meadow.Foundation.Peripherals\Sensors.Power.Ina2xx\Samples\Ina219_Sample\Ina219_Sample.csproj", "{CCA3369C-469F-42C6-9BB3-AF124A8A2428}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ina228_Sample", "Meadow.Foundation.Peripherals\Sensors.Power.Ina2xx\Samples\Ina228_Sample\Ina228_Sample.csproj", "{357E421A-0E86-4CB1-8210-B115951A6BE2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ina260_Sample", "Meadow.Foundation.Peripherals\Sensors.Power.Ina2xx\Samples\Ina260_Sample\Ina260_Sample.csproj", "{E06A278F-282F-4FB4-9F4F-902833B0E6E2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MicroJson_Complex_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Serialization.MicroJson\Samples\MicroJson_Complex_Sample\MicroJson_Complex_Sample.csproj", "{6FD1D41A-1A80-4E04-B7FF-5EDCE6A526AC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{4B7EFCFD-6454-45CF-9C95-C1BF94B17E27}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MicroJson.Unit.Tests", "Meadow.Foundation.Libraries_and_Frameworks\Serialization.MicroJson\Tests\MicroJson.Unit.Tests\MicroJson.Unit.Tests.csproj", "{BB121196-8958-466C-B899-025C12DC2B76}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bmp280_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmx280\Samples\Bmp280_Sample\Bmp280_Sample.csproj", "{1A156008-49C6-4ADD-BED9-1CF98D8FB076}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AsciiConsole_Sample", "Meadow.Foundation.Peripherals\Displays.AsciiConsole\Samples\AsciiConsole_Sample\AsciiConsole_Sample.csproj", "{85383653-A9EC-4023-BBA1-419A5CC30A78}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BarChart_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Graphics.MicroLayout\Samples\BarChart_Sample\BarChart_Sample.csproj", "{DEE00EAF-617D-4768-A2CB-A04729ADF426}" +EndProject +Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "Bme280_VB_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmx280\Samples\Bme280_VB_Sample\Bme280_VB_Sample.vbproj", "{933A1748-3481-497E-94BC-8F93D5A6E9BA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Silk", "Silk", "{0E913C73-609E-40D7-949C-553615CD13B8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Silk", "Meadow.Foundation.Peripherals\Displays.Silk\Driver\Displays.Silk.csproj", "{37F84366-1DC7-4DDF-8C33-6A45219F4882}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{3D090B0B-F863-4B8A-942C-89ED6C71BFF2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk_Sample", "Meadow.Foundation.Peripherals\Displays.Silk\Samples\Silk_Sample\Silk_Sample.csproj", "{5500B380-D815-4911-A30A-1DFB311F60BB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1883,18 +1937,6 @@ Global {DA828BA9-E57F-4579-B6B0-55910247408F}.Debug|Any CPU.Build.0 = Debug|Any CPU {DA828BA9-E57F-4579-B6B0-55910247408F}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA828BA9-E57F-4579-B6B0-55910247408F}.Release|Any CPU.Build.0 = Release|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Release|Any CPU.Build.0 = Release|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Release|Any CPU.Build.0 = Release|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Release|Any CPU.Deploy.0 = Release|Any CPU {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Debug|Any CPU.Build.0 = Debug|Any CPU {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU @@ -2921,16 +2963,6 @@ Global {E718B06A-FEAF-4E11-9344-E81272E214AA}.Release|Any CPU.ActiveCfg = Release|Any CPU {E718B06A-FEAF-4E11-9344-E81272E214AA}.Release|Any CPU.Build.0 = Release|Any CPU {E718B06A-FEAF-4E11-9344-E81272E214AA}.Release|Any CPU.Deploy.0 = Release|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Release|Any CPU.Build.0 = Release|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Release|Any CPU.Deploy.0 = Release|Any CPU - {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Release|Any CPU.Build.0 = Release|Any CPU {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}.Debug|Any CPU.Build.0 = Debug|Any CPU {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -3427,10 +3459,6 @@ Global {5A740B20-BD2A-4D8C-B37D-1F5AA0E5355B}.Release|Any CPU.ActiveCfg = Release|Any CPU {5A740B20-BD2A-4D8C-B37D-1F5AA0E5355B}.Release|Any CPU.Build.0 = Release|Any CPU {5A740B20-BD2A-4D8C-B37D-1F5AA0E5355B}.Release|Any CPU.Deploy.0 = Release|Any CPU - {2F20AD5B-5879-432B-B44F-8540DAEE5C43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2F20AD5B-5879-432B-B44F-8540DAEE5C43}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2F20AD5B-5879-432B-B44F-8540DAEE5C43}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2F20AD5B-5879-432B-B44F-8540DAEE5C43}.Release|Any CPU.Build.0 = Release|Any CPU {866EA918-39E3-4440-877C-70A3205A3D00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {866EA918-39E3-4440-877C-70A3205A3D00}.Debug|Any CPU.Build.0 = Debug|Any CPU {866EA918-39E3-4440-877C-70A3205A3D00}.Debug|Any CPU.Deploy.0 = Debug|Any CPU @@ -3447,6 +3475,14 @@ Global {A5734B07-64C0-4C93-9EB0-390B0B6A075C}.Debug|Any CPU.Build.0 = Debug|Any CPU {A5734B07-64C0-4C93-9EB0-390B0B6A075C}.Release|Any CPU.ActiveCfg = Release|Any CPU {A5734B07-64C0-4C93-9EB0-390B0B6A075C}.Release|Any CPU.Build.0 = Release|Any CPU + {EACC5CD9-C3EB-4BB3-A137-C0F950592519}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EACC5CD9-C3EB-4BB3-A137-C0F950592519}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EACC5CD9-C3EB-4BB3-A137-C0F950592519}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EACC5CD9-C3EB-4BB3-A137-C0F950592519}.Release|Any CPU.Build.0 = Release|Any CPU + {43B00BB5-2F6A-437A-A969-B4ADF2E9F439}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43B00BB5-2F6A-437A-A969-B4ADF2E9F439}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43B00BB5-2F6A-437A-A969-B4ADF2E9F439}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43B00BB5-2F6A-437A-A969-B4ADF2E9F439}.Release|Any CPU.Build.0 = Release|Any CPU {3C999A94-227A-470F-935E-966E375E40BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3C999A94-227A-470F-935E-966E375E40BB}.Debug|Any CPU.Build.0 = Debug|Any CPU {3C999A94-227A-470F-935E-966E375E40BB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU @@ -3459,6 +3495,98 @@ Global {2B29B1A8-8903-4335-A5CC-6FFBD9069C2D}.Release|Any CPU.ActiveCfg = Release|Any CPU {2B29B1A8-8903-4335-A5CC-6FFBD9069C2D}.Release|Any CPU.Build.0 = Release|Any CPU {2B29B1A8-8903-4335-A5CC-6FFBD9069C2D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C399419B-04D5-40A2-9501-F21DEDAF3EC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C399419B-04D5-40A2-9501-F21DEDAF3EC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C399419B-04D5-40A2-9501-F21DEDAF3EC6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C399419B-04D5-40A2-9501-F21DEDAF3EC6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C399419B-04D5-40A2-9501-F21DEDAF3EC6}.Release|Any CPU.Build.0 = Release|Any CPU + {C399419B-04D5-40A2-9501-F21DEDAF3EC6}.Release|Any CPU.Deploy.0 = Release|Any CPU + {5D1417F3-5B31-4560-9943-DF5F74FA14C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5D1417F3-5B31-4560-9943-DF5F74FA14C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D1417F3-5B31-4560-9943-DF5F74FA14C0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {5D1417F3-5B31-4560-9943-DF5F74FA14C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5D1417F3-5B31-4560-9943-DF5F74FA14C0}.Release|Any CPU.Build.0 = Release|Any CPU + {5D1417F3-5B31-4560-9943-DF5F74FA14C0}.Release|Any CPU.Deploy.0 = Release|Any CPU + {0189CCB2-916B-4448-BC3B-665736BB8806}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0189CCB2-916B-4448-BC3B-665736BB8806}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0189CCB2-916B-4448-BC3B-665736BB8806}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0189CCB2-916B-4448-BC3B-665736BB8806}.Release|Any CPU.Build.0 = Release|Any CPU + {0592DDD2-FBEE-45DC-9DB0-191EF38FE12C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0592DDD2-FBEE-45DC-9DB0-191EF38FE12C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0592DDD2-FBEE-45DC-9DB0-191EF38FE12C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {0592DDD2-FBEE-45DC-9DB0-191EF38FE12C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0592DDD2-FBEE-45DC-9DB0-191EF38FE12C}.Release|Any CPU.Build.0 = Release|Any CPU + {0592DDD2-FBEE-45DC-9DB0-191EF38FE12C}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D8E5BFC6-EE60-4E2D-BDF9-A4FC349A5F44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8E5BFC6-EE60-4E2D-BDF9-A4FC349A5F44}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8E5BFC6-EE60-4E2D-BDF9-A4FC349A5F44}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8E5BFC6-EE60-4E2D-BDF9-A4FC349A5F44}.Release|Any CPU.Build.0 = Release|Any CPU + {5F905795-94F9-43F3-A3F8-AD667C55A730}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5F905795-94F9-43F3-A3F8-AD667C55A730}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F905795-94F9-43F3-A3F8-AD667C55A730}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5F905795-94F9-43F3-A3F8-AD667C55A730}.Release|Any CPU.Build.0 = Release|Any CPU + {9F5DD1C6-4A3E-4170-BE18-3FAC3A1E0D48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F5DD1C6-4A3E-4170-BE18-3FAC3A1E0D48}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F5DD1C6-4A3E-4170-BE18-3FAC3A1E0D48}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F5DD1C6-4A3E-4170-BE18-3FAC3A1E0D48}.Release|Any CPU.Build.0 = Release|Any CPU + {E04713B8-12B6-484A-AE20-4D808BBDA38B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E04713B8-12B6-484A-AE20-4D808BBDA38B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E04713B8-12B6-484A-AE20-4D808BBDA38B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {E04713B8-12B6-484A-AE20-4D808BBDA38B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E04713B8-12B6-484A-AE20-4D808BBDA38B}.Release|Any CPU.Build.0 = Release|Any CPU + {E04713B8-12B6-484A-AE20-4D808BBDA38B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {CCA3369C-469F-42C6-9BB3-AF124A8A2428}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCA3369C-469F-42C6-9BB3-AF124A8A2428}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCA3369C-469F-42C6-9BB3-AF124A8A2428}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {CCA3369C-469F-42C6-9BB3-AF124A8A2428}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCA3369C-469F-42C6-9BB3-AF124A8A2428}.Release|Any CPU.Build.0 = Release|Any CPU + {CCA3369C-469F-42C6-9BB3-AF124A8A2428}.Release|Any CPU.Deploy.0 = Release|Any CPU + {357E421A-0E86-4CB1-8210-B115951A6BE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {357E421A-0E86-4CB1-8210-B115951A6BE2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {357E421A-0E86-4CB1-8210-B115951A6BE2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {357E421A-0E86-4CB1-8210-B115951A6BE2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {357E421A-0E86-4CB1-8210-B115951A6BE2}.Release|Any CPU.Build.0 = Release|Any CPU + {357E421A-0E86-4CB1-8210-B115951A6BE2}.Release|Any CPU.Deploy.0 = Release|Any CPU + {E06A278F-282F-4FB4-9F4F-902833B0E6E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E06A278F-282F-4FB4-9F4F-902833B0E6E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E06A278F-282F-4FB4-9F4F-902833B0E6E2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {E06A278F-282F-4FB4-9F4F-902833B0E6E2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E06A278F-282F-4FB4-9F4F-902833B0E6E2}.Release|Any CPU.Build.0 = Release|Any CPU + {E06A278F-282F-4FB4-9F4F-902833B0E6E2}.Release|Any CPU.Deploy.0 = Release|Any CPU + {6FD1D41A-1A80-4E04-B7FF-5EDCE6A526AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6FD1D41A-1A80-4E04-B7FF-5EDCE6A526AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6FD1D41A-1A80-4E04-B7FF-5EDCE6A526AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6FD1D41A-1A80-4E04-B7FF-5EDCE6A526AC}.Release|Any CPU.Build.0 = Release|Any CPU + {BB121196-8958-466C-B899-025C12DC2B76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB121196-8958-466C-B899-025C12DC2B76}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB121196-8958-466C-B899-025C12DC2B76}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB121196-8958-466C-B899-025C12DC2B76}.Release|Any CPU.Build.0 = Release|Any CPU + {1A156008-49C6-4ADD-BED9-1CF98D8FB076}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1A156008-49C6-4ADD-BED9-1CF98D8FB076}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1A156008-49C6-4ADD-BED9-1CF98D8FB076}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1A156008-49C6-4ADD-BED9-1CF98D8FB076}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1A156008-49C6-4ADD-BED9-1CF98D8FB076}.Release|Any CPU.Build.0 = Release|Any CPU + {1A156008-49C6-4ADD-BED9-1CF98D8FB076}.Release|Any CPU.Deploy.0 = Release|Any CPU + {85383653-A9EC-4023-BBA1-419A5CC30A78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85383653-A9EC-4023-BBA1-419A5CC30A78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85383653-A9EC-4023-BBA1-419A5CC30A78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85383653-A9EC-4023-BBA1-419A5CC30A78}.Release|Any CPU.Build.0 = Release|Any CPU + {DEE00EAF-617D-4768-A2CB-A04729ADF426}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DEE00EAF-617D-4768-A2CB-A04729ADF426}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DEE00EAF-617D-4768-A2CB-A04729ADF426}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DEE00EAF-617D-4768-A2CB-A04729ADF426}.Release|Any CPU.Build.0 = Release|Any CPU + {933A1748-3481-497E-94BC-8F93D5A6E9BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {933A1748-3481-497E-94BC-8F93D5A6E9BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {933A1748-3481-497E-94BC-8F93D5A6E9BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {933A1748-3481-497E-94BC-8F93D5A6E9BA}.Release|Any CPU.Build.0 = Release|Any CPU + {37F84366-1DC7-4DDF-8C33-6A45219F4882}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {37F84366-1DC7-4DDF-8C33-6A45219F4882}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37F84366-1DC7-4DDF-8C33-6A45219F4882}.Release|Any CPU.ActiveCfg = Release|Any CPU + {37F84366-1DC7-4DDF-8C33-6A45219F4882}.Release|Any CPU.Build.0 = Release|Any CPU + {5500B380-D815-4911-A30A-1DFB311F60BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5500B380-D815-4911-A30A-1DFB311F60BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5500B380-D815-4911-A30A-1DFB311F60BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5500B380-D815-4911-A30A-1DFB311F60BB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3665,8 +3793,6 @@ Global {DA828BA9-E57F-4579-B6B0-55910247408F} = {D78EB96C-0105-4D6A-A34D-BD271912617E} {18BD90D6-3D88-44A4-A366-134D12F3F823} = {C95CDA6C-3968-467E-80ED-5A963BE96215} {9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F} = {18BD90D6-3D88-44A4-A366-134D12F3F823} - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F} = {18BD90D6-3D88-44A4-A366-134D12F3F823} - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A} = {9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F} {C453850E-43AD-4AE5-82F1-76E0168E7260} = {C12ECFF4-2767-4764-8B98-85A239B9E756} {882011AD-05A3-43F9-9B64-2032982948D6} = {C453850E-43AD-4AE5-82F1-76E0168E7260} {267DBD91-4ABE-4B34-A788-32EC7B34B4FE} = {C453850E-43AD-4AE5-82F1-76E0168E7260} @@ -3852,7 +3978,7 @@ Global {6AF2F8E5-423F-4EF7-9AB6-1978792598B7} = {8FB70D12-1111-480B-B64C-B8EB65977F58} {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7} = {8FB70D12-1111-480B-B64C-B8EB65977F58} {598D3695-BEB7-4BD7-AE6A-C296F36265E7} = {0BB488AA-E23E-4697-BBD9-4A17B21BFCD7} - {372B055D-2279-47D2-B1A8-AB1E5670202F} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} + {372B055D-2279-47D2-B1A8-AB1E5670202F} = {B773E1A0-FA17-4D5A-BAF9-29CA3CF00789} {8908AAA5-53DD-4526-AAF8-01308F1316EF} = {372B055D-2279-47D2-B1A8-AB1E5670202F} {B167E0C6-F2D8-4B4F-B814-578B72B083BE} = {372B055D-2279-47D2-B1A8-AB1E5670202F} {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4} = {B167E0C6-F2D8-4B4F-B814-578B72B083BE} @@ -4010,9 +4136,7 @@ Global {F9B62A9D-4DDC-4646-9B43-06D471E0F82C} = {718EE625-B05F-4BC9-8CE3-A7659BCA22A4} {E718B06A-FEAF-4E11-9344-E81272E214AA} = {F9B62A9D-4DDC-4646-9B43-06D471E0F82C} {4E0052C2-559D-4509-9C42-C6451B1F1FFC} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {BEF5B037-DAB7-43C6-8A5C-EB749573C815} = {4E0052C2-559D-4509-9C42-C6451B1F1FFC} {67B5150B-2FDE-4EA8-93EE-8BB31D5D7789} = {4E0052C2-559D-4509-9C42-C6451B1F1FFC} - {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9} = {67B5150B-2FDE-4EA8-93EE-8BB31D5D7789} {BBF136B7-361C-4FC2-AACA-6B6ED79BDCF1} = {2B794146-DFEE-475A-B919-7D3ED48587B8} {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2} = {BBF136B7-361C-4FC2-AACA-6B6ED79BDCF1} {14ACE12B-5B23-4FF3-B3C2-BFECB21064A6} = {2B794146-DFEE-475A-B919-7D3ED48587B8} @@ -4168,15 +4292,46 @@ Global {5A740B20-BD2A-4D8C-B37D-1F5AA0E5355B} = {087005C6-1E96-490D-94FF-90CF75F10E53} {E775FF9F-8AC5-4994-B45A-20B50E2B03E2} = {2B794146-DFEE-475A-B919-7D3ED48587B8} {40687DAC-F3EF-4F70-850A-0429B9586648} = {E775FF9F-8AC5-4994-B45A-20B50E2B03E2} - {2F20AD5B-5879-432B-B44F-8540DAEE5C43} = {40687DAC-F3EF-4F70-850A-0429B9586648} {866EA918-39E3-4440-877C-70A3205A3D00} = {E608C8E7-1B76-4859-9AF9-C868B5C61994} {27589062-708E-44CD-9DF4-0D16899265FE} = {E775FF9F-8AC5-4994-B45A-20B50E2B03E2} {80EC3729-DB91-4F94-B11D-B611A214BA31} = {BBF136B7-361C-4FC2-AACA-6B6ED79BDCF1} {A5734B07-64C0-4C93-9EB0-390B0B6A075C} = {80EC3729-DB91-4F94-B11D-B611A214BA31} + {BAACC3E2-3E7E-4BDF-B4FD-23E166D64282} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} + {A3EF6DB1-971C-4891-853A-369652E36959} = {BAACC3E2-3E7E-4BDF-B4FD-23E166D64282} + {EACC5CD9-C3EB-4BB3-A137-C0F950592519} = {BAACC3E2-3E7E-4BDF-B4FD-23E166D64282} + {43B00BB5-2F6A-437A-A969-B4ADF2E9F439} = {A3EF6DB1-971C-4891-853A-369652E36959} {7471C6BF-1995-4E56-91E9-86DAAA46C386} = {DBC6C89D-A932-4F99-9382-7405A0045988} {3C999A94-227A-470F-935E-966E375E40BB} = {7471C6BF-1995-4E56-91E9-86DAAA46C386} {FC2EEFA9-030B-4EF0-AFB7-1CC61876D1EE} = {7471C6BF-1995-4E56-91E9-86DAAA46C386} {2B29B1A8-8903-4335-A5CC-6FFBD9069C2D} = {FC2EEFA9-030B-4EF0-AFB7-1CC61876D1EE} + {B773E1A0-FA17-4D5A-BAF9-29CA3CF00789} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} + {FB71B923-4A40-4C68-BEA9-846A57813ED2} = {B773E1A0-FA17-4D5A-BAF9-29CA3CF00789} + {C399419B-04D5-40A2-9501-F21DEDAF3EC6} = {FB71B923-4A40-4C68-BEA9-846A57813ED2} + {5D1417F3-5B31-4560-9943-DF5F74FA14C0} = {4E0052C2-559D-4509-9C42-C6451B1F1FFC} + {0189CCB2-916B-4448-BC3B-665736BB8806} = {67B5150B-2FDE-4EA8-93EE-8BB31D5D7789} + {927B2E17-5220-45B0-B1D7-0BB92A430E68} = {FB71B923-4A40-4C68-BEA9-846A57813ED2} + {0592DDD2-FBEE-45DC-9DB0-191EF38FE12C} = {927B2E17-5220-45B0-B1D7-0BB92A430E68} + {B9C2605C-AC98-4BF1-8E3F-8F0F23A694C9} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} + {D8E5BFC6-EE60-4E2D-BDF9-A4FC349A5F44} = {9543AB72-69FA-4C42-90F2-56EF19C3D57A} + {9543AB72-69FA-4C42-90F2-56EF19C3D57A} = {B9C2605C-AC98-4BF1-8E3F-8F0F23A694C9} + {CA32D6C5-DD19-4787-8EE1-B92415FEF903} = {B9C2605C-AC98-4BF1-8E3F-8F0F23A694C9} + {5F905795-94F9-43F3-A3F8-AD667C55A730} = {CA32D6C5-DD19-4787-8EE1-B92415FEF903} + {9F5DD1C6-4A3E-4170-BE18-3FAC3A1E0D48} = {CA32D6C5-DD19-4787-8EE1-B92415FEF903} + {E04713B8-12B6-484A-AE20-4D808BBDA38B} = {18BD90D6-3D88-44A4-A366-134D12F3F823} + {CCA3369C-469F-42C6-9BB3-AF124A8A2428} = {9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F} + {357E421A-0E86-4CB1-8210-B115951A6BE2} = {9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F} + {E06A278F-282F-4FB4-9F4F-902833B0E6E2} = {9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F} + {6FD1D41A-1A80-4E04-B7FF-5EDCE6A526AC} = {CA32D6C5-DD19-4787-8EE1-B92415FEF903} + {4B7EFCFD-6454-45CF-9C95-C1BF94B17E27} = {B9C2605C-AC98-4BF1-8E3F-8F0F23A694C9} + {BB121196-8958-466C-B899-025C12DC2B76} = {4B7EFCFD-6454-45CF-9C95-C1BF94B17E27} + {1A156008-49C6-4ADD-BED9-1CF98D8FB076} = {21C511DD-43DD-486E-86D7-18D8F6810ACD} + {85383653-A9EC-4023-BBA1-419A5CC30A78} = {40687DAC-F3EF-4F70-850A-0429B9586648} + {DEE00EAF-617D-4768-A2CB-A04729ADF426} = {E762EEFF-E646-4517-BAE6-4E23A34854DC} + {933A1748-3481-497E-94BC-8F93D5A6E9BA} = {21C511DD-43DD-486E-86D7-18D8F6810ACD} + {0E913C73-609E-40D7-949C-553615CD13B8} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {37F84366-1DC7-4DDF-8C33-6A45219F4882} = {0E913C73-609E-40D7-949C-553615CD13B8} + {3D090B0B-F863-4B8A-942C-89ED6C71BFF2} = {0E913C73-609E-40D7-949C-553615CD13B8} + {5500B380-D815-4911-A30A-1DFB311F60BB} = {3D090B0B-F863-4B8A-942C-89ED6C71BFF2} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AF7CA16F-8C38-4546-87A2-5DAAF58A1520}