First commit

This commit is contained in:
2019-11-11 23:39:22 +01:00
parent 36d5802aa7
commit 436a5acecc
21 changed files with 1404 additions and 1404 deletions

656
.gitignore vendored
View File

@@ -1,329 +1,329 @@
## Ignore Visual Studio temporary files, build results, and ## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons. ## files generated by popular Visual Studio add-ons.
## ##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files # User-specific files
*.suo *.suo
*.user *.user
*.userosscache *.userosscache
*.sln.docstates *.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio) # User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs *.userprefs
# Build results # Build results
[Dd]ebug/ [Dd]ebug/
[Dd]ebugPublic/ [Dd]ebugPublic/
[Rr]elease/ [Rr]elease/
[Rr]eleases/ [Rr]eleases/
x64/ x64/
x86/ x86/
bld/ bld/
[Bb]in/ [Bb]in/
[Oo]bj/ [Oo]bj/
[Ll]og/ [Ll]og/
# Visual Studio 2015/2017 cache/options directory # Visual Studio 2015/2017 cache/options directory
.vs/ .vs/
# Uncomment if you have tasks that create the project's static files in wwwroot # Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/ #wwwroot/
# Visual Studio 2017 auto generated files # Visual Studio 2017 auto generated files
Generated\ Files/ Generated\ Files/
# MSTest test Results # MSTest test Results
[Tt]est[Rr]esult*/ [Tt]est[Rr]esult*/
[Bb]uild[Ll]og.* [Bb]uild[Ll]og.*
# NUNIT # NUNIT
*.VisualState.xml *.VisualState.xml
TestResult.xml TestResult.xml
# Build Results of an ATL Project # Build Results of an ATL Project
[Dd]ebugPS/ [Dd]ebugPS/
[Rr]eleasePS/ [Rr]eleasePS/
dlldata.c dlldata.c
# Benchmark Results # Benchmark Results
BenchmarkDotNet.Artifacts/ BenchmarkDotNet.Artifacts/
# .NET Core # .NET Core
project.lock.json project.lock.json
project.fragment.lock.json project.fragment.lock.json
artifacts/ artifacts/
**/Properties/launchSettings.json **/Properties/launchSettings.json
# StyleCop # StyleCop
StyleCopReport.xml StyleCopReport.xml
# Files built by Visual Studio # Files built by Visual Studio
*_i.c *_i.c
*_p.c *_p.c
*_i.h *_i.h
*.ilk *.ilk
*.meta *.meta
*.obj *.obj
*.iobj *.iobj
*.pch *.pch
*.pdb *.pdb
*.ipdb *.ipdb
*.pgc *.pgc
*.pgd *.pgd
*.rsp *.rsp
*.sbr *.sbr
*.tlb *.tlb
*.tli *.tli
*.tlh *.tlh
*.tmp *.tmp
*.tmp_proj *.tmp_proj
*.log *.log
*.vspscc *.vspscc
*.vssscc *.vssscc
.builds .builds
*.pidb *.pidb
*.svclog *.svclog
*.scc *.scc
# Chutzpah Test files # Chutzpah Test files
_Chutzpah* _Chutzpah*
# Visual C++ cache files # Visual C++ cache files
ipch/ ipch/
*.aps *.aps
*.ncb *.ncb
*.opendb *.opendb
*.opensdf *.opensdf
*.sdf *.sdf
*.cachefile *.cachefile
*.VC.db *.VC.db
*.VC.VC.opendb *.VC.VC.opendb
# Visual Studio profiler # Visual Studio profiler
*.psess *.psess
*.vsp *.vsp
*.vspx *.vspx
*.sap *.sap
# Visual Studio Trace Files # Visual Studio Trace Files
*.e2e *.e2e
# TFS 2012 Local Workspace # TFS 2012 Local Workspace
$tf/ $tf/
# Guidance Automation Toolkit # Guidance Automation Toolkit
*.gpState *.gpState
# ReSharper is a .NET coding add-in # ReSharper is a .NET coding add-in
_ReSharper*/ _ReSharper*/
*.[Rr]e[Ss]harper *.[Rr]e[Ss]harper
*.DotSettings.user *.DotSettings.user
# JustCode is a .NET coding add-in # JustCode is a .NET coding add-in
.JustCode .JustCode
# TeamCity is a build add-in # TeamCity is a build add-in
_TeamCity* _TeamCity*
# DotCover is a Code Coverage Tool # DotCover is a Code Coverage Tool
*.dotCover *.dotCover
# AxoCover is a Code Coverage Tool # AxoCover is a Code Coverage Tool
.axoCover/* .axoCover/*
!.axoCover/settings.json !.axoCover/settings.json
# Visual Studio code coverage results # Visual Studio code coverage results
*.coverage *.coverage
*.coveragexml *.coveragexml
# NCrunch # NCrunch
_NCrunch_* _NCrunch_*
.*crunch*.local.xml .*crunch*.local.xml
nCrunchTemp_* nCrunchTemp_*
# MightyMoose # MightyMoose
*.mm.* *.mm.*
AutoTest.Net/ AutoTest.Net/
# Web workbench (sass) # Web workbench (sass)
.sass-cache/ .sass-cache/
# Installshield output folder # Installshield output folder
[Ee]xpress/ [Ee]xpress/
# DocProject is a documentation generator add-in # DocProject is a documentation generator add-in
DocProject/buildhelp/ DocProject/buildhelp/
DocProject/Help/*.HxT DocProject/Help/*.HxT
DocProject/Help/*.HxC DocProject/Help/*.HxC
DocProject/Help/*.hhc DocProject/Help/*.hhc
DocProject/Help/*.hhk DocProject/Help/*.hhk
DocProject/Help/*.hhp DocProject/Help/*.hhp
DocProject/Help/Html2 DocProject/Help/Html2
DocProject/Help/html DocProject/Help/html
# Click-Once directory # Click-Once directory
publish/ publish/
# Publish Web Output # Publish Web Output
*.[Pp]ublish.xml *.[Pp]ublish.xml
*.azurePubxml *.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings, # Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted # but database connection strings (with potential passwords) will be unencrypted
*.pubxml *.pubxml
*.publishproj *.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to # Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained # checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted # in these scripts will be unencrypted
PublishScripts/ PublishScripts/
# NuGet Packages # NuGet Packages
*.nupkg *.nupkg
# The packages folder can be ignored because of Package Restore # The packages folder can be ignored because of Package Restore
**/[Pp]ackages/* **/[Pp]ackages/*
# except build/, which is used as an MSBuild target. # except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/ !**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed # Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config #!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files # NuGet v3's project.json files produces more ignorable files
*.nuget.props *.nuget.props
*.nuget.targets *.nuget.targets
# Microsoft Azure Build Output # Microsoft Azure Build Output
csx/ csx/
*.build.csdef *.build.csdef
# Microsoft Azure Emulator # Microsoft Azure Emulator
ecf/ ecf/
rcf/ rcf/
# Windows Store app package directories and files # Windows Store app package directories and files
AppPackages/ AppPackages/
BundleArtifacts/ BundleArtifacts/
Package.StoreAssociation.xml Package.StoreAssociation.xml
_pkginfo.txt _pkginfo.txt
*.appx *.appx
# Visual Studio cache files # Visual Studio cache files
# files ending in .cache can be ignored # files ending in .cache can be ignored
*.[Cc]ache *.[Cc]ache
# but keep track of directories ending in .cache # but keep track of directories ending in .cache
!*.[Cc]ache/ !*.[Cc]ache/
# Others # Others
ClientBin/ ClientBin/
~$* ~$*
*~ *~
*.dbmdl *.dbmdl
*.dbproj.schemaview *.dbproj.schemaview
*.jfm *.jfm
*.pfx *.pfx
*.publishsettings *.publishsettings
orleans.codegen.cs orleans.codegen.cs
# Including strong name files can present a security risk # Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424) # (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk #*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components # Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/ #bower_components/
# RIA/Silverlight projects # RIA/Silverlight projects
Generated_Code/ Generated_Code/
# Backup & report files from converting an old project file # Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed, # to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-) # because we have git ;-)
_UpgradeReport_Files/ _UpgradeReport_Files/
Backup*/ Backup*/
UpgradeLog*.XML UpgradeLog*.XML
UpgradeLog*.htm UpgradeLog*.htm
ServiceFabricBackup/ ServiceFabricBackup/
# SQL Server files # SQL Server files
*.mdf *.mdf
*.ldf *.ldf
*.ndf *.ndf
# Business Intelligence projects # Business Intelligence projects
*.rdl.data *.rdl.data
*.bim.layout *.bim.layout
*.bim_*.settings *.bim_*.settings
*.rptproj.rsuser *.rptproj.rsuser
# Microsoft Fakes # Microsoft Fakes
FakesAssemblies/ FakesAssemblies/
# GhostDoc plugin setting file # GhostDoc plugin setting file
*.GhostDoc.xml *.GhostDoc.xml
# Node.js Tools for Visual Studio # Node.js Tools for Visual Studio
.ntvs_analysis.dat .ntvs_analysis.dat
node_modules/ node_modules/
# Visual Studio 6 build log # Visual Studio 6 build log
*.plg *.plg
# Visual Studio 6 workspace options file # Visual Studio 6 workspace options file
*.opt *.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw *.vbw
# Visual Studio LightSwitch build output # Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts **/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml **/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts **/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml **/*.Server/ModelManifest.xml
_Pvt_Extensions _Pvt_Extensions
# Paket dependency manager # Paket dependency manager
.paket/paket.exe .paket/paket.exe
paket-files/ paket-files/
# FAKE - F# Make # FAKE - F# Make
.fake/ .fake/
# JetBrains Rider # JetBrains Rider
.idea/ .idea/
*.sln.iml *.sln.iml
# CodeRush # CodeRush
.cr/ .cr/
# Python Tools for Visual Studio (PTVS) # Python Tools for Visual Studio (PTVS)
__pycache__/ __pycache__/
*.pyc *.pyc
# Cake - Uncomment if you are using it # Cake - Uncomment if you are using it
# tools/** # tools/**
# !tools/packages.config # !tools/packages.config
# Tabs Studio # Tabs Studio
*.tss *.tss
# Telerik's JustMock configuration file # Telerik's JustMock configuration file
*.jmconfig *.jmconfig
# BizTalk build output # BizTalk build output
*.btp.cs *.btp.cs
*.btm.cs *.btm.cs
*.odx.cs *.odx.cs
*.xsd.cs *.xsd.cs
# OpenCover UI analysis results # OpenCover UI analysis results
OpenCover/ OpenCover/
# Azure Stream Analytics local run output # Azure Stream Analytics local run output
ASALocalRun/ ASALocalRun/
# MSBuild Binary and Structured Log # MSBuild Binary and Structured Log
*.binlog *.binlog
# NVidia Nsight GPU debugger configuration file # NVidia Nsight GPU debugger configuration file
*.nvuser *.nvuser
# MFractors (Xamarin productivity tool) working folder # MFractors (Xamarin productivity tool) working folder
.mfractor/ .mfractor/

