With rt-preempt kernel 4.19 rt3 on mint 19.3 for 4 year write and send data to hal with Lcnc2.9 pre0 from my c++ gui .... last week need to upgrade to 2.9 on actual gihub ..... and my reading become unvaible and every reading become HAL_TYPE_UNINITIALIZED ..... pieces of code that I use for reading is these:
int do_gets_cmd(QString nameSig) { hal_sig_t *sig = nullptr; hal_type_t type; void *d_ptr; char *value_str = {}; static char buf[18]; std::string str_false = "FALSE"; std::string str_true = "TRUE"; std::string str_unknow = "unknown_type"; int valBIT = 10; char name[strlen(nameSig.toStdString().c_str()) + 1]; // Make sure there's enough space strcpy(name, nameSig.toStdString().c_str()); qDebug() << Q_FUNC_INFO << "get signal receive ...." << 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)); qDebug() << Q_FUNC_INFO << "get signal not find ...." << name; valBIT = 10; } else{ //rtapi_mutex_get(&(hal_data->mutex)); ////qDebug() << Q_FUNC_INFO << "get signal FIND ...." << name; type = sig->type; //qDebug() << Q_FUNC_INFO << "get signal FIND .... VALID HAL_TYPE for sig :" << name << " , value....:" << type; if(sig->writers > 0){ //qDebug() << Q_FUNC_INFO << "get bool receive .... case HAS WRITER" ; d_ptr = SHMPTR(sig->data_ptr); if(type == HAL_BIT){ if (*((hal_bit_t *) d_ptr) == 0){ // strcpy(value_str, str_false.c_str()); rtapi_mutex_give(&(hal_data->mutex)); valBIT = 0; //value_str = "FALSE"; qDebug() << Q_FUNC_INFO << "get bool receive .... case HAL_BIT: " << valBIT << "value from sig->name ...." << name; } else{ // strcpy(value_str, str_true.c_str()); rtapi_mutex_give(&(hal_data->mutex)); valBIT = 1; //value_str = "TRUE"; qDebug() << Q_FUNC_INFO << "get bool receive .... case HAL_BIT: " << valBIT << "value from sig->name ...." << name; } } else if(type == HAL_FLOAT){ snprintf(buf, 16, "%.7g", (double)*((hal_float_t *) d_ptr)); rtapi_mutex_give(&(hal_data->mutex)); value_str = buf; qDebug() << Q_FUNC_INFO << "get bool receive .... case HAL_FLOAT" << "value from sig->name ...." << name; } else if(type == HAL_S32){ snprintf(buf, 16, "%ld", (long)*((hal_s32_t *) d_ptr)); rtapi_mutex_give(&(hal_data->mutex)); value_str = buf; qDebug() << Q_FUNC_INFO << "get bool receive .... case HAL_S32" << "value from sig->name ...." << name; } else if(type == HAL_U32){ snprintf(buf, 16, "%ld", (unsigned long)*((hal_u32_t *) d_ptr)); rtapi_mutex_give(&(hal_data->mutex)); value_str = buf; qDebug() << Q_FUNC_INFO << "get bool receive .... case HAL_U32" << "value from sig->name ...." << name; } else if(type == HAL_PORT){ //snprintf(buf, 16, "%ld", (unsigned long)*((hal_u32_t *) d_ptr)); rtapi_mutex_give(&(hal_data->mutex)); // value_str = buf; qDebug() << Q_FUNC_INFO << "get bool receive .... case HAL_PORT" << "value from sig->name ...." << name; } else if(type == HAL_TYPE_UNINITIALIZED){ //snprintf(buf, 16, "%ld", (unsigned long)*((hal_u32_t *) d_ptr)); rtapi_mutex_give(&(hal_data->mutex)); // value_str = buf; qDebug() << Q_FUNC_INFO << "get bool receive .... HAL_TYPE_UNINITIALIZED" << "value from sig->name ...." << name; } and return every time HAL_TYPE_UNINITIALIZED ..... why?? ... my app is the same, my SO too, I add only python3 support, but seems linking of hal_priv.h and hal.h not work properly ..... or there are something of similar that not run ... perhaps if use axis gui my machine work perfect .... i use my gui c++, can read trought command ethercat upload ....., but can not from hal ... any help type is appreciated regards _______________________________________________ Emc-users mailing list Emc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/emc-users