add sw bitfields, implement some CAN in sw