View File

@@ -1,109 +1,109 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}</ProjectGuid> <ProjectGuid>{FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}</ProjectGuid>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<RootNamespace>AccelVisualizer</RootNamespace> <RootNamespace>AccelVisualizer</RootNamespace>
<AssemblyName>AccelVisualizer</AssemblyName> <AssemblyName>AccelVisualizer</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath> <OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType> <DebugType>pdbonly</DebugType>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath> <OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants> <DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<StartupObject /> <StartupObject />
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="LiveCharts, Version=0.9.7.0, Culture=neutral, PublicKeyToken=0bc1f845d1ebb8df, processorArchitecture=MSIL"> <Reference Include="LiveCharts, Version=0.9.7.0, Culture=neutral, PublicKeyToken=0bc1f845d1ebb8df, processorArchitecture=MSIL">
<HintPath>..\packages\LiveCharts.0.9.7\lib\net45\LiveCharts.dll</HintPath> <HintPath>..\packages\LiveCharts.0.9.7\lib\net45\LiveCharts.dll</HintPath>
</Reference> </Reference>
<Reference Include="LiveCharts.Wpf, Version=0.9.7.0, Culture=neutral, PublicKeyToken=0bc1f845d1ebb8df, processorArchitecture=MSIL"> <Reference Include="LiveCharts.Wpf, Version=0.9.7.0, Culture=neutral, PublicKeyToken=0bc1f845d1ebb8df, processorArchitecture=MSIL">
<HintPath>..\packages\LiveCharts.Wpf.0.9.7\lib\net45\LiveCharts.Wpf.dll</HintPath> <HintPath>..\packages\LiveCharts.Wpf.0.9.7\lib\net45\LiveCharts.Wpf.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
<Reference Include="System.Xaml"> <Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework> <RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference> </Reference>
<Reference Include="WindowsBase" /> <Reference Include="WindowsBase" />
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" /> <Reference Include="PresentationFramework" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ApplicationDefinition Include="App.xaml"> <ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</ApplicationDefinition> </ApplicationDefinition>
<Compile Include="Chart.xaml.cs"> <Compile Include="Chart.xaml.cs">
<DependentUpon>Chart.xaml</DependentUpon> <DependentUpon>Chart.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Measurement.cs" /> <Compile Include="Measurement.cs" />
<Compile Include="UDPSocket.cs" /> <Compile Include="UDPSocket.cs" />
<Page Include="Chart.xaml"> <Page Include="Chart.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Compile Include="App.xaml.cs"> <Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon> <DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="StampedSensorData.cs" /> <Compile Include="StampedSensorData.cs" />
<Compile Include="Properties\AssemblyInfo.cs"> <Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="Properties\Resources.Designer.cs"> <Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
</Compile> </Compile>
<Compile Include="Properties\Settings.Designer.cs"> <Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon> <DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
<EmbeddedResource Include="Properties\Resources.resx"> <EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<None Include="packages.config" /> <None Include="packages.config" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="App.config" /> <None Include="App.config" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<configuration> <configuration>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup> </startup>
</configuration> </configuration>

