📄 ports.c
字号:
/*************************************************************************** ports.c -- manage the connection description of SPM ------------------- begin : 2002 authors : Silvio Boehler emails : sboehler@student.ethz.ch ***************************************************************************//*************************************************************************** Changes ------- date - name - description12.09.2002 - silvio - begin work **************************************************************************//*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************//** * includes: */#include "system.h"#include "debugging.h"#include "memory.h"#include "parameter_types.h"/** * The interface for this file */#include "ports.h"/** * Debug level */#define DBG_LVL 4//-------------------------------------------------------------------// INTERFACE FUNCTIONS//-------------------------------------------------------------------/** * Initialize a ports description. */int init_ports_desc(swr_ports_desc_t *desc, int nbr_ports) { if (!desc) { PR_DBG(0, "init_ports_desc: desc == NULL\n"); return -1; } if (nbr_ports > 0) desc->ports = (swr_port_desc_t *)swr_malloc(sizeof(swr_port_desc_t[nbr_ports])); desc->nbr_ports = 0; desc->max_nbr_ports = nbr_ports; desc->complete = (desc->nbr_ports == desc->max_nbr_ports); return 0;}/** * Finalize a ports description. * * @param desc The description which should be finalized. The desc * itself is not freed! * * @return Returns 0 for success, a negative number for error. */int finalize_ports_desc(swr_ports_desc_t *desc) { if (!desc) { PR_DBG(0, "free_ports_desc: Can't free pointer to 0\n"); return -1; } if (desc->max_nbr_ports > 0 && swr_free(desc->ports)) { PR_DBG(0, "free_ports_desc: Can't free desc\n"); return -2; } desc->max_nbr_ports = 0; desc->nbr_ports = 0; return 0;}/** * Add a port description to a swr_ports_desc_t. */int add_port(swr_ports_desc_t *desc, swr_signal_type_t signal_type, unsigned long flags) { if (!desc) { PR_DBG(0, "add_port: desc == NULL\n"); return -1; } if (desc->complete) { PR_DBG(0, "add_port: desc already complete, couldn't add port\n"); return -2; } desc->ports[desc->nbr_ports].signal_type = signal_type; desc->ports[desc->nbr_ports].flags = flags; desc->complete = (desc->max_nbr_ports == ++desc->nbr_ports); return 0;}/** * Check whether the ports description is complete. */inline int ports_desc_complete(const swr_ports_desc_t desc) { return desc.complete;}/** * Get the signal type of the specified port in the ports description. */inline swr_signal_type_t get_signal_type(swr_ports_desc_t desc, int port_nbr) { if (port_nbr < 0 || port_nbr > desc.max_nbr_ports) { PR_DBG(0, "get_signal_type: port %i doesn't exist\n", port_nbr); return NO_SIGNAL; } return desc.ports[port_nbr].signal_type;}/** * Get the signal type size */inline int get_signal_type_size( swr_signal_type_t type ) { switch ( type ) { case SIG_U8: return 1; case SIG_SYMBOL_S16: return 2; case SIG_SYMBOL_COMPLEX: return 4; case SIG_SYMBOL_COMPLEX_S32: return 8; case SIG_QUAD_SYMBOL_ICS_AD: return 8 * 4 * 2; case SIG_SYMBOL_MMX: return 8; case SIG_SAMPLE_S12: return 2; case SIG_S32: return 4; case SIG_DOUBLE: return sizeof( double ); case SIG_DOUBLE_COMPLEX: return sizeof( double_complex ); default: return 0; }}/** * Get the signal size for 1 element */inline int get_signal_size(swr_ports_desc_t desc, int port_nbr) { if (port_nbr < 0 || port_nbr > desc.max_nbr_ports) { PR_DBG(0, "get_signal_type: port %i doesn't exist\n", port_nbr); return 0; } return get_signal_type_size( desc.ports[port_nbr].signal_type );}/** * Get the flags of the specified port in the ports description. */inline unsigned long get_flags(swr_ports_desc_t desc, int port_nbr) { if (port_nbr < 0 || port_nbr > desc.max_nbr_ports) { PR_DBG(0, "get_signal_type: port %i doesn't exist\n", port_nbr); return NO_SIGNAL; } return desc.ports[port_nbr].flags;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -