Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of WIZnetInterface by
Diff: arch/ext/W5500.cpp
- Revision:
- 8:4c02de1dbf3a
- Parent:
- 4:4930f81bbe98
- Child:
- 10:0d17643de5fd
--- a/arch/ext/W5500.cpp Mon Jun 15 23:43:56 2015 +0000
+++ b/arch/ext/W5500.cpp Tue Jun 16 11:11:11 2015 +0900
@@ -16,7 +16,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "eth_arch.h"
-#ifdef USE_W5500
+#if not defined(TARGET_WIZwiki_W7500)
#include "mbed.h"
#include "mbed_debug.h"
@@ -82,15 +82,6 @@
return true;
}
-bool WIZnet_Chip::linkstatus()
-{
- if ( (reg_rd<uint8_t>(PHYCFGR) & 0x01) != 0x01 )
- return false;
-
- return true;
-}
-
-
bool WIZnet_Chip::setProtocol(int socket, Protocol p)
{
if (socket < 0) {
@@ -336,6 +327,40 @@
return port;
}
+bool WIZnet_Chip::link(int wait_time_ms)
+{
+ Timer t;
+ t.reset();
+ t.start();
+ while(1) {
+ int is_link = ethernet_link();
+ printf("is_link:%d\r\n", is_link);
+ if (is_link) {
+ return true;
+ }
+ if (wait_time_ms != (-1) && t.read_ms() > wait_time_ms) {
+ break;
+ }
+ }
+ return 0;
+}
+
+void WIZnet_Chip::set_link(PHYMode phymode)
+{
+ int speed = -1;
+ int duplex = 0;
+
+ switch(phymode) {
+ case AutoNegotiate : speed = -1; duplex = 0; break;
+ case HalfDuplex10 : speed = 0; duplex = 0; break;
+ case FullDuplex10 : speed = 0; duplex = 1; break;
+ case HalfDuplex100 : speed = 1; duplex = 0; break;
+ case FullDuplex100 : speed = 1; duplex = 1; break;
+ }
+
+ ethernet_set_link(speed, duplex);
+}
+
void WIZnet_Chip::scmd(int socket, Command cmd)
{
sreg<uint8_t>(socket, Sn_CR, cmd);
@@ -446,5 +471,22 @@
debug("\n");
}
+int ethernet_link(void) {
+ return (reg_rd<uint8_t>(PHYCFGR) & 0x01);
+}
+
+void ethernet_set_link(int speed, int duplex) {
+ uint32_t val=0;
+ if((speed < 0) || (speed > 1)) {
+ val = (PHYCFGR_OPMDC_ALL)<<3;
+ } else {
+ val = (((speed&0x01)<<1)+ (duplex&0x01))<<3;
+ }
+ reg_wr<uint32_t>(PHYCFGR, PHYCFGR_RST&(PHYCFGR_OPMD|val));
+ wait(0.2);
+ reg_wr<uint32_t>(PHYCFGR, (~PHYCFGR_RST)|(PHYCFGR_OPMD|val));
+ wait(0.2);
+}
+
#endif
