@@ -35,10 +35,10 @@ void print_temp(struct mci_result *res)
3535 printf ("Die temperature = %u\n" , res -> sx8_bist .temperature );
3636}
3737
38- int temp_info (int dev )
38+ int temp_info (int dev , uint32_t link )
3939{
4040 struct ddb_mci_msg msg = {
41- .link = 0 ,
41+ .link = link ,
4242 .cmd .command = SX8_CMD_GETBIST ,
4343 };
4444 int ret ;
@@ -233,23 +233,36 @@ void print_info(struct mci_result *res, uint8_t demod)
233233 switch (res -> mode ) {
234234 case M4_MODE_DVBSX :
235235 if (res -> dvbs2_signal_info .standard == 2 ) {
236- int short_frame = 0 ;
236+ int short_frame = 0 , pilots = 0 ;
237+ char * modcod = "unknown" ;
238+ uint8_t pls = res -> dvbs2_signal_info .pls_code ;
237239
238- if ((res -> dvbs2_signal_info .pls_code >= 128 ) ||
239- ((res -> dvbs2_signal_info .roll_off & 0x7f ) > 2 ))
240+ if ((pls >= 128 ) || ((res -> dvbs2_signal_info .roll_off & 0x7f ) > 2 ))
240241 printf ("Demod Locked: DVB-S2X\n" );
241242 else
242243 printf ("Demod Locked: DVB-S2\n" );
243244 printf ("PLS-Code: %u\n" , res -> dvbs2_signal_info .pls_code );
244- printf ("Roll-Off: %s\n" , Rolloff [res -> dvbs2_signal_info .roll_off ]);
245- printf ("Inversion: %s\n" , (res -> dvbs2_signal_info .roll_off & 0x80 ) ? "on" : "off" );
246- printf ("\n" );
245+ if (pls >= 250 ) {
246+ pilots = 1 ;
247+ modcod = S2Xrsvd [pls - 250 ];
248+ } else if (pls >= 132 ) {
249+ pilots = pls & 1 ;
250+ short_frame = pls > 216 ;
251+ modcod = S2XModCods [(pls - 132 )/2 ];
252+ } else if (pls < 128 ) {
253+ pilots = pls & 1 ;
254+ short_frame = pls & 2 ;
255+ modcod = S2ModCods [pls / 4 ];
256+ }
257+ printf ("Roll-Off: %s\n" , Rolloff [res -> dvbs2_signal_info .roll_off & 7 ]);
258+ printf ("Pilots: %s\n" , pilots ? "On" : "Off" );
259+ printf ("Frame: %s\n" , short_frame ? "Short" : "Long" );
247260 } else {
248261 printf ("Demod Locked: DVB-S\n" );
249262 printf ("PR: %s\n" ,
250263 PunctureRates [res -> dvbs2_signal_info .pls_code & 0x07 ]);
251-
252264 }
265+ printf ("Inversion: %s\n" , (res -> dvbs2_signal_info .roll_off & 0x80 ) ? "on" : "off" );
253266 case M4_MODE_DVBT :
254267 printf ("Locked DVB-T\n" );
255268 break ;
@@ -274,10 +287,37 @@ void print_info(struct mci_result *res, uint8_t demod)
274287
275288}
276289
277- int mci_info (int dev , uint8_t demod )
290+ int readreg (int dev , uint32_t reg , uint32_t link , uint32_t * val )
291+ {
292+ struct ddb_reg ddbreg ;
293+
294+ ddbreg .reg = reg + (link << 28 );
295+ if (ioctl (dev , IOCTL_DDB_READ_REG , & ddbreg ) < 0 )
296+ return -1 ;
297+ * val = ddbreg .val ;
298+ return 0 ;
299+ }
300+
301+ void mci_firmware (int dev , uint32_t link )
302+ {
303+ union {
304+ uint32_t u [4 ];
305+ char s [16 ];
306+ } version ;
307+
308+ readreg (dev , MIC_INTERFACE_VER , link , & version .u [0 ]);
309+ readreg (dev , MIC_INTERFACE_VER + 4 , link , & version .u [1 ]);
310+ readreg (dev , MIC_INTERFACE_VER + 8 , link , & version .u [2 ]);
311+ readreg (dev , MIC_INTERFACE_VER + 12 , link , & version .u [3 ]);
312+
313+ printf ("MCI firmware: %s.%d\n" , & version .s , version .s [15 ]);
314+ }
315+
316+
317+ int mci_info (int dev , uint32_t link , uint8_t demod )
278318{
279319 struct ddb_mci_msg msg = {
280- .link = 0 ,
320+ .link = link ,
281321 .cmd .command = MCI_CMD_GETSIGNALINFO ,
282322 .cmd .demod = demod
283323 };
@@ -380,20 +420,22 @@ static int card_info(int ddbnum, int demod)
380420 id .hw , id .regmap , (id .hw & 0xff0000 ) >> 16 , (id .hw & 0xffff ));
381421 switch (id .device ) {
382422 case 0x0009 :
423+ mci_firmware (ddb , link );
383424 if (demod >= 0 )
384- mci_info (ddb , demod );
425+ mci_info (ddb , link , demod );
385426 else {
386427 for (i = 0 ; i < 8 ; i ++ )
387- mci_info (ddb , i );
428+ mci_info (ddb , link , i );
388429 }
389- temp_info (ddb );
430+ temp_info (ddb , link );
390431 break ;
391432 case 0x000a :
433+ mci_firmware (ddb , link );
392434 if (demod >= 0 )
393- mci_info (ddb , demod );
435+ mci_info (ddb , link , demod );
394436 else {
395437 for (i = 0 ; i < 4 ; i ++ )
396- mci_info (ddb , i );
438+ mci_info (ddb , link , i );
397439 }
398440 break ;
399441 default :
0 commit comments