Compare commits

..

10 Commits

Author SHA1 Message Date
Sven Vogel 51a90d0e2a fixed image urls after repository move 2023-12-10 19:21:46 +00:00
Sven Vogel a8a5d92d96 added images to README 2023-02-27 18:51:32 +00:00
Teridax 95a750e489
Update README.md 2022-10-09 21:57:57 +00:00
Sven Vogel 917631c4ad new controller setup 2021-11-30 16:11:07 +01:00
Sven Vogel e0b321b61d Spashscreen updated 2021-08-08 15:05:12 +02:00
Sven Vogel 54ece7e1f3 2 new instructions:
- upload (beta)
- info

RP2040 support (see .py)
bug fixes
2021-08-08 14:50:24 +02:00
Sven Vogel da6e4bbb08 Arduino Code Update for Success Byte Fix 2021-07-06 14:41:58 +02:00
Sven Vogel ee5aee20dc Bug fixes II.
Ready for presentation
2021-07-06 14:40:41 +02:00
Sven Vogel 979133f314 Bug fixes 2021-07-06 14:17:53 +02:00
Sven Vogel 5b90fee738 Bug fixes
+ minecraft filter
+ HSL color space for color adjust
+ builtin gamma correction
+ matrix orientation flip
2021-07-04 14:56:52 +02:00
160 changed files with 3645 additions and 2186 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/Matrix App/bin/

Binary file not shown.

View File

@ -0,0 +1,169 @@
from time import sleep
from machine import UART, Pin
import array, time
from machine import Pin
import rp2
# Configure the number of WS2812 LEDs.
NUM_LEDS = 256
PIN_NUM = 16
brightness = 0.2
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
wrap_target()
label("bitloop")
out(x, 1) .side(0) [T3 - 1]
jmp(not_x, "do_zero") .side(1) [T1 - 1]
jmp("bitloop") .side(1) [T2 - 1]
label("do_zero")
nop() .side(0) [T2 - 1]
wrap()
# Create the StateMachine with the ws2812 program, outputting on pin
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(PIN_NUM))
# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)
# Display a pattern on the LEDs via an array of LED RGB values.
global ar
global leds
global gif
global currentFrame
global delay
##########################################################################
def show():
for i in range(leds):
r = ar[i] >> 16
g = ar[i] >> 8 & 0xFF
b = ar[i] & 0xFF
r = r >> 1
g = g >> 1
b = b >> 1
ar[i] = r << 16 | g << 8 | b
sm.put(ar, 8)
leds = 256 # number of leds
uart = UART(0, 9600) # serial bluetooth
led = Pin(25, Pin.OUT) # builtin LED
ar = array.array("I", [0 for _ in range(NUM_LEDS)]) # color array
gif = [array.array("I", [0 for _ in range(leds)]) for _ in range(1)]
currentFrame = -1
# gurantees that only N-bytes are read from the UART
def readNBytes(n):
rawBytes = b''
bytesRead = 0
while True:
if uart.any():
rawBytes += uart.read(n - bytesRead)
bytesRead = len(rawBytes)
# not enough was read
if bytesRead < n:
continue
else:
return rawBytes
while True:
led.low()
if uart.any() != 0:
opcode = uart.read(1)
print("Opcode: ", opcode)
if opcode == b'\x00':
width = readNBytes(1)[0]
height = readNBytes(1)[0]
if width <= 32 and height <= 32:
leds = width * height
ar = array.array("I", [0 for _ in range(leds)])
show()
elif opcode == b'\x02':
rawBytes = readNBytes(leds * 3);
for i in range(leds):
ar[i] = rawBytes[i * 3 + 1] << 16 | rawBytes[i * 3] << 8 | rawBytes[i * 3 + 2]
show()
currentFrame = -1
elif opcode == b'\x03':
r = readNBytes(1)
g = readNBytes(1)
b = readNBytes(1)
for i in range(leds):
ar[i] = g[0] << 16 | r[0] << 8 | b[0]
show()
elif opcode == b'\x04':
uart.write([75])
# [width] [height] [frames] [delay] [rgb-frames]
elif opcode == b'\x05':
gifDim = readNBytes(5)
delay = (gifDim[3] << 8) | gifDim[4]
print("w ", gifDim[0], " h ", gifDim[1], " f ", gifDim[2], " d ", delay)
leds = gifDim[0] * gifDim[1]
gif = [array.array("I", [0 for _ in range(leds)]) for _ in range(gifDim[2])]
for f in range(gifDim[2]):
frame = readNBytes(leds * 3)
print("frame read: ", f)
for i in range(leds):
gif[f][i] = frame[i * 3 + 1] << 16 | frame[i * 3] << 8 | frame[i * 3 + 2]
#uart.write(bytearray([91])) # synchronize
currentFrame = 0
print("Everything read")
# [Synchro-byte] [feature-flags] [Controller-Id]
#
# feature-flags:
# [Bit 7] = Bluetooth (true)
# [Bit 6] = USB (false)
# [Bit 0] = Upload (true)
#
elif opcode == b'\x06':
uart.write(b'\x5B\x81')
uart.write("RP2040 Micro python")
led.high()
uart.write(bytearray([75]))
elif currentFrame != -1:
print("showing")
for i in range(leds):
ar[i] = gif[currentFrame][i]
show()
currentFrame += 1
if (currentFrame >= len(gif)):
currentFrame = 0
time.sleep(delay * 1e-3)

View File

@ -8,8 +8,8 @@
#define MATRIX_MAX_HEIGHT 20 #define MATRIX_MAX_HEIGHT 20
#define MATRIX_LED_MAX_COUNT (MATRIX_MAX_WIDTH * MATRIX_MAX_HEIGHT) #define MATRIX_LED_MAX_COUNT (MATRIX_MAX_WIDTH * MATRIX_MAX_HEIGHT)
#define STD_WIDTH 10 #define STD_WIDTH 16
#define STD_HEIGHT 10 #define STD_HEIGHT 16
#define STD_LED_MAX_COUNT (STD_WIDTH * STD_HEIGHT) #define STD_LED_MAX_COUNT (STD_WIDTH * STD_HEIGHT)
//#define DEBUG_PRINT_CALLBACK //#define DEBUG_PRINT_CALLBACK
@ -23,14 +23,6 @@ uint8_t height = STD_HEIGHT;
uint32_t ledCount; uint32_t ledCount;
uint8_t gamma8(uint8_t x) {
uint32_t x2 = (uint32_t) x;
x2 = x2 * x2 * 258 >> 16;
return (uint8_t) x2;
}
CRGB leds[MATRIX_LED_MAX_COUNT]; CRGB leds[MATRIX_LED_MAX_COUNT];
typedef void (*FNPTR_t)(); typedef void (*FNPTR_t)();
@ -42,7 +34,7 @@ uint8_t getByte() {
uint16_t getWord() { uint16_t getWord() {
uint16_t highByte = getByte(); uint16_t highByte = getByte();
uint16_t lowByte = getByte(); uint16_t lowByte = getByte();
return highByte << 8 | lowByte; return highByte << 8 | lowByte;
} }
@ -51,7 +43,7 @@ void scale() {
#ifdef DEBUG_PRINT_CALLBACK #ifdef DEBUG_PRINT_CALLBACK
Serial.println("scale called"); Serial.println("scale called");
#endif #endif
width = getByte(); width = getByte();
height = getByte(); height = getByte();
#ifdef DEBUG_PRINT_CALLBACK #ifdef DEBUG_PRINT_CALLBACK
@ -75,14 +67,11 @@ void scale() {
Serial.println(ledCount); Serial.println(ledCount);
#endif #endif
FastLED.addLeds<LED_TYPE, DATA_PIN, GRB>(leds, ledCount);
FastLED.addLeds<LED_TYPE, DATA_PIN>(leds, ledCount); for (uint16_t x = 0; x < ledCount; x++) {
leds[x] = 0;
for (uint16_t x = 0; x < ledCount; x++) { }
leds[x].r = 0;
leds[x].g = 0;
leds[x].b = 0;
}
FastLED.show(); FastLED.show();
} }
@ -93,9 +82,9 @@ void single() {
#endif #endif
uint16_t index = getWord(); uint16_t index = getWord();
uint8_t green = gamma8(getByte()); uint8_t green = getByte();
uint8_t red = gamma8(getByte()); uint8_t red = getByte();
uint8_t blue = gamma8(getByte()); uint8_t blue = getByte();
#ifdef DEBUG_PRINT_CALLBACK #ifdef DEBUG_PRINT_CALLBACK
Serial.print("Index: "); Serial.print("Index: ");
@ -120,12 +109,6 @@ void image() {
Serial.readBytes((char*) leds, ledCount * 3); Serial.readBytes((char*) leds, ledCount * 3);
for (uint16_t x = 0; x < ledCount; x++) {
leds[x].r = gamma8(leds[x].r);
leds[x].g = gamma8(leds[x].g);
leds[x].b = gamma8(leds[x].b);
}
FastLED.show(); FastLED.show();
} }
@ -134,9 +117,9 @@ void fill() {
Serial.println("Called fill"); Serial.println("Called fill");
#endif #endif
uint8_t green = gamma8(getByte()); uint8_t green = getByte();
uint8_t red = gamma8(getByte()); uint8_t red = getByte();
uint8_t blue = gamma8(getByte()); uint8_t blue = getByte();
#ifdef DEBUG_PRINT_CALLBACK #ifdef DEBUG_PRINT_CALLBACK
Serial.print("Red: "); Serial.print("Red: ");
@ -170,25 +153,39 @@ void config() {
} }
} }
void upload() {
return;
}
void info() {
Serial.write((uint8_t) 91);
Serial.write((uint8_t) 0b01000000);
Serial.write("ATmega328P Arduino");
}
FNPTR_t opcodeTable[] = { FNPTR_t opcodeTable[] = {
scale, // opcode 0x00 scale, // opcode 0x00
single, // opcode 0x01 single, // opcode 0x01
image, // opcode 0x02 image, // opcode 0x02
fill, // opcode 0x03 fill, // opcode 0x03
config // opcode 0x04 config, // opcode 0x04
}; upload,
info
};
void setup() { void setup() {
ledCount = STD_LED_MAX_COUNT; ledCount = STD_LED_MAX_COUNT;
Serial.begin(9600); Serial.begin(9600);
FastLED.addLeds<LED_TYPE, DATA_PIN>(leds, ledCount); FastLED.addLeds<LED_TYPE, DATA_PIN, GRB>(leds, ledCount);
FastLED.setCorrection(TypicalLEDStrip);
FastLED.setBrightness(80);
for (uint16_t i = 0; i < ledCount; i++) { for (uint16_t i = 0; i < ledCount; i++) {
leds[i].r = 0; leds[i] = 0;
leds[i].g = 0;
leds[i].b = 0;
} }
FastLED.show(); FastLED.show();
} }
@ -205,9 +202,9 @@ void loop() {
Serial.println(opcode); Serial.println(opcode);
#endif #endif
if (opcode <= 4) { if (opcode <= 6) {
opcodeTable[opcode](); opcodeTable[opcode]();
Serial.write(21); Serial.write(75);
} }
} }
} }