View File

@@ -1,9 +1,9 @@
<Application x:Class="AccelVisualizer.App" <Application x:Class="AccelVisualizer.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:AccelVisualizer" xmlns:local="clr-namespace:AccelVisualizer"
StartupUri="Chart.xaml"> StartupUri="Chart.xaml">
<Application.Resources> <Application.Resources>
</Application.Resources> </Application.Resources>
</Application> </Application>

View File

@@ -1,18 +1,18 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Configuration; using System.Configuration;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
namespace AccelVisualizer namespace AccelVisualizer
{ {
/// <summary> /// <summary>
/// Interaction logic for App.xaml /// Interaction logic for App.xaml
/// </summary> /// </summary>
public partial class App : Application public partial class App : Application
{ {
} }
} }

View File

@@ -1,48 +1,48 @@
<Window x:Class="AccelVisualizer.Chart" <Window x:Class="AccelVisualizer.Chart"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:AccelVisualizer" xmlns:local="clr-namespace:AccelVisualizer"
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf" xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
mc:Ignorable="d" mc:Ignorable="d"
Height="375.49" Width="569.118"> Height="375.49" Width="569.118">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition> <RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<lvc:CartesianChart Grid.Row="1" AnimationsSpeed="0:0:0.1" DisableAnimations="True" Hoverable="False" DataTooltip="{x:Null}"> <lvc:CartesianChart Grid.Row="1" AnimationsSpeed="0:0:0.1" DisableAnimations="True" Hoverable="False" DataTooltip="{x:Null}">
<lvc:CartesianChart.Series> <lvc:CartesianChart.Series>
<lvc:LineSeries Values="{Binding ChartValuesX}" <lvc:LineSeries Values="{Binding ChartValuesX}"
PointGeometry="{x:Null}" PointGeometry="{x:Null}"
LineSmoothness="0" LineSmoothness="0"
StrokeThickness="2" StrokeThickness="2"
Stroke="#F34336" Stroke="#F34336"
Fill="Transparent"/> Fill="Transparent"/>
<lvc:LineSeries Values="{Binding ChartValuesY}" <lvc:LineSeries Values="{Binding ChartValuesY}"
PointGeometry="{x:Null}" PointGeometry="{x:Null}"
LineSmoothness="0" LineSmoothness="0"
StrokeThickness="2" StrokeThickness="2"
Stroke="#4cae50" Stroke="#4cae50"
Fill="Transparent"/> Fill="Transparent"/>
<lvc:LineSeries Values="{Binding ChartValuesZ}" <lvc:LineSeries Values="{Binding ChartValuesZ}"
PointGeometry="{x:Null}" PointGeometry="{x:Null}"
LineSmoothness="0" LineSmoothness="0"
StrokeThickness="2" StrokeThickness="2"
Stroke="#2195f2" Stroke="#2195f2"
Fill="Transparent"/> Fill="Transparent"/>
</lvc:CartesianChart.Series> </lvc:CartesianChart.Series>
<lvc:CartesianChart.AxisX> <lvc:CartesianChart.AxisX>
<!--<lvc:Axis LabelFormatter="{Binding DateTimeFormatter}"--> <!--<lvc:Axis LabelFormatter="{Binding DateTimeFormatter}"-->
<lvc:Axis MaxValue="{Binding AxisMax}" <lvc:Axis MaxValue="{Binding AxisMax}"
MinValue="{Binding AxisMin}" MinValue="{Binding AxisMin}"
Unit="{Binding AxisUnit}"> Unit="{Binding AxisUnit}">
<lvc:Axis.Separator> <lvc:Axis.Separator>
<lvc:Separator Step="{Binding AxisStep}" /> <lvc:Separator Step="{Binding AxisStep}" />
</lvc:Axis.Separator> </lvc:Axis.Separator>
</lvc:Axis> </lvc:Axis>
</lvc:CartesianChart.AxisX> </lvc:CartesianChart.AxisX>
</lvc:CartesianChart> </lvc:CartesianChart>
</Grid> </Grid>
</Window> </Window>

