Я использую изящный проект nmeasharp , чтобы расшифровать поток NMEA, который я получаю через последовательный порт в c #. Все работает нормально из коробки, но я хочу отразить данные на IP-адрес, и я застреваю.
Пакет nmeasharp получает данные из любого потока, поэтому я использовал его для подключения к потоку последовательного порта, который работал нормально:
_nmeaParser.Source = serialport.BaseStream;
Теперь я хочу использовать событие последовательного порта для запуска своей собственной подпрограммы, где я могу перенаправить данные, поэтому я удалил указанное выше назначение и установил:
_serialport.DataReceived += new serialDataReceivedEventHandler(HandleNewSerialPortData);
Это событие инициируется, и метод вызывается. Все хорошо на этом этапе, но код nmeasharp все еще ищет поток для прослушивания, так как я больше не назначил его потоку.
В следующем методе мне нужно настроить поток на nmeasharp и записать все новые данные, которые последовательный порт только что получил, в этот поток.
private void HandleNewSerialPortData(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
this.serialDataAvailable(indata); // raise event that writes string to IP
if (_nmeaParser.Source == null) _nmeaParser.Source = new MemoryStream(840);
if (_nmeaParser.Source.CanWrite) _nmeaParser.Source.Write(ASCIIEncoding.UTF8.GetBytes(indata), 0, indata.Length);
// Unsuccessful attempts
// MemoryStream s = new MemoryStream(ASCIIEncoding.UTF8.GetBytes(indata));
// s.CopyTo(_nmeaParser.Source);
// sp.BaseStream.CopyTo(this.NmeaDataStreamFromSerialPort);
}
Я пробовал несколько вариантов записи в поток nmeasharp, но ни одна из них не работает. Тот, который показал обещание, каждый раз инициализировал новый поток, но это означало, что поток закрывался после каждого события DataReceived
, которое усекало и пропускало последовательные сообщения. (Неудачный) код был:
_nmeaParser.Source = new MemoryStream(ASCIIEncoding.UTF8.GetBytes(indata));
Я прочитал много учебных пособий, прочитал всю документацию по msdn, которую смог найти, и до сих пор не могу заставить эту простую вещь работать. Это имеет , чтобы быть легким, верно ...?
Редактировать : Я хотел бы сохранить запас кода nmeasharp, если это возможно, поскольку он работает нормально, и поскольку последовательные данные не всегда ASCII, хотел бы сохранить их двоичными (потоки), а не отправив ему данные в виде строки. Я могу исправить перенаправление IP для двоичного файла позже.
Спасибо.