Click here to Skip to main content
15,888,351 members
Please Sign up or sign in to vote.
2.00/5 (2 votes)
See more:
hi
i am working on a lcd . i want to make edit menu in this lcd.
in this lcd we can show four line at time.
but my exact problem we many sub menu inside and inside.
how we can implement it in lcd.
this is my plan.
Main Menu
>> Controls
>> TS IP
IP ADDR
GATEWAY
SUBNET MASK

>> MANAGEMENT IP
IP ADDR
GATEWAY
SUBNET MASK

>> Input
>> VIDEO
>> SOURCE
>>SDI
>>HDMI
>>COMPONENT
>> WIDTH
>> HEIGHT
>> VIDEO FORMAT
>> FRAMERATE

>> AUDIO
>> SOURCE
>>ANALOG
>>EMBEDDED
>>AES-EBU HDMI
>> SAMPLERATE

>> Service
>> SERVICE NAME
>> SERVICE PROVIDER
>> SERVICE ID
>> PMT PID
....

>> Output
>> VIDEO
>> COMPRESSION
>> ENCODING TYPE
>> BITRATE
>> PROFILE
>> LEVEL
>> AUDIO
>> TYPE
>> ASI
>> MULTICAST
>> UDP/RTP
>> TARGET IP
>> PORT
>> UNICAST
>> UDP/RTP
>> TARGET IP
>> PORT

how we can implement it.
Posted

I don't see what the question is. This is an LCD, so is it even running Windows ? If not, C++ has NO menu support, so the answer has to rely on the specific UI library you will use. Or are you asking us how to fit 16 lines where you can only have 4 ? That depends again on what you're programming, can you have scrolling ? If not, you can't, you need to redesign your menus. Seems obvious to me.
 
Share this answer
 
Thats a nice exercise for a thuresday evening:
C++
#pragma once
#include <stdio.h>
#include <tchar.h>

enum{ LCD_LINES=4, };
typedef enum
{
  APP_QUIT,
  MAIN,
    Controls,
    MANAGEMENT_IP,
    Input,
    AUDIO,
    Service,
    Output,

  // Controls,
    Controls_TS_IP,
    Controls_IP_ADDR,
    Controls_GATEWAY,
    Controls_SUBNET_MASK,
 
  // MANAGEMENT_IP,
    MANAGEMENT_IP_IP_ADDR,
    MANAGEMENT_IP_GATEWAY,
    MANAGEMENT_IP_SUBNET_MASK,
 
  // Input,
    Input_VIDEO,
    Input_SOURCE,
    Input_SDI,
    Input_HDMI,
    Input_COMPONENT,
    Input_WIDTH,
    Input_HEIGHT,
    Input_VIDEO_FORMAT,
    Input_FRAMERATE,
 
  // AUDIO,
    AUDIO_SOURCE,
    AUDIO_ANALOG,
    AUDIO_EMBEDDED,
    AUDIO_AES_EBU_HDMI,
    AUDIO_SAMPLERATE,

  // Service,
    Service_SERVICE_NAME,
    Service_SERVICE_PROVIDER,
    Service_SERVICE_ID,
    Service_PMT_PID,

  // Output,
    Output_VIDEO,
    Output_COMPRESSION,
    Output_ENCODING_TYPE,
    Output_BITRATE,
    Output_PROFILE,
    Output_LEVEL,
    Output_AUDIO,
    Output_TYPE,
    Output_ASI,
    Output_MULTICAST,
    Output_UDP_RTP,
    Output_TARGET_IP,
    Output_PORT,
    Output_UNICAST,

} MENUITEMS;

#define  ITEM$(S)  __T( #S ),
const TCHAR*  __menuitems[] =
{
  ITEM$(APP_QUIT)
  ITEM$(MAIN)
    ITEM$(Controls)
    ITEM$(MANAGEMENT_IP)
    ITEM$(Input)
    ITEM$(AUDIO)
    ITEM$(Service)
    ITEM$(Output)

  // ITEM$(Controls)
    ITEM$(Controls_TS_IP)
    ITEM$(Controls_IP_ADDR)
    ITEM$(Controls_GATEWAY)
    ITEM$(Controls_SUBNET_MASK)
 
  // ITEM$(MANAGEMENT_IP)
    ITEM$(MANAGEMENT_IP_IP_ADDR)
    ITEM$(MANAGEMENT_IP_GATEWAY)
    ITEM$(MANAGEMENT_IP_SUBNET_MASK)
 
  // ITEM$(Input)
    ITEM$(Input_VIDEO)
    ITEM$(Input_SOURCE)
    ITEM$(Input_SDI)
    ITEM$(Input_HDMI)
    ITEM$(Input_COMPONENT)
    ITEM$(Input_WIDTH)
    ITEM$(Input_HEIGHT)
    ITEM$(Input_VIDEO_FORMAT)
    ITEM$(Input_FRAMERATE)
 
  // ITEM$(AUDIO)
    ITEM$(AUDIO_SOURCE)
    ITEM$(AUDIO_ANALOG)
    ITEM$(AUDIO_EMBEDDED)
    ITEM$(AUDIO_AES_EBU_HDMI)
    ITEM$(AUDIO_SAMPLERATE)

  // ITEM$(Service)
    ITEM$(Service_SERVICE_NAME)
    ITEM$(Service_SERVICE_PROVIDER)
    ITEM$(Service_SERVICE_ID)
    ITEM$(Service_PMT_PID)

  // ITEM$(Output)
    ITEM$(Output_VIDEO)
    ITEM$(Output_COMPRESSION)
    ITEM$(Output_ENCODING_TYPE)
    ITEM$(Output_BITRATE)
    ITEM$(Output_PROFILE)
    ITEM$(Output_LEVEL)
    ITEM$(Output_AUDIO)
    ITEM$(Output_TYPE)
    ITEM$(Output_ASI)
    ITEM$(Output_MULTICAST)
    ITEM$(Output_UDP_RTP)
    ITEM$(Output_TARGET_IP)
    ITEM$(Output_PORT)
    ITEM$(Output_UNICAST)

};