View File

@@ -1,174 +1,174 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Data; using System.Windows.Data;
using System.Windows.Documents; using System.Windows.Documents;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using System.Windows.Navigation; using System.Windows.Navigation;
using System.Windows.Shapes; using System.Windows.Shapes;
using LiveCharts; using LiveCharts;
using LiveCharts.Wpf; using LiveCharts.Wpf;
using LiveCharts.Configurations; using LiveCharts.Configurations;
namespace AccelVisualizer namespace AccelVisualizer
{ {
public partial class Chart : Window, INotifyPropertyChanged public partial class Chart : Window, INotifyPropertyChanged
{ {
public ChartValues<Measurement> ChartValuesX { get; set; } public ChartValues<Measurement> ChartValuesX { get; set; }
public ChartValues<Measurement> ChartValuesY { get; set; } public ChartValues<Measurement> ChartValuesY { get; set; }
public ChartValues<Measurement> ChartValuesZ { get; set; } public ChartValues<Measurement> ChartValuesZ { get; set; }
public Func<double, long> DateTimeFormatter { get; set; } public Func<double, long> DateTimeFormatter { get; set; }
public double AxisStep { get; set; } public double AxisStep { get; set; }
public double AxisUnit { get; set; } public double AxisUnit { get; set; }
private double _axisMax; private double _axisMax;
private double _axisMin; private double _axisMin;
double startTime; double startTime;
StampedSensorData sensorData; StampedSensorData sensorData;
bool listening; bool listening;
public Chart() public Chart()
{ {
InitializeComponent(); InitializeComponent();
//Mapper to plot points correctly //Mapper to plot points correctly
var mapper = Mappers.Xy<Measurement>() var mapper = Mappers.Xy<Measurement>()
.X(model => model.seconds) .X(model => model.seconds)
.Y(model => model.Value); .Y(model => model.Value);
//Save mapper globally //Save mapper globally
Charting.For<Measurement>(mapper); Charting.For<Measurement>(mapper);
ChartValuesX = new ChartValues<Measurement>(); ChartValuesX = new ChartValues<Measurement>();
ChartValuesY = new ChartValues<Measurement>(); ChartValuesY = new ChartValues<Measurement>();
ChartValuesZ = new ChartValues<Measurement>(); ChartValuesZ = new ChartValues<Measurement>();
//set how to display the X Labels //set how to display the X Labels
//DateTimeFormatter = value => (long)Math.Floor(value); //DateTimeFormatter = value => (long)Math.Floor(value);
//AxisStep forces the distance between each separator in the X axis //AxisStep forces the distance between each separator in the X axis
AxisStep = 1; AxisStep = 1;
//AxisUnit lets the axis know that we are plotting in seconds //AxisUnit lets the axis know that we are plotting in seconds
AxisUnit = 1; AxisUnit = 1;
//Init the UDP socket Show();
UDPSocket.InitSocket();
//Init the UDP socket
//Send a package to server UDPSocket.InitSocket();
UDPSocket.SendPacket();
//Send a package to server
//Receive first package and take note of start time UDPSocket.SendPacket();
sensorData = UDPSocket.ReceivePacket();
startTime = sensorData.GetSeconds(); //Receive first package and take note of start time
sensorData = UDPSocket.ReceivePacket();
//Set axes correctly startTime = sensorData.GetSeconds();
SetAxisLimits(0);
//Set axes correctly
//Plot first value SetAxisLimits(0);
PlotSensorData(sensorData);
//Plot first value
DataContext = this; PlotSensorData(sensorData);
this.Show(); DataContext = this;
listening = true; listening = true;
//Start new thread for package listener //Start new thread for package listener
Task.Factory.StartNew(ReceivePackages); Task.Factory.StartNew(ReceivePackages);
} }
private void ReceivePackages() private void ReceivePackages()
{ {
while (listening) while (listening)
{ {
sensorData = UDPSocket.ReceivePacket(); sensorData = UDPSocket.ReceivePacket();
Console.WriteLine(sensorData.ToString()); Console.WriteLine(sensorData.ToString());
PlotSensorData(sensorData); PlotSensorData(sensorData);
//Remove data when too large //Remove data when too large
if(ChartValuesX.Count > 100) if(ChartValuesX.Count > 100)
{ {
RemoveData(); RemoveData();
} }
} }
} }
private void RemoveData() private void RemoveData()
{ {
ChartValuesX.RemoveAt(0); ChartValuesX.RemoveAt(0);
ChartValuesY.RemoveAt(0); ChartValuesY.RemoveAt(0);
ChartValuesZ.RemoveAt(0); ChartValuesZ.RemoveAt(0);
} }
public double AxisMax public double AxisMax
{ {
get { return _axisMax; } get { return _axisMax; }
set set
{ {
_axisMax = value; _axisMax = value;
OnPropertyChanged("AxisMax"); OnPropertyChanged("AxisMax");
} }
} }
public double AxisMin public double AxisMin
{ {
get { return _axisMin; } get { return _axisMin; }
set set
{ {
_axisMin = value; _axisMin = value;
OnPropertyChanged("AxisMin"); OnPropertyChanged("AxisMin");
} }
} }
private void SetAxisLimits(double now) private void SetAxisLimits(double now)
{ {
AxisMax = now + 1; // force the axis to be 1 second ahead AxisMax = now + 1; // force the axis to be 1 second ahead
AxisMin = now - 10; // and 30 seconds behind AxisMin = now - 10; // and 30 seconds behind
} }
private void PlotSensorData(StampedSensorData data) private void PlotSensorData(StampedSensorData data)
{ {
//If time is 0, don't plot //If time is 0, don't plot
if(data.GetSeconds() == 0) if(data.GetSeconds() == 0)
{ {
return; return;
} }
//Convert to Measurement data types //Convert to Measurement data types
Measurement X, Y, Z; Measurement X, Y, Z;
double now = data.GetSeconds() - startTime; double now = data.GetSeconds() - startTime;
X = new Measurement { Value = data.GetX(), seconds = now }; X = new Measurement { Value = data.GetX(), seconds = now };
Y = new Measurement { Value = data.GetY(), seconds = now }; Y = new Measurement { Value = data.GetY(), seconds = now };
Z = new Measurement { Value = data.GetZ(), seconds = now }; Z = new Measurement { Value = data.GetZ(), seconds = now };
//Add values to plot //Add values to plot
ChartValuesX.Add(X); ChartValuesX.Add(X);
ChartValuesY.Add(Y); ChartValuesY.Add(Y);
ChartValuesZ.Add(Z); ChartValuesZ.Add(Z);
//Update axes //Update axes
SetAxisLimits(now); SetAxisLimits(now);
} }
#region INotifyPropertyChanged implementation #region INotifyPropertyChanged implementation
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName = null) protected virtual void OnPropertyChanged(string propertyName = null)
{ {
if (PropertyChanged != null) if (PropertyChanged != null)
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
} }
#endregion #endregion
} }
} }

