OpenThread otJoinerStart никогда не выходит - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь интегрировать дочерний элемент OpenThread с существующим приложением на TI CC2652R1, и у меня возникают проблемы при попытке присоединиться / создать сеть Thread. В настоящее время у меня есть внешнее событие, которое вызывает функцию, чтобы присоединиться и запустить OpenThread. Ниже приведен фрагмент этой функции, относящийся к объединению:

    bool is_commissioned = otDatasetIsCommissioned(OtStack_instance);
    otJoinerState joiner_state = otJoinerGetState(OtStack_instance);
    if(!is_commissioned && (OT_JOINER_STATE_IDLE == joiner_state)){
        otError error = otIp6SetEnabled(OtStack_instance, true);
        error = otThreadSetEnabled(OtStack_instance, true);
        error = otJoinerStart(OtStack_instance, "PSK", NULL, "Company", "Device", "0.0.0", NULL, joiner_callback, NULL);
    }

otJoinerStart, кажется, никогда не разрешается, потому что обратный вызов joiner никогда не вызывается, а дополнительные вызовы моей функции присоединения показывают, что состояние joiner равно OT_JOINER_STATE_DISCOVER и экземпляр OpenThread говорит, что он инициализирован. Есть ли способ установить время ожидания обратного вызова? Я просмотрел документацию и не смог узнать, как установлен тайм-аут соединения.

Спасибо

1 Ответ

0 голосов
/ 29 апреля 2020

Присоединение устройства Thread к сети Thread предполагает, что у вас запущена сеть Thread, и есть активный уполномоченный с присоединяющимися EUI64 и PSK. Убедитесь, что они настроены, прежде чем пытаться вызвать эту функцию для присоединения. Также полезно иметь анализатор, работающий на канале сети Thread, чтобы убедиться, что комиссар или маршрутизатор присоединения правильно реагируют.

Присоединение к потоку выполняется с активным сканированием всех доступных каналов в IEEE 802.15. 4 стр. 0. Время отправки запроса на присоединение и время ожидания присоединения на каждом канале настраиваются не сразу. Однако эти активные сканирования обычно завершаются в течение нескольких секунд. Ваш колбэк должен быть вызван с условием сбоя соединения, если через 5 секунд не будет доступных роутеров соединения.

Примеры в репозитории OpenThread github написаны в стиле nortos. Любой код приложения запускается в тасклете, а основной l oop вызывает только две функции; тасклеты процесса и драйверы процесса. В TI SDK мы используем TI-RTOS, и вы, похоже, основали свой код на этих примерах. В целом OtStack_Task будет обрабатывать обработку OpenThread и интерфейса драйвера платформы; но могут возникнуть тупики в многопоточной системе.

Вы можете использовать ROV в CCS или IAR для проверки состояния ядра и объектов RTOS. В CCS с активным сеансом отладки выберите; Tools >> Runtime Object View. Затем проверьте, не блокируется ли задача стека в семафоре API. Или, если задача приложения загружает процессор. Это может быть связано с непарной блокировкой / разблокировкой на семафоре API, или задача приложения может быть занята.

Сразу же я не вижу ничего плохого в опубликованном фрагменте кода.

...