Ich bin nun eigentlich mit dem ganzen durch!
Es geht recht einfach sich einen Stream vom Tuner zu holen. Das ganze DVB-API Demux Zeug kann man sich sparen.
Man gibt dem axe_dmxts.ko einfach die gewünschte PID und man erhält die TS-Pakete.
Init:
28.10.2014-17:54:52 : open() file: /dev/axe/frontend-0, mode: 0, FD: 46
28.10.2014-17:54:52 : _IOR, Size: 168, 0x6F, 0x3D, FD: 46 (/dev/axe/frontend-0): axe_fe - FE_GET_INFO
28.10.2014-17:54:52 : FE_GET_INFO: name: idl004-sat, type: 0
28.10.2014-17:54:52 : FE_GET_INFO: frequency_min: 0x000E7EF0, frequency_max: 0x0020CE70
28.10.2014-17:54:52 : FE_GET_INFO: frequency_stepsize: 0x00000001, frequency_tolerance: 0x00000001
28.10.2014-17:54:52 : FE_GET_INFO: frequency_min: 0x000E7EF0, frequency_max: 0x0020CE70
28.10.2014-17:54:52 : FE_GET_INFO: symbol_rate_min: 0x000001F4, symbol_rate_max: 0x02AEA540
28.10.2014-17:54:52 : FE_GET_INFO: symbol_rate_tolerance: 0x00000064, notifier_delay: 0x00000000
28.10.2014-17:54:52 : FE_GET_INFO: caps: 0x800007BF
28.10.2014-17:54:52 : _IO, Size: 0, 0x6F, 0x43, FD: 46 (/dev/axe/frontend-0): axe_fe - FE_SET_VOLTAGE
28.10.2014-17:54:52 : FE_SET_VOLTAGE: 0
28.10.2014-17:54:52 : open() file: /dev/axe/frontend-1, mode: 0, FD: 47
28.10.2014-17:54:52 : _IOR, Size: 168, 0x6F, 0x3D, FD: 47 (/dev/axe/frontend-1): axe_fe - FE_GET_INFO
28.10.2014-17:54:52 : FE_GET_INFO: name: idl004-sat, type: 0
28.10.2014-17:54:52 : FE_GET_INFO: frequency_min: 0x000E7EF0, frequency_max: 0x0020CE70
28.10.2014-17:54:52 : FE_GET_INFO: frequency_stepsize: 0x00000001, frequency_tolerance: 0x00000001
28.10.2014-17:54:52 : FE_GET_INFO: frequency_min: 0x000E7EF0, frequency_max: 0x0020CE70
28.10.2014-17:54:52 : FE_GET_INFO: symbol_rate_min: 0x000001F4, symbol_rate_max: 0x02AEA540
28.10.2014-17:54:52 : FE_GET_INFO: symbol_rate_tolerance: 0x00000064, notifier_delay: 0x00000000
28.10.2014-17:54:52 : FE_GET_INFO: caps: 0x800007BF
28.10.2014-17:54:52 : _IO, Size: 0, 0x6F, 0x43, FD: 47 (/dev/axe/frontend-1): axe_fe - FE_SET_VOLTAGE
28.10.2014-17:54:52 : FE_SET_VOLTAGE: 0
28.10.2014-17:54:52 : open() file: /dev/axe/frontend-2, mode: 0, FD: 48
28.10.2014-17:54:52 : _IOR, Size: 168, 0x6F, 0x3D, FD: 48 (/dev/axe/frontend-2): axe_fe - FE_GET_INFO
28.10.2014-17:54:52 : FE_GET_INFO: name: idl004-sat, type: 0
28.10.2014-17:54:52 : FE_GET_INFO: frequency_min: 0x000E7EF0, frequency_max: 0x0020CE70
28.10.2014-17:54:52 : FE_GET_INFO: frequency_stepsize: 0x00000001, frequency_tolerance: 0x00000001
28.10.2014-17:54:52 : FE_GET_INFO: frequency_min: 0x000E7EF0, frequency_max: 0x0020CE70
28.10.2014-17:54:52 : FE_GET_INFO: symbol_rate_min: 0x000001F4, symbol_rate_max: 0x02AEA540
28.10.2014-17:54:52 : FE_GET_INFO: symbol_rate_tolerance: 0x00000064, notifier_delay: 0x00000000
28.10.2014-17:54:52 : FE_GET_INFO: caps: 0x800007BF
28.10.2014-17:54:52 : _IO, Size: 0, 0x6F, 0x43, FD: 48 (/dev/axe/frontend-2): axe_fe - FE_SET_VOLTAGE
28.10.2014-17:54:52 : FE_SET_VOLTAGE: 0
28.10.2014-17:54:52 : open() file: /dev/axe/frontend-3, mode: 0, FD: 49
28.10.2014-17:54:52 : _IOR, Size: 168, 0x6F, 0x3D, FD: 49 (/dev/axe/frontend-3): axe_fe - FE_GET_INFO
28.10.2014-17:54:52 : FE_GET_INFO: name: idl004-sat, type: 0
28.10.2014-17:54:52 : FE_GET_INFO: frequency_min: 0x000E7EF0, frequency_max: 0x0020CE70
28.10.2014-17:54:52 : FE_GET_INFO: frequency_stepsize: 0x00000001, frequency_tolerance: 0x00000001
28.10.2014-17:54:52 : FE_GET_INFO: frequency_min: 0x000E7EF0, frequency_max: 0x0020CE70
28.10.2014-17:54:52 : FE_GET_INFO: symbol_rate_min: 0x000001F4, symbol_rate_max: 0x02AEA540
28.10.2014-17:54:52 : FE_GET_INFO: symbol_rate_tolerance: 0x00000064, notifier_delay: 0x00000000
28.10.2014-17:54:52 : FE_GET_INFO: caps: 0x800007BF
28.10.2014-17:54:52 : _IO, Size: 0, 0x6F, 0x43, FD: 49 (/dev/axe/frontend-3): axe_fe - FE_SET_VOLTAGE
28.10.2014-17:54:52 : FE_SET_VOLTAGE: 0
Alles anzeigen
Parameter: Standard FE_GET_INFO & FE_SET_VOLTAGE
Frontend Thread Reset:
28.10.2014-18:01:31 : _IO, Size: 0, 0x6F, 0x5D, FD: 46 (/dev/axe/frontend-0): axe_fe - FRONTEND_RESET: value: 0x54
Parameter: uint8
Solange noch ein Tuner frei ist, ist der value 0x54. Sobald alle 4 Tuner belegt sind und noch ein Kanal eingestellt werden soll ist es 0x0A.
Hat wahrscheinlich etwas mit Reset Complete/Fast zu tun. Genaueres kann ich nicht sagen.
Frontend Thread Start:
28.10.2014-17:54:52 : _IOW, Size: 1, 0x6F, 0x61, FD: 46 (/dev/axe/frontend-0): axe_fe - FRONTEND_THREAD_UP
28.10.2014-17:54:52 : FRONTEND_THREAD_UP: Start frontend tuner thread: 2 - Horizontal/Low
Parameter: Pointer of uint8
Set Tuner Parameter:
28.10.2014-17:54:52 : _IOW, Size: 8, 0x6F, 0x52, FD: 46 (/dev/axe/frontend-0): axe_fe - FE_SET_PROPERTY
28.10.2014-17:54:52 : FE_SET_PROPERTY: num: 7, props: 0x2af3c9e0
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[0]: 2: DTV_CLEAR
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[1]: 17: DTV_DELIVERY_SYSTEM
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[1]: DTV_DELIVERY_SYSTEM, 6 - SYS_DVBS2
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[2]: 3: DTV_FREQUENCY
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[2]: DTV_FREQUENCY, 0x001A2750 (1714000)
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[3]: 6: DTV_INVERSION
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[3]: DTV_INVERSION, 2 - INVERSION_AUTO
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[4]: 8: DTV_SYMBOL_RATE
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[4]: DTV_SYMBOL_RATE, 0x014FB180 (22000000)
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[5]: 9: DTV_INNER_FEC
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[5]: DTV_INNER_FEC, 9 - FEC_AUTO
28.10.2014-17:54:52 : FE_SET_PROPERTY: props[6]: 1: DTV_TUNE
Alles anzeigen
Parameter: Standard FE_SET_PROPERTY
Öffnen und setzen einer PID beim Demuxer:
28.10.2014-17:54:52 : fopen64() file: /dev/axe/demuxts-0, mode: rb, FD: 50
28.10.2014-17:54:52 : _IOW, Size: 2, 0x6F, 0x01, 0x307ba49c, FD: 50 (/dev/axe/demuxts-0): axe_dmxts - STAPI: SlotAllocate, SlotLinkToBuffer, SlotSetPid
28.10.2014-17:54:52 : DEMUXTS: Set Slot for PID: 0x0000
Parameter: Pointer to uint16
Nun könnte man mit read() schon TS Pakete abholen...
28.10.2014-17:54:52 : read() file: /dev/axe/demuxts-0, FD: 50, buffer: 0x5cc284, read bytes: 1316, got 1316 bytes
Parameter: Pointer to Buffer, Size 7 * 188 = 1316 Bytes.
Es werden also immer 7 TS Pakete abgeholt.
Entfernen von PID beim Demuxer:
28.10.2014-17:54:52 : _IOW, Size: 2, 0x6F, 0x02, 0x307ba47c, FD: 50 (/dev/axe/demuxts-0): axe_dmxts - STAPI: SlotClearPid, SlotUnLink, SlotDeallocate
28.10.2014-17:54:52 : DEMUXTS: Clear Slot for PID: 0x0000
Parameter: Pointer to uint16
FE_EVENT:
28.10.2014-17:54:52 : _IOR, Size: 40, 0x6F, 0x4E, FD: 46 (/dev/axe/frontend-0): axe_fe - FE_GET_EVENT
28.10.2014-17:54:52 : FE_GET_EVENT: Status: 0, Frequency: 0x001A2750 (1714000), inversion: 2 - INVERSION_AUTO
Parameter: Standard FE_EVENT
FE_READ_SIGNAL_STRENGTH:
28.10.2014-17:54:52 : _IOR, Size: 2, 0x6F, 0x47, FD: 46 (/dev/axe/frontend-0): axe_fe - FE_READ_SIGNAL_STRENGTH
28.10.2014-17:54:52 : FE_READ_SIGNAL_STRENGTH: 0x46F9
Parameter: Standard FE_READ_SIGNAL_STRENGTH
FE_READ_SNR:
28.10.2014-17:54:52 : _IOR, Size: 2, 0x6F, 0x48, FD: 46 (/dev/axe/frontend-0): axe_fe - FE_READ_SNR
28.10.2014-17:54:52 : FE_READ_SNR: 0xE784
Parameter: Standard FE_READ_SNR
FE_READ_BER:
28.10.2014-17:54:52 : _IOR, Size: 4, 0x6F, 0x46, FD: 46 (/dev/axe/frontend-0): axe_fe - FE_READ_BER
28.10.2014-17:54:52 : FE_READ_BER: 0x0000
Parameter: Standard FE_READ_BER
Dann eine komplett AXE eigene Status Funktion:
Sie wird nur benutzt um den Tunerstatus abzufragen.
Vielleicht auch dazu um bei einem zusätzliche Kanal den Tuner zu finden der bereits auf den Transponder eingestellt ist...
28.10.2014-17:54:52 : _IOR, Size: 56, 0x6F, 0x60, FD: 46 (/dev/axe/frontend-0): axe_fe - FRONTEND_STATUS
28.10.2014-17:54:52 : FRONTEND_STATUS: val0 0x00000000, val1 0x00000001
28.10.2014-17:54:52 : FRONTEND_STATUS: val2 0x00000001, Modulation: 9 - PSK_8
28.10.2014-17:54:52 : FRONTEND_STATUS: val4 0x00000000, Frequency 0x001A2750 (1714000)
28.10.2014-17:54:52 : FRONTEND_STATUS: val6 0xFFFFFD44 (-700), val7 0x0000ABE0
28.10.2014-17:54:52 : FRONTEND_STATUS: Symbolrate 22000, val9 0x00000002
28.10.2014-17:54:52 : FRONTEND_STATUS: Coderate: 2 - FEC_2_3, RollOff 0.35
28.10.2014-17:54:52 : FRONTEND_STATUS: val12 0x00000001, val13 0x00000000
Parameter: Pointer to struct of 14 * uint32.
Alle Werte habe ich noch nicht aufgeschlüsselt. val1 ist wahrscheinlich noch "Kanal eingestellt == 1".
Um nun den Kanal zu schließen:
Alle PIDs mit Clear PID abräumen.
Dann den Demuxer schließen:
28.10.2014-17:55:04 : close() file: /dev/axe/demuxts-0, FD: 50
Das war's!
Nach dem SAT>IP Timeout von 60s schickt die Anwendung noch den Tunerthread zum Schlafen und dreht die LNB Spannung ab:
28.10.2014-17:56:04 : _IO, Size: 0, 0x6F, 0x5D, FD: 46 (/dev/axe/frontend-0): axe_fe - FRONTEND_RESET: value: 0x54
28.10.2014-17:56:04 : _IOW, Size: 4, 0x6F, 0x5B, FD: 46 (/dev/axe/frontend-0): axe_fe - FRONTEND_SET_STANDBY: value: 0xFFFFFFFF (-1)
28.10.2014-17:56:04 : _IO, Size: 0, 0x6F, 0x43, FD: 46 (/dev/axe/frontend-0): axe_fe - FE_SET_VOLTAGE
28.10.2014-17:56:04 : FE_SET_VOLTAGE: 2
28.10.2014-17:56:04 : _IO, Size: 0, 0x6F, 0x43, FD: 47 (/dev/axe/frontend-1): axe_fe - FE_SET_VOLTAGE
28.10.2014-17:56:04 : FE_SET_VOLTAGE: 2
28.10.2014-17:56:04 : _IO, Size: 0, 0x6F, 0x43, FD: 48 (/dev/axe/frontend-2): axe_fe - FE_SET_VOLTAGE
28.10.2014-17:56:04 : FE_SET_VOLTAGE: 2
28.10.2014-17:56:04 : _IO, Size: 0, 0x6F, 0x43, FD: 49 (/dev/axe/frontend-3): axe_fe - FE_SET_VOLTAGE
28.10.2014-17:56:04 : FE_SET_VOLTAGE: 2
FRONTEND_SET_STANDBY: Parameter: uint32
Nun sollte es recht einfach sein eine eigene Anwendung für die idl4k Firmware zu erstellen.
Da es durch die AXE Treiber recht einfach ist, ist vdr fast schon overkill.
Besser wäre wahrscheinlich eine eigene SAT>IP Anwendung.
Ich selber werde mich eher darauf konzentrieren ein DVB-API Plugin dafür zu entwickeln.
Anbei noch ein paar Logs mit Kanalwechsel usw.
mfg