--- tags: NewPOS --- # New POS Tablet Design ## Tablet design * [Tabletop mode](#Tabletop-mode) * [Handheld mode](#Handheld-mode) ### Usecase store broker always connected. * usemode switch ```plantuml :user: -r-> (case0) "Plugging/Unplugging" as (case0) "store broker:MPOS" as (case1) "dock broker:New POS" as (case2) (case0) ..> (case1):<<include>> (case0) <.. (case2):<<extend>> "Handheld mode" as (case3) "Tabletop mode" as (case4) (case1) <.. (case3):<<include>> (case2) <.. (case4):<<include>> ``` ### activity diagram [Provided by the main activity-diagram](https://hackmd.io/@tk3c-mpos/B16lfjsAu) ### Usemode switch * The tablet can only bound one dock at the same time. * Desktop mode and handheld mode are controlled by plug. * Use the serial number of the tablet as the topic bound to the dock #### Tabletop mode * activity diagram ```plantuml @startuml start :plugin; :dock publish infomation; :get dock info and connect dock broker; :subscribe dock topic; :send binding message; if(binding success?) then(yes) :tablet mode switch; stop else(no) :disconnect dock; end endif @enduml ``` * sequence-diagram topic list: - <font color=blue>SN</font>:tk3c/device/{Serial Number} - <font color=blue>dock inbobund</font>:{scope}/dock/{dockUID} - <font color=blue>dock outbound</font>:{scope}/dock/{dockUID}/outbound ```plantuml actor user as user participant Tablet as tablet participant StoreBroker as store participant DockBroker as dock collections topic tablet <-> store:connected tablet <- topic:subscribe <font color=blue>SN user -> dock:plugin(<font color=blue>real/mock</font>) dock -> topic:publish message to <font color=blue>SN topic -> tablet:get dock info tablet -> dock:connected tablet -> topic:subscribe dock topic tablet -> topic:publish binding message to <font color=blue>dock inbobund topic -> dock dock -> topic:publish binding result to <font color=blue>dock outbound topic -> tablet ``` ##### mock plugin * Need to be pre-connected to the dock broker * publish bindtest message :::info [bindtest](https://hackmd.io/P7FuhzegRvObKvrjEG0m_Q#2Allocated-Event%E6%B8%AC%E8%A9%A6%E7%94%A8-%E7%84%A1%E9%9C%80%E6%8F%92%E8%A3%9D%E7%BD%AE) ::: #### Handheld mode * activity diagram ```plantuml @startuml start :unplug; :dock publish unbind message(qos=2); :tablet got message; :disconnect dock broker; :tablet mode switch; @enduml ``` --- ### MQTT message adaptor * usecase ```plantuml 'left to right direction actor user usecase (Select POS page and bindding the channels to be used) as case0 user -r-> case0 usecase (Select input device & input data) as case1 case0 <.d. case1:<<extend>> usecase (message handler) as case2 case1 .r.> case2:<<include>> usecase (Put the data in the correct place) as case3 case2 ..> case3:<<include>> ``` * sequence-diagram ```plantuml actor user as user participant posPage as page participant dock as dock participant messageHandler as msghandler collections state as vuex vuex -> page: page mapping state user -> dock : input message dock -> msghandler : publish message msghandler -> vuex: change state note left Need to check that the current page has state mapped. Message discarded if not used. end note note right The information entered by the dock is stored in the state. end note vuex -> page: note left put the data to the page . end note page -> state:clear state note right Avoid entering the same data state will not notify. end note ``` --- ### Dock service status tracking ### first connect * tablet plug in the dock * mqtt connect to dock * client publish allocated message to dock * dock publish svcinfo ### reconnect * get dock [svcInfo](https://hackmd.io/@tk3c-mpos/ryYoCmSRu/https%3A%2F%2Fhackmd.io%2FP7FuhzegRvObKvrjEG0m_Q#Event) and update state capabilities ### update dock capabilities status * update dock capabilities when dock publish [dock.info](https://hackmd.io/@tk3c-mpos/ryYoCmSRu/https%3A%2F%2Fhackmd.io%2FP7FuhzegRvObKvrjEG0m_Q#dock-service) message to the outbound topic ```plantuml @startuml [*] --> State_mqtt: plug in the dock State_mqtt : mqtt connect to dock state after_connect { State_mqtt -> State_capabilities: update capabilities note on link Proactively obtain information(svcInfo) end note note right of State_capabilities If capabilities state is change, popup warning message. end note State_capabilities : dock capabilities(service) state "dock service state" as dock { [*] --> State_capabilities: update capabilities note on link dock outbound message(dock.info) end note } } @enduml ```