mirror of
https://github.com/torvalds/linux
synced 2024-09-21 19:47:35 +00:00
V4L/DVB (4180): Initial go at MMI
Signed-off-by: Manu Abraham <manu@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
cdd4208c05
commit
3e357fd8a2
|
@ -340,6 +340,101 @@ static int debug_string(u8 *msg, u32 length, u32 offset)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* MMI */
|
||||||
|
static int ca_get_mmi(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *mmi_msg)
|
||||||
|
{
|
||||||
|
static u8 get_mmi[] = { 0x07, 0x40, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0f };
|
||||||
|
|
||||||
|
put_checksum(&get_mmi[0], 7);
|
||||||
|
if ((dst_put_ci(state, get_mmi, sizeof (get_mmi), hw_msg->msg, GET_REPLY)) < 0) {
|
||||||
|
dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
|
||||||
|
memcpy(mmi_msg->msg, hw_msg->msg, hw_msg->msg[4]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Menu should be the first MMI function (like open !)
|
||||||
|
*/
|
||||||
|
static int ca_get_menu(struct dst_state *state)
|
||||||
|
{
|
||||||
|
static u8 get_menu[] = { 0x07, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0xff };
|
||||||
|
|
||||||
|
put_checksum(&get_menu[0], 7);
|
||||||
|
if ((dst_put_ci(state, get_menu, sizeof (get_menu), get_menu, NO_REPLY)) < 0) {
|
||||||
|
dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MMI Enq (Enquire the application to allow user input)
|
||||||
|
*/
|
||||||
|
static int ca_answer_menu(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *menu_answ)
|
||||||
|
{
|
||||||
|
u8 choice = 0;
|
||||||
|
|
||||||
|
static u8 answer_menu[] = { 0x08, 0x40, 0x00, 0x00, 0x0b, 0x01, 0x00, 0x01, 0xff };
|
||||||
|
|
||||||
|
/* derive answer from menu (This comes from the user) */
|
||||||
|
answer_menu[7] = choice;
|
||||||
|
put_checksum(&answer_menu[0], 7);
|
||||||
|
if ((dst_put_ci(state, answer_menu, sizeof (answer_menu), hw_msg->msg, NO_REPLY)) < 0) {
|
||||||
|
dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ca_answer_mmi(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *answ_msg)
|
||||||
|
{
|
||||||
|
u8 answer =0, length = 0;
|
||||||
|
|
||||||
|
static u8 answer_mmi[] = { 0x08, 0x40, 0x00, 0x00, 0x08, 0x01, 0x00, 0x01, 0xff };
|
||||||
|
|
||||||
|
/* derive answer from answ_msg (This comes from the user) */
|
||||||
|
if (answer == 0) /* 0x00 == Cancel */
|
||||||
|
answer_mmi[7] = 0x00;
|
||||||
|
else { /* 0x01 == Answer */
|
||||||
|
length = strlen(answ_msg->msg);
|
||||||
|
memcpy(&answer_mmi[8], answ_msg->msg, length);
|
||||||
|
answer_mmi[0] += length;
|
||||||
|
answer_mmi[5] += length;
|
||||||
|
}
|
||||||
|
put_checksum(&answer_mmi[0], (8 + length));
|
||||||
|
if ((dst_put_ci(state, answer_mmi, sizeof (answer_mmi), hw_msg->msg, GET_REPLY)) < 0) {
|
||||||
|
dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci FAILED !");
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ca_close_mmi(struct dst_state *state, struct ca_msg *hw_msg)
|
||||||
|
{
|
||||||
|
static u8 close_mmi[] = { 0x07, 0x40, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xff };
|
||||||
|
|
||||||
|
put_checksum(&close_mmi[0], 7);
|
||||||
|
if ((dst_put_ci(state, close_mmi, sizeof (close_mmi), hw_msg->msg, NO_REPLY)) < 0) {
|
||||||
|
dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int ca_set_pmt(struct dst_state *state, struct ca_msg *p_ca_message, struct ca_msg *hw_buffer, u8 reply, u8 query)
|
static int ca_set_pmt(struct dst_state *state, struct ca_msg *p_ca_message, struct ca_msg *hw_buffer, u8 reply, u8 query)
|
||||||
{
|
{
|
||||||
u32 length = 0;
|
u32 length = 0;
|
||||||
|
|
Loading…
Reference in a new issue