View File

@ -1,5 +1,12 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Matrix_0020App_002Fforms_002FColorWheel/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Matrix_0020App_002Fforms_002FMatrix/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Matrix_0020App_002Fforms_002FMatrixDesigner/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Matrix_0020App_002Fforms_002FSettings/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Matrix_0020App_002FMatrix/@EntryIndexedValue">False</s:Boolean> <s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Matrix_0020App_002FMatrix/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Matrix_0020App_002FMatrixDesigner/@EntryIndexedValue">False</s:Boolean> <s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Matrix_0020App_002FMatrixDesigner/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Matrix_0020App_002FProperties_002FResources/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Matrix_0020App_002FProperties_002FResources/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/Initialized/@EntryValue">True</s:Boolean></wpf:ResourceDictionary> <s:Boolean x:Key="/Default/ResxEditorPersonal/Initialized/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/OrderByFullPath/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/ShowComments/@EntryValue">False</s:Boolean></wpf:ResourceDictionary>

View File

@ -3,10 +3,8 @@ namespace Matrix_App
{ {
public static class Defaults public static class Defaults
{ {
public const int PortNameUpdateInterval = 5000; public const int MatrixStartWidth = 16;
public const int MatrixStartHeight = 16;
public const int MatrixStartWidth = 10;
public const int MatrixStartHeight = 10;
public const int MatrixStartFrames = 1; public const int MatrixStartFrames = 1;
public const int MatrixLimitedWidth = 512; public const int MatrixLimitedWidth = 512;
@ -14,14 +12,9 @@ namespace Matrix_App
public const int BaudRate = 9600; public const int BaudRate = 9600;
public const int ReadTimeoutMs = 5500; public const int ReadTimeoutMs = 20500;
public const int WriteTimeoutMs = 5500; public const int WriteTimeoutMs = 2500;
/// <summary>
/// Total count of LEDs at start
/// </summary>
public static readonly int MATRIX_START_LED_COUNT = MatrixStartWidth * MatrixStartHeight * Bpp;
/// <summary> /// <summary>
/// Number of Bytes Per Pixel: 3 cause Red (1 byte) + Blue (1 Byte) + Green (1 byte) = 3 /// Number of Bytes Per Pixel: 3 cause Red (1 byte) + Blue (1 Byte) + Green (1 byte) = 3
/// </summary> /// </summary>
@ -30,12 +23,14 @@ namespace Matrix_App
public const int FilterPreviewWidth = 32; public const int FilterPreviewWidth = 32;
public const int FilterPreviewHeight = 32; public const int FilterPreviewHeight = 32;
public const int ArduinoSuccessByte = 21; public const int ArduinoSynchronizationByte = 91;
public const int ArduinoSuccessByte = 75;
public const int ArduinoErrorByte = 255;
public const int ArduinoCommandQueueSize = 5; public const int ArduinoCommandQueueSize = 2;
public const int ArduinoReceiveBufferSize = 1 + 1 + 1 + MatrixLimitedWidth * MatrixLimitedHeight; public const int ArduinoReceiveBufferSize = 1 + 1 + 1 + MatrixLimitedWidth * MatrixLimitedHeight;
public const int DequeueWaitTimeoutCounter = 2; public const int DequeueWaitTimeoutCounter = 3;
} }
public static class ArduinoInstruction public static class ArduinoInstruction
@ -43,6 +38,9 @@ namespace Matrix_App
public const byte OpcodeScale = 0; public const byte OpcodeScale = 0;
public const byte OpcodeImage = 2; public const byte OpcodeImage = 2;
public const byte OpcodeFill = 3; public const byte OpcodeFill = 3;
public static readonly byte OPCODE_CONFIG = 4; public const byte OpcodePush = 5;
public const byte OpcodeInfo = 6;
// public static readonly byte OpcodeConfig = 4;
} }
} }

View File

@ -8,6 +8,7 @@
<ApplicationIcon>MatrixIcon.ico</ApplicationIcon> <ApplicationIcon>MatrixIcon.ico</ApplicationIcon>
<EnableNETAnalyzers>true</EnableNETAnalyzers> <EnableNETAnalyzers>true</EnableNETAnalyzers>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@ -17,7 +18,9 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="System.IO.Ports" Version="3.1.0" /> <PackageReference Include="Bluetooth" Version="1.0.0.2" />
<PackageReference Include="System.Drawing.Common" Version="5.0.2" />
<PackageReference Include="System.IO.Ports" Version="6.0.0-preview.5.21301.5" />
<PackageReference Include="System.Management" Version="5.0.0" /> <PackageReference Include="System.Management" Version="5.0.0" />
</ItemGroup> </ItemGroup>
@ -28,6 +31,21 @@
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
</Compile> </Compile>
<Compile Remove="SplashScreen.Designer.cs" /> <Compile Remove="SplashScreen.Designer.cs" />
<Compile Update="forms\MatrixDesigner.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="forms\Matrix.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="forms\ColorWheel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="forms\SplashScreen.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="forms\Settings.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -10,5 +10,8 @@
<Compile Update="Matrix.cs"> <Compile Update="Matrix.cs">
<SubType>UserControl</SubType> <SubType>UserControl</SubType>
</Compile> </Compile>
<Compile Update="SplashScreen.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,182 +0,0 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Ports;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using static Matrix_App.Defaults;
namespace Matrix_App
{
public class PortCommandQueue
{
private const string threadDeliverName = "Arduino Port Deliver Thread";
private Queue<byte[]> byteWriteQueue = new Queue<byte[]>();
private Thread portDeliverThread;
private SerialPort port;
private bool running = false;
private volatile bool kill = false;
private volatile bool isPortValid = false;
private byte[] recived = new byte[ArduinoReceiveBufferSize];
private int mark;
public PortCommandQueue(ref SerialPort port)
{
this.port = port;
portDeliverThread = new Thread(new ThreadStart(ManageQueue));
portDeliverThread.Name = threadDeliverName;
}
private void ManageQueue()
{
try
{
while (!kill)
{
if (byteWriteQueue.Count > 0)
{
byte[] bytes;
lock (byteWriteQueue)
{
bytes = byteWriteQueue.Dequeue();
}
lock (port)
{
if (isPortValid)
{
port.Open();
port.Write(bytes, 0, bytes.Length);
int b;
mark = 0;
while((b = port.ReadByte()) != ArduinoSuccessByte)
{
recived[mark++] = (byte) b;
}
port.Close();
}
}
}
}
} catch (ThreadInterruptedException)
{
Thread.CurrentThread.Interrupt();
return;
}
catch (Exception)
{
// omit
}
}
[SecurityPermissionAttribute(SecurityAction.Demand, ControlThread = true)]
public void Close()
{
try
{
if (running)
{
kill = true;
portDeliverThread.Interrupt();
portDeliverThread.Join(1000);
}
}
catch (ThreadStartException)
{
// omit
}
catch (ThreadInterruptedException)
{
// omit
}
}
public void EnqueueArduinoCommand(params byte[] bytes)
{
if (!running)
{
running = true;
portDeliverThread.Start();
}
if (byteWriteQueue.Count < ArduinoCommandQueueSize)
{
lock (byteWriteQueue)
{
byteWriteQueue.Enqueue(bytes);
}
}
}
public void EnqueueArduinoCommand(byte opcode, params byte[] data)
{
byte[] wrapper = new byte[data.Length + 1];
System.Buffer.BlockCopy(data, 0, wrapper, 1, data.Length);
wrapper[0] = opcode;
EnqueueArduinoCommand(wrapper);
}
public void DequeueAll()
{
lock (byteWriteQueue)
{
byteWriteQueue.Clear();
}
}
internal void WaitForLastDequeue()
{
int timeCount = 0;
bool wait = true;
while(wait)
{
lock(byteWriteQueue)
{
wait = byteWriteQueue.Count != 0;
}
timeCount++;
Thread.Sleep(500);
wait = timeCount == DequeueWaitTimeoutCounter;
}
}
public byte[] GetLastData()
{
return recived;
}
public void ValidatePort()
{
isPortValid = true;
}
public void InvalidatePort()
{
isPortValid = false;
}
public int GetMark()
{
int tmp = mark;
mark = 0;
return tmp;
}
}
}

View File

