View Single Post
  #10   Spotlight this post!  
Unread 26-02-2010, 15:19
byteit101's Avatar
byteit101 byteit101 is offline
WPILib maintainer (WPI)
AKA: Patrick Plenefisch
no team (The Cat Attack (Formerly))
Team Role: Programmer
 
Join Date: Jan 2009
Rookie Year: 2009
Location: Worcester
Posts: 699
byteit101 is a glorious beacon of lightbyteit101 is a glorious beacon of lightbyteit101 is a glorious beacon of lightbyteit101 is a glorious beacon of lightbyteit101 is a glorious beacon of lightbyteit101 is a glorious beacon of light
Re: replace WPILib part

I have this issue again on a different file, AxisCamera. I was adding a saving function, and it started doing it. I was editing it, save, compile, add more, etc... and I added one line, and it started doing it, and won't stop. I commented my chages, even completely replaced the files with the default WPILib's, but it does the error now. Rebuilds make no different.
errors:
Code:
Build Started in Project 'Breakaway':   2010-02-26 15:17:08
Generation of makefiles started.
Generation of makefiles finished (Elapsed Time: 00:00).
Platform: Wind River VxWorks 6.3
Command: make --no-print-directory BUILD_SPEC=PPC603gnu DEBUG_MODE=1 TRACE=1
Working Directory: C:/WindRiver/workspace/Breakaway/PPC603gnu
if [ ! -d "`dirname "Breakaway_partialImage/Debug/Objects/Breakaway/AxisCamera.o"`" ]; then mkdir -p "`dirname "Breakaway_partialImage/Debug/Objects/Breakaway/AxisCamera.o"`"; fi;echo "building Breakaway_partialImage/Debug/Objects/Breakaway/AxisCamera.o"; ccppc -g -mcpu=603 -mstrict-align -mno-implicit-fp -mlongcall -ansi -Wall  -MD -MP -mlongcall  -IC:/WindRiver/vxworks-6.3/target/h -IC:/WindRiver/vxworks-6.3/target/h/WPILib -IC:/WindRiver/vxworks-6.3/target/h/wrn/coreip   -DCPU=PPC603 -DTOOL_FAMILY=gnu -DTOOL=gnu -D_WRS_KERNEL    -o "Breakaway_partialImage/Debug/Objects/Breakaway/AxisCamera.o" -c "C:/WindRiver/workspace/Breakaway/AxisCamera.cpp"
building Breakaway_partialImage/Debug/Objects/Breakaway/AxisCamera.o
if [ ! -d "`dirname "Breakaway_partialImage/Debug/Objects/Breakaway/Main.o"`" ]; then mkdir -p "`dirname "Breakaway_partialImage/Debug/Objects/Breakaway/Main.o"`"; fi;echo "building Breakaway_partialImage/Debug/Objects/Breakaway/Main.o"; ccppc -g -mcpu=603 -mstrict-align -mno-implicit-fp -mlongcall -ansi -Wall  -MD -MP -mlongcall  -IC:/WindRiver/vxworks-6.3/target/h -IC:/WindRiver/vxworks-6.3/target/h/WPILib -IC:/WindRiver/vxworks-6.3/target/h/wrn/coreip   -DCPU=PPC603 -DTOOL_FAMILY=gnu -DTOOL=gnu -D_WRS_KERNEL    -o "Breakaway_partialImage/Debug/Objects/Breakaway/Main.o" -c "C:/WindRiver/workspace/Breakaway/Main.cpp"
building Breakaway_partialImage/Debug/Objects/Breakaway/Main.o
if [ ! -d "`dirname "Breakaway_partialImage/Debug/Objects/Breakaway/PCVideoServer.o"`" ]; then mkdir -p "`dirname "Breakaway_partialImage/Debug/Objects/Breakaway/PCVideoServer.o"`"; fi;echo "building Breakaway_partialImage/Debug/Objects/Breakaway/PCVideoServer.o"; ccppc -g -mcpu=603 -mstrict-align -mno-implicit-fp -mlongcall -ansi -Wall  -MD -MP -mlongcall  -IC:/WindRiver/vxworks-6.3/target/h -IC:/WindRiver/vxworks-6.3/target/h/WPILib -IC:/WindRiver/vxworks-6.3/target/h/wrn/coreip   -DCPU=PPC603 -DTOOL_FAMILY=gnu -DTOOL=gnu -D_WRS_KERNEL    -o "Breakaway_partialImage/Debug/Objects/Breakaway/PCVideoServer.o" -c "C:/WindRiver/workspace/Breakaway/PCVideoServer.cpp"
building Breakaway_partialImage/Debug/Objects/Breakaway/PCVideoServer.o
if [ ! -d "`dirname "Breakaway_partialImage/Debug/Breakaway_partialImage.o"`" ]; then mkdir -p "`dirname "Breakaway_partialImage/Debug/Breakaway_partialImage.o"`"; fi;echo "building Breakaway_partialImage/Debug/Breakaway_partialImage.o"; ccppc -r -nostdlib -Wl,-X  -o "Breakaway_partialImage/Debug/Breakaway_partialImage.o" Breakaway_partialImage/Debug/Objects/Breakaway/Array.o Breakaway_partialImage/Debug/Objects/Breakaway/AxisCamera.o Breakaway_partialImage/Debug/Objects/Breakaway/BTR.o Breakaway_partialImage/Debug/Objects/Breakaway/Main.o Breakaway_partialImage/Debug/Objects/Breakaway/Mechs.o Breakaway_partialImage/Debug/Objects/Breakaway/PCVideoServer.o Breakaway_partialImage/Debug/Objects/Breakaway/Ptr.o Breakaway_partialImage/Debug/Objects/Breakaway/ZDashboard.o      && if [ "0" = "1" ]; then plink "Breakaway_partialImage/Debug/Breakaway_partialImage.o";fi
building Breakaway_partialImage/Debug/Breakaway_partialImage.o
if [ ! -d "`dirname "Breakaway/Debug/Breakaway.out"`" ]; then mkdir -p "`dirname "Breakaway/Debug/Breakaway.out"`"; fi;echo "building Breakaway/Debug/Breakaway.out";rm -f "Breakaway/Debug/Breakaway.out";nmppc Breakaway_partialImage/Debug/Breakaway_partialImage.o C:/WindRiver/vxworks-6.3/target/lib/WPILib.a  | tclsh C:/WindRiver/vxworks-6.3/host/resource/hutils/tcl/munch.tcl -c ppc > Breakaway/Debug/ctdt.c; ccppc -g -mcpu=603 -mstrict-align -mno-implicit-fp -mlongcall -fdollars-in-identifiers -Wall  -IC:/WindRiver/vxworks-6.3/target/h -IC:/WindRiver/vxworks-6.3/target/h/WPILib -IC:/WindRiver/vxworks-6.3/target/h/wrn/coreip   -DCPU=PPC603 -DTOOL_FAMILY=gnu -DTOOL=gnu -D_WRS_KERNEL     -o Breakaway/Debug/ctdt.o -c Breakaway/Debug/ctdt.c; ccppc -r -nostdlib -Wl,-X -T C:/WindRiver/vxworks-6.3/target/h/tool/gnu/ldscripts/link.OUT -o "Breakaway/Debug/Breakaway.out" Breakaway/Debug/ctdt.o Breakaway_partialImage/Debug/Breakaway_partialImage.o C:/WindRiver/vxworks-6.3/target/lib/WPILib.a       && if [ "0" = "1" ]; then plink "Breakaway/Debug/Breakaway.out";fi
building Breakaway/Debug/Breakaway.out
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.bss+0x0):C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:25: multiple definition of `AxisCamera::m_instance'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.bss+0x4):C:/WindRiver/workspace/Breakaway/Array.cpp:2: first defined here
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x1a7c): In function `AxisCamera::s_ImageStreamTaskFunction(AxisCamera*)':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:183: multiple definition of `AxisCamera::s_ImageStreamTaskFunction(AxisCamera*)'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x1e2c):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:185: first defined here
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x5b0): In function `AxisCamera::~AxisCamera()':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:43: multiple definition of `AxisCamera::~AxisCamera()'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x7f4):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:45: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCamera::~AxisCamera()' changed from 992 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 884 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x924): In function `AxisCamera::~AxisCamera()':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:43: multiple definition of `AxisCamera::~AxisCamera()'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0xbd4):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:45: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCamera::~AxisCamera()' changed from 992 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 884 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0xc98): In function `AxisCamera::~AxisCamera()':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:43: multiple definition of `AxisCamera::~AxisCamera()'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0xfb4):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:45: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCamera::~AxisCamera()' changed from 992 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 884 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x11f4): In function `AxisCamera::DeleteInstance()':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:78: multiple definition of `AxisCamera::DeleteInstance()'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x15a0):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:80: first defined here
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x1258): In function `AxisCamera::IsFreshImage()':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:87: multiple definition of `AxisCamera::IsFreshImage()'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x1604):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:89: first defined here
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x1288): In function `AxisCamera::GetNewImageSem()':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:100: multiple definition of `AxisCamera::GetNewImageSem()'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x1634):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:102: first defined here
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x130c): In function `AxisCamera::GetImage(Image_struct*)':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:113: multiple definition of `AxisCamera::GetImage(Image_struct*)'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x16b8):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:115: first defined here
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x1520): In function `AxisCamera::GetImage()':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:140: multiple definition of `AxisCamera::GetImage()'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x18cc):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:142: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCamera::GetImage()' changed from 356 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 352 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x1680): In function `AxisCamera::CopyJPEG(char**, int&, int&)':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:157: multiple definition of `AxisCamera::CopyJPEG(char**, int&, int&)'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x1a30):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:159: first defined here
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x1ac8): In function `AxisCamera::ImageStreamTaskFunction()':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:193: multiple definition of `AxisCamera::ImageStreamTaskFunction()'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x1e78):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:195: first defined here
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x1b50): In function `AxisCamera::ReadImagesFromCamera()':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:218: multiple definition of `AxisCamera::ReadImagesFromCamera()'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x1f00):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:220: first defined here
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x1e90): In function `AxisCamera::UpdatePublicImageFromCamera(char*, int)':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:301: multiple definition of `AxisCamera::UpdatePublicImageFromCamera(char*, int)'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2240):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:303: first defined here
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x21b0): In function `AxisCamera::RestartCameraTask()':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:336: multiple definition of `AxisCamera::RestartCameraTask()'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2560):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:338: first defined here
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x224c): In function `AxisCameraStart':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:346: multiple definition of `AxisCameraStart'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x25fc):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:348: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraStart' changed from 72 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 60 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x2288): In function `AxisCameraGetImage':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:351: multiple definition of `AxisCameraGetImage'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2644):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:353: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraGetImage' changed from 112 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 100 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x22ec): In function `AxisCameraWriteBrightness':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:356: multiple definition of `AxisCameraWriteBrightness'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x26b4):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:358: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraWriteBrightness' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x2348): In function `AxisCameraGetBrightness':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:361: multiple definition of `AxisCameraGetBrightness'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x271c):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:363: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraGetBrightness' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x23a4): In function `AxisCameraWriteWhiteBalance':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:366: multiple definition of `AxisCameraWriteWhiteBalance'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2784):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:368: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraWriteWhiteBalance' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x2400): In function `AxisCameraGetWhiteBalance':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:371: multiple definition of `AxisCameraGetWhiteBalance'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x27ec):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:373: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraGetWhiteBalance' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x245c): In function `AxisCameraWriteColorLevel':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:376: multiple definition of `AxisCameraWriteColorLevel'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2854):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:378: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraWriteColorLevel' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x24b8): In function `AxisCameraGetColorLevel':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:381: multiple definition of `AxisCameraGetColorLevel'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x28bc):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:383: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraGetColorLevel' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x2514): In function `AxisCameraWriteExposureControl':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:386: multiple definition of `AxisCameraWriteExposureControl'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2924):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:388: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraWriteExposureControl' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x2570): In function `AxisCameraGetExposureControl':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:391: multiple definition of `AxisCameraGetExposureControl'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x298c):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:393: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraGetExposureControl' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x25cc): In function `AxisCameraWriteExposurePriority':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:396: multiple definition of `AxisCameraWriteExposurePriority'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x29f4):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:398: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraWriteExposurePriority' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x2628): In function `AxisCameraGetExposurePriority':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:401: multiple definition of `AxisCameraGetExposurePriority'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2a5c):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:403: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraGetExposurePriority' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x2684): In function `AxisCameraWriteMaxFPS':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:406: multiple definition of `AxisCameraWriteMaxFPS'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2ac4):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:408: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraWriteMaxFPS' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x26e0): In function `AxisCameraGetMaxFPS':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:411: multiple definition of `AxisCameraGetMaxFPS'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2b2c):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:413: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraGetMaxFPS' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x273c): In function `AxisCameraWriteResolution':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:416: multiple definition of `AxisCameraWriteResolution'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2b94):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:418: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraWriteResolution' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x2798): In function `AxisCameraGetResolution':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:421: multiple definition of `AxisCameraGetResolution'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2bfc):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:423: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraGetResolution' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x27f4): In function `AxisCameraWriteCompression':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:426: multiple definition of `AxisCameraWriteCompression'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2c64):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:428: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraWriteCompression' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x2850): In function `AxisCameraGetCompression':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:431: multiple definition of `AxisCameraGetCompression'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2ccc):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:433: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraGetCompression' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x28ac): In function `AxisCameraWriteRotation':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:436: multiple definition of `AxisCameraWriteRotation'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2d34):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:438: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraWriteRotation' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x2908): In function `AxisCameraGetRotation':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:441: multiple definition of `AxisCameraGetRotation'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2d9c):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:443: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraGetRotation' changed from 104 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 92 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x2964): In function `AxisCameraDeleteInstance':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:446: multiple definition of `AxisCameraDeleteInstance'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2e04):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:448: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraDeleteInstance' changed from 96 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 84 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)(.text+0x29b8): In function `AxisCameraFreshImage':
C:/WindRiver/workspace/WPILib/Vision/AxisCamera.cpp:451: multiple definition of `AxisCameraFreshImage'
Breakaway_partialImage/Debug/Breakaway_partialImage.o(.text+0x2e64):C:/WindRiver/workspace/Breakaway/AxisCamera.cpp:453: first defined here
c:/windriver/gnu/3.4.4-vxworks-6.3/x86-win32/bin/../lib/gcc/powerpc-wrs-vxworks/3.4.4/../../../../../x86-win32/powerpc-wrs-vxworks/bin/ld.exe: Warning: size of symbol `AxisCameraFreshImage' changed from 112 in Breakaway_partialImage/Debug/Breakaway_partialImage.o to 100 in C:/WindRiver/vxworks-6.3/target/lib/WPILib.a(AxisCamera.o)
collect2: ld returned 256 exit status
make: built targets of C:/WindRiver/workspace/Breakaway/PPC603gnu
Build Finished in Project 'Breakaway':   2010-02-26 15:17:16   (Elapsed Time: 00:08)
Header:
Code:
/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2008. All Rights Reserved.							  */
/* Open Source Software - may be modified and shared by FRC teams. The code   */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib.  */
/*----------------------------------------------------------------------------*/

#ifndef __AXIS_CAMERA_H__
#define __AXIS_CAMERA_H__

#include <taskLib.h>
#include <vxWorks.h> 
#include <sockLib.h> 
#include <inetLib.h>

#include "Vision/AxisCameraParams.h"
#include "Vision/ColorImage.h"
#include "Vision/HSLImage.h"
#include "nivision.h"
#include <set>
#include "Task.h"

/**
 * AxisCamera class.
 * This class handles everything about the Axis 206 FRC Camera.
 * It starts up 2 tasks each using a different connection to the camera:
 * - image reading task that reads images repeatedly from the camera
 * - parameter handler task in the base class that monitors for changes to
 *     parameters and updates the camera
 */
class AxisCamera: public AxisCameraParams
{
	AxisCamera(const char *cameraIP = "192.168.0.90",bool filesave=false, const char *fpath="img/");
public:
	virtual ~AxisCamera();
	static AxisCamera& GetInstance(bool filesave=false, const char *fpath="img/");
	void DeleteInstance();

	bool IsFreshImage();
	SEM_ID GetNewImageSem();

	int GetImage(Image *imaqImage);
	int GetImage(ImageBase *image);
	ImageBase *GetImage();
	//Image *GetimaqImage();

	int CopyJPEG(char **destImage, int &destImageSize, int &destImageBufferSize);

private:
	static int s_ImageStreamTaskFunction(AxisCamera *thisPtr);
	int ImageStreamTaskFunction();

	int ReadImagesFromCamera();
	void UpdatePublicImageFromCamera(char *imgBuffer, int imgSize);

	virtual void RestartCameraTask();
	static int s_SaveImageFunction(AxisCamera *thisPtr);
	int SaveImageFunction();

	static AxisCamera *m_instance;
	int m_cameraSocket;
	typedef std::set<SEM_ID> SemSet_t;
	SemSet_t m_newImageSemSet;

	char* m_protectedImageBuffer;
	int m_protectedImageBufferLength;
	int m_protectedImageSize;
	SEM_ID m_protectedImageSem;
	bool m_freshImage;

	Task m_imageStreamTask;
	Task m_imageSaveTask;
	const char *fpathSave;
};

extern "C" {
	void AxisCameraStart();
	int AxisCameraGetImage(Image *image);
	void AxisCameraDeleteInstance();
	int AxisCameraFreshImage();

	// Mid-stream gets & writes
	void AxisCameraWriteBrightness(int brightness);
	int AxisCameraGetBrightness();
	void AxisCameraWriteWhiteBalance(AxisCameraParams::WhiteBalance_t whiteBalance);
	AxisCameraParams::WhiteBalance_t AxisCameraGetWhiteBalance();
	void AxisCameraWriteColorLevel(int colorLevel);
	int AxisCameraGetColorLevel();
	void AxisCameraWriteExposureControl(AxisCameraParams::Exposure_t exposure);
	AxisCameraParams::Exposure_t AxisCameraGetExposureControl();
	void AxisCameraWriteExposurePriority(int exposurePriority);
	int AxisCameraGetExposurePriority();
	void AxisCameraWriteMaxFPS(int maxFPS);
	int AxisCameraGetMaxFPS();

	// New-Stream gets & writes
	void AxisCameraWriteResolution(AxisCameraParams::Resolution_t resolution);
	AxisCameraParams::Resolution_t AxisCameraGetResolution();
	void AxisCameraWriteCompression(int compression);
	int AxisCameraGetCompression();
	void AxisCameraWriteRotation(AxisCameraParams::Rotation_t rotation);
	AxisCameraParams::Rotation_t AxisCameraGetRotation();
}

#endif
Source (cpp):
Code:
/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2008. All Rights Reserved.							  */
/* Open Source Software - may be modified and shared by FRC teams. The code   */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib.  */
/*----------------------------------------------------------------------------*/

#include <string.h>
#include "Synchronized.h"
#include "AxisCamera.h"
#include "PCVideoServer.h"

/** Private NI function to decode JPEG */ 
IMAQ_FUNC int Priv_ReadJPEGString_C(Image* _image, const unsigned char* _string, UINT32 _stringLength); 

// Max packet without jumbo frames is 1500... add 36 because??
#define kMaxPacketSize 1536
#define kImageBufferAllocationIncrement 1000

AxisCamera* AxisCamera::m_instance = NULL;

/**
 * AxisCamera constructor
 */
AxisCamera::AxisCamera(const char *ipAddress,bool filesave, const char *fpath)
	: AxisCameraParams(ipAddress)
	, m_cameraSocket (0)
	, m_protectedImageBuffer(NULL)
	, m_protectedImageBufferLength (0)
	, m_protectedImageSize (0)
	, m_protectedImageSem (NULL)
	, m_freshImage (false)
, m_imageStreamTask("cameraTask", (FUNCPTR)s_ImageStreamTaskFunction)
, m_imageSaveTask("cameraSaveTask", (FUNCPTR)s_SaveImageFunction)
{
	m_protectedImageSem = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE | SEM_DELETE_SAFE);

	m_imageStreamTask.Start((int)this);
	//fpathSave=fpath;
}

/**
 * Destructor
 */
AxisCamera::~AxisCamera()
{
	m_imageStreamTask.Stop();
	close(m_cameraSocket);

	SemSet_t::iterator it = m_newImageSemSet.begin();
	SemSet_t::iterator end = m_newImageSemSet.end();
	for (;it != end; it++)
	{
		semDelete(*it);
	}
	m_newImageSemSet.clear();

	semDelete(m_protectedImageSem);
	m_instance = NULL;
}

/**
 * Get a pointer to the AxisCamera object, if the object does not exist, create it
 * @return reference to AxisCamera object
 */
AxisCamera& AxisCamera::GetInstance(bool filesave, const char *fpath)
{
	if (NULL == m_instance) {
		// Since this is a singleton for now, just use the default IP address.
		m_instance = new AxisCamera("192.168.0.90",filesave,fpath);
		// TODO: Keep track of this so it can be shut down!
		new PCVideoServer();
	}
	return *m_instance;
}

/**
 * Called by Java to delete the camera... how thoughtful
 */
void AxisCamera::DeleteInstance()
{
	delete m_instance;
}

/**
 * Return true if the latest image from the camera has not been retrieved by calling GetImage() yet.
 * @return true if the image has not been retrieved yet.
 */
bool AxisCamera::IsFreshImage()
{
	return m_freshImage;
}

/**
 * Get the semaphore to be used to synchronize image access with camera acquisition
 * 
 * Call semTake on the returned semaphore to block until a new image is acquired.
 * 
 * The semaphore is owned by the AxisCamera class and will be deleted when the class is destroyed.
 * @return A semaphore to notify when new image is received
 */
SEM_ID AxisCamera::GetNewImageSem()
{
	SEM_ID sem = semBCreate (SEM_Q_PRIORITY, SEM_EMPTY);
	m_newImageSemSet.insert(sem);
	return sem;
}

/**
 * Get an image from the camera and store it in the provided image.
 * @param image The imaq image to store the result in. This must be an HSL or RGB image
 * This function is called by Java.
 * @return 1 upon success, zero on a failure
 */
int AxisCamera::GetImage(Image* imaqImage)
{
	if (m_protectedImageBuffer == NULL)
		return 0;
	Synchronized sync(m_protectedImageSem);
	Priv_ReadJPEGString_C(imaqImage,
		(unsigned char*)m_protectedImageBuffer, m_protectedImageSize);
	m_freshImage = false;
	return 1;
}

/**
 * Get an image from the camera and store it in the provided image.
 * @param image The image to store the result in. This must be an HSL or RGB image
 * @return 1 upon success, zero on a failure
 */
int AxisCamera::GetImage(ImageBase* image)
{
	return GetImage(image->GetImaqImage());
}

/**
 * Instantiate a new image object and fill it with the latest image from the camera.
 * 
 * The returned pointer is owned by the caller and is their responsibility to delete.
 * @return a pointer to an HSLImage object
 */
ImageBase* AxisCamera::GetImage()
{
    ImageBase *image = new ImageBase(IMAQ_IMAGE_RGB);
	GetImage(image);
	return image;
}

/**
 * Copy an image into an existing buffer.
 * This copies an image into an existing buffer rather than creating a new image
 * in memory. That way a new image is only allocated when the image being copied is
 * larger than the destination.
 * This method is called by the PCVideoServer class.
 * @param imageData The destination image.
 * @param numBytes The size of the destination image.
 * @return 0 if failed (no source image or no memory), 1 if success.
 */
int AxisCamera::CopyJPEG(char **destImage, int &destImageSize, int &destImageBufferSize)
{
	Synchronized sync(m_protectedImageSem);
	wpi_assert(destImage != NULL);
	if (m_protectedImageBuffer == NULL) return 0; // if no source image
	if (destImageBufferSize < m_protectedImageSize) // if current destination buffer too small
	{
		if (*destImage != NULL) delete [] *destImage;
		destImageBufferSize = m_protectedImageSize + kImageBufferAllocationIncrement;
		*destImage = new char[destImageBufferSize];
		if (*destImage == NULL) return 0;
	}
	// copy this image into destination buffer
	wpi_assert(*destImage != NULL);
	wpi_assert(m_protectedImageBuffer != NULL);
	wpi_assert(m_protectedImageSize > 0);
	// TODO: Is this copy realy necessary... perhaps we can simply transmit while holding the protected buffer
	memcpy(*destImage, m_protectedImageBuffer, m_protectedImageSize);
	destImageSize = m_protectedImageSize;
	return 1;
}

/**
 * Static interface that will cause an instantiation if necessary.
 * This static stub is directly spawned as a task to read images from the camera.
 */
int AxisCamera::s_ImageStreamTaskFunction(AxisCamera *thisPtr)
{
	return thisPtr->ImageStreamTaskFunction();
}

/**
 * Task spawned by AxisCamera constructor to receive images from cam
 * If setNewImageSem has been called, this function does a semGive on each new image
 * Images can be accessed by calling getImage()
 */
int AxisCamera::ImageStreamTaskFunction()
{
	// Loop on trying to setup the camera connection. This happens in a background
	// thread so it shouldn't effect the operation of user programs.
	while (1)
	{
		char * requestString = "GET /mjpg/video.mjpg HTTP/1.1\n\
User-Agent: HTTPStreamClient\n\
Connection: Keep-Alive\n\
Cache-Control: no-cache\n\
Authorization: Basic RlJDOkZSQw==\n\n";
		m_cameraSocket = CreateCameraSocket(requestString);
		if (m_cameraSocket == 0)
		{
			// Don't hammer the camera if it isn't ready.
			taskDelay(1000);
			continue;
		}
		ReadImagesFromCamera();
	}
}

/**
 * This function actually reads the images from the camera.
 */
int AxisCamera::ReadImagesFromCamera()
{
	char *imgBuffer = NULL;
	int imgBufferLength = 0;
	//Infinite loop, task deletion handled by taskDeleteHook
	// Socket cleanup handled by destructor
	
	// TODO: these recv calls must be non-blocking. Otherwise if the camera
	// fails during a read, the code hangs and never retries when the camera comes
	// back up.

	int counter = 2;
	while (1)
	{
		char initialReadBuffer[kMaxPacketSize] = "";
		char intermediateBuffer[1];
		char *trailingPtr = initialReadBuffer;
		int trailingCounter = 0;
		while (counter)
		{
			// TODO: fix me... this cannot be the most efficient way to approach this, reading one byte at a time.
			if(recv(m_cameraSocket, intermediateBuffer, 1, 0) == ERROR)
			{
				perror ("AxisCamera: Failed to read image header");
				close (m_cameraSocket);
				return (ERROR);
			}
			strncat(initialReadBuffer, intermediateBuffer, 1);
			// trailingCounter ensures that we start looking for the 4 byte string after
			// there is at least 4 bytes total. Kind of obscure.
			// look for 2 blank lines (\r\n)
			if (NULL != strstr(trailingPtr, "\r\n\r\n"))
			{
				--counter;
			}
			if (++trailingCounter >= 4)
			{
				trailingPtr++;
			}
		}
		counter = 1;
		char *contentLength = strstr(initialReadBuffer, "Content-Length: ");
		if (contentLength == NULL)
		{
			perror("AxisCamera: No content-length token found in packet");
			close(m_cameraSocket);
			return(ERROR);
		}
		contentLength = contentLength + 16; // skip past "content length"
		int readLength = atol(contentLength); // get the image byte count

		// Make sure buffer is large enough
		if (imgBufferLength < readLength)
		{
			if (imgBuffer) delete[] imgBuffer;
			imgBufferLength = readLength + kImageBufferAllocationIncrement;
			imgBuffer = new char[imgBufferLength];
			if (imgBuffer == NULL)
			{
				imgBufferLength = 0;
				continue;
			}
		}

		// Read the image data for "Content-Length" bytes
		int bytesRead = 0;
		int remaining = readLength;
		while(bytesRead < readLength)
		{
			int bytesThisRecv = recv(m_cameraSocket, &imgBuffer[bytesRead], remaining, 0);
			bytesRead += bytesThisRecv;
			remaining -= bytesThisRecv;
		}
		// Update image
		UpdatePublicImageFromCamera(imgBuffer, readLength);
	}
}

/**
 * Copy the image from private buffer to shared buffer.
 * @param imgBuffer The buffer containing the image
 * @param bufLength The length of the image
 */
void AxisCamera::UpdatePublicImageFromCamera(char *imgBuffer, int imgSize)
{
	{
		Synchronized sync(m_protectedImageSem);

		// Adjust the buffer size if current destination buffer is too small.
		if (m_protectedImageBufferLength < imgSize)
		{
			if (m_protectedImageBuffer != NULL) delete [] m_protectedImageBuffer;
			m_protectedImageBufferLength = imgSize + kImageBufferAllocationIncrement;
			m_protectedImageBuffer = new char[m_protectedImageBufferLength];
			if (m_protectedImageBuffer == NULL)
			{
				m_protectedImageBufferLength = 0;
				return;
			}
		}

		memcpy(m_protectedImageBuffer, imgBuffer, imgSize);
		m_protectedImageSize = imgSize;
	}

	m_freshImage = true;
	// Notify everyone who is interested.
	SemSet_t::iterator it = m_newImageSemSet.begin();
	SemSet_t::iterator end = m_newImageSemSet.end();
	for (;it != end; it++)
	{
		semGive(*it);
	}
}

/**
 * Implement the pure virtual interface so that when parameter changes require a restart, the image task can be bounced.
 */
void AxisCamera::RestartCameraTask()
{
	m_imageStreamTask.Stop();
	m_imageStreamTask.Start((int)this);
}


// C bindings used by Java
// These need to stay as is or Java has to change

void AxisCameraStart()
{
	AxisCamera::GetInstance();
}

int AxisCameraGetImage (Image* image)
{
	return AxisCamera::GetInstance().GetImage(image);
}

void AxisCameraWriteBrightness(int brightness)
{
	AxisCamera::GetInstance().WriteBrightness(brightness);
}

int AxisCameraGetBrightness()
{
	return AxisCamera::GetInstance().GetBrightness();
}

void AxisCameraWriteWhiteBalance(AxisCameraParams::WhiteBalance_t whiteBalance)
{
	AxisCamera::GetInstance().WriteWhiteBalance(whiteBalance);
}

AxisCameraParams::WhiteBalance_t AxisCameraGetWhiteBalance()
{
	return AxisCamera::GetInstance().GetWhiteBalance();
}

void AxisCameraWriteColorLevel(int colorLevel)
{
	AxisCamera::GetInstance().WriteColorLevel(colorLevel);
}

int AxisCameraGetColorLevel()
{
	return AxisCamera::GetInstance().GetColorLevel();
}

void AxisCameraWriteExposureControl(AxisCameraParams::Exposure_t exposure)
{
	AxisCamera::GetInstance().WriteExposureControl(exposure);
}

AxisCameraParams::Exposure_t AxisCameraGetExposureControl()
{
	return AxisCamera::GetInstance().GetExposureControl();
}

void AxisCameraWriteExposurePriority(int exposure)
{
	AxisCamera::GetInstance().WriteExposurePriority(exposure);
}

int AxisCameraGetExposurePriority()
{
	return AxisCamera::GetInstance().GetExposurePriority();
}

void AxisCameraWriteMaxFPS(int maxFPS)
{
	AxisCamera::GetInstance().WriteMaxFPS(maxFPS);
}

int AxisCameraGetMaxFPS()
{
	return AxisCamera::GetInstance().GetMaxFPS();
}

void AxisCameraWriteResolution(AxisCameraParams::Resolution_t resolution)
{
	AxisCamera::GetInstance().WriteResolution(resolution);
}

AxisCameraParams::Resolution_t AxisCameraGetResolution()
{
	return AxisCamera::GetInstance().GetResolution();
}

void AxisCameraWriteCompression(int compression)
{
	AxisCamera::GetInstance().WriteCompression(compression);
}

int AxisCameraGetCompression()
{
	return AxisCamera::GetInstance().GetCompression();
}

void AxisCameraWriteRotation(AxisCameraParams::Rotation_t rotation)
{
	AxisCamera::GetInstance().WriteRotation(rotation);
}

AxisCameraParams::Rotation_t AxisCameraGetRotation()
{
	return AxisCamera::GetInstance().GetRotation();
}

void AxisCameraDeleteInstance()
{
	AxisCamera::GetInstance().DeleteInstance();
}

int AxisCameraFreshImage()
{
	return AxisCamera::GetInstance().IsFreshImage();
}
Edit: as you can see in the error box, I also have PCVideoServer, but it does not have any errors.
Edit2: Array.cpp is all comments
__________________
Bubble Wrap: programmers rewards
Watchdog.Kill();
printf("Watchdog is Dead, Celebrate!");
How to make a self aware robot: while (∞) cout<<(sqrt(-∞)/-0);
Previously FRC 451 (The Cat Attack)
Now part of the class of 2016 at WPI & helping on WPILib

Last edited by byteit101 : 26-02-2010 at 15:23.
Reply With Quote