196#undef DROPCODES_FROM_LIST 
  197#define CAN_PRINT_FULL_PARSING 
  199    static const eOerror_code_t codecanprint = EOERRORCODE(eoerror_category_System, eoerror_value_SYS_canservices_canprint);
 
  200    eOerror_category_t category = eoerror_code2category(infobasic->properties.code);
 
  202#if defined(DROPCODES_FROM_LIST) 
  203    static const eOerror_code_t codes2drop_value[] =
 
  205        EOERRORCODE(eoerror_category_System, eoerror_value_SYS_canservices_parsingfailure),
 
  206        EOERRORCODE(eoerror_category_System, eoerror_value_SYS_canservices_rxmaisbug),
 
  207        EOERRORCODE(eoerror_category_System, eoerror_value_SYS_canservices_rxfromwrongboard),
 
  208        EOERRORCODE(eoerror_category_System, eoerror_value_SYS_transceiver_rxseqnumber_error)
 
  211    static const int codes2drop_number = 
sizeof(codes2drop_value) / 
sizeof(eOerror_code_t);
 
  215    for(i=0; i<codes2drop_number; i++)
 
  217        if(codes2drop_value[i] == infobasic->properties.code)
 
  224    if(codecanprint == infobasic->properties.code)
 
 
  239    eOmn_info_type_t    type;
 
  241    eOmn_info_extraformat_t extraf;
 
  242    const char * str_source = NULL;
 
  243    const char * str_code = NULL;
 
  244    const char * str_extra = NULL;
 
  246    char ipinfo[20] = {0};
 
  249    static const char nullverbalextra[] = 
"no extra info despite we are in verbal mode";
 
  250    static const char emptyextra[] = 
