diff --git a/apps/ddinfo.c b/apps/ddinfo.c index 0168dcf..c6b861e 100644 --- a/apps/ddinfo.c +++ b/apps/ddinfo.c @@ -391,13 +391,13 @@ int mci_info(int dev, uint32_t link, uint8_t demod) void print_license(int dev, struct mci_result *res) { - if (res->license.serial_number[0] == 0xff) - res->license.serial_number[0] = 0; - printf("SERNBR:%s\n", (char *) &res->license.serial_number); + if (res->get_license.serial_number[0] == 0xff) + res->get_license.serial_number[0] = 0; + printf("SERNBR:%s\n", (char *) &res->get_license.serial_number); printf("ID:"); - ldump(res->license.ID, 8); + ldump(res->get_license.ID, 8); printf("LK:"); - ldump(res->license.LK, 24); + ldump(res->get_license.LK, 24); } int mci_license(int dev) diff --git a/apps/ddlicense.c b/apps/ddlicense.c index 83da461..9c4ccc5 100644 --- a/apps/ddlicense.c +++ b/apps/ddlicense.c @@ -61,9 +61,9 @@ static int mci_get_license(int dev, uint8_t *ID, uint8_t *LK, uint8_t *SN) dprintf(2, "MCI error: %02x, check firmware and license file.\n", msg.res.status); return -1; } - memcpy(ID, msg.res.license.ID, 8); - memcpy(LK, msg.res.license.LK, 24); - memcpy(SN, msg.res.license.serial_number, 24); + memcpy(ID, msg.res.get_license.ID, 8); + memcpy(LK, msg.res.get_license.LK, 24); + memcpy(SN, msg.res.get_license.serial_number, 24); return 0; } @@ -75,8 +75,8 @@ static int mci_set_license(int dev, uint8_t *ID, uint8_t *LK) }; int ret; - memcpy(msg.cmd.license.ID, ID, 8); - memcpy(msg.cmd.license.LK, LK, 24); + memcpy(msg.cmd.set_license.ID, ID, 8); + memcpy(msg.cmd.set_license.LK, LK, 24); ret = ioctl(dev, IOCTL_DDB_MCI_CMD, &msg); if (ret < 0) { diff --git a/ddbridge/ddbridge-mci.h b/ddbridge/ddbridge-mci.h index ff0847c..4c57a2b 100644 --- a/ddbridge/ddbridge-mci.h +++ b/ddbridge/ddbridge-mci.h @@ -101,6 +101,7 @@ #define MCI_STATUS_OK (0x00) #define MCI_STATUS_UNSUPPORTED (0x80) +#define MCI_STATUS_DISABLED (0xF9) #define MCI_STATUS_BUSY (0xFA) #define MCI_STATUS_HARDWARE_ERROR (0xFB) #define MCI_STATUS_INVALID_PARAMETER (0xFC) @@ -115,6 +116,9 @@ #define MCI_CMD_SET_INPUT_CONFIG (0x05) +#define MCI_CMD_GET_CAPABILITIES (0x0E) +#define MCI_CMD_GETBIST (0x0F) + #define MCI_CMD_SEARCH_DVBS (0x10) #define MCI_CMD_SEARCH_ISDBS (0x11) @@ -157,11 +161,22 @@ #define MX_CMD_GET_BBHEADER (MCI_CMD_GET_BBHEADER) +#define MCI_CMD_GET_SERIALNUMBER (0xF0) +#define MCI_CMD_EXPORT_LICENSE (0xF0) +#define MCI_CMD_IMPORT_LICENSE (0xF1) + +#define MCI_CMD_POWER_DOWN (0xF2) +#define MCI_CMD_POWER_UP (0xF3) + +#define MX_T2_FLAGS_SETPLP_ID (0x80) +#define MX_T2_FLAGS_SETPLP_INDEX (0x10) + #define MX_L1INFO_SEL_PRE (0) #define MX_L1INFO_SEL_DSINFO (1) #define MX_L1INFO_SEL_PLPINFO (2) #define MX_L1INFO_SEL_PLPINFO_C (3) -#define MX_L1INFO_SEL_SETID (0x80) +#define MX_L1INFO_SEL_SETID (MX_T2_FLAGS_SETPLP_ID) +#define MX_L1INFO_MAGIC (0x3254) #define MCI_BANDWIDTH_EXTENSION (0x80) // currently used only for J83B in Japan @@ -178,6 +193,27 @@ #define MX_MODE_ATSC (12) #define MX_MODE_ATSC3 (13) +#define MX_SUPPORT_DVBS ( 1 << 0 ) +#define MX_SUPPORT_DVBS2 ( 1 << 1 ) +#define MX_SUPPORT_DVBS2X ( 1 << 2 ) + +#define MX_SUPPORT_DVBC ( 1 << 3 ) +#define MX_SUPPORT_DVBT ( 1 << 4 ) +#define MX_SUPPORT_DVBT2 ( 1 << 5 ) +#define MX_SUPPORT_DVBC2 ( 1 << 6 ) + +#define MX_SUPPORT_J83B ( 1 << 7 ) +#define MX_SUPPORT_ISDBT ( 1 << 8 ) +#define MX_SUPPORT_ISDBC ( 1 << 9 ) + +#define MX_SUPPORT_ISDBS ( 1 << 10 ) +#define MX_SUPPORT_ISDBS3 ( 1 << 11 ) +#define MX_SUPPORT_ATSC ( 1 << 12 ) +#define MX_SUPPORT_ATSC3 ( 1 << 13 ) + +#define MX_SUPPORT_J83A ( MX_SUPPORT_DVBC ) +#define MX_SUPPORT_J83C ( MX_SUPPORT_ISDBC ) + #define MX_DVBC_CONSTELLATION_16QAM (0) #define MX_DVBC_CONSTELLATION_32QAM (1) #define MX_DVBC_CONSTELLATION_64QAM (2) // also valid for J83B and ISDB-C @@ -187,6 +223,24 @@ #define MX_SIGNALINFO_FLAG_CHANGE (0x01) #define MX_SIGNALINFO_FLAG_EWS (0x02) +#define MX_SIGNALINFO_FLAG_CHANGE (0x01) +#define MX_SIGNALINFO_FLAG_EWS (0x02) + +#define MX_DISABLE_INPUTS (0) +#define MX_ENABLE_TER_INPUT (1) +#define MX_ENABLE_SAT_INPUT (2) + +#define MX_CAP_FLAGS_SHARED_INPUT (0x0001) + +#define SX8_CMD_INPUT_ENABLE (0x40) +#define SX8_CMD_INPUT_DISABLE (0x41) +#define SX8_CMD_START_IQ (0x42) +#define SX8_CMD_STOP_IQ (0x43) +#define SX8_CMD_ENABLE_IQOUTPUT (0x44) +#define SX8_CMD_DISABLE_IQOUTPUT (0x45) +#define SX8_CMD_PACKETFILTER (0x46) +#define SX8_CMD_RFAGC_CONTROL (0x47) + #define SX8_ROLLOFF_35 0 #define SX8_ROLLOFF_25 1 #define SX8_ROLLOFF_20 2 @@ -194,6 +248,17 @@ #define SX8_ROLLOFF_10 3 #define SX8_ROLLOFF_05 4 +#define MCI_DEMOD_STOPPED (0) +#define MCI_DEMOD_WAIT_SIGNAL (2) +#define MCI_DEMOD_TIMEOUT (14) +#define MCI_DEMOD_LOCKED (15) + +#define SX8_DEMOD_IQ_MODE (1) +#define SX8_DEMOD_WAIT_MATYPE (3) + +#define MX_DEMOD_WAIT_TS (6) +#define MX_DEMOD_C2SCAN (16) + #define MCI_SUCCESS(status) ((status & MCI_STATUS_UNSUPPORTED) == 0) /********************************************************/ @@ -207,6 +272,8 @@ #define MOD_SETUP_FLAG_LAST (0x02) #define MOD_SETUP_FLAG_VALID (0x80) +#define MOD_SETUP_STATUS_MORE (0x01) + #define MOD_STANDARD_GENERIC (0x00) #define MOD_STANDARD_DVBT_8 (0x01) #define MOD_STANDARD_DVBT_7 (0x02) @@ -230,6 +297,18 @@ #define MOD_STANDARD_J83C_QAM64 (MOD_STANDARD_ISDBC_QAM64 ) #define MOD_STANDARD_J83C_QAM256 (MOD_STANDARD_ISDBC_QAM256) +#define MOD_STANDARD_ATV_8 (0x40) +#define MOD_STANDARD_ATV_7 (0x41) +#define MOD_STANDARD_ATV_6 (0x42) + +#define MOD_STANDARD_PAL_B (0x44) +#define MOD_STANDARD_PAL_G (0x45) +#define MOD_STANDARD_PAL_I (0x46) +#define MOD_STANDARD_PAL_DK (0x47) +#define MOD_STANDARD_PAL_DK1 (0x48) +#define MOD_STANDARD_PAL_DK2 (0x49) +#define MOD_STANDARD_PAL_DK3 (0x4A) + #define MOD_CONNECTOR_OFF (0x00) #define MOD_CONNECTOR_F (0x01) #define MOD_CONNECTOR_SMA (0x02) @@ -300,7 +379,7 @@ struct mod_ofdm_parameter { struct mod_qam_parameter { u8 modulation; - u8 rolloff; /* Legal values: 12,13,15,18 */ + u8 rolloff; /* Legal values: 12,13,15,18 (only used with MOD_STANDARD_GENERIC) */ }; struct mod_setup_stream { @@ -322,6 +401,666 @@ struct mod_setup_output { s16 channel_power; }; +struct dvbs2_search { + u8 flags; /* Bit 0: DVB-S Enabled, 1: DVB-S2 Enabled, + 5: ChannelBonding, 6: FrequencyRange, 7: InputStreamID */ + u8 s2_modulation_mask; /* Bit 0 : QPSK, 1: 8PSK/8APSK, + 2 : 16APSK, 3: 32APSK, 4: 64APSK, + 5: 128APSK, 6: 256APSK */ + u8 rsvd1; + u8 retry; + u32 frequency; + u32 symbol_rate; + u8 input_stream_id; + u8 rsvd2[3]; + u32 scrambling_sequence_index; + u32 frequency_range; + u8 channel_bonding_config; /* Bit 7: IsSlave, Bit 5..4: MasterDemod, + bit 0: Num channels - 2. + (must be set on all channels to same value) */ +}; + +struct isdbs_search { + u8 flags; /* Bit 0: 0 = TSID is Transport Stream ID, 1 = TSID is relative stream number */ + u8 rsvd1[2]; + u8 retry; + u32 frequency; + u32 rsvd2; + u16 rsvd3; + u16 tsid; +}; + +struct dvbc_search { + u8 flags; + u8 bandwidth; + u8 rsvd1; + u8 retry; + u32 frequency; +}; + +struct dvbt_search { + u8 flags; /* Bit 0: LP Stream */ + u8 bandwidth; + u8 rsvd1; + u8 retry; + u32 frequency; +}; + +struct dvbt2_search { + u8 flags; /* Bit 0: T2 Lite Profile, 7: PLP, */ + u8 bandwidth; + u8 rsvd1; + u8 retry; + u32 frequency; + u32 reserved; + u8 plp; + u8 rsvd2[3]; +}; + +struct dvbc2_search { + u8 flags; + u8 bandwidth; + u8 rsvd1; + u8 retry; + u32 frequency; + u32 reserved; + u8 plp; + u8 data_slice; + u8 rsvd2[2]; +}; + +struct isdbt_search { + u8 flags; + u8 bandwidth; + u8 rsvd1; + u8 retry; + u32 frequency; +}; + +struct isdbc_search { + u8 flags; /* Bit 0: 0 = TSID is Transport Stream ID, 1 = TSID is relative stream number */ + /* Bit 2..1: 0 = force single, 1 = force multi, 2 = auto detect */ + u8 bandwidth; + u8 rsvd1; + u8 retry; + u32 frequency; + u32 rsvd2; + u16 onid; + u16 tsid; +}; + +struct j83b_search { + u8 flags; + u8 bandwidth; + u8 rsvd1; + u8 retry; + u32 frequency; +}; + +struct get_signalinfo { + u8 flags; /* Bit 0 : 1 = short info (1st 4 Bytes) */ +}; + +struct get_iq_symbol { + u8 tap; + u8 rsvd; + u16 point; +}; + +struct sx8_start_iq { + u8 flags; /* Bit 0 : 0 = VTM/SDR, 1 = SCAN, + Bit 1: 1 = Disable AGC, + Bit 2: 1 = Set Gain. */ + u8 roll_off; + u8 rsvd1; + u8 rsvd2; + u32 frequency; + u32 symbol_rate; /* Only in VTM/SDR mode, SCAN Mode uses exactly 1550/24 MSymbols/s.*/ + u8 gain; /* Gain in 0.25 dB Steps */ + /* Frequency, symbolrate and gain can be schanged while running */ +}; + +struct sx8_input_enable { + u8 flags; + /* Bit 0:1 Preamp Mode; 0 = Preamp AGC, 1 == Minimum (~ -17dB) , + 2 = Medium, 3 = Maximum gain {~ 15dB} + Bit 2: Bypass Input LNA (6 dB less gain) (Note this is after Preamp) + Bit 4: Set RF Gain + Bit 5: Freeze RF Gain (Turn AGC off at current gain, only when already enabled) + Bit 7: Optimize RF Gain and freeze for FFT */ + u8 rf_gain; /* 0 .. 50 dB */ +}; + +struct get_ids { + u8 offset; /* Offset into list, must be multiple of 64 */ + u8 select; /* 0 = Slices, 1 = PLPs (C2 Only) */ + u8 data_slice; /* DataSlice to get PLPList (C2 Only) */ +}; + +struct get_l1_info { + u8 select; /* 0 = Base, 1 = DataSilce, 2 = PLP, Bit 7: Set new ID */ + u8 id; /* DataSliceID, PLPId */ +}; + +struct get_bb_header { + u8 select; /* 0 = Data PLP, 1 = Common PLP, only DVB-T2 and DVB-C2 */ +}; + +struct sx8_packet_filter { + u8 Cmd; + u8 Offset; + u8 Length; + u8 Rsvd1; + u32 Rsvd2[2]; + u8 Data[96]; +}; + +struct sx8_rfagc_control { + u8 cmd; + u8 rsvd; + u16 param; +}; + +struct set_license { + u8 ID[8]; + u8 LK[24]; +}; + +struct mx_capabilities { + u8 type; // 1 = MX + u8 version; // Current 1 + u8 mum_demods; // + u8 num_sat_inputs; // either 0,1 or NumDemods + u16 standards; + u16 flags; + u16 sat_min_frequency; // Note: + u16 sat_max_frequency; // Frequencies in MHz + u16 ter_cable_min_frequency; // Minimum tuning frequency is xxMinFrequeny + Bandwidth/2 + u16 ter_cable_max_frequency; // Maximum tuning frequency is xxMinFrequeny - Bandwidth/2 +}; + +struct common_signal_info { + u8 Rsvd0[3]; + u8 Flags; + + u32 frequency; /* actual frequency in Hz */ + u32 rsvd1; + s16 channel_power; /* channel power in dBm x 100 */ + s16 rsvd2; + s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ + u16 signal_loss_counter;/* Counts signal losses and automatic retunes */ + u32 rsvd4; + u32 ber_numerator; /* Bit error rate: PreRS in DVB-S, PreBCH in DVB-S2X */ + u32 ber_denominator; + u32 ber_rsvd1; /* Place holder for modulation bit error rate */ + u32 ber_rsvd2; +}; + +struct dvbs2_signal_info { + u8 standard; /* 1 = DVB-S, 2 = DVB-S2X */ + u8 pls_code; /* PLS code for DVB-S2/S2X, puncture rate for DVB-S */ + u8 roll_off; /* 2-0: rolloff, 7: spectrum inversion */ + u8 flags; + u32 frequency; /* actual frequency in Hz */ + u32 symbol_rate; /* actual symbolrate in Hz */ + s16 channel_power; /* channel power in dBm x 100 */ + s16 band_power; /*/ band power in dBm x 100 */ + s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ + s16 rsvd2; + u32 packet_errors; /* Counter for packet errors. (set to 0 on Start command) */ + u32 ber_numerator; /* Bit error rate: PreRS in DVB-S, PreBCH in DVB-S2X */ + u32 ber_denominator; +}; + +struct isdbs_signal_info { + u8 modcod; + u8 rsvd0[2]; + u8 flags; /* Bit 0: TMCC changed, Bit 1: EWS */ + u32 frequency; /* actual frequency in Hz */ + u32 symbol_rate; /* actual symbolrate in Hz */ + s16 channel_power; /* channel power in dBm x 100 */ + s16 band_power; /*/ band power in dBm x 100 */ + s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ + s16 rsvd2; + u32 packet_errors; /* Counter for packet errors. (set to 0 on Start command) */ + u32 ber_numerator; /* Bit error rate: PreRS in DVB-S, PreBCH in DVB-S2X */ + u32 ber_denominator; +}; + +struct dvbc_signal_info { + u8 constellation; + u8 rsvd0[2]; + u8 flags; + u32 frequency; /* actual frequency in Hz */ + u32 symbol_rate; /* actual symbolrate in Hz */ + s16 channel_power; /* channel power in dBm x 100 */ + s16 band_power; /* band power in dBm x 100 */ + s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ + s16 rsvd2; + u32 packet_errors; /* Counter for packet errors. (set to 0 on Start command) */ + u32 ber_numerator; /* Bit error rate: PreRS */ + u32 ber_denominator; +}; + +struct dvbt_signal_info { + u8 modulation1; // bit 7..6: Constellation, bit 5..3 Hierachy, bit 2..0 CodeRate High + u8 modulation2; // bit 7..5: CodeRate Low, bit 4..3 Guard Interval, bit 2..1 FFT Mode + u8 rsvd0; + u8 flags; + u32 frequency; /* actual frequency in Hz */ + u32 rsvd1; + s16 channel_power; /* channel power in dBm x 100 */ + s16 band_power; /* band power in dBm x 100 */ + s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ + s16 rsvd2; + u32 packet_errors; /* Counter for packet errors. (set to 0 on Start command) */ + u32 ber_numerator; /* Bit error rate: PreRS */ + u32 ber_denominator; +}; + +struct dvbt2_signal_info { + u8 rsvd0[3]; + u8 flags; + u32 frequency; /* actual frequency in Hz */ + u32 rsvd1; + s16 channel_power; /* channel power in dBm x 100 */ + s16 band_power; /* band power in dBm x 100 */ + s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ + s16 rsvd2; + u32 packet_errors; /* Counter for packet errors. (set to 0 on Start command) */ + u32 ber_numerator; /* Bit error rate: PreRS */ + u32 ber_denominator; +}; + +struct dvbc2_signal_info { + u8 rsvd0[3]; + u8 flags; + + u32 frequency; // actual frequency in Hz + u32 rsvd1; // + s16 channel_power; // channel power in dBm x 100 + s16 band_power; // band power in dBm x 100 + s16 signal_to_noise; // SNR in dB x 100, Note: negativ values are valid in DVB-S2 + s16 rsvd2; + u32 packet_errors; // Counter for packet errors. (set to 0 on Start command) + u32 ber_numerator; // Bit error rate: PreBCH + u32 ber_denominator; +}; + +struct isdbt_signal_info { + u8 rsvd0[3]; + u8 flags; + + u32 frequency; // actual frequency in Hz + u32 rsvd1; // + s16 channel_power; // channel power in dBm x 100 + s16 band_power; // band power in dBm x 100 + s16 signal_to_noise; // SNR in dB x 100, Note: negativ values are valid in DVB-S2 + s16 rsvd2; + u32 packet_errors; // Counter for packet errors. (set to 0 on Start command) + u32 ber_numerator; // Bit error rate: PreRS Segment A + u32 ber_denominator; + u32 ber_rsvd1; // Place holder for modulation bit error rate + u32 ber_rsvd2; + u32 ber_numeratorB; // Bit error rate: PreRS Segment B + u32 ber_numeratorC; // Bit error rate: PreRS Segment C +}; + +struct isdbc_signal_info { + u8 constellation; + u8 rsvd0[2]; + u8 flags; + + u32 frequency; // actual frequency in Hz + u32 symbol_rate; // actual symbolrate in Hz + s16 channel_power; // channel power in dBm x 100 + s16 band_power; // band power in dBm x 100 + s16 signal_to_noise; // SNR in dB x 100, Note: negativ values are valid in DVB-S2 + s16 rsvd2; + u32 packet_errors; // Counter for packet errors. (set to 0 on Start command) + u32 ber_numerator; // Bit error rate: PreRS in DVB-S, PreBCH in DVB-S2X + u32 ber_denominator; +}; + +struct j83b_signal_info { + u8 constellation; + u8 interleaving; + u8 rsvd0; + u8 flags; + + u32 frequency; // actual frequency in Hz + u32 symbol_rate; // actual symbolrate in Hz + s16 channel_power; // channel power in dBm x 100 + s16 band_power; // band power in dBm x 100 + s16 signal_to_noise; // SNR in dB x 100, Note: negativ values are valid in DVB-S2 + s16 rsvd2; + u32 packet_errors; // Counter for packet errors. (set to 0 on Start command) + u32 ber_numerator; // Bit error rate: PreRS in DVB-S, PreBCH in DVB-S2X + u32 ber_denominator; +}; + +struct iq_symbol { + s16 i; + s16 q; +}; + +struct dvbt_tps_info { + u8 tps_info[7]; + // u16 tps_cell_id; +}; + +struct dvbt2_l1_pre { + u8 Type; + u8 BWExtension; + u8 S1; + u8 S2; + + u8 L1RepetitionFlag; + u8 GuardInterval; + u8 PAPR; + u8 L1Mod; + + u8 L1Cod; + u8 L1FECType; + + u8 Align1[2]; + + u32 L1PostSize; + u32 L1PostInfoSize; + + u8 PilotPattern; + u8 TXIDAvailabilty; + u16 CellID; + + u16 NetworkID; + u16 T2SystemID; + + u8 NumT2Frames; + u8 Align2[1]; + + u16 NumDataSymbols; + + u8 RegenFlag; + u8 L1PostExtension; + u8 NumRF; + u8 CurrentRFIndex; + u8 T2Version; + u8 PostScrambled; + u8 BaseLite; + u8 Rsvd; + + // u8 T2Version_PostScrambled_BaseLite_Rsvd[2]; // 4,1,1,4 bit +}; + +struct dvbt2_l1_post { + u16 SubSlicesPerFrame; + u8 NumPLP; + u8 NumAux; + + u8 AuxConfigRFU; + u8 RFIndex; + u8 Align3[2]; + + u32 Frequency; + u8 FEFType; + u8 Align4[3]; + u32 FEFLength; + u8 FEFInterval; +}; + +struct dvbt2_l1_post_plp { + u8 PLPID; + u8 Type; + u8 PayloadType; + u8 FFFlag; + + u8 FirstRFIndex; + u8 FirstFrameIndex; + u8 GroupID; + u8 Cod; + + u8 Mod; + u8 Rotation; + u8 FECType; + u8 Align1[1]; + + u16 NumBlocksMax; + u8 FrameInterval; + u8 TimeILLength; + + u8 TimeILType; + u8 InBandAFlag; + u8 InBandBFlag; + u8 Mode; + u8 StaticFlag; + u8 StaticPaddingFlag; +}; + +struct dvbt2_l1_info { + struct { + u16 magic; // Set to MX_L1INFO_MAGIC (0x3254) + u8 version; // Set to 0x01 + u8 reserved; + } header; + struct dvbt2_l1_pre dvbt2_l1_pre; + struct dvbt2_l1_post dvbt2_l1_post; +}; + +struct dvbt2_plp_info { + struct { + u16 magic; // Set to MX_L1INFO_MAGIC (0x3254) + u8 version; // Set to 0x01 + u8 reserved; + } header; + struct dvbt2_l1_post_plp dvbt2_l1_post_plp; +}; + +struct dvbt2_l1_info_old { + struct { + u8 type; + u8 BWExtension; + u8 S1; + u8 S2; + u8 L1RepetitionFlag; + u8 GuardInterval; + u8 PAPR; + u8 L1Mod; + u8 L1Cod; + u8 L1FECType; + u8 L1PostSize[3]; + u8 L1PostInfoSize[3]; + u8 PilotPattern; + u8 TXIDAvailabilty; + u8 CellID[2]; + u8 NetworkID[2]; + u8 T2SystemID[2]; + u8 NumT2Frames; + u8 NumDataSymbols[2]; + u8 RegenFlag; + u8 L1PostExtension; + u8 NumRF; + u8 CurrentRFIndex; + u8 T2Version_PostScrambled_BaseLite_Rsvd[2]; // 4,1,1,4 bit + u8 CRC32[4]; + } dvbt2_l1_pre; + + struct { + u8 SubSlicesPerFrame[2]; + u8 NumPLP; + u8 NumAux; + u8 AuxConfigRFU; + u8 RFIndex; + u8 Frequency[4]; + u8 FEFType; + u8 FEFLength[3]; + u8 FEFInterval; + } dvbt2_l1_post; +}; + +struct dvbt2_plp_info_old { + u8 PLPID; + u8 Type; + u8 PayloadType; + u8 FFFlag; + u8 FirstRFIndex; + u8 FirstFrameIndex; + u8 GroupID; + u8 Cod; + u8 Mod; + u8 Rotation; + u8 FECType; + u8 NumBlocksMax[2]; + u8 FrameInterval; + u8 TimeILLength; + u8 TimeILType; + u8 InBandAFlag; + u8 InBandBFlag_Rsvd1_Mode_StaticFlag_StaticPaddingFlag[2]; // 1,11,2,1,1 +}; + +struct dvbc2_l1_part2 { + u8 NetworkID[2]; + u8 C2SystemID[2]; + u8 StartFrequency[3]; + u8 C2BandWidth[2]; + u8 GuardInterval; + u8 C2FrameLength[2]; + u8 L1P2ChangeCounter; + u8 NumDataSlices; + u8 NumNotches; + struct { + u8 Start[2]; + u8 Width[2]; + u8 Reserved3; + } NotchData[15]; + u8 ReservedTone; + u8 Reserved4[2]; // EWS 1 bit, C2_Version 4 bit, Rsvd 11 bit +}; + +struct dvbc2_id_list { + u8 NumIDs; + u8 Offset; + u8 IDs[64]; +}; + +struct dvbc2_slice_info { + u8 SliceID; + u8 TunePosition[2]; + u8 OffsetLeft[2]; + u8 OffsetRight[2]; + u8 TIDepth; + u8 Type; + u8 FECHeaderType; + u8 ConstConf; + u8 LeftNotch; + u8 NumPLP; + u8 Reserved2; +}; + +struct dvbc2_plp_info { + u8 PLPID; + u8 Bundled; + u8 Type; + u8 PayloadType; + u8 GroupID; + u8 Start[2]; + u8 FECType; + u8 Mod; + u8 Cod; + u8 PSISIReprocessing; + u8 TransportstreamID[2]; + u8 OrginalNetworkID[2]; + u8 Reserved1; +}; + +struct bb_header { + u8 valid; + u8 matype_1; + u8 matype_2; + u8 upl[2]; + u8 dfl[2]; + u8 sync; + u8 syncd[2]; + u8 rsvd; + u8 issy[3]; + u8 min_input_stream_id; + u8 max_input_stream_id; +}; + +struct isdbt_tmcc_info { + u8 Mode; // FFT Mode 1,2,3 + u8 GuardInterval; // 1/32, 1/16, 1/8, /14 + u8 TMCCInfo[13]; // TMCC B20 - B121, byte 0 bit 7: B20, byte 12 bit 2: B121 +}; + +struct isdbs_tmcc_info { + u8 change; // 5 bits, increments with every change + struct { + u8 modcodd; // 4 bits + u8 num_slots; // 6 bits + } mode[4]; + u8 rel_ts_id[24]; // bit 6..4 Relative TSID for slot i*2 + 1, bit 2..0 Relative TSID for slot i*2 + 2 + struct { + u8 high_byte; + u8 low_byte; + } ts_id[8]; + u8 flags; // Bit 5: EWS flag, bit 4: Site Diversity flag, bit 3..1: Site Diversity information, bit 0: Extension flag + u8 extension[8]; // 61 bits, right aligned +}; + +struct sx8_bist { + u8 cut; + u8 avs_code; + u8 temperature; + u8 rsvd[13]; +}; + +struct sx8_packet_filter_status { + u8 status; + u8 offset; + u8 length; + u8 rsvd2; + u32 rsvd3[2]; + u8 data[96]; +}; + +struct extended_status { + u8 version; /* 0 = none, 1 = SX8 */ + u8 flags; /* Bit 0: 1 = Tuner Valid, Bit 1: 1 = Output Valid */ + u8 tuner; + u8 output; +}; + +struct get_serial_number { + u8 reserved; + u8 serial_number[17]; +}; + +struct get_license { + u8 flags; + u8 serial_number[17]; + u16 code; + u8 ID[8]; + u8 LK[24]; +}; + +struct mci_command_header { + union { + u32 command_word; + struct { + u8 command; + u8 tuner; + u8 demod; + u8 output; + }; + struct { + u8 mod_command; + u8 mod_channel; + u8 mod_stream; + u8 mod_rsvd1; + }; + }; +}; + /********************************************************/ struct mci_command { @@ -340,171 +1079,35 @@ struct mci_command { u8 mod_rsvd1; }; }; + union { u32 params[31]; - u8 params8[31*4]; - struct { - u8 flags; /* Bit 0: DVB-S Enabled, 1: DVB-S2 Enabled, - 5: ChannelBonding, 6: FrequencyRange, 7: InputStreamID */ - u8 s2_modulation_mask; /* Bit 0 : QPSK, 1: 8PSK/8APSK, - 2 : 16APSK, 3: 32APSK, 4: 64APSK, - 5: 128APSK, 6: 256APSK */ - u8 rsvd1; - u8 retry; - u32 frequency; - u32 symbol_rate; - u8 input_stream_id; - u8 rsvd2[3]; - u32 scrambling_sequence_index; - u32 frequency_range; - u8 channel_bonding_config; /* Bit 7: IsSlave, Bit 5..4: MasterDemod, - bit 0: Num channels - 2. - (must be set on all channels to same value) */ - } dvbs2_search; - - struct { - u8 flags; /* Bit 0: 0 = TSID is Transport Stream ID, 1 = TSID is relative stream number */ - u8 rsvd1[2]; - u8 retry; - u32 frequency; - u32 rsvd2; - u16 rsvd3; - u16 tsid; - } isdbs_search; - - struct { - u8 flags; - u8 bandwidth; - u8 rsvd1; - u8 retry; - u32 frequency; - } dvbc_search; - - struct { - u8 flags; /* Bit 0: LP Stream */ - u8 bandwidth; - u8 rsvd1; - u8 retry; - u32 frequency; - } dvbt_search; - - struct { - u8 flags; /* Bit 0: T2 Lite Profile, 7: PLP, */ - u8 bandwidth; - u8 rsvd1; - u8 retry; - u32 frequency; - u32 reserved; - u8 plp; - u8 rsvd2[3]; - } dvbt2_search; - - struct { - u8 flags; - u8 bandwidth; - u8 rsvd1; - u8 retry; - u32 frequency; - u32 reserved; - u8 plp; - u8 data_slice; - u8 rsvd2[2]; - } dvbc2_search; - - struct { - u8 flags; - u8 bandwidth; - u8 rsvd1; - u8 retry; - u32 frequency; - } isdbt_search; - - struct { - u8 flags; /* Bit 0: 0 = TSID is Transport Stream ID, 1 = TSID is relative stream number */ - /* Bit 2..1: 0 = force single, 1 = force multi, 2 = auto detect */ - u8 bandwidth; - u8 rsvd1; - u8 retry; - u32 frequency; - u32 rsvd2; - u16 onid; - u16 tsid; - } isdbc_search; - - struct { - u8 flags; - u8 bandwidth; - u8 rsvd1; - u8 retry; - u32 frequency; - } j83b_search; - - struct { - u8 flags; /* Bit 0 : 1 = short info (1st 4 Bytes) */ - } get_signalinfo; - - struct { - u8 tap; - u8 rsvd; - u16 point; - } get_iq_symbol; - - struct { - u8 flags; /* Bit 0 : 0 = VTM/SDR, 1 = SCAN, - Bit 1: 1 = Disable AGC, - Bit 2: 1 = Set Gain. */ - u8 roll_off; - u8 rsvd1; - u8 rsvd2; - u32 frequency; - u32 symbol_rate; /* Only in VTM/SDR mode, SCAN Mode uses exactly 1550/24 MSymbols/s.*/ - u8 gain; /* Gain in 0.25 dB Steps */ - /* Frequency, symbolrate and gain can be schanged while running */ - } sx8_start_iq; - - struct { - u8 flags; - /* Bit 0:1 Preamp Mode; 0 = Preamp AGC, 1 == Minimum (~ -17dB) , - 2 = Medium, 3 = Maximum gain {~ 15dB} - Bit 2: Bypass Input LNA (6 dB less gain) (Note this is after Preamp) - Bit 4: Set RF Gain - Bit 5: Freeze RF Gain (Turn AGC off at current gain, only when already enabled) - Bit 7: Optimize RF Gain and freeze for FFT */ - u8 rf_gain; /* 0 .. 50 dB */ - } sx8_input_enable; - - struct { - u8 offset; /* Offset into list, must be multiple of 64 */ - u8 select; /* 0 = Slices, 1 = PLPs (C2 Only) */ - u8 data_slice; /* DataSlice to get PLPList (C2 Only) */ - } get_ids; - - struct { - u8 select; /* 0 = Base, 1 = DataSilce, 2 = PLP, Bit 7: Set new ID */ - u8 id; /* DataSliceID, PLPId */ - } get_l1_info; - - struct { - u8 select; /* 0 = Data PLP, 1 = Common PLP, only DVB-T2 and DVB-C2 */ - } get_bb_header; - + u16 params16[31 * 2]; + u8 params8[31 * 4]; struct mod_setup_channels mod_setup_channels[4]; - struct mod_setup_stream mod_setup_stream; - struct mod_setup_output mod_setup_output; + struct mod_setup_stream mod_setup_stream; + struct mod_setup_output mod_setup_output; + struct dvbs2_search dvbs2_search; + struct isdbs_search isdbs_search; + struct dvbc_search dvbc_search; + struct dvbt_search dvbt_search; + struct dvbt2_search dvbt2_search; + struct dvbc2_search dvbc2_search; + struct isdbt_search isdbt_search; + struct isdbc_search isdbc_search; + struct j83b_search j83b_search; + + struct get_signalinfo get_signalinfo; + struct get_iq_symbol get_iq_symbol; + struct get_ids get_ids; + struct get_l1_info get_l1_info; + struct get_bb_header get_bb_header; - struct { - u8 Cmd; - u8 Offset; - u8 Length; - u8 Rsvd1; - u32 Rsvd2[2]; - u8 Data[96]; - } sx8_packet_filter; - - struct { - u8 ID[8]; - u8 LK[24]; - } license; + struct sx8_start_iq sx8_start_iq; + struct sx8_input_enable sx8_input_enable; + struct sx8_packet_filter sx8_packet_filter; + struct sx8_rfagc_control sx8_rfagc_control; + struct set_license set_license; }; }; @@ -517,368 +1120,41 @@ struct mci_result { u16 time; }; }; - union { u32 result[27]; + u32 result32[27]; + u16 result16[27 * 2]; u8 result8[27 * 4]; - struct { - u8 Rsvd0[3]; - u8 Flags; - - u32 frequency; /* actual frequency in Hz */ - u32 rsvd1; - s16 channel_power; /* channel power in dBm x 100 */ - s16 rsvd2; - s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ - u16 signal_loss_counter;/* Counts signal losses and automatic retunes */ - u32 rsvd4; - u32 ber_numerator; /* Bit error rate: PreRS in DVB-S, PreBCH in DVB-S2X */ - u32 ber_denominator; - u32 ber_rsvd1; /* Place holder for modulation bit error rate */ - u32 ber_rsvd2; - } common_signal_info; - - struct { - u8 standard; /* 1 = DVB-S, 2 = DVB-S2X */ - u8 pls_code; /* PLS code for DVB-S2/S2X, puncture rate for DVB-S */ - u8 roll_off; /* 2-0: rolloff, 7: spectrum inversion */ - u8 flags; - u32 frequency; /* actual frequency in Hz */ - u32 symbol_rate; /* actual symbolrate in Hz */ - s16 channel_power; /* channel power in dBm x 100 */ - s16 band_power; /*/ band power in dBm x 100 */ - s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ - s16 rsvd2; - u32 packet_errors; /* Counter for packet errors. (set to 0 on Start command) */ - u32 ber_numerator; /* Bit error rate: PreRS in DVB-S, PreBCH in DVB-S2X */ - u32 ber_denominator; - } dvbs2_signal_info; - - struct { - u8 modcod; - u8 rsvd0[2]; - u8 flags; /* Bit 0: TMCC changed, Bit 1: EWS */ - u32 frequency; /* actual frequency in Hz */ - u32 symbol_rate; /* actual symbolrate in Hz */ - s16 channel_power; /* channel power in dBm x 100 */ - s16 band_power; /*/ band power in dBm x 100 */ - s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ - s16 rsvd2; - u32 packet_errors; /* Counter for packet errors. (set to 0 on Start command) */ - u32 ber_numerator; /* Bit error rate: PreRS in DVB-S, PreBCH in DVB-S2X */ - u32 ber_denominator; - } isdbs_signal_info; - - struct { - u8 constellation; - u8 rsvd0[2]; - u8 flags; - u32 frequency; /* actual frequency in Hz */ - u32 symbol_rate; /* actual symbolrate in Hz */ - s16 channel_power; /* channel power in dBm x 100 */ - s16 band_power; /* band power in dBm x 100 */ - s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ - s16 rsvd2; - u32 packet_errors; /* Counter for packet errors. (set to 0 on Start command) */ - u32 ber_numerator; /* Bit error rate: PreRS */ - u32 ber_denominator; - } dvbc_signal_info; - - struct { - u8 modulation1; // bit 7..6: Constellation, bit 5..3 Hierachy, bit 2..0 CodeRate High - u8 modulation2; // bit 7..5: CodeRate Low, bit 4..3 Guard Interval, bit 2..1 FFT Mode - u8 rsvd0; - u8 flags; - u32 frequency; /* actual frequency in Hz */ - u32 rsvd1; - s16 channel_power; /* channel power in dBm x 100 */ - s16 band_power; /* band power in dBm x 100 */ - s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ - s16 rsvd2; - u32 packet_errors; /* Counter for packet errors. (set to 0 on Start command) */ - u32 ber_numerator; /* Bit error rate: PreRS */ - u32 ber_denominator; - } dvbt_signal_info; - - struct { - u8 rsvd0[3]; - u8 flags; - u32 frequency; /* actual frequency in Hz */ - u32 rsvd1; - s16 channel_power; /* channel power in dBm x 100 */ - s16 band_power; /* band power in dBm x 100 */ - s16 signal_to_noise; /* SNR in dB x 100, Note: negativ values are valid in DVB-S2 */ - s16 rsvd2; - u32 packet_errors; /* Counter for packet errors. (set to 0 on Start command) */ - u32 ber_numerator; /* Bit error rate: PreRS */ - u32 ber_denominator; - } dvbt2_signal_info; - - struct { - u8 rsvd0[3]; - u8 flags; - - u32 frequency; // actual frequency in Hz - u32 rsvd1; // - s16 channel_power; // channel power in dBm x 100 - s16 band_power; // band power in dBm x 100 - s16 signal_to_noise; // SNR in dB x 100, Note: negativ values are valid in DVB-S2 - s16 rsvd2; - u32 packet_errors; // Counter for packet errors. (set to 0 on Start command) - u32 ber_numerator; // Bit error rate: PreBCH - u32 ber_denominator; - } dvbc2_signal_info; - - struct { - u8 rsvd0[3]; - u8 flags; - - u32 frequency; // actual frequency in Hz - u32 rsvd1; // - s16 channel_power; // channel power in dBm x 100 - s16 band_power; // band power in dBm x 100 - s16 signal_to_noise; // SNR in dB x 100, Note: negativ values are valid in DVB-S2 - s16 rsvd2; - u32 packet_errors; // Counter for packet errors. (set to 0 on Start command) - u32 ber_numerator; // Bit error rate: PreRS Segment A - u32 ber_denominator; - u32 ber_rsvd1; // Place holder for modulation bit error rate - u32 ber_rsvd2; - u32 ber_numeratorB; // Bit error rate: PreRS Segment B - u32 ber_numeratorC; // Bit error rate: PreRS Segment C - } isdbt_signal_info; - - struct { - u8 constellation; - u8 rsvd0[2]; - u8 flags; - - u32 frequency; // actual frequency in Hz - u32 symbol_rate; // actual symbolrate in Hz - s16 channel_power; // channel power in dBm x 100 - s16 band_power; // band power in dBm x 100 - s16 signal_to_noise; // SNR in dB x 100, Note: negativ values are valid in DVB-S2 - s16 rsvd2; - u32 packet_errors; // Counter for packet errors. (set to 0 on Start command) - u32 ber_numerator; // Bit error rate: PreRS in DVB-S, PreBCH in DVB-S2X - u32 ber_denominator; - } isdbc_signal_info; - - struct { - u8 constellation; - u8 interleaving; - u8 rsvd0; - u8 flags; - - u32 frequency; // actual frequency in Hz - u32 symbol_rate; // actual symbolrate in Hz - s16 channel_power; // channel power in dBm x 100 - s16 band_power; // band power in dBm x 100 - s16 signal_to_noise; // SNR in dB x 100, Note: negativ values are valid in DVB-S2 - s16 rsvd2; - u32 packet_errors; // Counter for packet errors. (set to 0 on Start command) - u32 ber_numerator; // Bit error rate: PreRS in DVB-S, PreBCH in DVB-S2X - u32 ber_denominator; - } j83b_signal_info; - - struct { - s16 i; - s16 q; - } iq_symbol; - - struct { - u8 tps_info[7]; - // u16 tps_cell_id; - } dvbt_tps_info; - - struct { - struct { - u8 type; - u8 BWExtension; - u8 S1; - u8 S2; - u8 L1RepetitionFlag; - u8 GuardInterval; - u8 PAPR; - u8 L1Mod; - u8 L1Cod; - u8 L1FECType; - u8 L1PostSize[3]; - u8 L1PostInfoSize[3]; - u8 PilotPattern; - u8 TXIDAvailabilty; - u8 CellID[2]; - u8 NetworkID[2]; - u8 T2SystemID[2]; - u8 NumT2Frames; - u8 NumDataSymbols[2]; - u8 RegenFlag; - u8 L1PostExtension; - u8 NumRF; - u8 CurrentRFIndex; - u8 T2Version_PostScrambled_BaseLite_Rsvd[2]; // 4,1,1,4 bit - u8 CRC32[4]; - } dvbt2_l1_pre; - - struct { - u8 SubSlicesPerFrame[2]; - u8 NumPLP; - u8 NumAux; - u8 AuxConfigRFU; - u8 RFIndex; - u8 Frequency[4]; - u8 FEFType; - u8 FEFLength[3]; - u8 FEFInterval; - } dvbt2_l1_post; - } dvbt2_l1_info; - - struct { - u8 PLPID; - u8 Type; - u8 PayloadType; - u8 FFFlag; - u8 FirstRFIndex; - u8 FirstFrameIndex; - u8 GroupID; - u8 Cod; - u8 Mod; - u8 Rotation; - u8 FECType; - u8 NumBlocksMax[2]; - u8 FrameInterval; - u8 TimeILLength; - u8 TimeILType; - u8 InBandAFlag; - u8 InBandBFlag_Rsvd1_Mode_StaticFlag_StaticPaddingFlag[2]; // 1,11,2,1,1 - } dvbt2_plp_info; - - struct { - u8 NetworkID[2]; - u8 C2SystemID[2]; - u8 StartFrequency[3]; - u8 C2BandWidth[2]; - u8 GuardInterval; - u8 C2FrameLength[2]; - u8 L1P2ChangeCounter; - u8 NumDataSlices; - u8 NumNotches; - struct { - u8 Start[2]; - u8 Width[2]; - u8 Reserved3; - } NotchData[15]; - u8 ReservedTone; - u8 Reserved4[2]; // EWS 1 bit, C2_Version 4 bit, Rsvd 11 bit - } DVBC2_L1Part2; - - struct { - u8 NumIDs; - u8 Offset; - u8 IDs[64]; - } DVBC2_IDList; - - struct { - u8 SliceID; - u8 TunePosition[2]; - u8 OffsetLeft[2]; - u8 OffsetRight[2]; - u8 TIDepth; - u8 Type; - u8 FECHeaderType; - u8 ConstConf; - u8 LeftNotch; - u8 NumPLP; - u8 Reserved2; - } DVBC2_SliceInfo; - - struct { - u8 PLPID; - u8 Bundled; - u8 Type; - u8 PayloadType; - u8 GroupID; - u8 Start[2]; - u8 FECType; - u8 Mod; - u8 Cod; - u8 PSISIReprocessing; - u8 TransportstreamID[2]; - u8 OrginalNetworkID[2]; - u8 Reserved1; - } DVBC2_PLPInfo; - - struct { - u8 valid; - u8 matype_1; - u8 matype_2; - u8 upl[2]; - u8 dfl[2]; - u8 sync; - u8 syncd[2]; - u8 rsvd; - u8 issy[3]; - u8 min_input_stream_id; - u8 max_input_stream_id; - } bb_header; - - struct { - u8 Mode; // FFT Mode 1,2,3 - u8 GuardInterval; // 1/32, 1/16, 1/8, /14 - u8 TMCCInfo[13]; // TMCC B20 - B121, byte 0 bit 7: B20, byte 12 bit 2: B121 - } ISDBT_TMCCInfo; - - struct { - u8 Change; // 5 bits, increments with every change - struct { - u8 ModCod; // 4 bits - u8 NumSlots; // 6 bits - } Mode[4]; - u8 RelTSID[24]; // bit 6..4 Relative TSID for slot i*2 + 1, bit 2..0 Relative TSID for slot i*2 + 2 - struct { - u8 highByte; - u8 lowByte; - } TSID[8]; - u8 Flags; // Bit 5: EWS flag, bit 4: Site Diversity flag, bit 3..1: Site Diversity information, bit 0: Extension flag - u8 Extension[8]; // 61 bits, right aligned - } ISDBS_TMCCInfo; - - struct { - u8 cut; - u8 avs_code; - u8 temperature; - u8 rsvd[13]; - } sx8_bist; - - struct { - u8 status; - u8 offset; - u8 length; - u8 rsvd2; - u32 rsvd3[2]; - u8 data[96]; - } SX8_packet_filter_status; - - struct { - u8 version; /* 0 = none, 1 = SX8 */ - u8 flags; /* Bit 0: 1 = Tuner Valid, Bit 1: 1 = Output Valid */ - u8 tuner; - u8 output; - } extended_status; - - struct { - u8 reserved; - u8 serial_number[17]; - } serial_number; - - struct { - u8 flags; - u8 serial_number[17]; - u16 code; - u8 ID[8]; - u8 LK[24]; - } license; - + struct mx_capabilities mx_capabilities; + struct common_signal_info common_signal_info; + struct dvbs2_signal_info dvbs2_signal_info; + struct isdbs_signal_info isdbs_signal_info; + struct dvbc_signal_info dvbc_signal_info; + struct dvbt_signal_info dvbt_signal_info; + struct dvbt2_signal_info dvbt2_signal_info; + struct dvbc2_signal_info dvbc2_signal_info; + struct isdbt_signal_info isdbt_signal_info; + struct isdbc_signal_info isdbc_signal_info; + struct j83b_signal_info j83b_signal_info; + struct iq_symbol iq_symbol; + struct dvbt_tps_info dvbt_tps_info; + struct dvbt2_l1_info dvbt2_l1_info; + struct dvbt2_plp_info dvbt2_plp_info; + struct dvbt2_l1_info_old dvbt2_l1_info_old; + struct dvbt2_plp_info_old dvbt2_plp_info_old; + + struct dvbc2_l1_part2 dvbc2_l1_part2; + struct dvbc2_id_list dvbc2_id_list; + struct dvbc2_slice_info dvbc2_slice_info; + struct dvbc2_plp_info dvbc2_plp_info; + struct bb_header bb_header; + struct isdbt_tmcc_info isdbt_tmcc_info; + struct isdbs_tmcc_info isdbs_tmcc_info; + struct sx8_bist sx8_bist; + struct sx8_packet_filter_status sx8_packet_filter_status; + struct extended_status extended_status; + struct get_serial_number get_serial_number; + struct get_license get_license; }; u32 version[3]; u8 version_rsvd;