UWP Kaufhaus

imageAb und zu muss man verrückte Dinge tun. Schon seit Windows 8 hat WinRT eine sehr umfangreiche API für sogenannte POS (Point of Sale) Devices. Ich habe zwar keine Ahnung warum, aber ist so. Das sind spezielle Drucker und Scanner.  Leider nur ganz wenige und dann auch nur wenn sie ESC/POS unterstützen. Die entsprechenden Thermodrucker von Epson sind ganz schön teuer. No Name Geräte gibt es schon ab 15€. Auf denen kann man halt nicht drucken. Dann kam mir die dumme Idee mal so ein ESC/POS kompatibles 2zeiliges Kassendisplay zu kaufen. das Glacetron 8035 erworben für 95€. Einfach per USB an den Rechner angesteckt und schon leuchtet es in sympathischen Blau. Die Aufmerksamkeit von Büro Besuchern ist dir ab sofort sicher.

Das Gerät hängt sich über eine CP210x UART Bridge als weitere serielle Schnittstelle rein. Mein Windows 10 Device Manager hat es zwar erkannt, ich musste aber Treiber bei Dr. Google suchen.

image

Nun könnte man das Display mit recht einfachen Kommandos per Serieller Schnittstelle beschicken. Es geht aber noch einfacher. Man holt sich einfach das Epson Opos ADK. Nach Installation konfiguriert man sein Gerät. Da das LineDisplay 2 Zeilen hat und der Befehlssatz ESC/POS ein Standard ist, habe ich wild geraten und das DM-D 210 ausgewählt.

image

Das OPOS Tool hat auch eine Check Health Funktion, die mir adhoc den Erfolg meldet. Das klappt also. Its Coding Time mit Visual Studio und einem leeren UWP Projekt.

Das XAML User Interface für meine Hello World Kasse enthält einfach einen Button und eine Zeile Text.

   1:  <TextBox Name="text1" Margin="78,20,0,0" VerticalAlignment="Top"/>
   2:   
   3:  <Button Content="show"
   4:                  Visibility="Collapsed"
   5:                  Name="btnDisplay" HorizontalAlignment="Left"
   6:                  Margin="78,91,0,0" VerticalAlignment="Top" 
   7:                  Click="btnDisplay_ClickAsync"/>

Es wäre nicht die Universal Windows Platform, wenn man der sandboxed APP nicht erst das passende Recht zuweisen müsste. Im Manifest des VIsual Studio Projektes muss die DeviceCapability PointOfService eingetragen sein.

Im PageLoad wird dann das passende LineDisplay Device gesucht und einer Liste zugewiesen. Da diese realtiv lange dauern kann, so 15 –30 Sekunden, wird der Button erst aktiviert, wenn es mindestens ein POS Device gibt.

   1:   Dim devices As DeviceInformationCollection
   2:   Private Async Function MainPage_LoadedAsync(sender As Object, 
e As RoutedEventArgs) As Task Handles Me.Loaded
   3:          devices = Await DeviceInformation.FindAllAsync(
LineDisplay.GetDeviceSelector(PosConnectionTypes.All))
   4:          If devices.Count > 0 Then btnDisplay.Visibility
= Visibility.Visible
   5:   End Function

Im Button Event wird eine Referenz auf das Device über seine ID abgerufen. Da ich nur ein Display nutze, einfach per First. Die Position 0,0 zeigt auf die erste Stelle, erste Zeile. Zeile 2 wäre dann 0,1. Als zweiten Parameter gibt man noch an ob normal, invers oder blinkend. Die Anzeige wird gelöscht und im der nächsten VB.Code Zeile der Text entsprechend er beiden Parameter gesetzt. Wenn er länger ist, wird automatisch umgebrochen.

   1:   Using lineDisplay = Await ClaimedLineDisplay.FromIdAsync(devices.First.Id)
   2:              Dim position = New Point(0, 0)
   3:              Dim attribute = LineDisplayTextAttribute.Normal
   4:              Await lineDisplay.DefaultWindow.TryClearTextAsync()

5: Await lineDisplay.DefaultWindow.TryDisplayTextAsync(

text1.Text, attribute, position)

   6:  End Using

Supersimpel, deswegen noch der Bonustrack. Man kann die Fähigkeiten des Displays abfragen und so z.B. wie vorher erwähnt Text auch Blinkend ausgeben.

   1:  If Not lineDisplay.Capabilities.CanBlink = 
LineDisplayTextAttributeGranularity.NotSupported Then
   2:                  attribute = LineDisplayTextAttribute.Blink
   3:  End If

 

Das Wahnsinns UWP Kassen Projekt gibt es auch auf Github.

Kommentare sind geschlossen