@ -31,6 +31,62 @@ namespace Matrix_App
x /= len; x /= len;
y /= len; y /= len;
} }
public static void RgbFromHsl(float h, float s, float l, out float r, out float g, out float b)
{
var c = (1 - MathF.Abs(2 * l - 1)) * s;
var x = c * (1.0f - Math.Abs((h / 60.0f) % 2.0f - 1.0f));
var m = l - c * 0.5f;
if (h < 60) { r = c; g = x; b = 0; }
else if (h < 120) { r = x; g = c; b = 0; }
else if (h < 180) { r = 0; g = c; b = x; }
else if (h < 240) { r = 0; g = x; b = c; }
else if (h < 300) { r = x; g = 0; b = c; }
else { r = c; g = 0; b = x; }
r += m;
g += m;
b += m;
}
public static void HslFromRgb(float r, float g, float b, out float h, out float s, out float l)
{
var cmax = Math.Max(Math.Max(r, g), b);
var cmin = Math.Min(Math.Min(r, g), b);
var delta = cmax - cmin;
if (delta < 1e-2)
{
h = 0;
}
else if (MathF.Abs(cmax - r) < 1e-3)
{
if (r < b)
{
h = 360 - MathF.Abs(60 * ((g - b) / delta));
}
else
{
h = 60 * ((g - b) / delta + 0f);
}
}
else if (MathF.Abs(cmax - g) < 1e-3)
{
h = 60 * ((b - r) / delta + 2f);
}
else if (MathF.Abs(cmax - b) < 1e-3)
{
h = 60 * ((r - g) / delta + 4f);
} else
{
h = 0;
}
l = (cmax + cmin) * 0.5f;
s = (cmax - cmin) / (1 - MathF.Abs(2 * l - 1.0f));
}
public static void RgbFromHsv(float h, float s, float v, out float r, out float g, out float b) public static void RgbFromHsv(float h, float s, float v, out float r, out float g, out float b)
{ {

View File

@ -4,6 +4,7 @@ using System.Drawing;
using System.Reflection; using System.Reflection;
using System.Threading; using System.Threading;
using System.Windows.Forms; using System.Windows.Forms;
using Matrix_App.minecraft;
using Matrix_App.PregeneratedMods.reflection; using Matrix_App.PregeneratedMods.reflection;
using static Matrix_App.Utils; using static Matrix_App.Utils;
using static Matrix_App.Defaults; using static Matrix_App.Defaults;
@ -23,7 +24,9 @@ namespace Matrix_App
new Boxblur(), new Boxblur(),
new ColorAdjust(), new ColorAdjust(),
new Grayscale(), new Grayscale(),
new Invert() new Invert(),
new Transfom(),
new Minecraft()
}; };
// Static generator accessible members // Static generator accessible members
@ -77,6 +80,8 @@ namespace Matrix_App
_playbackFrame++; _playbackFrame++;
} }
public delegate void update();
/// <summary> /// <summary>
/// Colors a single fragment at the specified pixel location (x|y) at frame frame. /// Colors a single fragment at the specified pixel location (x|y) at frame frame.
/// </summary> /// </summary>
@ -90,6 +95,8 @@ namespace Matrix_App
/// <param name="b">Pixel Blue value in range [0, 1] (saturated)</param> /// <param name="b">Pixel Blue value in range [0, 1] (saturated)</param>
protected abstract void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b); protected abstract void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b);
protected abstract void CreateUi(FlowLayoutPanel anchor, update runner);
// Buffer to store generator result in // Buffer to store generator result in
private static byte[][] _animationBuffer = null!; private static byte[][] _animationBuffer = null!;
@ -107,13 +114,21 @@ namespace Matrix_App
// generate button // generate button
var button = new Button var button = new Button
{ {
Width = 215, AutoSize = true,
Text = FieldWidgets.GetBetterFieldName(generator.GetType().Name) Text = FieldWidgets.GetBetterFieldName(generator.GetType().Name)
}; };
button.Click += (sender, e) => OpenGeneratorUi(generator, matrix); button.Width = anchor.ClientSize.Width - button.Margin.Right - button.Margin.Left;
button.Click += (sender, e) =>
{
lock (matrix)
{
OpenGeneratorUi(generator, matrix);
}
};
button.Image = CreateSnapshot(generator); button.Image = CreateSnapshot(generator);
button.TextImageRelation = TextImageRelation.ImageBeforeText; button.TextImageRelation = TextImageRelation.ImageBeforeText;
button.Height = FilterPreviewHeight * 3 / 2; button.TextAlign = ContentAlignment.MiddleRight;
button.ImageAlign = ContentAlignment.MiddleLeft;
anchor.Controls.Add(button); anchor.Controls.Add(button);
} }
@ -165,7 +180,7 @@ namespace Matrix_App
@"Filter incomplete", MessageBoxButtons.YesNo, MessageBoxIcon.Warning)) @"Filter incomplete", MessageBoxButtons.YesNo, MessageBoxIcon.Warning))
{ {
BlockBuffer(); BlockBuffer();
FlipColorStoreRG_GR(_animationBuffer, MatrixDesignerMain.gifBuffer); ColorStore(_animationBuffer, MatrixDesignerMain.gifBuffer);
_form.ResetTimeline(); _form.ResetTimeline();
} }
else else
@ -175,7 +190,7 @@ namespace Matrix_App
} }
else else
{ {
FlipColorStoreRG_GR(_animationBuffer, MatrixDesignerMain.gifBuffer); ColorStore(_animationBuffer, MatrixDesignerMain.gifBuffer);
_form.ResetTimeline(); _form.ResetTimeline();
} }
} }
@ -204,11 +219,11 @@ namespace Matrix_App
Form prompt = new Form Form prompt = new Form
{ {
Width = 500, AutoSize = true,
Height = 320, AutoSizeMode = AutoSizeMode.GrowOnly,
Text = @"Vorgenerierter Modus: " + _generator.GetType().Name Text = @"Vorgenerierter Modus: " + _generator.GetType().Name
}; };
var confirmation = new Button {Text = @"Apply", Anchor = AnchorStyles.Top | AnchorStyles.Left}; var confirmation = new Button {Text = @"Apply", Anchor = AnchorStyles.Top | AnchorStyles.Left};
confirmation.Click += (sender, e) => { confirmation.Click += (sender, e) => {
success = true; success = true;
@ -217,13 +232,16 @@ namespace Matrix_App
FlowLayoutPanel controlPanel = new FlowLayoutPanel FlowLayoutPanel controlPanel = new FlowLayoutPanel
{ {
Anchor = AnchorStyles.Top | AnchorStyles.Left, Anchor = AnchorStyles.Bottom | AnchorStyles.Left,
FlowDirection = FlowDirection.BottomUp, FlowDirection = FlowDirection.BottomUp,
Dock = DockStyle.Top, Dock = DockStyle.Fill,
WrapContents = false, WrapContents = false,
AutoSizeMode = AutoSizeMode.GrowOnly,
AutoSize = true AutoSize = true
}; };
_generator.CreateUi(controlPanel, InvokeGenerator);
PlaybackTimer.Interval = _form.GetDelayTime(); PlaybackTimer.Interval = _form.GetDelayTime();
PlaybackTimer.Enabled = true; PlaybackTimer.Enabled = true;
@ -258,9 +276,9 @@ namespace Matrix_App
prompt.MinimumSize = prompt.Size; prompt.MinimumSize = prompt.Size;
prompt.Controls.Add(controlPanel); prompt.Controls.Add(controlPanel);
prompt.Controls.Add(southPane); prompt.Controls.Add(southPane);
prompt.Height = southPane.Height * 2 + controlPanel.Height + 16;
prompt.FormBorderStyle = FormBorderStyle.FixedDialog;
prompt.MaximizeBox = false; prompt.MaximizeBox = false;
prompt.FormBorderStyle = FormBorderStyle.FixedDialog;
prompt.StartPosition = FormStartPosition.CenterScreen;
prompt.ShowDialog(); prompt.ShowDialog();
PlaybackTimer.Enabled = false; PlaybackTimer.Enabled = false;
@ -272,7 +290,7 @@ namespace Matrix_App
{ {
// Create new initial buffer and copy what ever was in the Gif buffer to it // Create new initial buffer and copy what ever was in the Gif buffer to it
_initialBuffer = CreateImageRGB_NT(matrix.matrixWidth(), matrix.matrixHeight(), MatrixDesignerMain.gifBuffer.Length); _initialBuffer = CreateImageRGB_NT(matrix.matrixWidth(), matrix.matrixHeight(), MatrixDesignerMain.gifBuffer.Length);
FlipColorStoreRG_GR(MatrixDesignerMain.gifBuffer, _initialBuffer); ColorStore(MatrixDesignerMain.gifBuffer, _initialBuffer);
// Set Generator args // Set Generator args
SetGlobalArgs(matrix.matrixWidth(), SetGlobalArgs(matrix.matrixWidth(),
matrix.matrixHeight(), matrix.matrixHeight(),
@ -299,9 +317,10 @@ namespace Matrix_App
var divider = new Label var divider = new Label
{ {
BorderStyle = BorderStyle.Fixed3D, BorderStyle = BorderStyle.Fixed3D,
AutoSize = false, AutoSize = false,
Height = lineHeight, Dock = DockStyle.Fill,
Width = 500 Anchor = AnchorStyles.Top | AnchorStyles.Left,
Height = lineHeight,
}; };
controlPanel.Controls.Add(divider); controlPanel.Controls.Add(divider);
@ -315,11 +334,11 @@ namespace Matrix_App
{ {
for (var x = 0; x < width; x++) for (var x = 0; x < width; x++)
{ {
var u = x / (float)width; var u = x / (float) width;
for (var y = 0; y < height; y++) for (var y = 0; y < height; y++)
{ {
var v = y / (float)height; var v = y / (float) height;
_generator!.ColorFragment(x, y, u, v, frame, out var r, out var g, out var b); _generator!.ColorFragment(x, y, u, v, frame, out var r, out var g, out var b);

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Windows.Forms;
using Matrix_App.PregeneratedMods.reflection; using Matrix_App.PregeneratedMods.reflection;
using static Matrix_App.GifGeneratorUtils; using static Matrix_App.GifGeneratorUtils;
@ -48,5 +49,10 @@ namespace Matrix_App.PregeneratedMods
b = tmpB; b = tmpB;
} }
} }
protected override void CreateUi(FlowLayoutPanel anchor, update invokeGenerator)
{
}
} }
} }

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Windows.Forms;
using Matrix_App.PregeneratedMods.reflection; using Matrix_App.PregeneratedMods.reflection;
using static Matrix_App.GifGeneratorUtils; using static Matrix_App.GifGeneratorUtils;
@ -6,16 +7,20 @@ namespace Matrix_App.PregeneratedMods
{ {
public class ColorAdjust : MatrixGifGenerator public class ColorAdjust : MatrixGifGenerator
{ {
[UiWidget]
[UiDescription(title: "Contrast", description: "Constrasts the image, or loweres difference")]
private float contrast = 0.5f;
[UiWidget] [UiWidget]
[UiDescription(title: "Tone offset", description: "Sets an additional offset to the pixels hue")] [UiDescription(title: "Tone offset", description: "Sets an additional offset to the pixels hue")]
private float hueOffset = 0.0f; private float hueOffset = 0.0f;
[UiWidget] [UiWidget]
[UiDescription(title: "Saturation boost", description: "Decreases or increases saturation")] [UiDescription(title: "Saturation boost", description: "Decreases or increases (chroma-based) saturation")]
private float saturationBoost = 0.5f; private float saturationBoost = 0.5f;
[UiWidget] [UiWidget]
[UiDescription(title: "Brightness boost", description: "Decreases or increases brightness")] [UiDescription(title: "Luminance boost", description: "Decreases or increases luminance")]
private float valueBoost = 0.5f; private float valueBoost = 0.5f;
[UiWidget] [UiWidget]
@ -40,7 +45,7 @@ namespace Matrix_App.PregeneratedMods
SampleFrame(actualStore!, frame, x, y, width, out float tr, out float tg, out float tb); SampleFrame(actualStore!, frame, x, y, width, out float tr, out float tg, out float tb);
// Adjust HSV // Adjust HSV
HsvFromRgb(tr, tg, tb, out float h, out float s, out float value); HslFromRgb(tr, tg, tb, out float h, out float s, out float value);
h = h / 360.0f + hueOffset; h = h / 360.0f + hueOffset;
h = (h - MathF.Floor(h)) * 360.0f; h = (h - MathF.Floor(h)) * 360.0f;
@ -48,11 +53,22 @@ namespace Matrix_App.PregeneratedMods
value = Boost(value, valueBoost); value = Boost(value, valueBoost);
// Adjust RGB // Adjust RGB
RgbFromHsv(h, s, value, out tr, out tg, out tb); RgbFromHsl(h, s, value, out tr, out tg, out tb);
r = Boost(tr, redBoost); r = Boost(tr, redBoost);
g = Boost(tg, greenBoost); g = Boost(tg, greenBoost);
b = Boost(tb, blueBoost); b = Boost(tb, blueBoost);
float enhancedContrast = contrast * 10.0f;
r = MathF.Pow(r, enhancedContrast) * enhancedContrast;
g = MathF.Pow(g, enhancedContrast) * enhancedContrast;
b = MathF.Pow(b, enhancedContrast) * enhancedContrast;
}
protected override void CreateUi(FlowLayoutPanel anchor, update invokeGenerator)
{
} }
} }
} }

View File

@ -1,4 +1,5 @@
using Matrix_App.PregeneratedMods.reflection; using System.Windows.Forms;
using Matrix_App.PregeneratedMods.reflection;
using static Matrix_App.GifGeneratorUtils; using static Matrix_App.GifGeneratorUtils;
namespace Matrix_App.PregeneratedMods namespace Matrix_App.PregeneratedMods
@ -29,5 +30,10 @@ namespace Matrix_App.PregeneratedMods
b = average; b = average;
} }
} }
protected override void CreateUi(FlowLayoutPanel anchor, update invokeGenerator)
{
}
} }
} }

