A purely software based USB peripheral for ARM Cortex M0+ devices