From a0562e3459a9e179224b2fea7a677ab546d6901b Mon Sep 17 00:00:00 2001 From: kimikage Date: Fri, 28 Jan 2011 17:51:32 +0900 Subject: [PATCH] =?utf8?q?byte=E5=88=97=E5=87=A6=E7=90=86=E3=82=92OctetStr?= =?utf8?q?ing=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AB=E9=9B=86=E7=B4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Yubeshi/Nmea/Parser.cs | 14 ++++------- Yubeshi/OctetString.cs | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ Yubeshi/Parser.cs | 25 +++++--------------- Yubeshi/Ubx/Parser.cs | 23 ++++++------------ 4 files changed, 81 insertions(+), 44 deletions(-) diff --git a/Yubeshi/Nmea/Parser.cs b/Yubeshi/Nmea/Parser.cs index 406845c..c24ca2b 100755 --- a/Yubeshi/Nmea/Parser.cs +++ b/Yubeshi/Nmea/Parser.cs @@ -61,7 +61,10 @@ namespace Yubeshi.Nmea return false; } } - + else if (sentence[1] == 'P') + { + + } return false; } @@ -72,14 +75,7 @@ namespace Yubeshi.Nmea public static int SearchSyncFrom(byte[] input, int index) { - for (int i = index; i < input.Length; ++i) - { - if (input[i] == '$') - { - return i; - } - } - return -1; + return OctetString.IndexOf(input, (byte)'$', index); } #endregion diff --git a/Yubeshi/OctetString.cs b/Yubeshi/OctetString.cs index fe5acd3..593941b 100755 --- a/Yubeshi/OctetString.cs +++ b/Yubeshi/OctetString.cs @@ -130,6 +130,69 @@ namespace Yubeshi } return s.ToString(); } + + public static byte[] Substring(byte[] source, int start) + { + return Substring(source, start, source.Length - start); + } + + public static byte[] Substring(byte[] source, int start, int length) + { + byte[] sub = new byte[length]; + Array.Copy(source, start, sub, 0, length); + return sub; + } + + public static byte[] Concat(byte[] first, byte[] second) + { + byte[] joined = new byte[first.Length + second.Length]; + Array.Copy(first, joined, first.Length); + Array.Copy(second, 0, joined, first.Length, second.Length); + return joined; + } + + public static int IndexOf(byte[] field, byte target) + { + return IndexOf(field, target, 0); + } + + public static int IndexOf(byte[] field, byte target, int startIndex) + { + for (int i = startIndex; i < field.Length; ++i) + { + if (field[i] == target) + { + return i; + } + } + return -1; + } + + public static int IndexOf(byte[] field, byte[] target) + { + return IndexOf(field, target, 0); + } + + public static int IndexOf(byte[] field, byte[] target, int startIndex) + { + for (int i = startIndex; i <= field.Length - target.Length; ++i) + { + int j; + for (j = 0; j < target.Length; ++j) + { + if (field[i + j] != target[j]) + { + break; + } + } + if (j == target.Length) + { + return i; + } + } + return -1; + } + #endregion } } diff --git a/Yubeshi/Parser.cs b/Yubeshi/Parser.cs index 07ee34d..beb115a 100755 --- a/Yubeshi/Parser.cs +++ b/Yubeshi/Parser.cs @@ -77,7 +77,7 @@ namespace Yubeshi public void Push(byte[] fragment) { - Join(fragment); + Concat(fragment); ParseBuffer(functions); } @@ -119,12 +119,9 @@ namespace Yubeshi #region protected methods - protected void Join(byte[] fragment) + protected void Concat(byte[] fragment) { - byte[] joined = new byte[buffer.Length + fragment.Length]; - Array.Copy(buffer, joined, buffer.Length); - Array.Copy(fragment, 0, joined, buffer.Length, fragment.Length); - buffer = joined; + buffer = OctetString.Concat(buffer, fragment); } protected void ParseBuffer( @@ -161,7 +158,7 @@ namespace Yubeshi } found.Sort(sorter); SyncIndex first = found[0]; - byte[] synced = Substring(buffer, first.Index); + byte[] synced = OctetString.Substring(buffer, first.Index); UnknownPacket packet = null; if (functions[first.Protocol].TryParse(synced, out packet)) { @@ -170,7 +167,7 @@ namespace Yubeshi packets.Add(new UnknownPacket(buffer, first.Index)); } packets.Add(packet); - buffer = Substring(synced, packet.Raw.Length); + buffer = OctetString.Substring(synced, packet.Raw.Length); ParseBuffer(functions); return; } @@ -179,17 +176,7 @@ namespace Yubeshi } } - private byte[] Substring(byte[] source, int start) - { - return Substring(source, start, source.Length - start); - } - - private byte[] Substring(byte[] source, int start, int length) - { - byte[] sub = new byte[length]; - Array.Copy(source, start, sub, 0, length); - return sub; - } + #endregion diff --git a/Yubeshi/Ubx/Parser.cs b/Yubeshi/Ubx/Parser.cs index 4b009c1..8b9d7fc 100755 --- a/Yubeshi/Ubx/Parser.cs +++ b/Yubeshi/Ubx/Parser.cs @@ -33,16 +33,21 @@ namespace Yubeshi.Ubx parsers = new Dictionary(); parsers[Packet.MessageID.NavClock] = NavClock.TryParse; + parsers[Packet.MessageID.NavDop] = NavDop.TryParse; parsers[Packet.MessageID.NavPosEcef] = NavPosEcef.TryParse; + parsers[Packet.MessageID.NavPosLlh] = NavPosLlh.TryParse; parsers[Packet.MessageID.NavSol] = NavSol.TryParse; parsers[Packet.MessageID.NavStatus] = NavStatus.TryParse; + parsers[Packet.MessageID.NavTimeGps] = NavTimeGps.TryParse; + parsers[Packet.MessageID.NavVelEcef] = NavVelEcef.TryParse; + parsers[Packet.MessageID.NavVelNed] = NavVelNed.TryParse; } #endregion #region public method public new void Push(byte[] fragment) { - Join(fragment); + Concat(fragment); ParseBuffer(functions); } @@ -85,21 +90,7 @@ namespace Yubeshi.Ubx public static int SearchSyncFrom(byte[] input, int index) { - for (int i = 0; i < input.Length; ++i) - { - if (input[i] == Packet.SyncCharacter1) - { - if (i + 1 == input.Length) - { - return i; - } - if (input[i + 1] == Packet.SyncCharacter2) - { - return i; - } - } - } - return -1; + return OctetString.IndexOf(input, Packet.SyncCharacters, index); } #endregion -- 2.11.0