From fbeb297717d2b95a59adef276535a8e9a4c0a35f Mon Sep 17 00:00:00 2001 From: Jason Watkins Date: Tue, 24 Mar 2015 13:12:17 -0700 Subject: [PATCH] Fixed CTests bugs, minor plugin enhancements, and removed old files - Fixed incorrect message buffer size in sendCTRL function. - Fixed a bug in sendCTRLTest where not all DREF sizes were being set. - Increased message buffer size in sendReadTest to account for assumptions made by sendUDP. - Fixed a bug in updateLog where the log message would sometimes start with several null characters, causing the log message to be effectively ignored by fprintf. - The xpcPlugin Visual Studio solution now supports 32 bit and 64 bit builds. - Logging performed by the plugin now works correctly on Windows. - Long log messages are now truncated to 500 characters. Previously, messages over 500 characters would be omitted, and an error message logged in their place. - Several files which were incorrectly added to source control have been deleted. --- C/src/xplaneConnect.c | 4 ++-- TestScripts/C Tests/main.c | 8 +++---- xpcPlugin/Win/xpcPlugin.xpl | Bin 84992 -> 0 bytes xpcPlugin/Win/xpcPlugin32.xpl | Bin 86016 -> 86016 bytes xpcPlugin/Win/xpcPlugin64.xpl | Bin 104960 -> 105472 bytes xpcPlugin/xpcPlugin/xpcPlugin.opensdf | Bin 40 -> 0 bytes xpcPlugin/xpcPlugin/xpcPlugin.sdf | Bin 29753344 -> 0 bytes xpcPlugin/xpcPlugin/xpcPlugin.sln | 4 ++-- xpcPlugin/xpcPlugin/xpcPlugin.v12.suo | Bin 49152 -> 0 bytes .../x64/Debug/xpcPlugin.Build.CppClean.log | 15 ------------- .../xpcPlugin/x64/Debug/xpcPlugin.log | 19 ---------------- .../x64/Debug/xpcPlugin.tlog/CL.read.1.tlog | Bin 62002 -> 0 bytes .../Debug/xpcPlugin.tlog/cl.command.1.tlog | Bin 2966 -> 0 bytes .../xpcPlugin.tlog/xpcPlugin.lastbuildstate | 2 -- .../xpcPlugin/x64/Debug/xplaneConnect.obj | Bin 92032 -> 0 bytes .../xpcPlugin/xpcPlugin/xpcPlugin.vcxproj | 20 +++++++++-------- xpcPlugin/xpcPluginTools.cpp | 21 +++++------------- 17 files changed, 25 insertions(+), 68 deletions(-) delete mode 100755 xpcPlugin/Win/xpcPlugin.xpl delete mode 100644 xpcPlugin/xpcPlugin/xpcPlugin.opensdf delete mode 100644 xpcPlugin/xpcPlugin/xpcPlugin.sdf delete mode 100644 xpcPlugin/xpcPlugin/xpcPlugin.v12.suo delete mode 100644 xpcPlugin/xpcPlugin/xpcPlugin/x64/Debug/xpcPlugin.Build.CppClean.log delete mode 100644 xpcPlugin/xpcPlugin/xpcPlugin/x64/Debug/xpcPlugin.log delete mode 100644 xpcPlugin/xpcPlugin/xpcPlugin/x64/Debug/xpcPlugin.tlog/CL.read.1.tlog delete mode 100644 xpcPlugin/xpcPlugin/xpcPlugin/x64/Debug/xpcPlugin.tlog/cl.command.1.tlog delete mode 100644 xpcPlugin/xpcPlugin/xpcPlugin/x64/Debug/xpcPlugin.tlog/xpcPlugin.lastbuildstate delete mode 100644 xpcPlugin/xpcPlugin/xpcPlugin/x64/Debug/xplaneConnect.obj diff --git a/C/src/xplaneConnect.c b/C/src/xplaneConnect.c index 0f209bb..8637325 100755 --- a/C/src/xplaneConnect.c +++ b/C/src/xplaneConnect.c @@ -373,7 +373,7 @@ short sendPOSI(struct xpcSocket recfd, short ACNum, short numArgs, float valueAr short sendCTRL(struct xpcSocket recfd, short numArgs, float valueArray[]) { - char message[22] = {0}; + char message[29] = {0}; int i; short position = 5; @@ -401,7 +401,7 @@ short sendCTRL(struct xpcSocket recfd, short numArgs, float valueArray[]) position += sizeof(float); } - sendUDP(recfd, message, 22); + sendUDP(recfd, message, 29); return 0; } diff --git a/TestScripts/C Tests/main.c b/TestScripts/C Tests/main.c index 8c8e4f8..e3bac8e 100644 --- a/TestScripts/C Tests/main.c +++ b/TestScripts/C Tests/main.c @@ -55,7 +55,7 @@ short sendReadTest() // send/read Test // Initialization int i; // Iterator - char test[] = {0, 1, 2, 3}; + char test[] = {0, 1, 2, 3, 5}; char buf[5] = {0}; struct xpcSocket sendPort, recvPort; @@ -257,9 +257,9 @@ short sendCTRLTest() // sendCTRL test strcpy(DREFArray[3],"sim/flightmodel/engine/ENGN_thro"); strcpy(DREFArray[4],"sim/cockpit/switches/gear_handle_status"); strcpy(DREFArray[5],"sim/flightmodel/controls/flaprqsts"); - for (i=0;i<5;i++) { - DREFSizes[i] = (int) strlen(DREFArray[i]); - } + for (i = 0; i < 100; i++) { + DREFSizes[i] = (int)strlen(DREFArray[i]); + } CTRL[3] = 0.8; // Throttle // Execute diff --git a/xpcPlugin/Win/xpcPlugin.xpl b/xpcPlugin/Win/xpcPlugin.xpl deleted file mode 100755 index a14d7b966ce7da86abef12baf2b84efa93753878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84992 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

AHl$Nw)@!p3awu=VLLWKhZ3)d{rkEA-ioXDQ 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