Havardgram
Editions: Normal | Mobile
Jakjak that catcat says the photo galleries are mostly just cat photos. She is a fluff butt.

New Toy: A Unimark ET7000 Boarding Pass Printer

It's an ATB2 Type 4 coupon with no pre-printing and no magstripe
sitting on a laptop with the a portion of the screen and part of the
keyboard, just the number and function keys. And if you didn't know,
the ATB2 thing is the formal designation for the size and shape of
an airline boarding pass or ticket or whole host of other document 
types that airlines used to issue before the e-ticketing mandate
of 2008. 

The card itself is being used as a server update checklist and carries
boxes for all the various steps I have for server updates, the name
of the customer, the server name, the time the updates should start,
the time they should end, and a formal drop-dead time to fall back
if something goes wrong. There's even a big box for any notes and
of course the JIRA ticket number is there, because everyone likes
to get paid.

The white balance is way off because this was shot on a cell phone.
I should really clean my keyboard.

Before I even get started I would like to thank Joe Young at Unimark for the assistance on getting the printer out of "weird proprietary mode" and loaded with standard firmware and for answering all my other questions and then some. I never thought I would be in a position to recommend a manufacturer for boarding pass and baggage tag printers, but if the level of support and service I received dealing with a printer purchased on the secondary market is anything to go by, their primary customers will be in good hands.


Okay, so 25 years ago the big airline ticket / boarding pass printers that were being replaced with newer, smaller devices and those monsters just flooded ebay and I regretted not buying one. What would I do with one of those things? No clue. Probably for the best as they were slightly larger than a typical full-sized PC tower case. Well now we're at a point where the next two generation of printers are starting to hit the used market and I found a few good deals.

First printer was actually an Epson TM-L500A. It arrived, and it turns out it had ARINC firmware on it. I tried to get it to load the standard firmware, but that ended in failure. It was actually a charity-run auction, so I didn't feel bad that the device may just be e-waste. Epson never was one of the classic companies that made the boarding pass printers. No, I wanted either an IER or Unimark printer. As Unimark is literally the only one of the old ATB printer companies that is still marketing new devices, this was clearly the best choice. Not to mention, their current flagship printer, the ET7000 is a compact metal box with an integrated power supply. If I can find one of those at a good price then maybe I would...

it's a top-front view of a black metal box with a small LCD character display on the front, a membrane keyboard, a spot for a ticket to roll out, the Unimark logo, some status LEDs, and a label that says PECTABS SYNCED. The printer is sitting on carpet, because electronics love sitting on carpet. Static electricity has never harmed any electronics. Thermal printheads are most certainly not known for being highly sensitive to ESD.

Fifty bucks plus shipping and it was mine. I looked into buying ATB boarding pass stock, but the only US seller with an online store wanted way too much money per box, and the Alibaba option was going to be a few hundred dollars and I would have to deal with Customs which isn't that big of a deal, but it's more pain than it's worth. Fortunately, I knew that something was available that was the correct size, and the price was pretty cheap, even if I had to punch timing marks myself or had to feed one at a time, it would certainly be doable. So I bought a bundle of those. A few days later I had everything in hand, and it was stuck in BTP (baggage tag) mode, and the service menu had a password. I brought it up in maintenance mode, which allows for firmware download, and apparently at some point managed to do something that killed the firmware, but I didn't quite know that yet.

I emailed Unimark's support, and by the time I woke up in the morning I had some answers... it actually had a proprietary firmware on it (ARINC MUSE, just like the Epson), so Joe sent the correct firmware along with instructions on how to get it on there, as well as a note that he'll need to send me a config file for it in a bit, which was sent a few hours later. That night, I made it home, and loaded up the firmware and ran into a stumbling block due to the total clobbering of the firmware... the RFID module's country settings were gone. Next day, follow up email and we got that sorted. Time for the first print... and it had no text. Turns out I also managed to nuke the font on that unit. So, this all took a couple days to sort out by email. It would have been faster with a phone call, but I'm dealing with a used unit and there's little chance I'll buy one new. It would be rude to impose more than I have already. Asked for recommendations for ATB media, and he pointed me in the right direction... Magnetic Ticket & Label, and Print-O-Tape are the two big companies that deal with this in the US. MTL seemed like they were more focused on custom printing, while Print-O-Tape noted they had two stock variants ready to go.

