[aravis] genicam: begin work on invalidators.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [aravis] genicam: begin work on invalidators.
- Date: Sun, 4 Apr 2010 14:50:18 +0000 (UTC)
commit 84f85a2087563f02294bb1c5080122bb567c2b7d
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Sun Apr 4 16:49:48 2010 +0200
genicam: begin work on invalidators.
src/arvenums.h | 8 ++++----
src/arvgcregister.c | 45 ++++++++++++++++++++++++++++++++++-----------
src/arvgcregister.h | 7 +++++--
3 files changed, 43 insertions(+), 17 deletions(-)
---
diff --git a/src/arvenums.h b/src/arvenums.h
index f591728..27ef375 100644
--- a/src/arvenums.h
+++ b/src/arvenums.h
@@ -40,10 +40,10 @@ typedef enum {
} ArvGcAccessMode;
typedef enum {
- ARV_GC_CACHEABLE_NO_CACHE,
- ARV_GC_CACHEABLE_WRITE_TRHOUGH,
- ARV_GC_CACHEABLE_WRITE_AROUND
-} ArvGcCacheable;
+ ARV_GC_CACHABLE_NO_CACHE,
+ ARV_GC_CACHABLE_WRITE_TRHOUGH,
+ ARV_GC_CACHABLE_WRITE_AROUND
+} ArvGcCachable;
G_END_DECLS
diff --git a/src/arvgcregister.c b/src/arvgcregister.c
index e38f2d0..326a36d 100644
--- a/src/arvgcregister.c
+++ b/src/arvgcregister.c
@@ -30,6 +30,11 @@
#include <stdlib.h>
#include <string.h>
+typedef struct {
+ char *node;
+ gint modification_count;
+} ArvGcInvalidator;
+
static GObjectClass *parent_class = NULL;
/* ArvGcNode implementation */
@@ -40,10 +45,11 @@ arv_gc_register_add_element (ArvGcNode *node, const char *name, const char *cont
ArvGcRegister *gc_register = ARV_GC_REGISTER (node);
if (strcmp (name, "Address") == 0) {
- gc_register->addresses = g_list_prepend (gc_register->addresses,
- arv_new_g_value_int64 (g_ascii_strtoull (content, NULL, 0)));
+ gc_register->addresses = g_slist_prepend (gc_register->addresses,
+ arv_new_g_value_int64 (g_ascii_strtoull (content,
+ NULL, 0)));
} else if (strcmp (name, "pAddress") == 0) {
- gc_register->addresses = g_list_prepend (gc_register->addresses, arv_new_g_value_string (content));
+ gc_register->addresses = g_slist_prepend (gc_register->addresses, arv_new_g_value_string (content));
} else if (strcmp (name, "Length") == 0) {
arv_force_g_value_to_int64 (&gc_register->length, g_ascii_strtoull (content, NULL, 0));
} else if (strcmp (name, "pLength") == 0) {
@@ -55,13 +61,20 @@ arv_gc_register_add_element (ArvGcNode *node, const char *name, const char *cont
gc_register->access_mode = ARV_GC_ACCESS_MODE_RO;
else if (g_strcmp0 (content, "WO") == 0)
gc_register->access_mode = ARV_GC_ACCESS_MODE_WO;
- } else if (strcmp (name, "Cacheable") == 0) {
+ } else if (strcmp (name, "Cachable") == 0) {
if (g_strcmp0 (content, "NoCache") == 0)
- gc_register->cacheable = ARV_GC_CACHEABLE_NO_CACHE;
+ gc_register->cachable = ARV_GC_CACHABLE_NO_CACHE;
else if (g_strcmp0 (content, "WriteAround") == 0)
- gc_register->cacheable = ARV_GC_CACHEABLE_WRITE_AROUND;
+ gc_register->cachable = ARV_GC_CACHABLE_WRITE_AROUND;
else if (g_strcmp0 (content, "WriteThrough") == 0)
- gc_register->cacheable = ARV_GC_CACHEABLE_WRITE_TRHOUGH;
+ gc_register->cachable = ARV_GC_CACHABLE_WRITE_TRHOUGH;
+ } else if (strcmp (name, "pInvalidator") == 0) {
+ ArvGcInvalidator *invalidator = g_new (ArvGcInvalidator, 1);
+
+ invalidator->node = g_strdup (content);
+ invalidator->modification_count = 0;
+
+ gc_register->invalidators = g_slist_prepend (gc_register->invalidators, invalidator);
} else if (strcmp (name, "pPort") == 0) {
g_free (gc_register->port_name);
gc_register->port_name = g_strdup (content);
@@ -184,7 +197,7 @@ guint64
arv_gc_register_get_address (ArvGcRegister *gc_register)
{
ArvGc *genicam;
- GList *iter;
+ GSList *iter;
guint64 value = 0;
g_return_val_if_fail (ARV_IS_GC_REGISTER (gc_register), 0);
@@ -284,27 +297,37 @@ arv_gc_register_init (ArvGcRegister *gc_register)
g_value_init (&gc_register->length, G_TYPE_INT64);
g_value_set_int64 (&gc_register->length, 4);
gc_register->access_mode = ARV_GC_ACCESS_MODE_RO;
- gc_register->cacheable = ARV_GC_CACHEABLE_NO_CACHE;
+ gc_register->cachable = ARV_GC_CACHABLE_NO_CACHE;
gc_register->cache = g_malloc0(4);
gc_register->cache_size = 4;
gc_register->endianess = G_LITTLE_ENDIAN;
gc_register->msb = 31;
gc_register->lsb = 0;
+ gc_register->invalidators = NULL;
+ gc_register->is_cache_valid = FALSE;
}
static void
arv_gc_register_finalize (GObject *object)
{
ArvGcRegister *gc_register = ARV_GC_REGISTER (object);
- GList *iter;
+ GSList *iter;
for (iter = gc_register->addresses; iter != NULL; iter = iter->next)
arv_free_g_value (iter->data);
- g_list_free (gc_register->addresses);
+ g_slist_free (gc_register->addresses);
g_value_unset (&gc_register->length);
g_free (gc_register->port_name);
g_free (gc_register->cache);
+ for (iter = gc_register->invalidators; iter != NULL; iter = iter->next) {
+ ArvGcInvalidator *invalidator = iter->data;
+
+ g_free (invalidator->node);
+ g_free (invalidator);
+ }
+ g_slist_free (gc_register->addresses);
+
parent_class->finalize (object);
}
diff --git a/src/arvgcregister.h b/src/arvgcregister.h
index 49280bc..27e2b15 100644
--- a/src/arvgcregister.h
+++ b/src/arvgcregister.h
@@ -56,10 +56,10 @@ struct _ArvGcRegister {
ArvGcRegisterType type;
GType value_type;
- GList *addresses;
+ GSList *addresses;
GValue length;
ArvGcAccessMode access_mode;
- ArvGcCacheable cacheable;
+ ArvGcCachable cachable;
guint64 polling_time;
char *port_name;
guint endianess;
@@ -69,6 +69,9 @@ struct _ArvGcRegister {
void *cache;
size_t cache_size;
+ gboolean is_cache_valid;
+
+ GSList *invalidators;
};
struct _ArvGcRegisterClass {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]