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