Перейти к содержанию
    

LwIP link up/down

Приветствую.

Есть ли какое-то событие/семафор/др. при срабатывании link up/down?

Хочу сделать, чтобы задача спала, пока нет линка или засыпала, когда пропал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, doom13 said:

Хочу сделать, чтобы задача спала, пока нет линка или засыпала, когда пропал.

Плохо, помню, но в LwIP 1.4.x делал низкоприоритетную задачу с поллингом в 500 мс. Она стучалась к фитеру, и запрашивала статус кабеля. Раз так сделал, то, видимо, не нашёл событя.

Хотя, стоп! А стэк, вроде и не должен такое событие давать. Ведь о кабеле только PHY может сказать. А у неё прерываний нет... Или вы не о включенном/отключенном кабеле?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, haker_fox said:

Плохо, помню, но в LwIP 1.4.x делал низкоприоритетную задачу с поллингом в 500 мс. Она стучалась к фитеру, и запрашивала статус кабеля. Раз так сделал, то, видимо, не нашёл событя. 

Спасибо, с этим понятно. Думал так делать, но пока пытаюсь понять. есть ли стандартная опция/возможность.

8 minutes ago, haker_fox said:

Хотя, стоп! А стэк, вроде и не должен такое событие давать. Ведь о кабеле только PHY может сказать. А у неё прерываний нет... Или вы не о включенном/отключенном кабеле?

Если кабель дёргать то сообщения в stdout кидает (если не ошибаюсь), поэтому решил, что оно само мониторит состояние сети и возможно есть какая-то возможность привязаться к данному событию.

//netif.h
#if LWIP_NETIF_LINK_CALLBACK
  /** This function is called when the netif link is set to up or down
   */
  netif_status_callback_fn link_callback;
#endif /* LWIP_NETIF_LINK_CALLBACK */
  
#if LWIP_NETIF_LINK_CALLBACK
void netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback);
#endif /* LWIP_NETIF_LINK_CALLBACK */

Такое вот нахожу

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 hours ago, haker_fox said:

Ведь о кабеле только PHY может сказать. А у неё прерываний нет...

Вот как раз у PHY обычно есть прерывания для события изменения состояния линка (например у KSZ8091 это регистр 0x1B).

Заводите выход прерывания от PHY на ногу контроллера, ловите прерыание, шлёте семафор и отрабатываете callback функцию LwIP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, ksv198 said:

Вот как раз у PHY обычно есть прерывания для события изменения состояния линка

Возможно. Видимо просмотрел. Хотя мы использовали LAN8720, возможно у неё тоже есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, haker_fox said:

Возможно. 

Встречается косяк на платах с сетевыми сэмплами в инете - нет проводка с выхода прерывания физики на мк. посему в примерах крутят поллинг так-же... не у всех хватает терпения перерыть регистры физики в ДШ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, kolobok0 said:

не у всех хватает терпения перерыть регистры физики в ДШ.

Точно, хотя в моём случае мне дали готовое железо, и, как всегда, торопили со сроками. Сейчас посмотрел на даташит Lan8720, действительно увидел прерывания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...