refactor peripheral_gen, split out interface classes