View File

@ -1,4 +1,5 @@
using static Matrix_App.GifGeneratorUtils; using System.Windows.Forms;
using static Matrix_App.GifGeneratorUtils;
namespace Matrix_App.PregeneratedMods namespace Matrix_App.PregeneratedMods
{ {
@ -12,5 +13,10 @@ namespace Matrix_App.PregeneratedMods
g = 1 - lg; g = 1 - lg;
b = 1 - lb; b = 1 - lb;
} }
protected override void CreateUi(FlowLayoutPanel anchor, update invokeGenerator)
{
}
} }
} }

View File

@ -0,0 +1,85 @@
using System;
using System.Windows.Forms;
using Matrix_App.PregeneratedMods.reflection;
using static Matrix_App.GifGeneratorUtils;
namespace Matrix_App.PregeneratedMods
{
public sealed class Transfom : MatrixGifGenerator
{
[UiWidget]
[UiDescription(title: "Flip Horizontally", description: "Flips the image in the middle on the horizontal axis")]
private bool flipHorizontally = false;
[UiWidget]
[UiDescription(title: "Flip Vertically", description: "Flips the image in the middle on the vertical axis")]
private bool flipVertically = false;
[UiWidget]
[UiDescription(title: "Mirror Horizontally", description: "Mirrors the image in the middle on the horizontal axis")]
private bool mirrorHorizontally = false;
[UiWidget]
[UiDescription(title: "Mirror Vertically", description: "Mirrors the image in the middle on the vertical axis")]
private bool mirrorVertically = false;
[UiWidget]
[UiDescription(title: "Rotation", description: "Rotate counter-clock-wise, repeating the image where needed (at corners)")]
private int rotation = 0;
[UiWidget]
[UiDescription(title: "Skew X", description: "Skew the image on the x-axis")]
private float skewX = 0.0f;
[UiWidget]
[UiDescription(title: "Skew Y", description: "Skew the image on the y-axis")]
private float skewY = 0.0f;
[UiWidget]
[UiDescription(title: "Scale", description: "Scale up or down")]
private float scale = 0.5f;
protected override void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b)
{
var sint = MathF.Sin(rotation / 180.0f * MathF.PI);
var cost = MathF.Cos(rotation / 180.0f * MathF.PI);
var tx = x;
var ty = y;
var otx = x - (width >> 1);
var oty = y - (height >> 1);
tx = (int) (otx * cost - oty * sint);
ty = (int) (otx * sint + oty * cost);
tx += width >> 1;
ty += height >> 1;
tx = flipVertically ? width - tx - 1 : tx;
ty = flipHorizontally ? height - ty - 1 : ty;
tx = mirrorVertically ? tx % (width >> 1) : tx;
ty = mirrorHorizontally ? ty % (height >> 1) : ty;
tx += (int) (ty * skewX * 2.0f);
ty += (int) (tx * skewY * 2.0f);
tx = (int) ((tx - (width >> 1)) * scale * 2.0f) + (width >> 1);
ty = (int) ((ty - (height >> 1)) * scale * 2.0f) + (height >> 1);
tx = Math.Abs(tx) % width;
ty = Math.Abs(ty) % height;
SampleFrame(actualStore!, frame, tx, ty, width, out float lr, out float lg, out float lb);
r = lr;
g = lg;
b = lb;
}
protected override void CreateUi(FlowLayoutPanel anchor, update invokeGenerator)
{
}
}
}

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using System.Windows.Forms;
namespace Matrix_App.PregeneratedMods namespace Matrix_App.PregeneratedMods
{ {
@ -55,5 +56,10 @@ namespace Matrix_App.PregeneratedMods
g += 0.1f * s4; g += 0.1f * s4;
b += 0.2f * s4; b += 0.2f * s4;
} }
protected override void CreateUi(FlowLayoutPanel anchor, update invokeGenerator)
{
}
} }
} }

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Windows.Forms;
using Matrix_App.PregeneratedMods.reflection; using Matrix_App.PregeneratedMods.reflection;
namespace Matrix_App.PregeneratedMods namespace Matrix_App.PregeneratedMods
@ -16,6 +17,11 @@ namespace Matrix_App.PregeneratedMods
b = Next(frame, x, y + 34968); b = Next(frame, x, y + 34968);
} }
protected override void CreateUi(FlowLayoutPanel anchor, update invokeGenerator)
{
}
private float Next(int frame, int x, int y) private float Next(int frame, int x, int y)
{ {
var k = MathF.Sin(frame * 2356f + (x + y) * 5334f + (y * x) * 534f + 78.0f + seed * 435f) * 567f; var k = MathF.Sin(frame * 2356f + (x + y) * 5334f + (y * x) * 534f + 78.0f + seed * 435f) * 567f;

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Windows.Forms;
using Matrix_App.PregeneratedMods.reflection; using Matrix_App.PregeneratedMods.reflection;
using static Matrix_App.GifGeneratorUtils; using static Matrix_App.GifGeneratorUtils;
@ -35,6 +36,11 @@ namespace Matrix_App.PregeneratedMods
} }
} }
protected override void CreateUi(FlowLayoutPanel anchor, update invokeGenerator)
{
}
private float AddHueOffset(float hue) private float AddHueOffset(float hue)
{ {
return MathF.Abs(hue + rotation * 360) % 360.0f; return MathF.Abs(hue + rotation * 360) % 360.0f;

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Windows.Forms;
namespace Matrix_App.PregeneratedMods namespace Matrix_App.PregeneratedMods
{ {
@ -29,5 +30,10 @@ namespace Matrix_App.PregeneratedMods
g = sp; g = sp;
b = sp; b = sp;
} }
protected override void CreateUi(FlowLayoutPanel anchor, update invokeGenerator)
{
}
} }
} }

View File

@ -1,5 +1,6 @@
 
using System; using System;
using System.Windows.Forms;
namespace Matrix_App.PregeneratedMods namespace Matrix_App.PregeneratedMods
{ {
@ -11,5 +12,10 @@ namespace Matrix_App.PregeneratedMods
g = v; g = v;
b = MathF.Sin(frame / (float) totalFrames * MathF.PI); b = MathF.Sin(frame / (float) totalFrames * MathF.PI);
} }
protected override void CreateUi(FlowLayoutPanel anchor, update invokeGenerator)
{
}
} }
} }

View File

@ -0,0 +1,55 @@
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
using Matrix_App.Properties;
namespace Matrix_App.minecraft
{
public class Minecraft : MatrixGifGenerator
{
private Bitmap? texture = Resources.Pumpkin;
protected override void CreateUi(FlowLayoutPanel anchor, update invokeGenerator)
{
CreateButton(Resources.CreeperHead, "Creeper", anchor, invokeGenerator);
CreateButton(Resources.EndermanHead, "Enderman", anchor, invokeGenerator);
CreateButton(Resources.EmeraldBlock, "Emerald", anchor, invokeGenerator);
CreateButton(Resources.CommandBlock, "Command Block", anchor, invokeGenerator);
CreateButton(Resources.DiamondOre, "Diamond ore", anchor, invokeGenerator);
CreateButton(Resources.GrassBlock, "Grass", anchor, invokeGenerator);
CreateButton(Resources.Pumpkin, "Pumpkin", anchor, invokeGenerator);
CreateButton(Resources.RedstoneLamp, "Redstone lamp", anchor, invokeGenerator);
CreateButton(Resources.TNT, "TNT", anchor, invokeGenerator);
CreateButton(Resources.BlueWool, "Blue wool", anchor, invokeGenerator);
}
private void CreateButton(Bitmap bitmap, string title, FlowLayoutPanel anchor, update invokeGenerator)
{
var button = new Button()
{
Text = title,
AutoSize = true,
Image = bitmap,
TextImageRelation = TextImageRelation.ImageBeforeText,
ImageAlign = ContentAlignment.MiddleLeft,
TextAlign = ContentAlignment.MiddleRight
};
button.Width = anchor.ClientSize.Width - button.Margin.Left - button.Margin.Right;
button.Click += (a, b) =>
{
texture = bitmap;
invokeGenerator();
};
anchor.Controls.Add(button);
}
protected override void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b)
{
var color = texture!.GetPixel((int) (u * texture.Width), (int) (v * texture.Height));
r = color.R / 255.0f;
g = color.G / 255.0f;
b = color.B / 255.0f;
}
}
}

View File

