"XYZBC kinematics are still wrong, C axis rotates correctly, but B axis rotates wrong direction ."
I'm fairly sure that xyzbc-trt kinematics follows this convention, which seems correct to me:
"Where is motion.switchkins-type connected and do we need it and if, why (as M66 does sync)?"
For custom kinematics it is recommended to use the "userkins.comp" template:
linuxcnc.org/docs/html/man/man9/userkins.9.html
For an example you could have a look at the "millkins" simulation config that uses "millturn.comp" found at
src/hal/components where you will also find the above mentioned "userkins.comp". Comparing the two should give you a good idea how things work. For three kinematics you basically have to expand the case structure in the .comp and add the required forward and backward kinematic model. "switchkins_type" will then select the required kinematic model. So you would need to expand this with a "case 2":
// create case structure for switchable kinematics
switch (switchkins_type) {
case 0: rtapi_print_msg(RTAPI_MSG_INFO,
"kinematicsSwitch:TYPE0\n");
*haldata->kinstype_is_0 = 1;
*haldata->kinstype_is_1 = 0;
break;
case 1: rtapi_print_msg(RTAPI_MSG_INFO,
"kinematicsSwitch:TYPE1\n");
*haldata->kinstype_is_0 = 0;
*haldata->kinstype_is_1 = 1;
break;
default: rtapi_print_msg(RTAPI_MSG_ERR,
"kinematicsSwitch:BAD VALUE <%d>\n",
switchkins_type);
*haldata->kinstype_is_1 = 0;
*haldata->kinstype_is_0 = 0;
return -1; // FAIL }
And then add the kinematic model further down in the int "kinematicsForward(" and the "int kinematicsInverse("-sections of the code.