View File

@@ -1,12 +1,12 @@
using System; using System;
namespace AccelVisualizer namespace AccelVisualizer
{ {
public class Measurement public class Measurement
{ {
//public DateTime DateTime { get; set; } //public DateTime DateTime { get; set; }
public double seconds { get; set; } public double seconds { get; set; }
public double Value { get; set; } public double Value { get; set; }
} }
} }

View File

@@ -1,55 +1,55 @@
using System.Reflection; using System.Reflection;
using System.Resources; using System.Resources;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Windows; using System.Windows;
// General Information about an assembly is controlled through the following // General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information // set of attributes. Change these attribute values to modify the information
// associated with an assembly. // associated with an assembly.
[assembly: AssemblyTitle("AccelVisualizer")] [assembly: AssemblyTitle("AccelVisualizer")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AccelVisualizer")] [assembly: AssemblyProduct("AccelVisualizer")]
[assembly: AssemblyCopyright("Copyright © 2018")] [assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible // Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from // to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type. // COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
//In order to begin building localizable applications, set //In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file //<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english //inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment //in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in //the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file. //the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo( [assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page, //(used if a resource is not found in the page,
// or application resource dictionaries) // or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page, //(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries) // app, or any theme specific resource dictionaries)
)] )]
// Version information for an assembly consists of the following four values: // Version information for an assembly consists of the following four values:
// //
// Major Version // Major Version
// Minor Version // Minor Version
// Build Number // Build Number
// Revision // Revision
// //
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,71 +1,71 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.42000 // Runtime Version:4.0.30319.42000
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace AccelVisualizer.Properties namespace AccelVisualizer.Properties
{ {
/// <summary> /// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc. /// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary> /// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder // This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio. // class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen // To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project. // with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources internal class Resources
{ {
private static global::System.Resources.ResourceManager resourceMan; private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture; private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() internal Resources()
{ {
} }
/// <summary> /// <summary>
/// Returns the cached ResourceManager instance used by this class. /// Returns the cached ResourceManager instance used by this class.
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager internal static global::System.Resources.ResourceManager ResourceManager
{ {
get get
{ {
if ((resourceMan == null)) if ((resourceMan == null))
{ {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AccelVisualizer.Properties.Resources", typeof(Resources).Assembly); global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AccelVisualizer.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp; resourceMan = temp;
} }
return resourceMan; return resourceMan;
} }
} }
/// <summary> /// <summary>
/// Overrides the current thread's CurrentUICulture property for all /// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class. /// resource lookups using this strongly typed resource class.
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture internal static global::System.Globalization.CultureInfo Culture
{ {
get get
{ {
return resourceCulture; return resourceCulture;
} }
set set
{ {
resourceCulture = value; resourceCulture = value;
} }
} }
} }
} }

