static guint64 arv_gc_register_node_get_address (ArvGcRegister *gc_register, GError **error) { ArvGcRegisterNode *gc_register_node = ARV_GC_REGISTER_NODE (gc_register); return _get_address (gc_register_node, error); }
static void _read_cache (ArvGcRegisterNode *gc_register_node, GError **error) { GError *local_error = NULL; ArvGcNode *port; gboolean cachable; gint64 address; if (gc_register_node->is_cache_valid == TRUE) { arv_log_genicam ("[GcRegisterNode::read_cache] Cache is valid"); return; } port = arv_gc_property_node_get_linked_node (gc_register_node->port); if (!ARV_IS_GC_PORT (port)) return; _update_cache_size (gc_register_node, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } address = _get_address (gc_register_node, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } arv_gc_port_read (ARV_GC_PORT (port), gc_register_node->cache, address, gc_register_node->cache_size, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } cachable = _get_cachable (gc_register_node, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } if (cachable != ARV_GC_CACHABLE_NO_CACHE) gc_register_node->is_cache_valid = TRUE; else gc_register_node->is_cache_valid = FALSE; }
static void _write_cache (ArvGcRegisterNode *gc_register_node, GError **error) { GError *local_error = NULL; gint64 address; gboolean cachable; ArvGcNode *port; arv_gc_feature_node_inc_modification_count (ARV_GC_FEATURE_NODE (gc_register_node)); port = arv_gc_property_node_get_linked_node (gc_register_node->port); if (!ARV_IS_GC_PORT (port)) return; _update_cache_size (gc_register_node, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } address = _get_address (gc_register_node, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } arv_gc_port_write (ARV_GC_PORT (port), gc_register_node->cache, address, gc_register_node->cache_size, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } cachable = _get_cachable (gc_register_node, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); return; } if (cachable == ARV_GC_CACHABLE_WRITE_TRHOUGH) gc_register_node->is_cache_valid = TRUE; else gc_register_node->is_cache_valid = FALSE; }
int _get(ng_netdev_t *dev, netopt_t opt, void *value, size_t max_len) { (void)dev; switch (opt) { case NETOPT_ADDRESS: return _get_address(value, max_len); case NETOPT_CHANNEL: return _get_channel(value, max_len); case NETOPT_NID: return _get_pan(value, max_len); case NETOPT_TX_POWER: return _get_txpower(value, max_len); case NETOPT_STATE: return _get_state(value, max_len); default: return -ENOTSUP; } }
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); }
} #if G_BYTE_ORDER == G_LITTLE_ENDIAN if (msb - lsb < 63) mask = ((((guint64) 1) << (msb - lsb + 1)) - 1) << lsb; else mask = G_MAXUINT64; value = (value & mask) >> lsb; #else g_assert_not_reached (); #endif } arv_log_genicam ("[GcRegisterNode::_get_integer_value] address = 0x%Lx, value = 0x%Lx", _get_address (gc_register_node, NULL), value); return value; } gint64 arv_gc_register_node_get_masked_integer_value (ArvGcRegisterNode *gc_register_node, guint lsb, guint msb, GError **error) { g_return_val_if_fail (ARV_IS_GC_REGISTER_NODE (gc_register_node), 0); g_return_val_if_fail (error == NULL || *error == NULL, 0); return _get_integer_value (gc_register_node, lsb, msb, error); } static gint64 arv_gc_register_node_get_integer_value (ArvGcInteger *gc_integer, GError **error)
void * get_non_null_address(void) { return _get_address(FALSE); }
void * get_address(void) { return _get_address(TRUE); }