Skip to content

Commit 5c10fa4

Browse files
committed
Publish 2.0.0
1 parent b2e96b3 commit 5c10fa4

14 files changed

+681
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{
2+
"runtimeTarget": {
3+
"name": ".NETCoreApp,Version=v6.0",
4+
"signature": ""
5+
},
6+
"compilationOptions": {},
7+
"targets": {
8+
".NETCoreApp,Version=v6.0": {
9+
"IrvineCubeSat.GpsParser.Windows/1.0.0": {
10+
"dependencies": {
11+
"IrvineCubeSat.GpsParser": "1.0.0"
12+
},
13+
"runtime": {
14+
"IrvineCubeSat.GpsParser.Windows.dll": {}
15+
}
16+
},
17+
"CsvHelper/28.0.1": {
18+
"runtime": {
19+
"lib/net6.0/CsvHelper.dll": {
20+
"assemblyVersion": "28.0.0.0",
21+
"fileVersion": "28.0.1.0"
22+
}
23+
}
24+
},
25+
"IrvineCubeSat.GpsParser/1.0.0": {
26+
"dependencies": {
27+
"CsvHelper": "28.0.1"
28+
},
29+
"runtime": {
30+
"IrvineCubeSat.GpsParser.dll": {}
31+
}
32+
}
33+
}
34+
},
35+
"libraries": {
36+
"IrvineCubeSat.GpsParser.Windows/1.0.0": {
37+
"type": "project",
38+
"serviceable": false,
39+
"sha512": ""
40+
},
41+
"CsvHelper/28.0.1": {
42+
"type": "package",
43+
"serviceable": true,
44+
"sha512": "sha512-T/Eid0mP/GeWV1RcxmUPSsBCtOm6wHbFII6iFydPfpIa6cd+siec0KGrLq5uabI8sH6crFi84OA1vNLkp8Lzlw==",
45+
"path": "csvhelper/28.0.1",
46+
"hashPath": "csvhelper.28.0.1.nupkg.sha512"
47+
},
48+
"IrvineCubeSat.GpsParser/1.0.0": {
49+
"type": "project",
50+
"serviceable": false,
51+
"sha512": ""
52+
}
53+
}
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<asmv1:assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns="urn:schemas-microsoft-com:asm.v2" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2">
3+
<asmv1:assemblyIdentity name="IrvineCubeSat.GpsParser.Windows.exe" version="2.0.0.0" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="msil" type="win32" />
4+
<description xmlns="urn:schemas-microsoft-com:asm.v1">A cross-platform library and application for parsing NovAtel GNSS command output message logs</description>
5+
<application />
6+
<entryPoint>
7+
<assemblyIdentity name="Launcher" version="7.0.0.0" language="neutral" processorArchitecture="msil" />
8+
<commandLine file="Launcher.exe" parameters="" />
9+
</entryPoint>
10+
<trustInfo>
11+
<security>
12+
<applicationRequestMinimum>
13+
<PermissionSet Unrestricted="true" ID="Custom" SameSite="site" />
14+
<defaultAssemblyRequest permissionSetReference="Custom" />
15+
</applicationRequestMinimum>
16+
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
17+
<!--
18+
UAC Manifest Options
19+
If you want to change the Windows User Account Control level replace the
20+
requestedExecutionLevel node with one of the following.
21+
22+
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
23+
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
24+
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
25+
26+
If you want to utilize File and Registry Virtualization for backward
27+
compatibility then delete the requestedExecutionLevel node.
28+
-->
29+
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
30+
</requestedPrivileges>
31+
</security>
32+
</trustInfo>
33+
<dependency>
34+
<dependentOS>
35+
<osVersionInfo>
36+
<os majorVersion="5" minorVersion="1" buildNumber="2600" servicePackMajor="0" />
37+
</osVersionInfo>
38+
</dependentOS>
39+
</dependency>
40+
<dependency>
41+
<dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
42+
<assemblyIdentity name="Microsoft.Windows.CommonLanguageRuntime" version="4.0.30319.0" />
43+
</dependentAssembly>
44+
</dependency>
45+
<dependency>
46+
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="Launcher.exe" size="15872">
47+
<assemblyIdentity name="Launcher" version="7.0.0.0" language="neutral" processorArchitecture="msil" />
48+
<hash>
49+
<dsig:Transforms>
50+
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
51+
</dsig:Transforms>
52+
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
53+
<dsig:DigestValue>3eqVz1wI0soouN85uitjLG58ZeY71PtN6Ftl61zuQnU=</dsig:DigestValue>
54+
</hash>
55+
</dependentAssembly>
56+
</dependency>
57+
<file name="CsvHelper.dll" size="194048">
58+
<hash>
59+
<dsig:Transforms>
60+
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
61+
</dsig:Transforms>
62+
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
63+
<dsig:DigestValue>kIal5ra8OpL2kYCyRmrrDXjxuavsYED7gWdjB8iFhdE=</dsig:DigestValue>
64+
</hash>
65+
</file>
66+
<file name="IrvineCubeSat.GpsParser.dll" size="62976">
67+
<hash>
68+
<dsig:Transforms>
69+
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
70+
</dsig:Transforms>
71+
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
72+
<dsig:DigestValue>+JEEe566ECLiPFlpIiQ+SEKsn/9/6RtLviSMdtMR4kY=</dsig:DigestValue>
73+
</hash>
74+
</file>
75+
<file name="IrvineCubeSat.GpsParser.Windows.deps.json" size="1395">
76+
<hash>
77+
<dsig:Transforms>
78+
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
79+
</dsig:Transforms>
80+
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
81+
<dsig:DigestValue>VOdtBJ/31+SgDbUVDejPcTBS2H2anN6CCgNgsdQ31qE=</dsig:DigestValue>
82+
</hash>
83+
</file>
84+
<file name="IrvineCubeSat.GpsParser.Windows.dll" size="35840">
85+
<hash>
86+
<dsig:Transforms>
87+
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
88+
</dsig:Transforms>
89+
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
90+
<dsig:DigestValue>4bHfOUA/gdN6xIcKgiPm2tVS2BQvyaQNSCT+AiQuC1Y=</dsig:DigestValue>
91+
</hash>
92+
</file>
93+
<file name="IrvineCubeSat.GpsParser.Windows.exe" size="147968">
94+
<hash>
95+
<dsig:Transforms>
96+
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
97+
</dsig:Transforms>
98+
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
99+
<dsig:DigestValue>J8gOGyWqhdYGJd9LGrKCh6fJ43Ne3OImE6+qIXuEicY=</dsig:DigestValue>
100+
</hash>
101+
</file>
102+
<file name="IrvineCubeSat.GpsParser.Windows.runtimeconfig.json" size="372">
103+
<hash>
104+
<dsig:Transforms>
105+
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
106+
</dsig:Transforms>
107+
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
108+
<dsig:DigestValue>HsoPDHAHCqg7tgnkt0mybctECXhDJgMnJjlHIiJKCYo=</dsig:DigestValue>
109+
</hash>
110+
</file>
111+
<file name="LICENSE.txt" size="1098">
112+
<hash>
113+
<dsig:Transforms>
114+
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
115+
</dsig:Transforms>
116+
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
117+
<dsig:DigestValue>zRRa5O8i/ZvOiTMHdj5tpCHJ6KQZT0T0yxfTcdJu87g=</dsig:DigestValue>
118+
</hash>
119+
</file>
120+
<file name="README.md" size="5445">
121+
<hash>
122+
<dsig:Transforms>
123+
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
124+
</dsig:Transforms>
125+
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
126+
<dsig:DigestValue>UJUV7+DGRktlcIZI2F00en8yhm6Y+fn0LYmyNcgxbNE=</dsig:DigestValue>
127+
</hash>
128+
</file>
129+
<file name="THIRD-PARTY-NOTICES.txt" size="12976">
130+
<hash>
131+
<dsig:Transforms>
132+
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
133+
</dsig:Transforms>
134+
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
135+
<dsig:DigestValue>fYbaVJMwcAZ+TKWhbi30PoGVyfLR3EiRtrkIyHV8YSU=</dsig:DigestValue>
136+
</hash>
137+
</file>
138+
</asmv1:assembly>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"runtimeOptions": {
3+
"tfm": "net6.0",
4+
"frameworks": [
5+
{
6+
"name": "Microsoft.NETCore.App",
7+
"version": "6.0.0"
8+
},
9+
{
10+
"name": "Microsoft.WindowsDesktop.App",
11+
"version": "6.0.0"
12+
}
13+
],
14+
"configProperties": {
15+
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false
16+
}
17+
}
18+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2019-2022 Ishan Pranav
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
# GNSS Log Parser
2+
This is a cross-platform library and application for parsing NovAtel GNSS command output message logs. The project includes a standalone class library, a cross-platform command-line tool, and a Windows GUI application.
3+
4+
This project is a [fork of the parser designed by Ishan Pranav](https://github.com/BeckmanAvionics/gps-output-parser) for [Arnold O. Beckman High School\'s Avionics Team](https://github.com/BeckmanAvionics), part of the Irvine CubeSat STEM Program. The software is designed for compatibility with NovAtel\'s OEM6 and OEM7 products.
5+
## Screenshots
6+
![Screenshot of the GNSS Log Visualizer application.](docs/images/Capture.png "GNSS Log Visualizer Application")
7+
## API Documentation
8+
The example below uses an ASCII parser to read messages from a string. Binary and Abbreviated ASCII messages are not supported.
9+
```csharp
10+
string value = @"#
11+
BESTPOSA,COM1,0,90.5,FINESTEERING,1949,403742.000,02000000,b1f6,32768;
12+
SOL_COMPUTED,SINGLE,51.11636937989,-114.03825348307,1064.533,-16.9000,
13+
WGS84,1.3610,1.0236,2.4745,"""",0.000,0.000,19,19,19,19,00,06,00,33
14+
*6e08fa22
15+
";
16+
AsciiGpsParser parser = new AsciiGpsParser();
17+
18+
await foreach (AsciiMessage message in parser.ParseAsync(value))
19+
{
20+
// Process the message
21+
}
22+
```
23+
### Built-in logs
24+
Each [GNSS log](https://docs.novatel.com/OEM7/Content/Logs/Core_Logs.htm) needs a dedicated model in the parser. The following built-in logs are automatically registered.
25+
| Command | Model Class |
26+
| ------- | ----------- |
27+
| [`ALIGNBSLNENU`](https://docs.novatel.com/OEM7/Content/Logs/ALIGNBSLNENU.htm) | `EnuBaselinesUsingAlignCommand` |
28+
| [`ALIGNBSLNXYZ`](https://docs.novatel.com/OEM7/Content/Logs/ALIGNBSLNXYZ.htm) | `XyzBaselinesUsingAlignCommand` |
29+
| [`ALIGNDOP`](https://docs.novatel.com/OEM7/Content/Logs/ALIGNDOP.htm) | `DopCommand` |
30+
| [`BESTPOS`](https://docs.novatel.com/OEM7/Content/Logs/BESTPOS.htm) | `BestPositionCommand` |
31+
| [`RXSTATUS`](https://docs.novatel.com/OEM7/Content/Logs/RXSTATUS.htm) | `ReceiverStatusCommand` |
32+
33+
### Custom logs
34+
To add support for the GNSS [`TIME`](https://docs.novatel.com/OEM7/Content/Logs/TIME.htm) command, create a new class annotated with the `CommandAttribute`. The parser uses [CsvHelper](https://github.com/JoshClose/CsvHelper) to map strings to objects.
35+
```csharp
36+
[Command("TIME")] // Command name
37+
public class TimeCommand
38+
{
39+
[Index(0)] // Field position
40+
public GnssClockModelStatus Status { get; }
41+
}
42+
43+
public enum GnssClockModelStatus
44+
{
45+
[Name("VALID")] // ASCII message representation
46+
Valid = 0, // Binary message representation
47+
48+
[Name("CONVERGING")]
49+
Converging = 1,
50+
51+
[Name("ITERATING")]
52+
Iterating = 2,
53+
54+
[Name("INVALID")]
55+
Invalid = 3
56+
}
57+
```
58+
Then, add the class to the parser:
59+
60+
```csharp
61+
parser.TryRegister<TimeCommand>();
62+
```
63+
## Command-line interface
64+
Provide a path to a log file:
65+
```posh
66+
IrvineCubeSat.GpsParser.Console.exe "Logs\Log1.gps"
67+
```
68+
Or a string:
69+
```posh
70+
IrvineCubeSat.GpsParser.Console.exe "#BESTPOSA,COM1,0,90.5,FINESTEERING,1949,403742.000,02000000,b1f6,32768;SOL_COMPUTED,SINGLE,51.11636937989,-114.03825348307,1064.533,-16.9000,WGS84,1.3610,1.0236,2.4745,UNKNOWN,0.000,0.000,19,19,19,19,00,06,00,33*6e08fa22"
71+
```
72+
Then retrieve the JSON output:
73+
```json
74+
[
75+
{
76+
"header": {
77+
"command": "BESTPOS",
78+
"port": "COM1",
79+
"sequenceNumber": 0,
80+
"idleTime": 90.5,
81+
"timeStatus": 180,
82+
"week": 1949,
83+
"weekOffset": "4.16:09:02",
84+
"timestamp": "2017-05-17T16:09:02",
85+
"receiverStatus": 33554432,
86+
"receiverSoftwareVersion": 32768
87+
},
88+
"command": {
89+
"solutionStatus": 0,
90+
"positionType": 16,
91+
"latitude": 51.11636937989,
92+
"longitude": -114.03825348307,
93+
"height": 1064.533,
94+
"undulation": -16.9,
95+
"datumIdNumber": 61,
96+
"latitudeStandardDeviation": 1.361,
97+
"longitudeStandardDeviation": 1.0236,
98+
"heightStandardDeviation": 2.4745,
99+
"baseStationId": "UNKNOWN",
100+
"differentialAge": "00:00:00",
101+
"solutionAge": "00:00:00",
102+
"satellitesTracked": 19,
103+
"satellitesInSolution": 19,
104+
"l1SatellitesInSolution": 19,
105+
"multiFrequencySatellitesInSolution": 19
106+
},
107+
"checksum": 1846082082,
108+
"expectedChecksum": 1696927800,
109+
"raw": "BESTPOSA,COM1,0,90.5,FINESTEERING,1949,403742.000,02000000,b1f6,32768;SOL_COMPUTED,SINGLE,51.11636937989,-114.03825348307,1064.533,-16.9000,WGS84,1.3610,1.0236,2.4745,UNKNOWN,0.000,0.000,19,19,19,19,00,06,00,33"
110+
}
111+
]
112+
```
113+
The command-line interface supports all .NET-compatible operating systems.
114+
## License
115+
This repository is licensed with the [MIT](LICENSE.txt) license.
116+
## Attribution
117+
This software uses third-party libraries or other resources that may be
118+
distributed under licenses different than the software. Please see the third-party notices included [here](THIRD-PARTY-NOTICES.txt).
119+
## References
120+
- [32-bit CRC](https://docs.novatel.com/OEM7/Content/Messages/32_Bit_CRC.htm)
121+
- [ASCII Messages](https://docs.novatel.com/OEM7/Content/Messages/ASCII.htm)
122+
- [Messages](https://docs.novatel.com/OEM7/Content/Messages/Messages.htm)
123+
- [NovAtel OEM6 Family Firmware Reference Manual](https://hexagondownloads.blob.core.windows.net/public/Novatel/assets/Documents/Manuals/om-20000129/om-20000129.pdf)
124+
- [NovAtel OEM7 GNSS Logs](https://docs.novatel.com/OEM7/Content/Logs/Core_Logs.htm)

0 commit comments

Comments
 (0)