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.
Dependents: oldheating gps motorhome heating
Diff: link/link.c
- Revision:
- 61:aad055f1b0d1
- Parent:
- 59:e0e556c8bd46
- Child:
- 63:9d67a5eaa93c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/link/link.c Thu Jan 11 17:38:21 2018 +0000
@@ -0,0 +1,91 @@
+#include <stdbool.h>
+
+#include "peripherals.h"
+#include "log.h"
+#include "eth.h"
+#include "action.h"
+#include "mac.h"
+#include "net.h"
+#include "link.h"
+#include "nic.h"
+
+#define phyLinkNeg_MASK 1UL << 25 //P1.25 input
+#define phySpeedNeg_MASK 1UL << 26 //P1.26 input
+#define ethLedGrL_MASK 1UL << 31 //P1.31 ==> p20 output
+#define ethLedYeR_MASK 1UL << 30 //P1.30 ==> p19 output
+
+
+bool LinkTrace = false;
+
+static int count = 0;
+static void lights()
+{
+ if (count)
+ {
+ LPC_GPIO1->FIOCLR = ethLedGrL_MASK;
+ LPC_GPIO1->FIOCLR = ethLedYeR_MASK;
+ count--;
+ }
+ else
+ {
+ if (LPC_GPIO1->FIOPIN & phyLinkNeg_MASK) LPC_GPIO1->FIOCLR = ethLedGrL_MASK;
+ else LPC_GPIO1->FIOSET = ethLedGrL_MASK;
+ if (LPC_GPIO1->FIOPIN & phySpeedNeg_MASK) LPC_GPIO1->FIOCLR = ethLedYeR_MASK;
+ else LPC_GPIO1->FIOSET = ethLedYeR_MASK;
+ }
+}
+static void lightsBlink()
+{
+ count = 500; //==50ms at 100ns per scan
+}
+void LinkMain()
+{
+ //Flash lights
+ lights();
+
+ if (!NicLinkIsUp()) return;
+
+ //Handle packets
+ int sizeRx;
+ int sizeTx;
+ char* pRx = NicGetReceivedPacketOrNull(&sizeRx);
+ char* pTx = NicGetTransmitPacketOrNull(&sizeTx);
+
+ int action = DO_NOTHING;
+
+ NetTraceHostResetMatched();
+
+ if (pRx)
+ {
+ lightsBlink();
+
+ if (pTx) action = EthHandlePacket(pRx, sizeRx, pTx, &sizeTx);
+
+ NicReleaseReceivedPacket();
+ }
+ if (pTx)
+ {
+ if (!action) action = EthPollForPacketToSend(pTx, &sizeTx);
+
+ if ( action)
+ {
+ lightsBlink();
+ NicSendTransmitPacket(sizeTx);
+ }
+ }
+}
+
+void LinkInit()
+{
+ LPC_GPIO1->FIODIR |= ethLedGrL_MASK; //Set the direction to 1 == output
+ LPC_GPIO1->FIODIR |= ethLedYeR_MASK; //Set the direction to 1 == output
+ NicInit();
+ NicLinkAddress(MacLocal);
+ if (LinkTrace)
+ {
+ Log("\r\n");
+ LogTime("MAC: ");
+ MacLog(MacLocal);
+ Log("\r\n");
+ }
+}
\ No newline at end of file