From 161514195c212e83aa7b47ce7917f8f5474807fa Mon Sep 17 00:00:00 2001 From: ntruchsess Date: Sun, 2 Mar 2014 16:11:21 +0100 Subject: [PATCH] add ability to read link status to Enc28J60Ethernet.h --- utility/Enc28J60Network.cpp | 19 +++++++++++++++++++ utility/Enc28J60Network.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/utility/Enc28J60Network.cpp b/utility/Enc28J60Network.cpp index c8494bc..fbef88d 100644 --- a/utility/Enc28J60Network.cpp +++ b/utility/Enc28J60Network.cpp @@ -503,6 +503,19 @@ Enc28J60Network::phyWrite(uint8_t address, uint16_t data) } } +uint16_t +Enc28J60Network::phyRead(uint8_t address) +{ + writeReg(MIREGADR,address); + writeReg(MICMD, MICMD_MIIRD); + // wait until the PHY read completes + while(readReg(MISTAT) & MISTAT_BUSY){ + delayMicroseconds(15); + } //and MIRDH + writeReg(MICMD, 0); + return (readReg(MIRDL) | readReg(MIRDH) << 8); +} + void Enc28J60Network::clkout(uint8_t clk) { @@ -575,4 +588,10 @@ Enc28J60Network::powerOn() delay(50); } +bool +Enc28J60Network::linkStatus() +{ + return (phyRead(PHSTAT2) & 0x0400) > 0; +} + Enc28J60Network Enc28J60; diff --git a/utility/Enc28J60Network.h b/utility/Enc28J60Network.h index b3149cc..7346e47 100644 --- a/utility/Enc28J60Network.h +++ b/utility/Enc28J60Network.h @@ -64,6 +64,7 @@ class Enc28J60Network : public MemoryPool static void writeReg(uint8_t address, uint8_t data); static void writeRegPair(uint8_t address, uint16_t data); static void phyWrite(uint8_t address, uint16_t data); + static uint16_t phyRead(uint8_t address); static void clkout(uint8_t clk); friend void enc28J60_mempool_block_move_callback(memaddress,memaddress,memaddress); @@ -73,6 +74,7 @@ class Enc28J60Network : public MemoryPool uint8_t getrev(void); void powerOn(); void powerOff(); + bool linkStatus(); static void init(uint8_t* macaddr); static memhandle receivePacket();