Just one more question though... would the ticket stock work without modification? I attempted to set it to blackmark detection, but was unable to make it work. I emailed Joe, and he said if I sent some of the tickets he would give it a shot. I placed another order with WW&L, and a week later he had the tickets. Next day, I had the bad news that it just won't work with the type of sensor they use on the ET7000.

While I really would have liked to have some very inexpensive ticket media to use, when I called Print-O-Tape I was pleasantly surprised to learn that the prices was less than half what the company that was literally just drop shipping a Print-O-Tape order wanted. And then the first big price break kicked in at five boxes, so I ordered five boxes. I knew from the moment someone answered the phone at Print-O-Tape they were the right company to call. Friendly, helpful, and up front that they're backlogged with end-of-year purchases and that there's going to be a long delay... of one week. The order arrived today, and that's that. Should be good for a few months at least.

But what are you going to do with this thing?

When someone knows that they're typing something Wrong™ in a lot of places, it's common to follow it up with "...aisle seat, please." for their ticket to hell. I thought it would be funny to print one out. While I am definitely the sort of person that would go all in on a stupid joke, there were other obvious uses for this printer.

I'm easily distracted. I need reminders in front of me. While I have been using teller slips, those check-sized slips of paper bank tellers use for cash-in, cash-out, and tagging batches of checks and other transaction items while at the bank, I've been using them as hand-written for the most part. I have a couple of Addmaster printers and other POS printers with endorsers, but those are big, bulky, noisy, or limited in their on special ways. While I can write an ESC/POS or other custom print language utility in my sleep these days, they require a little more work than a boarding pass printer. So, clearly, I'm going to start printing these things out on ATB media. You can see an example of one of these up top.

Using the thing

Interfacing with the printer is rather simple. First you define the PECTAB, which is a sort of template and can be thought of as an IDL, as you'll need to use that to determine how to generate your output. You then send data messages that match this PECTAB, and the printer prints it out. Messages sent to the printer are wrapped by STX and ETX. There's a standard method of sending the printer logos and other images. It also has a method of sending templates, which aren't the same as the PECTAB, but are for static, unchanging text as well as lines, boxes, and logos.

PECTABs look weird at first, but are very simple as far as a printer language goes. You start with PT command, then define the separator for the PECTAB, the separator for the response, then a replacement character when the PECTAB is used to define how to convert magstripe data back to a data message, then you give it a one or three character format code, the version of that format, and then a "steering command" that I *think* is used to define which print bin is used, then the character you want to use for logo and template references, a character to use for color selection, then the PECTAB separator, followed by three strings separated by your separator from one to five characters each defining the prefixes used for various messages that could be generated in response to the PECTAB. I was able to figure out most of this from an online PECTAB Editor, and filled in the gaps by using some Google-fu, and pestering others for little bits of knowledge. I have no idea what the AD; prefix is for on the PECTAB editor. It makes my printers error out.

Immediately following this is element 01 which is used to define the length of the format code and the layout of the mag stripe and then a steering command that doesn't seem like it's relevant now that magstripes are no longer a thing. On the Unimark it's sufficient to use 0101# or 0103# for this. This element also has special meaning in the data message where it's used to call on the specific format being used. For example, if you wanted to call on your PECTAB named G you would use 01G# in your data message.

For the other elements, ranges 02-FF and the extended G0-Z9 ranges give you plenty of fields to mess with. Restated, the regular codes are hex digits while the extended codes are a letter plus zero through nine. In the PECTAB you define each element as xxllrccf where xx is the element, ll is the length, rcc is the row and column, while f is the optional font. An item may have up to ten print positions defined. You'll rarely see more than two print locations.