@ -37,7 +37,6 @@ namespace Matrix_App.PregeneratedMods.reflection
title = desc.title; title = desc.title;
description.Text = desc.description; description.Text = desc.description;
description.ForeColor = Color.Gray; description.ForeColor = Color.Gray;
description.Height += 10;
description.AutoSize = true; description.AutoSize = true;
} }
@ -47,7 +46,6 @@ namespace Matrix_App.PregeneratedMods.reflection
Text = title, Text = title,
Dock = DockStyle.Left, Dock = DockStyle.Left,
Anchor = AnchorStyles.Top | AnchorStyles.Left, Anchor = AnchorStyles.Top | AnchorStyles.Left,
Width = 100
}); });
switch (fieldValue) switch (fieldValue)
@ -56,10 +54,11 @@ namespace Matrix_App.PregeneratedMods.reflection
{ {
var upDown = new NumericUpDown var upDown = new NumericUpDown
{ {
Width = 360,
Dock = DockStyle.Fill, Dock = DockStyle.Fill,
Anchor = AnchorStyles.Top | AnchorStyles.Right, Anchor = AnchorStyles.Top | AnchorStyles.Right,
Width = 360, Value = value,
Value = value Maximum = 1000
}; };
upDown.ValueChanged += (a, b) => upDown.ValueChanged += (a, b) =>
{ {
@ -94,8 +93,8 @@ namespace Matrix_App.PregeneratedMods.reflection
Maximum = 100, Maximum = 100,
Minimum = 0, Minimum = 0,
Value = (int) (floatValue * 100.0f), Value = (int) (floatValue * 100.0f),
Width = 360,
TickFrequency = 10, TickFrequency = 10,
Width = 360
}; };
upDown.ValueChanged += (a, b) => upDown.ValueChanged += (a, b) =>
{ {

View File

@ -70,6 +70,16 @@ namespace Matrix_App.Properties {
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap BlueWool {
get {
object obj = ResourceManager.GetObject("BlueWool", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap. /// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary> /// </summary>
@ -80,6 +90,56 @@ namespace Matrix_App.Properties {
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap CommandBlock {
get {
object obj = ResourceManager.GetObject("CommandBlock", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap CreeperHead {
get {
object obj = ResourceManager.GetObject("CreeperHead", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap DiamondOre {
get {
object obj = ResourceManager.GetObject("DiamondOre", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap EmeraldBlock {
get {
object obj = ResourceManager.GetObject("EmeraldBlock", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap EndermanHead {
get {
object obj = ResourceManager.GetObject("EndermanHead", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap. /// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary> /// </summary>
@ -110,6 +170,16 @@ namespace Matrix_App.Properties {
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap GrassBlock {
get {
object obj = ResourceManager.GetObject("GrassBlock", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap. /// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary> /// </summary>
@ -130,6 +200,26 @@ namespace Matrix_App.Properties {
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Pumpkin {
get {
object obj = ResourceManager.GetObject("Pumpkin", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap RedstoneLamp {
get {
object obj = ResourceManager.GetObject("RedstoneLamp", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap. /// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary> /// </summary>
@ -149,5 +239,15 @@ namespace Matrix_App.Properties {
return ((System.Drawing.Bitmap)(obj)); return ((System.Drawing.Bitmap)(obj));
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap TNT {
get {
object obj = ResourceManager.GetObject("TNT", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
} }
} }

View File

@ -145,4 +145,35 @@
<data name="Pfüsikuh" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Pfüsikuh" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Splashcreen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\Splashcreen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="DiamondOre" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\diamond-ore.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="GrassBlock" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\grass-block.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Pumpkin" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\pumpkin.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RedstoneLamp" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\redstone-lamp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="TNT" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\tnt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="BlueWool" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\wool.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="CommandBlock" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\command-block.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="CreeperHead" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\creeper-head.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="EmeraldBlock" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\emerald-block.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="EndermanHead" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\enderman-head.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root> </root>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 KiB

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 694 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 703 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 B

View File

@ -23,7 +23,7 @@ namespace Matrix_App
Height = height; Height = height;
Bits = new Int32[width * height]; Bits = new Int32[width * height];
BitsHandle = GCHandle.Alloc(Bits, GCHandleType.Pinned); BitsHandle = GCHandle.Alloc(Bits, GCHandleType.Pinned);
Bitmap = new Bitmap(width, height, width * 4, PixelFormat.Format32bppPArgb, BitsHandle.AddrOfPinnedObject()); Bitmap = new Bitmap(width, height, width * 4, PixelFormat.Format32bppRgb, BitsHandle.AddrOfPinnedObject());
} }
public void SetPixel(int x, int y, Color colour) public void SetPixel(int x, int y, Color colour)
@ -31,7 +31,7 @@ namespace Matrix_App
int index = x + (y * Width); int index = x + (y * Width);
int col = colour.ToArgb(); int col = colour.ToArgb();
Bits[index] = col; Bits[index] = col & 0x00FFFFFF;
} }
public void SetImage(Bitmap image) public void SetImage(Bitmap image)

View File

@ -0,0 +1,252 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO.Ports;
using System.Security.Permissions;
using System.Threading;
using static Matrix_App.Defaults;
namespace Matrix_App.adds
{
public class PortCommandQueue
{
private const string ThreadDeliverName = "Arduino Port Deliver Thread";
private readonly Queue<byte[]> byteWriteQueue = new();
private readonly Queue<byte> statusByteQueue = new();
private readonly Thread portDeliverThread;
private readonly SerialPort tx;
private bool running;
private volatile bool kill;
private volatile bool isPortValid;
private readonly byte[] received = new byte[ArduinoReceiveBufferSize];
private int mark;
private volatile bool synchronized;
private bool updateRealtime;
public PortCommandQueue(ref SerialPort tx)
{
this.tx = tx;
portDeliverThread = new Thread(ManageQueue) { Name = ThreadDeliverName };
}
private void ManageQueue()
{
try
{
while (!kill)
{
if (!isPortValid) continue;
if (byteWriteQueue.Count <= 0)
{
lock (byteWriteQueue)
{
Monitor.Wait(byteWriteQueue);
}
continue;
}
byte[] bytes;
int statusByte;
lock (byteWriteQueue)
{
bytes = byteWriteQueue.Dequeue();
statusByte = statusByteQueue.Dequeue();
}
lock (tx)
{
var success = false;
var tryCounter = 0;
do
{
try
{
tx.Write(bytes, 0, bytes.Length);
var b = ArduinoErrorByte;
var errorFlag = false;
mark = 0;
while (!errorFlag && (b = tx.ReadByte()) != statusByte)
{
received[mark++] = (byte) b;
errorFlag = b == ArduinoErrorByte;
}
synchronized = b == ArduinoSynchronizationByte;
success = !errorFlag;
Debug.WriteLine("===================> Com Success !");
}
catch (Exception e)
{
Debug.WriteLine("=============================> ERROR <=================================");
Debug.WriteLine(e.Message);
}
tryCounter++;
} while (!success && tryCounter < 3);
}
}
}
catch (ThreadInterruptedException)
{
Thread.CurrentThread.Interrupt();
}
}
[SecurityPermission(SecurityAction.Demand, ControlThread = true)]
public void Close()
{
try
{
if (!running) return;
kill = true;
portDeliverThread.Interrupt();
portDeliverThread.Join(1000);
}
catch (ThreadStartException)
{
// omit
}
catch (ThreadInterruptedException)
{
// omit
}
finally
{
if (tx.IsOpen)
{
tx.Close();
}
}
}
private void EnqueueArduinoCommand(params byte[] bytes)
{
if (!updateRealtime && bytes[0] != ArduinoInstruction.OpcodeScale &&
bytes[0] != ArduinoInstruction.OpcodePush)
return;
if (!running)
{
running = true;
portDeliverThread.Start();
}
lock (byteWriteQueue)
{
Monitor.Pulse(byteWriteQueue);
if (byteWriteQueue.Count >= ArduinoCommandQueueSize) return;
lock (byteWriteQueue)
{
byteWriteQueue.Enqueue(bytes);
}
}
}
public void EnqueueArduinoCommand(byte opcode, params byte[] data)
{
byte[] wrapper = new byte[data.Length + 1];
Buffer.BlockCopy(data, 0, wrapper, 1, data.Length);
wrapper[0] = opcode;
statusByteQueue.Enqueue(ArduinoSuccessByte);
EnqueueArduinoCommand(wrapper);
}
public void DequeueAll()
{
lock (byteWriteQueue)
{
byteWriteQueue.Clear();
}
}
public static void WaitForLastDequeue()
{
var timeCount = 0;
var wait = true;
while(wait)
{
timeCount++;
Thread.Sleep(500);
wait = timeCount == DequeueWaitTimeoutCounter;
}
}
public byte[] GetLastData()
{
return received;
}
public void ValidatePort()
{
try
{
if (!tx.IsOpen)
{
tx.Open();
isPortValid = true;
}
}
catch (Exception e)
{
isPortValid = false;
Debug.WriteLine("Failed opening port: " + e.Message);
}
}
public void InvalidatePort()
{
isPortValid = false;
tx.Close();
}
/// <summary>
/// Returns last location of written byte in the received buffer.
/// Call clears the mark. Any other call will return 0, unless the mark has been
/// altered by reading new data from the serial port.
/// </summary>
/// <returns></returns>
public int GetMark()
{
var tmp = mark;
mark = 0;
return tmp;
}
public void EnqueueArduinoCommandSynchronized(byte[] bytes)
{
statusByteQueue.Enqueue(ArduinoSynchronizationByte);
EnqueueArduinoCommand(bytes);
while (!synchronized)
{
}
Debug.WriteLine("======================> Synchronized!");
synchronized = false;
}
public void SetRealtimeUpdates(bool @checked)
{
updateRealtime = @checked;
}
public bool GetRealtimeUpdates()
{
return updateRealtime;
}
}
}

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading; using System.Threading;
namespace Matrix_App namespace Matrix_App
{ {
public class ThreadQueue public class ThreadQueue
@ -34,35 +35,40 @@ namespace Matrix_App
{ {
while(running) while(running)
{ {
Task? task = null; lock (taskQueue)
lock(taskQueue)
{ {
if (taskQueue.Count > 0) working = taskQueue.Count > 0;
{
working = true;
task = taskQueue.Dequeue();
}
else
{
working = false;
}
} }
if (task != null) if (working)
{
running = task();
} else
{ {
try try
{ {
Thread.Sleep(10); Task task;
lock (taskQueue)
{
task = taskQueue.Dequeue();
}
running = task();
lock (taskQueue)
{
working = taskQueue.Count > 0;
}
} catch(ThreadInterruptedException) } catch(ThreadInterruptedException)
{ {
thread.Interrupt(); thread.Interrupt();
running = false; running = false;
} }
} }
else
{
lock (taskQueue)
{
Monitor.Wait(taskQueue);
}
}
} }
} }
@ -70,11 +76,13 @@ namespace Matrix_App
{ {
lock (taskQueue) lock (taskQueue)
{ {
if (taskQueue.Count < capacity) if (taskQueue.Count >= capacity)
{ return;
taskQueue.Enqueue(task);
working = true; Monitor.Pulse(taskQueue);
}
working = true;
taskQueue.Enqueue(task);
} }
} }
@ -85,10 +93,15 @@ namespace Matrix_App
public void Stop() public void Stop()
{ {
lock (taskQueue)
{
Monitor.Pulse(taskQueue);
}
running = false; running = false;
thread.Interrupt(); thread.Interrupt();
thread.Join(1500); thread.Join(100);
} }
} }
} }

View File

@ -5,7 +5,7 @@ using static Matrix_App.Defaults;
namespace Matrix_App namespace Matrix_App
{ {
public sealed class Utils public static class Utils
{ {
/// <summary> /// <summary>
/// Resizes and image to the specified size in pixels. /// Resizes and image to the specified size in pixels.
@ -23,20 +23,17 @@ namespace Matrix_App
destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
using (var graphics = Graphics.FromImage(destImage)) using var graphics = Graphics.FromImage(destImage);
{ graphics.CompositingMode = CompositingMode.SourceCopy;
graphics.CompositingMode = CompositingMode.SourceCopy; graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
using var wrapMode = new ImageAttributes();
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
using (var wrapMode = new ImageAttributes())
{
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
}
}
return destImage; return destImage;
} }
@ -45,15 +42,14 @@ namespace Matrix_App
/// </summary> /// </summary>
/// <param name="source"></param> /// <param name="source"></param>
/// <param name="dest"></param> /// <param name="dest"></param>
public static void FlipColorStoreRG_GR(byte[][] source, byte[][] dest) public static void ColorStore(byte[][] source, byte[][] dest)
{ {
for (int f = 0; f < dest.Length; f++) for (var f = 0; f < source.Length; f++)
{ {
for (int x = 0; x < dest[0].Length; x += 3) for (var x = 0; x < source[0].Length; x += 3)
{ {
// flip r, g dest[f][x + 0] = source[f][x + 0];
dest[f][x + 0] = source[f][x + 1]; dest[f][x + 1] = source[f][x + 1];
dest[f][x + 1] = source[f][x + 0];
dest[f][x + 2] = source[f][x + 2]; dest[f][x + 2] = source[f][x + 2];
} }
} }
@ -70,11 +66,11 @@ namespace Matrix_App
{ {
var image = new Bitmap(width, height); var image = new Bitmap(width, height);
for (int x = 0; x < width; x++) for (var x = 0; x < width; x++)
{ {
for (int y = 0; y < height; y++) for (var y = 0; y < height; y++)
{ {
int index = (x + y * width) * Bpp; var index = (x + y * width) * Bpp;
image.SetPixel(x, y, Color.FromArgb( image.SetPixel(x, y, Color.FromArgb(
buffer[index + 0], buffer[index + 0],
@ -98,7 +94,7 @@ namespace Matrix_App
{ {
byte[][] bytes = new byte[frames][]; byte[][] bytes = new byte[frames][];
for (int frame = 0; frame < frames; frame++) for (var frame = 0; frame < frames; frame++)
{ {
bytes[frame] = new byte[width * height * Bpp]; bytes[frame] = new byte[width * height * Bpp];
} }

Binary file not shown.

View File

@ -8,32 +8,117 @@
".NETCoreApp,Version=v3.1": { ".NETCoreApp,Version=v3.1": {
"Matrix App/1.0.0": { "Matrix App/1.0.0": {
"dependencies": { "dependencies": {
"System.IO.Ports": "4.4.0", "Bluetooth": "1.0.0.2",
"System.Drawing.Common": "5.0.2",
"System.IO.Ports": "6.0.0-preview.5.21301.5",
"System.Management": "5.0.0" "System.Management": "5.0.0"
}, },
"runtime": { "runtime": {
"Matrix App.dll": {} "Matrix App.dll": {}
} }
}, },
"Microsoft.NETCore.Platforms/5.0.0": {}, "Bluetooth/1.0.0.2": {
"Microsoft.Win32.Registry/5.0.0": {
"dependencies": { "dependencies": {
"System.Security.AccessControl": "5.0.0", "Microsoft.Windows.SDK.Contracts": "10.0.19041.1",
"System.Security.Principal.Windows": "5.0.0" "System.Runtime.InteropServices.WindowsRuntime": "4.3.0",
"System.Runtime.WindowsRuntime": "4.7.0"
},
"runtime": {
"lib/netstandard2.0/Bluetooth.dll": {
"assemblyVersion": "1.0.0.2",
"fileVersion": "1.0.0.2"
}
}
},
"Microsoft.NETCore.Platforms/5.0.0": {},
"Microsoft.NETCore.Targets/1.1.0": {},
"Microsoft.Win32.Registry/6.0.0-preview.5.21301.5": {
"dependencies": {
"System.Security.AccessControl": "6.0.0-preview.5.21301.5",
"System.Security.Principal.Windows": "6.0.0-preview.5.21301.5"
}, },
"runtime": { "runtime": {
"lib/netstandard2.0/Microsoft.Win32.Registry.dll": { "lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"assemblyVersion": "5.0.0.0", "assemblyVersion": "6.0.0.0",
"fileVersion": "5.0.20.51904" "fileVersion": "6.0.21.30105"
} }
}, },
"runtimeTargets": { "runtimeTargets": {
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll": { "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"rid": "win", "rid": "win",
"assetType": "runtime", "assetType": "runtime",
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
}
}
},
"Microsoft.Win32.SystemEvents/5.0.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll": {
"assemblyVersion": "5.0.0.0", "assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904" "fileVersion": "5.0.20.51904"
} }
},
"runtimeTargets": {
"runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
},
"Microsoft.Windows.SDK.Contracts/10.0.19041.1": {
"dependencies": {
"System.Runtime.WindowsRuntime": "4.7.0",
"System.Runtime.WindowsRuntime.UI.Xaml": "4.6.0"
}
},
"runtime.linux-arm.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"runtimeTargets": {
"runtimes/linux-arm/native/libSystem.IO.Ports.Native.so": {
"rid": "linux-arm",
"assetType": "native",
"fileVersion": "0.0.0.0"
}
}
},
"runtime.linux-arm64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"runtimeTargets": {
"runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so": {
"rid": "linux-arm64",
"assetType": "native",
"fileVersion": "0.0.0.0"
}
}
},
"runtime.linux-x64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"runtimeTargets": {
"runtimes/linux-x64/native/libSystem.IO.Ports.Native.so": {
"rid": "linux-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
}
}
},
"runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"dependencies": {
"runtime.linux-arm.runtime.native.System.IO.Ports": "6.0.0-preview.5.21301.5",
"runtime.linux-arm64.runtime.native.System.IO.Ports": "6.0.0-preview.5.21301.5",
"runtime.linux-x64.runtime.native.System.IO.Ports": "6.0.0-preview.5.21301.5",
"runtime.osx-x64.runtime.native.System.IO.Ports": "6.0.0-preview.5.21301.5"
}
},
"runtime.osx-x64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"runtimeTargets": {
"runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib": {
"rid": "osx-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
}
} }
}, },
"System.CodeDom/5.0.0": { "System.CodeDom/5.0.0": {
@ -44,29 +129,67 @@
} }
} }
}, },
"System.IO.Ports/4.4.0": { "System.Drawing.Common/5.0.2": {
"dependencies": { "dependencies": {
"Microsoft.Win32.Registry": "5.0.0" "Microsoft.Win32.SystemEvents": "5.0.0"
}, },
"runtime": { "runtime": {
"lib/netstandard2.0/System.IO.Ports.dll": { "lib/netcoreapp3.0/System.Drawing.Common.dll": {
"assemblyVersion": "4.0.0.0", "assemblyVersion": "5.0.0.2",
"fileVersion": "4.6.25519.3" "fileVersion": "5.0.421.11614"
} }
}, },
"runtimeTargets": { "runtimeTargets": {
"runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "5.0.0.2",
"fileVersion": "5.0.421.11614"
},
"runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "5.0.0.2",
"fileVersion": "5.0.421.11614"
}
}
},
"System.IO.Ports/6.0.0-preview.5.21301.5": {
"dependencies": {
"Microsoft.Win32.Registry": "6.0.0-preview.5.21301.5",
"runtime.native.System.IO.Ports": "6.0.0-preview.5.21301.5"
},
"runtime": {
"lib/netstandard2.0/System.IO.Ports.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
}
},
"runtimeTargets": {
"runtimes/linux/lib/netstandard2.0/System.IO.Ports.dll": {
"rid": "linux",
"assetType": "runtime",
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
},
"runtimes/osx/lib/netstandard2.0/System.IO.Ports.dll": {
"rid": "osx",
"assetType": "runtime",
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
},
"runtimes/win/lib/netstandard2.0/System.IO.Ports.dll": { "runtimes/win/lib/netstandard2.0/System.IO.Ports.dll": {
"rid": "win", "rid": "win",
"assetType": "runtime", "assetType": "runtime",
"assemblyVersion": "4.0.0.0", "assemblyVersion": "6.0.0.0",
"fileVersion": "4.6.25519.3" "fileVersion": "6.0.21.30105"
} }
} }
}, },
"System.Management/5.0.0": { "System.Management/5.0.0": {
"dependencies": { "dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0", "Microsoft.NETCore.Platforms": "5.0.0",
"Microsoft.Win32.Registry": "5.0.0", "Microsoft.Win32.Registry": "6.0.0-preview.5.21301.5",
"System.CodeDom": "5.0.0" "System.CodeDom": "5.0.0"
}, },
"runtime": { "runtime": {
@ -84,45 +207,66 @@
} }
} }
}, },
"System.Security.AccessControl/5.0.0": { "System.Runtime/4.3.0": {
"dependencies": { "dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0", "Microsoft.NETCore.Platforms": "5.0.0",
"System.Security.Principal.Windows": "5.0.0" "Microsoft.NETCore.Targets": "1.1.0"
}
},
"System.Runtime.InteropServices.WindowsRuntime/4.3.0": {
"dependencies": {
"System.Runtime": "4.3.0"
}
},
"System.Runtime.WindowsRuntime/4.7.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0"
}
},
"System.Runtime.WindowsRuntime.UI.Xaml/4.6.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"System.Runtime.WindowsRuntime": "4.7.0"
}
},
"System.Security.AccessControl/6.0.0-preview.5.21301.5": {
"dependencies": {
"System.Security.Principal.Windows": "6.0.0-preview.5.21301.5"
}, },
"runtime": { "runtime": {
"lib/netstandard2.0/System.Security.AccessControl.dll": { "lib/netstandard2.0/System.Security.AccessControl.dll": {
"assemblyVersion": "5.0.0.0", "assemblyVersion": "6.0.0.0",
"fileVersion": "5.0.20.51904" "fileVersion": "6.0.21.30105"
} }
}, },
"runtimeTargets": { "runtimeTargets": {
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": { "runtimes/win/lib/netstandard2.0/System.Security.AccessControl.dll": {
"rid": "win", "rid": "win",
"assetType": "runtime", "assetType": "runtime",
"assemblyVersion": "5.0.0.0", "assemblyVersion": "6.0.0.0",
"fileVersion": "5.0.20.51904" "fileVersion": "6.0.21.30105"
} }
} }
}, },
"System.Security.Principal.Windows/5.0.0": { "System.Security.Principal.Windows/6.0.0-preview.5.21301.5": {
"runtime": { "runtime": {
"lib/netstandard2.0/System.Security.Principal.Windows.dll": { "lib/netstandard2.0/System.Security.Principal.Windows.dll": {
"assemblyVersion": "5.0.0.0", "assemblyVersion": "6.0.0.0",
"fileVersion": "5.0.20.51904" "fileVersion": "6.0.21.30105"
} }
}, },
"runtimeTargets": { "runtimeTargets": {
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"rid": "unix", "rid": "unix",
"assetType": "runtime", "assetType": "runtime",
"assemblyVersion": "5.0.0.0", "assemblyVersion": "6.0.0.0",
"fileVersion": "5.0.20.51904" "fileVersion": "6.0.21.30105"
}, },
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"rid": "win", "rid": "win",
"assetType": "runtime", "assetType": "runtime",
"assemblyVersion": "5.0.0.0", "assemblyVersion": "6.0.0.0",
"fileVersion": "5.0.20.51904" "fileVersion": "6.0.21.30105"
} }
} }
} }
@ -134,6 +278,13 @@
"serviceable": false, "serviceable": false,
"sha512": "" "sha512": ""
}, },
"Bluetooth/1.0.0.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dI5MtUEkDm2L81kHFeofWkpOvq7Yn2iNVl8dKa+DIeXhqHb9LrBSH7LpmaNOlZMLwQFDKageUpxV0w39GMeUag==",
"path": "bluetooth/1.0.0.2",
"hashPath": "bluetooth.1.0.0.2.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/5.0.0": { "Microsoft.NETCore.Platforms/5.0.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
@ -141,12 +292,68 @@
"path": "microsoft.netcore.platforms/5.0.0", "path": "microsoft.netcore.platforms/5.0.0",
"hashPath": "microsoft.netcore.platforms.5.0.0.nupkg.sha512" "hashPath": "microsoft.netcore.platforms.5.0.0.nupkg.sha512"
}, },
"Microsoft.Win32.Registry/5.0.0": { "Microsoft.NETCore.Targets/1.1.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", "sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==",
"path": "microsoft.win32.registry/5.0.0", "path": "microsoft.netcore.targets/1.1.0",
"hashPath": "microsoft.win32.registry.5.0.0.nupkg.sha512" "hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512"
},
"Microsoft.Win32.Registry/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-qYLtJIAEJJmY2vXxlVO8x4uXfgq7DFOHjpmnHlLm7kmAvyNFckYY/Dx5CZythBXvI2/7sratbIGKqSTysfgZ8A==",
"path": "microsoft.win32.registry/6.0.0-preview.5.21301.5",
"hashPath": "microsoft.win32.registry.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"Microsoft.Win32.SystemEvents/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==",
"path": "microsoft.win32.systemevents/5.0.0",
"hashPath": "microsoft.win32.systemevents.5.0.0.nupkg.sha512"
},
"Microsoft.Windows.SDK.Contracts/10.0.19041.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-sgDwuoyubbLFNJR/BINbvfSNRiglF91D+Q0uEAkU4ZTO5Hgbnu8+gA4TCc65S56e1kK7gvR1+H4kphkDTr+9bw==",
"path": "microsoft.windows.sdk.contracts/10.0.19041.1",
"hashPath": "microsoft.windows.sdk.contracts.10.0.19041.1.nupkg.sha512"
},
"runtime.linux-arm.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VlGxrS0KZuoXA2zP/4JtcsnAUr66ivzLj2TdwXcaQ2vKTFOq9wCz7xYh08KvZVWXJKthpzhS+lWtdw/9vbVlgg==",
"path": "runtime.linux-arm.runtime.native.system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "runtime.linux-arm.runtime.native.system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"runtime.linux-arm64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fN2ienMgX5Gl8rmmmTkCxEBeN+KMEwHkTIE+4bHIH0sgPZJqrGV7o7sjjivZlv95L64cF+a4UVlxGqiMVEN6Nw==",
"path": "runtime.linux-arm64.runtime.native.system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "runtime.linux-arm64.runtime.native.system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"runtime.linux-x64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-wLbxixueLlN1bT3tHi4bnXhyp2tuyJ92TBBBwW01YS4isxkLr8o4f2AGw8YbsF4y2Fgx8RRQiipkG1EFrZ7AKg==",
"path": "runtime.linux-x64.runtime.native.system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "runtime.linux-x64.runtime.native.system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9Int9JpQ3quVnY3nsUFmrcanozIrEMFAydF+v8KmDwh0CtPb2AZLyyRtNEC3Z1WmoF8qf+T7jWwuPlrfl338dw==",
"path": "runtime.native.system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "runtime.native.system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"runtime.osx-x64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-IhXEnQFgPxM/pUkEJkFBkr6XBkWFiuMGLlyl5BDG7LkJuGX4jAxJwL6n9Pue88ZyV45c0ajvuZOBnZJap+uIKA==",
"path": "runtime.osx-x64.runtime.native.system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "runtime.osx-x64.runtime.native.system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
}, },
"System.CodeDom/5.0.0": { "System.CodeDom/5.0.0": {
"type": "package", "type": "package",
@ -155,12 +362,19 @@
"path": "system.codedom/5.0.0", "path": "system.codedom/5.0.0",
"hashPath": "system.codedom.5.0.0.nupkg.sha512" "hashPath": "system.codedom.5.0.0.nupkg.sha512"
}, },
"System.IO.Ports/4.4.0": { "System.Drawing.Common/5.0.2": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-izaIWbjFZdik3ypDuA6GWj6fabhB+tR5M7QLcvAqd+I+VjI8UWoVZkh68Ao8Vf8poWWrCU875r3HQZnQW6a7GA==", "sha512": "sha512-rvr/M1WPf24ljpvvrVd74+NdjRUJu1bBkspkZcnzSZnmAUQWSvanlQ0k/hVHk+cHufZbZfu7vOh/vYc0q5Uu/A==",
"path": "system.io.ports/4.4.0", "path": "system.drawing.common/5.0.2",
"hashPath": "system.io.ports.4.4.0.nupkg.sha512" "hashPath": "system.drawing.common.5.0.2.nupkg.sha512"
},
"System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9jguTG3uxGLvERVKV6w8ctcaYktBv8ssZgl6xm1hI89BBIaU6WwC2SQt9ur+TT8UMxdu9ZG+QQMbCJKEKv9dnQ==",
"path": "system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
}, },
"System.Management/5.0.0": { "System.Management/5.0.0": {
"type": "package", "type": "package",
@ -169,19 +383,47 @@
"path": "system.management/5.0.0", "path": "system.management/5.0.0",
"hashPath": "system.management.5.0.0.nupkg.sha512" "hashPath": "system.management.5.0.0.nupkg.sha512"
}, },
"System.Security.AccessControl/5.0.0": { "System.Runtime/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
"path": "system.security.accesscontrol/5.0.0", "path": "system.runtime/4.3.0",
"hashPath": "system.security.accesscontrol.5.0.0.nupkg.sha512" "hashPath": "system.runtime.4.3.0.nupkg.sha512"
}, },
"System.Security.Principal.Windows/5.0.0": { "System.Runtime.InteropServices.WindowsRuntime/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==", "sha512": "sha512-J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA==",
"path": "system.security.principal.windows/5.0.0", "path": "system.runtime.interopservices.windowsruntime/4.3.0",
"hashPath": "system.security.principal.windows.5.0.0.nupkg.sha512" "hashPath": "system.runtime.interopservices.windowsruntime.4.3.0.nupkg.sha512"
},
"System.Runtime.WindowsRuntime/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-RQxUkf37fp7MSWbOfKRjUjyudyfZb2u79YY5i1s+d7vuD80A7kmr2YfefO0JprQUhanxSm8bhXigCVfX2kEh+w==",
"path": "system.runtime.windowsruntime/4.7.0",
"hashPath": "system.runtime.windowsruntime.4.7.0.nupkg.sha512"
},
"System.Runtime.WindowsRuntime.UI.Xaml/4.6.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-r4tNw5v5kqRJ9HikWpcyNf3suGw7DjX93svj9iBjtdeLqL8jt9Z+7f+s4wrKZJr84u8IMsrIjt8K6jYvkRqMSg==",
"path": "system.runtime.windowsruntime.ui.xaml/4.6.0",
"hashPath": "system.runtime.windowsruntime.ui.xaml.4.6.0.nupkg.sha512"
},
"System.Security.AccessControl/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-EA9ul7nGN8oggMvloILnR+wnrbgLNZZQBYHq5nEq/ixwnKLV3M3Tbd1Jbj8oGck3XMj0owq81e4Jxp3s0IMICw==",
"path": "system.security.accesscontrol/6.0.0-preview.5.21301.5",
"hashPath": "system.security.accesscontrol.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"System.Security.Principal.Windows/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ywwCqFAaRVbgqqORqYg8jdaX6NUEpzbuhxyUhAs+7mZ8AFAO4PzFYrZ5JPkYejXwougDldtbi0zOkk1lLzugLw==",
"path": "system.security.principal.windows/6.0.0-preview.5.21301.5",
"hashPath": "system.security.principal.windows.6.0.0-preview.5.21301.5.nupkg.sha512"
} }
} }
} }

