* driver, app: new protocol

* new protocol specification that allows versioning

* App: refactoring