@startuml Service participant OS as OS participant Script as Script participant DD as DD participant TD as TD participant SW as SW participant UI as UI actor USER as US 'Possible actions and interaction types ' External on CANBus ' TD -> SW: MSG: Message ' SW -> TD: MSG: Message ' Internal to the application ' XX -> YY: CMD: Command ' XX -> XX: ACT: Action ' External on OS/FS ' SW -> Script: ACT: Command ' Script -> OS: CMD: Command ' Script -> SW: MSG: Message ' OS -> Script: MSG: Message ' US -> UI: User actions are: ' ASK: Display a ' ENT: User enters a value or string ' TCH: User touches a button (RadioButton, CheckBox, ...) ' SCL: User scrolls a flip-able area == Manufactoring Log In == UI -> US: ACT: Manufactoring password screen US -> UI: ENT: Enter new password US -> UI: TCH: Confirm New password US -> UI: TCH: Shutdown == Service Log In == US -> UI: TCH: Settings Menu Item UI -> US: ACT: Device Settings Screen US -> UI: TCH: Service Option UI -> US: ACT: Service Password Screen US -> UI: ENT: Enter Service Password US -> UI: TCH: Press Confirm UI -> SW: ACT: Check if matches hashed password \ \n\t-vSettings.isServicePasswordM alt Accepted SW -> UI: ACT: Notify UI password is correct UI -> UI: ACT: Navigate to Device Settings Screen SW -> TD: MSG: [xB0: #0] Request Service Mode TD -> SW: MSG: [xB1: #2] \ \n\tResponse: \ \n\t(U32) mAccepted\ \n\t(U32) mReason SW -> UI: ACT: Notify UI alt Accepted UI -> US: ACT: Display all service options else #Pink Rejected UI -> US: ACT: Display to user failure reason end else #Pink Rejected UI -> US: ACT: Display to user failure reason end == Date/ Time == UI -> US: ACT: Device Settings Screen (Logged in with Service Password) US -> UI: TCH: Date/Time Option UI -> US: ACT: Date/Time Screen US -> UI: ENT: Enter Date and Time US -> UI: TCH: Press Confirm UI -> SW: ACT: Set Date and Time group UI SW -> Script: ACT: date_time_set.sh ( ) activate Script Script -> OS: CMD: \ \n\tsudo timedatectl set-ntp "$ntp_flag" \ \n\tsudo date -s "$new_time" \ \n\tsudo hwclock -w OS -> Script: MSG: Exit Code Script -> SW: MSG: Exit Code deactivate Script alt successful ( exit == 0 ) SW -> UI: ACT: Update Date and Time UI -> US: ACT: Date/ TIme is updated per desired value else #Pink failed SW -> UI: ACT: Notify UI Script Error UI -> US: ACT: Notify user end end group TD SW -> TD: MSG: [x6C: #1] Set Date/ Time \ \n\t(U32) mEpoch TD -> SW: MSG: [x6D: #2] \ \n\tResponse: \ \n\t(U32) mAccepted \ \n\t(U32) mReason alt Accepted SW -> UI: ACT: Notify UI TD Date/Time has successful been set else #Pink Rejected SW -> UI: ACT: Notify UI TD Date/Time has failed to be set end UI -> US: ACT: Notify user end group DD SW -> DD: MSG: [x6E: #1] Set Date/ Time \ \n\t(U32) mEpoch DD -> SW: MSG: [x6F: #2] \ \n\tResponse: \ \n\t(U32) mAccepted \ \n\t(U32) mReason alt Accepted SW -> UI: ACT: Notify UI DD Date/Time has successful been set else #Pink Rejected SW -> UI: ACT: Notify UI DD Date/Time has failed to be set end UI -> US: ACT: Notify user end == Root SSH Access == UI -> US: ACT: Device Settings Screen (Logged in with Service Password) US -> UI: TCH: Enable Root SSH Option UI -> US: ACT: Enable Root SSH Screen US -> UI: TCH: Touch enable SSH/ Root login switch UI -> SW: ACT: Set SSH/ Root login SW -> Script: ACT: rootsshaccess.sh ( ) activate Script Script -> OS: CMD: disable/enable SSH login and Root Login OS -> Script: MSG: set states of SSH/ Root Logins Script -> SW: MSG: SSH/ Root login states deactivate Script alt successful ( exit == 0 ) SW -> UI: MSG: SSH/ Root login states UI -> UI: ACT: Update switch to reflect active enable states of SSH/ Root else #Pink failed SW -> UI: ACT: Notify UI Script Error UI -> US: ACT: Notify user end == Factory Reset == UI -> US: ACT: Device Settings Screen (Logged in with Service Password) US -> UI: TCH: Factory Reset Option UI -> US: ACT: Factory Reset Screen US -> UI: TCH: Confirm button UI -> US: ACT: Prompt secondary confirmation popup (Are Youy Sure?) US -> UI: TCH: Confirm button UI -> SW: ACT: Perform Factory Reset SW -> Script: ACT: factory_reset.sh ( ) activate Script Script -> OS: CMD: deleteWiFi \ \n\t deleteBluetooth \ \n\t defaultSettings \ \n\t defaultBrightness \ \n\t deleteLogFiles OS -> Script: MSG: Exit Code Script -> SW: MSG: Exit Code deactivate Script alt successful ( exit == 0 ) SW -> UI: MSG: Notify UI UI -> US: ACT: Notify User Factory Reset is complete else #Pink failed SW -> UI: ACT: Notify UI Script Error UI -> US: ACT: Notify user end == User Mode == UI -> US: ACT: Device Settings Screen (Logged in with Service Password) US -> UI: TCH: User Modes Option UI -> US: ACT: User Modes Screen US -> UI: TCH: Touch professional mode switch UI -> SW: ACT: Set professional mode on or off SW -> OS: ACT: Write configuration in System.conf OS -> SW: ACT: Read configuration from System.conf SW -> UI: ACT: Notify UI UI -> UI: ACT: Update Sliding Switch @enduml