View File

@ -1,8 +1,8 @@
{ {
"runtimeOptions": { "runtimeOptions": {
"additionalProbingPaths": [ "additionalProbingPaths": [
"C:\\Users\\SvenV\\.dotnet\\store\\|arch|\\|tfm|", "C:\\Users\\Besitzer\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\SvenV\\.nuget\\packages" "C:\\Users\\Besitzer\\.nuget\\packages"
] ]
} }
} }

View File

@ -1,187 +0,0 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v3.1",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v3.1": {
"Matrix App/1.0.0": {
"dependencies": {
"System.IO.Ports": "4.4.0",
"System.Management": "5.0.0"
},
"runtime": {
"Matrix App.dll": {}
}
},
"Microsoft.NETCore.Platforms/5.0.0": {},
"Microsoft.Win32.Registry/5.0.0": {
"dependencies": {
"System.Security.AccessControl": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
},
"runtimeTargets": {
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
},
"System.CodeDom/5.0.0": {
"runtime": {
"lib/netstandard2.0/System.CodeDom.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
},
"System.IO.Ports/4.4.0": {
"dependencies": {
"Microsoft.Win32.Registry": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/System.IO.Ports.dll": {
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.25519.3"
}
},
"runtimeTargets": {
"runtimes/win/lib/netstandard2.0/System.IO.Ports.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.25519.3"
}
}
},
"System.Management/5.0.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"Microsoft.Win32.Registry": "5.0.0",
"System.CodeDom": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/System.Management.dll": {
"assemblyVersion": "4.0.0.0",
"fileVersion": "5.0.20.51904"
}
},
"runtimeTargets": {
"runtimes/win/lib/netcoreapp2.0/System.Management.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
},
"System.Security.AccessControl/5.0.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/System.Security.AccessControl.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
},
"runtimeTargets": {
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
},
"System.Security.Principal.Windows/5.0.0": {
"runtime": {
"lib/netstandard2.0/System.Security.Principal.Windows.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
},
"runtimeTargets": {
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
},
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
}
}
},
"libraries": {
"Matrix App/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Microsoft.NETCore.Platforms/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
"path": "microsoft.netcore.platforms/5.0.0",
"hashPath": "microsoft.netcore.platforms.5.0.0.nupkg.sha512"
},
"Microsoft.Win32.Registry/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
"path": "microsoft.win32.registry/5.0.0",
"hashPath": "microsoft.win32.registry.5.0.0.nupkg.sha512"
},
"System.CodeDom/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-JPJArwA1kdj8qDAkY2XGjSWoYnqiM7q/3yRNkt6n28Mnn95MuEGkZXUbPBf7qc3IjwrGY5ttQon7yqHZyQJmOQ==",
"path": "system.codedom/5.0.0",
"hashPath": "system.codedom.5.0.0.nupkg.sha512"
},
"System.IO.Ports/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-izaIWbjFZdik3ypDuA6GWj6fabhB+tR5M7QLcvAqd+I+VjI8UWoVZkh68Ao8Vf8poWWrCU875r3HQZnQW6a7GA==",
"path": "system.io.ports/4.4.0",
"hashPath": "system.io.ports.4.4.0.nupkg.sha512"
},
"System.Management/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-MF1CHaRcC+MLFdnDthv4/bKWBZnlnSpkGqa87pKukQefgEdwtb9zFW6zs0GjPp73qtpYYg4q6PEKbzJbxCpKfw==",
"path": "system.management/5.0.0",
"hashPath": "system.management.5.0.0.nupkg.sha512"
},
"System.Security.AccessControl/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
"path": "system.security.accesscontrol/5.0.0",
"hashPath": "system.security.accesscontrol.5.0.0.nupkg.sha512"
},
"System.Security.Principal.Windows/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==",
"path": "system.security.principal.windows/5.0.0",
"hashPath": "system.security.principal.windows.5.0.0.nupkg.sha512"
}
}
}

