added dict for base station reports
This commit is contained in:
parent
e213afbab9
commit
aceda066ce
66
AIS/bsmd.AIS2Service/AIS_BaseStation.cs
Normal file
66
AIS/bsmd.AIS2Service/AIS_BaseStation.cs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace bsmd.AIS2Service
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Simple container for BaseStation Reports (Type 4). This class just exists to decouple from
|
||||||
|
/// the actual AIS messages.
|
||||||
|
/// </summary>
|
||||||
|
internal class AIS_BaseStation
|
||||||
|
{
|
||||||
|
#region Fields
|
||||||
|
|
||||||
|
private readonly int _mmsi;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Construction
|
||||||
|
|
||||||
|
public AIS_BaseStation(int mmsi)
|
||||||
|
{
|
||||||
|
_mmsi = mmsi;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Properties
|
||||||
|
|
||||||
|
public int MMSI { get { return _mmsi; } }
|
||||||
|
|
||||||
|
public DateTime? LastTimeReference { get; private set; }
|
||||||
|
|
||||||
|
public bool? Accuracy { get; private set; }
|
||||||
|
|
||||||
|
public double? Latitude { get; private set; }
|
||||||
|
|
||||||
|
public double? Longitude { get; private set; }
|
||||||
|
|
||||||
|
public string EPFD { get; private set; }
|
||||||
|
|
||||||
|
public bool? RAIM { get; private set; }
|
||||||
|
|
||||||
|
public uint Radio { get; private set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region internal methods
|
||||||
|
|
||||||
|
internal void Update(AIS_BaseStationReport rep)
|
||||||
|
{
|
||||||
|
this.LastTimeReference = rep.UTCTimestamp;
|
||||||
|
this.Accuracy = rep.Accuracy;
|
||||||
|
this.Latitude = rep.Latitude;
|
||||||
|
this.Longitude = rep.Longitude;
|
||||||
|
if (Lookup.DeviceTypes.ContainsKey((int)rep.EPFD))
|
||||||
|
this.EPFD = Lookup.DeviceTypes[(int)rep.EPFD];
|
||||||
|
else
|
||||||
|
this.EPFD = "";
|
||||||
|
this.RAIM = rep.Raim;
|
||||||
|
this.Radio = rep.Radio;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,34 +1,17 @@
|
|||||||
using log4net;
|
// Copyright (c) 2022 - schick Informatik
|
||||||
|
// bsmd.AIS2Service [AIS_BaseStationReport.cs]: Daniel Schick
|
||||||
|
// Description: Implementation of an AIS Base Station report incl. decoding
|
||||||
|
//
|
||||||
|
|
||||||
|
using log4net;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.Remoting.Metadata.W3cXsd2001;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace bsmd.AIS2Service
|
namespace bsmd.AIS2Service
|
||||||
{
|
{
|
||||||
internal class AIS_BaseStationReport : AISClass
|
internal class AIS_BaseStationReport : AISClass
|
||||||
{
|
{
|
||||||
|
|
||||||
#region enums
|
|
||||||
|
|
||||||
public enum EPFDType
|
|
||||||
{
|
|
||||||
UNDEFINED,
|
|
||||||
GPS,
|
|
||||||
GLONASS,
|
|
||||||
COMBINED_GPS_GLONASS,
|
|
||||||
LORAN_C,
|
|
||||||
CHAYKA,
|
|
||||||
INTEGR_NAV_SYSTEM,
|
|
||||||
SURVEYED,
|
|
||||||
GALILEO
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region fields
|
#region fields
|
||||||
|
|
||||||
private uint _repeatIndicator;
|
private uint _repeatIndicator;
|
||||||
@ -36,7 +19,7 @@ namespace bsmd.AIS2Service
|
|||||||
private bool _accuracy;
|
private bool _accuracy;
|
||||||
private int _latitude;
|
private int _latitude;
|
||||||
private int _longitude;
|
private int _longitude;
|
||||||
private EPFDType _epfdType;
|
private int _epfdType;
|
||||||
bool _raim;
|
bool _raim;
|
||||||
private uint _radio;
|
private uint _radio;
|
||||||
|
|
||||||
@ -56,7 +39,7 @@ namespace bsmd.AIS2Service
|
|||||||
|
|
||||||
public int Longitude { get { return _longitude; } }
|
public int Longitude { get { return _longitude; } }
|
||||||
|
|
||||||
public EPFDType EPFD { get { return _epfdType; } }
|
public int EPFD { get { return _epfdType; } }
|
||||||
|
|
||||||
public bool Raim { get { return _raim; } }
|
public bool Raim { get { return _raim; } }
|
||||||
|
|
||||||
@ -91,8 +74,7 @@ namespace bsmd.AIS2Service
|
|||||||
_accuracy = GetInt(bits, 78, 78) == 1;
|
_accuracy = GetInt(bits, 78, 78) == 1;
|
||||||
_longitude = GetInt(bits, 79, 106);
|
_longitude = GetInt(bits, 79, 106);
|
||||||
_latitude = GetInt(bits, 107, 133);
|
_latitude = GetInt(bits, 107, 133);
|
||||||
int epfd = GetInt(bits, 134, 137);
|
_epfdType = GetInt(bits, 134, 137);
|
||||||
_epfdType = (EPFDType) epfd;
|
|
||||||
_raim = GetInt(bits, 148, 148) == 1;
|
_raim = GetInt(bits, 148, 148) == 1;
|
||||||
_radio = GetUInt(bits, 149, 167);
|
_radio = GetUInt(bits, 149, 167);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,8 @@
|
|||||||
|
// Copyright (c) 2022 - schick Informatik
|
||||||
|
// bsmd.AIS2Service [Lookup.cs]: Daniel Schick
|
||||||
|
// Description: static lookups
|
||||||
|
//
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace bsmd.AIS2Service
|
namespace bsmd.AIS2Service
|
||||||
|
|||||||
@ -17,7 +17,7 @@ namespace bsmd.AIS2Service
|
|||||||
{
|
{
|
||||||
AISManager.Start();
|
AISManager.Start();
|
||||||
// TODO wait some
|
// TODO wait some
|
||||||
Thread.Sleep(720000);
|
Thread.Sleep(180000);
|
||||||
// Test finish..
|
// Test finish..
|
||||||
AISManager.Stop();
|
AISManager.Stop();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,11 @@
|
|||||||
using System;
|
// Copyright (c) 2022 - schick Informatik
|
||||||
|
// bsmd.AIS2Service [SitRep.cs]: Daniel Schick
|
||||||
|
// Description: Current, memory-mapped situation of what the receiver "sees"
|
||||||
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
using log4net;
|
using log4net;
|
||||||
@ -25,6 +27,7 @@ namespace bsmd.AIS2Service
|
|||||||
private static readonly ILog _log = LogManager.GetLogger(typeof(SitRep));
|
private static readonly ILog _log = LogManager.GetLogger(typeof(SitRep));
|
||||||
private readonly ConcurrentQueue<AISClass> _inputQueue;
|
private readonly ConcurrentQueue<AISClass> _inputQueue;
|
||||||
private readonly ConcurrentDictionary<int, AIS_Target> _sitRep;
|
private readonly ConcurrentDictionary<int, AIS_Target> _sitRep;
|
||||||
|
private readonly Dictionary<int, AIS_BaseStation> _baseStations = new Dictionary<int, AIS_BaseStation>();
|
||||||
private readonly ConcurrentQueue<AIS_Target> _dbQueue;
|
private readonly ConcurrentQueue<AIS_Target> _dbQueue;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -38,6 +41,15 @@ namespace bsmd.AIS2Service
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Properties
|
||||||
|
|
||||||
|
public Dictionary<int, AIS_BaseStation> BaseStations
|
||||||
|
{
|
||||||
|
get { return _baseStations; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region mainloop thread
|
#region mainloop thread
|
||||||
|
|
||||||
private void ReadMessages()
|
private void ReadMessages()
|
||||||
@ -115,6 +127,17 @@ namespace bsmd.AIS2Service
|
|||||||
_dbQueue.Enqueue(_sitRep[bPosExt.MMSI]);
|
_dbQueue.Enqueue(_sitRep[bPosExt.MMSI]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case AISClass.AISType.BASE_STATION_REPORT:
|
||||||
|
{
|
||||||
|
AIS_BaseStationReport bsr = aisMessage as AIS_BaseStationReport;
|
||||||
|
if(!_baseStations.ContainsKey(bsr.MMSI))
|
||||||
|
{
|
||||||
|
AIS_BaseStation baseStation = new AIS_BaseStation(bsr.MMSI);
|
||||||
|
_baseStations[bsr.MMSI] = baseStation;
|
||||||
|
}
|
||||||
|
_baseStations[bsr.MMSI].Update(bsr);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
_log.InfoFormat("currently discarding AIS message {0}", aisMessage.MessageType);
|
_log.InfoFormat("currently discarding AIS message {0}", aisMessage.MessageType);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -94,6 +94,7 @@
|
|||||||
<Compile Include="AISController.cs" />
|
<Compile Include="AISController.cs" />
|
||||||
<Compile Include="AISDecoder.cs" />
|
<Compile Include="AISDecoder.cs" />
|
||||||
<Compile Include="AISManager.cs" />
|
<Compile Include="AISManager.cs" />
|
||||||
|
<Compile Include="AIS_BaseStation.cs" />
|
||||||
<Compile Include="AIS_BaseStationReport.cs" />
|
<Compile Include="AIS_BaseStationReport.cs" />
|
||||||
<Compile Include="AIS_ClassB.cs" />
|
<Compile Include="AIS_ClassB.cs" />
|
||||||
<Compile Include="AIS_ClassBExt.cs" />
|
<Compile Include="AIS_ClassBExt.cs" />
|
||||||
@ -124,6 +125,7 @@
|
|||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
||||||
|
<None Include="bsmd.AIS2Service.licenseheader" />
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
<None Include="Properties\Settings.settings">
|
<None Include="Properties\Settings.settings">
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
|||||||
16
AIS/bsmd.AIS2Service/bsmd.AIS2Service.licenseheader
Normal file
16
AIS/bsmd.AIS2Service/bsmd.AIS2Service.licenseheader
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
extensions: designer.cs generated.cs
|
||||||
|
extensions: .cs .cpp .h
|
||||||
|
// Copyright (c) %CreationYear% - schick Informatik
|
||||||
|
// %Namespace% [%FileName%]: %UserDisplayName%
|
||||||
|
// Description:
|
||||||
|
//
|
||||||
|
extensions: .aspx .ascx
|
||||||
|
<%--
|
||||||
|
Copyright (c) 2022- schick Informatik
|
||||||
|
--%>
|
||||||
|
extensions: .vb
|
||||||
|
'Copyright (c) 2022- schick Informatik
|
||||||
|
extensions: .xml .config .xsd
|
||||||
|
<!--
|
||||||
|
Copyright (c) 2022- schick Informatik
|
||||||
|
-->
|
||||||
Loading…
Reference in New Issue
Block a user