=====================================================================
Test suite 1
Set cache policy to ARV_REGISTER_CACHE_POLICY_DEBUG
This shows that with ARV_REGISTER_CACHE_POLICY_DEBUG everything works
but there are mismatches between current & cached values
=====================================================================
Initialise (TriggerMode, TriggerSource) to (On, Freerun)
[15:34:50.902] 🆆 policies> Current and cached value mismatch for 'RegTriggerMode'
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Freerun
Read back with arv-tool:
TriggerMode = On
TriggerSource = Freerun
1. Change (On, Freerun) to (On, Line1)
[15:34:51.304] 🆆 policies> Current and cached value mismatch for 'RegTriggerMode'
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Line1
Read back with arv-tool:
TriggerMode = On
TriggerSource = Line1
2. Change (On, Line1) to (On, Freerun)
[15:34:51.681] 🆆 policies> Current and cached value mismatch for 'RegTriggerMode'
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Freerun
Read back with arv-tool:
TriggerMode = On
TriggerSource = Freerun
3. Change (On, Freerun) to (Off, Freerun)
[15:34:52.056] 🆆 policies> Current and cached value mismatch for 'RegTriggerSource'
Read back with with arv_camera_get_string:
TriggerMode = Off
TriggerSource = Freerun
Read back with arv-tool:
TriggerMode = Off
TriggerSource = Freerun
4. Change (Off, Freerun) to (On, Freerun)
[15:34:52.427] 🆆 policies> Current and cached value mismatch for 'RegTriggerSource'
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Freerun
Read back with arv-tool:
TriggerMode = On
TriggerSource = Freerun
5. Re-initialise to (On, Line1)
[15:34:52.805] 🆆 policies> Current and cached value mismatch for 'RegTriggerMode'
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Line1
Read back with arv-tool:
TriggerMode = On
TriggerSource = Line1
6. Change (On, Line1) to (Off, Line1)
[15:34:53.214] 🆆 policies> Current and cached value mismatch for 'RegTriggerSource'
Read back with with arv_camera_get_string:
TriggerMode = Off
TriggerSource = Line1
Read back with arv-tool:
TriggerMode = Off
TriggerSource = Line1
7. Change (Off, Line1) to (On, Line1)
[15:34:53.621] 🆆 policies> Current and cached value mismatch for 'RegTriggerSource'
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Line1
Read back with arv-tool:
TriggerMode = On
TriggerSource = Line1
8. Re-initilalise to (Off, Line1)
[15:34:54.022] 🆆 policies> Current and cached value mismatch for 'RegTriggerSource'
Read back with with arv_camera_get_string:
TriggerMode = Off
TriggerSource = Line1
Read back with arv-tool:
TriggerMode = Off
TriggerSource = Line1
9. Change (Off, Line1) to (Off, Freerun)
[15:34:54.438] 🆆 policies> Current and cached value mismatch for 'RegTriggerMode'
Read back with with arv_camera_get_string:
TriggerMode = Off
TriggerSource = Freerun
Read back with arv-tool:
TriggerMode = Off
TriggerSource = Freerun
10. Change (Off, Freerun) to (Off, Line1)
[15:34:54.842] 🆆 policies> Current and cached value mismatch for 'RegTriggerMode'
Read back with with arv_camera_get_string:
TriggerMode = Off
TriggerSource = Line1
Read back with arv-tool:
TriggerMode = Off
TriggerSource = Line1
========================================================================
Test suite 2
Set cache policy to ARV_REGISTER_CACHE_POLICY_ENABLE
This shows that with ARV_REGISTER_CACHE_POLICY_ENABLE there are problems
-We cannot have (TriggerMode, TriggerSource) = (On, Freerun)
-There are side effects when setting TriggerMode and TriggerSource
========================================================================
Trying to set (TriggerMode, TriggerSource) to (On, Freerun)
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Freerun
Read back with arv-tool:
TriggerMode = Off
TriggerSource = Freerun
!!! PROBLEM: Setting TriggerSource to Freerun has side effect of changing TriggerMode to Off !!!
Changing this back to On to continue with test suite
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Freerun
Read back with arv-tool:
TriggerMode = On
TriggerSource = Line1
!!! PROBLEM: Setting TriggerMode to On has side effect of changing TriggerSource to Line1 !!!
Changing this back to Freerun to continue with test suite
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Freerun
Read back with arv-tool:
TriggerMode = Off
TriggerSource = Freerun
!!! PROBLEM: Setting TriggerSource to Freerun has side effect of changing TriggerMode to Off !!!
!!! PROBLEM: It seems we can't have (On, Freerun) !!!
1. Trying to set (On, Line1)
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Line1
Read back with arv-tool:
TriggerMode = Off
TriggerSource = Line1
!!! PROBLEM: Setting TriggerSource to Line1 has side effect of changing TriggerMode to Off !!!
Changing this back to On to continue with test suite
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Line1
Read back with arv-tool:
TriggerMode = On
TriggerSource = Line1
So we can have (On, Line1), notwithsanding the side effect above
2. Trying to change (On, Line1) to (On, Freerun)
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Freerun
Read back with arv-tool:
TriggerMode = Off
TriggerSource = Freerun
!!! PROBLEM: Setting TriggerSource to Freerun has side effect of changing TriggerMode to Off !!!
Changing this back to On to continue with test suite
Read back with with arv_camera_get_string:
TriggerMode = On
TriggerSource = Freerun
Read back with arv-tool:
TriggerMode = On
TriggerSource = Line1
!!! PROBLEM: Setting TriggerMode to On has side effect of changing TriggerSource to Line1 !!!
!!! PROBLEM: It seems we can't have (On, Freerun) !!!
3. Trying to set (Off, Freerun)
Read back with with arv_camera_get_string:
TriggerMode = Off
TriggerSource = Freerun
Read back with arv-tool:
TriggerMode = Off
TriggerSource = Freerun
So we can have (Off, Freerun)
4. Trying to set (Off, Line1)
Read back with with arv_camera_get_string:
TriggerMode = Off
TriggerSource = Line1
Read back with arv-tool:
TriggerMode = Off
TriggerSource = Line1
So we can have (off Line1)
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <arv.h>
void checkError(GError *error){
if (error != NULL) {
printf ("Error: %s\n", error->message);
exit(1);
}
}
void printStatus(ArvCamera *camera, const char *expectedTriggerMode = NULL, const char *expectedTriggerSource = NULL){
GError *error = NULL;
const char *triggerMode = arv_camera_get_string(camera, "TriggerMode", &error);
checkError(error);
const char *triggerSource = arv_camera_get_string(camera, "TriggerSource", &error);
checkError(error);
printf ("Read back with with arv_camera_get_string:\nTriggerMode = %s\nTriggerSource = %s\n",
triggerMode,
triggerSource
);
if (expectedTriggerMode != NULL && strcmp(expectedTriggerMode, triggerMode) != 0) {
printf ("WARNING: TriggerMode is expected to be %s but it is %s\n", expectedTriggerMode, triggerMode);
}
if (expectedTriggerSource != NULL && strcmp(expectedTriggerSource, triggerSource) != 0 ){
printf ("WARNING: TriggerSource is expected to be %s but it is %s\n", expectedTriggerSource, triggerSource);
}
printf ("Read back with arv-tool:\n");
int returnCode = system("arv-tool-0.8 -n 172.23.240.151 control 'TriggerMode' 'TriggerSource'");
}
void testSuite1(ArvCamera *camera) {
GError *error = NULL;
arv_camera_set_register_cache_policy(camera, ARV_REGISTER_CACHE_POLICY_DEBUG);
printf ("=====================================================================\n");
printf ("Test suite 1\n");
printf ("Set cache policy to ARV_REGISTER_CACHE_POLICY_DEBUG\n");
printf ("This shows that with ARV_REGISTER_CACHE_POLICY_DEBUG everything works\n");
printf ("but there are mismatches between current & cached values\n");
printf ("=====================================================================\n");
printf ("Initialise (TriggerMode, TriggerSource) to (On, Freerun)\n");
arv_camera_set_string (camera, "TriggerMode", "On", &error);
checkError(error);
arv_camera_set_string (camera, "TriggerSource", "Freerun", &error);
checkError(error);
printStatus(camera, "On", "Freerun");
printf("\n");
printf ("1. Change (On, Freerun) to (On, Line1)\n");
arv_camera_set_string (camera, "TriggerSource", "Line1", &error);
checkError(error);
printStatus(camera, "On", "Line1");
printf("\n");
printf ("2. Change (On, Line1) to (On, Freerun)\n");
arv_camera_set_string (camera, "TriggerSource", "Freerun", &error);
checkError(error);
printStatus(camera, "On", "Freerun");
printf("\n");
printf ("3. Change (On, Freerun) to (Off, Freerun)\n");
arv_camera_set_string (camera, "TriggerMode", "Off", &error);
checkError(error);
printStatus(camera);
printf("\n");
printf ("4. Change (Off, Freerun) to (On, Freerun)\n");
arv_camera_set_string (camera, "TriggerMode", "On", &error);
checkError(error);
printStatus(camera);
printf("\n");
printf ("5. Re-initialise to (On, Line1)\n");
arv_camera_set_string (camera, "TriggerSource", "Line1", &error);
checkError(error);
printStatus(camera);
printf("\n");
printf ("6. Change (On, Line1) to (Off, Line1)\n");
arv_camera_set_string (camera, "TriggerMode", "Off", &error);
checkError(error);
printStatus(camera);
printf("\n");
printf ("7. Change (Off, Line1) to (On, Line1)\n");
arv_camera_set_string (camera, "TriggerMode", "On", &error);
checkError(error);
printStatus(camera);
printf("\n");
printf ("8. Re-initilalise to (Off, Line1)\n");
arv_camera_set_string (camera, "TriggerMode", "Off", &error);
checkError(error);
printStatus(camera);
printf("\n");
printf ("9. Change (Off, Line1) to (Off, Freerun)\n");
arv_camera_set_string (camera, "TriggerSource", "Freerun", &error);
checkError(error);
printStatus(camera);
printf("\n");
printf ("10. Change (Off, Freerun) to (Off, Line1)\n");
arv_camera_set_string (camera, "TriggerSource", "Line1", &error);
checkError(error);
printStatus(camera);
printf("\n");
}
void testSuite2(ArvCamera *camera) {
GError *error = NULL;
arv_camera_set_register_cache_policy(camera, ARV_REGISTER_CACHE_POLICY_ENABLE);
printf ("========================================================================\n");
printf ("Test suite 2\n");
printf ("Set cache policy to ARV_REGISTER_CACHE_POLICY_ENABLE\n");
printf ("This shows that with ARV_REGISTER_CACHE_POLICY_ENABLE there are problems\n");
printf ("-We cannot have (TriggerMode, TriggerSource) = (On, Freerun)\n");
printf ("-There are side effects when setting TriggerMode and TriggerSource\n");
printf ("========================================================================\n");
printf ("Trying to set (TriggerMode, TriggerSource) to (On, Freerun)\n");
arv_camera_set_string (camera, "TriggerMode", "On", &error);
checkError(error);
arv_camera_set_string (camera, "TriggerSource", "Freerun", &error);
checkError(error);
printStatus(camera, "On", "Freerun");
printf ("!!! PROBLEM: Setting TriggerSource to Freerun has side effect of changing TriggerMode to Off !!!\n");
printf ("Changing this back to On to continue with test suite\n");
arv_camera_set_string (camera, "TriggerMode", "On", &error);
checkError(error);
printStatus(camera, "On", "Freerun");
printf ("!!! PROBLEM: Setting TriggerMode to On has side effect of changing TriggerSource to Line1 !!!\n");
printf ("Changing this back to Freerun to continue with test suite\n");
arv_camera_set_string (camera, "TriggerSource", "Freerun", &error);
checkError(error);
printStatus(camera, "On", "Freerun");
printf ("!!! PROBLEM: Setting TriggerSource to Freerun has side effect of changing TriggerMode to Off !!!\n");
printf ("!!! PROBLEM: It seems we can't have (On, Freerun) !!!\n");
printf("\n");
printf ("1. Trying to set (On, Line1)\n");
arv_camera_set_string (camera, "TriggerMode", "On", &error);
checkError(error);
arv_camera_set_string (camera, "TriggerSource", "Line1", &error);
checkError(error);
printStatus(camera, "On", "Line1");
printf ("!!! PROBLEM: Setting TriggerSource to Line1 has side effect of changing TriggerMode to Off !!!\n");
printf ("Changing this back to On to continue with test suite\n");
arv_camera_set_string (camera, "TriggerMode", "On", &error);
checkError(error);
printStatus(camera, "On", "Line1");
printf ("So we can have (On, Line1), notwithsanding the side effect above\n");
printf("\n");
printf ("2. Trying to change (On, Line1) to (On, Freerun)\n");
arv_camera_set_string (camera, "TriggerSource", "Freerun", &error);
checkError(error);
printStatus(camera, "On", "Freerun");
printf ("!!! PROBLEM: Setting TriggerSource to Freerun has side effect of changing TriggerMode to Off !!!\n");
printf ("Changing this back to On to continue with test suite\n");
arv_camera_set_string (camera, "TriggerMode", "On", &error);
checkError(error);
printStatus(camera, "On", "Freerun");
printf ("!!! PROBLEM: Setting TriggerMode to On has side effect of changing TriggerSource to Line1 !!!\n");
printf ("!!! PROBLEM: It seems we can't have (On, Freerun) !!!\n");
printf("\n");
printf ("3. Trying to set (Off, Freerun)\n");
arv_camera_set_string (camera, "TriggerMode", "Off", &error);
checkError(error);
arv_camera_set_string (camera, "TriggerSource", "Freerun", &error);
checkError(error);
printStatus(camera);
printf ("So we can have (Off, Freerun)\n");
printf("\n");
printf ("4. Trying to set (Off, Line1)\n");
arv_camera_set_string (camera, "TriggerMode", "Off", &error);
checkError(error);
arv_camera_set_string (camera, "TriggerSource", "Line1", &error);
checkError(error);
printStatus(camera);
printf ("So we can have (off Line1)\n");
printf("\n");
}
int main (int argc, char **argv) {
ArvCamera *camera;
GError *error = NULL;
camera = arv_camera_new ("172.23.240.151", &error);
checkError(error);
testSuite1(camera);
testSuite2(camera);
printf ("Ok\n");
return 0;
}
Describe the bug
Summary
The results we are getting are
To Reproduce
Run the reproducer script. This runs 2 test suites. The first test suite shows that with ARV_REGISTER_CACHE_POLICY_DEBUG there are mistmaches between current and cached values, but arv_camera_set_string works as expected. The second testsuite shows that with ARV_REGISTER_CACHE_POLICY_ENABLE, there are a lot of strange side effects, plus it's not possible to have (On, Freerun).
Expected behavior
We expect that setting TriggerMode have no side effect on TriggerSource and vice versa even with ARV_REGISTER_CACHE_POLICY_ENABLE
Camera description:
Platform description:
Additional context
Add any other context about the problem here.