".";
 
  255    type    = EOMN_INFO_PROPERTIES_FLAGS_get_type(infobasic->properties.flags);
 
  256    extraf  = EOMN_INFO_PROPERTIES_FLAGS_get_extraformat(infobasic->properties.flags);
 
  260    str_code           = eoerror_code2string(infobasic->properties.code);
 
  263    if(eomn_info_extraformat_verbal == extraf)
 
  265        str_extra = (NULL == extra) ? (nullverbalextra) : ((
const char *)extra);
 
  269        str_extra = emptyextra;
 
  272    p64 = (uint8_t*)&(infobasic->properties.par64);
 
  275    eo_common_ipv4addr_to_string(eo_nv_GetIP(nv), ipinfo, 
sizeof(ipinfo));
 
  278    snprintf(str, 
sizeof(str), 
" from BOARD %s (%s), src %s, adr %d, time %ds %dm %du: (code 0x%.8x, par16 0x%.4x par64 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x) -> %s + %s",
 
  284                                infobasic->properties.code,
 
  285                                infobasic->properties.par16,
 
  286                                p64[7], p64[6], p64[5], p64[4], p64[3], p64[2], p64[1], p64[0],
 
 
  343    eOmn_info_type_t type;
 
  344    char ipinfo[20] = {0};
 
  347    eOerror_value_t value;
 
  353    type = EOMN_INFO_PROPERTIES_FLAGS_get_type(infobasic->properties.flags);
 
  355    eo_common_ipv4addr_to_string(eo_nv_GetIP(nv), ipinfo, 
sizeof(ipinfo));
 
  358    value = eoerror_code2value(infobasic->properties.code);
 
  363        case eoerror_value_CFG_candiscovery_started:
 
  365            uint16_t maskcan2 = infobasic->properties.par16;
 
  366            uint64_t brdnum =     (infobasic->properties.par64 & 0x0000ff0000000000) >> 40;
 
  367            const char *canboardname = eoboards_type2string(brdnum);
 
  368            uint16_t maskcan1 = (infobasic->properties.par64 & 0xffff000000000000) >> 48;
 
  369            eObrd_protocolversion_t prot = {0};
 
  370            eObrd_firmwareversion_t appl = {0};
 
  371            uint64_t reqpr =      (infobasic->properties.par64 & 0x000000ffff000000) >> 24;
 
  372            uint64_t reqfw =      (infobasic->properties.par64 & 0x0000000000ffffff);
 
  374            prot.major = reqpr >> 8;
 
  375            prot.minor = reqpr & 0xff;
 
  376            appl.major = (reqfw >> 16) & 0xff;
 
  377            appl.minor = (reqfw >> 8)  & 0xff;
 
  378            appl.build = reqfw & 0xff;
 
  379            num = eo_common_hlfword_bitsetcount(maskcan1)+eo_common_hlfword_bitsetcount(maskcan2);
 
  381            snprintf(str, 
sizeof(str), 
" from BOARD %s (%s) @ %ds %dm %du: CAN discovery has started for %d %s boards on (can1map, can2map) = (0x%.4x, 0x%.4x) with target can protocol ver %d.%d and application ver %d.%d.%d.",
 
  388                                        prot.major, prot.minor,
 
  389                                        appl.major, appl.minor, appl.build
 
  396        case eoerror_value_CFG_candiscovery_ok:
 
  398            uint8_t num = infobasic->properties.par16 & 0x00ff;
 
  399            eObool_t fakesearch = (0x0000 == (infobasic->properties.par16 & 0xf000)) ? (eobool_false) : (eobool_true);
 
  400            uint64_t brdnum =     (infobasic->properties.par64 & 0x0000ff0000000000) >> 40;
 
  401            const char *canboardname = eoboards_type2string(brdnum);
 
  402            uint64_t searchtime = (infobasic->properties.par64 & 0xffff000000000000) >> 48;
 
  403            eObrd_protocolversion_t prot = {0};
 
  404            eObrd_firmwareversion_t appl = {0};
 
  405            uint64_t reqpr =      (infobasic->properties.par64 & 0x000000ffff000000) >> 24;
 
  406            uint64_t reqfw =      (infobasic->properties.par64 & 0x0000000000ffffff);
 
  407            char strOK[80] = 
"OK";
 
  409            prot.major = reqpr >> 8;
 
  410            prot.minor = reqpr & 0xff;
 
  411            appl.major = (reqfw >> 16) & 0xff;
 
  412            appl.minor = (reqfw >> 8)  & 0xff;
 
  413            appl.build = reqfw & 0xff;
 
  416            if(eobool_true == fakesearch)
 
  418                snprintf(strOK, 
sizeof(strOK), 
"OK but FAKE (without any control on CAN w/ get-fw-version<> message)");
 
  421            snprintf(str, 
sizeof(str), 
" from BOARD %s (%s) @ %ds %dm %du: CAN discovery is %s for %d %s boards with target can protocol ver %d.%d and application ver %d.%d.%d. Search time was %d ms",
 
  427                                        prot.major, prot.minor,
 
  428                                        appl.major, appl.minor, appl.build,
 
  436        case eoerror_value_CFG_candiscovery_detectedboard:
 
  438            uint64_t brdnum =     (infobasic->properties.par64 & 0x0000ff0000000000) >> 40;
 
  439            const char *canboardname = eoboards_type2string(brdnum);
 
  440            uint64_t searchtime = (infobasic->properties.par64 & 0xffff000000000000) >> 48;
 
  441            eObrd_protocolversion_t prot = {0};
 
  442            eObrd_firmwareversion_t appl = {0};
 
  443            uint64_t reqpr =      (infobasic->properties.par64 & 0x000000ffff000000) >> 24;
 
  444            uint64_t reqfw =      (infobasic->properties.par64 & 0x0000000000ffffff);
 
  447            prot.major = reqpr >> 8;
 
  448            prot.minor = reqpr & 0xff;
 
  449            appl.major = (reqfw >> 16) & 0xff;
 
  450            appl.minor = (reqfw >> 8)  & 0xff;
 
  451            appl.build = reqfw & 0xff;
 
  452            address = infobasic->properties.par16 & 0x000f;
 
  455            snprintf(str, 
sizeof(str), 
" from BOARD %s (%s) @ %ds %dm %du: CAN discovery has detected a %s board in %s addr %d with can protocol ver %d.%d and application ver %d.%d.%d Search time was %d ms",
 
  462                                        prot.major, prot.minor,
 
  463                                        appl.major, appl.minor, appl.build,
 
  470        case eoerror_value_CFG_candiscovery_boardsmissing:
 
  472            uint8_t numofmissing = infobasic->properties.par16 & 0x00ff;
 
  473            const char *canboardname = eoboards_type2string(infobasic->properties.par16 >> 8);
 
  474            uint64_t searchtime = (infobasic->properties.par64 & 0xffff000000000000) >> 48;
 
  475            uint16_t maskofmissing = infobasic->properties.par64 & 0x000000000000ffff;
 
  480            snprintf(str, 
sizeof(str), 
" from BOARD %s (%s) @ %ds %dm %du: CAN discovery after %d ms has detected %d missing %s boards in %s:",
 
  494                if(eobool_true == eo_common_hlfword_bitcheck(maskofmissing, i))
 
  496                    snprintf(str, 
sizeof(str), 
"%d of %d: missing %s BOARD %s:%s:%d",
 
  497                                                n, numofmissing, canboardname,
 
  508        case eoerror_value_CFG_candiscovery_boardsinvalid:
 
  510            uint8_t numofinvalid = infobasic->properties.par16 & 0x00ff;
 
  511            const char *canboardname = eoboards_type2string(infobasic->properties.par16 >> 8);
 
  512            uint64_t invalidmask = infobasic->properties.par64;
 
  516            const char *empty = 
"";
 
  517            const char *wrongtype = 
"WRONG BOARD TYPE";
 
  518            const char *wrongprot = 
"WRONG PROTOCOL VERSION";
 
  519            const char *wrongappl = 
"WRONG APPLICATION VERSION";
 
  521            snprintf(str, 
sizeof(str), 
" from BOARD %s (%s) @ %ds %dm %du: CAN discovery has detected %d invalid %s boards in %s:",
 
  536                uint64_t val = (invalidmask >> (4*i)) & 0x0f;
 
  539                    snprintf(str, 
sizeof(str), 
"%d of %d: wrong %s BOARD %s:%s:%d because it has: %s %s %s",
 
  540                                                n, numofinvalid, canboardname,
 
  542                                                ((val & 0x1) == 0x1) ? (wrongtype) : (empty),
 
  543                                                ((val & 0x2) == 0x2) ? (wrongappl) : (empty),
 
  544                                                ((val & 0x4) == 0x4) ? (wrongprot) : (empty)
 
  560        case EOERROR_VALUE_DUMMY:
 
  562            snprintf(str, 
sizeof(str), 
" from BOARD %s (%s) @ %ds %dm %du: unrecognised eoerror_category_Config error value:",