I messed up the merge, so pushing it over to another repo so I don't lose it. Will tidy up and remove later
Dependencies: BufferedSerial FatFileSystemCpp mbed
Revision 73:89f799500055, committed 2022-02-10
- Comitter:
- JamieB
- Date:
- Thu Feb 10 10:25:10 2022 +0000
- Parent:
- 72:da2f1df6a50d
- Child:
- 74:a1bf25282cb1
- Commit message:
- Changed FreeD UDP port to be configurable between FreeD or VIPS output
Changed in this revision
LTCApp.h | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/LTCApp.h Thu Feb 10 09:24:29 2022 +0000 +++ b/LTCApp.h Thu Feb 10 10:25:10 2022 +0000 @@ -32,6 +32,7 @@ int FIZmode; int SerialOutMode; int FreeDPort; + int DataOutPort; int VipsUDPPort; int SettingsPort; char IPAddress[32];
--- a/main.cpp Thu Feb 10 09:24:29 2022 +0000 +++ b/main.cpp Thu Feb 10 10:25:10 2022 +0000 @@ -513,12 +513,12 @@ if ((UserSettings.SerialOutMode==mode_FreeD) || UserSettings.FreeDPort) createFreeDPacket(posPtr); - if ((UserSettings.SerialOutMode==mode_VIPS) || UserSettings.VipsUDPPort) + if ((UserSettings.SerialOutMode==mode_VIPS) || UserSettings.VipsUDPPort || (UserSettings.DataOutPort && !UserSettings.FreeDPort)) createVIPSPacket(posPtr); // Network is faster so send that first. - if (UserSettings.FreeDPort || UserSettings.VipsUDPPort) { + if (UserSettings.DataOutPort || UserSettings.VipsUDPPort) { if (UserSettings.UDPTxDelayMS > 0) { UDPOutputDelayTimer.attach_us(&UDP_Tx_Now,UserSettings.UDPTxDelayMS*1000); } else @@ -645,6 +645,7 @@ UserSettings.FIZmode = formatPreston; UserSettings.SerialOutMode = mode_VIPS; UserSettings.FreeDPort = 0; + UserSettings.DataOutPort = 0; UserSettings.VipsUDPPort = 0; UserSettings.SettingsPort = 0; UserSettings.IPAddress[0] = 0; @@ -706,6 +707,15 @@ if (sscanf(lineBuffer,"FreeD_Port=%d",&valueIn) == 1) { pc.printf("Got FreeD_Port value from file of %d\r\n",valueIn); UserSettings.FreeDPort = valueIn; + UserSettings.DataOutPort = valueIn; + } + if (sscanf(lineBuffer,"FreeD_Mode=%d",&valueIn) == 1) { + pc.printf("Got FreeD_Mode value from file of %d\r\n",valueIn); + UserSettings.FreeDPort = valueIn; + } + if (sscanf(lineBuffer,"DataOut_Port=%d",&valueIn) == 1) { + pc.printf("Got DataOut_Port value from file of %d\r\n",valueIn); + UserSettings.DataOutPort = valueIn; } if (sscanf(lineBuffer,"VIPS_UDP_Port=%d",&valueIn) == 1) { pc.printf("Got VIPS_Port value from file of %d\r\n",valueIn); @@ -923,8 +933,8 @@ { Thread* ListenTask=NULL; - UDPSocket* FreeDSocket = NULL; - Endpoint FreeDTarget; + UDPSocket* PrimaryDataSocket = NULL; + Endpoint PrimaryDataTarget; UDPSocket* VIPSSocket = NULL; Endpoint VIPSTarget; @@ -932,7 +942,7 @@ UserSettings_t *settingsPtr = (UserSettings_t *) settings; pc.puts("Ethernet task startup\r\n"); - if (!settingsPtr->FreeDPort && !settingsPtr->VipsUDPPort && !settingsPtr->SettingsPort) { + if (!settingsPtr->DataOutPort && !settingsPtr->VipsUDPPort && !settingsPtr->SettingsPort) { pc.puts("No ports set. Ethernet task exiting\r\n"); return; } @@ -975,15 +985,15 @@ pc.puts("Done\r\n"); Thread::wait(100); } - if (FreeDSocket) - delete FreeDSocket; - if (UserSettings.FreeDPort) { - pc.puts("Starting FreeD socket\r\n"); + if (PrimaryDataSocket) + delete PrimaryDataSocket; + if (UserSettings.DataOutPort) { + pc.printf("Starting Primary data socket - %s\r\n", (UserSettings.FreeDPort ? "FreeD Output Mode" : "VIPS Output Mode")); Thread::wait(50); - FreeDSocket = new UDPSocket(); - FreeDSocket->init(); - FreeDSocket->set_broadcasting(true); - FreeDTarget.set_address(0xFFFFFFFF, UserSettings.FreeDPort); + PrimaryDataSocket = new UDPSocket(); + PrimaryDataSocket->init(); + PrimaryDataSocket->set_broadcasting(true); + PrimaryDataTarget.set_address(0xFFFFFFFF, UserSettings.DataOutPort); } if (VIPSSocket) @@ -1004,7 +1014,7 @@ if (EthTxNow) { // NewData.lock(); EthTxNow = false; - if (!FreeDSocket && UserSettings.FreeDPort) { + if (!PrimaryDataSocket && UserSettings.DataOutPort) { pc.puts("No FreeD UDP socket\r\n"); break; } @@ -1012,12 +1022,16 @@ pc.puts("No VIPS UDP socket\r\n"); break; } - if (FreeDSocket) { - Result = FreeDSocket->sendTo(FreeDTarget,(char *)&fdPacket, sizeof(struct D1MsgFormat_s)); + if (PrimaryDataSocket) { + if (UserSettings.FreeDPort) + Result = PrimaryDataSocket->sendTo(PrimaryDataTarget,(char *)&fdPacket, sizeof(struct D1MsgFormat_s)); + else + Result = PrimaryDataSocket->sendTo(PrimaryDataTarget,(char *)FlexibleVIPSOut, VIPSOutSize); //uint32_t ethtime = EthernetTimer.read_us(); //EthernetTimer.reset(); - if (Result != sizeof(struct D1MsgFormat_s)) { - pc.puts("FreeD UDP Tx Failed!\r\n"); + int expected_size = UserSettings.FreeDPort ? sizeof(struct D1MsgFormat_s) : VIPSOutSize; + if (Result != expected_size) { + pc.puts("Primary Port UDP Tx Failed!\r\n"); break; } //else //pc.printf("%d\r\n", ethtime);