AVT相机arm版本SDK
This commit is contained in:
58
Vimba_6_0/VimbaC/Examples/ForceIP/Build/Make/Makefile
Normal file
58
Vimba_6_0/VimbaC/Examples/ForceIP/Build/Make/Makefile
Normal file
@@ -0,0 +1,58 @@
|
||||
PROJECT_NAME = ForceIP
|
||||
|
||||
PROJECT_DIR = ../..
|
||||
EXAMPLES_DIR = $(PROJECT_DIR)/..
|
||||
VIMBASDK_DIR = $(EXAMPLES_DIR)/../..
|
||||
MAKE_INCLUDE_DIR = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
|
||||
|
||||
include $(MAKE_INCLUDE_DIR)/Common.mk
|
||||
|
||||
CONFIG_DIR = $(ARCH)_$(WORDSIZE)bit
|
||||
BIN_FILE = $(PROJECT_NAME)
|
||||
BIN_DIR = binary/$(CONFIG_DIR)
|
||||
OBJ_DIR = object/$(CONFIG_DIR)
|
||||
BIN_PATH = $(BIN_DIR)/$(BIN_FILE)
|
||||
|
||||
all: $(BIN_PATH)
|
||||
|
||||
include $(MAKE_INCLUDE_DIR)/VimbaC.mk
|
||||
|
||||
SOURCE_DIR = $(PROJECT_DIR)/Source
|
||||
COMMON_DIR = $(EXAMPLES_DIR)/Common
|
||||
|
||||
INCLUDE_DIRS = -I$(SOURCE_DIR) \
|
||||
-I$(EXAMPLES_DIR) \
|
||||
|
||||
LIBS = $(VIMBAC_LIBS)
|
||||
|
||||
DEFINES = -D_LITTLE_ENDIAN
|
||||
|
||||
CFLAGS = $(COMMON_CFLAGS) \
|
||||
$(VIMBAC_CFLAGS)
|
||||
|
||||
OBJ_FILES = $(OBJ_DIR)/ForceIP.o \
|
||||
$(OBJ_DIR)/program.o \
|
||||
$(OBJ_DIR)/PrintVimbaVersion.o \
|
||||
$(OBJ_DIR)/ErrorCodeToMessage.o \
|
||||
$(OBJ_DIR)/DiscoverGigECameras.o
|
||||
|
||||
DEPENDENCIES = VimbaC
|
||||
|
||||
$(OBJ_DIR)/%.o: $(COMMON_DIR)/%.c $(OBJ_DIR)
|
||||
$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.c $(OBJ_DIR)
|
||||
$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
|
||||
$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
|
||||
|
||||
clean:
|
||||
$(RM) binary -r -f
|
||||
$(RM) object -r -f
|
||||
|
||||
$(OBJ_DIR):
|
||||
$(MKDIR) -p $(OBJ_DIR)
|
||||
|
||||
$(BIN_DIR):
|
||||
$(MKDIR) -p $(BIN_DIR)
|
||||
232
Vimba_6_0/VimbaC/Examples/ForceIP/Source/ForceIP.c
Normal file
232
Vimba_6_0/VimbaC/Examples/ForceIP/Source/ForceIP.c
Normal file
@@ -0,0 +1,232 @@
|
||||
/*=============================================================================
|
||||
Copyright (C) 2013 - 2020 Allied Vision Technologies. All Rights Reserved.
|
||||
|
||||
Redistribution of this file, in original or modified form, without
|
||||
prior written consent of Allied Vision Technologies is prohibited.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
File: ForceIP.h
|
||||
|
||||
Description: The ForceIP example will assign an IP address to a camera
|
||||
that is identified by its MAC address. It utilizes only
|
||||
GenTL features. This approach is useful when a camera has
|
||||
an invalid IP configuration and cannot be accessed through
|
||||
the network anymore.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
|
||||
NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
=============================================================================*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
#include <ForceIP.h>
|
||||
|
||||
#include <VimbaC/Include/VimbaC.h>
|
||||
#include "../../Common/PrintVimbaVersion.h"
|
||||
|
||||
//
|
||||
// Converts a hexadecimal MAC address into its decimal representation.
|
||||
// Leaves decimal addresses untouched.
|
||||
//
|
||||
// Parameters:
|
||||
// [in] strMAC The hexadecimal (with preceding 0x) or decimal MAC
|
||||
// address to be converted to decimal. As string.
|
||||
//
|
||||
// Returns:
|
||||
// 0 in case of error
|
||||
// The decimal representation of the MAC address on success as integer
|
||||
//
|
||||
unsigned long long mac_addr( const char* strMAC )
|
||||
{
|
||||
unsigned long long nMAC;
|
||||
|
||||
if ( sscanf( strMAC, "0x%llx", &nMAC )
|
||||
|| sscanf( strMAC, "%lld", &nMAC ))
|
||||
{
|
||||
return nMAC;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Converts a IP address string into its decimal representation.
|
||||
//
|
||||
// Parameters:
|
||||
// [in] strIP The string representation of the IP
|
||||
//
|
||||
// Returns:
|
||||
// The decimal representation of the IP address as integer.
|
||||
//
|
||||
unsigned int ip_addr( const char* strIP )
|
||||
{
|
||||
unsigned long ip = inet_addr( strIP );
|
||||
|
||||
#ifdef _LITTLE_ENDIAN
|
||||
ip = ntohl( ip );
|
||||
#endif
|
||||
|
||||
return ip;
|
||||
}
|
||||
|
||||
// Sleeps for the given seconds.
|
||||
//
|
||||
// Parameters:
|
||||
// [in] seconds The number of seconds to sleep
|
||||
//
|
||||
void SleepForSeconds( const unsigned int seconds)
|
||||
{
|
||||
#ifdef WIN32
|
||||
Sleep(1000 * seconds);
|
||||
#else
|
||||
sleep(seconds);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Starts Vimba API
|
||||
// Seeks a GigE camera by its MAC address on the network
|
||||
// Sets the found camera's
|
||||
// - IP address
|
||||
// - subnet mask
|
||||
// - gateway
|
||||
//
|
||||
// Parameters:
|
||||
// [in] strMAC The MAC address of the camera to work on in decimal
|
||||
// or hex (with preceding 0x) representation
|
||||
// [in] strIP The desired IP address for the camera
|
||||
// [in] strSubnet The desired subnet mask of the IP address
|
||||
// [in] strGateway The desired gateway. Optional, can be 0
|
||||
//
|
||||
void ForceIP( char* strMAC, char* strIP, char* strSubnet, char* strGateway )
|
||||
{
|
||||
VmbError_t err = VmbErrorSuccess;
|
||||
VmbBool_t bIsGigE = 0;
|
||||
VmbHandle_t hCam = NULL;
|
||||
unsigned long long nMAC = 0;
|
||||
unsigned long nIP = 0;
|
||||
unsigned long nSubnet = 0;
|
||||
unsigned long nGateway = 0;
|
||||
|
||||
err = VmbStartup(); // Initialize the Vimba API
|
||||
PrintVimbaVersion(); // Print Vimba Version
|
||||
nMAC = mac_addr( strMAC ); // The MAC address of the camera
|
||||
nIP = ip_addr( strIP ); // The future IP address of the camera
|
||||
nSubnet = ip_addr( strSubnet ); // The future subnet mask of the camera
|
||||
nGateway = strGateway != NULL ? ip_addr( strGateway ) : 0; // A possible gateway
|
||||
|
||||
if ( VmbErrorSuccess == err )
|
||||
{
|
||||
err = VmbFeatureBoolGet( gVimbaHandle, "GeVTLIsPresent", &bIsGigE ); // Is Vimba connected to a GigE transport layer?
|
||||
if ( VmbErrorSuccess == err )
|
||||
{
|
||||
if( bIsGigE )
|
||||
{
|
||||
if ( 0 != nMAC )
|
||||
{
|
||||
err = VmbFeatureIntSet( gVimbaHandle, "GevDeviceForceMACAddress", nMAC ); // Send MAC address to TL
|
||||
if ( VmbErrorSuccess == err )
|
||||
{
|
||||
err = VmbFeatureIntSet( gVimbaHandle, "GevDeviceForceIPAddress", nIP ); // Send new IP address to TL
|
||||
if ( VmbErrorSuccess == err )
|
||||
{
|
||||
err = VmbFeatureIntSet( gVimbaHandle, "GevDeviceForceSubnetMask", nSubnet ); // Send new subnet mask to TL
|
||||
if ( VmbErrorSuccess == err )
|
||||
{
|
||||
if( 0 != nGateway )
|
||||
{
|
||||
err = VmbFeatureIntSet( gVimbaHandle, "GevDeviceForceGateway", nGateway ); // Send gateway address to TL
|
||||
if ( VmbErrorSuccess != err )
|
||||
{
|
||||
printf( "Could not prepare the gateway settings. Reason: %d\n\n", err );
|
||||
}
|
||||
}
|
||||
|
||||
if ( VmbErrorSuccess == err )
|
||||
{
|
||||
err = VmbFeatureCommandRun( gVimbaHandle, "GevDeviceForceIP" ); // Finally execute the command to write all settings to cam
|
||||
if ( VmbErrorSuccess == err )
|
||||
{
|
||||
VmbBool_t isDone = 0;
|
||||
unsigned int retryCount = 0;
|
||||
do
|
||||
{
|
||||
SleepForSeconds(1);
|
||||
err = VmbFeatureCommandIsDone( gVimbaHandle, "GevDeviceForceIP", &isDone); // Check if the command is accepted by the camera
|
||||
}
|
||||
while(retryCount++, isDone == VmbBoolFalse && err == VmbErrorSuccess && retryCount < 5);
|
||||
|
||||
if( isDone == VmbBoolTrue)
|
||||
{
|
||||
printf("ForceIP command sent successfully to the camera\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("ForceIP command could not be completed\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "Could not set a new IP address. Reason: %d\n\n", err );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "Could not prepare the subnet settings. Reason: %d\n\n", err );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "Could not prepare the IP address settings. Reason: %d\n\n", err );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "Could not prepare the MAC address settings. Reason: %d\n\n", err );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "Malformed MAC address.\n\n" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "No GigE transport layer present.\n\n" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "Could not query Vimba for the presence of a GigE transport layer. Reason: %d\n\n", err );
|
||||
}
|
||||
|
||||
VmbShutdown(); // Close Vimba
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "Could not start system. Error code: %d\n\n", err );
|
||||
}
|
||||
}
|
||||
52
Vimba_6_0/VimbaC/Examples/ForceIP/Source/ForceIP.h
Normal file
52
Vimba_6_0/VimbaC/Examples/ForceIP/Source/ForceIP.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/*=============================================================================
|
||||
Copyright (C) 2013 - 2016 Allied Vision Technologies. All Rights Reserved.
|
||||
|
||||
Redistribution of this file, in original or modified form, without
|
||||
prior written consent of Allied Vision Technologies is prohibited.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
File: ForceIP.h
|
||||
|
||||
Description: The ForceIP example will assign an IP address to a camera
|
||||
that is identified by its MAC address. It utilizes only
|
||||
GenTL features. This approach is useful when a camera has
|
||||
an invalid IP configuration and cannot be accessed through
|
||||
the network anymore.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
|
||||
NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
=============================================================================*/
|
||||
|
||||
#ifndef FORCE_IP_H_
|
||||
#define FORCE_IP_H_
|
||||
|
||||
//
|
||||
// Starts Vimba API
|
||||
// Seeks a GigE camera by its MAC address on the network
|
||||
// Sets the found camera's
|
||||
// - IP address
|
||||
// - subnet mask
|
||||
// - gateway
|
||||
//
|
||||
// Parameters:
|
||||
// [in] strMAC The MAC address of the camera to work on in decimal
|
||||
// or hex (with preceding 0x) representation
|
||||
// [in] strIP The desired IP address for the camera
|
||||
// [in] strSubnet The desired subnet mask of the IP address
|
||||
// [in] strGateway The desired gateway. Optional, can be 0
|
||||
//
|
||||
void ForceIP( char* strMAC, char* strIP, char* strSubnet, char* strGateway );
|
||||
|
||||
#endif
|
||||
67
Vimba_6_0/VimbaC/Examples/ForceIP/Source/program.c
Normal file
67
Vimba_6_0/VimbaC/Examples/ForceIP/Source/program.c
Normal file
@@ -0,0 +1,67 @@
|
||||
/*=============================================================================
|
||||
Copyright (C) 2020 Allied Vision Technologies. All Rights Reserved.
|
||||
|
||||
Redistribution of this file, in original or modified form, without
|
||||
prior written consent of Allied Vision Technologies is prohibited.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
File: program.cpp
|
||||
|
||||
Description: Main entry point of ForceIP example of VimbaC.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
|
||||
NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
=============================================================================*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#ifndef WIN32
|
||||
#include <arpa/inet.h>
|
||||
#else
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <ForceIP.h>
|
||||
|
||||
int main( int argc, char* argv[] )
|
||||
{
|
||||
printf( "\n//////////////////////////////////\n" );
|
||||
printf( "/// Vimba API Force IP Example ///\n" );
|
||||
printf( "//////////////////////////////////\n\n" );
|
||||
|
||||
if( 4 > argc
|
||||
|| 5 < argc )
|
||||
{
|
||||
printf( "Usage: ForceIP MAC IP Subnet [Gateway]\n\n" );
|
||||
printf( "Parameters:\n" );
|
||||
printf( "MAC The MAC address of the camera whose IP address shall be changed.\n" );
|
||||
printf( " Either hexadecimal with preceding 0x or decimal.\n" );
|
||||
printf( "IP The new IPv4 address of the camera in numbers and dots notation.\n" );
|
||||
printf( "Subnet The new network mask of the camera in numbers and dots notation.\n" );
|
||||
printf( "Gateway The address of a possible gateway if the camera is not connected\n" );
|
||||
printf( " to the host PC directly.\n\n" );
|
||||
printf( "For example to change the IP address of a camera with the MAC address 0x0F3101D540\nto 169.254.1.1 in a class B network call:\n\n" );
|
||||
printf( "ForceIP 0x0F3101D540 169.254.1.1 255.255.0.0\n\n" );
|
||||
#ifndef WIN32
|
||||
printf( "To alter cameras in foreign subnets run the program with sudo -E / su -m. \n\n" );
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
ForceIP( argv[1], argv[2], argv[3], argc == 5 ? argv[4] : NULL );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user