Archive for the ‘Android’ Category.

Beispiel Kunden-Programmierung: Honeywell BasicTE

Ein Honeywell Kunde möchte von CK3, Windows Mobile 6, Intermec Terminal Emulation zu Honeywell CK65, Android 9, Honeywell BasicTE wechseln.

Für die SAP Telnet/VT Anwendung werden zwei spezielle Anpassung notwendig:

  1. Beim  Drücken der F5 Taste soll die Zeichenfolge “~[35” (F21) zum Host gesendet werden
  2. Wenn GS1-128 Barcode Typen gescannt werden, sollen diese mit dem Präfix [C1 versehen werden.
  3. Das GS Symbol in GS1-128 Barcode Typen muß durch “#” ersetz werden.

Die oben genannten Bedingungen sind auf dem CK3 implementiert. Dort kann man zB den Symbology Identifier (Aim ID) nur für GS1-128 einsetzen lassen. Auf dem CK65 ist diese Aim ID Einfügung nur global für alle Barcode Typen einschaltbar. Die Ersetzung des GS Symbols (hex: 0x1D) ist auf dem CK3 ebenfalls von Haus aus möglich. Der CK65 bietet dies Möglichkeit im Zusammenhand mit Honeywell BasicTE nicht.

Die Tastenbelgung F5->”~[35″ ist in der BasicTE Anwendung über die Anpassung der CustomKeyboard.xml möglich, welche auch das Tastenlayout und die Funktionen der BasicTE Software Tastatur bestimmt.

Da die BasicTE den Barcode Scanner direkt ansteuert muß die Aim ID Einsetzung und die GS Symbol ersetzung über ein sogenanntes DataEdit Plugin realisiert werden. Dazu ist etwas Android Programmierung notwendig. Diese Android Programm erhält dann die Barcode Daten und den Typ über einen Broadcast und kann die Daten dann verändert zurückliefern.

Nach erstenTests und Korrekturen kann der Kunde nun das CK65 uneingeschränkt statt dem CK3 verwenden.

Openvpn server an Deutsche Glasfaser IPv6 only Router und feste-ip.net

OpenVPN auf BananaPi M2 Zero W mit Raspbian

Deutsche Glasfaser Genexis Router in Verbindung mit feste-ip.net zur Umsetzung ipv4 nach ipv6

Ich versuche hier meine Installation basierend auf den nachfolgenden Quellen zusammenzufassen.

Quellen: https://wiki.ubuntuusers.de/OpenVPN/ und https://blog.sengotta.net/openvpn-server-am-unitymedia-ds-lite-anschluss-betreiben/

Nachfolgend sind persönliche Angaben in < und > gesetzt. IP Addressen sind in der Form durch x ersetzt.

Feste-ip.net Universal Portmapper einrichten

Über https://test-ipv6.com/ die öffentliche IP6 Adresse des Servers (VPN Gateway) ermitteln.

Feste-IP.net Portmapper

Bei feste-ip.net habe ich eine Port Weiterleitung auf die öffentliche IPv6 Addresse des BananaPi (dem OpenVPN Server) und den Port 443 unter “Universelle Portmapper” angelegt.

Ich habe hier den Port 443 gewählt da dieser auch in vielen Fremdnetzen (zb Mobilfunk Netze) funktioniert. Der Standard VPN Port 1194 ist möglicherweise in dem einen oder anderen Netz gesperrt.

Ich habe einen Alias gewählt den ich mir leichter merken kann als den DNS-Namen. Ausserdem laufen auf demselben BananaPi M2 Zero W noch drei weitere Dienste. Diese sind über den gleichen Alias unter drei anderen Ports erreichbar.

In der Client.conf muss später der Alias Name und der gemapte Port angegeben werden, da die Verbindung nicht über IPv6 und Port 443 hergestellt wird. Siehe client.con Zeile:

remote <aliasname>.feste-ip.net <auf 443 umgeleiterter port>

Openvpn Server einrichten

Continue reading ‘Openvpn server an Deutsche Glasfaser IPv6 only Router und feste-ip.net’ »

Android: Print PDF to Thermal Portable Wireless Printer

Recently I got the request to write an application that prints a PDF file on a portable Thermal printer.

Normally that does not make sense, as the protable printers come with 2, 3, 4 or 5 inch paper width only. But the PDF files are created for 3 inch paper and os this Receipt printing makes sense.

The idea was to render the PDF to a bitmap and then print the bitmap to the printer. These printers do not support PDF or Postscript, they come with special Printer Language support as called ZPL, ESP/P, CPCL or others. So we need to create a Bitmap of the PDF first and then print the Bitmap.

I started using the Android Google PDFRenderer but this fails with two issues: the bitmaps created are always transparent and print with black background where white has to be; the text was not rendered as the Fonts did not render.

Among others I found PDFbox and after fixing a small issue with scaling of bitmaps the solution works very well.

The CPCL_Sample code and application can load a PDF file. This is then converted to a scaled bitmap which can then be printed to a CPCL compatible printer. The CPCL performance is very different and printing on a Zebra takes about a minute for a 3 by 4 inch sized bitmap.

The code has to use a lot of intents and background tasks as most processing takes some time. The bitmap is created by an IntentService. The Sewoo SDK prints the bitmap first to a queue buffer and there is no control or feedback about the status of the print job. So it hopefully prints after some time.

By replacing the print SDK you should be able to print the bitmap of the rendered PDF to any Bitmap-Printing capable printer.

Be warned: there are Printers that are compatible with a Printer Language like CPCL but may not support Bitmap printing.

Source code and apk at github.

Android development: btPrint4 prints demos and files to Bluetooth receipt and label printers

This is an update to my btPrint4 android application. The app now supports ‘printing’ of files. You are no longer tied to the provided demo files. ‘Printing’ here means it sends the file as is to the printer. So, watch your step and do not send files that your printer does not understand.

btprin4_file_main  btprint4_file_selected  btprint4_file_browse

Added a file browser activity: a class named item to hold file informations, a FileChooser class and a FileArrayAdapter. Then the needed layout files are added.

Continue reading ‘Android development: btPrint4 prints demos and files to Bluetooth receipt and label printers’ »