View File

@@ -1,117 +1,117 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader> <resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value> <value>[base64 mime encoded serialized .NET Framework object]</value>
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment> <comment>This is a comment</comment>
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" /> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:schema> </xsd:schema>
<resheader name="resmimetype"> <resheader name="resmimetype">
<value>text/microsoft-resx</value> <value>text/microsoft-resx</value>
</resheader> </resheader>
<resheader name="version"> <resheader name="version">
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
</root> </root>

View File

@@ -1,30 +1,30 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.42000 // Runtime Version:4.0.30319.42000
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace AccelVisualizer.Properties namespace AccelVisualizer.Properties
{ {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{ {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default public static Settings Default
{ {
get get
{ {
return defaultInstance; return defaultInstance;
} }
} }
} }
} }

View File

@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)"> <SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles> <Profiles>
<Profile Name="(Default)" /> <Profile Name="(Default)" />
</Profiles> </Profiles>
<Settings /> <Settings />
</SettingsFile> </SettingsFile>

View File

@@ -1,122 +1,122 @@
using System; using System;
using System.Globalization; using System.Globalization;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Text; using System.Text;
namespace AccelVisualizer namespace AccelVisualizer
{ {
public class StampedSensorData public class StampedSensorData
{ {
//Acceleration in G's //Acceleration in G's
float x, y, z; float x, y, z;
//Timestamp //Timestamp
double seconds; double seconds;
//Constructors //Constructors
public StampedSensorData() public StampedSensorData()
{ {
x = 0; x = 0;
y = 0; y = 0;
z = 0; z = 0;
seconds = 0; seconds = 0;
} }
public StampedSensorData(float x, float y, float z, ulong seconds, ulong nanoSeconds) public StampedSensorData(float x, float y, float z, ulong seconds, ulong nanoSeconds)
{ {
this.x = x; this.x = x;
this.y = y; this.y = y;
this.z = z; this.z = z;
this.seconds = ConvertToSeconds(seconds, nanoSeconds); this.seconds = ConvertToSeconds(seconds, nanoSeconds);
} }
//Setters //Setters
public void SetX(float newX) public void SetX(float newX)
{ {
x = newX; x = newX;
} }
public void SetY(float newY) public void SetY(float newY)
{ {
y = newY; y = newY;
} }
public void SetZ(float newY) public void SetZ(float newY)
{ {
y = newY; y = newY;
} }
public void SetSeconds(double newSeconds) public void SetSeconds(double newSeconds)
{ {
seconds = newSeconds; seconds = newSeconds;
} }
//Getters //Getters
public float GetX() public float GetX()
{ {
return x; return x;
} }
public float GetY() public float GetY()
{ {
return y; return y;
} }
public float GetZ() public float GetZ()
{ {
return z; return z;
} }
public double GetSeconds() public double GetSeconds()
{ {
return seconds; return seconds;
} }
//Convert to seconds //Convert to seconds
public static double ConvertToSeconds(ulong seconds, ulong nanoSeconds) public static double ConvertToSeconds(ulong seconds, ulong nanoSeconds)
{ {
return seconds + nanoSeconds / 1000000000.0; return seconds + nanoSeconds / 1000000000.0;
} }
public static StampedSensorData ReadString(string input) public static StampedSensorData ReadString(string input)
{ {
input.Replace('.', ','); input.Replace('.', ',');
string[] data = input.Split(';'); string[] data = input.Split(';');
if(data.Length < 5) if(data.Length < 5)
{ {
//Invalid data read, return empty sensordata //Invalid data read, return empty sensordata
return new StampedSensorData(); return new StampedSensorData();
} }
float x, y, z; float x, y, z;
ulong seconds, nanoSeconds; ulong seconds, nanoSeconds;
if(float.TryParse(data[0], out x) if(float.TryParse(data[0], out x)
&& float.TryParse(data[1], out y) && float.TryParse(data[1], out y)
&& float.TryParse(data[2], out z) && float.TryParse(data[2], out z)
&& ulong.TryParse(data[3], out seconds) && ulong.TryParse(data[3], out seconds)
&& ulong.TryParse(data[4], out nanoSeconds)) && ulong.TryParse(data[4], out nanoSeconds))
{ {
//Succesfully parsed, return data //Succesfully parsed, return data
return new StampedSensorData(x, y, z, seconds, nanoSeconds); return new StampedSensorData(x, y, z, seconds, nanoSeconds);
} else } else
{ {
//Parse not succesful, return empty sensordata //Parse not succesful, return empty sensordata
return new StampedSensorData(); return new StampedSensorData();
} }
} }
public override string ToString() public override string ToString()
{ {
return "X: " + x.ToString() + " Y: " + y.ToString() + " Z: " + z.ToString() + " Seconds: " + seconds.ToString(); return "X: " + x.ToString() + " Y: " + y.ToString() + " Z: " + z.ToString() + " Seconds: " + seconds.ToString();
} }
public long GetTimeTicks() public long GetTimeTicks()
{ {
return (long) Math.Floor(seconds * TimeSpan.TicksPerSecond); return (long) Math.Floor(seconds * TimeSpan.TicksPerSecond);
} }
} }
} }

