aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManu Abraham <abraham.manu@gmail.com>2006-06-21 14:06:49 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2006-06-25 01:05:20 -0400
commit3e357fd8a29cbcf91badd2a6d3b8ef5d4cb05025 (patch)
treea6884a37dd80110362d4a0ee306887b36c3a89cd
parentcdd4208c059e01d4cdc10a538bbbebbb60aa9b9f (diff)
V4L/DVB (4180): Initial go at MMI
Signed-off-by: Manu Abraham <manu@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r--drivers/media/dvb/bt8xx/dst_ca.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/drivers/media/dvb/bt8xx/dst_ca.c b/drivers/media/dvb/bt8xx/dst_ca.c
index fee27d58bda9..cc517c553ac5 100644
--- a/drivers/media/dvb/bt8xx/dst_ca.c
+++ b/drivers/media/dvb/bt8xx/dst_ca.c
@@ -340,6 +340,101 @@ static int debug_string(u8 *msg, u32 length, u32 offset)
340 return 0; 340 return 0;
341} 341}
342 342
343/* MMI */
344static int ca_get_mmi(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *mmi_msg)
345{
346 static u8 get_mmi[] = { 0x07, 0x40, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0f };
347
348 put_checksum(&get_mmi[0], 7);
349 if ((dst_put_ci(state, get_mmi, sizeof (get_mmi), hw_msg->msg, GET_REPLY)) < 0) {
350 dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
351 return -1;
352 }
353 dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
354 memcpy(mmi_msg->msg, hw_msg->msg, hw_msg->msg[4]);
355
356 return 0;
357}
358
359/**
360 * Get Menu should be the first MMI function (like open !)
361 */
362static int ca_get_menu(struct dst_state *state)
363{
364 static u8 get_menu[] = { 0x07, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0xff };
365
366 put_checksum(&get_menu[0], 7);
367 if ((dst_put_ci(state, get_menu, sizeof (get_menu), get_menu, NO_REPLY)) < 0) {
368 dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
369 return -1;
370 }
371 dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
372
373 return 0;
374}
375
376/**
377 * MMI Enq (Enquire the application to allow user input)
378 */
379static int ca_answer_menu(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *menu_answ)
380{
381 u8 choice = 0;
382
383 static u8 answer_menu[] = { 0x08, 0x40, 0x00, 0x00, 0x0b, 0x01, 0x00, 0x01, 0xff };
384
385 /* derive answer from menu (This comes from the user) */
386 answer_menu[7] = choice;
387 put_checksum(&answer_menu[0], 7);
388 if ((dst_put_ci(state, answer_menu, sizeof (answer_menu), hw_msg->msg, NO_REPLY)) < 0) {
389 dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
390 return -1;
391 }
392 dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
393
394 return 0;
395}
396
397static int ca_answer_mmi(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *answ_msg)
398{
399 u8 answer =0, length = 0;
400
401 static u8 answer_mmi[] = { 0x08, 0x40, 0x00, 0x00, 0x08, 0x01, 0x00, 0x01, 0xff };
402
403 /* derive answer from answ_msg (This comes from the user) */
404 if (answer == 0) /* 0x00 == Cancel */
405 answer_mmi[7] = 0x00;
406 else { /* 0x01 == Answer */
407 length = strlen(answ_msg->msg);
408 memcpy(&answer_mmi[8], answ_msg->msg, length);
409 answer_mmi[0] += length;
410 answer_mmi[5] += length;
411 }
412 put_checksum(&answer_mmi[0], (8 + length));
413 if ((dst_put_ci(state, answer_mmi, sizeof (answer_mmi), hw_msg->msg, GET_REPLY)) < 0) {
414 dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci FAILED !");
415
416 return -1;
417 }
418 dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
419
420 return 0;
421}
422
423static int ca_close_mmi(struct dst_state *state, struct ca_msg *hw_msg)
424{
425 static u8 close_mmi[] = { 0x07, 0x40, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xff };
426
427 put_checksum(&close_mmi[0], 7);
428 if ((dst_put_ci(state, close_mmi, sizeof (close_mmi), hw_msg->msg, NO_REPLY)) < 0) {
429 dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
430
431 return -1;
432 }
433 dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
434
435 return 0;
436}
437
343static int ca_set_pmt(struct dst_state *state, struct ca_msg *p_ca_message, struct ca_msg *hw_buffer, u8 reply, u8 query) 438static int ca_set_pmt(struct dst_state *state, struct ca_msg *p_ca_message, struct ca_msg *hw_buffer, u8 reply, u8 query)
344{ 439{
345 u32 length = 0; 440 u32 length = 0;