[aravis/wip/emmanuel/bigendian] genicam: bigendian support
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [aravis/wip/emmanuel/bigendian] genicam: bigendian support
- Date: Sat, 2 May 2015 17:29:53 +0000 (UTC)
commit 0cfce0245a310ec96ecefc7002aa4614528a689c
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Sat May 2 19:29:15 2015 +0200
genicam: bigendian support
src/arvgcregisternode.c | 23 +++++++++++++++++++++--
1 files changed, 21 insertions(+), 2 deletions(-)
---
diff --git a/src/arvgcregisternode.c b/src/arvgcregisternode.c
index 5d40c8b..48e2da9 100644
--- a/src/arvgcregisternode.c
+++ b/src/arvgcregisternode.c
@@ -713,6 +713,10 @@ _get_integer_value (ArvGcRegisterNode *gc_register_node, guint register_lsb, gui
lsb = 8 * gc_register_node->cache_size - register_lsb - 1;
msb = 8 * gc_register_node->cache_size - register_msb - 1;
}
+ arv_log_genicam ("[GcRegisterNode::_get_integer_value] reglsb = %d, regmsb, %d, lsb = %d, msb
= %d",
+ register_lsb, register_msb, lsb, msb);
+ arv_log_genicam ("[GcRegisterNode::_get_integer_value] value = 0x%08Lx", value);
+
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
if (msb - lsb < 63)
@@ -722,8 +726,14 @@ _get_integer_value (ArvGcRegisterNode *gc_register_node, guint register_lsb, gui
value = (value & mask) >> lsb;
#else
- g_assert_not_reached ();
+ if (lsb - msb < 63)
+ mask = ((((guint64) 1) << (lsb - msb + 1)) - 1) << msb;
+ else
+ mask = G_MAXUINT64;
+
+ value = (value & mask) >> lsb;
#endif
+ arv_log_genicam ("[GcRegisterNode::_get_integer_value] mask = 0x%08Lx", mask);
}
arv_log_genicam ("[GcRegisterNode::_get_integer_value] address = 0x%Lx, value = 0x%Lx",
@@ -802,6 +812,9 @@ _set_integer_value (ArvGcRegisterNode *gc_register_node, guint register_lsb, gui
lsb = 8 * gc_register_node->cache_size - register_lsb - 1;
msb = 8 * gc_register_node->cache_size - register_msb - 1;
}
+ arv_log_genicam ("[GcRegisterNode::_get_integer_value] reglsb = %d, regmsb, %d, lsb = %d, msb
= %d",
+ register_lsb, register_msb, lsb, msb);
+ arv_log_genicam ("[GcRegisterNode::_get_integer_value] value = 0x%08Lx", value);
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
if (msb - lsb < 63)
@@ -811,8 +824,14 @@ _set_integer_value (ArvGcRegisterNode *gc_register_node, guint register_lsb, gui
value = ((value << lsb) & mask) | (current_value & ~mask);
#else
- g_assert_not_reached ();
+ if (lsb - msb < 63)
+ mask = ((((guint64) 1) << (lsb - msb + 1)) - 1) << msb;
+ else
+ mask = G_MAXUINT64;
+
+ value = ((value << msb) & mask) | (current_value & ~mask);
#endif
+ arv_log_genicam ("[GcRegisterNode::_get_integer_value] mask = 0x%08Lx", mask);
}
arv_log_genicam ("[GcRegisterNode::_set_integer_value] address = 0x%Lx, value = 0x%Lx",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]