Разница между unsigned short и unsigned char в коммуникации LoRa

Я работаю над установлением лора-связи между шлюзом (шапка RPI3 + LoRa) и узлом (шапка RPi3 + LoRa). Поскольку я хотел бы установить канал связи без TTN, я попробовал следующий пример для настройки связи между ними: https://github.com/dragino/rpi-lora-tranceiver/blob/master/dragino_lora_app/main.c

Код хорошо работает как на стороне отправителя, так и на стороне получателя. Это означает, что на стороне отправителя отправляемое сообщение выводится на консоль. А на стороне получателя отображается полученное сообщение.

Это хорошо работает для коротких сообщений. Однако я хотел бы отправить сообщение длиной 600 байт. Чтобы отправить это длинное сообщение, я отредактировал typedef аргумента writeBuf() следующим образом:

static void writeBuf(byte addr, byte *value, unsigned short len) {

Я сделал это изменение, потому что byte len ограничивал отправку сообщений до 255 (из-за диапазона неподписанных символов, который составляет 0-255). И поэтому мне нужно было расширить этот диапазон, чтобы я мог отправлять более длинные сообщения. После внесения этого изменения сообщение в консоли не печатается. Цикл for внутри writeBuf() идет от 0-n, а затем от 99-n непрерывно, при этом сообщение об отправке не печатается на консоли. Следовательно, получатель никогда не получает никакого сообщения. Я понимаю разницу между unsigned short и unsigned char. Однако я не могу понять разницу между unsigned short и unsigned char в этом контексте. Любая помощь/рекомендации будут высоко оценены. Я также хотел бы знать, делаю ли я правильные изменения или смотрю в правильном направлении или нет.

Спасибо


person Tina S    schedule 09.01.2019    source источник
comment
Тот факт, что вы изменили тип параметра функции на тот, который может принимать большие значения, не означает, что реализация функции работает с большими значениями.   -  person John Bollinger    schedule 09.01.2019
comment
Но обычно мы отвечаем на вопросы только о коде, представленном здесь в вопросе, желательно в виде минимальный воспроизводимый пример. Гиперссылка на внешний репозиторий неадекватна, потому что контекст вопроса теряется, как только код изменяется или удаляется или что-то еще.   -  person John Bollinger    schedule 09.01.2019
comment
Ответ на предполагаемую основную проблему, которую пытается решить OP: Нет, не пытайтесь отправлять более длинные сообщения; вместо этого разделите длинное сообщение на короткие. Самый простой вариант — использовать символ для обозначения конца сообщения. На принимающей стороне объединяйте сообщения, а затем разделяйте их по этому символу. Часто для этого используется перевод строки/новая строка ('\n'), но это полностью на ваше усмотрение.   -  person Nominal Animal    schedule 09.01.2019
comment
Использование сети ограничено. Таким образом, вам не разрешено отправлять много сообщений подряд. Если ваши данные не помещаются в 51 байт каждые несколько минут, возможно, вы используете не ту сеть. Подумайте о WLAN или мобильной связи.   -  person Xypron    schedule 10.01.2019
comment
Детали реализации, тип переменных, будь то unsigned short или unsigned char, не связаны с коммуникацией LoRa.   -  person KamilCuk    schedule 10.01.2019


Ответы (1)


Для европейского диапазона 863–870 МГц размер пакета приложения варьируется от 51 байта для самой низкой скорости передачи данных до 222 байтов для более высокой скорости. См. https://www.thethingsnetwork.org/forum/t/limitations-data-rate-packet-size-30-seconds-uplink-and-10-messages-downlink-per-day-fair-access-policy/1300

Вы определенно не можете иметь более 255 байтов в сообщении, включая байты заголовка.

person Xypron    schedule 10.01.2019