📄 halcmd_commands.c
字号:
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 + -