Arduino и Ethernet Shield. Получение MAC-адреса

kolobanovrn
Offline
Зарегистрирован: 10.01.2018

Всем добрый вечер.
Есть задача получить МАС-адрес подключенного ПК или любого другого устройства к Ethernet shield w5200. 
Есть у кого какие идеи по тому, как получить кадр на ардуино и разложить его на биты, или уже сразу вытащить МАС-адрес из полученного фрейма?

sadman41
Offline
Зарегистрирован: 19.10.2016

Есть идеи. Datasheet, page 16: Socket n Destination Hardware Address. Примеры readReg() тащатся с визнетовских дров на гитхабе.

kolobanovrn
Offline
Зарегистрирован: 10.01.2018

Как найти там такие примеры?
Если не сложно, скинете ссылку? 

sadman41
Offline
Зарегистрирован: 19.10.2016

Не знаю, чем вам это поможет, но :

1) Отдельный драйвер - https://github.com/Wiznet/W5200_Arduino_Ethernet_Lib/blob/master/Avr/w5100.cpp ;

2) Общий драйвер - https://github.com/Wiznet/WIZ_Ethernet_Library/blob/master/Arduino%20IDE%201.5.x/Ethernet/src/utility/w5200.cpp .

Ищите функцию uint16_t W5100Class::read(uint16_t _addr, uint8_t *_buf, uint16_t _len)

Адрес из даташита, номер сокета из клиента

Но, думаю, будет проще имплементировать в существующий драйвер что-то типа:


EthernetClient::remoteMAC() {
  // uint8_t mac_address[6];
  if (_sock == MAX_SOCK_NUM) return SnSR::CLOSED;
  ...
  W5100.read(..., mac_address, sizeof(mac_address));
  ...
  return mac_address;
}

 

 

kolobanovrn
Offline
Зарегистрирован: 10.01.2018

Имплементировать в библиотеку прям? 

sadman41
Offline
Зарегистрирован: 19.10.2016

Номера сокета текущего соединеия вам напрямую не получить (private: .. uint8_t _sock;), а без номера сокета вы не вычислите адрес, по которому MAC читать.

В любом случае библиотеку придется модифицировать: или номер сокета научить ее отдавать или сразу в готовую инфраструктуру бахнуть свою функцию.

kolobanovrn
Offline
Зарегистрирован: 10.01.2018

Которую вы выше написали? 

sadman41
Offline
Зарегистрирован: 19.10.2016

Которую вы будете использовать. Стандартная Etheret.h из Ардуины покоцана, там нет фрагментов для других чипов, кроме как для W5100.

А какую из этих вы выберите и будете модифицировать - решать вам, если будете делать это сами, или стороннему исполнителю.

kolobanovrn
Offline
Зарегистрирован: 10.01.2018

Все равно никак не могу понять. 

Как пример, беру ту, что вы написали выше, и вставляю в библиотеку w5200

А дальше? 

sadman41
Offline
Зарегистрирован: 19.10.2016

Э... вы неправильно поняли. В стандартной библиотеке нет такого функционала. Его надо дописать. ВВодные данные я вам дал, но полноценная реализация требует времени и тестов на железе. Этим вы можете заняться сами или договориться с кем-то еще. За пять-десять минут такое не сделать.