MENUITEMS show_menu_items(MENUITEMS fallback,MENUITEMS lo,MENUITEMS hi)
{
  unsigned int  i,first;
  MENUITEMS      select;
  TCHAR          c;
  first = 0;
  do
  {
    _tprintf(__T("\r\n"));
    for(i=0;(i<(LCD_LINES-1)) && (MENUITEMS)(lo+first+i)<hi;i++)
    {
      _tprintf(__T("%i "),1+i+first);
      _tprintf(__T("%s\r\n"),__menuitems[lo+i+first]);
    }
    if(LCD_LINES<(hi-lo))
      _tprintf(__T("Esc - back / Ret - next / # - select\r\n"));
    else
      _tprintf(__T("Esc - back / # - select\r\n"));
    c = _gettch();
    switch(c)
    {
      case 'Q'return APP_QUIT;
      case 'q'return APP_QUIT;
      case 13 : if((MENUITEMS)(first+(LCD_LINES))<hi) first+=LCD_LINES-1else first=0; select=(MENUITEMS)-1continue;
      case 27 : return fallback;
      default : select = (MENUITEMS)(lo+(c-'1')); break;
    }
  } while((lo>select) || (hi<select));
  return select;
}

MENUITEMS show_menu(MENUITEMS menu)
{
  switch(menu)
  {
    case MAIN         : return show_menu_items(APP_QUIT,Controls,Output);
    case Controls     : return show_menu_items(MAIN,Controls_TS_IP,Controls_SUBNET_MASK);
    case MANAGEMENT_IP: return show_menu_items(MAIN,MANAGEMENT_IP_IP_ADDR,MANAGEMENT_IP_SUBNET_MASK);
    case Input        : return show_menu_items(MAIN,Input_VIDEO,Input_FRAMERATE);
    case AUDIO        : return show_menu_items(MAIN,AUDIO_SOURCE,AUDIO_SAMPLERATE);
    case Service      : return show_menu_items(MAIN,Service_SERVICE_NAME,Service_PMT_PID);
    case Output       : return show_menu_items(MAIN,Output_VIDEO,Output_UNICAST);

    default: break;
  }
  return APP_QUIT;
}

int _tmain(int argc, _TCHAR* argv[])
{
  MENUITEMS  menu = MAIN;
  MENUITEMS  next;
  
  // reflect the function call or implement the function
  #define  CALLCASE(I)  case I: /* call_##I(); */ _tprintf(__T("\r\n  function call: %s\r\n"),__T(#I)); break;
  #define  ISMENU(I)    case I: continue;
  
  while(APP_QUIT!=(menu=show_menu(next=menu)))
  {
    switch(menu)
    {

  ISMENU(MAIN)
  ISMENU(Controls)
    CALLCASE(Controls_TS_IP)
    CALLCASE(Controls_IP_ADDR)
    CALLCASE(Controls_GATEWAY)
    CALLCASE(Controls_SUBNET_MASK)
 
  ISMENU(MANAGEMENT_IP)
    CALLCASE(MANAGEMENT_IP_IP_ADDR)
    CALLCASE(MANAGEMENT_IP_GATEWAY)
    CALLCASE(MANAGEMENT_IP_SUBNET_MASK)
 
  ISMENU(Input)
    CALLCASE(Input_VIDEO)
    CALLCASE(Input_SOURCE)
    CALLCASE(Input_SDI)
    CALLCASE(Input_HDMI)
    CALLCASE(Input_COMPONENT)
    CALLCASE(Input_WIDTH)
    CALLCASE(Input_HEIGHT)
    CALLCASE(Input_VIDEO_FORMAT)
    CALLCASE(Input_FRAMERATE)
 
  ISMENU(AUDIO)
    CALLCASE(AUDIO_SOURCE)
    CALLCASE(AUDIO_ANALOG)
    CALLCASE(AUDIO_EMBEDDED)
    CALLCASE(AUDIO_AES_EBU_HDMI)
    CALLCASE(AUDIO_SAMPLERATE)

  ISMENU(Service)
    CALLCASE(Service_SERVICE_NAME)
    CALLCASE(Service_SERVICE_PROVIDER)
    CALLCASE(Service_SERVICE_ID)
    CALLCASE(Service_PMT_PID)

  ISMENU(Output)
    CALLCASE(Output_VIDEO)
    CALLCASE(Output_COMPRESSION)
    CALLCASE(Output_ENCODING_TYPE)
    CALLCASE(Output_BITRATE)
    CALLCASE(Output_PROFILE)
    CALLCASE(Output_LEVEL)
    CALLCASE(Output_AUDIO)
    CALLCASE(Output_TYPE)
    CALLCASE(Output_ASI)
    CALLCASE(Output_MULTICAST)
    CALLCASE(Output_UDP_RTP)
    CALLCASE(Output_TARGET_IP)
    CALLCASE(Output_PORT)
    CALLCASE(Output_UNICAST)
    }
    menu = next;
  }
  return 0;
}


Good luck.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900