View File

@ -0,0 +1,278 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v3.1",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v3.1": {
"Matrix App/1.0.0": {
"dependencies": {
"System.IO.Ports": "6.0.0-preview.5.21301.5",
"System.Management": "5.0.0"
},
"runtime": {
"Matrix App.dll": {}
}
},
"Microsoft.NETCore.Platforms/5.0.0": {},
"Microsoft.Win32.Registry/6.0.0-preview.5.21301.5": {
"dependencies": {
"System.Security.AccessControl": "6.0.0-preview.5.21301.5",
"System.Security.Principal.Windows": "6.0.0-preview.5.21301.5"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
}
},
"runtimeTargets": {
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
}
}
},
"runtime.linux-arm.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"runtimeTargets": {
"runtimes/linux-arm/native/libSystem.IO.Ports.Native.so": {
"rid": "linux-arm",
"assetType": "native",
"fileVersion": "0.0.0.0"
}
}
},
"runtime.linux-arm64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"runtimeTargets": {
"runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so": {
"rid": "linux-arm64",
"assetType": "native",
"fileVersion": "0.0.0.0"
}
}
},
"runtime.linux-x64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"runtimeTargets": {
"runtimes/linux-x64/native/libSystem.IO.Ports.Native.so": {
"rid": "linux-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
}
}
},
"runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"dependencies": {
"runtime.linux-arm.runtime.native.System.IO.Ports": "6.0.0-preview.5.21301.5",
"runtime.linux-arm64.runtime.native.System.IO.Ports": "6.0.0-preview.5.21301.5",
"runtime.linux-x64.runtime.native.System.IO.Ports": "6.0.0-preview.5.21301.5",
"runtime.osx-x64.runtime.native.System.IO.Ports": "6.0.0-preview.5.21301.5"
}
},
"runtime.osx-x64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"runtimeTargets": {
"runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib": {
"rid": "osx-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
}
}
},
"System.CodeDom/5.0.0": {
"runtime": {
"lib/netstandard2.0/System.CodeDom.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
},
"System.IO.Ports/6.0.0-preview.5.21301.5": {
"dependencies": {
"Microsoft.Win32.Registry": "6.0.0-preview.5.21301.5",
"runtime.native.System.IO.Ports": "6.0.0-preview.5.21301.5"
},
"runtime": {
"lib/netstandard2.0/System.IO.Ports.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
}
},
"runtimeTargets": {
"runtimes/linux/lib/netstandard2.0/System.IO.Ports.dll": {
"rid": "linux",
"assetType": "runtime",
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
},
"runtimes/osx/lib/netstandard2.0/System.IO.Ports.dll": {
"rid": "osx",
"assetType": "runtime",
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
},
"runtimes/win/lib/netstandard2.0/System.IO.Ports.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
}
}
},
"System.Management/5.0.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"Microsoft.Win32.Registry": "6.0.0-preview.5.21301.5",
"System.CodeDom": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/System.Management.dll": {
"assemblyVersion": "4.0.0.0",
"fileVersion": "5.0.20.51904"
}
},
"runtimeTargets": {
"runtimes/win/lib/netcoreapp2.0/System.Management.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
},
"System.Security.AccessControl/6.0.0-preview.5.21301.5": {
"dependencies": {
"System.Security.Principal.Windows": "6.0.0-preview.5.21301.5"
},
"runtime": {
"lib/netstandard2.0/System.Security.AccessControl.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
}
},
"runtimeTargets": {
"runtimes/win/lib/netstandard2.0/System.Security.AccessControl.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
}
}
},
"System.Security.Principal.Windows/6.0.0-preview.5.21301.5": {
"runtime": {
"lib/netstandard2.0/System.Security.Principal.Windows.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
}
},
"runtimeTargets": {
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
},
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.30105"
}
}
}
}
},
"libraries": {
"Matrix App/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Microsoft.NETCore.Platforms/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
"path": "microsoft.netcore.platforms/5.0.0",
"hashPath": "microsoft.netcore.platforms.5.0.0.nupkg.sha512"
},
"Microsoft.Win32.Registry/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-qYLtJIAEJJmY2vXxlVO8x4uXfgq7DFOHjpmnHlLm7kmAvyNFckYY/Dx5CZythBXvI2/7sratbIGKqSTysfgZ8A==",
"path": "microsoft.win32.registry/6.0.0-preview.5.21301.5",
"hashPath": "microsoft.win32.registry.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"runtime.linux-arm.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VlGxrS0KZuoXA2zP/4JtcsnAUr66ivzLj2TdwXcaQ2vKTFOq9wCz7xYh08KvZVWXJKthpzhS+lWtdw/9vbVlgg==",
"path": "runtime.linux-arm.runtime.native.system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "runtime.linux-arm.runtime.native.system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"runtime.linux-arm64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fN2ienMgX5Gl8rmmmTkCxEBeN+KMEwHkTIE+4bHIH0sgPZJqrGV7o7sjjivZlv95L64cF+a4UVlxGqiMVEN6Nw==",
"path": "runtime.linux-arm64.runtime.native.system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "runtime.linux-arm64.runtime.native.system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"runtime.linux-x64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-wLbxixueLlN1bT3tHi4bnXhyp2tuyJ92TBBBwW01YS4isxkLr8o4f2AGw8YbsF4y2Fgx8RRQiipkG1EFrZ7AKg==",
"path": "runtime.linux-x64.runtime.native.system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "runtime.linux-x64.runtime.native.system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9Int9JpQ3quVnY3nsUFmrcanozIrEMFAydF+v8KmDwh0CtPb2AZLyyRtNEC3Z1WmoF8qf+T7jWwuPlrfl338dw==",
"path": "runtime.native.system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "runtime.native.system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"runtime.osx-x64.runtime.native.System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-IhXEnQFgPxM/pUkEJkFBkr6XBkWFiuMGLlyl5BDG7LkJuGX4jAxJwL6n9Pue88ZyV45c0ajvuZOBnZJap+uIKA==",
"path": "runtime.osx-x64.runtime.native.system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "runtime.osx-x64.runtime.native.system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"System.CodeDom/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-JPJArwA1kdj8qDAkY2XGjSWoYnqiM7q/3yRNkt6n28Mnn95MuEGkZXUbPBf7qc3IjwrGY5ttQon7yqHZyQJmOQ==",
"path": "system.codedom/5.0.0",
"hashPath": "system.codedom.5.0.0.nupkg.sha512"
},
"System.IO.Ports/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9jguTG3uxGLvERVKV6w8ctcaYktBv8ssZgl6xm1hI89BBIaU6WwC2SQt9ur+TT8UMxdu9ZG+QQMbCJKEKv9dnQ==",
"path": "system.io.ports/6.0.0-preview.5.21301.5",
"hashPath": "system.io.ports.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"System.Management/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-MF1CHaRcC+MLFdnDthv4/bKWBZnlnSpkGqa87pKukQefgEdwtb9zFW6zs0GjPp73qtpYYg4q6PEKbzJbxCpKfw==",
"path": "system.management/5.0.0",
"hashPath": "system.management.5.0.0.nupkg.sha512"
},
"System.Security.AccessControl/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-EA9ul7nGN8oggMvloILnR+wnrbgLNZZQBYHq5nEq/ixwnKLV3M3Tbd1Jbj8oGck3XMj0owq81e4Jxp3s0IMICw==",
"path": "system.security.accesscontrol/6.0.0-preview.5.21301.5",
"hashPath": "system.security.accesscontrol.6.0.0-preview.5.21301.5.nupkg.sha512"
},
"System.Security.Principal.Windows/6.0.0-preview.5.21301.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ywwCqFAaRVbgqqORqYg8jdaX6NUEpzbuhxyUhAs+7mZ8AFAO4PzFYrZ5JPkYejXwougDldtbi0zOkk1lLzugLw==",
"path": "system.security.principal.windows/6.0.0-preview.5.21301.5",
"hashPath": "system.security.principal.windows.6.0.0-preview.5.21301.5.nupkg.sha512"
}
}
}

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More