SerialDevice C# Создание пользовательского стартового байта

Итак, я пытаюсь создать код С# для связи с последовательным устройством, подключенным к моему ПК. Но этому устройству требуется стартовый байт для связи с моим кодом. Я пытаюсь отправить его после создания класса SerialDevice и получаю его OutputStream, но устройство просто не отвечает.

В DeviceInformation этого устройства указано, что оно не может выполнить сопряжение. Я думаю, это потому, что класс DeviceInformation запрашивает связь с моим устройством, и он не отвечает, потому что ему не хватает стартового байта.

Есть ли способ создать собственное соединение с моим SerialDevice рядом с этим классом?

Или есть способ настроить начальный байт в объявлении класса SerialDevice?


person user3489204    schedule 19.05.2018    source источник


Ответы (2)


Стартовый байт: STX, 0x02.

Объясните больше, что вы сделали до сих пор, если вам нужна дополнительная помощь!

person random    schedule 19.05.2018
comment
Конечный байт — ETX 0x03. - person random; 20.05.2018

Устройство, которое я пытаюсь интегрировать, требует, чтобы начальный байт был следующим:

#define FINGERPRINT_STARTCODE 0xEF01

Это код C, который находится в документации устройства. Поскольку я пытаюсь перенести его на С#, я не могу изменить начальный байт, и поэтому устройство не отвечает на мой код С#.

Это я объявляю SerialDevice:

string aqs = SerialDevice.GetDeviceSelector("UART0");

            var dis = await DeviceInformation.FindAllAsync(aqs);

            UartPort = await SerialDevice.FromIdAsync(dis[0].Id);

            UartPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);   
            UartPort.ReadTimeout = TimeSpan.FromMilliseconds(1000);    
            UartPort.BaudRate = 9600;
            UartPort.Parity = SerialParity.None;
            UartPort.StopBits = SerialStopBitCount.One;
            UartPort.DataBits = 8;

            DataWriterObject = new DataWriter(UartPort.OutputStream);
            DataReaderObject = new DataReader(UartPort.InputStream);

И затем я пытаюсь отправить данные через DataWriter с моим стартовым байтом:

 private async Task<int> EnviarPacote(Package package)
    {
        int sum;
        DataWriterObject.WriteBytes(package.start);
        DataWriterObject.WriteByte(package.address[0]);
        DataWriterObject.WriteByte(package.address[1]);
        DataWriterObject.WriteByte(package.address[2]);
        DataWriterObject.WriteByte(package.address[3]);
        DataWriterObject.WriteInt16(package.type);
        int tamanho = 12;
        DataWriterObject.WriteInt32(tamanho);
        //DataWriterObject.WriteBytes(package.length);
        sum = tamanho + package.type;
        foreach (var dado in package.data)
        {
            DataWriterObject.WriteByte(dado);

        }
        DataWriterObject.WriteInt32(12);
        await UartPort.OutputStream.WriteAsync(DataWriterObject.DetachBuffer());
        return sum;
    }

И это просто не работает.

Думаю, мне следует что-то изменить в объявлении SerialDevice, чтобы класс знал, как взаимодействовать с моим устройством. Но я не знаю как.

person user3489204    schedule 20.05.2018
comment
0xEF01 не помещается в байт, требуется как минимум два. Итак, теперь вам нужно беспокоиться о порядке байтов. - person Ben Voigt; 20.05.2018
comment
Я заметил, что единственными вариантами порядка, которые я нашел, были LittleEndian и BigEndian. И, как я понял, ни то, ни другое не удовлетворяет мои потребности. @БенВойт - person user3489204; 21.05.2018