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

📄 halcmd_commands.c

📁 CNC 的开放码,EMC2 V2.2.8版
💻 C
📖 第 1 页 / 共 5 页
字号:
	halcmd_output("ID      Type  %-*s PID   State\n", HAL_NAME_LEN, "Name");    }    rtapi_mutex_get(&(hal_data->mutex));    next = hal_data->comp_list_ptr;    while (next != 0) {	comp = SHMPTR(next);	if ( match(patterns, comp->name) ) {            if(comp->type == 2) {                hal_comp_t *comp1 = halpr_find_comp_by_id(comp->comp_id & 0xffff);                halcmd_output("    INST %s %s",                        comp1 ? comp1->name : "(unknown)",                         comp->name);            } else {                halcmd_output(" %5d  %-4s  %-*s",                    comp->comp_id, (comp->type ? "RT" : "User"),                    HAL_NAME_LEN, comp->name);                if(comp->type == 0) {                        halcmd_output(" %5d %s", comp->pid, comp->ready > 0 ?                                "ready" : "initializing");                } else {                        halcmd_output(" %5s %s", "", comp->ready > 0 ?                                "ready" : "initializing");                }            }            halcmd_output("\n");	}	next = comp->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_pin_info(char **patterns){    int next;    hal_pin_t *pin;    hal_comp_t *comp;    hal_sig_t *sig;    void *dptr;    if (scriptmode == 0) {	halcmd_output("Component Pins:\n");	halcmd_output("Owner   Type  Dir         Value  Name\n");    }    rtapi_mutex_get(&(hal_data->mutex));    next = hal_data->pin_list_ptr;    while (next != 0) {	pin = SHMPTR(next);	if ( match(patterns, pin->name) ) {	    comp = SHMPTR(pin->owner_ptr);	    if (pin->signal != 0) {		sig = SHMPTR(pin->signal);		dptr = SHMPTR(sig->data_ptr);	    } else {		sig = 0;		dptr = &(pin->dummysig);	    }	    if (scriptmode == 0) {		halcmd_output(" %5d  %5s %-3s  %9s  %s",		    comp->comp_id,		    data_type((int) pin->type),		    pin_data_dir((int) pin->dir),		    data_value((int) pin->type, dptr),		    pin->name);	    } else {		halcmd_output("%s %s %s %s %s",		    comp->name,		    data_type((int) pin->type),		    pin_data_dir((int) pin->dir),		    data_value2((int) pin->type, dptr),		    pin->name);	    } 	    if (sig == 0) {		halcmd_output("\n");	    } else {		halcmd_output(" %s %s\n", data_arrow1((int) pin->dir), sig->name);	    }	}	next = pin->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_sig_info(char **patterns){    int next;    hal_sig_t *sig;    void *dptr;    hal_pin_t *pin;    if (scriptmode != 0) {    	print_script_sig_info(patterns);	return;    }    halcmd_output("Signals:\n");    halcmd_output("Type          Value  Name     (linked to)\n");    rtapi_mutex_get(&(hal_data->mutex));    next = hal_data->sig_list_ptr;    while (next != 0) {	sig = SHMPTR(next);	if ( match(patterns, sig->name) ) {	    dptr = SHMPTR(sig->data_ptr);	    halcmd_output("%s  %s  %s\n", data_type((int) sig->type),		data_value((int) sig->type, dptr), sig->name);	    /* look for pin(s) linked to this signal */	    pin = halpr_find_pin_by_sig(sig, 0);	    while (pin != 0) {		halcmd_output("                         %s %s\n",		    data_arrow2((int) pin->dir), pin->name);		pin = halpr_find_pin_by_sig(sig, pin);	    }	}	next = sig->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_script_sig_info(char **patterns){    int next;    hal_sig_t *sig;    void *dptr;    hal_pin_t *pin;    if (scriptmode == 0) {    	return;    }    rtapi_mutex_get(&(hal_data->mutex));    next = hal_data->sig_list_ptr;    while (next != 0) {	sig = SHMPTR(next);	if ( match(patterns, sig->name) ) {	    dptr = SHMPTR(sig->data_ptr);	    halcmd_output("%s  %s  %s", data_type((int) sig->type),		data_value2((int) sig->type, dptr), sig->name);	    /* look for pin(s) linked to this signal */	    pin = halpr_find_pin_by_sig(sig, 0);	    while (pin != 0) {		halcmd_output(" %s %s",		    data_arrow2((int) pin->dir), pin->name);		pin = halpr_find_pin_by_sig(sig, pin);	    }	    halcmd_output("\n");	}	next = sig->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_param_info(char **patterns){    int next;    hal_param_t *param;    hal_comp_t *comp;    if (scriptmode == 0) {	halcmd_output("Parameters:\n");	halcmd_output("Owner   Type  Dir         Value  Name\n");    }    rtapi_mutex_get(&(hal_data->mutex));    next = hal_data->param_list_ptr;    while (next != 0) {	param = SHMPTR(next);	if ( match(patterns, param->name) ) {	    comp = SHMPTR(param->owner_ptr);	    if (scriptmode == 0) {		halcmd_output(" %5d  %5s %-3s  %9s  %s\n",		    comp->comp_id, data_type((int) param->type),		    param_data_dir((int) param->dir),		    data_value((int) param->type, SHMPTR(param->data_ptr)),		    param->name);	    } else {		halcmd_output("%s %s %s %s %s\n",		    comp->name, data_type((int) param->type),		    param_data_dir((int) param->dir),		    data_value2((int) param->type, SHMPTR(param->data_ptr)),		    param->name);	    } 	}	next = param->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_funct_info(char **patterns){    int next;    hal_funct_t *fptr;    hal_comp_t *comp;    if (scriptmode == 0) {	halcmd_output("Exported Functions:\n");	halcmd_output("Owner   CodeAddr  Arg       FP   Users  Name\n");    }    rtapi_mutex_get(&(hal_data->mutex));    next = hal_data->funct_list_ptr;    while (next != 0) {	fptr = SHMPTR(next);	if ( match(patterns, fptr->name) ) {	    comp = SHMPTR(fptr->owner_ptr);	    if (scriptmode == 0) {		halcmd_output(" %05d  %08lx  %08lx  %-3s  %5d   %s\n",		    comp->comp_id,		    (long)fptr->funct,		    (long)fptr->arg, (fptr->uses_fp ? "YES" : "NO"),		    fptr->users, fptr->name);	    } else {		halcmd_output("%s %08lx %08lx %s %3d %s\n",		    comp->name,		    (long)fptr->funct,		    (long)fptr->arg, (fptr->uses_fp ? "YES" : "NO"),		    fptr->users, fptr->name);	    } 	}	next = fptr->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_thread_info(char **patterns){    int next_thread, n;    hal_thread_t *tptr;    hal_list_t *list_root, *list_entry;    hal_funct_entry_t *fentry;    hal_funct_t *funct;    if (scriptmode == 0) {	halcmd_output("Realtime Threads:\n");	halcmd_output("     Period  FP     Name               (     Time, Max-Time )\n");    }    rtapi_mutex_get(&(hal_data->mutex));    next_thread = hal_data->thread_list_ptr;    while (next_thread != 0) {	tptr = SHMPTR(next_thread);	if ( match(patterns, tptr->name) ) {		/* note that the scriptmode format string has no \n */		// TODO FIXME add thread runtime and max runtime to this print	    halcmd_output(((scriptmode == 0) ? "%11ld  %s  %20s ( %8ld, %8ld )\n" : "%ld %s %s %ld %ld"),		tptr->period, (tptr->uses_fp ? "YES" : "NO"), tptr->name, (long)tptr->runtime, (long)tptr->maxtime);	    list_root = &(tptr->funct_list);	    list_entry = list_next(list_root);	    n = 1;	    while (list_entry != list_root) {		/* print the function info */		fentry = (hal_funct_entry_t *) list_entry;		funct = SHMPTR(fentry->funct_ptr);		/* scriptmode only uses one line per thread, which contains: 		   thread period, FP flag, name, then all functs separated by spaces  */		if (scriptmode == 0) {		    halcmd_output("                 %2d %s\n", n, funct->name);		} else {		    halcmd_output(" %s", funct->name);		}		n++;		list_entry = list_next(list_entry);	    }	    if (scriptmode != 0) {		halcmd_output("\n");	    }	}	next_thread = tptr->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_comp_names(char **patterns){    int next;    hal_comp_t *comp;    rtapi_mutex_get(&(hal_data->mutex));    next = hal_data->comp_list_ptr;    while (next != 0) {	comp = SHMPTR(next);	if ( match(patterns, comp->name) ) {	    halcmd_output("%s ", comp->name);	}	next = comp->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_pin_names(char **patterns){    int next;    hal_pin_t *pin;    rtapi_mutex_get(&(hal_data->mutex));    next = hal_data->pin_list_ptr;    while (next != 0) {	pin = SHMPTR(next);	if ( match(patterns, pin->name) ) {	    halcmd_output("%s ", pin->name);	}	next = pin->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_sig_names(char **patterns){    int next;    hal_sig_t *sig;    rtapi_mutex_get(&(hal_data->mutex));    next = hal_data->sig_list_ptr;    while (next != 0) {	sig = SHMPTR(next);	if ( match(patterns, sig->name) ) {	    halcmd_output("%s ", sig->name);	}	next = sig->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_param_names(char **patterns){    int next;    hal_param_t *param;    rtapi_mutex_get(&(hal_data->mutex));    next = hal_data->param_list_ptr;    while (next != 0) {	param = SHMPTR(next);	if ( match(patterns, param->name) ) {	    halcmd_output("%s ", param->name);	}	next = param->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_funct_names(char **patterns){    int next;    hal_funct_t *fptr;    rtapi_mutex_get(&(hal_data->mutex));    next = hal_data->funct_list_ptr;    while (next != 0) {	fptr = SHMPTR(next);	if ( match(patterns, fptr->name) ) {	    halcmd_output("%s ", fptr->name);	}	next = fptr->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_thread_names(char **patterns){    int next_thread;    hal_thread_t *tptr;    rtapi_mutex_get(&(hal_data->mutex));    next_thread = hal_data->thread_list_ptr;    while (next_thread != 0) {	tptr = SHMPTR(next_thread);	if ( match(patterns, tptr->name) ) {	    halcmd_output("%s ", tptr->name);	}	next_thread = tptr->next_ptr;    }    rtapi_mutex_give(&(hal_data->mutex));    halcmd_output("\n");}static void print_lock_status(){    int lock;    lock = hal_get_lock();    halcmd_output("HAL locking status:\n");    halcmd_output("  current lock value %d (%02x)\n", lock, lock);        if (lock == HAL_LOCK_NONE) 	halcmd_output("  HAL_LOCK_NONE - nothing is locked\n");    if (lock & HAL_LOCK_LOAD) 	halcmd_output("  HAL_LOCK_LOAD    - loading of new components is locked\n");    if (lock & HAL_LOCK_CONFIG) 	halcmd_output("  HAL_LOCK_CONFIG  - link and addf is locked\n");    if (lock & HAL_LOCK_PARAMS) 	halcmd_output("  HAL_LOCK_PARAMS  - setting params is locked\n");    if (lock & HAL_LOCK_RUN) 	halcmd_output("  HAL_LOCK_RUN     - running/stopping HAL is locked\n");}static int count_list(int list_root){    int n, next;    rtapi_mutex_get(&(hal_data->mutex));    next = list_root;    n = 0;    while (next != 0) {	n++;	next = *((int *) SHMPTR(next));    }    rtapi_mutex_give(&(hal_data->mutex));    return n;}static void print_mem_status(){    int active, recycled;    halcmd_output("HAL memory status\n");    halcmd_output("  used/total shared memory:   %ld/%d\n", (long)(HAL_SIZE - hal_data->shmem_avail), HAL_SIZE);    // count components    active = count_list(hal_data->comp_list_ptr);    recycled = count_list(hal_data->comp_free_ptr);    halcmd_output("  active/recycled components: %d/%d\n", active, recycled);    // count pins    active = count_list(hal_data->pin_list_ptr);    recycled = count_list(hal_data->pin_free_ptr);    halcmd_output("  active/recycled pins:       %d/%d\n", active, recycled);    // count parameters    active = count_list(hal_data->param_list_ptr);    recycled = count_list(hal_data->param_free_ptr);    halcmd_output("  active/recycled parameters: %d/%d\n", active, recycled);    // count signals    active = count_list(hal_data->sig_list_ptr);    recycled = count_list(hal_data->sig_free_ptr);    halcmd_output("  active/recycled signals:    %d/%d\n", active, recycled);    // count functions    active = count_list(hal_data->funct_list_ptr);    recycled = count_list(hal_data->funct_free_ptr);    halcmd_output("  active/recycled functions:  %d/%d\n", active, recycled);    // count threads    active = count_list(hal_data->thread_list_ptr);    recycled = count_list(hal_data->thread_free_ptr);    halcmd_output("  active/recycled threads:    %d/%d\n", active, recycled);}/* Switch function for pin/sig/param type for the print_*_list functions */static char *data_type(int type){    char *type_str;    switch (type) {    case HAL_BIT:	type_str = "bit  ";	break;    case HAL_FLOAT:	type_str = "float";	break;    case HAL_S32:	type_str = "s32  ";	break;    case HAL_U32:	type_str = "u32  ";	break;    default:	/* Shouldn't get here, but just in case... */	type_str = "undef";    }    return type_str;}static char *data_type2(int type){    char *type_str;

⌨️ 快捷键说明

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