View File

@@ -1,100 +1,100 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
namespace AccelVisualizer namespace AccelVisualizer
{ {
class UDPSocket class UDPSocket
{ {
// Data buffer for incoming data. // Data buffer for incoming data.
static byte[] bytes = new byte[512]; static byte[] bytes = new byte[512];
//Socket //Socket
static Socket sender; static Socket sender;
static IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); static IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
static IPAddress ipAddress = IPAddress.Parse("192.168.0.109"); static IPAddress ipAddress = IPAddress.Parse("192.168.120.106");
static IPEndPoint remoteEP; static IPEndPoint remoteEP;
public static void InitSocket() public static void InitSocket()
{ {
try try
{ {
//Port 5000 //Port 5000
remoteEP = new IPEndPoint(ipAddress, 5000); remoteEP = new IPEndPoint(ipAddress, 5000);
// Create a TCP/IP socket. // Create a TCP/IP socket.
sender = new Socket(ipAddress.AddressFamily, sender = new Socket(ipAddress.AddressFamily,
SocketType.Dgram, ProtocolType.Udp); SocketType.Dgram, ProtocolType.Udp);
} }
catch (Exception e) catch (Exception e)
{ {
Console.WriteLine(e.ToString()); Console.WriteLine(e.ToString());
} }
} }
public static void SendPacket() public static void SendPacket()
{ {
try try
{ {
// Encode the data string into a byte array. // Encode the data string into a byte array.
byte[] msg = Encoding.ASCII.GetBytes("Send anything to start receiving packages."); byte[] msg = Encoding.ASCII.GetBytes("Send anything to start receiving packages.");
// Send the data through the socket. // Send the data through the socket.
int bytesSent = sender.SendTo(msg, remoteEP); int bytesSent = sender.SendTo(msg, remoteEP);
} }
catch (ArgumentNullException ane) catch (ArgumentNullException ane)
{ {
Console.WriteLine("ArgumentNullException : {0}", ane.ToString()); Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
} }
catch (SocketException se) catch (SocketException se)
{ {
Console.WriteLine("SocketException : {0}", se.ToString()); Console.WriteLine("SocketException : {0}", se.ToString());
} }
catch (Exception e) catch (Exception e)
{ {
Console.WriteLine("Unexpected exception : {0}", e.ToString()); Console.WriteLine("Unexpected exception : {0}", e.ToString());
} }
} }
public static StampedSensorData ReceivePacket() public static StampedSensorData ReceivePacket()
{ {
try try
{ {
//Capture the identity of the sending host. //Capture the identity of the sending host.
IPEndPoint sendingEndpoint = new IPEndPoint(IPAddress.Any, 0); IPEndPoint sendingEndpoint = new IPEndPoint(IPAddress.Any, 0);
EndPoint senderRemote = (EndPoint)sendingEndpoint; EndPoint senderRemote = (EndPoint)sendingEndpoint;
int bytesRec = sender.ReceiveFrom(bytes, ref senderRemote); int bytesRec = sender.ReceiveFrom(bytes, ref senderRemote);
string currentRead = Encoding.ASCII.GetString(bytes).Replace('.', ','); string currentRead = Encoding.ASCII.GetString(bytes).Replace('.', ',');
return StampedSensorData.ReadString(currentRead); return StampedSensorData.ReadString(currentRead);
} }
catch (ArgumentNullException ane) catch (ArgumentNullException ane)
{ {
Console.WriteLine("ArgumentNullException : {0}", ane.ToString()); Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
return new StampedSensorData(); return new StampedSensorData();
} }
catch (SocketException se) catch (SocketException se)
{ {
Console.WriteLine("SocketException : {0}", se.ToString()); Console.WriteLine("SocketException : {0}", se.ToString());
return new StampedSensorData(); return new StampedSensorData();
} }
catch (Exception e) catch (Exception e)
{ {
Console.WriteLine("Unexpected exception : {0}", e.ToString()); Console.WriteLine("Unexpected exception : {0}", e.ToString());
return new StampedSensorData(); return new StampedSensorData();
} }
} }
public static void CloseSocket() public static void CloseSocket()
{ {
// Release the socket. // Release the socket.
sender.Shutdown(SocketShutdown.Both); sender.Shutdown(SocketShutdown.Both);
sender.Close(); sender.Close();
} }
} }
} }

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="LiveCharts" version="0.9.7" targetFramework="net461" /> <package id="LiveCharts" version="0.9.7" targetFramework="net461" />
<package id="LiveCharts.Wpf" version="0.9.7" targetFramework="net461" /> <package id="LiveCharts.Wpf" version="0.9.7" targetFramework="net461" />
</packages> </packages>

View File

@@ -1,25 +1,25 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15 # Visual Studio 15
VisualStudioVersion = 15.0.27130.2027 VisualStudioVersion = 15.0.27130.2027
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AccelVisualizer", "AccelVisualizer\AccelVisualizer.csproj", "{FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AccelVisualizer", "AccelVisualizer\AccelVisualizer.csproj", "{FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}.Debug|Any CPU.Build.0 = Debug|Any CPU {FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}.Release|Any CPU.ActiveCfg = Release|Any CPU {FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}.Release|Any CPU.Build.0 = Release|Any CPU {FCBC25C8-0BBF-4EA4-9043-743B06FFBC02}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9D299831-D223-4240-9C3C-213A66157A87} SolutionGuid = {9D299831-D223-4240-9C3C-213A66157A87}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<configuration> <configuration>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup> </startup>
</configuration> </configuration>

