⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 halcmd.c

📁 Source code for an Numeric Cmputer
💻 C
📖 第 1 页 / 共 5 页
字号:
    rtapi_mutex_get(&(hal_data->mutex));    /* check if the pins are there */    first_pin = halpr_find_pin_by_name(first_pin_name);    second_pin = halpr_find_pin_by_name(second_pin_name);    if (first_pin == 0) {	/* first pin not found*/	rtapi_mutex_give(&(hal_data->mutex));	rtapi_print_msg(RTAPI_MSG_ERR,	    "HAL:%d: ERROR: pin '%s' not found\n", linenumber, first_pin_name);	return HAL_INVAL;     } else if (second_pin == 0) {	rtapi_mutex_give(&(hal_data->mutex));	rtapi_print_msg(RTAPI_MSG_ERR,	    "HAL:%d: ERROR: pin '%s' not found\n", linenumber, second_pin_name);	return HAL_INVAL;     }        /* give the mutex, as the other functions use their own mutex */    rtapi_mutex_give(&(hal_data->mutex));        /* check that both pins have the same type,        don't want ot create a sig, which after that won't be usefull */    if (first_pin->type != second_pin->type) {	rtapi_print_msg(RTAPI_MSG_ERR,	    "HAL:%d: ERROR: pins '%s' and '%s' not of the same type\n", linenumber, first_pin_name, second_pin_name);	return HAL_INVAL;     }	    /* now create the signal */    retval = hal_signal_new(first_pin_name, first_pin->type);    if (retval == HAL_SUCCESS) {	/* if it worked, link the pins to it */	retval = hal_link(first_pin_name, first_pin_name);	if ( retval == HAL_SUCCESS ) {	/* if that worked, link the second pin to the new signal */	    retval = hal_link(second_pin_name, first_pin_name);	}    }    if (retval != HAL_SUCCESS) {	rtapi_print_msg(RTAPI_MSG_ERR,"HAL:%d: linkpp failed\n", linenumber);    }    return retval;}static int do_link_cmd(char *pin, char *sig){    int retval;    /* if sig is blank, want to unlink pin */    if (*sig == '\0') {	/* tell hal_link() to unlink the pin */	sig = NULL;    }    /* make the link */    retval = hal_link(pin, sig);    if (retval == 0) {	/* print success message */	if (sig != NULL) {	    rtapi_print_msg(RTAPI_MSG_INFO,		"Pin '%s' linked to signal '%s'\n", pin, sig);	} else {	    rtapi_print_msg(RTAPI_MSG_INFO, "Pin '%s' unlinked\n", pin);	}    } else {	rtapi_print_msg(RTAPI_MSG_ERR,"HAL:%d: link failed\n", linenumber);    }    return retval;}static int do_newsig_cmd(char *name, char *type){    int retval;    if (strcasecmp(type, "bit") == 0) {	retval = hal_signal_new(name, HAL_BIT);    } else if (strcasecmp(type, "float") == 0) {	retval = hal_signal_new(name, HAL_FLOAT);    } else if (strcasecmp(type, "u8") == 0) {	retval = hal_signal_new(name, HAL_U8);    } else if (strcasecmp(type, "s8") == 0) {	retval = hal_signal_new(name, HAL_S8);    } else if (strcasecmp(type, "u16") == 0) {	retval = hal_signal_new(name, HAL_U16);    } else if (strcasecmp(type, "s16") == 0) {	retval = hal_signal_new(name, HAL_S16);    } else if (strcasecmp(type, "u32") == 0) {	retval = hal_signal_new(name, HAL_U32);    } else if (strcasecmp(type, "s32") == 0) {	retval = hal_signal_new(name, HAL_S32);    } else {	rtapi_print_msg(RTAPI_MSG_ERR, "HAL:%d: Unknown signal type '%s'\n", linenumber, type);	retval = HAL_INVAL;    }    if (retval != HAL_SUCCESS) {	rtapi_print_msg(RTAPI_MSG_ERR,"HAL:%d: newsig failed\n", linenumber);    }    return retval;}static int do_setp_cmd(char *name, char *value){    int retval;    hal_param_t *param;    hal_type_t type;    void *d_ptr;    char *cp;    float fval;    long lval;    unsigned long ulval;    rtapi_print_msg(RTAPI_MSG_DBG, "HAL: setting parameter '%s' to '%s'\n", name, value);    cp = value;    /* get mutex before accessing shared data */    rtapi_mutex_get(&(hal_data->mutex));    /* search param list for name */    param = halpr_find_param_by_name(name);    if (param == 0) {	rtapi_mutex_give(&(hal_data->mutex));	rtapi_print_msg(RTAPI_MSG_ERR,	    "HAL:%d: ERROR: parameter '%s' not found\n", linenumber, name);	return HAL_INVAL;    }    /* found it */    type = param->type;    /* is it writable? */    if (param->dir == HAL_RD) {	rtapi_mutex_give(&(hal_data->mutex));	rtapi_print_msg(RTAPI_MSG_ERR,	    "HAL:%d: ERROR: param '%s' is not writable\n", linenumber, name);	return HAL_INVAL;    }    d_ptr = SHMPTR(param->data_ptr);    retval = 0;    switch (type) {    case HAL_BIT:	if ((strcmp("1", value) == 0) || (strcasecmp("TRUE", value) == 0)) {	    *(hal_bit_t *) (d_ptr) = 1;	} else if ((strcmp("0", value) == 0)	    || (strcasecmp("FALSE", value)) == 0) {	    *(hal_bit_t *) (d_ptr) = 0;	} else {	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for bit parameter\n", linenumber, value);	    retval = HAL_INVAL;	}	break;    case HAL_FLOAT:	fval = strtod ( value, &cp );	if ((*cp != '\0') && (!isspace(*cp))) {	    /* invalid character(s) in string */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for float parameter\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_float_t *) (d_ptr)) = fval;	}	break;    case HAL_S8:	lval = strtol(value, &cp, 0);	if (((*cp != '\0') && (!isspace(*cp))) || (lval > 127) || (lval < -128)) {	    /* invalid chars in string, or outside limits of S8 */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for S8 parameter\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_s8_t *) (d_ptr)) = lval;	}	break;    case HAL_U8:	ulval = strtoul(value, &cp, 0);	if (((*cp != '\0') && (!isspace(*cp))) || (ulval > 255)) {	    /* invalid chars in string, or outside limits of U8 */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for U8 parameter\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_u8_t *) (d_ptr)) = ulval;	}	break;    case HAL_S16:	lval = strtol(value, &cp, 0);	if (((*cp != '\0') && (!isspace(*cp))) || (lval > 32767) || (lval < -32768)) {	    /* invalid chars in string, or outside limits of S16 */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for S16 parameter\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_s16_t *) (d_ptr)) = lval;	}	break;    case HAL_U16:	ulval = strtoul(value, &cp, 0);	if (((*cp != '\0') && (!isspace(*cp))) || (ulval > 65535)) {	    /* invalid chars in string, or outside limits of U16 */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for U16 parameter\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_u16_t *) (d_ptr)) = ulval;	}	break;    case HAL_S32:	lval = strtol(value, &cp, 0);	if ((*cp != '\0') && (!isspace(*cp))) {	    /* invalid chars in string */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for S32 parameter\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_s32_t *) (d_ptr)) = lval;	}	break;    case HAL_U32:	ulval = strtoul(value, &cp, 0);	if ((*cp != '\0') && (!isspace(*cp))) {	    /* invalid chars in string */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for U32 parameter\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_u32_t *) (d_ptr)) = ulval;	}	break;    default:	/* Shouldn't get here, but just in case... */	rtapi_print_msg(RTAPI_MSG_ERR,	    "HAL:%d: ERROR: bad type %d setting param '%s'\n", linenumber, type, name);	retval = HAL_INVAL;    }    rtapi_mutex_give(&(hal_data->mutex));    if (retval == 0) {	/* print success message */	rtapi_print_msg(RTAPI_MSG_INFO,	    "Parameter '%s' set to %s\n", name, value);    } else {	rtapi_print_msg(RTAPI_MSG_ERR,"HAL:%d: setp failed\n", linenumber);    }    return retval;}static int do_getp_cmd(char *name){    hal_param_t *param;    hal_type_t type;    void *d_ptr;    rtapi_print_msg(RTAPI_MSG_DBG, "HAL: getting parameter '%s'\n", name);    /* get mutex before accessing shared data */    rtapi_mutex_get(&(hal_data->mutex));    /* search param list for name */    param = halpr_find_param_by_name(name);    if (param == 0) {	rtapi_mutex_give(&(hal_data->mutex));	rtapi_print_msg(RTAPI_MSG_ERR,	    "HAL:%d: ERROR: parameter '%s' not found\n", linenumber, name);	return HAL_INVAL;    }    /* found it */    type = param->type;    d_ptr = SHMPTR(param->data_ptr);    rtapi_print("%s\n", data_value2((int) type, d_ptr));    rtapi_mutex_give(&(hal_data->mutex));    return HAL_SUCCESS;}static int do_sets_cmd(char *name, char *value){    int retval;    hal_sig_t *sig;    hal_type_t type;    void *d_ptr;    char *cp;    float fval;    long lval;    unsigned long ulval;    rtapi_print_msg(RTAPI_MSG_DBG, "HAL: setting signal '%s'\n", name);    cp = value;    /* get mutex before accessing shared data */    rtapi_mutex_get(&(hal_data->mutex));    /* search signal list for name */    sig = halpr_find_sig_by_name(name);    if (sig == 0) {	rtapi_mutex_give(&(hal_data->mutex));	rtapi_print_msg(RTAPI_MSG_ERR,	    "HAL:%d: ERROR: signal '%s' not found\n", linenumber, name);	return HAL_INVAL;    }    /* found it - does it have a writer? */    if (sig->writers > 0) {	rtapi_mutex_give(&(hal_data->mutex));	rtapi_print_msg(RTAPI_MSG_ERR,	    "HAL:%d: ERROR: signal '%s' already has writer(s)\n", linenumber, name);	return HAL_INVAL;    }    /* no writer, so we can safely set it */    type = sig->type;    d_ptr = SHMPTR(sig->data_ptr);    retval = 0;    switch (type) {    case HAL_BIT:	if ((strcmp("1", value) == 0) || (strcasecmp("TRUE", value) == 0)) {	    *(hal_bit_t *) (d_ptr) = 1;	} else if ((strcmp("0", value) == 0)	    || (strcasecmp("FALSE", value)) == 0) {	    *(hal_bit_t *) (d_ptr) = 0;	} else {	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for bit signal\n", linenumber, value);	    retval = HAL_INVAL;	}	break;    case HAL_FLOAT:	fval = strtod(value, &cp);	if (*cp != '\0') {	    /* invalid chars in string */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for float signal\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_float_t *) (d_ptr)) = fval;	}	break;    case HAL_S8:	lval = strtol(value, &cp, 0);	if ((*cp != '\0') || (lval > 127) || (lval < -128)) {	    /* invalid chars in string, or outside limits of S8 */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for S8 signal\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_s8_t *) (d_ptr)) = lval;	}	break;    case HAL_U8:	ulval = strtoul(value, &cp, 0);	if ((*cp != '\0') || (ulval > 255)) {	    /* invalid chars in string, or outside limits of U8 */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for U8 signal\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_u8_t *) (d_ptr)) = ulval;	}	break;    case HAL_S16:	lval = strtol(value, &cp, 0);	if ((*cp != '\0') || (lval > 32767) || (lval < -32768)) {	    /* invalid chars in string, or outside limits of S16 */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for S16 signal\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_s16_t *) (d_ptr)) = lval;	}	break;    case HAL_U16:	ulval = strtoul(value, &cp, 0);	if ((*cp != '\0') || (ulval > 65535)) {	    /* invalid chars in string, or outside limits of U16 */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for U16 signal\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_u16_t *) (d_ptr)) = ulval;	}	break;    case HAL_S32:	lval = strtol(value, &cp, 0);	if (*cp != '\0') {	    /* invalid chars in string */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for S32 signal\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_s32_t *) (d_ptr)) = lval;	}	break;    case HAL_U32:	ulval = strtoul(value, &cp, 0);	if (*cp != '\0') {	    /* invalid chars in string */	    rtapi_print_msg(RTAPI_MSG_ERR,		"HAL:%d: ERROR: value '%s' invalid for U32 signal\n", linenumber, value);	    retval = HAL_INVAL;	} else {	    *((hal_u32_t *) (d_ptr)) = ulval;	}	break;    default:	/* Shouldn't get here, but just in case... */	rtapi_print_msg(RTAPI_MSG_ERR,	    "HAL:%d: ERROR: bad type %d setting signal '%s'\n", linenumber, type, name);	retval = HAL_INVAL;    }    rtapi_mutex_give(&(hal_data->mutex));    if (retval == 0) {	/* print success message */	rtapi_print_msg(RTAPI_MSG_INFO,	    "Signal '%s' set to %s\n", name, value);    } else {	rtapi_print_msg(RTAPI_MSG_ERR,"HAL:%d: sets failed\n", linenumber);    }    return retval;}static int do_gets_cmd(char *name){    hal_sig_t *sig;    hal_type_t type;    void *d_ptr;    rtapi_print_msg(RTAPI_MSG_DBG, "HAL: getting signal '%s'\n", name);    /* get mutex before accessing shared data */    rtapi_mutex_get(&(hal_data->mutex));    /* search signal list for name */    sig = halpr_find_sig_by_name(name);    if (sig == 0) {	rtapi_mutex_give(&(hal_data->mutex));	rtapi_print_msg(RTAPI_MSG_ERR,	    "HAL:%d: ERROR: signal '%s' not found\n", linenumber, name);	return HAL_INVAL;    }    /* found it */    type = sig->type;    d_ptr = SHMPTR(sig->data_ptr);    rtapi_print("%s\n", data_value2((int) type, d_ptr));    rtapi_mutex_give(&(hal_data->mutex));    return HAL_SUCCESS;}static int do_show_cmd(char *type, char *pattern){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -