split extracted driver and shared into separate modules
used constants from shared module
command reader and writer