There is a suggested set of defined mappings between Things That Should Be On A Ticket or Boarding Pass and PECTAB elements, but I'm not going to cover that as it's irrelevant. Rather, I break things down into functional groups and treat each PECTAB as a simple sentence in Subject Verb Object order. This gives three primary blocks of elements, where the first element is also the ID for that particular thing, and the second is the title, and the rest are "application defined". There is a block for "document control", which covers things like the document's identifier, and various dates and times. There's another block for "print control" which is also used for when and where the thing is printed, and who printed it. There are also blocks for barcodes, logos, templates, and boiler plate text that makes more sense if it's in the data message rather than a template.

Templates are weird. While the PECTAB defines things in terms of character cells, the templates are positions based on tenths of a mm. I should note that character cells are defined as 6 rows per inch and ten columns per inch which means you will be off by a tenth of a milimeter every three rows. You can make the math simple without compensation and it won't be too far off, but it won't be perfect unless you tweak and experiment. In a template you can define text, which does not call fonts the same way as the PECTAB, outlined boxes, straight lines, oblique lines, and logos. Now, note that I mentioned that boxes are actually outlined boxes. This is because when you actually look at how straight lines are defined, you'll realize that wait a minute these aren't straight lines, these are solid boxes. The only difference between a straight line and a box is that the box has two extra digits to define the line width. For some reason, every template element ends with five zeros. The general format of a template element is eeAxxxxyyy and then the rest of the string will vary depending on the element type. Boxes have height, width, and line width. Solid lines have just height and width. Text two digits for character and line rotation (0-3, rotating in steps of 90 degrees), an indicator that sort of seems like a font definition, but isn't (I don't have a spec for this), the character size in CPI which also cauases it to scale by height unlike PECTAB fonts, a character that you'll typically see as an @ sign that does something and then five zeros, your text, and then a separator. Logos specify logo number then five zeros.

In your data message logos are referenced by something like L0@67# while templates are going to be something like T0@@05. You can have multiple templates for one coupon, which is convenient. I use that feature on the updates checklist to have a cover that doesn't have the boxes on the man coupon but still has the template text on the stub.

Some quirks to remember... elements must be in proper order. This is a simple error detection mechanism. Elements can't be defined as longer than 80 characters. This is perfectly acceptable as there are only 72 columns on the coupon. For 17cpi this works out as 80 columns will fit perfectly on the main coupon. While # is the most common separator, if you need to print that, you can use a different character as your separator. An example from Sabre's documentation uses ^ as its separator. Barcodes are a fun subject I may cover later. My recommendation is to use Aztec as your preferred 2d barcode, as it is slightly better than QR codes in most situations and it looks better than Data Matrix, and it grows predictably unlike PDF417.

And a brief note about the Epson

Epson provides the standard firmware on their site, along with a settings utility. Unfortunately, the firmware utility would fail trying to establish a connection. I noticed, however, that the settings utility switched the printer into ESC/POS which made me think... there's a setting for that. I used the config utility to switch the ARINC version of the printer to start in ESC/POS mode. From there I was finally able to get the firmware utility to work, and told it that it's okay to possibly brick the thing and use firmware for "not this device". A few minutes later, I had an Epson TM-L500A with standard firmware. I loaded it up with the PECTABs, templates, and logos I had been using. Most of them worked. Except there seems to be some sort of scaling issue because it doesn't print any template elements where they should be. Also, normal text prints a bit too splotchy. Hrm. I switch it into ESC/POS mode and make some test prints. Everything from thin curvy lines to thick text and even a photo, and it has no problems. It's not an issue with the thermal stock being incompatible with the printer. It's just that it doesn't seem like it's a very good in ATB mode. I switched it back to ESC/POS mode and will continue to use it like that. At least it's still usable.

Final note

The seller had a second printer, so I bought it. Now all I need to do is find one of those big chunky older printers in working order at a reasonable price. Would love to have a Unimark XP or Mark I. Or maybe that TI printer from the same era. However, the Unimark is a better choice as spare print heads are still available.