View File

@@ -1,52 +1,52 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{0AA862E1-2247-4CA7-8324-FBD7C5959CAF}</ProjectGuid> <ProjectGuid>{0AA862E1-2247-4CA7-8324-FBD7C5959CAF}</ProjectGuid>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<RootNamespace>ClientTest</RootNamespace> <RootNamespace>ClientTest</RootNamespace>
<AssemblyName>ClientTest</AssemblyName> <AssemblyName>ClientTest</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath> <OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType> <DebugType>pdbonly</DebugType>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath> <OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants> <DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="App.config" /> <None Include="App.config" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>

View File

@@ -1,82 +1,82 @@
using System; using System;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Text; using System.Text;
public class SynchronousSocketClient public class SynchronousSocketClient
{ {
public static void StartClient() public static void StartClient()
{ {
// Data buffer for incoming data. // Data buffer for incoming data.
byte[] bytes = new byte[512]; byte[] bytes = new byte[512];
// Connect to a remote device. // Connect to a remote device.
try try
{ {
// Establish the remote endpoint for the socket. // Establish the remote endpoint for the socket.
// This example uses port 5000 on the local computer. // This example uses port 5000 on the local computer.
IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = IPAddress.Parse("192.168.0.109"); IPAddress ipAddress = IPAddress.Parse("192.168.0.109");
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 5000); IPEndPoint remoteEP = new IPEndPoint(ipAddress, 5000);
// Create a TCP/IP socket. // Create a TCP/IP socket.
Socket sender = new Socket(ipAddress.AddressFamily, Socket sender = new Socket(ipAddress.AddressFamily,
SocketType.Dgram, ProtocolType.Udp); SocketType.Dgram, ProtocolType.Udp);
// Connect the socket to the remote endpoint. Catch any errors. // Connect the socket to the remote endpoint. Catch any errors.
try try
{ {
//sender.Connect(remoteEP); //sender.Connect(remoteEP);
//Console.WriteLine("Socket connected to {0}", //Console.WriteLine("Socket connected to {0}",
// sender.RemoteEndPoint.ToString()); // sender.RemoteEndPoint.ToString());
// Encode the data string into a byte array. // Encode the data string into a byte array.
byte[] msg = Encoding.ASCII.GetBytes("This is a test<EOF>"); byte[] msg = Encoding.ASCII.GetBytes("This is a test<EOF>");
// Send the data through the socket. // Send the data through the socket.
int bytesSent = sender.SendTo(msg, remoteEP); int bytesSent = sender.SendTo(msg, remoteEP);
// Creates an IPEndPoint to capture the identity of the sending host. // Creates an IPEndPoint to capture the identity of the sending host.
IPEndPoint sendingEndpoint = new IPEndPoint(IPAddress.Any, 0); IPEndPoint sendingEndpoint = new IPEndPoint(IPAddress.Any, 0);
EndPoint senderRemote = (EndPoint)sendingEndpoint; EndPoint senderRemote = (EndPoint)sendingEndpoint;
// Receive the response from the remote device. // Receive the response from the remote device.
while(true) while(true)
{ {
int bytesRec = sender.ReceiveFrom(bytes, ref senderRemote); int bytesRec = sender.ReceiveFrom(bytes, ref senderRemote);
Console.WriteLine("Echoed test = {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec)); Console.WriteLine("Echoed test = {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec));
} }
// Release the socket. // Release the socket.
sender.Shutdown(SocketShutdown.Both); sender.Shutdown(SocketShutdown.Both);
sender.Close(); sender.Close();
} }
catch (ArgumentNullException ane) catch (ArgumentNullException ane)
{ {
Console.WriteLine("ArgumentNullException : {0}", ane.ToString()); Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
} }
catch (SocketException se) catch (SocketException se)
{ {
Console.WriteLine("SocketException : {0}", se.ToString()); Console.WriteLine("SocketException : {0}", se.ToString());
} }
catch (Exception e) catch (Exception e)
{ {
Console.WriteLine("Unexpected exception : {0}", e.ToString()); Console.WriteLine("Unexpected exception : {0}", e.ToString());
} }
} }
catch (Exception e) catch (Exception e)
{ {
Console.WriteLine(e.ToString()); Console.WriteLine(e.ToString());
} }
} }
public static int Main(String[] args) public static int Main(String[] args)
{ {
StartClient(); StartClient();
return 0; return 0;
} }
} }

View File

@@ -1,36 +1,36 @@
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following // General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information // set of attributes. Change these attribute values to modify the information
// associated with an assembly. // associated with an assembly.
[assembly: AssemblyTitle("ClientTest")] [assembly: AssemblyTitle("ClientTest")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ClientTest")] [assembly: AssemblyProduct("ClientTest")]
[assembly: AssemblyCopyright("Copyright © 2018")] [assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible // Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from // to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type. // COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM // The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("0aa862e1-2247-4ca7-8324-fbd7c5959caf")] [assembly: Guid("0aa862e1-2247-4ca7-8324-fbd7c5959caf")]
// Version information for an assembly consists of the following four values: // Version information for an assembly consists of the following four values:
// //
// Major Version // Major Version
// Minor Version // Minor Version
// Build Number // Build Number
// Revision // Revision
// //
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]