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
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 @@
+
+
+
+
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 @@
+
+
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}