V4L/DVB (13841): smsdvb: Make stats to work
Siano series of patches seemed to cause a regression on reporting DTV statistics. Due to that, signal indication weren't received, preventing applications like scan to work. Tested with ISDB-T signals and got the same scan result as with a dib0700/dib8000 device. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
dcb0c53331
commit
67ae1d26bd
|
@ -212,6 +212,8 @@ struct smscore_device_t {
|
||||||
#define MSG_SMS_DAB_CHANNEL 607
|
#define MSG_SMS_DAB_CHANNEL 607
|
||||||
#define MSG_SMS_GET_PID_FILTER_LIST_REQ 608
|
#define MSG_SMS_GET_PID_FILTER_LIST_REQ 608
|
||||||
#define MSG_SMS_GET_PID_FILTER_LIST_RES 609
|
#define MSG_SMS_GET_PID_FILTER_LIST_RES 609
|
||||||
|
#define MSG_SMS_GET_STATISTICS_RES 616
|
||||||
|
#define MSG_SMS_GET_STATISTICS_REQ 615
|
||||||
#define MSG_SMS_HO_PER_SLICES_IND 630
|
#define MSG_SMS_HO_PER_SLICES_IND 630
|
||||||
#define MSG_SMS_SET_ANTENNA_CONFIG_REQ 651
|
#define MSG_SMS_SET_ANTENNA_CONFIG_REQ 651
|
||||||
#define MSG_SMS_SET_ANTENNA_CONFIG_RES 652
|
#define MSG_SMS_SET_ANTENNA_CONFIG_RES 652
|
||||||
|
@ -340,7 +342,7 @@ struct SmsFirmware_ST {
|
||||||
/* Statistics information returned as response for
|
/* Statistics information returned as response for
|
||||||
* SmsHostApiGetStatistics_Req */
|
* SmsHostApiGetStatistics_Req */
|
||||||
struct SMSHOSTLIB_STATISTICS_S {
|
struct SMSHOSTLIB_STATISTICS_S {
|
||||||
u32 Reserved; /* Reserved */
|
u8 Reserved[5]; /* Reserved */
|
||||||
|
|
||||||
/* Common parameters */
|
/* Common parameters */
|
||||||
u32 IsRfLocked; /* 0 - not locked, 1 - locked */
|
u32 IsRfLocked; /* 0 - not locked, 1 - locked */
|
||||||
|
|
|
@ -218,6 +218,39 @@ static int smsdvb_onresponse(void *context, struct smscore_buffer_t *cb)
|
||||||
is_status_update = true;
|
is_status_update = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case MSG_SMS_GET_STATISTICS_RES: {
|
||||||
|
struct SMSHOSTLIB_STATISTICS_S *p =
|
||||||
|
(struct SMSHOSTLIB_STATISTICS_S *)(phdr + 1);
|
||||||
|
struct RECEPTION_STATISTICS_S *pReceptionData =
|
||||||
|
&client->sms_stat_dvb.ReceptionData;
|
||||||
|
|
||||||
|
sms_info("MSG_SMS_GET_STATISTICS_RES");
|
||||||
|
|
||||||
|
is_status_update = true;
|
||||||
|
pReceptionData->IsDemodLocked = p->IsDemodLocked;
|
||||||
|
if (!pReceptionData->IsDemodLocked) {
|
||||||
|
pReceptionData->SNR = 0;
|
||||||
|
pReceptionData->BER = 0;
|
||||||
|
pReceptionData->BERErrorCount = 0;
|
||||||
|
pReceptionData->InBandPwr = 0;
|
||||||
|
pReceptionData->ErrorTSPackets = 0;
|
||||||
|
|
||||||
|
complete(&client->tune_done);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
pReceptionData->SNR = p->SNR;
|
||||||
|
pReceptionData->BER = p->BER;
|
||||||
|
pReceptionData->BERErrorCount = p->BERErrorCount;
|
||||||
|
pReceptionData->InBandPwr = p->InBandPwr;
|
||||||
|
pReceptionData->ErrorTSPackets = p->ErrorTSPackets;
|
||||||
|
|
||||||
|
complete(&client->tune_done);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
sms_info("Unhandled message %d", phdr->msgType);
|
||||||
|
|
||||||
}
|
}
|
||||||
smscore_putbuffer(client->coredev, cb);
|
smscore_putbuffer(client->coredev, cb);
|
||||||
|
|
||||||
|
@ -326,6 +359,20 @@ static int smsdvb_sendrequest_and_wait(struct smsdvb_client_t *client,
|
||||||
0 : -ETIME;
|
0 : -ETIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int smsdvb_send_statistics_request(struct smsdvb_client_t *client)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
struct SmsMsgHdr_ST Msg = { MSG_SMS_GET_STATISTICS_REQ,
|
||||||
|
DVBT_BDA_CONTROL_MSG_ID,
|
||||||
|
HIF_TASK,
|
||||||
|
sizeof(struct SmsMsgHdr_ST), 0 };
|
||||||
|
|
||||||
|
rc = smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
|
||||||
|
&client->tune_done);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int led_feedback(struct smsdvb_client_t *client)
|
static inline int led_feedback(struct smsdvb_client_t *client)
|
||||||
{
|
{
|
||||||
if (client->fe_status & FE_HAS_LOCK)
|
if (client->fe_status & FE_HAS_LOCK)
|
||||||
|
@ -338,33 +385,43 @@ static inline int led_feedback(struct smsdvb_client_t *client)
|
||||||
|
|
||||||
static int smsdvb_read_status(struct dvb_frontend *fe, fe_status_t *stat)
|
static int smsdvb_read_status(struct dvb_frontend *fe, fe_status_t *stat)
|
||||||
{
|
{
|
||||||
|
int rc;
|
||||||
struct smsdvb_client_t *client;
|
struct smsdvb_client_t *client;
|
||||||
client = container_of(fe, struct smsdvb_client_t, frontend);
|
client = container_of(fe, struct smsdvb_client_t, frontend);
|
||||||
|
|
||||||
|
rc = smsdvb_send_statistics_request(client);
|
||||||
|
|
||||||
*stat = client->fe_status;
|
*stat = client->fe_status;
|
||||||
|
|
||||||
led_feedback(client);
|
led_feedback(client);
|
||||||
|
|
||||||
return 0;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int smsdvb_read_ber(struct dvb_frontend *fe, u32 *ber)
|
static int smsdvb_read_ber(struct dvb_frontend *fe, u32 *ber)
|
||||||
{
|
{
|
||||||
|
int rc;
|
||||||
struct smsdvb_client_t *client;
|
struct smsdvb_client_t *client;
|
||||||
client = container_of(fe, struct smsdvb_client_t, frontend);
|
client = container_of(fe, struct smsdvb_client_t, frontend);
|
||||||
|
|
||||||
|
rc = smsdvb_send_statistics_request(client);
|
||||||
|
|
||||||
*ber = client->sms_stat_dvb.ReceptionData.BER;
|
*ber = client->sms_stat_dvb.ReceptionData.BER;
|
||||||
|
|
||||||
led_feedback(client);
|
led_feedback(client);
|
||||||
|
|
||||||
return 0;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int smsdvb_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
|
static int smsdvb_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
|
||||||
{
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
struct smsdvb_client_t *client;
|
struct smsdvb_client_t *client;
|
||||||
client = container_of(fe, struct smsdvb_client_t, frontend);
|
client = container_of(fe, struct smsdvb_client_t, frontend);
|
||||||
|
|
||||||
|
rc = smsdvb_send_statistics_request(client);
|
||||||
|
|
||||||
if (client->sms_stat_dvb.ReceptionData.InBandPwr < -95)
|
if (client->sms_stat_dvb.ReceptionData.InBandPwr < -95)
|
||||||
*strength = 0;
|
*strength = 0;
|
||||||
else if (client->sms_stat_dvb.ReceptionData.InBandPwr > -29)
|
else if (client->sms_stat_dvb.ReceptionData.InBandPwr > -29)
|
||||||
|
@ -376,31 +433,37 @@ static int smsdvb_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
|
||||||
|
|
||||||
led_feedback(client);
|
led_feedback(client);
|
||||||
|
|
||||||
return 0;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int smsdvb_read_snr(struct dvb_frontend *fe, u16 *snr)
|
static int smsdvb_read_snr(struct dvb_frontend *fe, u16 *snr)
|
||||||
{
|
{
|
||||||
|
int rc;
|
||||||
struct smsdvb_client_t *client;
|
struct smsdvb_client_t *client;
|
||||||
client = container_of(fe, struct smsdvb_client_t, frontend);
|
client = container_of(fe, struct smsdvb_client_t, frontend);
|
||||||
|
|
||||||
|
rc = smsdvb_send_statistics_request(client);
|
||||||
|
|
||||||
*snr = client->sms_stat_dvb.ReceptionData.SNR;
|
*snr = client->sms_stat_dvb.ReceptionData.SNR;
|
||||||
|
|
||||||
led_feedback(client);
|
led_feedback(client);
|
||||||
|
|
||||||
return 0;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int smsdvb_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
static int smsdvb_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
||||||
{
|
{
|
||||||
|
int rc;
|
||||||
struct smsdvb_client_t *client;
|
struct smsdvb_client_t *client;
|
||||||
client = container_of(fe, struct smsdvb_client_t, frontend);
|
client = container_of(fe, struct smsdvb_client_t, frontend);
|
||||||
|
|
||||||
|
rc = smsdvb_send_statistics_request(client);
|
||||||
|
|
||||||
*ucblocks = client->sms_stat_dvb.ReceptionData.ErrorTSPackets;
|
*ucblocks = client->sms_stat_dvb.ReceptionData.ErrorTSPackets;
|
||||||
|
|
||||||
led_feedback(client);
|
led_feedback(client);
|
||||||
|
|
||||||
return 0;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int smsdvb_get_tune_settings(struct dvb_frontend *fe,
|
static int smsdvb_get_tune_settings(struct dvb_frontend *fe,
|
||||||
|
|
Loading…
Reference in New Issue