static GType arv_gc_register_node_get_value_type (ArvGcFeatureNode *node) { ArvGcRegisterNode *gc_register_node = ARV_GC_REGISTER_NODE (node); return gc_register_node->value_type; }
static guint64 arv_gc_register_node_get_length (ArvGcRegister *gc_register, GError **error) { ArvGcRegisterNode *gc_register_node = ARV_GC_REGISTER_NODE (gc_register); return _get_length (gc_register_node, error); }
static void arv_gc_struct_entry_node_set_integer_value (ArvGcInteger *gc_integer, gint64 value, GError **error) { ArvGcStructEntryNode *struct_entry = ARV_GC_STRUCT_ENTRY_NODE (gc_integer); ArvDomNode *struct_register; GError *local_error = NULL; guint lsb; guint msb; struct_register = arv_dom_node_get_parent_node (ARV_DOM_NODE (gc_integer)); if (!ARV_IS_GC_REGISTER_NODE (struct_register)) return; lsb = _get_lsb (struct_entry, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } msb = _get_msb (struct_entry, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } arv_gc_register_node_set_masked_integer_value (ARV_GC_REGISTER_NODE (struct_register), lsb, msb, value, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } }
static void arv_gc_register_node_finalize (GObject *object) { ArvGcRegisterNode *gc_register_node = ARV_GC_REGISTER_NODE (object); g_slist_free (gc_register_node->addresses); g_slist_free (gc_register_node->swiss_knives); g_free (gc_register_node->cache); g_slist_free (gc_register_node->invalidators); parent_class->finalize (object); }
static const char * arv_gc_register_node_get_value_as_string (ArvGcFeatureNode *node, GError **error) { ArvGcRegisterNode *gc_register_node = ARV_GC_REGISTER_NODE (node); GError *local_error = NULL; const char *string; switch (gc_register_node->value_type) { case G_TYPE_INT64: g_snprintf (gc_register_node->v_string, G_ASCII_DTOSTR_BUF_SIZE, "0x%08" G_GINT64_MODIFIER "x", arv_gc_integer_get_value (ARV_GC_INTEGER (node), &local_error)); if (local_error != NULL) { g_propagate_error (error, local_error); return NULL; } return gc_register_node->v_string; case G_TYPE_DOUBLE: g_ascii_dtostr (gc_register_node->v_string, G_ASCII_DTOSTR_BUF_SIZE, arv_gc_float_get_value (ARV_GC_FLOAT (node), &local_error)); if (local_error != NULL) { g_propagate_error (error, local_error); return NULL; } return gc_register_node->v_string; case G_TYPE_STRING: string = arv_gc_string_get_value (ARV_GC_STRING (node), &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return NULL; } return string; default: break; } arv_warning_genicam ("[GcRegisterNode::get_value_as_string] Invalid value type"); return NULL; }
static void arv_gc_struct_entry_node_set_integer_value (ArvGcInteger *gc_integer, gint64 value) { ArvGcStructEntryNode *struct_entry = ARV_GC_STRUCT_ENTRY_NODE (gc_integer); ArvDomNode *struct_register; guint lsb; guint msb; struct_register = arv_dom_node_get_parent_node (ARV_DOM_NODE (gc_integer)); if (!ARV_IS_GC_REGISTER_NODE (struct_register)) return; lsb = _get_lsb (struct_entry); msb = _get_msb (struct_entry); arv_gc_register_node_set_masked_integer_value (ARV_GC_REGISTER_NODE (struct_register), lsb, msb, value); }
static void arv_gc_register_node_set (ArvGcRegister *gc_register, void *buffer, guint64 length, GError **error) { ArvGcRegisterNode *gc_register_node = ARV_GC_REGISTER_NODE (gc_register); GError *local_error = NULL; if (gc_register_node->cache_size > length) { memcpy (gc_register_node->cache, buffer, length); memset (gc_register_node->cache + length, 0, gc_register_node->cache_size - length); } else memcpy (gc_register_node->cache, buffer, gc_register_node->cache_size); _write_cache (gc_register_node, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } arv_log_genicam ("[GcRegisterNode::set] 0x%Lx,%Ld", _get_address (gc_register_node, NULL), length); }
static void arv_gc_register_node_set_value_from_string (ArvGcFeatureNode *node, const char *string, GError **error) { ArvGcRegisterNode *gc_register_node = ARV_GC_REGISTER_NODE (node); switch (gc_register_node->value_type) { case G_TYPE_INT64: arv_gc_integer_set_value (ARV_GC_INTEGER (node), g_ascii_strtoll (string, NULL, 0), error); break; case G_TYPE_DOUBLE: arv_gc_float_set_value (ARV_GC_FLOAT (node), g_ascii_strtod (string, NULL), error); break; case G_TYPE_STRING: arv_gc_string_set_value (ARV_GC_STRING (node), string, error); break; default: break; } arv_warning_genicam ("[GcRegisterNode::set_value_from_string] Invalid value type"); }
static const char * arv_gc_register_node_get_node_name (ArvDomNode *node) { ArvGcRegisterNode *gc_register_node = ARV_GC_REGISTER_NODE (node); switch (gc_register_node->type) { case ARV_GC_REGISTER_NODE_TYPE_REGISTER: return "Register"; case ARV_GC_REGISTER_NODE_TYPE_INTEGER: return "IntReg"; case ARV_GC_REGISTER_NODE_TYPE_MASKED_INTEGER: return "MaskedIntReg"; case ARV_GC_REGISTER_NODE_TYPE_FLOAT: return "FloatReg"; case ARV_GC_REGISTER_NODE_TYPE_STRING: return "StringReg"; case ARV_GC_REGISTER_NODE_TYPE_STRUCT_REGISTER: return "StuctReg"; } return NULL; }
static void arv_gc_register_node_post_new_child (ArvDomNode *self, ArvDomNode *child) { ArvGcRegisterNode *node = ARV_GC_REGISTER_NODE (self); if (ARV_IS_GC_PROPERTY_NODE (child)) { ArvGcPropertyNode *property_node = ARV_GC_PROPERTY_NODE (child); switch (arv_gc_property_node_get_node_type (property_node)) { case ARV_GC_PROPERTY_NODE_TYPE_ADDRESS: case ARV_GC_PROPERTY_NODE_TYPE_P_ADDRESS: node->addresses = g_slist_prepend (node->addresses, child); break; case ARV_GC_PROPERTY_NODE_TYPE_P_INDEX: node->index = property_node; break; case ARV_GC_PROPERTY_NODE_TYPE_LENGTH: case ARV_GC_PROPERTY_NODE_TYPE_P_LENGTH: node->length = property_node; break; case ARV_GC_PROPERTY_NODE_TYPE_P_PORT: node->port = property_node; break; case ARV_GC_PROPERTY_NODE_TYPE_ACCESS_MODE: /* TODO */ node->access_mode = property_node; break; case ARV_GC_PROPERTY_NODE_TYPE_CACHABLE: node->cachable = property_node; break; case ARV_GC_PROPERTY_NODE_TYPE_POLLING_TIME: /* TODO */ node->polling_time = property_node; break; case ARV_GC_PROPERTY_NODE_TYPE_ENDIANESS: node->endianess = property_node; break; case ARV_GC_PROPERTY_NODE_TYPE_SIGN: /* TODO */ node->sign = property_node; break; case ARV_GC_PROPERTY_NODE_TYPE_LSB: node->lsb = property_node; break; case ARV_GC_PROPERTY_NODE_TYPE_MSB: node->msb = property_node; break; case ARV_GC_PROPERTY_NODE_TYPE_BIT: node->msb = property_node; node->lsb = property_node; break; case ARV_GC_PROPERTY_NODE_TYPE_P_INVALIDATOR: node->invalidators = g_slist_prepend (node->invalidators, property_node); break; default: ARV_DOM_NODE_CLASS (parent_class)->post_new_child (self, child); break; } } else if (ARV_IS_GC_SWISS_KNIFE (child)) node->swiss_knives = g_slist_prepend (node->swiss_knives, child); else ARV_DOM_NODE_CLASS (parent_class)->post_new_child (self, child); }