Posts: 3
Joined: Sun Oct 28, 2018 9:00 pm

Getting the AirTv USB Tuner to work (955Q re-brand, North America)

Sun Oct 28, 2018 9:41 pm

So my family purchased a AirTv android box with OTA PVR capabilities using a USB dongle tuner. The AirTv is horrible, so that is for a future hacking project but the $19.99 tuner dongle we got with it looked familiar.
It is a direct re-brand of the Hauppauge WinTv-HVR-955Q. Well almost direct as the Pid is different.
The current line of 955Q uses a 0xb123 Pid, but the AirTv unit uses a Pid of 0xb124. the Vid is otherwise the same.

Plugging it in to the pi there were no lights on, and all the usual places would show the hauppauge brand, VidPid, and serialNo. nothing more, nothing less.
Trying to make a udev rule got the lights to turn on, so that is a step in the right direction but that was about it.

Opening the Airtv unit up, I was able to verify it is made by hauppauge, it uses the: si2157-A30 Tuner, LGDT3306A Demod... but the USB chip is hidden between the stacked boards.
On a hunch I checked the support section on Hauppauge's site for drivers... found the bradlove PPA, but it contained the same files that I already had. During all of this I found the hauppage product ID tool, and gave it a whirl. Well look at that... it says it is a 955Q, and gave me an eeprom dump and... says it uses a Conectax Cx23102 USB interface!

I started this endeavor on OSMC, but after running into an issue with my changes not being compiled back in to my rebuilds, i switched to Raspbian.
Searching through files for keywords, and looking at the different functions, I found a critical place to change.
In cx231xx-cards.c there is a segment that list the supported cards in each their of function where the VidPid is parsed.
Copying the function from the Hauppage 955Q and adding it back in with the Pid changed to the AirTv Pid then re-compiling got me back to the point where lights were on, but nobody is home.
These are the changes that were made around line 926 in cx231xx-cards.c

Code: Select all

         .driver_info = CX231XX_BOARD_HAUPPAUGE_EXETER},
 	{USB_DEVICE(0x2040, 0xb123),
 	 .driver_info = CX231XX_BOARD_HAUPPAUGE_955Q},
+	/* AirTv Single ATSC QAM Tuner */
+	{USB_DEVICE(0x2040, 0xb124),
+	 .driver_info = CX231XX_BOARD_HAUPPAUGE_955Q},
 	{USB_DEVICE(0x2040, 0xb130),
 	 .driver_info = CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx},
 	{USB_DEVICE(0x2040, 0xb131),
A while back in this project I remember seeing a card index of all of the cards with a number assignment to them. I even added the card=21 (the 955Q index number) to my udev rules.
The thing I found was that my card would still come up as card=0 even with the changes in the -cards.c file.

The firmware i found being used was the v4l-cx23558-enc.fw and was listed as broken on The firmware that should be used is the v4l-cx231xx-avcore-01.fw, and it was indeed in my /lib/firmware directory. Looking through all the files for an exact match string on the cx23558 firmware lead me to cx231xx-417.c at line 40 the firmware image name is defined to be v4l-cx23885-enc.fw . I changed that to define v4l-cx231xx-avcore-01.fw instead, re-compiled..... and TADA! it works! TVHeadend registers it now, and it will scan channels and all!
This is the change that was made at line 40 in cx231xx-417.c:

Code: Select all

 #include <media/tuner.h>
 #define CX231xx_FIRM_IMAGE_SIZE 376836
-#define CX231xx_FIRM_IMAGE_NAME "v4l-cx23885-enc.fw"
+#define CX231xx_FIRM_IMAGE_NAME "v4l-cx231xx-avcore-01.fw"
 /* for polaris ITVC */
 #define ITVC_WRITE_DIR          0x03FDFC00
One of the least expensive Tuner cards I have found, and it is a re-brand of one of the more expensive ones!

Return to “Media centres”