summaryrefslogtreecommitdiff
path: root/lcd.h
blob: bc3a44b246025c296ae9f4a196ad2d890864a69f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#ifndef __LCD_H
#define __LCD_H

#include <vdr/thread.h>
#include <vdr/device.h>
#include <vdr/player.h>
#include <vdr/dvbplayer.h>

#define LCDPORT 13666
#define LCDHOST "localhost"
#define LCDMAXSTATES 5
#define LCDMAXSTATEBUF 5
#define LCDMAXWID 40
#define LCDMAXCARDS 4

class cLcd : public cThread {
  public:
    cControl *replayDvbApi;	  
    cDevice *primaryDvbApi;	  
    enum ThreadStates {Menu=0, Title=1, Replay=2, Misc=3, Vol=4};
    ThreadStates LastState[LCDMAXSTATEBUF];
    int LastStateP,LineMode;
    struct StateData {
      char lcdbuffer[LCDMAXSTATES][4][LCDMAXWID+1];
      bool lcddirty[LCDMAXSTATES][4], muted, showvolume;
      ThreadStates State;
      unsigned int barx, bary, barl, volume;
      unsigned int CardStat[LCDMAXCARDS];
    };
    cLcd();
    ~cLcd();
    bool Connect( char *host = LCDHOST , unsigned int port = LCDPORT );
    void Close();
    void Info();
    void SetTitle( const char *string);
    void SetMain( unsigned int n, const char *string);
    void SetHelp( unsigned int n, const char *Red, const char *Green, const char *Yellow, const char *Blue);
    void SetStatus( const char *string);
    void SetWarning( const char *string);
    void ShowVolume(unsigned int vol, bool muted ); 
    void SetProgress(const char *begin=NULL, const char *end=NULL, int percent=0); 
    void SetLine(unsigned int n, unsigned int l, const char *string); 
    void SetLineC(unsigned int n, unsigned int l, const char *string); 
    void SetBuffer(unsigned int n,const char *l1=NULL,const char *l2=NULL,const char *l3=NULL,const char *l4=NULL);
    void SetRunning(bool nownext, const char *string1="\0", const char *string2="\0", const char *string3="\0"); 
    void SummaryInit(char *string); 
    void SummaryUp();
    void SummaryDown();
    void SummaryDisplay();
    void SetCardStat(unsigned int card, unsigned int stat);
    void Clear(unsigned int n);
    void SetThreadState( ThreadStates newstate );
    void PopThreadState();
    void SetReplayDevice(cControl *DvbApi);
    void SetPrimaryDevice(cDevice *DvbApi);
  private:
    char *SummaryText;
    unsigned int SummaryTextL;
    unsigned int SummaryCurrent;
    bool connected;
    struct StateData ThreadStateData;
    time_t LastProgress;
    cMutex CriticalArea;
    unsigned int sock, wid, hgt, cellwid, cellhgt;
    char StringBuffer[2*LCDMAXWID+1];
    void BeginMutualExclusion();
    void EndMutualExclusion();    
    void Copy(char *to, const char *from, unsigned int max);
    void Split(const char *string, char *string1, char *string2);
    void Write(int line, const char *string);
    void GetTimeDateStat( char *string, unsigned int OutStateData[] );
    void Action(void);
};

#endif //__LCD_H