From bb5a552c5f9a95bddfb036909f06f75c19905a69 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Sat, 16 Jun 2012 22:39:59 +0800 Subject: [PATCH 001/442] src/Makefile.am: remove dependancy on libnxp.so --- src/Makefile.am | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 3f3d13361..ea754d64f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -97,8 +97,7 @@ endif if BOXTYPE_COOL neutrino_LDADD += \ - -lcoolstream-mt \ - -lnxp + -lcoolstream-mt bin_PROGRAMS += drivertool From 0f8eafb567268620281961019fd45ec06eb3e595 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Sat, 16 Jun 2012 22:48:52 +0800 Subject: [PATCH 002/442] src/Makefile.am: add libavcodec to the linker. --- src/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Makefile.am b/src/Makefile.am index ea754d64f..e88a3224a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -83,6 +83,7 @@ neutrino_LDADD = \ @LIBCS_LIBS@ \ @AVFORMAT_LIBS@ \ @AVUTIL_LIBS@ \ + @AVCODEC_LIBS@ \ $(FLACLIBS) \ $(VORBISLIBS) \ -lungif \ From cf878686ba787af47d7dd30561b42441163b38f6 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Mon, 9 Jul 2012 11:58:15 +0800 Subject: [PATCH 003/442] neutrino-apollo: changes for apollo uclibc. --- lib/libcoolstream/audio_cs.h | 3 ++- lib/libcoolstream/cs_api.h | 5 +++- lib/libcoolstream/dmx_cs.h | 6 ++++- lib/libcoolstream/video_cs.h | 48 ++++++++++++++++++++++++------------ src/eitd/sectionsd.cpp | 6 ++--- 5 files changed, 46 insertions(+), 22 deletions(-) diff --git a/lib/libcoolstream/audio_cs.h b/lib/libcoolstream/audio_cs.h index b79689eab..e311cf79c 100644 --- a/lib/libcoolstream/audio_cs.h +++ b/lib/libcoolstream/audio_cs.h @@ -71,7 +71,7 @@ typedef struct cs_audio_caps { class cAudio { private: CS_AUDIO_PDATA *privateData; - unsigned int cEncodedDataOnSPDIF, cEncodedDataOnHDMI; + //unsigned int cEncodedDataOnSPDIF, cEncodedDataOnHDMI; bool muted; AUDIO_FORMAT streamType; @@ -148,6 +148,7 @@ public: bool GetHdmiAudioCaps(cs_audio_caps_t &caps); bool IsHdmiAudioFormatSupported(HDMI_AUDIO_FORMAT format); void SetHdmiDD(HDMI_ENCODED_MODE type); + bool IsHdmiDTSSupported(void); }; #endif //__AUDIO_CS_H_ diff --git a/lib/libcoolstream/cs_api.h b/lib/libcoolstream/cs_api.h index 294b08c26..dbf585dc8 100644 --- a/lib/libcoolstream/cs_api.h +++ b/lib/libcoolstream/cs_api.h @@ -5,6 +5,7 @@ /* */ /* (C) 2010 CoolStream International */ /* */ +/* $Id:: $ */ /*******************************************************************************/ #ifndef __CS_API_H_ #define __CS_API_H_ @@ -30,7 +31,7 @@ enum CS_LOG_MODULE { CS_LOG_POWER_CLK, CS_LOG_MEM, CS_LOG_API, - CS_LOG_CA + CS_LOG_CA, }; // Initialization @@ -58,6 +59,8 @@ void cs_log_module_message(enum CS_LOG_MODULE module, const char *fmt, ...); // TS Routing unsigned int cs_get_ts_output(void); int cs_set_ts_output(unsigned int port); +int cs_set_ts_ci_clock(unsigned int speed); +int cs_get_ts_ci_clock(unsigned int *speed); int cs_set_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); int cs_get_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); diff --git a/lib/libcoolstream/dmx_cs.h b/lib/libcoolstream/dmx_cs.h index b74bb528e..c189e64c9 100644 --- a/lib/libcoolstream/dmx_cs.h +++ b/lib/libcoolstream/dmx_cs.h @@ -11,6 +11,8 @@ #define __DEMUX_CS_H_ #include + +#include #include "cs_types.h" #define DEMUX_POLL_TIMEOUT 0 // timeout in ms @@ -54,6 +56,8 @@ public: bool Start(bool record = false); bool Stop(void); int Read(unsigned char *buff, int len, int Timeout = 0); + + bool SetVideoFormat(VIDEO_FORMAT VideoFormat); bool SetSource(int source); bool sectionFilter(unsigned short Pid, const unsigned char * const Tid, const unsigned char * const Mask, int len, int Timeout = DEMUX_POLL_TIMEOUT, const unsigned char * const nMask = NULL); @@ -64,7 +68,7 @@ public: void SetSyncMode(AVSYNC_TYPE SyncMode); void *getBuffer(void); void *getChannel(void); - void getSTC(int64_t *STC); + void getSTC(s64 *STC); DMX_CHANNEL_TYPE getChannelType(void) { return type; }; int getUnit(void) { return unit; }; diff --git a/lib/libcoolstream/video_cs.h b/lib/libcoolstream/video_cs.h index a80d59051..353e3446b 100644 --- a/lib/libcoolstream/video_cs.h +++ b/lib/libcoolstream/video_cs.h @@ -5,6 +5,7 @@ /* */ /* (C) 2008 CoolStream International */ /* */ +/* $Id:: $ */ /*******************************************************************************/ #ifndef __VIDEO_CS_H_ #define __VIDEO_CS_H_ @@ -30,13 +31,28 @@ typedef enum { ANALOG_SCART_MASK = 0x10 } analog_mode_t; -typedef enum { - VIDEO_FORMAT_MPEG2 = 0, - VIDEO_FORMAT_MPEG4, - VIDEO_FORMAT_VC1, - VIDEO_FORMAT_JPEG, - VIDEO_FORMAT_GIF, - VIDEO_FORMAT_PNG +typedef enum +{ + VIDEO_FORMAT_MPEG2 = 0, + VIDEO_FORMAT_MPEG4, /* H264 */ + VIDEO_FORMAT_VC1, + VIDEO_FORMAT_JPEG, + VIDEO_FORMAT_GIF, + VIDEO_FORMAT_PNG, + VIDEO_FORMAT_DIVX,/* DIVX 3.11 */ + VIDEO_FORMAT_MPEG4PART2,/* MPEG4 SVH, MPEG4 SP, MPEG4 ASP, DIVX4,5,6 */ + VIDEO_FORMAT_REALVIDEO8, + VIDEO_FORMAT_REALVIDEO9, + VIDEO_FORMAT_ON2_VP6, + VIDEO_FORMAT_ON2_VP8, + VIDEO_FORMAT_SORENSON_SPARK, + VIDEO_FORMAT_H263, + VIDEO_FORMAT_H263_ENCODER, + VIDEO_FORMAT_H264_ENCODER, + VIDEO_FORMAT_MPEG4PART2_ENCODER, + VIDEO_FORMAT_AVS, + VIDEO_FORMAT_VIP656, + VIDEO_FORMAT_UNSUPPORTED } VIDEO_FORMAT; typedef enum { @@ -125,7 +141,7 @@ typedef enum class cVideo { private: CS_VIDEO_PDATA *privateData; - VIDEO_FORMAT StreamType; + u32 streamType; VIDEO_DEFINITION VideoDefinition; DISPLAY_AR DisplayAR; VIDEO_PLAY_MODE playMode; @@ -136,7 +152,7 @@ private: VIDEO_FRAME_RATE FrameRate; VIDEO_HDMI_CEC_MODE hdmiCECMode; bool Interlaced; - unsigned int uDRMDisplayDelay; + unsigned int uVPPDisplayDelay; unsigned int uVideoPTSDelay; int StcPts; bool started; @@ -146,7 +162,7 @@ private: bool auto_format; int uFormatIndex; bool vbi_started; - bool receivedDRMDelay; + bool receivedVPPDelay; bool receivedVideoDelay; int cfd; // control driver fd analog_mode_t analog_mode_cinch; @@ -160,7 +176,7 @@ public: cVideo(int mode, void * hChannel, void * hBuffer); ~cVideo(void); - void * GetDRM(void); + void * GetVPP(void); void * GetTVEnc(); void * GetTVEncSD(); void * GetHandle(); @@ -178,7 +194,7 @@ public: /* stream source */ int getSource(void); int setSource(void); - int GetStreamType(void) { return StreamType; }; + int GetStreamType(void); /* blank on freeze */ int getBlank(void); @@ -186,10 +202,10 @@ public: /* get play state */ int getPlayState(void); - void SetDRMDelay(unsigned int delay) { uDRMDisplayDelay = delay;}; + void SetVPPDelay(unsigned int delay) { uVPPDisplayDelay = delay;}; void SetVideoDelay(unsigned int delay) { uVideoPTSDelay = delay;}; /* Notification handlers */ - void HandleDRMMessage(int Event, void *pData); + void HandleVPPMessage(int Event, void *pData); void HandleVideoMessage(void * hHandle, int Event, void *pData); void HandleEncoderMessage(void *hHandle, int Event, void *pData); VIDEO_DEFINITION GetVideoDef(void) { return VideoDefinition; } @@ -216,9 +232,9 @@ public: void Standby(bool bOn); void Pig(int x, int y, int w, int h, int osd_w = 1064, int osd_h = 600); void SetControl(int num, int val); - bool ReceivedDRMDelay(void) { return receivedDRMDelay; } + bool ReceivedVPPDelay(void) { return receivedVPPDelay; } bool ReceivedVideoDelay(void) { return receivedVideoDelay; } - void SetReceivedDRMDelay(bool Received) { receivedDRMDelay = Received; } + void SetReceivedVPPDelay(bool Received) { receivedVPPDelay = Received; } void SetReceivedVideoDelay(bool Received) { receivedVideoDelay = Received; } void SetFastBlank(bool onoff); void SetTVAV(bool onoff); diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 70c8a19eb..86ff43581 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -997,7 +997,7 @@ static void commandDumpStatusInformation(int /*connfd*/, char* /*data*/, const u // resourceUsage.ru_maxrss, resourceUsage.ru_ixrss, resourceUsage.ru_idrss, resourceUsage.ru_isrss, ); printf("%s\n", stati); - malloc_stats(); + malloc_stats(NULL); return ; } @@ -1123,7 +1123,7 @@ static void FreeMemory() unlockEvents(); - malloc_stats(); + malloc_stats(NULL); xprintf("[sectionsd] free memory done\n"); //wakeupAll(); //FIXME should we re-start eit here ? } @@ -1907,7 +1907,7 @@ static void print_meminfo(void) if (!sections_debug) return; - malloc_stats(); + malloc_stats(NULL); } //--------------------------------------------------------------------- From 55c155d0cf4e9e532454a8d7e541fda0ae24debe Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Mon, 10 Sep 2012 07:38:57 +0800 Subject: [PATCH 004/442] zapit: changes for apollo. --- src/zapit/src/zapit.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index 646515a06..15b57c156 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -1954,7 +1954,9 @@ bool CZapit::Start(Z_start_arg *ZapStart_arg) audioDemux = new cDemux(); audioDemux->Open(DMX_AUDIO_CHANNEL); - videoDecoder = new cVideo(video_mode, videoDemux->getChannel(), videoDemux->getBuffer()); + videoDecoder = cVideo::GetDecoder(); + videoDecoder->SetDemux(videoDemux); + videoDecoder->SetVideoSystem(video_mode); videoDecoder->Standby(false); audioDecoder = new cAudio(audioDemux->getBuffer(), videoDecoder->GetTVEnc(), NULL /*videoDecoder->GetTVEncSD()*/); From 83636ebb6e5907f6e98308f2bf591651fac7708b Mon Sep 17 00:00:00 2001 From: "S.R. van Loon" Date: Tue, 25 Sep 2012 22:23:17 +0800 Subject: [PATCH 005/442] neutrino: change all remote/frontpanel stuff to use the new headers. --- configure.ac | 3 ++- src/driver/rcinput.cpp | 9 ++++----- src/driver/rcinput.h | 6 +++--- src/gui/keybind_setup.cpp | 4 ++-- src/timerd/timermanager.cpp | 10 +++++----- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/configure.ac b/configure.ac index d1d0378da..e8edf01bf 100644 --- a/configure.ac +++ b/configure.ac @@ -118,7 +118,8 @@ AC_ARG_ENABLE(cleanup, [ --enable-cleanup enable cleanup on exit], [AC_DEFINE(EXIT_CLEANUP,1,[enable cleanup on exit])]) -AC_CHECK_HEADERS(coolstream/nevis_ir.h) +AC_CHECK_HEADERS(coolstream/cs_ir_generic.h) +AC_CHECK_HEADERS(coolstream/cs_frontpanel.h) # # Check for libtdservicedb - the new one - for testing only diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index a967ff0bc..04ae554d7 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -65,8 +65,7 @@ #define ENABLE_REPEAT_CHECK -//const char * const RC_EVENT_DEVICE[NUMBER_OF_EVENT_DEVICES] = {"/dev/input/nevis_ir", "/dev/input/event0"}; -const char * const RC_EVENT_DEVICE[NUMBER_OF_EVENT_DEVICES] = {"/dev/input/nevis_ir"}; +const char * const RC_EVENT_DEVICE[NUMBER_OF_EVENT_DEVICES] = {"/dev/cs_ir"}; typedef struct input_event t_input_event; #ifdef KEYBOARD_INSTEAD_OF_REMOTE_CONTROL @@ -1571,8 +1570,8 @@ void CRCInput::play_click() } -#ifdef HAVE_COOLSTREAM_NEVIS_IR_H -// hint: ir_protocol_t and other useful things are defined in nevis_ir.h +#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H +// hint: ir_protocol_t and other useful things are defined in cs_ir_generic.h void CRCInput::set_rc_hw(ir_protocol_t ir_protocol, unsigned int ir_address) { int ioctl_ret = -1; @@ -1596,7 +1595,7 @@ void CRCInput::set_rc_hw(ir_protocol_t ir_protocol, unsigned int ir_address) } } -// hint: ir_protocol_t and other useful things are defined in nevis_ir.h +// hint: ir_protocol_t and other useful things are defined in cs_ir_generic.h void CRCInput::set_rc_hw(void) { ir_protocol_t ir_protocol = IR_PROTOCOL_UNKNOWN; diff --git a/src/driver/rcinput.h b/src/driver/rcinput.h index ce2150e28..5a88f0d48 100644 --- a/src/driver/rcinput.h +++ b/src/driver/rcinput.h @@ -38,8 +38,8 @@ #include #include #include -#ifdef HAVE_COOLSTREAM_NEVIS_IR_H -#include +#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H +#include #endif #ifndef KEY_OK @@ -152,7 +152,7 @@ class CRCInput int translate(int code, int num); void calculateMaxFd(void); int checkTimers(); -#ifdef HAVE_COOLSTREAM_NEVIS_IR_H +#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H void set_rc_hw(ir_protocol_t ir_protocol, unsigned int ir_address); #endif public: diff --git a/src/gui/keybind_setup.cpp b/src/gui/keybind_setup.cpp index 21f8dce61..7d5def5d4 100644 --- a/src/gui/keybind_setup.cpp +++ b/src/gui/keybind_setup.cpp @@ -33,7 +33,7 @@ #include #endif -#ifdef HAVE_COOLSTREAM_NEVIS_IR_H +#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H /* define constants instead of #ifdef'ing the corresponding code. * the compiler will optimize it away anyway, but the syntax is * still checked */ @@ -41,7 +41,7 @@ #else #define RC_HW_SELECT false #ifdef HAVE_COOL_HARDWARE -#warning header coolstream/nevis_ir.h not found +#warning header coolstream/cs_ir_generic.h not found #warning you probably have an old driver installation #warning you´ll be missing the remotecontrol selection feature! #endif diff --git a/src/timerd/timermanager.cpp b/src/timerd/timermanager.cpp index d02c93644..e3590d732 100644 --- a/src/timerd/timermanager.cpp +++ b/src/timerd/timermanager.cpp @@ -33,8 +33,8 @@ #include #include #include -#if HAVE_COOL_HARDWARE -#include +#ifdef HAVE_COOLSTREAM_CS_FRONTPANEL_H +#include #endif #include @@ -79,11 +79,11 @@ void CTimerManager::Init(void) if (fd < 0) { perror("/dev/display"); } else { - wakeup_data_t wk; + fp_wakeup_data_t wk; memset(&wk, 0, sizeof(wk)); - int ret = ioctl(fd, IOC_VFD_GET_WAKEUP, &wk); + int ret = ioctl(fd, IOC_FP_GET_WAKEUP, &wk); if(ret >= 0) - wakeup = ((wk.source == WAKEUP_SOURCE_TIMER) /* || (wk.source == WAKEUP_SOURCE_PWLOST)*/); + wakeup = ((wk.source == FP_WAKEUP_SOURCE_TIMER) /* || (wk.source == WAKEUP_SOURCE_PWLOST)*/); close(fd); } printf("[timerd] wakeup from standby: %s\n", wakeup ? "yes" : "no"); From a669bc83afce4142df3e4a53d9a146338c18182e Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Wed, 26 Sep 2012 18:19:13 +0800 Subject: [PATCH 006/442] src/timerd/timermanager.cpp: fix faulty merge. --- src/timerd/timermanager.cpp | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/src/timerd/timermanager.cpp b/src/timerd/timermanager.cpp index 3c87eab53..e03d6d306 100644 --- a/src/timerd/timermanager.cpp +++ b/src/timerd/timermanager.cpp @@ -64,32 +64,6 @@ void CTimerManager::Init(void) m_saveEvents = false; m_isTimeSet = false; wakeup = 0; - timer_wakeup = false; - -#if HAVE_COOL_HARDWARE - int fd = open("/dev/display", O_RDONLY); - - if (fd < 0) { - perror("/dev/display"); - } else { - fp_wakeup_data_t wk; - memset(&wk, 0, sizeof(wk)); - int ret = ioctl(fd, IOC_FP_GET_WAKEUP, &wk); - if(ret >= 0) - wakeup = ((wk.source == FP_WAKEUP_SOURCE_TIMER) /* || (wk.source == WAKEUP_SOURCE_PWLOST)*/); - close(fd); - } - printf("[timerd] wakeup from standby: %s\n", wakeup ? "yes" : "no"); - if(wakeup){ - creat("/tmp/.wakeup", 0); - timer_wakeup = true; - }else{ - const char *neutrino_leave_deepstandby_script = CONFIGDIR "/deepstandby.off"; - printf("[%s] executing %s\n",__FILE__ ,neutrino_leave_deepstandby_script); - if (system(neutrino_leave_deepstandby_script) != 0) - perror( neutrino_leave_deepstandby_script ); - } -#endif loadRecordingSafety(); //thread starten From 5aeca6ef13020e52409d77ea2926eb500a2b67a9 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Wed, 26 Sep 2012 18:19:35 +0800 Subject: [PATCH 007/442] neutrino: fix code to new 'generic' frontpanel/ir headers. --- src/drivertool.c | 32 ++++++++++++++++---------------- src/neutrino.cpp | 26 +++++++++++++------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/drivertool.c b/src/drivertool.c index 62f9ad991..352fedd1c 100644 --- a/src/drivertool.c +++ b/src/drivertool.c @@ -29,10 +29,10 @@ #include #include -#include +#include -#ifdef HAVE_COOLSTREAM_NEVIS_IR_H -#include +#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H +#include #endif #ifndef IOC_IR_SET_PRI_PROTOCOL @@ -103,16 +103,16 @@ struct ioctl_list }; static struct ioctl_list n[] = { - { 0, "VFD_SET_BRIGHT", IOC_VFD_SET_BRIGHT, TYPE_CHAR }, - { 0, "VFD_CLEAR_ALL", IOC_VFD_CLEAR_ALL, TYPE_UINT }, - { 0, "VFD_SET_TEXT", IOC_VFD_SET_TEXT, TYPE_CHARP }, - { 0, "VFD_SET_ICON", IOC_VFD_SET_ICON, TYPE_UINT }, - { 0, "VFD_CLEAR_ICON", IOC_VFD_CLEAR_ICON, TYPE_UINT }, - { 0, "VFD_SET_OUTPUT", IOC_VFD_SET_OUTPUT, TYPE_CHAR }, - { 0, "VFD_CLEAR_OUTPUT", IOC_VFD_CLEAR_OUTPUT, TYPE_CHAR }, - { 0, "VFD_STANDBY", IOC_VFD_STANDBY, TYPE_UNSUPP }, - { 0, "VFD_LED_CTRL", IOC_VFD_LED_CTRL, TYPE_CHAR }, - { 0, "VFD_GET_WAKEUP", IOC_VFD_GET_WAKEUP, TYPE_UNSUPP }, + { 0, "FP_SET_BRIGHT", IOC_FP_SET_BRIGHT, TYPE_CHAR }, + { 0, "FP_CLEAR_ALL", IOC_FP_CLEAR_ALL, TYPE_UINT }, + { 0, "FP_SET_TEXT", IOC_FP_SET_TEXT, TYPE_CHARP }, + { 0, "FP_SET_ICON", IOC_FP_SET_ICON, TYPE_UINT }, + { 0, "FP_CLEAR_ICON", IOC_FP_CLEAR_ICON, TYPE_UINT }, + { 0, "FP_SET_OUTPUT", IOC_FP_SET_OUTPUT, TYPE_CHAR }, + { 0, "FP_CLEAR_OUTPUT", IOC_FP_CLEAR_OUTPUT, TYPE_CHAR }, + { 0, "FP_STANDBY", IOC_FP_STANDBY, TYPE_UNSUPP }, + { 0, "FP_LED_CTRL", IOC_FP_LED_CTRL, TYPE_CHAR }, + { 0, "FP_GET_WAKEUP", IOC_FP_GET_WAKEUP, TYPE_UNSUPP }, { 1, "IR_SET_PRI_PROTOCOL", IOC_IR_SET_PRI_PROTOCOL, TYPE_UINT }, { 1, "IR_SET_SEC_PROTOCOL", IOC_IR_SET_SEC_PROTOCOL, TYPE_UINT }, { 1, "IR_SET_PRI_ADDRESS", IOC_IR_SET_PRI_ADDRESS, TYPE_UINT }, @@ -121,7 +121,7 @@ static struct ioctl_list n[] = { { 1, "IR_SET_X_DELAY", IOC_IR_SET_X_DELAY, TYPE_UINT }, { 1, "IR_SET_FP_MODE", IOC_IR_SET_FP_MODE, TYPE_UINT }, { 1, "IR_GET_PROTOCOLS", IOC_IR_GET_PROTOCOLS, TYPE_UINT_GET }, -#ifdef HAVE_COOLSTREAM_NEVIS_IR_H +#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H { 1, "IOC_IR_SET_PRI_KEYMAP", IOC_IR_SET_PRI_KEYMAP, TYPE_UNSUPP }, { 1, "IOC_IR_SET_SEC_KEYMAP", IOC_IR_SET_SEC_KEYMAP, TYPE_UNSUPP }, #endif @@ -130,8 +130,8 @@ static struct ioctl_list n[] = { static const char *devices[2] = { - "/dev/display", - "/dev/input/nevis_ir" + "/dev/cs_display", + "/dev/cs_ir" }; void usage(void) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 369f89771..c633a88b8 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -1709,7 +1709,7 @@ void CNeutrinoApp::InitSectiondClient() } #if HAVE_COOL_HARDWARE -#include +#include #endif void wake_up( bool &wakeup) @@ -1726,11 +1726,11 @@ void wake_up( bool &wakeup) if (fd < 0) { perror("/dev/display"); } else { - wakeup_data_t wk; + fp_wakeup_data_t wk; memset(&wk, 0, sizeof(wk)); - int ret = ioctl(fd, IOC_VFD_GET_WAKEUP, &wk); + int ret = ioctl(fd, IOC_FP_GET_WAKEUP, &wk); if(ret >= 0) - wakeup = ((wk.source == WAKEUP_SOURCE_TIMER) /* || (wk.source == WAKEUP_SOURCE_PWLOST)*/); + wakeup = ((wk.source == FP_WAKEUP_SOURCE_TIMER) /* || (wk.source == WAKEUP_SOURCE_PWLOST)*/); close(fd); } printf("[timerd] wakeup from standby: %s\n", wakeup ? "yes" : "no"); @@ -2565,7 +2565,7 @@ _repeat: } recordingstatus = data; autoshift = CRecordManager::getInstance()->TimeshiftOnly(); - CVFD::getInstance()->ShowIcon(VFD_ICON_CAM1, recordingstatus != 0); + CVFD::getInstance()->ShowIcon(FP_ICON_CAM1, recordingstatus != 0); if( ( !g_InfoViewer->is_visible ) && data && !autoshift) g_RCInput->postMsg( NeutrinoMessages::SHOW_INFOBAR, 0 ); @@ -2950,7 +2950,7 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode) system("/bin/umount -a"); sleep(1); { - standby_data_t standby; + fp_standby_data_t standby; time_t mtime = time(NULL); struct tm *tmtime = localtime(&mtime); time_t fp_timer = 0; @@ -2996,8 +2996,8 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode) reboot(LINUX_REBOOT_CMD_RESTART); } else { - if (ioctl(fd, IOC_VFD_STANDBY, (standby_data_t *) &standby)) { - perror("IOC_VFD_STANDBY"); + if (ioctl(fd, IOC_FP_STANDBY, (fp_standby_data_t *) &standby)) { + perror("IOC_FP_STANDBY"); reboot(LINUX_REBOOT_CMD_RESTART); } else { while(true) sleep(1); @@ -3025,7 +3025,7 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode) shutdown_cs_api(); system("/etc/init.d/rcK"); - CVFD::getInstance()->ShowIcon(VFD_ICON_CAM1, true); + CVFD::getInstance()->ShowIcon(FP_ICON_CAM1, true); InfoClock->StopClock(); g_RCInput->clearRCMsg(); @@ -3098,14 +3098,14 @@ void CNeutrinoApp::tvMode( bool rezap ) videoDecoder->StopPicture(); g_RCInput->killTimer(g_InfoViewer->lcdUpdateTimer); g_InfoViewer->lcdUpdateTimer = g_RCInput->addTimer( LCD_UPDATE_TIME_TV_MODE, false ); - CVFD::getInstance()->ShowIcon(VFD_ICON_RADIO, false); + CVFD::getInstance()->ShowIcon(FP_ICON_RADIO, false); StartSubtitles(!rezap); } g_volume->Init(); CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); - CVFD::getInstance()->ShowIcon(VFD_ICON_TV, true); + CVFD::getInstance()->ShowIcon(FP_ICON_TV, true); if( mode == mode_standby ) { CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); @@ -3318,11 +3318,11 @@ void CNeutrinoApp::radioMode( bool rezap) if(mode==mode_tv ) { g_RCInput->killTimer(g_InfoViewer->lcdUpdateTimer); g_InfoViewer->lcdUpdateTimer = g_RCInput->addTimer( LCD_UPDATE_TIME_RADIO_MODE, false ); - CVFD::getInstance()->ShowIcon(VFD_ICON_TV, false); + CVFD::getInstance()->ShowIcon(FP_ICON_TV, false); StopSubtitles(); } CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); - CVFD::getInstance()->ShowIcon(VFD_ICON_RADIO, true); + CVFD::getInstance()->ShowIcon(FP_ICON_RADIO, true); if( mode == mode_standby ) { CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); From 00e9ba9467abe2ded18b3ab2c92908edcf9044a4 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Wed, 10 Oct 2012 10:49:18 +0800 Subject: [PATCH 008/442] neutrino: add some autorun.sh file for apollo. --- autorun.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100755 autorun.sh diff --git a/autorun.sh b/autorun.sh new file mode 100755 index 000000000..a61ac6a6c --- /dev/null +++ b/autorun.sh @@ -0,0 +1,7 @@ +export LD_LIBRARY_PATH=/opt/lib + +echo "### Starting NEUTRINO ###" + +cd /opt/bin +./neutrino & + From 1fa9244f915111b850af55d80eef4205a200df15 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 13 Nov 2012 12:41:18 +0800 Subject: [PATCH 009/442] neutrino: add new power manager header which adds destructor for cpu freq class. --- lib/libcoolstream/pwrmngr.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/libcoolstream/pwrmngr.h b/lib/libcoolstream/pwrmngr.h index f0973c772..8a4743e31 100644 --- a/lib/libcoolstream/pwrmngr.h +++ b/lib/libcoolstream/pwrmngr.h @@ -26,7 +26,7 @@ public: unsigned long GetDelta(void); // cCpuFreqManager(void); - + ~cCpuFreqManager(); }; // -- cPowerManageger ---------------------------------------------------------- @@ -45,7 +45,6 @@ private: bool opened; PWR_STATE powerState; // - static void ApplicationCallback(void * /*hHandle*/, void */*pUserData*/, signed long /*eEvent*/, void */*pEventData*/, void */*pTag*/) {} bool SetState(PWR_STATE PowerState); public: bool Open(void); From be3c098cb87150213e4ca49fe4a8d16e8e2cffd2 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 13 Nov 2012 12:42:20 +0800 Subject: [PATCH 010/442] neutrino: destruct cpufreq if it was instantiated. --- src/neutrino.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 374637e97..c4a143e2c 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -3587,8 +3587,11 @@ void stop_daemons(bool stopall) printf("zapit shutdown done\n"); CVFD::getInstance()->Clear(); if(stopall) { - if (cpuFreq) + if (cpuFreq) { cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000); + delete cpuFreq; + } + if (powerManager) { /* if we were in standby, leave it otherwise, the next start of neutrino will fail in "_write_gxa" in From e4261043998af5cb1692dd90b448450ec7702833 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 13 Nov 2012 12:45:17 +0800 Subject: [PATCH 011/442] neutrino: fix config file locations. --- acinclude.m4 | 21 ++++++++++-------- src/gui/bookmarkmanager.h | 2 +- .../tuxboxapi/coolstream/neutrinoyparser.cpp | 7 +++--- src/nhttpd/yconfig.h | 22 +++++++++++-------- src/nhttpd/yhttpd.cpp | 1 + 5 files changed, 31 insertions(+), 22 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 6d3d2014d..16ee8e762 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -48,6 +48,9 @@ elif test "$TARGET" = "cdk"; then if test "$prefix" = "NONE"; then AC_MSG_ERROR(invalid prefix, you need to specify one in cdk mode) fi + if test "$targetprefix" != "NONE"; then + AC_DEFINE_UNQUOTED(TARGETPREFIX, "${targetprefix}",[The targets prefix]) + fi if test "$targetprefix" = "NONE"; then targetprefix="" fi @@ -216,18 +219,18 @@ if test "$$1_CONFIG" != "no"; then if test "$TARGET" = "cdk" && check_path "$$1_CONFIG"; then AC_MSG_$3([could not find a suitable version of $2]); else - if test "$1" = "CURL"; then - $1_CFLAGS=$($$1_CONFIG --cflags) + if test "$1" = "CURL"; then + $1_CFLAGS=$($$1_CONFIG --cflags) $1_LIBS=$($$1_CONFIG --libs) else - if test "$1" = "FREETYPE"; then - $1_CFLAGS=$($$1_CONFIG --cflags) - $1_LIBS=$($$1_CONFIG --libs) - else - $1_CFLAGS=$($$1_CONFIG --prefix=$targetprefix --cflags) - $1_LIBS=$($$1_CONFIG --prefix=$targetprefix --libs) + if test "$1" = "FREETYPE"; then + $1_CFLAGS=$($$1_CONFIG --cflags) + $1_LIBS=$($$1_CONFIG --libs) + else + $1_CFLAGS=$($$1_CONFIG --prefix=$targetprefix --cflags) + $1_LIBS=$($$1_CONFIG --prefix=$targetprefix --libs) fi - fi + fi fi fi diff --git a/src/gui/bookmarkmanager.h b/src/gui/bookmarkmanager.h index e1f88e02a..7d0cffbe1 100644 --- a/src/gui/bookmarkmanager.h +++ b/src/gui/bookmarkmanager.h @@ -43,7 +43,7 @@ #include #define MAXBOOKMARKS 10 -#define BOOKMARKFILE "/var/tuxbox/config/bookmarks" +#define BOOKMARKFILE CONFIGDIR"/bookmarks" class CBookmark { diff --git a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp index a4ba3bce3..64b5ebdb8 100644 --- a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp @@ -12,6 +12,10 @@ #include //ntohs #include //ntohs #include //ntohs + +#include +#include +#include // yhttpd #include "yhttpd.h" #include "ytypes_globals.h" @@ -22,9 +26,6 @@ #include "neutrinoyparser.h" #include "neutrinoapi.h" -#include -#include -#include #include #include diff --git a/src/nhttpd/yconfig.h b/src/nhttpd/yconfig.h index c248efcd0..3912dc04c 100644 --- a/src/nhttpd/yconfig.h +++ b/src/nhttpd/yconfig.h @@ -101,26 +101,30 @@ #define HTTPD_DEFAULT_LANGUAGE "English" #define AUTHUSER "root" -#define HTTPD_CONFIGDIR "/var/tuxbox/config" -#define HTTPD_CONFIGFILE HTTPD_CONFIGDIR "/nhttpd.conf" -#define YWEB_CONFIGFILE HTTPD_CONFIGDIR "/Y-Web.conf" -#define PUBLICDOCUMENTROOT "/var/httpd" -#define NEUTRINO_CONFIGFILE "/var/tuxbox/config/neutrino.conf" +#ifndef TARGETPREFIX +#define TARGETPREFIX "" +#endif + +#define HTTPD_CONFIGDIR TARGETPREFIX"/var/tuxbox/config" +#define HTTPD_CONFIGFILE HTTPD_CONFIGDIR"/nhttpd.conf" +#define YWEB_CONFIGFILE HTTPD_CONFIGDIR"/Y-Web.conf" +#define PUBLICDOCUMENTROOT TARGETPREFIX"/var/httpd" +#define NEUTRINO_CONFIGFILE TARGETPREFIX"/var/tuxbox/config/neutrino.conf" #define HOSTEDDOCUMENTROOT "/mnt/hosted" #define EXTRASDOCUMENTROOT "/mnt/hosted/extras" #define EXTRASDOCUMENTURL "/hosted/extras" -#define ZAPITXMLPATH "/var/tuxbox/config/zapit" -#define TUXBOX_LOGOS_URL "/usr/share/tuxbox/neutrino/icons/logos" +#define ZAPITXMLPATH TARGETPREFIX"/var/tuxbox/config/zapit" +#define TUXBOX_LOGOS_URL TARGETPREFIX"/usr/share/neutrino/icons/logos" // switch for Box differences #ifdef CONFIG_SYSTEM_TUXBOX #define AUTHPASSWORD "dbox2" -#define PRIVATEDOCUMENTROOT "/share/tuxbox/neutrino/httpd-y" +#define PRIVATEDOCUMENTROOT TARGETPREFIX"/share/tuxbox/neutrino/httpd-y" #endif #ifdef CONFIG_SYSTEM_TUXBOX_COOLSTREAM #define AUTHPASSWORD "coolstream" -#define PRIVATEDOCUMENTROOT "/share/tuxbox/neutrino/httpd" +#define PRIVATEDOCUMENTROOT TARGETPREFIX"/share/tuxbox/neutrino/httpd" #undef Y_CONFIG_BUILD_AS_DAEMON // No Daemon #endif //----------------------------------------------------------------------------- diff --git a/src/nhttpd/yhttpd.cpp b/src/nhttpd/yhttpd.cpp index a7039798b..7f4530e2a 100644 --- a/src/nhttpd/yhttpd.cpp +++ b/src/nhttpd/yhttpd.cpp @@ -56,6 +56,7 @@ static CmodCache mod_cache; // static instance //----------------------------------------------------------------------------- #if defined(CONFIG_SYSTEM_TUXBOX) || defined(CONFIG_SYSTEM_TUXBOX_COOLSTREAM) #include "neutrinoapi.h" +#include static CNeutrinoAPI *NeutrinoAPI; #endif From a806919b8c19e8e23c3f23c481b80af0f8bc0afc Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 13 Nov 2012 12:46:20 +0800 Subject: [PATCH 012/442] neutrino: add data to the make file so they get installed properly. --- configure.ac | 1 + src/zapit/Makefile.am | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index e8edf01bf..1c98f840a 100644 --- a/configure.ac +++ b/configure.ac @@ -193,5 +193,6 @@ src/timerd/Makefile src/zapit/Makefile src/zapit/lib/Makefile src/zapit/src/Makefile +src/zapit/data/Makefile ]) diff --git a/src/zapit/Makefile.am b/src/zapit/Makefile.am index 9f195e0e4..2ec97d007 100644 --- a/src/zapit/Makefile.am +++ b/src/zapit/Makefile.am @@ -1,3 +1,4 @@ AUTOMAKE_OPTIONS = gnu -SUBDIRS = lib src +SUBDIRS = lib src data + From b9478659dd94ca83c1a07b0866f657e8fbeb4b7a Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Thu, 22 Nov 2012 01:38:08 +0800 Subject: [PATCH 013/442] neutrino: add data and updated cnxtfb.h. --- lib/libcoolstream/cnxtfb.h | 57 +++++++++++++++++++++++++++++++----- src/zapit/data/Makefile.am | 4 +++ src/zapit/data/frontend.conf | 0 3 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 src/zapit/data/Makefile.am create mode 100644 src/zapit/data/frontend.conf diff --git a/lib/libcoolstream/cnxtfb.h b/lib/libcoolstream/cnxtfb.h index 15a47afc1..6798f3bd1 100644 --- a/lib/libcoolstream/cnxtfb.h +++ b/lib/libcoolstream/cnxtfb.h @@ -14,7 +14,7 @@ /* assign an accelerator type (we have no official, so we do not add them to linux/fb.h */ -#define FB_ACCEL_CX2450X 0x90 /* Trident CX2450X */ +#define FB_ACCEL_PNX849X 0x90 /* Trident PNX849X */ /* * structure which contains the image handle @@ -22,10 +22,11 @@ typedef struct _cnxtfb_handle { void *hImage; - void *hDRM_SD; + void *hVPP_SD; void *hTvEnc_SD; - void *hDRM; + void *hVPP; void *hTvEnc; + void *hImage_SD; } cnxtfb_handle; typedef struct _cnxtfb_resolution @@ -35,13 +36,54 @@ typedef struct _cnxtfb_resolution } cnxtfb_resolution; +/* To use with ioctl FBIO_CHANGEOUTPUTFORMAT */ +typedef enum { + CNXTFB_VIDEO_STANDARD_ATSC_1080I = 0, + CNXTFB_VIDEO_STANDARD_NTSC_M, + CNXTFB_VIDEO_STANDARD_ATSC_480P, + CNXTFB_VIDEO_STANDARD_ATSC_720P, + CNXTFB_VIDEO_STANDARD_PAL_B_WEUR, + CNXTFB_VIDEO_STANDARD_SECAM_L, + CNXTFB_VIDEO_STANDARD_ATSC_576P, + CNXTFB_VIDEO_STANDARD_ATSC_720P_50HZ, + CNXTFB_VIDEO_STANDARD_ATSC_1080I_50HZ +} CNXTFB_VIDEO_STANDARD; + typedef enum { - CNXTFB_BLEND_MODE_GLOBAL_ALPHA = 0, /* Global / Region Alpha */ - CNXTFB_BLEND_MODE_PIXEL_ALPHA, /* Alpha from pixel */ - CNXTFB_BLEND_MODE_ALPHA_MULTIPLIED, /* Global alpha multiplied with pixel alpha */ + CNXTFB_BLEND_MODE_GLOBAL_ALPHA = 0, + CNXTFB_BLEND_MODE_PIXEL_ALPHA, + CNXTFB_BLEND_MODE_ALPHA_MULTIPLIED, } CNXTFB_BLEND_MODE; +typedef enum +{ + CNXTFB_INVALID = -1, + CNXTFB_480I = 0, + CNXTFB_480P, + CNXTFB_576I, + CNXTFB_576P, + CNXTFB_720P, + CNXTFB_720P_50, + CNXTFB_1080I, + CNXTFB_1080I_50, + CNXTFB_1080P, + CNXTFB_DISPLAY_MODE_LAST = CNXTFB_1080P +} cnxtfb_displaymode; + +typedef enum +{ + CNXTFB_TYPE_SD = 1, /* 1 << 0 */ + CNXTFB_TYPE_HD = 2 /* 1 << 1 */ +} CNXTFB_FB_TYPE; + +typedef struct +{ + unsigned char Type; /* Bitmask of type CNXTFB_FB_TYPE */ + cnxtfb_displaymode SDMode; + cnxtfb_displaymode HDMode; +} CNXTFB_OUTPUT_FORMAT_CHANGE; + #define CNXTFB_IO(type) _IO('F', type) #define CNXTFB_IOW(type, dtype) _IOW('F', type, dtype) #define CNXTFB_IOR(type, dtype) _IOR('F', type, dtype) @@ -50,7 +92,7 @@ typedef enum #define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t) #endif -#define FBIO_GETCNXTFBHANDLE CNXTFB_IOR(0x21, cnxtfb_handle) +#define FBIO_GETCNXTFBHANDLE CNXTFB_IOR(0x21, cnxtfb_handle) // 0x4620 #define FBIO_STARTDISPLAY CNXTFB_IO(0x22) #define FBIO_STOPDISPLAY CNXTFB_IO(0x23) #define FBIO_SETOPACITY CNXTFB_IOW(0x24, u_int8_t) @@ -58,6 +100,7 @@ typedef enum #define FBIO_CHANGEOUTPUTFORMAT CNXTFB_IOW(0x26, u_int32_t) #define FBIO_GETFBRESOLUTION CNXTFB_IOR(0x27, cnxtfb_resolution) #define FBIO_SETFLICKERFILTER CNXTFB_IOW(0x28, u_int8_t) +#define FBIO_SCALE_SD_OSD CNXTFB_IO(0x28) #ifdef FB_TEST_HW_ACCELERATION #define FBIO_FILL_RECT CNXTFB_IOW(0x29, struct fb_fillrect) diff --git a/src/zapit/data/Makefile.am b/src/zapit/data/Makefile.am new file mode 100644 index 000000000..56710b294 --- /dev/null +++ b/src/zapit/data/Makefile.am @@ -0,0 +1,4 @@ +configdir = $(CONFIGDIR)/zapit +config_DATA = frontend.conf + + diff --git a/src/zapit/data/frontend.conf b/src/zapit/data/frontend.conf new file mode 100644 index 000000000..e69de29bb From 822ee02aa113a533d6be1856f0282d1aff1c5486 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Thu, 22 Nov 2012 16:20:51 +0800 Subject: [PATCH 014/442] neutrino: add autorun.sh. --- autorun.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autorun.sh b/autorun.sh index a61ac6a6c..52b20488c 100755 --- a/autorun.sh +++ b/autorun.sh @@ -1,4 +1,5 @@ -export LD_LIBRARY_PATH=/opt/lib +export LD_LIBRARY_PATH=/opt/lib:/opt/usr/lib +export PATH=${PATH}:/opt/bin:/opt/usr/bin echo "### Starting NEUTRINO ###" From cdcd42ea8aed99d08043306388284d2b69a83234 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 4 Dec 2012 00:24:46 +0800 Subject: [PATCH 015/442] neutrino: use pkgconfig for OGG. --- configure.ac | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/configure.ac b/configure.ac index 1c98f840a..0fddb3c50 100644 --- a/configure.ac +++ b/configure.ac @@ -53,6 +53,10 @@ TUXBOX_APPS_LIB_PKGCONFIG_CHECK(MAD,libmad) if test -z "$MAD_CFLAGS" ; then TUXBOX_APPS_LIB_PKGCONFIG(MAD,mad) fi +TUXBOX_APPS_LIB_PKGCONFIG_CHECK(OGG,ogg) +if test -z "$OGG_CFLAGS" ; then + TUXBOX_APPS_LIB_PKGCONFIG(OGG,ogg) +fi TUXBOX_APPS_LIB_PKGCONFIG(PNG,libpng) TUXBOX_APPS_LIB_PKGCONFIG(AVFORMAT,libavformat) TUXBOX_APPS_LIB_PKGCONFIG(AVCODEC,libavcodec) From b018c08ccec9c818c96d8b83ef2816fd254a9475 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 4 Dec 2012 00:28:34 +0800 Subject: [PATCH 016/442] neutrino: add TANK video modes (we only support RGB / YPBPR on both cinch and scart at the same time). --- data/locale/deutsch.locale | 4 ++++ data/locale/english.locale | 4 ++++ lib/libcoolstream/video_cs.h | 23 ++++++++++-------- src/gui/videosettings.cpp | 45 ++++++++++++++++++++++-------------- src/neutrino.cpp | 4 ++-- src/system/locals.h | 4 ++++ src/system/locals_intern.h | 4 ++++ 7 files changed, 59 insertions(+), 29 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 0d1ab625b..38651925f 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -1774,6 +1774,10 @@ videomenu.analog_sd_rgb_cinch RGB -> Cinch (SD) videomenu.analog_sd_rgb_scart RGB -> Scart (SD) videomenu.analog_sd_yprpb_cinch YPbPr -> Cinch (SD) videomenu.analog_sd_yprpb_scart YPbPr -> Scart (SD) +videomenu.analog_hd_rgb RGB (HD) +videomenu.analog_hd_yprpb YPbPr(HD) +videomenu.analog_sd_rgb RGB (SD) +videomenu.analog_sd_yprpb YPbPr (SD) videomenu.auto Automatisch videomenu.brightness Helligkeit videomenu.cinch Cinch diff --git a/data/locale/english.locale b/data/locale/english.locale index 48bad20a2..f6d2c6811 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1774,6 +1774,10 @@ videomenu.analog_sd_rgb_cinch RGB on cinch (SD) videomenu.analog_sd_rgb_scart RGB on scart (SD) videomenu.analog_sd_yprpb_cinch YPbPr on cinch (SD) videomenu.analog_sd_yprpb_scart YPbPr on scart (SD) +videomenu.analog_hd_rgb RGB (HD) +videomenu.analog_hd_yprpb YPbPr(HD) +videomenu.analog_sd_rgb RGB (SD) +videomenu.analog_sd_yprpb YPbPr (SD) videomenu.auto Auto videomenu.brightness Brightness videomenu.cinch Cinch diff --git a/lib/libcoolstream/video_cs.h b/lib/libcoolstream/video_cs.h index 2b8a8f034..52946dd0c 100644 --- a/lib/libcoolstream/video_cs.h +++ b/lib/libcoolstream/video_cs.h @@ -22,17 +22,21 @@ #endif typedef enum { - ANALOG_SD_RGB_CINCH = 0x00, - ANALOG_SD_YPRPB_CINCH, - ANALOG_HD_RGB_CINCH, - ANALOG_HD_YPRPB_CINCH, - ANALOG_SD_RGB_SCART = 0x10, - ANALOG_SD_YPRPB_SCART, - ANALOG_HD_RGB_SCART, - ANALOG_HD_YPRPB_SCART, - ANALOG_SCART_MASK = 0x10 + // Video modes + ANALOG_xD_CVBS = (1 << 0), // Turns off fastblank on SCART + ANALOG_SD_RGB = (1 << 1), // Output SD in RGB format + ANALOG_SD_YPRPB = (1 << 2), // Output SD in YPbPr format (component) + ANALOG_HD_RGB = (1 << 3), // Output HD in RGB format + ANALOG_HD_YPRPB = (1 << 4), // Output HD in YPbPr format (component) + // Output types + ANALOG_xD_SCART = (1 << 8), // Output is SCART + ANALOG_xD_CINCH = (1 << 9), // Output is Cinch + ANALOG_xD_BOTH = (3 << 8), // Output cannot individually control scart, cinch outputs + // due to limited amount of DACs (ie TANK, Trinity) } analog_mode_t; +#define ANALOG_MODE(conn, def, sys) (ANALOG_##def##_##sys | ANALOG_xD_##conn) + typedef enum { VIDEO_FORMAT_MPEG2 = 0, @@ -185,7 +189,6 @@ private: public: /* constructor & destructor */ cVideo(int mode, void * hChannel, void * hBuffer); - ~cVideo(void); void * GetVPP(void); diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index f59e02752..46cf044ff 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -107,23 +107,34 @@ const CMenuOptionChooser::keyval VIDEOMENU_43MODE_OPTIONS[VIDEOMENU_43MODE_OPTIO #define VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT 8 const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT] = { - { ANALOG_SD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART }, /* composite + RGB (for both SCART and Cinch) */ - { ANALOG_SD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ - { ANALOG_SD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART }, /* YPbPr SCART (with wrongly connected Cinch) */ - { ANALOG_SD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH }, /* YPbPr Cinch (with wrongly connected SCART) */ - { ANALOG_HD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_RGB_SCART }, - { ANALOG_HD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, - { ANALOG_HD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, - { ANALOG_HD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } + { ANALOG_MODE(SCART,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART }, /* composite + RGB (for both SCART and Cinch) */ + { ANALOG_MODE(CINCH,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ + { ANALOG_MODE(SCART,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART }, /* YPbPr SCART (with wrongly connected Cinch) */ + { ANALOG_MODE(CINCH,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH }, /* YPbPr Cinch (with wrongly connected SCART) */ + { ANALOG_MODE(SCART,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB_SCART }, + { ANALOG_MODE(CINCH,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, + { ANALOG_MODE(SCART,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, + { ANALOG_MODE(CINCH,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } }; +#ifdef ISAPOLLO +#define VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT 4 +const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_TANK_OPTIONS[VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT] = +{ + { ANALOG_MODE(BOTH ,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB }, /* Scart and Cinch */ + { ANALOG_MODE(BOTH ,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB }, /* */ + { ANALOG_MODE(BOTH ,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB }, /* */ + { ANALOG_MODE(BOTH ,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB }, /* */ +}; +#endif + #define VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT 4 const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT] = { - { ANALOG_SD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART }, /* composite + RGB */ - { ANALOG_SD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART }, /* YPbPr SCART */ - { ANALOG_HD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_RGB_SCART }, - { ANALOG_HD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, + { ANALOG_MODE(SCART,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART }, /* composite + RGB */ + { ANALOG_MODE(SCART,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART }, /* YPbPr SCART */ + { ANALOG_MODE(SCART,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB_SCART }, + { ANALOG_MODE(SCART,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, }; // #define VIDEOMENU_VCRSIGNAL_OPTION_COUNT 2 @@ -136,10 +147,10 @@ const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS[VID #define VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT 4 const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT] = { - { ANALOG_SD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ - { ANALOG_SD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH }, /* YPbPr Cinch (with wrongly connected SCART) */ - { ANALOG_HD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, - { ANALOG_HD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } + { ANALOG_MODE(CINCH,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ + { ANALOG_MODE(CINCH,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH }, /* YPbPr Cinch (with wrongly connected SCART) */ + { ANALOG_MODE(CINCH,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, + { ANALOG_MODE(CINCH,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } }; /* numbers corresponding to video.cpp from zapit */ @@ -188,7 +199,7 @@ int CVideoSettings::showVideoSetup() CMenuOptionChooser * vs_analg_ch = NULL; CMenuOptionChooser * vs_scart_ch = NULL; CMenuOptionChooser * vs_chinch_ch = NULL; - if (system_rev == 0x06) + if (system_rev == 0x06 || system_rev == 0x09) { vs_analg_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_ANALOG_MODE, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_HD1_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT, true, this); vs_analg_ch->setHint("", LOCALE_MENU_HINT_VIDEO_ANALOG_MODE); diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 83c0bd580..f40696257 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -294,8 +294,8 @@ int CNeutrinoApp::loadSetup(const char * fname) } // video g_settings.video_Mode = configfile.getInt32("video_Mode", VIDEO_STD_1080I50); // VIDEO_STD_720P50 - g_settings.analog_mode1 = configfile.getInt32("analog_mode1", (int)ANALOG_SD_RGB_SCART); // default RGB - g_settings.analog_mode2 = configfile.getInt32("analog_mode2", (int)ANALOG_SD_YPRPB_CINCH); // default YPBPR + g_settings.analog_mode1 = configfile.getInt32("analog_mode1", (int)ANALOG_MODE(SCART,SD,RGB)); // default RGB + g_settings.analog_mode2 = configfile.getInt32("analog_mode2", (int)ANALOG_MODE(CINCH,SD,YPRPB)); // default YPBPR g_settings.hdmi_cec_mode = configfile.getInt32("hdmi_cec_mode", 0); // default off g_settings.hdmi_cec_view_on = configfile.getInt32("hdmi_cec_view_on", 0); // default off g_settings.hdmi_cec_standby = configfile.getInt32("hdmi_cec_standby", 0); // default off diff --git a/src/system/locals.h b/src/system/locals.h index 73aeb3603..b929a9b7a 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -1801,6 +1801,10 @@ typedef enum LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART, + LOCALE_VIDEOMENU_ANALOG_HD_RGB, + LOCALE_VIDEOMENU_ANALOG_HD_YPRPB, + LOCALE_VIDEOMENU_ANALOG_SD_RGB, + LOCALE_VIDEOMENU_ANALOG_SD_YPRPB, LOCALE_VIDEOMENU_AUTO, LOCALE_VIDEOMENU_BRIGHTNESS, LOCALE_VIDEOMENU_CINCH, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index ede893246..e2ea8e0db 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -1801,6 +1801,10 @@ const char * locale_real_names[] = "videomenu.analog_sd_rgb_scart", "videomenu.analog_sd_yprpb_cinch", "videomenu.analog_sd_yprpb_scart", + "videomenu.analog_hd_rgb", + "videomenu.analog_hd_yprpb", + "videomenu.analog_sd_rgb", + "videomenu.analog_sd_yprpb", "videomenu.auto", "videomenu.brightness", "videomenu.cinch", From 8940ba4e7d7a73f030f3ecaabc84664974ff7d40 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 4 Dec 2012 00:31:36 +0800 Subject: [PATCH 017/442] neutrino: set new cpu clock after returning from standby. --- src/neutrino.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index f40696257..eb7813239 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -3145,8 +3145,8 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) powerManager->SetStandby(true, false); } else { // Active standby off - cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000); powerManager->SetStandby(false, false); + cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000); videoDecoder->Standby(false); if(init_cec_setting){ From ed45fd56bb90e2d1ef3ed932eee144b05e894580 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 4 Dec 2012 03:01:35 +0800 Subject: [PATCH 018/442] neutrino: fix revision in video mode. --- src/gui/videosettings.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index 46cf044ff..7090ca0c6 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -199,20 +199,24 @@ int CVideoSettings::showVideoSetup() CMenuOptionChooser * vs_analg_ch = NULL; CMenuOptionChooser * vs_scart_ch = NULL; CMenuOptionChooser * vs_chinch_ch = NULL; - if (system_rev == 0x06 || system_rev == 0x09) + if (system_rev == 0x06) { vs_analg_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_ANALOG_MODE, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_HD1_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT, true, this); vs_analg_ch->setHint("", LOCALE_MENU_HINT_VIDEO_ANALOG_MODE); } else if (system_rev > 0x06) { - if(system_rev != 10) { - vs_scart_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_SCART, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT, true, this); - vs_scart_ch->setHint("", LOCALE_MENU_HINT_VIDEO_SCART_MODE); + if (system_rev == 9) { + vs_analg_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_ANALOG_MODE, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_TANK_OPTIONS, VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT, true, this); + vs_analg_ch->setHint("", LOCALE_MENU_HINT_VIDEO_ANALOG_MODE); + } else { + if(system_rev != 10) { + vs_scart_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_SCART, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT, true, this); + vs_scart_ch->setHint("", LOCALE_MENU_HINT_VIDEO_SCART_MODE); + } + vs_chinch_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_CINCH, &g_settings.analog_mode2, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT, true, this); + vs_chinch_ch->setHint("", LOCALE_MENU_HINT_VIDEO_CINCH_MODE); } - - vs_chinch_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_CINCH, &g_settings.analog_mode2, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT, true, this); - vs_chinch_ch->setHint("", LOCALE_MENU_HINT_VIDEO_CINCH_MODE); } //4:3 mode From 5a3e41ff5d677b2bded4cec551a31fe93513e0b2 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 12 Dec 2012 11:33:14 +0400 Subject: [PATCH 019/442] lib/libcoolstream/cnxtfb.h: header update --- lib/libcoolstream/cnxtfb.h | 149 +++++++++++++++++++++++++++++++++++-- 1 file changed, 143 insertions(+), 6 deletions(-) diff --git a/lib/libcoolstream/cnxtfb.h b/lib/libcoolstream/cnxtfb.h index 6798f3bd1..1f5b34f70 100644 --- a/lib/libcoolstream/cnxtfb.h +++ b/lib/libcoolstream/cnxtfb.h @@ -1,3 +1,5 @@ +#ifndef __CNXTFB_H__ +#define __CNXTFB_H__ /****************************************************************************/ /* $Id: ****************************************************************************/ @@ -16,10 +18,12 @@ /* assign an accelerator type (we have no official, so we do not add them to linux/fb.h */ #define FB_ACCEL_PNX849X 0x90 /* Trident PNX849X */ +struct fb_info; + /* * structure which contains the image handle */ -typedef struct _cnxtfb_handle +typedef struct _cnxtfb_handles { void *hImage; void *hVPP_SD; @@ -27,7 +31,7 @@ typedef struct _cnxtfb_handle void *hVPP; void *hTvEnc; void *hImage_SD; -} cnxtfb_handle; +} cnxtfb_handles; typedef struct _cnxtfb_resolution { @@ -51,9 +55,10 @@ typedef enum { typedef enum { - CNXTFB_BLEND_MODE_GLOBAL_ALPHA = 0, - CNXTFB_BLEND_MODE_PIXEL_ALPHA, - CNXTFB_BLEND_MODE_ALPHA_MULTIPLIED, + CNXTFB_BLEND_MODE_PER_PIXEL = 0, + CNXTFB_BLEND_MODE_UNIFORM_ALPHA, + /* Reordered for compatability .. */ + CNXTFB_BLEND_MODE_ALPHA_MULTIPLIED, } CNXTFB_BLEND_MODE; typedef enum @@ -68,7 +73,10 @@ typedef enum CNXTFB_1080I, CNXTFB_1080I_50, CNXTFB_1080P, - CNXTFB_DISPLAY_MODE_LAST = CNXTFB_1080P + CNXTFB_1080P_50, + CNXTFB_1080P_24, + CNXTFB_1080P_25, + CNXTFB_DISPLAY_MODE_LAST = CNXTFB_1080P_25, } cnxtfb_displaymode; typedef enum @@ -84,10 +92,136 @@ typedef struct cnxtfb_displaymode HDMode; } CNXTFB_OUTPUT_FORMAT_CHANGE; +/* + * structure which contains the image handle + */ +typedef struct _cnxtfb_handle +{ + /* CNXT_IMAGE_HANDLE hImage; */ + void *hImage; +} cnxtfb_handle; + +typedef enum +{ + CNXTFB_VSYNC_NOTIFICATION = 0x1000, + CNXTFB_BUF_REELASE_NOTIFICATION, + CNXTFB_DISPLAY_MODE_NOTIFICATION +}cnxtfb_event; + +typedef struct +{ + u8 uRed; + u8 uGreen; + u8 uBlue; + u8 uAlpha; +} CNXTFB_RGB_COLOR; + +typedef struct +{ + u8 uY; + u8 uCb; + u8 uCr; + u8 uAlpha; +} CNXTFB_YCC_COLOR; + +typedef enum +{ + CNXTFB_COLOR_RGB = 0, /* RGB format */ + CNXTFB_COLOR_YCC, /* YCC format */ + CNXTFB_COLOR_PAL_INDEX, /* Palette index or u_int32 representation of color*/ + CNXTFB_COLOR_TYPE_LAST = CNXTFB_COLOR_PAL_INDEX +} CNXTFB_COLOR_TYPE; + +typedef union +{ + u_int32_t uValue; /* Palette index or u_int32 representation of color */ + CNXTFB_RGB_COLOR RGB; + CNXTFB_YCC_COLOR YCC; +} CNXTFB_COLOR_ENTRY; + +typedef enum +{ + CNXTFB_YCC_BASIC = 0, /* Pure YCbCr for MPEG-1 decodes */ + CNXTFB_YCC_SD_BT470, /* ITU-R BT470-2 System M */ + CNXTFB_YCC_SD_BT470_BG, /* ITU-R BT470-2 System B/G */ + CNXTFB_YCC_SMPTE_170M, /* SMPTE 170M */ + CNXTFB_YCC_SMPTE_240M, /* SMPTE 240M */ + CNXTFB_YCC_GEN_FILM, /* Generic Film(Color filters using Illuminant C) */ + CNXTFB_YCC_HD_BT709, + CNXTFB_RGB, + CNXTFB_COLOR_SPACE_LAST = CNXTFB_RGB +} CNXTFB_COLOR_SPACE; + +typedef struct +{ + CNXTFB_COLOR_SPACE ColorSpace; + CNXTFB_COLOR_ENTRY Color; +} CNXTFB_COLOR_SPEC; + + +/* Enumeration for types of chroma key configurations. */ +typedef enum +{ + CNXTFB_REGION_CHROMAKEY_SRC, + CNXTFB_REGION_CHROMAKEY_DST +} CNXTFB_REGION_CHROMAKEY_TYPE; + +typedef struct +{ + CNXTFB_COLOR_SPEC ColorKeyLower; + CNXTFB_COLOR_SPEC ColorKeyUpper; +} CNXTFB_REGION_CHROMAKEY_CFG; + +typedef struct _cnxtfb_chromakey_cfg{ + bool bEnable; + CNXTFB_REGION_CHROMAKEY_TYPE Type; + CNXTFB_REGION_CHROMAKEY_CFG *pCfg; +} cnxtfb_chromakey_cfg; + +typedef void (*cnxtfb_notify)(cnxtfb_event event, void *cookie); + +extern void cnxtfb_register_client(struct fb_info *fb_info, cnxtfb_notify pfnotify, void *cookie); +extern void cnxtfb_get_image_handle(struct fb_info *fb_info, void **phImage); +extern void cnxtfb_get_handles(struct fb_info *fb_info, cnxtfb_handles *phandles); +extern void cnxtfb_register_evnt_clbk(cnxtfb_notify pfnotify); + #define CNXTFB_IO(type) _IO('F', type) #define CNXTFB_IOW(type, dtype) _IOW('F', type, dtype) #define CNXTFB_IOR(type, dtype) _IOR('F', type, dtype) + +#define FB_TEST_HW_ACCELERATION + +#define FBIOGET_CNXTFBHANDLE 0x4620 +#define FBIO_WAITFORVSYNC 0x4621 +#define FBIO_STARTDISPLAY 0x4622 +#define FBIO_STOPDISPLAY 0x4623 +#define FBIO_SETBLENDMODE 0x4624 +#define FBIO_CHANGEOUTPUTFORMAT 0x4625 +#define FBIO_GETFBRESOLUTION 0x4626 + +#ifdef FB_TEST_HW_ACCELERATION +#define FBIO_FILL_RECT 0x4627 +#define FBIO_COPY_AREA 0x4628 +#define FBIO_IMAGE_BLT 0x4629 +#define FBIO_STRETCH_COPY 0x4630 +#endif + +#define FBIO_SETOPACITY 0x4631 +#define FBIO_FLIPBUFFER 0x4632 + +#ifdef FB_TEST_HW_ACCELERATION +#define FBIO_JPEG_RENDER 0x4633 +#endif + +#define FBIO_SCALE_SD_OSD 0x4634 +#define FBIO_CHROMAKEY_CFG 0x4635 +#define FBIO_DELAY_BUF_RELEASE 0x4636 +/* CST Mod */ +#define FBIO_GETCNXTFBHANDLES 0x4640 + + +#if 0 #ifndef FBIO_WAITFORVSYNC #define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t) #endif @@ -107,3 +241,6 @@ typedef struct #define FBIO_COPY_AREA CNXTFB_IOW(0x2a, struct fb_copyarea) #define FBIO_IMAGE_BLT CNXTFB_IOW(0x2b, struct fb_image) #endif +#endif + +#endif /* __CNXTFB_H__ */ From c81c18f3877bbe8bdb22319dee930aad6b8f24c8 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 12 Dec 2012 11:33:51 +0400 Subject: [PATCH 020/442] src/driver/screenshot.cpp: enable png alpha invert --- src/driver/screenshot.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/screenshot.cpp b/src/driver/screenshot.cpp index 95a146daf..f3b42b814 100644 --- a/src/driver/screenshot.cpp +++ b/src/driver/screenshot.cpp @@ -220,7 +220,7 @@ bool CScreenShot::SavePng() png_set_compression_level(png_ptr, Z_BEST_SPEED); png_set_bgr(png_ptr); - //png_set_invert_alpha(png_ptr); + png_set_invert_alpha(png_ptr); png_write_info(png_ptr, info_ptr); png_write_image(png_ptr, row_pointers); png_write_end(png_ptr, info_ptr); From e30f93c776bc6cc07b90d0237e2b562aee056deb Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 17 Dec 2012 12:46:09 +0400 Subject: [PATCH 021/442] gui/videosettings.cpp: fix video mode switch ask, fix menu redraw after video mode switch --- src/gui/videosettings.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index 7090ca0c6..d02e8d161 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -315,9 +315,9 @@ void CVideoSettings::setupVideoSystem(bool do_ask) g_settings.video_Mode = prev_video_mode; videoDecoder->SetVideoSystem(g_settings.video_Mode); } + else + prev_video_mode = g_settings.video_Mode; } - else - prev_video_mode = g_settings.video_Mode; } } @@ -358,6 +358,7 @@ bool CVideoSettings::changeNotify(const neutrino_locale_t OptionName, void * /* else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_VIDEOMENU_VIDEOMODE)) { setupVideoSystem(true/*ask*/); + return true; } #if 0 else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_VIDEOMENU_CONTRAST)) From 418890957dac55045805585ce4f2a0abeb607a80 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 26 Dec 2012 12:20:10 +0400 Subject: [PATCH 022/442] driver/framebuffer.cpp: cleanup, add ioctls to blit/fill rect using FB --- src/driver/framebuffer.cpp | 195 +++++++++++++++---------------------- src/driver/framebuffer.h | 4 +- 2 files changed, 80 insertions(+), 119 deletions(-) diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index b727ef51e..aea036ed2 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -54,6 +54,11 @@ extern CPictureViewer * g_PicViewer; #define BACKGROUNDIMAGEWIDTH 720 +#ifdef ISAPOLLO +#ifndef FB_HW_ACCELERATION +#define FB_HW_ACCELERATION +#endif +#endif //#undef USE_NEVIS_GXA //FIXME /*******************************************************************************/ #ifdef USE_NEVIS_GXA @@ -265,7 +270,7 @@ void CFrameBuffer::init(const char * const fbDevice) /* tell the GXA where the framebuffer to draw on starts */ smem_start = (unsigned int) fix.smem_start; -printf("smem_start %x\n", smem_start); + printf("smem_start %x\n", smem_start); setupGXA(); #endif @@ -720,7 +725,12 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int ofl = corner_bl ? ofs : 0; ofr = corner_br ? ofs : 0; } -#ifdef USE_NEVIS_GXA +#if defined(FB_HW_ACCELERATION) + if (dx-ofr-ofl == 0) + printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, dx-ofr-ofl, y+line); + + paintHLine(x+ofl, x+dx-ofr, y+line, col); +#elif defined(USE_NEVIS_GXA) _write_gxa(gxa_base, cmd, GXA_POINT(x + dx - ofr, y + line)); /* endig point */ _write_gxa(gxa_base, cmd, GXA_POINT(x + ofl, y + line)); /* start point */ #else @@ -735,6 +745,25 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int } else { +#ifdef FB_HW_ACCELERATION + /* FIXME small size faster to do by software */ + if (dx > 10 || dy > 10) { + fb_fillrect fillrect; + fillrect.dx = x; + fillrect.dy = y; + fillrect.width = dx; + fillrect.height = dy; + fillrect.color = col; + fillrect.rop = ROP_COPY; + if (dx == 0 || dy == 0) { + printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, x+dx, x+dy); + return; + } + ioctl(fd, FBIO_FILL_RECT, &fillrect); + paintHLine(x, x+dx, y+line, col); + return; + } +#endif while (line < dy) { #ifdef USE_NEVIS_GXA @@ -746,9 +775,9 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int *(fbp + pos) = col; } fbp += swidth; -#endif line++; } +#endif } #ifdef USE_NEVIS_GXA /* the GXA seems to do asynchronous rendering, so we add a sync marker @@ -757,37 +786,21 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int #endif } -void CFrameBuffer::paintVLine(int x, int ya, int yb, const fb_pixel_t col) -{ - if (!getActive()) - return; - -#ifdef USE_NEVIS_GXA - /* draw a single vertical line from point x/ya to x/yb */ - unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; - - _write_gxa(gxa_base, GXA_FG_COLOR_REG, (unsigned int) col); /* setup the drawing color */ - _write_gxa(gxa_base, GXA_LINE_CONTROL_REG, 0x00000404); /* X is major axis, skip last pixel */ - _write_gxa(gxa_base, cmd, GXA_POINT(x, ya + (yb - ya))); /* end point */ - _write_gxa(gxa_base, cmd, GXA_POINT(x, ya)); /* start point */ -#else /* USE_NEVIS_GXA */ - - uint8_t * pos = ((uint8_t *)getFrameBufferPointer()) + x * sizeof(fb_pixel_t) + stride * ya; - - int dy = yb-ya; - for (int count = 0; count < dy; count++) { - *(fb_pixel_t *)pos = col; - pos += stride; - } -#endif /* USE_NEVIS_GXA */ -} - void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) { if (!getActive()) return; -#ifdef USE_NEVIS_GXA +#if defined(FB_HW_ACCELERATION) + fb_fillrect fillrect; + fillrect.dx = x; + fillrect.dy = y; + fillrect.width = 1; + fillrect.height = dy; + fillrect.color = col; + fillrect.rop = ROP_COPY; + ioctl(fd, FBIO_FILL_RECT, &fillrect); +#elif defined(USE_NEVIS_GXA) /* draw a single vertical line from point x/y with hight dx */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; @@ -805,36 +818,21 @@ void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) #endif /* USE_NEVIS_GXA */ } -void CFrameBuffer::paintHLine(int xa, int xb, int y, const fb_pixel_t col) -{ - if (!getActive()) - return; - -#ifdef USE_NEVIS_GXA - /* draw a single horizontal line from point xa/y to xb/y */ - unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; - - _write_gxa(gxa_base, GXA_FG_COLOR_REG, (unsigned int) col); /* setup the drawing color */ - _write_gxa(gxa_base, GXA_LINE_CONTROL_REG, 0x00000404); /* X is major axis, skip last pixel */ - _write_gxa(gxa_base, cmd, GXA_POINT(xa + (xb - xa), y)); /* end point */ - _write_gxa(gxa_base, cmd, GXA_POINT(xa, y)); /* start point */ -#else /* USE_NEVIS_GXA */ - - uint8_t * pos = ((uint8_t *)getFrameBufferPointer()) + xa * sizeof(fb_pixel_t) + stride * y; - - int dx = xb -xa; - fb_pixel_t * dest = (fb_pixel_t *)pos; - for (int i = 0; i < dx; i++) - *(dest++) = col; -#endif /* USE_NEVIS_GXA */ -} - void CFrameBuffer::paintHLineRel(int x, int dx, int y, const fb_pixel_t col) { if (!getActive()) return; -#ifdef USE_NEVIS_GXA +#if defined(FB_HW_ACCELERATION) + fb_fillrect fillrect; + fillrect.dx = x; + fillrect.dy = y; + fillrect.width = dx; + fillrect.height = 1; + fillrect.color = col; + fillrect.rop = ROP_COPY; + ioctl(fd, FBIO_FILL_RECT, &fillrect); +#elif defined(USE_NEVIS_GXA) /* draw a single horizontal line from point x/y with width dx */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; @@ -927,37 +925,6 @@ bool CFrameBuffer::paintIcon8(const std::string & filename, const int x, const i close(lfd); return true; } -#if 0 -//never used -#ifdef USE_NEVIS_GXA -bool CFrameBuffer::blitToPrimary(unsigned int * data, int dx, int dy, int sw, int sh) -{ - u32 cmd; - void * uKva; - - uKva = cs_phys_addr(data); -printf("CFrameBuffer::blitToPrimary: data %x Kva %x\n", (int) data, (int) uKva); - if(uKva == NULL) - return false; - - cmd = GXA_CMD_BLT | GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(1) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(3); - - _write_gxa(gxa_base, GXA_BMP1_TYPE_REG, (3 << 16) | sw); - _write_gxa(gxa_base, GXA_BMP1_ADDR_REG, (unsigned int) uKva); - - _write_gxa(gxa_base, cmd, GXA_POINT(dx, dy)); /* destination pos */ - _write_gxa(gxa_base, cmd, GXA_POINT(sw, sh)); /* source width */ - _write_gxa(gxa_base, cmd, GXA_POINT(0, 0)); /* source pos */ - - return true; -} -#else -bool CFrameBuffer::blitToPrimary(unsigned int *, int, int, int, int) -{ - return false; -} -#endif -#endif /* paint icon at position x/y, if height h is given, center vertically between y and y+h @@ -1064,38 +1031,8 @@ _display: paintBoxRel(x, yy, width, height, colBg); blit2FB(data, width, height, x, yy, 0, 0, true); return true; - -#if 0 - uint8_t * d = ((uint8_t *)getFrameBufferPointer()) + x * sizeof(fb_pixel_t) + stride * yy; - fb_pixel_t * d2; - - for (int count = 0; count < height; count++ ) { - fb_pixel_t *pixpos = &data[count * width]; - d2 = (fb_pixel_t *) d; - for (int count2 = 0; count2 < width; count2++ ) { - fb_pixel_t pix = *pixpos; - if (pix != 0) { - *d2 = pix; - } - d2++; - pixpos++; - } - d += stride; - } - - return true; -#endif } -#if 0 -bool CFrameBuffer::paintIcon(const char * const filename, const int x, const int y, - const int h, const unsigned char offset) -{ -//printf("%s(%s, %d, %d, %d)\n", __FUNCTION__, filename, x, y, offset); - return paintIcon(std::string(filename), x, y, h, offset); -} -#endif - void CFrameBuffer::loadPal(const std::string & filename, const unsigned char offset, const unsigned char endidx) { if (!getActive()) @@ -1690,7 +1627,32 @@ void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32 xc = (width > xRes) ? xRes : width; yc = (height > yRes) ? yRes : height; -#ifdef USE_NEVIS_GXA +#if defined(FB_HW_ACCELERATION) + if(!(width%4)) { + fb_image image; + image.dx = xoff; + image.dy = yoff; + image.width = xc; + image.height = yc; + image.cmap.len = 0; + image.depth = 32; +#if 1 + image.data = (const char*)fbbuff; + ioctl(fd, FBIO_IMAGE_BLT, &image); +#else + for (int count = 0; count < yc; count++ ) { + fb_pixel_t* data = (fb_pixel_t *) fbbuff; + fb_pixel_t *pixpos = &data[(count + yp) * width]; + image.data = (const char*) pixpos; //fbbuff +(count + yp)*width; + image.dy = yoff+count; + image.height = 1; + ioctl(fd, FBIO_IMAGE_BLT, &image); + } +#endif + return; + } + +#elif defined(USE_NEVIS_GXA) u32 cmd; void * uKva; @@ -1710,7 +1672,6 @@ void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32 return; } #endif - fb_pixel_t* data = (fb_pixel_t *) fbbuff; uint8_t * d = ((uint8_t *)getFrameBufferPointer()) + xoff * sizeof(fb_pixel_t) + stride * yoff; diff --git a/src/driver/framebuffer.h b/src/driver/framebuffer.h index e971dabc1..c9d94a792 100644 --- a/src/driver/framebuffer.h +++ b/src/driver/framebuffer.h @@ -167,10 +167,10 @@ class CFrameBuffer void paintBoxFrame(const int x, const int y, const int dx, const int dy, const int px, const fb_pixel_t col, const int rad = 0); void paintLine(int xa, int ya, int xb, int yb, const fb_pixel_t col); - void paintVLine(int x, int ya, int yb, const fb_pixel_t col); + inline void paintVLine(int x, int ya, int yb, const fb_pixel_t col) { paintVLineRel(x, ya, yb - ya, col); } void paintVLineRel(int x, int y, int dy, const fb_pixel_t col); - void paintHLine(int xa, int xb, int y, const fb_pixel_t col); + inline void paintHLine(int xa, int xb, int y, const fb_pixel_t col) { paintHLineRel(xa, xb - xa, y, col); } void paintHLineRel(int x, int dx, int y, const fb_pixel_t col); From 20c25334cde278e9c7d885abc41fcbdc19a3ca19 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 27 Dec 2012 12:15:37 +0400 Subject: [PATCH 023/442] system/setting_helpers.cpp: fix timezone change --- src/system/setting_helpers.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/system/setting_helpers.cpp b/src/system/setting_helpers.cpp index d362132c5..bd11537d6 100644 --- a/src/system/setting_helpers.cpp +++ b/src/system/setting_helpers.cpp @@ -446,8 +446,11 @@ bool CTZChangeNotifier::changeNotify(const neutrino_locale_t, void * Data) std::string cmd = "cp /usr/share/zoneinfo/" + zone + " /etc/localtime"; printf("exec %s\n", cmd.c_str()); my_system("/bin/sh", "-c", cmd.c_str()); +#if 0 cmd = ":" + zone; setenv("TZ", cmd.c_str(), 1); +#endif + tzset(); } return false; From ba81d3ba90e6ab19048c36148f10c0fb8b2e8dbe Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 7 Jan 2013 17:34:18 +0400 Subject: [PATCH 024/442] zapit/src/capmt.cpp: fix to use all 4 demuxes --- src/zapit/include/zapit/capmt.h | 2 +- src/zapit/src/capmt.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/zapit/include/zapit/capmt.h b/src/zapit/include/zapit/capmt.h index 674429940..060c64b48 100644 --- a/src/zapit/include/zapit/capmt.h +++ b/src/zapit/include/zapit/capmt.h @@ -47,7 +47,7 @@ class CCam : public CBasicClient private: virtual unsigned char getVersion(void) const; virtual const char *getSocketName(void) const; - int camask, demuxes[3]; + int camask, demuxes[4]; int source_demux; uint8_t cabuf[2048]; int calen; diff --git a/src/zapit/src/capmt.cpp b/src/zapit/src/capmt.cpp index 1514cd184..6036ca336 100644 --- a/src/zapit/src/capmt.cpp +++ b/src/zapit/src/capmt.cpp @@ -37,7 +37,7 @@ CCam::CCam() { camask = 0; - demuxes[0] = demuxes[1] = demuxes[2] = 0; + demuxes[0] = demuxes[1] = demuxes[2] = demuxes[3] = 0; source_demux = -1; calen = 0; } @@ -147,11 +147,11 @@ int CCam::makeMask(int demux, bool add) else if(demuxes[demux] > 0) demuxes[demux]--; - for(int i = 0; i < 3; i++) { + for(int i = 0; i < 4; i++) { if(demuxes[i] > 0) mask |= 1 << i; } - DBG("demuxes %d:%d:%d old mask %d new mask %d", demuxes[0], demuxes[1], demuxes[2], camask, mask); + DBG("demuxes %d:%d:%d:%d old mask %d new mask %d", demuxes[0], demuxes[1], demuxes[2], demuxes[3], camask, mask); return mask; } From 15575d3fccef87fe526a11dabbd7171bbc2916f9 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 15:30:31 +0400 Subject: [PATCH 025/442] locals: add locale for new tuner config --- src/system/locals.h | 9 +++++---- src/system/locals_intern.h | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/system/locals.h b/src/system/locals.h index 0da8a0913..9228509b7 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -1576,10 +1576,11 @@ typedef enum LOCALE_SATSETUP_FASTSCAN_SD, LOCALE_SATSETUP_FASTSCAN_TYPE, LOCALE_SATSETUP_FE_MODE, - LOCALE_SATSETUP_FE_MODE_ALONE, - LOCALE_SATSETUP_FE_MODE_LOOP, - LOCALE_SATSETUP_FE_MODE_SINGLE, - LOCALE_SATSETUP_FE_MODE_TWIN, + LOCALE_SATSETUP_FE_MODE_INDEPENDENT, + LOCALE_SATSETUP_FE_MODE_LINK_LOOP, + LOCALE_SATSETUP_FE_MODE_LINK_TWIN, + LOCALE_SATSETUP_FE_MODE_MASTER, + LOCALE_SATSETUP_FE_MODE_UNUSED, LOCALE_SATSETUP_FE_SETUP, LOCALE_SATSETUP_LOFH, LOCALE_SATSETUP_LOFL, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index db36beee4..8e8614727 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -1576,10 +1576,11 @@ const char * locale_real_names[] = "satsetup.fastscan_sd", "satsetup.fastscan_type", "satsetup.fe_mode", - "satsetup.fe_mode_alone", - "satsetup.fe_mode_loop", - "satsetup.fe_mode_single", - "satsetup.fe_mode_twin", + "satsetup.fe_mode_independent", + "satsetup.fe_mode_link_loop", + "satsetup.fe_mode_link_twin", + "satsetup.fe_mode_master", + "satsetup.fe_mode_unused", "satsetup.fe_setup", "satsetup.lofh", "satsetup.lofl", From 9b6b5e2b1a828ed20207473e3866b1ae3f2328b9 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 15:37:50 +0400 Subject: [PATCH 026/442] zapit/src/frontend.cpp: add new members for new tuner management --- src/zapit/include/zapit/frontend_c.h | 52 +++++++++++++++++++++------- src/zapit/src/frontend.cpp | 5 ++- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/zapit/include/zapit/frontend_c.h b/src/zapit/include/zapit/frontend_c.h index 43cce1eb0..b5f8f1ac8 100644 --- a/src/zapit/include/zapit/frontend_c.h +++ b/src/zapit/include/zapit/frontend_c.h @@ -55,6 +55,8 @@ #define FEC_S2_8PSK_9_10 (fe_code_rate_t)(FEC_S2_8PSK_BASE+8) //27 #define FEC_S2_AUTO (fe_code_rate_t)(FEC_S2_8PSK_BASE+9) //28 +#define MAKE_FE_KEY(adapter, number) ((adapter << 8) | (number & 0xFF)) + static inline fe_modulation_t dvbs_get_modulation(fe_code_rate_t fec) { if((fec < FEC_S2_QPSK_1_2) || (fec < FEC_S2_8PSK_1_2)) @@ -81,8 +83,20 @@ static inline fe_rolloff_t dvbs_get_rolloff(fe_delivery_system_t delsys) class CFEManager; +class CFrontend; +typedef std::vector fe_linkmap_t; + class CFrontend { + public: + typedef enum { + FE_MODE_INDEPENDENT, + FE_MODE_MASTER, + FE_MODE_LINK_LOOP, + FE_MODE_LINK_TWIN, + FE_MODE_UNUSED, + } fe_work_mode_t; + private: /* frontend filedescriptor */ int fd; @@ -123,6 +137,9 @@ class CFrontend /* current Transponderdata */ TP_params currentTransponder; bool slave; + fe_work_mode_t femode; + int masterkey; + fe_linkmap_t linkmap; int fenumber; bool standby; bool buildProperties(const FrontendParameters*, struct dtv_properties &); @@ -175,15 +192,15 @@ class CFrontend void setDiseqcType(const diseqc_t type, bool force = false); void setTimeout(int timeout) { feTimeout = timeout; }; void configUsals(double Latitude, double Longitude, int LaDirection, int LoDirection, bool _repeatUsals) - { - gotoXXLatitude = Latitude; - gotoXXLongitude = Longitude; - gotoXXLaDirection = LaDirection; - gotoXXLoDirection = LoDirection; - repeatUsals = _repeatUsals; - }; + { + gotoXXLatitude = Latitude; + gotoXXLongitude = Longitude; + gotoXXLaDirection = LaDirection; + gotoXXLoDirection = LoDirection; + repeatUsals = _repeatUsals; + }; void configRotor(int _motorRotationSpeed, bool _highVoltage) - { config.motorRotationSpeed = _motorRotationSpeed; config.highVoltage = _highVoltage; }; + { config.motorRotationSpeed = _motorRotationSpeed; config.highVoltage = _highVoltage; }; void configUnicable(int scr, int qrg) { config.uni_scr = scr; config.uni_qrg = qrg; }; frontend_config_t& getConfig() { return config; }; @@ -204,10 +221,10 @@ class CFrontend fe_code_rate_t getCFEC (); transponder_id_t getTsidOnid() { return currentTransponder.TP_id; } bool sameTsidOnid(transponder_id_t tpid) - { - return (currentTransponder.TP_id == 0) - || (tpid == currentTransponder.TP_id); - } + { + return (currentTransponder.TP_id == 0) + || (tpid == currentTransponder.TP_id); + } void setTsidOnid(transponder_id_t newid) { currentTransponder.TP_id = newid; } uint32_t getRate (); @@ -228,5 +245,16 @@ class CFrontend void setSatellites(satellite_map_t satmap) { satellites = satmap; } int getNumber() { return fenumber; }; static void getDelSys(uint8_t type, int f, int m, char * &fec, char * &sys, char * &mod); + fe_work_mode_t getMode() { return femode; } + void setMode(int mode) {femode = (fe_work_mode_t) mode; } + int getMaster() { return masterkey; } + void setMaster(int key) { masterkey = key; } + bool hasLinks() { return (femode == FE_MODE_MASTER) && (linkmap.size() > 1); } + static bool linked(int mode) + { + if ((mode == FE_MODE_LINK_LOOP) || (mode == FE_MODE_LINK_TWIN)) + return true; + return false; + } }; #endif /* __zapit_frontend_h__ */ diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index c3b6a6a13..7a77f095e 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -143,11 +143,14 @@ CFrontend::CFrontend(int Number, int Adapter) fd = -1; fenumber = Number; adapter = Adapter; - slave = (Number != 0); //false; + slave = false; //(Number != 0); //false; standby = true; locked = false; usecount = 0; + femode = FE_MODE_INDEPENDENT; + masterkey = 0; + tuned = false; uncommitedInput = 255; From 9059ffc1f158850e241586873bb9506a346dd473 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 15:40:36 +0400 Subject: [PATCH 027/442] zapit/src/femanager.cpp: change frontend management, add demux locking - not fully tested --- src/zapit/include/zapit/femanager.h | 44 ++- src/zapit/src/femanager.cpp | 517 ++++++++++++++++------------ 2 files changed, 319 insertions(+), 242 deletions(-) diff --git a/src/zapit/include/zapit/femanager.h b/src/zapit/include/zapit/femanager.h index 4ae542bd7..d82a28314 100644 --- a/src/zapit/include/zapit/femanager.h +++ b/src/zapit/include/zapit/femanager.h @@ -31,9 +31,9 @@ #include -#define MAX_FE 2 +#define MAX_FE 4 #define MAX_ADAPTERS 1 -#define MAKE_FE_KEY(adapter, number) ((adapter << 8) | (number & 0xFF)) +//#define MAKE_FE_KEY(adapter, number) ((adapter << 8) | (number & 0xFF)) #define FECONFIGFILE CONFIGDIR "/zapit/frontend.conf" @@ -50,6 +50,20 @@ typedef struct common_fe_config { int feTimeout; } common_fe_config_t; +class CFeDmx +{ + private: + int num; + transponder_id_t tpid; + int usecount; + + friend class CFEManager; + public: + CFeDmx(int i); + void Lock(transponder_id_t id); + void Unlock(); +}; + class CFEManager { public: @@ -65,21 +79,23 @@ class CFEManager CConfigFile configfile; common_fe_config_t config; bool config_exist; - /* loop cache */ - bool high_band; - uint8_t polarization; bool have_locked; OpenThreads::Mutex mutex; + std::vector dmap; + CFrontend * livefe; - CFrontend * findFrontend(CZapitChannel * channel); uint32_t getConfigValue(CFrontend * fe, const char * name, uint32_t defval); void setConfigValue(CFrontend * fe, const char * name, uint32_t val); void setSatelliteConfig(CFrontend * fe, sat_config_t &satconfig); bool getSatelliteConfig(CFrontend * fe, sat_config_t &satconfig); + bool loopCanTune(CFrontend * fe, CZapitChannel * channel); + CFrontend * getFrontend(CZapitChannel * channel); + void copySettings(CFrontend * from, CFrontend * to); + static CFEManager * manager; CFEManager(); public: @@ -94,11 +110,7 @@ class CFEManager CFrontend * getLiveFE() { return livefe; }; void setLiveFE(CFrontend * fe); - transponder * getChannelTransponder(CZapitChannel * channel); - CFrontend * allocateFE(CZapitChannel * channel); - bool loopCanTune(CFrontend * fe, CZapitChannel * channel); - CFrontend * getLoopFE(CZapitChannel * channel); - CFrontend * getIndependentFE(CZapitChannel * channel); + CFrontend * allocateFE(CZapitChannel * channel, bool forrecord = false); fe_mode_t getMode() { return mode; }; void setMode(fe_mode_t newmode, bool initial = false); @@ -112,8 +124,14 @@ class CFEManager bool loadSettings(); void saveSettings(bool write = true); - bool lockFrontend(CFrontend * fe); - bool unlockFrontend(CFrontend * fe); + bool lockFrontend(CFrontend * fe, CZapitChannel * channel = NULL); + bool unlockFrontend(CFrontend * fe, bool unlock_demux = false); bool haveFreeFrontend(); + void linkFrontends(bool init = true); + void copySettings(CFrontend * fe); + int getDemux(transponder_id_t id); + bool lockDemux(int i, transponder_id_t id); + void unlockDemux(int i); + bool haveFreeDemux(); }; #endif /* __femanager_h__ */ diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index cabfe7127..a73395817 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -37,8 +37,39 @@ #include #include #include +#include -extern transponder_list_t transponders; +static int fedebug = 0; +#define FEDEBUG(fmt, args...) \ + do { \ + if (fedebug) \ + fprintf(stdout, "[%s:%s:%d] " fmt "\n", \ + __FILE__, __FUNCTION__, \ + __LINE__ , ## args); \ + } while (0) + +CFeDmx::CFeDmx(int i) +{ + num = i; + tpid = 0; + usecount = 0; +} + +void CFeDmx::Lock(transponder_id_t id) +{ + tpid = id; + usecount++; + INFO("[dmx%d] lock, usecount %d tp %llx", num, usecount, tpid); +} + +void CFeDmx::Unlock() +{ + if(usecount > 0) + usecount--; + else + tpid = 0; + INFO("[dmx%d] unlock, usecount %d tp %llx", num, usecount, tpid); +} CFEManager * CFEManager::manager = NULL; @@ -68,13 +99,13 @@ bool CFEManager::Init() delete fe; } } - INFO("found %d frontends\n", femap.size()); + for (int i = 0; i < MAX_DMX_UNITS; i++) + dmap.push_back(CFeDmx(i)); + + INFO("found %d frontends, %d demuxes\n", femap.size(), dmap.size()); if( femap.empty() ) return false; -#if 0 - if(femap.size() == 1) - mode = FE_MODE_SINGLE; -#endif + return true; } @@ -164,7 +195,9 @@ bool CFEManager::loadSettings() //return false; } +#if 0 fe_mode_t newmode = (fe_mode_t) configfile.getInt32("mode", (int) FE_MODE_SINGLE); +#endif for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; frontend_config_t & fe_config = fe->getConfig(); @@ -178,22 +211,15 @@ bool CFEManager::loadSettings() fe_config.uni_qrg = getConfigValue(fe, "uni_qrg", 0); fe->setRotorSatellitePosition(getConfigValue(fe, "lastSatellitePosition", 0)); - - //fe->setDiseqcType((diseqc_t) fe_config.diseqcType); -#if 0 - diseqc_t diseqcType = (diseqc_t) getConfigValue(fe, "diseqcType", NO_DISEQC); - fe->setDiseqcType(diseqcType); -#endif + int def_mode = fe->fenumber ? CFrontend::FE_MODE_UNUSED : CFrontend::FE_MODE_INDEPENDENT; + fe->setMode(getConfigValue(fe, "mode", def_mode)); + fe->setMaster(getConfigValue(fe, "master", 0)); char cfg_key[81]; sprintf(cfg_key, "fe%d_satellites", fe->fenumber); satellite_map_t & satmap = fe->getSatellites(); satmap.clear(); -#if 0 - std::vector satList = configfile.getInt32Vector(cfg_key); - for(unsigned int i = 0; i < satList.size(); i++) - t_satellite_position position = satList[i]; -#endif + satellite_map_t satlist = CServiceManager::getInstance()->SatelliteList(); for(sat_iterator_t sit = satlist.begin(); sit != satlist.end(); ++sit) { @@ -222,7 +248,9 @@ bool CFEManager::loadSettings() } } - setMode(newmode, true); + //setMode(newmode, true); + //FIXME backward compatible settings for mode ? + linkFrontends(); return true; } @@ -234,11 +262,13 @@ void CFEManager::saveSettings(bool write) frontend_config_t & fe_config = fe->getConfig(); INFO("fe%d", fe->fenumber); +#if 0 if(fe->fenumber && mode != FE_MODE_ALONE) { CFrontend * fe0 = getFE(0); fe->setConfig(fe0->getConfig()); fe->setSatellites(fe0->getSatellites()); } +#endif setConfigValue(fe, "diseqcType", fe_config.diseqcType); setConfigValue(fe, "diseqcRepeats", fe_config.diseqcRepeats); @@ -247,6 +277,8 @@ void CFEManager::saveSettings(bool write) setConfigValue(fe, "uni_scr", fe_config.uni_scr); setConfigValue(fe, "uni_qrg", fe_config.uni_qrg); setConfigValue(fe, "lastSatellitePosition", fe->getRotorSatellitePosition()); + setConfigValue(fe, "mode", fe->getMode()); + setConfigValue(fe, "master", fe->getMaster()); std::vector satList; satellite_map_t satellites = fe->getSatellites(); @@ -265,6 +297,94 @@ void CFEManager::saveSettings(bool write) } } +void CFEManager::copySettings(CFrontend * from, CFrontend * to) +{ + INFO("Copy settings fe %d -> fe %d", from->fenumber, to->fenumber); + to->config.diseqcType = from->config.diseqcType; + to->config.diseqcRepeats = from->config.diseqcRepeats; + to->config.motorRotationSpeed = from->config.motorRotationSpeed; + to->config.highVoltage = from->config.highVoltage; + to->setSatellites(from->getSatellites()); +} + +void CFEManager::copySettings(CFrontend * fe) +{ + //FIXME copy on master settings change too + if (CFrontend::linked(fe->getMode())) { + int mnum = fe->getMaster(); + CFrontend * mfe = NULL; + for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { + if (it->second->fenumber == fe->getMaster()) { + copySettings(mfe, fe); + break; + } + } + } else if (fe->getMode() == CFrontend::FE_MODE_MASTER) { + for (unsigned int i = 1; i < fe->linkmap.size(); i++) { + CFrontend * lfe = fe->linkmap[i]; + copySettings(fe, lfe); + } + } +} + +void CFEManager::linkFrontends(bool init) +{ + INFO("linking.."); + OpenThreads::ScopedLock m_lock(mutex); + for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { + CFrontend * fe = it->second; + if (fe->getInfo()->type != FE_QPSK) + fe->setMode(CFrontend::FE_MODE_INDEPENDENT); + + int femode = fe->getMode(); + fe->slave = false; + fe->linkmap.clear(); + if (femode == CFrontend::FE_MODE_MASTER) { + INFO("Frontend #%d: is master", fe->fenumber); + fe->linkmap.push_back(fe); + /* fe is master, find all linked */ + for(fe_map_iterator_t it2 = femap.begin(); it2 != femap.end(); it2++) { + CFrontend * fe2 = it2->second; + if (!CFrontend::linked(fe2->getMode())) + continue; + if (fe2->getMaster() != fe->fenumber) + continue; +#if 0 + int mnum = fe2->getMaster(); + if (mnum != fe->fenumber) + continue; + CFrontend * mfe = getFE(mnum); + if (!mfe) { + INFO("Frontend %d: master %d not found", fe->fenumber, mnum); + continue; + } + + mfe->linkmap.push_back(fe2); +#endif + fe->linkmap.push_back(fe2); + if (fe2->getMode() == CFrontend::FE_MODE_LINK_LOOP) { + INFO("Frontend #%d: link to master %d as LOOP", fe2->fenumber, fe->fenumber); + } else { + INFO("Frontend #%d: link to master %d as TWIN", fe2->fenumber, fe->fenumber); + } + + } + } else if (femode == CFrontend::FE_MODE_LINK_LOOP) { + INFO("Frontend #%d: is LOOP, master %d", fe->fenumber, fe->getMaster()); + if (init) + fe->setMasterSlave(true); + //fe->slave = true; + } else if (femode == CFrontend::FE_MODE_LINK_TWIN) { + INFO("Frontend #%d: is TWIN, master %d", fe->fenumber, fe->getMaster()); + } else if (femode == CFrontend::FE_MODE_INDEPENDENT) { + INFO("Frontend #%d: is independent", fe->fenumber); + } + if (init && femode != CFrontend::FE_MODE_UNUSED) + fe->Init(); + } +} + +#if 0 void CFEManager::setMode(fe_mode_t newmode, bool initial) { if(!initial && (newmode == mode)) @@ -283,15 +403,8 @@ void CFEManager::setMode(fe_mode_t newmode, bool initial) } else fe->Init(); } -#if 0 - if(setslave && !initial) { - CFrontend * fe = getFE(0); - fe->Close(); - fe->Open(true); - } -#endif } - +#endif void CFEManager::Open() { for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { @@ -303,7 +416,7 @@ void CFEManager::Open() void CFEManager::Close() { - if(have_locked && (mode == FE_MODE_LOOP)) + if(have_locked) return; for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { @@ -320,41 +433,6 @@ CFrontend * CFEManager::getFE(int index) INFO("Frontend #%d not found", index); return NULL; } -#if 0 -//never used -transponder * CFEManager::getChannelTransponder(CZapitChannel * channel) -{ - transponder_list_t::iterator tpI = transponders.find(channel->getTransponderId()); - if(tpI != transponders.end()) - return &tpI->second; - - INFO("Transponder %llx not found", channel->getTransponderId()); - return NULL; -} -#endif - -/* try to find fe with same tid, or unlocked. fe with same tid is preffered */ -CFrontend * CFEManager::findFrontend(CZapitChannel * channel) -{ - CFrontend * same_tid_fe = NULL; - CFrontend * free_frontend = NULL; - transponder_id_t channel_tid = channel->getTransponderId(); - - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - CFrontend * fe = it->second; - INFO("Check fe%d: locked %d TP %llx - channel TP %llx", fe->fenumber, fe->Locked(), fe->getTsidOnid(), channel_tid); - if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { - same_tid_fe = fe; - break; - } - else if(!fe->Locked() && !free_frontend) - free_frontend = fe; - } - - CFrontend * ret = same_tid_fe ? same_tid_fe : free_frontend; - INFO("Selected fe: %d", ret ? ret->fenumber : -1); - return ret; -} /* compare polarization and band with fe values */ bool CFEManager::loopCanTune(CFrontend * fe, CZapitChannel * channel) @@ -365,17 +443,8 @@ bool CFEManager::loopCanTune(CFrontend * fe, CZapitChannel * channel) if(fe->tuned && (fe->getCurrentSatellitePosition() != channel->getSatellitePosition())) return false; -#if 0 - transponder * tp = getChannelTransponder(channel); - if(tp == NULL) - return false; - - bool tp_band = ((int)tp->feparams.frequency >= fe->lnbSwitch); - uint8_t tp_pol = tp->polarization & 1; -#else bool tp_band = ((int)channel->getFreqId()*1000 >= fe->lnbSwitch); uint8_t tp_pol = channel->polarization & 1; -#endif uint8_t fe_pol = fe->getPolarization() & 1; DBG("Check fe%d: locked %d pol:band %d:%d vs %d:%d (%d:%d)", fe->fenumber, fe->Locked(), fe_pol, fe->getHighBand(), tp_pol, tp_band, fe->getFrequency(), channel->getFreqId()*1000); @@ -384,218 +453,212 @@ bool CFEManager::loopCanTune(CFrontend * fe, CZapitChannel * channel) return false; } -CFrontend * CFEManager::getLoopFE(CZapitChannel * channel) +CFrontend * CFEManager::getFrontend(CZapitChannel * channel) { CFrontend * free_frontend = NULL; CFrontend * same_tid_fe = NULL; - /* check is there any locked fe, remember fe with same transponder */ - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - CFrontend * fe = it->second; - INFO("Check fe%d: locked %d freq %d TP %llx - channel freq %d TP %llx", fe->fenumber, fe->Locked(), fe->getFrequency(), fe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId()); -#if 0 - if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { - same_tid_fe = fe; // first with same tp id - break; - } -#endif - if(fe->Locked() /* && !same_tid_fe*/) { - INFO("fe %d locked", fe->fenumber); - if(!loopCanTune(fe, channel)) { - free_frontend = NULL; - break; - } - if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { - same_tid_fe = fe; // first with same tp id - } - } else if(!free_frontend) - free_frontend = fe; // first unlocked - } - - CFrontend * ret = same_tid_fe ? same_tid_fe : free_frontend; - INFO("Selected fe: %d", ret ? ret->fenumber : -1); - return ret; -} - -CFrontend * CFEManager::getIndependentFE(CZapitChannel * channel) -{ - CFrontend * free_frontend = NULL; - CFrontend * same_tid_fe = NULL; + if (livefe && livefe->sameTsidOnid(channel->getTransponderId())) + return livefe; t_satellite_position satellitePosition = channel->getSatellitePosition(); for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - CFrontend * fe = it->second; - satellite_map_t & satmap = fe->getSatellites(); - sat_iterator_t sit = satmap.find(satellitePosition); - bool configured = ((sit != satmap.end()) && sit->second.configured); - INFO("Check fe%d: locked %d freq %d TP %llx - channel freq %d TP %llx has sat %d: %s", - fe->fenumber, fe->Locked(), fe->getFrequency(), fe->getTsidOnid(), - channel->getFreqId(), channel->getTransponderId(), satellitePosition, configured ? "yes" : "no"); - if(!configured) + CFrontend * mfe = it->second; + + if (mfe->getMode() == CFrontend::FE_MODE_UNUSED || CFrontend::linked(mfe->getMode())) continue; - if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { - same_tid_fe = fe; - break; + if (mfe->getInfo()->type == FE_QPSK) { + satellite_map_t & satmap = mfe->getSatellites(); + sat_iterator_t sit = satmap.find(satellitePosition); + if ((sit == satmap.end()) || !sit->second.configured) + continue; + } + + if (mfe->getMode() == CFrontend::FE_MODE_MASTER) { + bool have_loop = false; + for (unsigned int i = 0; i < mfe->linkmap.size(); i++) { + CFrontend * fe = mfe->linkmap[i]; + if (fe->getMode() == CFrontend::FE_MODE_LINK_LOOP) { + have_loop = true; + break; + } + } + CFrontend * free_twin = NULL; + bool loop_busy = false; + for (unsigned int i = 0; i < mfe->linkmap.size(); i++) { + CFrontend * fe = mfe->linkmap[i]; + FEDEBUG("Check fe%d: mode %d locked %d freq %d TP %llx - channel freq %d TP %llx", fe->fenumber, fe->getMode(), + fe->Locked(), fe->getFrequency(), fe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId()); + + if(fe->Locked()) { + if ((fe->getCurrentSatellitePosition() != satellitePosition)) { + free_frontend = NULL; + free_twin = NULL; + break; + } + if (fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { + FEDEBUG("fe %d on the same TP", fe->fenumber); + return same_tid_fe; + } + if (!loop_busy && fe->getMode() != CFrontend::FE_MODE_LINK_TWIN) { + if (have_loop && !loopCanTune(fe, channel)) { + free_frontend = NULL; + loop_busy = true; + } + } + } else { + if (fe->getMode() == CFrontend::FE_MODE_LINK_TWIN) { + if (!free_twin) + free_twin = fe; + } else if(!loop_busy && !free_frontend) { + free_frontend = fe; + } + } + } + if (!free_frontend) + free_frontend = free_twin; + } + if (mfe->getMode() == CFrontend::FE_MODE_INDEPENDENT) { + FEDEBUG("Check fe%d: mode %d locked %d freq %d TP %llx - channel freq %d TP %llx", mfe->fenumber, mfe->getMode(), + mfe->Locked(), mfe->getFrequency(), mfe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId()); + if(mfe->Locked()) { + if(mfe->tuned && mfe->sameTsidOnid(channel->getTransponderId())) { + FEDEBUG("fe %d on the same TP", mfe->fenumber); + return same_tid_fe; + } + } else if(!free_frontend) + free_frontend = mfe; } - else if(!fe->Locked() && !free_frontend) - free_frontend = fe; } CFrontend * ret = same_tid_fe ? same_tid_fe : free_frontend; - INFO("Selected fe: %d", ret ? ret->fenumber : -1); + FEDEBUG("Selected fe: %d", ret ? ret->fenumber : -1); return ret; } -CFrontend * CFEManager::allocateFE(CZapitChannel * channel) +int CFEManager::getDemux(transponder_id_t id) { - CFrontend * frontend = NULL, *fe; + for (unsigned int i = 1; i < dmap.size(); i++) { + if((dmap[i].usecount == 0) || dmap[i].tpid == id) + return i; + } + return 0; +} - mutex.lock(); - switch(mode) { - case FE_MODE_SINGLE: - if((fe = getFE(0))) { - if(!fe->Locked() || fe->sameTsidOnid(channel->getTransponderId())) - frontend = fe; - } - break; - case FE_MODE_LOOP: - frontend = getLoopFE(channel); - break; - case FE_MODE_TWIN: - frontend = findFrontend(channel); - break; - case FE_MODE_ALONE: - frontend = getIndependentFE(channel); - break; +bool CFEManager::lockDemux(int i, transponder_id_t id) +{ + OpenThreads::ScopedLock m_lock(mutex); + if ((unsigned int) i < dmap.size()) { + if ((dmap[i].usecount == 0) || (dmap[i].tpid == id)) { + dmap[i].Lock(id); + return true; + } + INFO("faled to lock demux %d (on tp %llx, new %llx)", i, dmap[i].tpid, id); } - //FIXME for testing only - if(frontend) { - channel->setRecordDemux(frontend->fenumber+1); - if(femap.size() > 1) - cDemux::SetSource(frontend->fenumber+1, frontend->fenumber); + return false; +} + +void CFEManager::unlockDemux(int i) +{ + OpenThreads::ScopedLock m_lock(mutex); + if ((unsigned int) i < dmap.size()) + dmap[i].Unlock(); +} + +bool CFEManager::haveFreeDemux() +{ + OpenThreads::ScopedLock m_lock(mutex); + for (unsigned int i = 1; i < dmap.size(); i++) { + if (dmap[i].usecount == 0) + return true; + } + return false; +} + +CFrontend * CFEManager::allocateFE(CZapitChannel * channel, bool forrecord) +{ + OpenThreads::ScopedLock m_lock(mutex); + + fedebug = 1; + CFrontend * frontend = getFrontend(channel); + if (frontend) { + int dnum = getDemux(channel->getTransponderId()); + INFO("record demux: %d", dnum); + channel->setRecordDemux(dnum); + if (forrecord && !dnum) { + frontend = NULL; + } else { + cDemux::SetSource(dnum, frontend->fenumber); + } } - mutex.unlock(); return frontend; } void CFEManager::setLiveFE(CFrontend * fe) { - mutex.lock(); + OpenThreads::ScopedLock m_lock(mutex); livefe = fe; if(femap.size() > 1) cDemux::SetSource(0, livefe->fenumber); - mutex.unlock(); } bool CFEManager::canTune(CZapitChannel * channel) { - /* TODO: for faster processing, cache ? FE_MODE_LOOP: pol and band, - * is there unlocked or not, what else ? - */ - CFrontend * fe; - bool ret = false; -#if 0 - if(!have_locked) - return true; -#endif - switch(mode) { - case FE_MODE_SINGLE: - if((fe = getFE(0))) { - if(!fe->Locked() || fe->sameTsidOnid(channel->getTransponderId())) - ret = true; - } - break; - case FE_MODE_LOOP: -#if 1 - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - fe = it->second; - if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) - return true; - if(fe->Locked()) { - if(!loopCanTune(fe, channel)) { - return false; - } - } else - ret = true; - } -#else - ret = (getLoopFE(channel) != NULL); -#endif - break; - case FE_MODE_TWIN: - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - fe = it->second; - if(!fe->Locked() || fe->sameTsidOnid(channel->getTransponderId())) - return true; - } - break; - case FE_MODE_ALONE: - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - fe = it->second; - satellite_map_t & satmap = fe->getSatellites(); - sat_iterator_t sit = satmap.find(channel->getSatellitePosition()); - if(((sit != satmap.end()) && sit->second.configured)) { - if(!fe->Locked() || fe->sameTsidOnid(channel->getTransponderId())) - return true; - } - } - break; - } - return ret; + fedebug = 0; + CFrontend * fe = getFrontend(channel); + return (fe != NULL); } CFrontend * CFEManager::getScanFrontend(t_satellite_position satellitePosition) { CFrontend * frontend = NULL; - switch(mode) { - case FE_MODE_SINGLE: - case FE_MODE_LOOP: - //FIXME scan while recording ? - case FE_MODE_TWIN: - frontend = getFE(0); - break; - case FE_MODE_ALONE: - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - CFrontend * fe = it->second; - satellite_map_t & satmap = fe->getSatellites(); - sat_iterator_t sit = satmap.find(satellitePosition); - if(((sit != satmap.end()) && sit->second.configured)) { - frontend = fe; - break; - } - } + for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { + CFrontend * mfe = it->second; + satellite_map_t & satmap = mfe->getSatellites(); + sat_iterator_t sit = satmap.find(satellitePosition); + if ((sit != satmap.end()) && sit->second.configured) { + frontend = mfe; break; + } } INFO("Selected fe: %d", frontend ? frontend->fenumber : -1); return frontend; } -bool CFEManager::lockFrontend(CFrontend * frontend) +bool CFEManager::lockFrontend(CFrontend * frontend, CZapitChannel * channel) { - mutex.lock(); + OpenThreads::ScopedLock m_lock(mutex); frontend->Lock(); have_locked = true; - polarization = frontend->getPolarization() & 1; - high_band = frontend->getHighBand(); - mutex.unlock(); + + if (channel) { + int di = channel->getRecordDemux(); + if ((unsigned int) di < dmap.size()) + dmap[di].Lock(channel->getTransponderId()); + } return true; } -bool CFEManager::unlockFrontend(CFrontend * frontend) +bool CFEManager::unlockFrontend(CFrontend * frontend, bool unlock_demux) { - mutex.lock(); + OpenThreads::ScopedLock m_lock(mutex); have_locked = false; frontend->Unlock(); + if (unlock_demux) { + for (unsigned int i = 1; i < dmap.size(); i++) { + if(dmap[i].tpid == frontend->getTsidOnid()) { + dmap[i].Unlock(); + break; + } + } + } for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; if(fe->Locked()) { have_locked = true; - polarization = fe->getPolarization() & 1; - high_band = fe->getHighBand(); break; } } - mutex.unlock(); return true; } @@ -611,10 +674,6 @@ bool CFEManager::haveFreeFrontend() return true; } } -#if 0 - if(mode == FE_MODE_LOOP) - return false; -#endif return false; } return true; From 9b74fb88cf333a25cb4e49c2505be0f1283465d9 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 15:40:58 +0400 Subject: [PATCH 028/442] data/locale/english.locale: new locals for tuner setup --- data/locale/english.locale | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/data/locale/english.locale b/data/locale/english.locale index 9d929447f..61d741f00 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1549,10 +1549,11 @@ satsetup.fastscan_prov_tvv TV Vlaanderen satsetup.fastscan_sd SD only satsetup.fastscan_type Scan type satsetup.fe_mode Tuner mode -satsetup.fe_mode_alone independent -satsetup.fe_mode_loop loop -satsetup.fe_mode_single single -satsetup.fe_mode_twin twin +satsetup.fe_mode_independent Independent +satsetup.fe_mode_link_loop Loop +satsetup.fe_mode_link_twin TWIN +satsetup.fe_mode_master Master +satsetup.fe_mode_unused Unused satsetup.fe_setup Setup tuner satsetup.lofh LNB High Offset satsetup.lofl LNB Low Offset From bea14518a5f8a8e33bd2cab9b8fc784dcafdcabd Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 15:41:43 +0400 Subject: [PATCH 029/442] driver/record.cpp: adapt to new frontend management --- src/driver/record.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/driver/record.cpp b/src/driver/record.cpp index 86baeec8e..6afb99060 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -189,8 +189,9 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel) return RECORD_FAILURE; } +printf("CRecordInstance::Start: fe %d demux %d\n", frontend->getNumber(), channel->getRecordDemux()); if(!autoshift) - CFEManager::getInstance()->lockFrontend(frontend);//FIXME testing + CFEManager::getInstance()->lockFrontend(frontend, channel);//FIXME testing start_time = time(0); SaveXml(); @@ -228,7 +229,7 @@ bool CRecordInstance::Stop(bool remove_event) record->Stop(); if(!autoshift) - CFEManager::getInstance()->unlockFrontend(frontend);//FIXME testing + CFEManager::getInstance()->unlockFrontend(frontend, true);//FIXME testing CCamManager::getInstance()->Stop(channel_id, CCamManager::RECORD); @@ -1578,12 +1579,12 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * /* first try to get frontend for record with locked live */ bool unlock = true; CFEManager::getInstance()->lockFrontend(live_fe); - frontend = CFEManager::getInstance()->allocateFE(channel); + frontend = CFEManager::getInstance()->allocateFE(channel, true); if (frontend == NULL) { /* no frontend, try again with unlocked live */ unlock = false; CFEManager::getInstance()->unlockFrontend(live_fe); - frontend = CFEManager::getInstance()->allocateFE(channel); + frontend = CFEManager::getInstance()->allocateFE(channel, true); } if (frontend == NULL) return false; @@ -1612,7 +1613,12 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * } if (unlock) CFEManager::getInstance()->unlockFrontend(live_fe); + } else { + frontend = CFEManager::getInstance()->allocateFE(channel, true); } + printf("%s: record demux: %d\n", __FUNCTION__, channel->getRecordDemux()); + if (channel->getRecordDemux() == 0) + ret = false; if(ret) { if(StopSectionsd) { printf("%s: g_Sectionsd->setPauseScanning(true)\n", __FUNCTION__); From 38c2f6408a25089ed123a54675df5ca38a7f2432 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 15:43:48 +0400 Subject: [PATCH 030/442] gui/movieplayer.cpp: dynamic allocate/lock demux for playback --- src/gui/movieplayer.cpp | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 4c8514d89..5620dcd70 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -84,11 +84,13 @@ CMoviePlayerGui::CMoviePlayerGui() CMoviePlayerGui::~CMoviePlayerGui() { +#if 0 playback->Close(); + delete playback; +#endif delete moviebrowser; delete filebrowser; delete bookmarkmanager; - delete playback; instance_mp = NULL; } @@ -98,7 +100,9 @@ void CMoviePlayerGui::Init(void) frameBuffer = CFrameBuffer::getInstance(); +#if 0 playback = new cPlayback(3); +#endif moviebrowser = new CMovieBrowser(); bookmarkmanager = new CBookmarkManager(); @@ -406,6 +410,7 @@ void CMoviePlayerGui::PlayFile(void) { neutrino_msg_t msg; neutrino_msg_data_t data; + bool post_msg = false; menu_ret = menu_return::RETURN_REPAINT; int position = 0, duration = 0; @@ -420,7 +425,14 @@ void CMoviePlayerGui::PlayFile(void) printf("Startplay at %d seconds\n", startposition/1000); handleMovieBrowser(CRCInput::RC_nokey, position); + int dnum = CFEManager::getInstance()->getDemux(0); + printf("CMoviePlayerGui::PlayFile: playback demux: %d\n", dnum); + if (!dnum) { + return; + } + CFEManager::getInstance()->lockDemux(dnum, 0); cutNeutrino(); + playback = new cPlayback(dnum); playback->Open(is_file_player ? PLAYMODE_FILE : PLAYMODE_TS); printf("IS FILE PLAYER: %s\n", is_file_player ? "true": "false" ); @@ -649,8 +661,14 @@ void CMoviePlayerGui::PlayFile(void) sc->EnableVideo(true); sc->Start(); - } else if ( msg == NeutrinoMessages::ANNOUNCE_RECORD || - msg == NeutrinoMessages::RECORD_START) { + } else if ( msg == NeutrinoMessages::RECORD_START) { + CTimerd::RecordingInfo * info = (CTimerd::RecordingInfo *) data; + CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(info->channel_id); + if (channel && (CFEManager::getInstance()->getDemux(channel->getTransponderId() == 0))) { + playstate = CMoviePlayerGui::STOPPED; + post_msg = true; + } + } else if ( msg == NeutrinoMessages::ANNOUNCE_RECORD) { CNeutrinoApp::getInstance()->handleMsg(msg, data); } else if ( msg == NeutrinoMessages::ZAPTO || msg == NeutrinoMessages::STANDBY_ON || @@ -688,6 +706,10 @@ void CMoviePlayerGui::PlayFile(void) playback->SetSpeed(1); playback->Close(); + delete playback; + CFEManager::getInstance()->unlockDemux(dnum); + if (post_msg) + g_RCInput->postMsg(msg, data); CVFD::getInstance()->ShowIcon(FP_ICON_PLAY, false); CVFD::getInstance()->ShowIcon(FP_ICON_PAUSE, false); From 627af73cbfda5d60764e4ff2c248db0248e5aa9a Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 16:01:50 +0400 Subject: [PATCH 031/442] zapit/src/femanager.cpp: fix copy settings from master to linked --- src/zapit/src/femanager.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index a73395817..fff1cda08 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -311,11 +311,9 @@ void CFEManager::copySettings(CFrontend * fe) { //FIXME copy on master settings change too if (CFrontend::linked(fe->getMode())) { - int mnum = fe->getMaster(); - CFrontend * mfe = NULL; for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { if (it->second->fenumber == fe->getMaster()) { - copySettings(mfe, fe); + copySettings(it->second, fe); break; } } From dcd70ed6494a4bf5a865c49c25e95c9850cbcfd5 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 16:10:55 +0400 Subject: [PATCH 032/442] gui/scan_setup.cpp: change tuner setup to configure every frontend mode and link frontends in any order --- src/gui/scan_setup.cpp | 174 +++++++++++++++++++++++++++++++---------- src/gui/scan_setup.h | 11 ++- 2 files changed, 141 insertions(+), 44 deletions(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index fbf007e41..d3d26211a 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -166,21 +166,6 @@ const CMenuOptionChooser::keyval OPTIONS_EAST0_WEST1_OPTIONS[OPTIONS_EAST0_WEST1 { 1, LOCALE_EXTRA_WEST } }; -#if 0 -/*Cable*/ -#define CABLESETUP_SCANTP_MOD_COUNT 7 -const CMenuOptionChooser::keyval CABLESETUP_SCANTP_MOD[CABLESETUP_SCANTP_MOD_COUNT] = -{ - {0, LOCALE_EXTRA_TP_MOD_QPSK } , - {1, LOCALE_EXTRA_TP_MOD_QAM_16 } , - {2, LOCALE_EXTRA_TP_MOD_QAM_32 } , - {3, LOCALE_EXTRA_TP_MOD_QAM_64 } , - {4, LOCALE_EXTRA_TP_MOD_QAM_128 } , - {5, LOCALE_EXTRA_TP_MOD_QAM_256 } , - {6, LOCALE_EXTRA_TP_MOD_QAM_AUTO } -}; -#endif - #define SECTIONSD_SCAN_OPTIONS_COUNT 3 const CMenuOptionChooser::keyval SECTIONSD_SCAN_OPTIONS[SECTIONSD_SCAN_OPTIONS_COUNT] = { @@ -196,13 +181,14 @@ const CMenuOptionChooser::keyval DISEQC_ORDER_OPTIONS[DISEQC_ORDER_OPTION_COUNT] { UNCOMMITED_FIRST, LOCALE_SATSETUP_DISEQC_UNCOM_COM } }; -#define SATSETUP_FRONTEND_MODE_COUNT 4 +#define SATSETUP_FRONTEND_MODE_COUNT 5 const CMenuOptionChooser::keyval SATSETUP_FRONTEND_MODE[SATSETUP_FRONTEND_MODE_COUNT] = { - { CFEManager::FE_MODE_SINGLE, LOCALE_SATSETUP_FE_MODE_SINGLE }, - { CFEManager::FE_MODE_LOOP, LOCALE_SATSETUP_FE_MODE_LOOP }, - { CFEManager::FE_MODE_TWIN, LOCALE_SATSETUP_FE_MODE_TWIN }, - { CFEManager::FE_MODE_ALONE, LOCALE_SATSETUP_FE_MODE_ALONE } + { CFrontend::FE_MODE_UNUSED, LOCALE_SATSETUP_FE_MODE_UNUSED }, + { CFrontend::FE_MODE_INDEPENDENT, LOCALE_SATSETUP_FE_MODE_INDEPENDENT }, + { CFrontend::FE_MODE_MASTER, LOCALE_SATSETUP_FE_MODE_MASTER }, + { CFrontend::FE_MODE_LINK_LOOP, LOCALE_SATSETUP_FE_MODE_LINK_LOOP }, + { CFrontend::FE_MODE_LINK_TWIN, LOCALE_SATSETUP_FE_MODE_LINK_TWIN }, }; CScanSetup::CScanSetup(bool wizard_mode) @@ -386,7 +372,7 @@ int CScanSetup::showScanMenu() //settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCANTS_PREVERENCES_RECEIVING_SYSTEM)); CMenuWidget * setupMenu = new CMenuWidget(LOCALE_SATSETUP_FE_SETUP, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_SCAN_FE_SETUP); addScanMenuFrontendSetup(setupMenu); - mf = new CMenuDForwarder(LOCALE_SATSETUP_FE_SETUP, true, NULL, setupMenu, "", CRCInput::convertDigitToKey(shortcut++)); + mf = new CMenuDForwarder(LOCALE_SATSETUP_FE_SETUP, allow_start, NULL, setupMenu, "", CRCInput::convertDigitToKey(shortcut++)); mf->setHint("", LOCALE_MENU_HINT_SCAN_FESETUP); settings->addItem(mf); /* add configured satellites to satSelect */ @@ -403,12 +389,14 @@ int CScanSetup::showScanMenu() CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); nc->setHint("", LOCALE_MENU_HINT_SCAN_FETIMEOUT); settings->addItem(nc); +#if 0 if(CFEManager::getInstance()->getFrontendCount() > 1) { femode = CFEManager::getInstance()->getMode(); mc = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE, (int *)&femode, SATSETUP_FRONTEND_MODE, 2, true, this); mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); settings->addItem(mc); } +#endif nid = new CIntInput(LOCALE_SATSETUP_CABLE_NID, (int&) scansettings.cable_nid, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); } //-------------------------------------------------------------- @@ -476,19 +464,10 @@ void CScanSetup::addScanMenuFrontendSetup(CMenuWidget * setupMenu) CMenuForwarder * mf; int shortcut = 1; - femode = CFEManager::getInstance()->getMode(); - setupMenu->addIntroItems(); int count = CFEManager::getInstance()->getFrontendCount(); - CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE, (int *)&femode, SATSETUP_FRONTEND_MODE, SATSETUP_FRONTEND_MODE_COUNT, allow_start && (count > 1), this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); - mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); - setupMenu->addItem(mc); - CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); - nc->setHint("", LOCALE_MENU_HINT_SCAN_FETIMEOUT); - setupMenu->addItem(nc); - for(int i = 0; i < count; i++) { CFrontend * fe = CFEManager::getInstance()->getFE(i); @@ -497,18 +476,37 @@ void CScanSetup::addScanMenuFrontendSetup(CMenuWidget * setupMenu) char name[255]; snprintf(name, sizeof(name), "%s %d: %s", g_Locale->getText(LOCALE_SATSETUP_FE_SETUP), i+1, fe->getInfo()->name); - mf = new CMenuForwarderNonLocalized(name, ((i == 0) || (femode == CFEManager::FE_MODE_ALONE)), NULL, this, tmp, - (i == 0) ? CRCInput::RC_green : CRCInput::RC_yellow, (i == 0) ? NEUTRINO_ICON_BUTTON_GREEN : NEUTRINO_ICON_BUTTON_YELLOW); + const char * icon = NULL; + neutrino_msg_t key = CRCInput::RC_nokey; + if (i == 0) { + key = CRCInput::RC_red; + icon = NEUTRINO_ICON_BUTTON_RED; + } else if (i == 1) { + key = CRCInput::RC_green; + icon = NEUTRINO_ICON_BUTTON_GREEN; + } else if (i == 2) { + key = CRCInput::RC_yellow; + icon = NEUTRINO_ICON_BUTTON_YELLOW; + } else if (i == 3) { + key = CRCInput::RC_blue; + icon = NEUTRINO_ICON_BUTTON_BLUE; + } + + mf = new CMenuForwarderNonLocalized(name, true, NULL, this, tmp, key, icon); mf->setHint("", LOCALE_MENU_HINT_SCAN_SETUP_FE); setupMenu->addItem(mf); if(i != 0) frontendSetup = mf; } + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); + nc->setHint("", LOCALE_MENU_HINT_SCAN_FETIMEOUT); + setupMenu->addItem(nc); + sprintf(zapit_lat, "%02.6f", zapitCfg.gotoXXLatitude); sprintf(zapit_long, "%02.6f", zapitCfg.gotoXXLongitude); setupMenu->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SATSETUP_EXTENDED_MOTOR)); - mc = new CMenuOptionChooser(LOCALE_EXTRA_LADIRECTION, (int *)&zapitCfg.gotoXXLaDirection, OPTIONS_SOUTH0_NORTH1_OPTIONS, OPTIONS_SOUTH0_NORTH1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++)); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_EXTRA_LADIRECTION, (int *)&zapitCfg.gotoXXLaDirection, OPTIONS_SOUTH0_NORTH1_OPTIONS, OPTIONS_SOUTH0_NORTH1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++)); mc->setHint("", LOCALE_MENU_HINT_SCAN_LADIRECTION); setupMenu->addItem(mc); @@ -551,11 +549,73 @@ int CScanSetup::showFrontendSetup(int number) setupMenu->setSelected(feselected); setupMenu->addIntroItems(); - CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC, (int *)&dmode, SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT, allow_start, this, CRCInput::convertDigitToKey(shortcut++), "", true); - mc->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCTYPE); + int fecount = CFEManager::getInstance()->getFrontendCount(); + + femode = fe->getMode(); + + char fename[fecount][255]; + CMenuOptionChooser::keyval_ext feselect[fecount]; + feselect[0].key = -1; + feselect[0].value = NONEXISTANT_LOCALE; + feselect[0].valname = "--"; + + femaster = -1; + int select_count = 0; + + /* by default, enable first 2 options */ + int mode_count = 2; + if (fe->getInfo()->type == FE_QPSK) { + /* enable master option, check if we have masters to enable link options */ + mode_count = 3; + for (int i = 0; i < fecount; i++) { + if (i != fenumber && CFEManager::getInstance()->getFE(i)->getMode() == CFrontend::FE_MODE_MASTER) { + int num = CFEManager::getInstance()->getFE(i)->getNumber(); + snprintf(fename[select_count], sizeof(fename[select_count]), "%d: %s", num+1, + CFEManager::getInstance()->getFE(i)->getInfo()->name); + feselect[select_count].key = num; + feselect[select_count].value = NONEXISTANT_LOCALE; + feselect[select_count].valname = fename[select_count]; + select_count++; + if (femaster < 0) + femaster = num; + } + } + } + /* if there are master(s), enable all options */ + if (select_count) + mode_count = SATSETUP_FRONTEND_MODE_COUNT; + else + select_count = 1; + + bool enable = true; + /* disable mode option, if fe is master and there are links - prevent master mode change + and hence linked in undefined state */ + if (fe->hasLinks()) + enable = false; + + if (CFrontend::linked(femode)) + femaster = fe->getMaster(); + + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE, (int *)&femode, SATSETUP_FRONTEND_MODE, mode_count, + enable, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); setupMenu->addItem(mc); - ojDiseqcRepeats = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQCREPEAT, (int *)&fe_config.diseqcRepeats, (dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED), 0, 2, NULL); + /* disable all but mode option for linked frontends */ + bool allow_moptions = !CFrontend::linked(femode); + + /* link to master select */ + linkfe = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE_MASTER, &femaster, feselect, select_count, !allow_moptions, this, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN, true); + setupMenu->addItem(linkfe); + + /* diseqc type select */ + dtype = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC, (int *)&dmode, SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT, + allow_moptions, this, CRCInput::convertDigitToKey(shortcut++), "", true); + dtype->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCTYPE); + setupMenu->addItem(dtype); + + /* diseqc repeats */ + ojDiseqcRepeats = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQCREPEAT, (int *)&fe_config.diseqcRepeats, allow_moptions && (dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED), 0, 2, NULL); ojDiseqcRepeats->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCREPEAT); setupMenu->addItem(ojDiseqcRepeats); @@ -570,12 +630,11 @@ int CScanSetup::showFrontendSetup(int number) mc->setHint("", LOCALE_MENU_HINT_SCAN_SATENABLE); satToSelect.addItem(mc); } - CMenuForwarder * mf = new CMenuForwarder(LOCALE_SATSETUP_SELECT_SAT, true, NULL, &satToSelect, "", CRCInput::convertDigitToKey(shortcut++)); - mf->setHint("", LOCALE_MENU_HINT_SCAN_SATADD); - setupMenu->addItem(mf); + fsatSelect = new CMenuForwarder(LOCALE_SATSETUP_SELECT_SAT, allow_moptions, NULL, &satToSelect, "", CRCInput::convertDigitToKey(shortcut++)); + fsatSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATADD); + setupMenu->addItem(fsatSelect); - //FIXME why fsatSetup not local variable ? - fsatSetup = new CMenuForwarder(LOCALE_SATSETUP_SAT_SETUP, true, NULL, this, "satsetup", CRCInput::convertDigitToKey(shortcut++)); + fsatSetup = new CMenuForwarder(LOCALE_SATSETUP_SAT_SETUP, allow_moptions, NULL, this, "satsetup", CRCInput::convertDigitToKey(shortcut++)); fsatSetup->setHint("", LOCALE_MENU_HINT_SCAN_SATSETUP); setupMenu->addItem(fsatSetup); @@ -592,7 +651,7 @@ int CScanSetup::showFrontendSetup(int number) mc->setHint("", LOCALE_MENU_HINT_SCAN_USALSALL); setupMenu->addItem(mc); - mf = new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, true, NULL, this, "satfind", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, true, NULL, this, "satfind", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); mf->setHint("", LOCALE_MENU_HINT_SCAN_SATFIND); setupMenu->addItem(mf); @@ -603,6 +662,12 @@ int CScanSetup::showFrontendSetup(int number) fillSatSelect(satSelect); delete setupMenu; + /* re-link in case mode changed, without fe init */ + CFEManager::getInstance()->linkFrontends(false); + /* copy settings from master, if it set and fe linked */ + CFEManager::getInstance()->copySettings(fe); + /* apply settings without write file */ + CFEManager::getInstance()->saveSettings(false); return res; } @@ -684,8 +749,10 @@ void CScanSetup::fillSatSelect(CMenuOptionStringChooser * select) sfound = true; } } +#if 0 if(CFEManager::getInstance()->getMode() != CFEManager::FE_MODE_ALONE) break; +#endif } if(!sfound && !satpos.empty()) { tmpit = satpos.begin(); @@ -1095,6 +1162,7 @@ void CScanSetup::saveScanSetup() CZapit::getInstance()->SetConfig(&zapitCfg); CFEManager::getInstance()->saveSettings(true); + CFEManager::getInstance()->linkFrontends(); } bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data*/) @@ -1126,7 +1194,8 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* fe->setDiseqcType((diseqc_t) dmode); } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_FE_MODE)) { - printf("[neutrino] CScanSetup::%s: fe mode %d \n", __FUNCTION__, femode); + printf("[neutrino] CScanSetup::%s: fe%d mode %d master %d\n", __FUNCTION__, fenumber, femode, femaster); +#if 0 /* cable dont have this menu */ if(frontendSetup) frontendSetup->setActive(femode == CFEManager::FE_MODE_ALONE); @@ -1136,6 +1205,25 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* CFEManager::getInstance()->saveSettings(true); if (r_system == DVB_S) //sat fillSatSelect(satSelect); +#endif + CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); + if (fe) { + linkfe->setActive(CFrontend::linked(femode)); + dtype->setActive(!CFrontend::linked(femode)); + fsatSelect->setActive(!CFrontend::linked(femode)); + fsatSetup->setActive(!CFrontend::linked(femode)); + ojDiseqcRepeats->setActive(!CFrontend::linked(femode) && dmode > NO_DISEQC); + + fe->setMode(femode); + /* if mode changed, set current master too */ + fe->setMaster(femaster); + } + } + else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_FE_MODE_MASTER)) { + printf("[neutrino] CScanSetup::%s: fe%d link %d \n", __FUNCTION__, fenumber, femaster); + CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); + if (fe) + fe->setMaster(femaster); } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_CABLESETUP_PROVIDER)) { printf("[neutrino] CScanSetup::%s: new provider: [%s]\n", __FUNCTION__, scansettings.satNameNoDiseqc); diff --git a/src/gui/scan_setup.h b/src/gui/scan_setup.h index bdc7655e8..46b4f842c 100644 --- a/src/gui/scan_setup.h +++ b/src/gui/scan_setup.h @@ -57,14 +57,23 @@ class CScanSetup : public CMenuTarget, public CChangeObserver CMenuForwarder *fautoScanAll; CMenuForwarder *frontendSetup; CMenuForwarder *fsatSetup; + CMenuForwarder *fsatSelect; + CMenuOptionChooser * dtype; CMenuOptionNumberChooser * ojDiseqcRepeats; CIntInput * nid; CMenuOptionChooser * lcnhd; + CMenuOptionChooser * linkfe; + /* variables for selected frontend */ /* diseqc mode */ int dmode; + /* frontend setup menu current fe number */ int fenumber; + /* frontend mode */ + int femode; + /* frontend link to number */ + int femaster; /* flag to allow any operations which can damage recordings */ bool allow_start; @@ -74,7 +83,6 @@ class CScanSetup : public CMenuTarget, public CChangeObserver int fec_count; int freq_length; int r_system; - int femode; neutrino_locale_t satprov_locale; @@ -83,6 +91,7 @@ class CScanSetup : public CMenuTarget, public CChangeObserver int showScanMenu(); int showFrontendSetup(int number); + int showFrontendSelect(int number); int showScanMenuLnbSetup(); int showScanMenuSatFind(); void fillSatSelect(CMenuOptionStringChooser *select); From 01209180b08735c934854fd7d84bb74ca8d13fb8 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 16:11:38 +0400 Subject: [PATCH 033/442] neutrino.cpp: temporary disable hw standby --- src/neutrino.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index e08594190..955a77fa5 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -3172,7 +3172,7 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) frameBuffer->setActive(false); // Active standby on - powerManager->SetStandby(true, false); + powerManager->SetStandby(false, false); } else { // Active standby off powerManager->SetStandby(false, false); From e178488bf405cce6a5e59250ab28ae83e6417a04 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 16:19:08 +0400 Subject: [PATCH 034/442] gui/widget/menue.cpp: dont allow to exec non-active item - in case old, selected, was disabled --- src/gui/widget/menue.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 66b252d8b..1837981ff 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -663,6 +663,8 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) if(hasItem() && selected > -1 && (int)items.size() > selected) { //exec this item... CMenuItem* item = items[selected]; + if (!item->isSelectable()) + break; item->msg = msg; fader.Stop(); int rv = item->exec( this ); From 3c8d66e5cb088e91f3698dfb1f34dcb84c39e263 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 20:30:45 +0400 Subject: [PATCH 035/442] zapit/src/femanager.cpp: copy diseqc type only if mode is loop or diseqc type is not unicable --- src/zapit/src/femanager.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index 6b3047fe0..d65c3e351 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -304,7 +304,9 @@ void CFEManager::saveSettings(bool write) void CFEManager::copySettings(CFrontend * from, CFrontend * to) { INFO("Copy settings fe %d -> fe %d", from->fenumber, to->fenumber); - to->config.diseqcType = from->config.diseqcType; + if (to->config.diseqcType != DISEQC_UNICABLE || to->getMode() == CFrontend::FE_MODE_LINK_LOOP) + to->config.diseqcType = from->config.diseqcType; + to->config.diseqcRepeats = from->config.diseqcRepeats; to->config.motorRotationSpeed = from->config.motorRotationSpeed; to->config.highVoltage = from->config.highVoltage; @@ -313,7 +315,6 @@ void CFEManager::copySettings(CFrontend * from, CFrontend * to) void CFEManager::copySettings(CFrontend * fe) { - //FIXME copy on master settings change too if (CFrontend::linked(fe->getMode())) { for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { if (it->second->fenumber == fe->getMaster()) { From d09dd4e75fb2947f2046403abbe428afe0c87645 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 9 Jan 2013 20:40:08 +0400 Subject: [PATCH 036/442] gui/scan_setup.cpp: try to fix tuner setup enable/disable options for unicable --- src/gui/scan_setup.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 65c07d900..e4a95a177 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -616,7 +616,8 @@ int CScanSetup::showFrontendSetup(int number) /* diseqc type select */ dtype = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC, (int *)&dmode, SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT, - allow_moptions, this, CRCInput::convertDigitToKey(shortcut++), "", true); + femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP, + this, CRCInput::convertDigitToKey(shortcut++), "", true); dtype->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCTYPE); setupMenu->addItem(dtype); @@ -1247,6 +1248,7 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); fe->setDiseqcType((diseqc_t) dmode); +#if 0 if(femode != CFEManager::FE_MODE_ALONE) CFEManager::getInstance()->saveSettings(true); @@ -1275,6 +1277,10 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* } ojDiseqcRepeats->setActive(true); } +#endif + uniSetup->setActive(dmode == DISEQC_UNICABLE); + bool enable = (dmode < DISEQC_ADVANCED) && (dmode != NO_DISEQC); + ojDiseqcRepeats->setActive(enable); } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_FE_MODE)) { @@ -1298,10 +1304,13 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); if (fe) { linkfe->setActive(CFrontend::linked(femode)); - dtype->setActive(!CFrontend::linked(femode)); - fsatSelect->setActive(!CFrontend::linked(femode)); - fsatSetup->setActive(!CFrontend::linked(femode)); - ojDiseqcRepeats->setActive(!CFrontend::linked(femode) && dmode > NO_DISEQC); + //dtype->setActive(!CFrontend::linked(femode)); + dtype->setActive(femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); + uniSetup->setActive(dmode == DISEQC_UNICABLE && femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); + fsatSelect->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); + fsatSetup->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); + bool enable = (dmode < DISEQC_ADVANCED) && (dmode != NO_DISEQC); + ojDiseqcRepeats->setActive(!CFrontend::linked(femode) && enable); fe->setMode(femode); /* if mode changed, set current master too */ From 819dda19227d0364963f8deb9a4c65b532d7dde1 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 10 Jan 2013 19:36:58 +0400 Subject: [PATCH 037/442] cross-configure.apollo.debug: add script for compile outside sdk --- cross-configure.apollo.debug | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100755 cross-configure.apollo.debug diff --git a/cross-configure.apollo.debug b/cross-configure.apollo.debug new file mode 100755 index 000000000..190dfdafb --- /dev/null +++ b/cross-configure.apollo.debug @@ -0,0 +1,33 @@ +#!/bin/sh + +PREFIX=/opt/arm/arm-pnx8400-linux-uclibcgnueabi/arm-pnx8400-linux-uclibcgnueabi/sys-root/usr +CCPATH= +HOST=arm-pnx8400-linux-uclibcgnueabi + +export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig +export CC=$CCPATH$HOST-gcc +export AR=$CCPATH$HOST-ar +export NM=$CCPATH$HOST-nm +export RANLIB=$CCPATH$HOST-ranlib +export OBJDUMP=$CCPATH$HOST-objdump +export STRIP=$CCPATH$HOST-strip + +export CFLAGS="-Wall -Wextra -Wshadow -g -ggdb3 \ + -mcpu=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=hard \ + -D__KERNEL_STRICT_NAMES -DISAPOLLO -DFB_HW_ACCELERATION \ + -I"$PWD"/include -I"$PWD"/include/linux/dvb -I"$PREFIX"/include/freetype2" + +export CXXFLAGS="-Wall -Wextra -Wshadow -g -ggdb3 \ + -mcpu=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=hard \ + -D__KERNEL_STRICT_NAMES -DISAPOLLO -DFB_HW_ACCELERATION \ + -I"$PWD"/include -I"$PWD"/include/linux/dvb -I"$PREFIX"/include/freetype2" + +export LDFLAGS="-L"$PREFIX"/lib -lcurl -lssl -lcrypto -ldl" + +export DVB_API_VERSION=3 +export FREETYPE_CONFIG=$PREFIX/bin/freetype-config +export CURL_CONFIG=$PREFIX/bin/curl-config + +./autogen.sh +./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --enable-flac --with-target=cdk --with-targetprefix="" --enable-mdev "$*" + From 311274b87c5785045f2fe73d4d1bb98f1bb59fdc Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 10:48:14 +0400 Subject: [PATCH 038/442] sync libcoolstream headers --- lib/libcoolstream/cs_api.h | 2 ++ lib/libcoolstream/cs_types.h | 9 +++++++++ lib/libcoolstream/mmi.h | 31 +++++++++++++++++++++++++++++++ lib/libcoolstream/pwrmngr.h | 1 + 4 files changed, 43 insertions(+) diff --git a/lib/libcoolstream/cs_api.h b/lib/libcoolstream/cs_api.h index 01ba53ceb..9ae38a702 100644 --- a/lib/libcoolstream/cs_api.h +++ b/lib/libcoolstream/cs_api.h @@ -72,5 +72,7 @@ int cs_get_tsp_config(unsigned int port, tsrouter_tsp_config_t *tsp_config); unsigned long long cs_get_serial(void); unsigned int cs_get_revision(void); +unsigned int cs_get_chip_id(void); +unsigned int cs_get_chip_rev_id(void); #endif //__CS_API_H_ diff --git a/lib/libcoolstream/cs_types.h b/lib/libcoolstream/cs_types.h index a0e17abd4..fae6d086d 100644 --- a/lib/libcoolstream/cs_types.h +++ b/lib/libcoolstream/cs_types.h @@ -1,3 +1,12 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/cs_types.h */ +/* Public header file for CoolStream Public API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ #ifndef __CS_TYPES_H_ #define __CS_TYPES_H_ diff --git a/lib/libcoolstream/mmi.h b/lib/libcoolstream/mmi.h index 76ff99279..96266ea44 100644 --- a/lib/libcoolstream/mmi.h +++ b/lib/libcoolstream/mmi.h @@ -1,3 +1,12 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/mmi.h */ +/* Public header file for CoolStream Public CA MMI API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ #ifndef __MMI_H_ #define __MMI_H_ @@ -5,6 +14,28 @@ #define MAX_MMI_TEXT_LEN 255 #define MAX_MMI_CHOICE_TEXT_LEN 255 +typedef enum { + MMI_TOP_MENU_SUBS = 1, + MMI_TOP_MENU_EVENTS, + MMI_TOP_MENU_TOKENS, + MMI_TOP_MENU_PIN, + MMI_TOP_MENU_MATURE, + MMI_TOP_MENU_ABOUT +} MMI_MENU_CURRENT; + +typedef enum { + MMI_MENU_LEVEL_MAIN = 0, + MMI_MENU_LEVEL_MATURE, + MMI_MENU_LEVEL_ASK_PIN_MATURE +} MMI_MENU_LEVEL; + +typedef enum { + MMI_PIN_LEVEL_ASK_OLD = 0, + MMI_PIN_LEVEL_CHECK_CURRENT, + MMI_PIN_LEVEL_ASK_REPEAT, + MMI_PIN_LEVEL_CHECK_AND_CHANGE +} MMI_PIN_LEVEL; + typedef struct { int choice_nb; char title[MAX_MMI_TEXT_LEN]; diff --git a/lib/libcoolstream/pwrmngr.h b/lib/libcoolstream/pwrmngr.h index 8a4743e31..2a59d0ae9 100644 --- a/lib/libcoolstream/pwrmngr.h +++ b/lib/libcoolstream/pwrmngr.h @@ -5,6 +5,7 @@ /* */ /* (C) 2010 CoolStream International */ /* */ +/* $Id:: $ */ /*******************************************************************************/ #ifndef __PWRMNGR_H_ #define __PWRMNGR_H_ From 9e2ba8fddadeefc6d5387f76c893ff3a0651589d Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 11:10:38 +0400 Subject: [PATCH 039/442] gui/scan_setup.cpp: fix uninitialized warning --- src/gui/scan_setup.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index b335afb79..60b7e6d4b 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -822,13 +822,13 @@ int CScanSetup::showScanMenuSatFind() void CScanSetup::addScanMenuTempSat(CMenuWidget *temp_sat, sat_config_t & satconfig) { temp_sat->addIntroItems(); - CMenuOptionNumberChooser *diseqc; - CMenuOptionNumberChooser *comm; - CMenuOptionNumberChooser *uncomm; - CMenuOptionNumberChooser *unilnb; - CMenuOptionNumberChooser *motor; - CMenuOptionChooser *usals; - CMenuForwarder *mf; + CMenuOptionNumberChooser *diseqc = NULL; + CMenuOptionNumberChooser *comm = NULL; + CMenuOptionNumberChooser *uncomm = NULL; + CMenuOptionNumberChooser *unilnb = NULL; + CMenuOptionNumberChooser *motor = NULL; + CMenuOptionChooser *usals = NULL; + CMenuForwarder *mf = NULL; bool unicable = (dmode == DISEQC_UNICABLE); if (!unicable) { From f92d9e6e572f18400924bd5fa9183440fe519626 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 11:10:58 +0400 Subject: [PATCH 040/442] lib/libcoolstream: sync headers --- lib/libcoolstream/control.h | 8 ++++ lib/libcoolstream/cs_api.h | 7 +++ lib/libcoolstream/cs_types.h | 9 ++++ lib/libcoolstream/cs_vfd.h | 85 +++++++++++++++++++++--------------- lib/libcoolstream/mmi.h | 31 +++++++++++++ lib/libcoolstream/tsrouter.h | 22 ++++++++++ 6 files changed, 126 insertions(+), 36 deletions(-) diff --git a/lib/libcoolstream/control.h b/lib/libcoolstream/control.h index cc41c6c72..cfce476e6 100644 --- a/lib/libcoolstream/control.h +++ b/lib/libcoolstream/control.h @@ -63,5 +63,13 @@ typedef struct cs_control_data { #define IOC_CONTROL_TSROUTE_SET_HSDP_CONFIG _IOW(CS_CONTROL_MAGIC, 30, tsrouter_tsp_config_t *) #define IOC_CONTROL_TSROUTE_GET_TSP_CONFIG _IOR(CS_CONTROL_MAGIC, 31, tsrouter_hsdp_config_t *) #define IOC_CONTROL_TSROUTE_SET_TSP_CONFIG _IOW(CS_CONTROL_MAGIC, 32, tsrouter_tsp_config_t *) +/* Gets the current TS port frequency of the CI */ +#define IOC_CONTROL_TSROUTE_GET_CI_SPEED _IOR(CS_CONTROL_MAGIC, 33, unsigned int *) +/* Sets the current TS port frequency of the CI in Hz (max=12Mhz) */ +#define IOC_CONTROL_TSROUTE_SET_CI_SPEED _IOW(CS_CONTROL_MAGIC, 34, unsigned int) +/* Gets the current TS port base PLL of the CI */ +#define IOC_CONTROL_TSROUTE_GET_CI_PLL _IOR(CS_CONTROL_MAGIC, 35, unsigned int *) +/* Sets the current TS port base PLL of the CI */ +#define IOC_CONTROL_TSROUTE_SET_CI_PLL _IOW(CS_CONTROL_MAGIC, 36, unsigned int) #endif /* __CONTROL_H */ diff --git a/lib/libcoolstream/cs_api.h b/lib/libcoolstream/cs_api.h index 98c7430c0..f778e149b 100644 --- a/lib/libcoolstream/cs_api.h +++ b/lib/libcoolstream/cs_api.h @@ -5,12 +5,15 @@ /* */ /* (C) 2010 CoolStream International */ /* */ +/* $Id:: $ */ /*******************************************************************************/ #ifndef __CS_API_H_ #define __CS_API_H_ #include #include +#include +#include typedef void (*cs_messenger) (unsigned int msg, unsigned int data); @@ -58,8 +61,12 @@ void cs_log_module_message(enum CS_LOG_MODULE module, const char *fmt, ...); // TS Routing unsigned int cs_get_ts_output(void); int cs_set_ts_output(unsigned int port); +int cs_set_ts_ci_clock(unsigned int speed); +int cs_get_ts_ci_clock(unsigned int *speed); int cs_set_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); int cs_get_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); +int cs_set_tsp_config(unsigned int port, tsrouter_tsp_config_t *tsp_config); +int cs_get_tsp_config(unsigned int port, tsrouter_tsp_config_t *tsp_config); // Serial nr and revision accessors unsigned long long cs_get_serial(void); diff --git a/lib/libcoolstream/cs_types.h b/lib/libcoolstream/cs_types.h index a0e17abd4..fae6d086d 100644 --- a/lib/libcoolstream/cs_types.h +++ b/lib/libcoolstream/cs_types.h @@ -1,3 +1,12 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/cs_types.h */ +/* Public header file for CoolStream Public API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ #ifndef __CS_TYPES_H_ #define __CS_TYPES_H_ diff --git a/lib/libcoolstream/cs_vfd.h b/lib/libcoolstream/cs_vfd.h index 13b4b933d..4da58296b 100755 --- a/lib/libcoolstream/cs_vfd.h +++ b/lib/libcoolstream/cs_vfd.h @@ -8,46 +8,54 @@ #ifndef __CS_VFD__ #define __CS_VFD__ -typedef enum -{ - VFD_ICON_BAR8 = 0x00000004, - VFD_ICON_BAR7 = 0x00000008, - VFD_ICON_BAR6 = 0x00000010, - VFD_ICON_BAR5 = 0x00000020, - VFD_ICON_BAR4 = 0x00000040, - VFD_ICON_BAR3 = 0x00000080, - VFD_ICON_BAR2 = 0x00000100, - VFD_ICON_BAR1 = 0x00000200, - VFD_ICON_FRAME = 0x00000400, - VFD_ICON_HDD = 0x00000800, - VFD_ICON_MUTE = 0x00001000, - VFD_ICON_DOLBY = 0x00002000, - VFD_ICON_POWER = 0x00004000, - VFD_ICON_TIMESHIFT = 0x00008000, - VFD_ICON_SIGNAL = 0x00010000, - VFD_ICON_TV = 0x00020000, - VFD_ICON_RADIO = 0x00040000, - VFD_ICON_HD = 0x01000001, - VFD_ICON_1080P = 0x02000001, - VFD_ICON_1080I = 0x03000001, - VFD_ICON_720P = 0x04000001, - VFD_ICON_480P = 0x05000001, - VFD_ICON_480I = 0x06000001, - VFD_ICON_USB = 0x07000001, - VFD_ICON_MP3 = 0x08000001, - VFD_ICON_PLAY = 0x09000001, - VFD_ICON_COL1 = 0x09000002, - VFD_ICON_PAUSE = 0x0A000001, - VFD_ICON_CAM1 = 0x0B000001, - VFD_ICON_COL2 = 0x0B000002, - VFD_ICON_CAM2 = 0x0C000001 +typedef enum { + /* for all frontpanels with VFD or OLED */ + VFD_ICON_NONE = 0x00000000, + VFD_ICON_BAR8 = 0x00000004, + VFD_ICON_BAR7 = 0x00000008, + VFD_ICON_BAR6 = 0x00000010, + VFD_ICON_BAR5 = 0x00000020, + VFD_ICON_BAR4 = 0x00000040, + VFD_ICON_BAR3 = 0x00000080, + VFD_ICON_BAR2 = 0x00000100, + VFD_ICON_BAR1 = 0x00000200, + VFD_ICON_FRAME = 0x00000400, + VFD_ICON_MUTE = 0x00001000, + VFD_ICON_DOLBY = 0x00002000, + VFD_ICON_TV = 0x00020000, + VFD_ICON_RADIO = 0x00040000, + VFD_ICON_HD = 0x01000001, + VFD_ICON_1080P = 0x02000001, + VFD_ICON_1080I = 0x03000001, + VFD_ICON_720P = 0x04000001, + VFD_ICON_480P = 0x05000001, + VFD_ICON_480I = 0x06000001, + VFD_ICON_MP3 = 0x08000001, + VFD_ICON_PLAY = 0x09000001, + VFD_ICON_PAUSE = 0x0A000001, + VFD_ICON_CAM1 = 0x0B000001, + /* only for frontpanels with VFD */ + VFD_ICON_HDD = 0x00000800, + VFD_ICON_POWER = 0x00004000, + VFD_ICON_TIMESHIFT = 0x00008000, + VFD_ICON_SIGNAL = 0x00010000, + VFD_ICON_USB = 0x07000001, + VFD_ICON_COL1 = 0x09000002, + VFD_ICON_COL2 = 0x0B000002, + VFD_ICON_CAM2 = 0x0C000001, + /* only for frontpanels with OLED */ + VFD_ICON_SD = 0x01000002, + VFD_ICON_576P = 0x02000002, + VFD_ICON_576I = 0x03000002, + VFD_ICON_MP2 = 0x07000002, + VFD_ICON_DTS = 0x08000002 } vfd_icon; typedef enum { VFD_FLAG_NONE = 0x00, VFD_FLAG_SCROLL_ON = 0x01, /* switch scrolling on */ - VFD_FLAG_SCROLL_LTR = 0x02, /* scroll from left to rightinstead of default right to left direction (i.e. for arabic text) */ + VFD_FLAG_SCROLL_LTR = 0x02, /* scroll from left to right instead of default right to left direction (i.e. for arabic text) */ VFD_FLAG_SCROLL_SIO = 0x04, /* start/stop scrolling with empty screen (scroll in/out) */ VFD_FLAG_SCROLL_DELAY = 0x08, /* delayed scroll start */ VFD_FLAG_ALIGN_LEFT = 0x10, /* align the text in display from the left (default) */ @@ -79,8 +87,7 @@ typedef struct { unsigned char time_minutes_lo; } wakeup_data_t; -typedef enum -{ +typedef enum { WAKEUP_SOURCE_TIMER = 0x01, WAKEUP_SOURCE_BUTTON = 0x02, WAKEUP_SOURCE_REMOTE = 0x04, @@ -88,6 +95,11 @@ typedef enum WAKEUP_SOURCE_POWER = 0xFF } wakeup_source; +typedef struct { + unsigned short addr; + unsigned short cmd; +} standbycmd_data_t; + #define IOC_VFD_SET_BRIGHT _IOW(0xDE, 1, unsigned char) /* set the display brighness in 16 steps between 0 to 15 */ #define IOC_VFD_CLEAR_ALL _IOW(0xDE, 2, unsigned int) /* clear the entire display (both text and icons) */ #define IOC_VFD_SET_TEXT _IOW(0xDE, 3, char*) /* set a text to be displayed on the display. If arg == NULL, the text is cleared */ @@ -98,5 +110,6 @@ typedef enum #define IOC_VFD_STANDBY _IOW(0xDE, 8, standby_data_t *)/* switch the vfd/psu in standby (NEO and above only) */ #define IOC_VFD_LED_CTRL _IOW(0xDE, 9, unsigned char) /* control the Frontpanles LED's (NEO and above only) */ #define IOC_VFD_GET_WAKEUP _IOW(0xDE, 10,wakeup_data_t *) /* get wakeup data (NEO and above only) */ +#define IOC_VFD_STANDBY_CMD _IOW(0xDE, 11,standbycmd_data_t *) /* get wakeup data (NEO and above only) */ #endif /* __CS_VFD__ */ diff --git a/lib/libcoolstream/mmi.h b/lib/libcoolstream/mmi.h index 76ff99279..96266ea44 100644 --- a/lib/libcoolstream/mmi.h +++ b/lib/libcoolstream/mmi.h @@ -1,3 +1,12 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/mmi.h */ +/* Public header file for CoolStream Public CA MMI API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ #ifndef __MMI_H_ #define __MMI_H_ @@ -5,6 +14,28 @@ #define MAX_MMI_TEXT_LEN 255 #define MAX_MMI_CHOICE_TEXT_LEN 255 +typedef enum { + MMI_TOP_MENU_SUBS = 1, + MMI_TOP_MENU_EVENTS, + MMI_TOP_MENU_TOKENS, + MMI_TOP_MENU_PIN, + MMI_TOP_MENU_MATURE, + MMI_TOP_MENU_ABOUT +} MMI_MENU_CURRENT; + +typedef enum { + MMI_MENU_LEVEL_MAIN = 0, + MMI_MENU_LEVEL_MATURE, + MMI_MENU_LEVEL_ASK_PIN_MATURE +} MMI_MENU_LEVEL; + +typedef enum { + MMI_PIN_LEVEL_ASK_OLD = 0, + MMI_PIN_LEVEL_CHECK_CURRENT, + MMI_PIN_LEVEL_ASK_REPEAT, + MMI_PIN_LEVEL_CHECK_AND_CHANGE +} MMI_PIN_LEVEL; + typedef struct { int choice_nb; char title[MAX_MMI_TEXT_LEN]; diff --git a/lib/libcoolstream/tsrouter.h b/lib/libcoolstream/tsrouter.h index 672d6721d..bab3899ca 100644 --- a/lib/libcoolstream/tsrouter.h +++ b/lib/libcoolstream/tsrouter.h @@ -1,6 +1,20 @@ +/*******************************************************************************/ +/* */ +/* control\tsrouter.h */ +/* Public header file for CoolStream Kernel TS Router API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ #ifndef __TSROUTER_H #define __TSROUTER_H +#define HSDP_CI_DATA_OUT 2 +#define HSDP_CI_DATA_IN 3 +#define HSDP_SAT_PORT 4 +#define HSDP_CAB_PORT 5 + typedef struct _tsrouter_hsdp_config { u8 port; u32 port_ctrl; @@ -17,6 +31,7 @@ typedef struct _tsrouter_tsp_config { u32 mux; } tsrouter_tsp_config_t; +#ifdef __KERNEL__ extern int cs_tsrouter_init(void); extern void cs_tsrouter_exit(void); @@ -29,4 +44,11 @@ extern void cs_tsx_tsp_get_port_config(tsrouter_tsp_config_t *conf); extern void cs_tsx_hsdp_set_port_config(const tsrouter_hsdp_config_t *conf); extern void cs_tsx_tsp_set_port_config(const tsrouter_tsp_config_t *conf); +extern void cs_tsx_hsdp_get_port_pll(unsigned int port, unsigned int *pll_index); +extern void cs_tsx_hsdp_set_port_pll(unsigned int port, unsigned int pll_index); + +extern void cs_tsx_hsdp_get_port_speed(unsigned int port, unsigned int *speed); +extern void cs_tsx_hsdp_set_port_speed(unsigned int port, unsigned int speed); +#endif + #endif /* __TSROUTER_H */ From 58c1650b7287cb8ce320592c5eac4b431bdd1eda Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 13:59:17 +0400 Subject: [PATCH 041/442] lib/libcoolstream2: directory for apollo headers --- lib/libcoolstream2/audio_cs.h | 167 ++++++++++++++++++ lib/libcoolstream2/ca_cs.h | 164 ++++++++++++++++++ lib/libcoolstream2/cnxtfb.h | 246 ++++++++++++++++++++++++++ lib/libcoolstream2/control.h | 79 +++++++++ lib/libcoolstream2/cs_api.h | 78 +++++++++ lib/libcoolstream2/cs_frontpanel.h | 116 +++++++++++++ lib/libcoolstream2/cs_ir_generic.h | 73 ++++++++ lib/libcoolstream2/cs_types.h | 29 ++++ lib/libcoolstream2/cs_vfd.h | 102 +++++++++++ lib/libcoolstream2/dmx_cs.h | 85 +++++++++ lib/libcoolstream2/mmi.h | 54 ++++++ lib/libcoolstream2/nevis_ir.h | 84 +++++++++ lib/libcoolstream2/playback.h | 1 + lib/libcoolstream2/playback_cs.h | 68 ++++++++ lib/libcoolstream2/pwrmngr.h | 60 +++++++ lib/libcoolstream2/record_cs.h | 40 +++++ lib/libcoolstream2/tsrouter.h | 32 ++++ lib/libcoolstream2/video_cs.h | 269 +++++++++++++++++++++++++++++ 18 files changed, 1747 insertions(+) create mode 100644 lib/libcoolstream2/audio_cs.h create mode 100644 lib/libcoolstream2/ca_cs.h create mode 100644 lib/libcoolstream2/cnxtfb.h create mode 100644 lib/libcoolstream2/control.h create mode 100644 lib/libcoolstream2/cs_api.h create mode 100644 lib/libcoolstream2/cs_frontpanel.h create mode 100644 lib/libcoolstream2/cs_ir_generic.h create mode 100644 lib/libcoolstream2/cs_types.h create mode 100755 lib/libcoolstream2/cs_vfd.h create mode 100644 lib/libcoolstream2/dmx_cs.h create mode 100644 lib/libcoolstream2/mmi.h create mode 100644 lib/libcoolstream2/nevis_ir.h create mode 100644 lib/libcoolstream2/playback.h create mode 100644 lib/libcoolstream2/playback_cs.h create mode 100644 lib/libcoolstream2/pwrmngr.h create mode 100644 lib/libcoolstream2/record_cs.h create mode 100644 lib/libcoolstream2/tsrouter.h create mode 100644 lib/libcoolstream2/video_cs.h diff --git a/lib/libcoolstream2/audio_cs.h b/lib/libcoolstream2/audio_cs.h new file mode 100644 index 000000000..a5aa5d866 --- /dev/null +++ b/lib/libcoolstream2/audio_cs.h @@ -0,0 +1,167 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/audio_cs.h */ +/* Public header file for audio API */ +/* */ +/* (C) 2008 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __AUDIO_CS_H_ +#define __AUDIO_CS_H_ + +#ifndef CS_AUDIO_PDATA +#define CS_AUDIO_PDATA void +#endif + +#include "cs_types.h" + +typedef enum { + AUDIO_SYNC_WITH_PTS, + AUDIO_NO_SYNC, + AUDIO_SYNC_AUDIO_MASTER +} AUDIO_SYNC_MODE; + +typedef enum { + AUDIO_FMT_AUTO = 0, + AUDIO_FMT_MPEG, + AUDIO_FMT_MP3, + AUDIO_FMT_DOLBY_DIGITAL, + AUDIO_FMT_BASIC = AUDIO_FMT_DOLBY_DIGITAL, + AUDIO_FMT_AAC, + AUDIO_FMT_AAC_PLUS, + AUDIO_FMT_DD_PLUS, + AUDIO_FMT_DTS, + AUDIO_FMT_AVS, + AUDIO_FMT_MLP, + AUDIO_FMT_WMA, + AUDIO_FMT_ADVANCED = AUDIO_FMT_MLP +} AUDIO_FORMAT; + +typedef enum { + HDMI_ENCODED_OFF, + HDMI_ENCODED_AUTO, + HDMI_ENCODED_FORCED +} HDMI_ENCODED_MODE; + +typedef enum +{ + HDMI_AUDIO_FMT_LPCM = 0x1, + HDMI_AUDIO_FMT_AC3 , + HDMI_AUDIO_FMT_MPEG1 , + HDMI_AUDIO_FMT_MP3 , + HDMI_AUDIO_FMT_MPEG2 , + HDMI_AUDIO_FMT_AAC , + HDMI_AUDIO_FMT_DTS , + HDMI_AUDIO_FMT_ATRAC +} HDMI_AUDIO_FORMAT; + +#define CS_MAX_AUDIO_DECODERS 1 +#define CS_MAX_AUDIO_FORMATS 10 + +typedef struct cs_audio_format { + HDMI_AUDIO_FORMAT format; + unsigned int max_channels; +} cs_audio_format_t; + +typedef struct cs_audio_caps { + unsigned char count; + cs_audio_format_t formats[CS_MAX_AUDIO_FORMATS]; +} cs_audio_caps_t; + +class cDemux; +class cVideo; + +class cAudio { +private: + static cAudio *instance[CS_MAX_AUDIO_DECODERS]; + unsigned int unit; + cDemux *demux; + cVideo *video; + CS_AUDIO_PDATA *privateData; + //unsigned int cEncodedDataOnSPDIF, cEncodedDataOnHDMI; + bool muted; + + AUDIO_FORMAT streamType; + AUDIO_SYNC_MODE syncMode; + bool started; + unsigned int uAudioPTSDelay; + unsigned int uAudioDolbyPTSDelay, uAudioMpegPTSDelay; + bool receivedDelay; + + /* internal methods */ + int setBypassMode(bool Disable); + int LipsyncAdjust(void); + int atten; + int volume; + + bool clip_started; + HDMI_ENCODED_MODE hdmiDD; + bool spdifDD; + bool hasMuteScheduled; + bool analogOut; + // + cAudio(unsigned int Unit); +public: + /* construct & destruct */ + cAudio(void *hBuffer, void *encHD, void *encSD); + ~cAudio(void); + + void *GetHandle(void); + void *GetDSP(void); + void HandleAudioMessage(int Event, void *pData); + void HandlePcmMessage(int Event, void *pData); + /* shut up */ + int mute(void); + int unmute(void); + int SetMute(bool Enable); + + /* bypass audio to external decoder */ + int enableBypass(void); + int disableBypass(void); + + /* volume, min = 0, max = 255 */ + int setVolume(unsigned int Left, unsigned int Right); + int getVolume(void) { return volume;} + bool getMuteStatus(void) { return muted; } + + /* start and stop audio */ + int Start(void); + int Stop(void); + bool Pause(bool Pcm = true); + bool Resume(bool Pcm = true); + void SetStreamType(AUDIO_FORMAT StreamType) { streamType = StreamType; }; + AUDIO_FORMAT GetStreamType(void) { return streamType; } + bool ReceivedAudioDelay(void) { return receivedDelay; } + void SetReceivedAudioDelay(bool Set = false) { receivedDelay = Set; } + unsigned int GetAudioDelay(void) { return (streamType == AUDIO_FMT_DOLBY_DIGITAL) ? uAudioDolbyPTSDelay : uAudioMpegPTSDelay; } + void SetSyncMode(AVSYNC_TYPE SyncMode); + + /* stream source */ + int getSource(void); + int setSource(int Source); + int Flush(void); + + /* select channels */ + int setChannel(int Channel); + int getChannel(void); + int PrepareClipPlay(int uNoOfChannels, int uSampleRate, int uBitsPerSample, int bLittleEndian); + int WriteClip(unsigned char *Buffer, int Size); + int StopClip(void); + void getAudioInfo(int &Type, int &Layer, int &Freq, int &Bitrate, int &Mode); + void SetSRS(int iq_enable, int nmgr_enable, int iq_mode, int iq_level); + bool IsHdmiDDSupported(void); + void SetHdmiDD(bool On); + void SetSpdifDD(bool Enable); + void ScheduleMute(bool On); + void EnableAnalogOut(bool Enable); + bool GetHdmiAudioCaps(cs_audio_caps_t &caps); + bool IsHdmiAudioFormatSupported(HDMI_AUDIO_FORMAT format); + void SetHdmiDD(HDMI_ENCODED_MODE type); + bool IsHdmiDTSSupported(void); + void SetDemux(cDemux *Demux); + void SetVideo(cVideo *Video); + static cAudio *GetDecoder(unsigned int Unit); +}; + +#endif //__AUDIO_CS_H_ diff --git a/lib/libcoolstream2/ca_cs.h b/lib/libcoolstream2/ca_cs.h new file mode 100644 index 000000000..d7afc535f --- /dev/null +++ b/lib/libcoolstream2/ca_cs.h @@ -0,0 +1,164 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/ca.h */ +/* Public header for CA interface */ +/* */ +/* (C) 2010 CoolStream International Ltd. */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __CA_CS_H_ +#define __CA_CS_H_ + +#include +#include +#include "cs_types.h" + +enum CA_INIT_MASK { + CA_INIT_SC = 1, + CA_INIT_CI, + CA_INIT_BOTH +}; + +enum CA_SLOT_TYPE { + CA_SLOT_TYPE_SMARTCARD, + CA_SLOT_TYPE_CI, + CA_SLOT_TYPE_ALL, +}; + +enum CA_MESSAGE_FLAGS { + CA_MESSAGE_EMPTY = (1 << 0), + CA_MESSAGE_HAS_PARAM1_DATA = (1 << 1), /// Free after use! + CA_MESSAGE_HAS_PARAM1_INT = (1 << 2), + CA_MESSAGE_HAS_PARAM1_PTR = (1 << 3), + CA_MESSAGE_HAS_PARAM2_INT = (1 << 4), + CA_MESSAGE_HAS_PARAM2_PTR = (1 << 5), + CA_MESSAGE_HAS_PARAM2_DATA = (1 << 6), + CA_MESSAGE_HAS_PARAM3_DATA = (1 << 7), /// Free after use! + CA_MESSAGE_HAS_PARAM3_INT = (1 << 8), + CA_MESSAGE_HAS_PARAM3_PTR = (1 << 9), + CA_MESSAGE_HAS_PARAM4_INT = (1 << 10), + CA_MESSAGE_HAS_PARAM4_PTR = (1 << 11), + CA_MESSAGE_HAS_PARAM4_DATA = (1 << 12), + CA_MESSAGE_HAS_PARAM5_INT = (1 << 13), + CA_MESSAGE_HAS_PARAM5_PTR = (1 << 14), + CA_MESSAGE_HAS_PARAM5_DATA = (1 << 15), + CA_MESSAGE_HAS_PARAM6_INT = (1 << 16), + CA_MESSAGE_HAS_PARAM6_PTR = (1 << 17), + CA_MESSAGE_HAS_PARAM6_DATA = (1 << 18), + CA_MESSAGE_HAS_PARAM1_LONG = (1 << 19), + CA_MESSAGE_HAS_PARAM2_LONG = (1 << 20), + CA_MESSAGE_HAS_PARAM3_LONG = (1 << 21), + CA_MESSAGE_HAS_PARAM4_LONG = (1 << 22), +}; + +enum CA_MESSAGE_MSGID { + CA_MESSAGE_MSG_INSERTED, + CA_MESSAGE_MSG_REMOVED, + CA_MESSAGE_MSG_INIT_OK, + CA_MESSAGE_MSG_INIT_FAILED, + CA_MESSAGE_MSG_MMI_MENU, + CA_MESSAGE_MSG_MMI_MENU_ENTER, + CA_MESSAGE_MSG_MMI_MENU_ANSWER, + CA_MESSAGE_MSG_MMI_LIST, + CA_MESSAGE_MSG_MMI_TEXT, + CA_MESSAGE_MSG_MMI_REQ_INPUT, + CA_MESSAGE_MSG_MMI_CLOSE, + CA_MESSAGE_MSG_INTERNAL, + CA_MESSAGE_MSG_PMT_ARRIVED, + CA_MESSAGE_MSG_CAPMT_ARRIVED, + CA_MESSAGE_MSG_CAT_ARRIVED, + CA_MESSAGE_MSG_ECM_ARRIVED, + CA_MESSAGE_MSG_EMM_ARRIVED, + CA_MESSAGE_MSG_CHANNEL_CHANGE, + CA_MESSAGE_MSG_GUI_READY, + CA_MESSAGE_MSG_EXIT, +}; + +typedef struct CA_MESSAGE { + u32 MsgId; + enum CA_SLOT_TYPE SlotType; + int Slot; + u32 Flags; + union { + u8 *Data[8]; + u32 Param[8]; + void *Ptr[8]; + u64 ParamLong[4]; + } Msg; +} CA_MESSAGE; + +typedef std::vector CaIdVector; +typedef std::vector::iterator CaIdVectorIterator; +typedef std::vector::const_iterator CaIdVectorConstIterator; + +#define CA_MESSAGE_SIZE sizeof(CA_MESSAGE) +#define CA_MESSAGE_ENTRIES 256 +#define CA_MESSAGE_ENTRIES_CI 128 +#define CA_MESSAGE_ENTRIES_SC 64 + +#ifndef CS_CA_PDATA +#define CS_CA_PDATA void +#endif + +/// CA module class +class cCA : public OpenThreads::Thread { +private: + /// Static instance of the CA module + static cCA *inst; + /// Private constructor (singleton method) + cCA(void); + /// Private data for the CA module + CS_CA_PDATA *privateData; + enum CA_INIT_MASK initMask; + bool exit; + bool started; + bool guiReady; + /// Thread method + virtual void run(void); +public: + /// Returns the number of CI slots + u32 GetNumberCISlots(void); + /// Returns the number of Smartcard slots + u32 GetNumberSmartCardSlots(void); + /// Singleton + static cCA *GetInstance(void); + /// Send PMT to a individual or to all available modules + bool SendPMT(int Unit, unsigned char *Data, int Len, enum CA_SLOT_TYPE SlotType = CA_SLOT_TYPE_ALL); + /// Sends a message to the CA thread + bool SendMessage(const CA_MESSAGE *Msg); + /// Sets which modules to initialize. It is only + /// possible to change this once! + void SetInitMask(enum CA_INIT_MASK InitMask); + /// Sets the frequency (in Hz) of the TS stream input (only valid for CI) + void SetTSClock(u32 Speed); + /// Start the CA module + bool Start(void); + /// Stops the CA module + void Stop(void); + /// Notify that the GUI is ready to receive messages + /// (CA messages coming from a module) + void Ready(bool Set); + /// Resets a module (if possible) + void ModuleReset(enum CA_SLOT_TYPE, u32 Slot); + /// Checks if a module is present + bool ModulePresent(enum CA_SLOT_TYPE, u32 Slot); + /// Returns the module name in array Name + void ModuleName(enum CA_SLOT_TYPE, u32 Slot, char *Name); + /// Notify the module we want to enter menu + void MenuEnter(enum CA_SLOT_TYPE, u32 Slot); + /// Notify the module with our answer (choice nr) + void MenuAnswer(enum CA_SLOT_TYPE, u32 Slot, u32 choice); + /// Notify the module with our answer (binary) + void InputAnswer(enum CA_SLOT_TYPE, u32 Slot, u8 * Data, int Len); + /// Notify the module we closed the menu + void MenuClose(enum CA_SLOT_TYPE, u32 Slot); + /// Get the supported CAIDs + int GetCAIDS(CaIdVector & Caids); + /// Send a CA-PMT object and Raw unparsed PMT to the CA layer + bool SendCAPMT(u64 Source, u8 DemuxSource, u8 DemuxMask, const unsigned char *CAPMT, u32 CAPMTLen, const unsigned char *RawPMT, u32 RawPMTLen); + /// Virtual destructor + virtual ~cCA(); +}; + +#endif ///__CA_H_ diff --git a/lib/libcoolstream2/cnxtfb.h b/lib/libcoolstream2/cnxtfb.h new file mode 100644 index 000000000..1f5b34f70 --- /dev/null +++ b/lib/libcoolstream2/cnxtfb.h @@ -0,0 +1,246 @@ +#ifndef __CNXTFB_H__ +#define __CNXTFB_H__ +/****************************************************************************/ +/* $Id: + ****************************************************************************/ +#include +#include +#include +/* + * define the IOCTL to get the frame buffer handle info. + * currently only image handle is returned + */ + +/* define this for testing H/w acceleation funcitons */ +/* #define FB_TEST_HW_ACCELERATION */ + + +/* assign an accelerator type (we have no official, so we do not add them to linux/fb.h */ +#define FB_ACCEL_PNX849X 0x90 /* Trident PNX849X */ + +struct fb_info; + +/* + * structure which contains the image handle + */ +typedef struct _cnxtfb_handles +{ + void *hImage; + void *hVPP_SD; + void *hTvEnc_SD; + void *hVPP; + void *hTvEnc; + void *hImage_SD; +} cnxtfb_handles; + +typedef struct _cnxtfb_resolution +{ + u_int32_t uWidth; + u_int32_t uHeight; + +} cnxtfb_resolution; + +/* To use with ioctl FBIO_CHANGEOUTPUTFORMAT */ +typedef enum { + CNXTFB_VIDEO_STANDARD_ATSC_1080I = 0, + CNXTFB_VIDEO_STANDARD_NTSC_M, + CNXTFB_VIDEO_STANDARD_ATSC_480P, + CNXTFB_VIDEO_STANDARD_ATSC_720P, + CNXTFB_VIDEO_STANDARD_PAL_B_WEUR, + CNXTFB_VIDEO_STANDARD_SECAM_L, + CNXTFB_VIDEO_STANDARD_ATSC_576P, + CNXTFB_VIDEO_STANDARD_ATSC_720P_50HZ, + CNXTFB_VIDEO_STANDARD_ATSC_1080I_50HZ +} CNXTFB_VIDEO_STANDARD; + +typedef enum +{ + CNXTFB_BLEND_MODE_PER_PIXEL = 0, + CNXTFB_BLEND_MODE_UNIFORM_ALPHA, + /* Reordered for compatability .. */ + CNXTFB_BLEND_MODE_ALPHA_MULTIPLIED, +} CNXTFB_BLEND_MODE; + +typedef enum +{ + CNXTFB_INVALID = -1, + CNXTFB_480I = 0, + CNXTFB_480P, + CNXTFB_576I, + CNXTFB_576P, + CNXTFB_720P, + CNXTFB_720P_50, + CNXTFB_1080I, + CNXTFB_1080I_50, + CNXTFB_1080P, + CNXTFB_1080P_50, + CNXTFB_1080P_24, + CNXTFB_1080P_25, + CNXTFB_DISPLAY_MODE_LAST = CNXTFB_1080P_25, +} cnxtfb_displaymode; + +typedef enum +{ + CNXTFB_TYPE_SD = 1, /* 1 << 0 */ + CNXTFB_TYPE_HD = 2 /* 1 << 1 */ +} CNXTFB_FB_TYPE; + +typedef struct +{ + unsigned char Type; /* Bitmask of type CNXTFB_FB_TYPE */ + cnxtfb_displaymode SDMode; + cnxtfb_displaymode HDMode; +} CNXTFB_OUTPUT_FORMAT_CHANGE; + +/* + * structure which contains the image handle + */ +typedef struct _cnxtfb_handle +{ + /* CNXT_IMAGE_HANDLE hImage; */ + void *hImage; +} cnxtfb_handle; + +typedef enum +{ + CNXTFB_VSYNC_NOTIFICATION = 0x1000, + CNXTFB_BUF_REELASE_NOTIFICATION, + CNXTFB_DISPLAY_MODE_NOTIFICATION +}cnxtfb_event; + +typedef struct +{ + u8 uRed; + u8 uGreen; + u8 uBlue; + u8 uAlpha; +} CNXTFB_RGB_COLOR; + +typedef struct +{ + u8 uY; + u8 uCb; + u8 uCr; + u8 uAlpha; +} CNXTFB_YCC_COLOR; + +typedef enum +{ + CNXTFB_COLOR_RGB = 0, /* RGB format */ + CNXTFB_COLOR_YCC, /* YCC format */ + CNXTFB_COLOR_PAL_INDEX, /* Palette index or u_int32 representation of color*/ + CNXTFB_COLOR_TYPE_LAST = CNXTFB_COLOR_PAL_INDEX +} CNXTFB_COLOR_TYPE; + +typedef union +{ + u_int32_t uValue; /* Palette index or u_int32 representation of color */ + CNXTFB_RGB_COLOR RGB; + CNXTFB_YCC_COLOR YCC; +} CNXTFB_COLOR_ENTRY; + +typedef enum +{ + CNXTFB_YCC_BASIC = 0, /* Pure YCbCr for MPEG-1 decodes */ + CNXTFB_YCC_SD_BT470, /* ITU-R BT470-2 System M */ + CNXTFB_YCC_SD_BT470_BG, /* ITU-R BT470-2 System B/G */ + CNXTFB_YCC_SMPTE_170M, /* SMPTE 170M */ + CNXTFB_YCC_SMPTE_240M, /* SMPTE 240M */ + CNXTFB_YCC_GEN_FILM, /* Generic Film(Color filters using Illuminant C) */ + CNXTFB_YCC_HD_BT709, + CNXTFB_RGB, + CNXTFB_COLOR_SPACE_LAST = CNXTFB_RGB +} CNXTFB_COLOR_SPACE; + +typedef struct +{ + CNXTFB_COLOR_SPACE ColorSpace; + CNXTFB_COLOR_ENTRY Color; +} CNXTFB_COLOR_SPEC; + + +/* Enumeration for types of chroma key configurations. */ +typedef enum +{ + CNXTFB_REGION_CHROMAKEY_SRC, + CNXTFB_REGION_CHROMAKEY_DST +} CNXTFB_REGION_CHROMAKEY_TYPE; + +typedef struct +{ + CNXTFB_COLOR_SPEC ColorKeyLower; + CNXTFB_COLOR_SPEC ColorKeyUpper; +} CNXTFB_REGION_CHROMAKEY_CFG; + +typedef struct _cnxtfb_chromakey_cfg{ + bool bEnable; + CNXTFB_REGION_CHROMAKEY_TYPE Type; + CNXTFB_REGION_CHROMAKEY_CFG *pCfg; +} cnxtfb_chromakey_cfg; + +typedef void (*cnxtfb_notify)(cnxtfb_event event, void *cookie); + +extern void cnxtfb_register_client(struct fb_info *fb_info, cnxtfb_notify pfnotify, void *cookie); +extern void cnxtfb_get_image_handle(struct fb_info *fb_info, void **phImage); +extern void cnxtfb_get_handles(struct fb_info *fb_info, cnxtfb_handles *phandles); +extern void cnxtfb_register_evnt_clbk(cnxtfb_notify pfnotify); + +#define CNXTFB_IO(type) _IO('F', type) +#define CNXTFB_IOW(type, dtype) _IOW('F', type, dtype) +#define CNXTFB_IOR(type, dtype) _IOR('F', type, dtype) + + +#define FB_TEST_HW_ACCELERATION + +#define FBIOGET_CNXTFBHANDLE 0x4620 +#define FBIO_WAITFORVSYNC 0x4621 +#define FBIO_STARTDISPLAY 0x4622 +#define FBIO_STOPDISPLAY 0x4623 +#define FBIO_SETBLENDMODE 0x4624 +#define FBIO_CHANGEOUTPUTFORMAT 0x4625 +#define FBIO_GETFBRESOLUTION 0x4626 + +#ifdef FB_TEST_HW_ACCELERATION +#define FBIO_FILL_RECT 0x4627 +#define FBIO_COPY_AREA 0x4628 +#define FBIO_IMAGE_BLT 0x4629 +#define FBIO_STRETCH_COPY 0x4630 +#endif + +#define FBIO_SETOPACITY 0x4631 +#define FBIO_FLIPBUFFER 0x4632 + +#ifdef FB_TEST_HW_ACCELERATION +#define FBIO_JPEG_RENDER 0x4633 +#endif + +#define FBIO_SCALE_SD_OSD 0x4634 +#define FBIO_CHROMAKEY_CFG 0x4635 +#define FBIO_DELAY_BUF_RELEASE 0x4636 +/* CST Mod */ +#define FBIO_GETCNXTFBHANDLES 0x4640 + + +#if 0 +#ifndef FBIO_WAITFORVSYNC +#define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t) +#endif + +#define FBIO_GETCNXTFBHANDLE CNXTFB_IOR(0x21, cnxtfb_handle) // 0x4620 +#define FBIO_STARTDISPLAY CNXTFB_IO(0x22) +#define FBIO_STOPDISPLAY CNXTFB_IO(0x23) +#define FBIO_SETOPACITY CNXTFB_IOW(0x24, u_int8_t) +#define FBIO_SETBLENDMODE CNXTFB_IOW(0x25, u_int8_t) +#define FBIO_CHANGEOUTPUTFORMAT CNXTFB_IOW(0x26, u_int32_t) +#define FBIO_GETFBRESOLUTION CNXTFB_IOR(0x27, cnxtfb_resolution) +#define FBIO_SETFLICKERFILTER CNXTFB_IOW(0x28, u_int8_t) +#define FBIO_SCALE_SD_OSD CNXTFB_IO(0x28) + +#ifdef FB_TEST_HW_ACCELERATION +#define FBIO_FILL_RECT CNXTFB_IOW(0x29, struct fb_fillrect) +#define FBIO_COPY_AREA CNXTFB_IOW(0x2a, struct fb_copyarea) +#define FBIO_IMAGE_BLT CNXTFB_IOW(0x2b, struct fb_image) +#endif +#endif + +#endif /* __CNXTFB_H__ */ diff --git a/lib/libcoolstream2/control.h b/lib/libcoolstream2/control.h new file mode 100644 index 000000000..56d38f696 --- /dev/null +++ b/lib/libcoolstream2/control.h @@ -0,0 +1,79 @@ +/******************************************************************** +* Description: Control driver for PWM and Scart +* Author: CoolStream Dev. Team +* Created at: Fri Jun 26 08:11:43 CEST 2009 +* +* Copyright (c) 2009 CoolStream International Ltd. All rights reserved. +* +********************************************************************/ + +#ifndef __CONTROL_H +#define __CONTROL_H + +#ifndef __KERNEL__ +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; +#include + +#else +#include +#include + +#define CS_PIO_LOW 0 +#define CS_PIO_HIGH 1 +int cs_gpio_drive(int gpio, int value); +#endif + +#include "tsrouter.h" + +typedef struct _scart_status { + bool widescreen; + bool function; + bool fastblank; +} scart_status_t; + +typedef struct _pwm_status { + u16 pwm_pulse_first; + u16 pwm_pulse_second; + u32 pwm_clock; +} pwm_status_t; + +typedef struct cs_control_data { + scart_status_t scart_status; + pwm_status_t pwm_status; + bool hdd_power; + u32 readers; + u32 sys_serial_high, sys_serial_low; + u32 sys_revision; +} cs_control_data_t; + +/* ioctls */ +#define CS_CONTROL_MAGIC 0xDE +#define IOC_CONTROL_WIDESCREEN _IOW(CS_CONTROL_MAGIC, 20, unsigned int) +#define IOC_CONTROL_TVAV _IOW(CS_CONTROL_MAGIC, 21, unsigned int) +#define IOC_CONTROL_RGB _IOW(CS_CONTROL_MAGIC, 22, unsigned int) +#define IOC_CONTROL_SCART_STATUS _IOR(CS_CONTROL_MAGIC, 23, scart_status_t *) +#define IOC_CONTROL_PWM_SPEED _IOW(CS_CONTROL_MAGIC, 24, unsigned int) +#define IOC_CONTROL_HDDPOWER _IOW(CS_CONTROL_MAGIC, 25, unsigned int) + +/* ioctl for getting board serial and revision */ +#define IOC_CONTROL_BOARD_SERIAL_LOW _IOR(CS_CONTROL_MAGIC, 26, unsigned int *) +#define IOC_CONTROL_BOARD_SERIAL_HIGH _IOR(CS_CONTROL_MAGIC, 27, unsigned int *) +#define IOC_CONTROL_BOARD_REV _IOR(CS_CONTROL_MAGIC, 28, unsigned int *) + +/* ioctl for setting TS routing */ +#define IOC_CONTROL_TSROUTE_GET_HSDP_CONFIG _IOR(CS_CONTROL_MAGIC, 29, tsrouter_hsdp_config_t *) +#define IOC_CONTROL_TSROUTE_SET_HSDP_CONFIG _IOW(CS_CONTROL_MAGIC, 30, tsrouter_tsp_config_t *) +#define IOC_CONTROL_TSROUTE_GET_TSP_CONFIG _IOR(CS_CONTROL_MAGIC, 31, tsrouter_hsdp_config_t *) +#define IOC_CONTROL_TSROUTE_SET_TSP_CONFIG _IOW(CS_CONTROL_MAGIC, 32, tsrouter_tsp_config_t *) +/* Gets the current TS port frequency of the CI */ +#define IOC_CONTROL_TSROUTE_GET_CI_SPEED _IOR(CS_CONTROL_MAGIC, 33, unsigned int *) +/* Sets the current TS port frequency of the CI in Hz (max=12Mhz) */ +#define IOC_CONTROL_TSROUTE_SET_CI_SPEED _IOW(CS_CONTROL_MAGIC, 34, unsigned int) +/* Gets the current TS port base PLL of the CI */ +#define IOC_CONTROL_TSROUTE_GET_CI_PLL _IOR(CS_CONTROL_MAGIC, 35, unsigned int *) +/* Sets the current TS port base PLL of the CI */ +#define IOC_CONTROL_TSROUTE_SET_CI_PLL _IOW(CS_CONTROL_MAGIC, 36, unsigned int) + +#endif /* __CONTROL_H */ diff --git a/lib/libcoolstream2/cs_api.h b/lib/libcoolstream2/cs_api.h new file mode 100644 index 000000000..9ae38a702 --- /dev/null +++ b/lib/libcoolstream2/cs_api.h @@ -0,0 +1,78 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/cs_api.h */ +/* Public header file for CoolStream Public API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __CS_API_H_ +#define __CS_API_H_ + +#include +#include +#include +#include + +typedef void (*cs_messenger) (unsigned int msg, unsigned int data); + +enum CS_LOG_MODULE { + CS_LOG_CI = 0, + CS_LOG_HDMI_CEC, + CS_LOG_HDMI, + CS_LOG_VIDEO, + CS_LOG_VIDEO_DRM, + CS_LOG_AUDIO, + CS_LOG_DEMUX, + CS_LOG_DENC, + CS_LOG_PVR_RECORD, + CS_LOG_PVR_PLAY, + CS_LOG_FILEPLAYER, + CS_LOG_POWER_CTRL, + CS_LOG_POWER_CLK, + CS_LOG_MEM, + CS_LOG_API, + CS_LOG_CA, +}; + +// Initialization +void cs_api_init(void); +void cs_api_exit(void); + +// Memory helpers +void *cs_malloc_uncached(size_t size); +void cs_free_uncached(void *ptr); +void *cs_phys_addr(void *ptr); + +// Callback function helpers +void cs_register_messenger(cs_messenger messenger); +void cs_deregister_messenger(void); +cs_messenger cs_get_messenger(void); + +// Logging functions +void cs_log_enable(void); +void cs_log_disable(void); +void cs_log_message(const char *prefix, const char *fmt, ...); +void cs_log_module_enable(enum CS_LOG_MODULE module); +void cs_log_module_disable(enum CS_LOG_MODULE module); +void cs_log_module_message(enum CS_LOG_MODULE module, const char *fmt, ...); + +// TS Routing +unsigned int cs_get_ts_output(void); +int cs_set_ts_output(unsigned int port); +int cs_set_ts_ci_clock(unsigned int speed); +int cs_get_ts_ci_clock(unsigned int *speed); +int cs_set_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); +int cs_get_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); +int cs_set_tsp_config(unsigned int port, tsrouter_tsp_config_t *tsp_config); +int cs_get_tsp_config(unsigned int port, tsrouter_tsp_config_t *tsp_config); + +// Serial nr and revision accessors +unsigned long long cs_get_serial(void); +unsigned int cs_get_revision(void); + +unsigned int cs_get_chip_id(void); +unsigned int cs_get_chip_rev_id(void); + +#endif //__CS_API_H_ diff --git a/lib/libcoolstream2/cs_frontpanel.h b/lib/libcoolstream2/cs_frontpanel.h new file mode 100644 index 000000000..97c0f577a --- /dev/null +++ b/lib/libcoolstream2/cs_frontpanel.h @@ -0,0 +1,116 @@ +/* + * Driver for the Coolstream Frontpanel - public definititons. + * + * Copyright (C) 2008 - 2012 Coolstream International Limited + */ + +#ifndef __CS_FRONTPANEL_H__ +#define __CS_FRONTPANEL_H__ + +#define CS_FP_DISPLAY_DEVICE_NAME "cs_display" +#define CS_FP_DISPLAY_DEVICE_MAJOR 238 + +typedef enum { + /* for all frontpanels with */ + FP_ICON_NONE = 0x00000000, + FP_ICON_BAR8 = 0x00000004, + FP_ICON_BAR7 = 0x00000008, + FP_ICON_BAR6 = 0x00000010, + FP_ICON_BAR5 = 0x00000020, + FP_ICON_BAR4 = 0x00000040, + FP_ICON_BAR3 = 0x00000080, + FP_ICON_BAR2 = 0x00000100, + FP_ICON_BAR1 = 0x00000200, + FP_ICON_FRAME = 0x00000400, + FP_ICON_MUTE = 0x00001000, + FP_ICON_DOLBY = 0x00002000, + FP_ICON_TV = 0x00020000, + FP_ICON_RADIO = 0x00040000, + FP_ICON_HD = 0x01000001, + FP_ICON_1080P = 0x02000001, + FP_ICON_1080I = 0x03000001, + FP_ICON_720P = 0x04000001, + FP_ICON_480P = 0x05000001, + FP_ICON_480I = 0x06000001, + FP_ICON_MP3 = 0x08000001, + FP_ICON_PLAY = 0x09000001, + FP_ICON_PAUSE = 0x0A000001, + FP_ICON_CAM1 = 0x0B000001, /* record */ + /* only for frontpanels with VFD */ + FP_ICON_HDD = 0x00000800, + FP_ICON_POWER = 0x00004000, + FP_ICON_TIMESHIFT = 0x00008000, + FP_ICON_SIGNAL = 0x00010000, + FP_ICON_USB = 0x07000001, + FP_ICON_COL1 = 0x09000002, + FP_ICON_COL2 = 0x0B000002, + FP_ICON_CAM2 = 0x0C000001, + /* only for frontpanels with OLED */ + FP_ICON_SD = 0x01000002, + FP_ICON_576P = 0x02000002, + FP_ICON_576I = 0x03000002, + FP_ICON_MP2 = 0x07000002, + FP_ICON_DTS = 0x08000002 +} fp_icon; + +typedef enum { + FP_FLAG_NONE = 0x00, + FP_FLAG_SCROLL_ON = 0x01, /* switch scrolling on */ + FP_FLAG_SCROLL_LTR = 0x02, /* scroll from left to right instead of default right to left direction (i.e. for arabic text) */ + FP_FLAG_SCROLL_SIO = 0x04, /* start/stop scrolling with empty screen (scroll in/out) */ + FP_FLAG_SCROLL_DELAY = 0x08, /* delayed scroll start */ + FP_FLAG_ALIGN_LEFT = 0x10, /* align the text in display from the left (default) */ + FP_FLAG_ALIGN_RIGHT = 0x20, /* align the text in display from the right (arabic) */ + FP_FLAG_UPDATE_SCROLL_POS = 0x40, /* update the current position for scrolling */ +} fp_flag; + +typedef struct { + unsigned char brightness; + unsigned char flags; + unsigned char current_hour; + unsigned char current_minute; + unsigned char timer_minutes_hi; + unsigned char timer_minutes_lo; +} fp_standby_data_t; + +typedef enum { + FP_LED_1_ON = 0x81, + FP_LED_2_ON = 0x82, + FP_LED_3_ON = 0x83, + FP_LED_1_OFF = 0x01, + FP_LED_2_OFF = 0x02, + FP_LED_3_OFF = 0x03, +} fp_led_ctrl_t; + +typedef struct { + unsigned char source; + unsigned char time_minutes_hi; + unsigned char time_minutes_lo; +} fp_wakeup_data_t; + +typedef enum { + FP_WAKEUP_SOURCE_TIMER = 0x01, + FP_WAKEUP_SOURCE_BUTTON = 0x02, + FP_WAKEUP_SOURCE_REMOTE = 0x04, + FP_WAKEUP_SOURCE_PWLOST = 0x7F, + FP_WAKEUP_SOURCE_POWER = 0xFF +} fp_wakeup_source; + +typedef struct { + unsigned short addr; + unsigned short cmd; +} fp_standby_cmd_data_t; + +#define IOC_FP_SET_BRIGHT _IOW(0xDE, 1, unsigned char) /* set the display brighness in 16 steps between 0 to 15 */ +#define IOC_FP_CLEAR_ALL _IOW(0xDE, 2, unsigned int) /* clear the entire display (both text and icons) */ +#define IOC_FP_SET_TEXT _IOW(0xDE, 3, char*) /* set a text to be displayed on the display. If arg == NULL, the text is cleared */ +#define IOC_FP_SET_ICON _IOW(0xDE, 4, fp_icon) /* switch the given icon on */ +#define IOC_FP_CLEAR_ICON _IOW(0xDE, 5, fp_icon) /* switch the given icon off */ +#define IOC_FP_SET_OUTPUT _IOW(0xDE, 6, unsigned char) /* switch the given output on (supported by the controller, but not used in the hardware) */ +#define IOC_FP_CLEAR_OUTPUT _IOW(0xDE, 7, unsigned char) /* switch the given output off (supported by the controller, but not used in the hardware) */ +#define IOC_FP_STANDBY _IOW(0xDE, 8, fp_standby_data_t *)/* switch the vfd/psu in standby (NEO and above only) */ +#define IOC_FP_LED_CTRL _IOW(0xDE, 9, unsigned char) /* control the Frontpanles LED's (NEO and above only) */ +#define IOC_FP_GET_WAKEUP _IOW(0xDE, 10, fp_wakeup_data_t *) /* get wakeup data (NEO and above only) */ +#define IOC_FP_STANDBY_CMD _IOW(0xDE, 11, fp_standby_cmd_data_t *) /* get wakeup data (NEO and above only) */ + +#endif /* __CS_FRONTPANEL_H__ */ diff --git a/lib/libcoolstream2/cs_ir_generic.h b/lib/libcoolstream2/cs_ir_generic.h new file mode 100644 index 000000000..ec7fbf325 --- /dev/null +++ b/lib/libcoolstream2/cs_ir_generic.h @@ -0,0 +1,73 @@ +/* + * public definitions for the generic IR / input driver. + * + * Copyright (C) 2008-2012 Coolstream International Limited + * + */ +#ifndef __CS_IR_GENERIC_H__ +#define __CS_IR_GENERIC_H__ + +/* Linux character device name */ +#define CS_IR_DEVICE_NAME "cs_ir" +#define CS_IR_DEVICE_MAJOR 240 + +/* max. possible key map size */ +#define CS_IR_MAX_KEY_MAP_SIZE 0x10000 + +/* Possible handled IR protocols */ +typedef enum { + IR_PROTOCOL_UNKNOWN = 0x00000, + IR_PROTOCOL_RMAP = 0x00001, /* Ruwido rMAP */ + IR_PROTOCOL_RMAP_E = 0x00002, /* Ruwido rMAP with extension for MNC Ltd sp. z o.o. */ + IR_PROTOCOL_NRC17 = 0x00004, /* Nokia NRC17 */ + IR_PROTOCOL_JVC = 0x00008, /* JVC */ + IR_PROTOCOL_RCA = 0x00010, /* RCA */ + IR_PROTOCOL_PSD = 0x00020, /* Precision Squared (not yet supported) */ + IR_PROTOCOL_RC5 = 0x00040, /* Philips RC5 */ + IR_PROTOCOL_RCMM = 0x00080, /* Philips RCMM */ + IR_PROTOCOL_RECS80 = 0x00100, /* Philips RECS80 */ + IR_PROTOCOL_NEC = 0x00200, /* NEC */ + IR_PROTOCOL_NECE = 0x00400, /* NEC with 16 bit address capability */ + IR_PROTOCOL_SCA = 0x00800, /* Scientific Atlanta */ + IR_PROTOCOL_MATSUSHITA = 0x01000, /* Matsushita (Technics/Panasonics) */ + IR_PROTOCOL_SONY = 0x02000, /* Sony SIRC 12 bit */ + IR_PROTOCOL_SONY15 = 0x04000, /* Sony SIRC 15 bit */ + IR_PROTOCOL_SONY20 = 0x08000, /* Sony SIRC 20 bit */ + IR_PROTOCOL_SONY24 = 0x10000, /* Sony SIRC 24 bit */ + IR_PROTOCOL_BUTTON = 0x20000, /* Sony SIRC 24 bit */ + IR_PROTOCOL_ALL = 0x2FFFF +} ir_protocol_t; + +/* FP key mode */ +typedef enum { + FP_MODE_KEYS_DISABLED = 0, + FP_MODE_KEYS_ENABLED = 1 +} fp_mode_t; + +/*******************************************************************************/ +/* ioctl's */ +/*******************************************************************************/ + +/* set the IR-protocols to listen for. */ +#define IOC_IR_SET_PRI_PROTOCOL _IOW(0xDD, 1, ir_protocol_t) /* set the primary IR-protocol */ +#define IOC_IR_SET_SEC_PROTOCOL _IOW(0xDD, 2, ir_protocol_t) /* set the secondary IR-protocol */ + +/* some IR-protocols can handle different device addresses. */ +#define IOC_IR_SET_PRI_ADDRESS _IOW(0xDD, 3, unsigned int) /* set the primary IR-address */ +#define IOC_IR_SET_SEC_ADDRESS _IOW(0xDD, 4, unsigned int) /* set the secondary IR-address */ + +/* defines the delay time between two pulses in milliseconds */ +#define IOC_IR_SET_F_DELAY _IOW(0xDD, 5, unsigned int) /* set the delay time before the first repetition */ +#define IOC_IR_SET_X_DELAY _IOW(0xDD, 6, unsigned int) /* set the delay time between all other repetitions */ + +/* load key mappings to translate from raw IR to Linux Input */ +#define IOC_IR_SET_PRI_KEYMAP _IOW(0xDD, 7, unsigned short *) /* set the primary keymap [num entries],[entry 1],[entry 2],...,[entry n] (max 0xFFFF entries) */ +#define IOC_IR_SET_SEC_KEYMAP _IOW(0xDD, 8, unsigned short *) /* set the secondary keymap [num entries],[entry 1],[entry 2],...,[entry n] (max 0xFFFF entries) */ + +/* frontpanel button options */ +#define IOC_IR_SET_FP_MODE _IOW(0xDD, 9, fp_mode_t) /* enable/disable frontpanel buttons */ + +/* informative stuff */ +#define IOC_IR_GET_PROTOCOLS _IOR(0xDD, 10, ir_protocol_t) /* reports a bitmask of all supported ir_protocols */ + +#endif /* __CS_IR_GENERIC_H__ */ diff --git a/lib/libcoolstream2/cs_types.h b/lib/libcoolstream2/cs_types.h new file mode 100644 index 000000000..fae6d086d --- /dev/null +++ b/lib/libcoolstream2/cs_types.h @@ -0,0 +1,29 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/cs_types.h */ +/* Public header file for CoolStream Public API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __CS_TYPES_H_ +#define __CS_TYPES_H_ + +typedef enum +{ + AVSYNC_DISABLED, + AVSYNC_ENABLED, + AVSYNC_AUDIO_IS_MASTER +} AVSYNC_TYPE; + +typedef unsigned long long u64; +typedef unsigned int u32; +typedef unsigned short u16; +typedef unsigned char u8; +typedef signed long long s64; +typedef signed int s32; +typedef signed short s16; +typedef signed char s8; + +#endif // __CS_TYPES_H_ diff --git a/lib/libcoolstream2/cs_vfd.h b/lib/libcoolstream2/cs_vfd.h new file mode 100755 index 000000000..13b4b933d --- /dev/null +++ b/lib/libcoolstream2/cs_vfd.h @@ -0,0 +1,102 @@ +/* + * Driver for the Samsung HCR-13SS22 VF-Display connected to the Conexant + * CX2450x (Nevis) SoC via Coolstream VFD-Controller - public definititons. + * + * Copyright (C) 2008 Coolstream International Limited + */ + +#ifndef __CS_VFD__ +#define __CS_VFD__ + +typedef enum +{ + VFD_ICON_BAR8 = 0x00000004, + VFD_ICON_BAR7 = 0x00000008, + VFD_ICON_BAR6 = 0x00000010, + VFD_ICON_BAR5 = 0x00000020, + VFD_ICON_BAR4 = 0x00000040, + VFD_ICON_BAR3 = 0x00000080, + VFD_ICON_BAR2 = 0x00000100, + VFD_ICON_BAR1 = 0x00000200, + VFD_ICON_FRAME = 0x00000400, + VFD_ICON_HDD = 0x00000800, + VFD_ICON_MUTE = 0x00001000, + VFD_ICON_DOLBY = 0x00002000, + VFD_ICON_POWER = 0x00004000, + VFD_ICON_TIMESHIFT = 0x00008000, + VFD_ICON_SIGNAL = 0x00010000, + VFD_ICON_TV = 0x00020000, + VFD_ICON_RADIO = 0x00040000, + VFD_ICON_HD = 0x01000001, + VFD_ICON_1080P = 0x02000001, + VFD_ICON_1080I = 0x03000001, + VFD_ICON_720P = 0x04000001, + VFD_ICON_480P = 0x05000001, + VFD_ICON_480I = 0x06000001, + VFD_ICON_USB = 0x07000001, + VFD_ICON_MP3 = 0x08000001, + VFD_ICON_PLAY = 0x09000001, + VFD_ICON_COL1 = 0x09000002, + VFD_ICON_PAUSE = 0x0A000001, + VFD_ICON_CAM1 = 0x0B000001, + VFD_ICON_COL2 = 0x0B000002, + VFD_ICON_CAM2 = 0x0C000001 +} vfd_icon; + +typedef enum +{ + VFD_FLAG_NONE = 0x00, + VFD_FLAG_SCROLL_ON = 0x01, /* switch scrolling on */ + VFD_FLAG_SCROLL_LTR = 0x02, /* scroll from left to rightinstead of default right to left direction (i.e. for arabic text) */ + VFD_FLAG_SCROLL_SIO = 0x04, /* start/stop scrolling with empty screen (scroll in/out) */ + VFD_FLAG_SCROLL_DELAY = 0x08, /* delayed scroll start */ + VFD_FLAG_ALIGN_LEFT = 0x10, /* align the text in display from the left (default) */ + VFD_FLAG_ALIGN_RIGHT = 0x20, /* align the text in display from the right (arabic) */ + VFD_FLAG_UPDATE_SCROLL_POS = 0x40, /* update the current position for scrolling */ +} vfd_flag; + +typedef struct { + unsigned char brightness; + unsigned char flags; + unsigned char current_hour; + unsigned char current_minute; + unsigned char timer_minutes_hi; + unsigned char timer_minutes_lo; +} standby_data_t; + +typedef enum { + VFD_LED_1_ON = 0x81, + VFD_LED_2_ON = 0x82, + VFD_LED_3_ON = 0x83, + VFD_LED_1_OFF = 0x01, + VFD_LED_2_OFF = 0x02, + VFD_LED_3_OFF = 0x03, +} vfd_led_ctrl_t; + +typedef struct { + unsigned char source; + unsigned char time_minutes_hi; + unsigned char time_minutes_lo; +} wakeup_data_t; + +typedef enum +{ + WAKEUP_SOURCE_TIMER = 0x01, + WAKEUP_SOURCE_BUTTON = 0x02, + WAKEUP_SOURCE_REMOTE = 0x04, + WAKEUP_SOURCE_PWLOST = 0x7F, + WAKEUP_SOURCE_POWER = 0xFF +} wakeup_source; + +#define IOC_VFD_SET_BRIGHT _IOW(0xDE, 1, unsigned char) /* set the display brighness in 16 steps between 0 to 15 */ +#define IOC_VFD_CLEAR_ALL _IOW(0xDE, 2, unsigned int) /* clear the entire display (both text and icons) */ +#define IOC_VFD_SET_TEXT _IOW(0xDE, 3, char*) /* set a text to be displayed on the display. If arg == NULL, the text is cleared */ +#define IOC_VFD_SET_ICON _IOW(0xDE, 4, vfd_icon) /* switch the given icon on */ +#define IOC_VFD_CLEAR_ICON _IOW(0xDE, 5, vfd_icon) /* switch the given icon off */ +#define IOC_VFD_SET_OUTPUT _IOW(0xDE, 6, unsigned char) /* switch the given output on (supported by the controller, but not used in the hardware) */ +#define IOC_VFD_CLEAR_OUTPUT _IOW(0xDE, 7, unsigned char) /* switch the given output off (supported by the controller, but not used in the hardware) */ +#define IOC_VFD_STANDBY _IOW(0xDE, 8, standby_data_t *)/* switch the vfd/psu in standby (NEO and above only) */ +#define IOC_VFD_LED_CTRL _IOW(0xDE, 9, unsigned char) /* control the Frontpanles LED's (NEO and above only) */ +#define IOC_VFD_GET_WAKEUP _IOW(0xDE, 10,wakeup_data_t *) /* get wakeup data (NEO and above only) */ + +#endif /* __CS_VFD__ */ diff --git a/lib/libcoolstream2/dmx_cs.h b/lib/libcoolstream2/dmx_cs.h new file mode 100644 index 000000000..e80a29204 --- /dev/null +++ b/lib/libcoolstream2/dmx_cs.h @@ -0,0 +1,85 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/dmx_cs.h */ +/* Public header for demux API */ +/* */ +/* (C) 2008 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __DEMUX_CS_H_ +#define __DEMUX_CS_H_ + +#include + +#include +#include "cs_types.h" + +#define DEMUX_POLL_TIMEOUT 0 // timeout in ms +#define MAX_FILTER_LENGTH 12 // maximum number of filters + +#ifdef DMX_FILTER_SIZE +#error +#endif +#define DMX_FILTER_SIZE MAX_FILTER_LENGTH + +#define MAX_DMX_UNITS 4 + +typedef enum { + DMX_VIDEO_CHANNEL = 1, + DMX_AUDIO_CHANNEL, + DMX_PES_CHANNEL, + DMX_PSI_CHANNEL, + DMX_PIP_CHANNEL, + DMX_TP_CHANNEL, + DMX_PCR_ONLY_CHANNEL +} DMX_CHANNEL_TYPE; + +class cDemuxData; +class cVideo; +class cAudio; + +class cDemux { +friend class cVideo; +friend class cAudio; +private: + DMX_CHANNEL_TYPE type; + int timeout; + unsigned short pid; + AVSYNC_TYPE syncMode; + bool enabled; + int unit; + + cDemuxData * dd; +public: + cDemux(int num = 0); + ~cDemux(); + // + bool Open(DMX_CHANNEL_TYPE pes_type, void * hVideoBuffer = NULL, int uBufferSize = 8192); + void Close(void); + bool Start(bool record = false); + bool Stop(void); + int Read(unsigned char *buff, int len, int Timeout = 0); + + bool SetVideoFormat(VIDEO_FORMAT VideoFormat); + bool SetSource(int source); + + bool sectionFilter(unsigned short Pid, const unsigned char * const Tid, const unsigned char * const Mask, int len, int Timeout = DEMUX_POLL_TIMEOUT, const unsigned char * const nMask = NULL); + bool AddSectionFilter(unsigned short Pid, const unsigned char * const Filter, const unsigned char * const Mask, int len, const unsigned char * const nMask = NULL); + + bool pesFilter(const unsigned short Pid); + bool addPid(unsigned short Pid); + void SetSyncMode(AVSYNC_TYPE SyncMode); + void *getBuffer(void); + void *getChannel(void); + void getSTC(s64 *STC); + + DMX_CHANNEL_TYPE getChannelType(void) { return type; }; + int getUnit(void) { return unit; }; + unsigned short GetPID(void) { return pid; } + + int GetSource(); + static bool SetSource(int unit, int source); + static int GetSource(int unit); +}; +#endif //__DMX_CS_H_ diff --git a/lib/libcoolstream2/mmi.h b/lib/libcoolstream2/mmi.h new file mode 100644 index 000000000..96266ea44 --- /dev/null +++ b/lib/libcoolstream2/mmi.h @@ -0,0 +1,54 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/mmi.h */ +/* Public header file for CoolStream Public CA MMI API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __MMI_H_ +#define __MMI_H_ + +#define MAX_MMI_ITEMS 40 +#define MAX_MMI_TEXT_LEN 255 +#define MAX_MMI_CHOICE_TEXT_LEN 255 + +typedef enum { + MMI_TOP_MENU_SUBS = 1, + MMI_TOP_MENU_EVENTS, + MMI_TOP_MENU_TOKENS, + MMI_TOP_MENU_PIN, + MMI_TOP_MENU_MATURE, + MMI_TOP_MENU_ABOUT +} MMI_MENU_CURRENT; + +typedef enum { + MMI_MENU_LEVEL_MAIN = 0, + MMI_MENU_LEVEL_MATURE, + MMI_MENU_LEVEL_ASK_PIN_MATURE +} MMI_MENU_LEVEL; + +typedef enum { + MMI_PIN_LEVEL_ASK_OLD = 0, + MMI_PIN_LEVEL_CHECK_CURRENT, + MMI_PIN_LEVEL_ASK_REPEAT, + MMI_PIN_LEVEL_CHECK_AND_CHANGE +} MMI_PIN_LEVEL; + +typedef struct { + int choice_nb; + char title[MAX_MMI_TEXT_LEN]; + char subtitle[MAX_MMI_TEXT_LEN]; + char bottom[MAX_MMI_TEXT_LEN]; + char choice_item[MAX_MMI_ITEMS][MAX_MMI_CHOICE_TEXT_LEN]; +} MMI_MENU_LIST_INFO; + +typedef struct { + int blind; + int answerlen; + char enguiryText[MAX_MMI_TEXT_LEN]; +} MMI_ENGUIRY_INFO; + +#endif // __MMI_H_ + diff --git a/lib/libcoolstream2/nevis_ir.h b/lib/libcoolstream2/nevis_ir.h new file mode 100644 index 000000000..0774a150c --- /dev/null +++ b/lib/libcoolstream2/nevis_ir.h @@ -0,0 +1,84 @@ +/* + * public definitions for the CX2450x Infrared receiver driver + * + * Copyright (C) 2008-2011 Coolstream International Limited + * + */ + +#ifndef __NEVIS_IR_H__ +#define __NEVIS_IR_H__ + +typedef enum +{ + IR_PROTOCOL_UNKNOWN = 0x00000, + IR_PROTOCOL_RMAP = 0x00001, /* Ruwido rMAP */ + IR_PROTOCOL_RMAP_E = 0x00002, /* Ruwido rMAP with extension for MNC Ltd sp. z o.o. */ + IR_PROTOCOL_NRC17 = 0x00004, /* Nokia NRC17 */ + IR_PROTOCOL_JVC = 0x00008, /* JVC */ + IR_PROTOCOL_RCA = 0x00010, /* RCA */ + IR_PROTOCOL_PSD = 0x00020, /* Precision Squared (not yet supported) */ + IR_PROTOCOL_RC5 = 0x00040, /* Philips RC5 */ + IR_PROTOCOL_RCMM = 0x00080, /* Philips RCMM */ + IR_PROTOCOL_RECS80 = 0x00100, /* Philips RECS80 */ + IR_PROTOCOL_NEC = 0x00200, /* NEC */ + IR_PROTOCOL_NECE = 0x00400, /* NEC with 16 bit address capability */ + IR_PROTOCOL_SCA = 0x00800, /* Scientific Atlanta */ + IR_PROTOCOL_MATSUSHITA = 0x01000, /* Matsushita (Technics/Panasonics) */ + IR_PROTOCOL_SONY = 0x02000, /* Sony SIRC 12 bit */ + IR_PROTOCOL_SONY15 = 0x04000, /* Sony SIRC 15 bit */ + IR_PROTOCOL_SONY20 = 0x08000, /* Sony SIRC 20 bit */ + IR_PROTOCOL_SONY24 = 0x10000, /* Sony SIRC 24 bit */ + IR_PROTOCOL_ALL = 0x1FFFF +} ir_protocol_t; + +typedef enum +{ + FP_MODE_KEYS_DISABLED = 0, + FP_MODE_KEYS_ENABLED = 1 +} fp_mode_t; + +#define EVENT_KEY_UP 0 +#define EVENT_KEY_DOWN 1 +#define NEVIS_IR_DEVICE_NAME "IR_NEVIS" + +/*******************************************************************************/ +/* DEBUG options */ +/*******************************************************************************/ + +#define DBG_NONE 0x00000000 /* no debug at all */ + +#define DBG_IR_SYSTEM 0x00000001 /* IR: low level informations */ +#define DBG_IR_DECODE 0x00000002 /* IR: informations from the IR protocol decoder */ +#define DBG_OUTPUT_QUEUE 0x00000004 /* IR: show data from the outgoing queue (from driver to the client(s) ) */ +#define DBG_IR_FOPS 0x00000008 /* IR: informations about filoe operations (ioctl's) */ + +#define DBG_VFD_SYSTEM 0x00010000 /* VFD: low level informations */ +#define DBG_VFD_FOPS 0x00080000 /* VFD: informations about filoe operations (ioctl's) */ + +/*******************************************************************************/ +/* ioctl's */ +/*******************************************************************************/ + +/* set the IR-protocols to listen for. */ +#define IOC_IR_SET_PRI_PROTOCOL _IOW(0xDD, 1, ir_protocol_t) /* set the primary IR-protocol */ +#define IOC_IR_SET_SEC_PROTOCOL _IOW(0xDD, 2, ir_protocol_t) /* set the secondary IR-protocol */ + +/* some IR-protocols can handle different device addresses. */ +#define IOC_IR_SET_PRI_ADDRESS _IOW(0xDD, 3, unsigned int) /* set the primary IR-address */ +#define IOC_IR_SET_SEC_ADDRESS _IOW(0xDD, 4, unsigned int) /* set the secondary IR-address */ + +/* defines the delay time between two pulses in milliseconds */ +#define IOC_IR_SET_F_DELAY _IOW(0xDD, 5, unsigned int) /* set the delay time before the first repetition */ +#define IOC_IR_SET_X_DELAY _IOW(0xDD, 6, unsigned int) /* set the delay time between all other repetitions */ + +/* load key mappings to translate from raw IR to Linux Input */ +#define IOC_IR_SET_PRI_KEYMAP _IOW(0xDD, 7, unsigned short *) /* set the primary keymap [num entries],[entry 1],[entry 2],...,[entry n] (max 0xFFFF entries) */ +#define IOC_IR_SET_SEC_KEYMAP _IOW(0xDD, 8, unsigned short *) /* set the secondary keymap [num entries],[entry 1],[entry 2],...,[entry n] (max 0xFFFF entries) */ + +/* frontpanel button options */ +#define IOC_IR_SET_FP_MODE _IOW(0xDD, 9, fp_mode_t) /* enable/disable frontpanel buttons */ + +/* informative stuff */ +#define IOC_IR_GET_PROTOCOLS _IOR(0xDD, 10, ir_protocol_t) /* reports a bitmask of all supported ir_protocols */ + +#endif /* __NEVIS_IR_H__ */ diff --git a/lib/libcoolstream2/playback.h b/lib/libcoolstream2/playback.h new file mode 100644 index 000000000..95ea0884e --- /dev/null +++ b/lib/libcoolstream2/playback.h @@ -0,0 +1 @@ +#include "playback_cs.h" diff --git a/lib/libcoolstream2/playback_cs.h b/lib/libcoolstream2/playback_cs.h new file mode 100644 index 000000000..80ecb4ccd --- /dev/null +++ b/lib/libcoolstream2/playback_cs.h @@ -0,0 +1,68 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/playback_cs.h */ +/* Public header file for playback API */ +/* */ +/* (C) 2008 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __PLAYBACK_CS_H_ +#define __PLAYBACK_CS_H_ + +#include +#include + +typedef enum { + PLAYMODE_TS = 0, + PLAYMODE_FILE +} playmode_t; + +class cPlaybackData; + +typedef struct { + bool enabled; + uint16_t pid; + uint16_t ac3flags; + std::string lang; + std::string codec_name; +} playback_audio_pid_info_t; + +class cPlayback { +private: + cPlaybackData * pd; + + bool enabled; + bool paused; + bool playing; + int unit; + int nPlaybackFD; + int video_type; + int mSpeed; + playmode_t playMode; + // + void Attach(void); + void Detach(void); + bool SetAVDemuxChannel(bool On, bool Video = true, bool Audio = true); +public: + cPlayback(int num = 0); + ~cPlayback(); + + bool Open(playmode_t PlayMode); + void Close(void); + bool Start(char * filename, unsigned short vpid, int vtype, unsigned short apid, int audio_flag, unsigned int duration = 0); + bool Stop(void); + bool SetAPid(unsigned short pid, int audio_flag); + bool SetSpeed(int speed); + bool GetSpeed(int &speed) const; + bool GetPosition(int &position, int &duration); + bool GetOffset(off64_t &offset); + bool SetPosition(int position, bool absolute = false); + bool IsPlaying(void) const { return playing; } + bool IsEnabled(void) const { return enabled; } + void FindAllPids(playback_audio_pid_info_t *audiopids, uint16_t size, uint16_t *numpida); + void FindAllPids(uint16_t *apids, unsigned short *ac3flags, uint16_t *numpida, std::string *language); + +}; + +#endif // __PLAYBACK_CS_H_ diff --git a/lib/libcoolstream2/pwrmngr.h b/lib/libcoolstream2/pwrmngr.h new file mode 100644 index 000000000..2a59d0ae9 --- /dev/null +++ b/lib/libcoolstream2/pwrmngr.h @@ -0,0 +1,60 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/pwrmngr.h */ +/* Private header of the Powermanager API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __PWRMNGR_H_ +#define __PWRMNGR_H_ + +// -- cCpuFreqManager ---------------------------------------------------------- + +class cCpuFreqManager { +private: + unsigned long startCpuFreq; + unsigned long delta; +public: + void Up(void); + void Down(void); + void Reset(void); + // + bool SetCpuFreq(unsigned long CpuFreq); + bool SetDelta(unsigned long Delta); + unsigned long GetCpuFreq(void); + unsigned long GetDelta(void); + // + cCpuFreqManager(void); + ~cCpuFreqManager(); +}; + +// -- cPowerManageger ---------------------------------------------------------- + +typedef enum { + PWR_INIT = 1, + PWR_FULL_ACTIVE, /* all devices/clocks up */ + PWR_ACTIVE_STANDBY, + PWR_PASSIVE_STANDBY, + PWR_INVALID +} PWR_STATE; + +class cPowerManager { +private: + bool init; + bool opened; + PWR_STATE powerState; + // + bool SetState(PWR_STATE PowerState); +public: + bool Open(void); + void Close(void); + // + bool SetStandby(bool Active, bool Passive); + // + cPowerManager(void); + virtual ~cPowerManager(); +}; + +#endif // __PWRMNGR_H__ diff --git a/lib/libcoolstream2/record_cs.h b/lib/libcoolstream2/record_cs.h new file mode 100644 index 000000000..4ef6f3df0 --- /dev/null +++ b/lib/libcoolstream2/record_cs.h @@ -0,0 +1,40 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/record_cs.h */ +/* Public header file for record API */ +/* */ +/* (C) 2008 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __RECORD_CS_H_ +#define __RECORD_CS_H_ + +#include + +class cRecordData; + +#define REC_STATUS_OK 0 +#define REC_STATUS_SLOW 1 +#define REC_STATUS_OVERFLOW 2 + +class cRecord { +private: + cRecordData * rd; + bool enabled; + int unit; + +public: + cRecord(int num = 0); + ~cRecord(); + + bool Open(); + void Close(void); + bool Start(int fd, unsigned short vpid, unsigned short * apids, int numapids, uint64_t chid); + bool Stop(void); + bool AddPid(unsigned short pid); + int GetStatus(); + void ResetStatus(); +}; + +#endif // __RECORD_CS_H_ diff --git a/lib/libcoolstream2/tsrouter.h b/lib/libcoolstream2/tsrouter.h new file mode 100644 index 000000000..672d6721d --- /dev/null +++ b/lib/libcoolstream2/tsrouter.h @@ -0,0 +1,32 @@ +#ifndef __TSROUTER_H +#define __TSROUTER_H + +typedef struct _tsrouter_hsdp_config { + u8 port; + u32 port_ctrl; + u32 pkt_ctrl; + u32 clk_ctrl; + u32 mux; + u32 int_en; + /* more ? */ +} tsrouter_hsdp_config_t; + +typedef struct _tsrouter_tsp_config { + u8 port; + u32 port_ctrl; + u32 mux; +} tsrouter_tsp_config_t; + +extern int cs_tsrouter_init(void); +extern void cs_tsrouter_exit(void); + +extern void cs_tsx_hsdp_init_port(u32 port, u32 ctrl); +extern void cs_tsx_tsp_init_port(u32 port, u32 hsdp_port); + +extern void cs_tsx_hsdp_get_port_config(tsrouter_hsdp_config_t *conf); +extern void cs_tsx_tsp_get_port_config(tsrouter_tsp_config_t *conf); + +extern void cs_tsx_hsdp_set_port_config(const tsrouter_hsdp_config_t *conf); +extern void cs_tsx_tsp_set_port_config(const tsrouter_tsp_config_t *conf); + +#endif /* __TSROUTER_H */ diff --git a/lib/libcoolstream2/video_cs.h b/lib/libcoolstream2/video_cs.h new file mode 100644 index 000000000..52946dd0c --- /dev/null +++ b/lib/libcoolstream2/video_cs.h @@ -0,0 +1,269 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/video_cs.h */ +/* Public header file for video API */ +/* */ +/* (C) 2008 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __VIDEO_CS_H_ +#define __VIDEO_CS_H_ + +#include +#include + +#include "cs_types.h" + +#define CS_MAX_VIDEO_DECODERS 16 + +#ifndef CS_VIDEO_PDATA +#define CS_VIDEO_PDATA void +#endif + +typedef enum { + // Video modes + ANALOG_xD_CVBS = (1 << 0), // Turns off fastblank on SCART + ANALOG_SD_RGB = (1 << 1), // Output SD in RGB format + ANALOG_SD_YPRPB = (1 << 2), // Output SD in YPbPr format (component) + ANALOG_HD_RGB = (1 << 3), // Output HD in RGB format + ANALOG_HD_YPRPB = (1 << 4), // Output HD in YPbPr format (component) + // Output types + ANALOG_xD_SCART = (1 << 8), // Output is SCART + ANALOG_xD_CINCH = (1 << 9), // Output is Cinch + ANALOG_xD_BOTH = (3 << 8), // Output cannot individually control scart, cinch outputs + // due to limited amount of DACs (ie TANK, Trinity) +} analog_mode_t; + +#define ANALOG_MODE(conn, def, sys) (ANALOG_##def##_##sys | ANALOG_xD_##conn) + +typedef enum +{ + VIDEO_FORMAT_MPEG2 = 0, + VIDEO_FORMAT_MPEG4, /* H264 */ + VIDEO_FORMAT_VC1, + VIDEO_FORMAT_JPEG, + VIDEO_FORMAT_GIF, + VIDEO_FORMAT_PNG, + VIDEO_FORMAT_DIVX,/* DIVX 3.11 */ + VIDEO_FORMAT_MPEG4PART2,/* MPEG4 SVH, MPEG4 SP, MPEG4 ASP, DIVX4,5,6 */ + VIDEO_FORMAT_REALVIDEO8, + VIDEO_FORMAT_REALVIDEO9, + VIDEO_FORMAT_ON2_VP6, + VIDEO_FORMAT_ON2_VP8, + VIDEO_FORMAT_SORENSON_SPARK, + VIDEO_FORMAT_H263, + VIDEO_FORMAT_H263_ENCODER, + VIDEO_FORMAT_H264_ENCODER, + VIDEO_FORMAT_MPEG4PART2_ENCODER, + VIDEO_FORMAT_AVS, + VIDEO_FORMAT_VIP656, + VIDEO_FORMAT_UNSUPPORTED +} VIDEO_FORMAT; + +typedef enum { + VIDEO_SD = 0, + VIDEO_HD, + VIDEO_120x60i, + VIDEO_320x240i, + VIDEO_1440x800i, + VIDEO_360x288i +} VIDEO_DEFINITION; + +typedef enum { + VIDEO_FRAME_RATE_23_976 = 0, + VIDEO_FRAME_RATE_24, + VIDEO_FRAME_RATE_25, + VIDEO_FRAME_RATE_29_97, + VIDEO_FRAME_RATE_30, + VIDEO_FRAME_RATE_50, + VIDEO_FRAME_RATE_59_94, + VIDEO_FRAME_RATE_60 +} VIDEO_FRAME_RATE; + +typedef enum { + DISPLAY_AR_1_1, + DISPLAY_AR_4_3, + DISPLAY_AR_14_9, + DISPLAY_AR_16_9, + DISPLAY_AR_20_9, + DISPLAY_AR_RAW +} DISPLAY_AR; + +typedef enum { + DISPLAY_AR_MODE_PANSCAN = 0, + DISPLAY_AR_MODE_LETTERBOX, + DISPLAY_AR_MODE_NONE, + DISPLAY_AR_MODE_PANSCAN2 +} DISPLAY_AR_MODE; + +typedef enum { + VIDEO_DB_DR_NEITHER = 0, + VIDEO_DB_ON, + VIDEO_DB_DR_BOTH +} VIDEO_DB_DR; + +typedef enum { + VIDEO_PLAY_STILL = 0, + VIDEO_PLAY_CLIP, + VIDEO_PLAY_TRICK, + VIDEO_PLAY_MOTION, + VIDEO_PLAY_MOTION_NO_SYNC +} VIDEO_PLAY_MODE; + +typedef enum { + VIDEO_STD_NTSC, + VIDEO_STD_SECAM, + VIDEO_STD_PAL, + VIDEO_STD_480P, + VIDEO_STD_576P, + VIDEO_STD_720P60, + VIDEO_STD_1080I60, + VIDEO_STD_720P50, + VIDEO_STD_1080I50, + VIDEO_STD_1080P30, + VIDEO_STD_1080P24, + VIDEO_STD_1080P25, + VIDEO_STD_AUTO, + VIDEO_STD_MAX = VIDEO_STD_AUTO +} VIDEO_STD; + +typedef enum { + VIDEO_HDMI_CEC_MODE_OFF = 0, + VIDEO_HDMI_CEC_MODE_TUNER, + VIDEO_HDMI_CEC_MODE_RECORDER +} VIDEO_HDMI_CEC_MODE; + +typedef enum +{ + VIDEO_CONTROL_BRIGHTNESS = 0, + VIDEO_CONTROL_CONTRAST, + VIDEO_CONTROL_SATURATION, + VIDEO_CONTROL_HUE, + VIDEO_CONTROL_SHARPNESS, + VIDEO_CONTROL_MAX = VIDEO_CONTROL_SHARPNESS +} VIDEO_CONTROL; + +class cDemux; +class cAudio; + +class cVideo { +friend class cAudio; +private: + static cVideo *instance[CS_MAX_VIDEO_DECODERS]; + + unsigned int unit; + CS_VIDEO_PDATA *privateData; + VIDEO_FORMAT streamType; + VIDEO_DEFINITION VideoDefinition; + DISPLAY_AR DisplayAR; + VIDEO_PLAY_MODE playMode; + AVSYNC_TYPE syncMode; + DISPLAY_AR_MODE ARMode; + VIDEO_DB_DR eDbDr; + DISPLAY_AR PictureAR; + VIDEO_FRAME_RATE FrameRate; + VIDEO_HDMI_CEC_MODE hdmiCECMode; + bool Interlaced; + unsigned int uVPPDisplayDelay; + unsigned int uVideoPTSDelay; + int StcPts; + bool started; + unsigned int bStandby; + bool blank; + bool playing; + bool auto_format; + int uFormatIndex; + bool vbi_started; + bool receivedVPPDelay; + bool receivedVideoDelay; + int cfd; // control driver fd + analog_mode_t analog_mode_cinch; + analog_mode_t analog_mode_scart; + fp_icon mode_icon; + cDemux *demux; + // + int SelectAutoFormat(); + void ScalePic(); + cVideo(unsigned int Unit); +public: + /* constructor & destructor */ + cVideo(int mode, void * hChannel, void * hBuffer); + ~cVideo(void); + + void * GetVPP(void); + void * GetTVEnc(); + void * GetTVEncSD(); + void * GetHandle(); + + void SetAudioHandle(void * handle); + /* aspect ratio */ + int getAspectRatio(void); + void getPictureInfo(int &width, int &height, int &rate); + int setAspectRatio(int aspect, int mode); + + /* cropping mode */ + int getCroppingMode(void); + int setCroppingMode(void); + + /* stream source */ + int getSource(void); + int setSource(void); + int GetStreamType(void); + + /* blank on freeze */ + int getBlank(void); + int setBlank(int enable); + + /* get play state */ + int getPlayState(void); + void SetVPPDelay(unsigned int delay) { uVPPDisplayDelay = delay;}; + void SetVideoDelay(unsigned int delay) { uVideoPTSDelay = delay;}; + /* Notification handlers */ + void HandleVPPMessage(int Event, void *pData); + void HandleVideoMessage(void * hHandle, int Event, void *pData); + void HandleEncoderMessage(void *hHandle, int Event, void *pData); + VIDEO_DEFINITION GetVideoDef(void) { return VideoDefinition; } + + /* change video play state */ + int Prepare(void * PcrChannel, unsigned short PcrPid, unsigned short VideoPid, void * hChannel = NULL); + int Start(void * PcrChannel, unsigned short PcrPid, unsigned short VideoPid, void * hChannel = NULL); + int Stop(bool Blank = true); + bool Pause(void); + bool Resume(void); + int LipsyncAdjust(); + int64_t GetPTS(void); + int Flush(void); + + /* set video_system */ + int SetVideoSystem(int video_system, bool remember = true); + int SetStreamType(VIDEO_FORMAT type); + void SetSyncMode(AVSYNC_TYPE mode); + bool SetCECMode(VIDEO_HDMI_CEC_MODE Mode); + void SetCECAutoView(bool OnOff); + void SetCECAutoStandby(bool OnOff); + void ShowPicture(const char * fname); + void StopPicture(); + void Standby(bool bOn); + void Pig(int x, int y, int w, int h, int osd_w = 1064, int osd_h = 600); + void SetControl(int num, int val); + bool ReceivedVPPDelay(void) { return receivedVPPDelay; } + bool ReceivedVideoDelay(void) { return receivedVideoDelay; } + void SetReceivedVPPDelay(bool Received) { receivedVPPDelay = Received; } + void SetReceivedVideoDelay(bool Received) { receivedVideoDelay = Received; } + void SetFastBlank(bool onoff); + void SetTVAV(bool onoff); + void SetWideScreen(bool onoff); + void SetVideoMode(analog_mode_t mode); + void SetDBDR(int dbdr); + void SetAutoModes(int modes[VIDEO_STD_MAX]); + int OpenVBI(int num); + int CloseVBI(void); + int StartVBI(unsigned short pid); + int StopVBI(void); + bool GetScreenImage(unsigned char * &data, int &xres, int &yres, bool get_video = true, bool get_osd = false, bool scale_to_video = false); + void SetDemux(cDemux *Demux); + static cVideo *GetDecoder(unsigned int Unit); +}; + +#endif // __VIDEO_CS_H_ From bfa6c6e7381158b29879d8ca7b68c1523fcd0f09 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 13:59:51 +0400 Subject: [PATCH 042/442] acinclude.m4: add nevis/apollo box models --- acinclude.m4 | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 16ee8e762..08a8c1e41 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -21,6 +21,10 @@ if test "$DEBUG" = "yes"; then DEBUG_CFLAGS="-g3 -ggdb" AC_DEFINE(DEBUG,1,[Enable debug messages]) fi +AC_ARG_ENABLE(tmsdk, + AS_HELP_STRING(--enable-tmsdk, compile inside sdk), + ,[enable_tmsdk=no]) +AM_CONDITIONAL(ENABLE_TMSDK,test "$enable_tmsdk" = "yes") AC_MSG_CHECKING(target) @@ -401,9 +405,17 @@ AC_ARG_WITH(boxtype, esac], [BOXTYPE="coolstream"]) AC_ARG_WITH(boxmodel, - [ --with-boxmodel valid for dreambox: dm500, dm500plus, dm600pvr, dm56x0, dm7000, dm7020, dm7025 + [ --with-boxmodel valid for coolstream: nevis, apollo + valid for dreambox: dm500, dm500plus, dm600pvr, dm56x0, dm7000, dm7020, dm7025 valid for ipbox: ip200, ip250, ip350, ip400], [case "${withval}" in + nevis|apollo) + if test "$BOXTYPE" = "coolstream"; then + BOXMODEL="$withval" + else + AC_MSG_ERROR([unknown model $withval for boxtype $BOXTYPE]) + fi + ;; dm500|dm500plus|dm600pvr|dm56x0|dm7000|dm7020|dm7025) if test "$BOXTYPE" = "dreambox"; then BOXMODEL="$withval" @@ -436,6 +448,9 @@ AM_CONDITIONAL(BOXTYPE_IPBOX, test "$BOXTYPE" = "ipbox") AM_CONDITIONAL(BOXTYPE_COOL, test "$BOXTYPE" = "coolstream") AM_CONDITIONAL(BOXTYPE_GENERIC, test "$BOXTYPE" = "generic") +AM_CONDITIONAL(BOXMODEL_NEVIS,test "$BOXMODEL" = "nevis") +AM_CONDITIONAL(BOXMODEL_APOLLO,test "$BOXMODEL" = "apollo") + AM_CONDITIONAL(BOXMODEL_DM500,test "$BOXMODEL" = "dm500") AM_CONDITIONAL(BOXMODEL_DM500PLUS,test "$BOXMODEL" = "dm500plus") AM_CONDITIONAL(BOXMODEL_DM600PVR,test "$BOXMODEL" = "dm600pvr") @@ -462,7 +477,11 @@ elif test "$BOXTYPE" = "generic"; then fi # TODO: do we need more defines? -if test "$BOXMODEL" = "dm500"; then +if test "$BOXMODEL" = "nevis"; then + AC_DEFINE(BOXMODEL_NEVIS, 1, [coolstream hd1/neo/neo2/zee]) +elif test "$BOXMODEL" = "apollo"; then + AC_DEFINE(BOXMODEL_APOLLO, 1, [coolstream tank]) +elif test "$BOXMODEL" = "dm500"; then AC_DEFINE(BOXMODEL_DM500, 1, [dreambox 500]) elif test "$BOXMODEL" = "ip200"; then AC_DEFINE(BOXMODEL_IP200, 1, [ipbox 200]) From 18380c2e9451a659a5ca024f75e0fa215c69bbe3 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 14:00:25 +0400 Subject: [PATCH 043/442] configure.ac: change tests for apollo headers --- configure.ac | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 0fddb3c50..d71a7885d 100644 --- a/configure.ac +++ b/configure.ac @@ -122,8 +122,15 @@ AC_ARG_ENABLE(cleanup, [ --enable-cleanup enable cleanup on exit], [AC_DEFINE(EXIT_CLEANUP,1,[enable cleanup on exit])]) -AC_CHECK_HEADERS(coolstream/cs_ir_generic.h) -AC_CHECK_HEADERS(coolstream/cs_frontpanel.h) +if test -e ${srcdir}/lib/libcoolstream/nevis_ir.h; then + AC_DEFINE(HAVE_COOLSTREAM_NEVIS_IR_H,1,[Define to 1 if you have the header file.]) +fi +if test -e ${srcdir}/lib/libcoolstream2/cs_ir_generic.h; then + AC_DEFINE(HAVE_COOLSTREAM_CS_IR_GENERIC_H,1,[Define to 1 if you have the header file.]) +fi +if test -e ${srcdir}/lib/libcoolstream2/cs_frontpanel.h; then + AC_DEFINE(HAVE_COOLSTREAM_CS_FRONTPANEL_H,1,[Define to 1 if you have the header file.]) +fi # # Check for libtdservicedb - the new one - for testing only From 94c7e6854c2a87a85b2ee833fb106daf5f3a9ac2 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 14:00:49 +0400 Subject: [PATCH 044/442] lib/libcoolstream: restore nevis headers --- lib/libcoolstream/audio_cs.h | 16 +-- lib/libcoolstream/ca_cs.h | 8 +- lib/libcoolstream/cnxtfb.h | 198 ++------------------------------ lib/libcoolstream/cs_api.h | 13 +-- lib/libcoolstream/cs_types.h | 9 -- lib/libcoolstream/dmx_cs.h | 10 +- lib/libcoolstream/mmi.h | 31 ----- lib/libcoolstream/playback_cs.h | 1 - lib/libcoolstream/pwrmngr.h | 4 +- lib/libcoolstream/video_cs.h | 81 ++++--------- 10 files changed, 43 insertions(+), 328 deletions(-) diff --git a/lib/libcoolstream/audio_cs.h b/lib/libcoolstream/audio_cs.h index a5aa5d866..b79689eab 100644 --- a/lib/libcoolstream/audio_cs.h +++ b/lib/libcoolstream/audio_cs.h @@ -56,7 +56,6 @@ typedef enum HDMI_AUDIO_FMT_ATRAC } HDMI_AUDIO_FORMAT; -#define CS_MAX_AUDIO_DECODERS 1 #define CS_MAX_AUDIO_FORMATS 10 typedef struct cs_audio_format { @@ -69,17 +68,10 @@ typedef struct cs_audio_caps { cs_audio_format_t formats[CS_MAX_AUDIO_FORMATS]; } cs_audio_caps_t; -class cDemux; -class cVideo; - class cAudio { private: - static cAudio *instance[CS_MAX_AUDIO_DECODERS]; - unsigned int unit; - cDemux *demux; - cVideo *video; CS_AUDIO_PDATA *privateData; - //unsigned int cEncodedDataOnSPDIF, cEncodedDataOnHDMI; + unsigned int cEncodedDataOnSPDIF, cEncodedDataOnHDMI; bool muted; AUDIO_FORMAT streamType; @@ -100,8 +92,6 @@ private: bool spdifDD; bool hasMuteScheduled; bool analogOut; - // - cAudio(unsigned int Unit); public: /* construct & destruct */ cAudio(void *hBuffer, void *encHD, void *encSD); @@ -158,10 +148,6 @@ public: bool GetHdmiAudioCaps(cs_audio_caps_t &caps); bool IsHdmiAudioFormatSupported(HDMI_AUDIO_FORMAT format); void SetHdmiDD(HDMI_ENCODED_MODE type); - bool IsHdmiDTSSupported(void); - void SetDemux(cDemux *Demux); - void SetVideo(cVideo *Video); - static cAudio *GetDecoder(unsigned int Unit); }; #endif //__AUDIO_CS_H_ diff --git a/lib/libcoolstream/ca_cs.h b/lib/libcoolstream/ca_cs.h index d7afc535f..b2aa613ca 100644 --- a/lib/libcoolstream/ca_cs.h +++ b/lib/libcoolstream/ca_cs.h @@ -11,8 +11,8 @@ #define __CA_CS_H_ #include -#include #include "cs_types.h" +#include enum CA_INIT_MASK { CA_INIT_SC = 1, @@ -23,7 +23,7 @@ enum CA_INIT_MASK { enum CA_SLOT_TYPE { CA_SLOT_TYPE_SMARTCARD, CA_SLOT_TYPE_CI, - CA_SLOT_TYPE_ALL, + CA_SLOT_TYPE_ALL }; enum CA_MESSAGE_FLAGS { @@ -49,7 +49,7 @@ enum CA_MESSAGE_FLAGS { CA_MESSAGE_HAS_PARAM1_LONG = (1 << 19), CA_MESSAGE_HAS_PARAM2_LONG = (1 << 20), CA_MESSAGE_HAS_PARAM3_LONG = (1 << 21), - CA_MESSAGE_HAS_PARAM4_LONG = (1 << 22), + CA_MESSAGE_HAS_PARAM4_LONG = (1 << 22) }; enum CA_MESSAGE_MSGID { @@ -72,7 +72,7 @@ enum CA_MESSAGE_MSGID { CA_MESSAGE_MSG_EMM_ARRIVED, CA_MESSAGE_MSG_CHANNEL_CHANGE, CA_MESSAGE_MSG_GUI_READY, - CA_MESSAGE_MSG_EXIT, + CA_MESSAGE_MSG_EXIT }; typedef struct CA_MESSAGE { diff --git a/lib/libcoolstream/cnxtfb.h b/lib/libcoolstream/cnxtfb.h index 1f5b34f70..15a47afc1 100644 --- a/lib/libcoolstream/cnxtfb.h +++ b/lib/libcoolstream/cnxtfb.h @@ -1,5 +1,3 @@ -#ifndef __CNXTFB_H__ -#define __CNXTFB_H__ /****************************************************************************/ /* $Id: ****************************************************************************/ @@ -16,22 +14,19 @@ /* assign an accelerator type (we have no official, so we do not add them to linux/fb.h */ -#define FB_ACCEL_PNX849X 0x90 /* Trident PNX849X */ - -struct fb_info; +#define FB_ACCEL_CX2450X 0x90 /* Trident CX2450X */ /* * structure which contains the image handle */ -typedef struct _cnxtfb_handles +typedef struct _cnxtfb_handle { void *hImage; - void *hVPP_SD; + void *hDRM_SD; void *hTvEnc_SD; - void *hVPP; + void *hDRM; void *hTvEnc; - void *hImage_SD; -} cnxtfb_handles; +} cnxtfb_handle; typedef struct _cnxtfb_resolution { @@ -40,193 +35,22 @@ typedef struct _cnxtfb_resolution } cnxtfb_resolution; -/* To use with ioctl FBIO_CHANGEOUTPUTFORMAT */ -typedef enum { - CNXTFB_VIDEO_STANDARD_ATSC_1080I = 0, - CNXTFB_VIDEO_STANDARD_NTSC_M, - CNXTFB_VIDEO_STANDARD_ATSC_480P, - CNXTFB_VIDEO_STANDARD_ATSC_720P, - CNXTFB_VIDEO_STANDARD_PAL_B_WEUR, - CNXTFB_VIDEO_STANDARD_SECAM_L, - CNXTFB_VIDEO_STANDARD_ATSC_576P, - CNXTFB_VIDEO_STANDARD_ATSC_720P_50HZ, - CNXTFB_VIDEO_STANDARD_ATSC_1080I_50HZ -} CNXTFB_VIDEO_STANDARD; - typedef enum { - CNXTFB_BLEND_MODE_PER_PIXEL = 0, - CNXTFB_BLEND_MODE_UNIFORM_ALPHA, - /* Reordered for compatability .. */ - CNXTFB_BLEND_MODE_ALPHA_MULTIPLIED, + CNXTFB_BLEND_MODE_GLOBAL_ALPHA = 0, /* Global / Region Alpha */ + CNXTFB_BLEND_MODE_PIXEL_ALPHA, /* Alpha from pixel */ + CNXTFB_BLEND_MODE_ALPHA_MULTIPLIED, /* Global alpha multiplied with pixel alpha */ } CNXTFB_BLEND_MODE; -typedef enum -{ - CNXTFB_INVALID = -1, - CNXTFB_480I = 0, - CNXTFB_480P, - CNXTFB_576I, - CNXTFB_576P, - CNXTFB_720P, - CNXTFB_720P_50, - CNXTFB_1080I, - CNXTFB_1080I_50, - CNXTFB_1080P, - CNXTFB_1080P_50, - CNXTFB_1080P_24, - CNXTFB_1080P_25, - CNXTFB_DISPLAY_MODE_LAST = CNXTFB_1080P_25, -} cnxtfb_displaymode; - -typedef enum -{ - CNXTFB_TYPE_SD = 1, /* 1 << 0 */ - CNXTFB_TYPE_HD = 2 /* 1 << 1 */ -} CNXTFB_FB_TYPE; - -typedef struct -{ - unsigned char Type; /* Bitmask of type CNXTFB_FB_TYPE */ - cnxtfb_displaymode SDMode; - cnxtfb_displaymode HDMode; -} CNXTFB_OUTPUT_FORMAT_CHANGE; - -/* - * structure which contains the image handle - */ -typedef struct _cnxtfb_handle -{ - /* CNXT_IMAGE_HANDLE hImage; */ - void *hImage; -} cnxtfb_handle; - -typedef enum -{ - CNXTFB_VSYNC_NOTIFICATION = 0x1000, - CNXTFB_BUF_REELASE_NOTIFICATION, - CNXTFB_DISPLAY_MODE_NOTIFICATION -}cnxtfb_event; - -typedef struct -{ - u8 uRed; - u8 uGreen; - u8 uBlue; - u8 uAlpha; -} CNXTFB_RGB_COLOR; - -typedef struct -{ - u8 uY; - u8 uCb; - u8 uCr; - u8 uAlpha; -} CNXTFB_YCC_COLOR; - -typedef enum -{ - CNXTFB_COLOR_RGB = 0, /* RGB format */ - CNXTFB_COLOR_YCC, /* YCC format */ - CNXTFB_COLOR_PAL_INDEX, /* Palette index or u_int32 representation of color*/ - CNXTFB_COLOR_TYPE_LAST = CNXTFB_COLOR_PAL_INDEX -} CNXTFB_COLOR_TYPE; - -typedef union -{ - u_int32_t uValue; /* Palette index or u_int32 representation of color */ - CNXTFB_RGB_COLOR RGB; - CNXTFB_YCC_COLOR YCC; -} CNXTFB_COLOR_ENTRY; - -typedef enum -{ - CNXTFB_YCC_BASIC = 0, /* Pure YCbCr for MPEG-1 decodes */ - CNXTFB_YCC_SD_BT470, /* ITU-R BT470-2 System M */ - CNXTFB_YCC_SD_BT470_BG, /* ITU-R BT470-2 System B/G */ - CNXTFB_YCC_SMPTE_170M, /* SMPTE 170M */ - CNXTFB_YCC_SMPTE_240M, /* SMPTE 240M */ - CNXTFB_YCC_GEN_FILM, /* Generic Film(Color filters using Illuminant C) */ - CNXTFB_YCC_HD_BT709, - CNXTFB_RGB, - CNXTFB_COLOR_SPACE_LAST = CNXTFB_RGB -} CNXTFB_COLOR_SPACE; - -typedef struct -{ - CNXTFB_COLOR_SPACE ColorSpace; - CNXTFB_COLOR_ENTRY Color; -} CNXTFB_COLOR_SPEC; - - -/* Enumeration for types of chroma key configurations. */ -typedef enum -{ - CNXTFB_REGION_CHROMAKEY_SRC, - CNXTFB_REGION_CHROMAKEY_DST -} CNXTFB_REGION_CHROMAKEY_TYPE; - -typedef struct -{ - CNXTFB_COLOR_SPEC ColorKeyLower; - CNXTFB_COLOR_SPEC ColorKeyUpper; -} CNXTFB_REGION_CHROMAKEY_CFG; - -typedef struct _cnxtfb_chromakey_cfg{ - bool bEnable; - CNXTFB_REGION_CHROMAKEY_TYPE Type; - CNXTFB_REGION_CHROMAKEY_CFG *pCfg; -} cnxtfb_chromakey_cfg; - -typedef void (*cnxtfb_notify)(cnxtfb_event event, void *cookie); - -extern void cnxtfb_register_client(struct fb_info *fb_info, cnxtfb_notify pfnotify, void *cookie); -extern void cnxtfb_get_image_handle(struct fb_info *fb_info, void **phImage); -extern void cnxtfb_get_handles(struct fb_info *fb_info, cnxtfb_handles *phandles); -extern void cnxtfb_register_evnt_clbk(cnxtfb_notify pfnotify); - #define CNXTFB_IO(type) _IO('F', type) #define CNXTFB_IOW(type, dtype) _IOW('F', type, dtype) #define CNXTFB_IOR(type, dtype) _IOR('F', type, dtype) - -#define FB_TEST_HW_ACCELERATION - -#define FBIOGET_CNXTFBHANDLE 0x4620 -#define FBIO_WAITFORVSYNC 0x4621 -#define FBIO_STARTDISPLAY 0x4622 -#define FBIO_STOPDISPLAY 0x4623 -#define FBIO_SETBLENDMODE 0x4624 -#define FBIO_CHANGEOUTPUTFORMAT 0x4625 -#define FBIO_GETFBRESOLUTION 0x4626 - -#ifdef FB_TEST_HW_ACCELERATION -#define FBIO_FILL_RECT 0x4627 -#define FBIO_COPY_AREA 0x4628 -#define FBIO_IMAGE_BLT 0x4629 -#define FBIO_STRETCH_COPY 0x4630 -#endif - -#define FBIO_SETOPACITY 0x4631 -#define FBIO_FLIPBUFFER 0x4632 - -#ifdef FB_TEST_HW_ACCELERATION -#define FBIO_JPEG_RENDER 0x4633 -#endif - -#define FBIO_SCALE_SD_OSD 0x4634 -#define FBIO_CHROMAKEY_CFG 0x4635 -#define FBIO_DELAY_BUF_RELEASE 0x4636 -/* CST Mod */ -#define FBIO_GETCNXTFBHANDLES 0x4640 - - -#if 0 #ifndef FBIO_WAITFORVSYNC #define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t) #endif -#define FBIO_GETCNXTFBHANDLE CNXTFB_IOR(0x21, cnxtfb_handle) // 0x4620 +#define FBIO_GETCNXTFBHANDLE CNXTFB_IOR(0x21, cnxtfb_handle) #define FBIO_STARTDISPLAY CNXTFB_IO(0x22) #define FBIO_STOPDISPLAY CNXTFB_IO(0x23) #define FBIO_SETOPACITY CNXTFB_IOW(0x24, u_int8_t) @@ -234,13 +58,9 @@ extern void cnxtfb_register_evnt_clbk(cnxtfb_notify pfnotify); #define FBIO_CHANGEOUTPUTFORMAT CNXTFB_IOW(0x26, u_int32_t) #define FBIO_GETFBRESOLUTION CNXTFB_IOR(0x27, cnxtfb_resolution) #define FBIO_SETFLICKERFILTER CNXTFB_IOW(0x28, u_int8_t) -#define FBIO_SCALE_SD_OSD CNXTFB_IO(0x28) #ifdef FB_TEST_HW_ACCELERATION #define FBIO_FILL_RECT CNXTFB_IOW(0x29, struct fb_fillrect) #define FBIO_COPY_AREA CNXTFB_IOW(0x2a, struct fb_copyarea) #define FBIO_IMAGE_BLT CNXTFB_IOW(0x2b, struct fb_image) #endif -#endif - -#endif /* __CNXTFB_H__ */ diff --git a/lib/libcoolstream/cs_api.h b/lib/libcoolstream/cs_api.h index 9ae38a702..98c7430c0 100644 --- a/lib/libcoolstream/cs_api.h +++ b/lib/libcoolstream/cs_api.h @@ -5,15 +5,12 @@ /* */ /* (C) 2010 CoolStream International */ /* */ -/* $Id:: $ */ /*******************************************************************************/ #ifndef __CS_API_H_ #define __CS_API_H_ -#include +#include #include -#include -#include typedef void (*cs_messenger) (unsigned int msg, unsigned int data); @@ -33,7 +30,7 @@ enum CS_LOG_MODULE { CS_LOG_POWER_CLK, CS_LOG_MEM, CS_LOG_API, - CS_LOG_CA, + CS_LOG_CA }; // Initialization @@ -61,18 +58,12 @@ void cs_log_module_message(enum CS_LOG_MODULE module, const char *fmt, ...); // TS Routing unsigned int cs_get_ts_output(void); int cs_set_ts_output(unsigned int port); -int cs_set_ts_ci_clock(unsigned int speed); -int cs_get_ts_ci_clock(unsigned int *speed); int cs_set_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); int cs_get_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); -int cs_set_tsp_config(unsigned int port, tsrouter_tsp_config_t *tsp_config); -int cs_get_tsp_config(unsigned int port, tsrouter_tsp_config_t *tsp_config); // Serial nr and revision accessors unsigned long long cs_get_serial(void); unsigned int cs_get_revision(void); -unsigned int cs_get_chip_id(void); -unsigned int cs_get_chip_rev_id(void); #endif //__CS_API_H_ diff --git a/lib/libcoolstream/cs_types.h b/lib/libcoolstream/cs_types.h index fae6d086d..a0e17abd4 100644 --- a/lib/libcoolstream/cs_types.h +++ b/lib/libcoolstream/cs_types.h @@ -1,12 +1,3 @@ -/*******************************************************************************/ -/* */ -/* libcoolstream/cs_types.h */ -/* Public header file for CoolStream Public API */ -/* */ -/* (C) 2010 CoolStream International */ -/* */ -/* $Id:: $ */ -/*******************************************************************************/ #ifndef __CS_TYPES_H_ #define __CS_TYPES_H_ diff --git a/lib/libcoolstream/dmx_cs.h b/lib/libcoolstream/dmx_cs.h index e80a29204..b74bb528e 100644 --- a/lib/libcoolstream/dmx_cs.h +++ b/lib/libcoolstream/dmx_cs.h @@ -11,8 +11,6 @@ #define __DEMUX_CS_H_ #include - -#include #include "cs_types.h" #define DEMUX_POLL_TIMEOUT 0 // timeout in ms @@ -36,12 +34,8 @@ typedef enum { } DMX_CHANNEL_TYPE; class cDemuxData; -class cVideo; -class cAudio; class cDemux { -friend class cVideo; -friend class cAudio; private: DMX_CHANNEL_TYPE type; int timeout; @@ -60,8 +54,6 @@ public: bool Start(bool record = false); bool Stop(void); int Read(unsigned char *buff, int len, int Timeout = 0); - - bool SetVideoFormat(VIDEO_FORMAT VideoFormat); bool SetSource(int source); bool sectionFilter(unsigned short Pid, const unsigned char * const Tid, const unsigned char * const Mask, int len, int Timeout = DEMUX_POLL_TIMEOUT, const unsigned char * const nMask = NULL); @@ -72,7 +64,7 @@ public: void SetSyncMode(AVSYNC_TYPE SyncMode); void *getBuffer(void); void *getChannel(void); - void getSTC(s64 *STC); + void getSTC(int64_t *STC); DMX_CHANNEL_TYPE getChannelType(void) { return type; }; int getUnit(void) { return unit; }; diff --git a/lib/libcoolstream/mmi.h b/lib/libcoolstream/mmi.h index 96266ea44..76ff99279 100644 --- a/lib/libcoolstream/mmi.h +++ b/lib/libcoolstream/mmi.h @@ -1,12 +1,3 @@ -/*******************************************************************************/ -/* */ -/* libcoolstream/mmi.h */ -/* Public header file for CoolStream Public CA MMI API */ -/* */ -/* (C) 2010 CoolStream International */ -/* */ -/* $Id:: $ */ -/*******************************************************************************/ #ifndef __MMI_H_ #define __MMI_H_ @@ -14,28 +5,6 @@ #define MAX_MMI_TEXT_LEN 255 #define MAX_MMI_CHOICE_TEXT_LEN 255 -typedef enum { - MMI_TOP_MENU_SUBS = 1, - MMI_TOP_MENU_EVENTS, - MMI_TOP_MENU_TOKENS, - MMI_TOP_MENU_PIN, - MMI_TOP_MENU_MATURE, - MMI_TOP_MENU_ABOUT -} MMI_MENU_CURRENT; - -typedef enum { - MMI_MENU_LEVEL_MAIN = 0, - MMI_MENU_LEVEL_MATURE, - MMI_MENU_LEVEL_ASK_PIN_MATURE -} MMI_MENU_LEVEL; - -typedef enum { - MMI_PIN_LEVEL_ASK_OLD = 0, - MMI_PIN_LEVEL_CHECK_CURRENT, - MMI_PIN_LEVEL_ASK_REPEAT, - MMI_PIN_LEVEL_CHECK_AND_CHANGE -} MMI_PIN_LEVEL; - typedef struct { int choice_nb; char title[MAX_MMI_TEXT_LEN]; diff --git a/lib/libcoolstream/playback_cs.h b/lib/libcoolstream/playback_cs.h index 80ecb4ccd..a9192bfdc 100644 --- a/lib/libcoolstream/playback_cs.h +++ b/lib/libcoolstream/playback_cs.h @@ -11,7 +11,6 @@ #define __PLAYBACK_CS_H_ #include -#include typedef enum { PLAYMODE_TS = 0, diff --git a/lib/libcoolstream/pwrmngr.h b/lib/libcoolstream/pwrmngr.h index 2a59d0ae9..f0973c772 100644 --- a/lib/libcoolstream/pwrmngr.h +++ b/lib/libcoolstream/pwrmngr.h @@ -5,7 +5,6 @@ /* */ /* (C) 2010 CoolStream International */ /* */ -/* $Id:: $ */ /*******************************************************************************/ #ifndef __PWRMNGR_H_ #define __PWRMNGR_H_ @@ -27,7 +26,7 @@ public: unsigned long GetDelta(void); // cCpuFreqManager(void); - ~cCpuFreqManager(); + }; // -- cPowerManageger ---------------------------------------------------------- @@ -46,6 +45,7 @@ private: bool opened; PWR_STATE powerState; // + static void ApplicationCallback(void * /*hHandle*/, void */*pUserData*/, signed long /*eEvent*/, void */*pEventData*/, void */*pTag*/) {} bool SetState(PWR_STATE PowerState); public: bool Open(void); diff --git a/lib/libcoolstream/video_cs.h b/lib/libcoolstream/video_cs.h index 52946dd0c..251ec4058 100644 --- a/lib/libcoolstream/video_cs.h +++ b/lib/libcoolstream/video_cs.h @@ -5,60 +5,38 @@ /* */ /* (C) 2008 CoolStream International */ /* */ -/* $Id:: $ */ /*******************************************************************************/ #ifndef __VIDEO_CS_H_ #define __VIDEO_CS_H_ -#include -#include +#include +#include #include "cs_types.h" -#define CS_MAX_VIDEO_DECODERS 16 - #ifndef CS_VIDEO_PDATA #define CS_VIDEO_PDATA void #endif typedef enum { - // Video modes - ANALOG_xD_CVBS = (1 << 0), // Turns off fastblank on SCART - ANALOG_SD_RGB = (1 << 1), // Output SD in RGB format - ANALOG_SD_YPRPB = (1 << 2), // Output SD in YPbPr format (component) - ANALOG_HD_RGB = (1 << 3), // Output HD in RGB format - ANALOG_HD_YPRPB = (1 << 4), // Output HD in YPbPr format (component) - // Output types - ANALOG_xD_SCART = (1 << 8), // Output is SCART - ANALOG_xD_CINCH = (1 << 9), // Output is Cinch - ANALOG_xD_BOTH = (3 << 8), // Output cannot individually control scart, cinch outputs - // due to limited amount of DACs (ie TANK, Trinity) + ANALOG_SD_RGB_CINCH = 0x00, + ANALOG_SD_YPRPB_CINCH, + ANALOG_HD_RGB_CINCH, + ANALOG_HD_YPRPB_CINCH, + ANALOG_SD_RGB_SCART = 0x10, + ANALOG_SD_YPRPB_SCART, + ANALOG_HD_RGB_SCART, + ANALOG_HD_YPRPB_SCART, + ANALOG_SCART_MASK = 0x10 } analog_mode_t; -#define ANALOG_MODE(conn, def, sys) (ANALOG_##def##_##sys | ANALOG_xD_##conn) - -typedef enum -{ +typedef enum { VIDEO_FORMAT_MPEG2 = 0, - VIDEO_FORMAT_MPEG4, /* H264 */ + VIDEO_FORMAT_MPEG4, VIDEO_FORMAT_VC1, VIDEO_FORMAT_JPEG, VIDEO_FORMAT_GIF, - VIDEO_FORMAT_PNG, - VIDEO_FORMAT_DIVX,/* DIVX 3.11 */ - VIDEO_FORMAT_MPEG4PART2,/* MPEG4 SVH, MPEG4 SP, MPEG4 ASP, DIVX4,5,6 */ - VIDEO_FORMAT_REALVIDEO8, - VIDEO_FORMAT_REALVIDEO9, - VIDEO_FORMAT_ON2_VP6, - VIDEO_FORMAT_ON2_VP8, - VIDEO_FORMAT_SORENSON_SPARK, - VIDEO_FORMAT_H263, - VIDEO_FORMAT_H263_ENCODER, - VIDEO_FORMAT_H264_ENCODER, - VIDEO_FORMAT_MPEG4PART2_ENCODER, - VIDEO_FORMAT_AVS, - VIDEO_FORMAT_VIP656, - VIDEO_FORMAT_UNSUPPORTED + VIDEO_FORMAT_PNG } VIDEO_FORMAT; typedef enum { @@ -144,17 +122,10 @@ typedef enum VIDEO_CONTROL_MAX = VIDEO_CONTROL_SHARPNESS } VIDEO_CONTROL; -class cDemux; -class cAudio; - class cVideo { -friend class cAudio; private: - static cVideo *instance[CS_MAX_VIDEO_DECODERS]; - - unsigned int unit; CS_VIDEO_PDATA *privateData; - VIDEO_FORMAT streamType; + VIDEO_FORMAT StreamType; VIDEO_DEFINITION VideoDefinition; DISPLAY_AR DisplayAR; VIDEO_PLAY_MODE playMode; @@ -165,7 +136,7 @@ private: VIDEO_FRAME_RATE FrameRate; VIDEO_HDMI_CEC_MODE hdmiCECMode; bool Interlaced; - unsigned int uVPPDisplayDelay; + unsigned int uDRMDisplayDelay; unsigned int uVideoPTSDelay; int StcPts; bool started; @@ -175,23 +146,21 @@ private: bool auto_format; int uFormatIndex; bool vbi_started; - bool receivedVPPDelay; + bool receivedDRMDelay; bool receivedVideoDelay; int cfd; // control driver fd analog_mode_t analog_mode_cinch; analog_mode_t analog_mode_scart; - fp_icon mode_icon; - cDemux *demux; + vfd_icon mode_icon; // int SelectAutoFormat(); void ScalePic(); - cVideo(unsigned int Unit); public: /* constructor & destructor */ cVideo(int mode, void * hChannel, void * hBuffer); ~cVideo(void); - void * GetVPP(void); + void * GetDRM(void); void * GetTVEnc(); void * GetTVEncSD(); void * GetHandle(); @@ -209,7 +178,7 @@ public: /* stream source */ int getSource(void); int setSource(void); - int GetStreamType(void); + int GetStreamType(void) { return StreamType; }; /* blank on freeze */ int getBlank(void); @@ -217,10 +186,10 @@ public: /* get play state */ int getPlayState(void); - void SetVPPDelay(unsigned int delay) { uVPPDisplayDelay = delay;}; + void SetDRMDelay(unsigned int delay) { uDRMDisplayDelay = delay;}; void SetVideoDelay(unsigned int delay) { uVideoPTSDelay = delay;}; /* Notification handlers */ - void HandleVPPMessage(int Event, void *pData); + void HandleDRMMessage(int Event, void *pData); void HandleVideoMessage(void * hHandle, int Event, void *pData); void HandleEncoderMessage(void *hHandle, int Event, void *pData); VIDEO_DEFINITION GetVideoDef(void) { return VideoDefinition; } @@ -247,9 +216,9 @@ public: void Standby(bool bOn); void Pig(int x, int y, int w, int h, int osd_w = 1064, int osd_h = 600); void SetControl(int num, int val); - bool ReceivedVPPDelay(void) { return receivedVPPDelay; } + bool ReceivedDRMDelay(void) { return receivedDRMDelay; } bool ReceivedVideoDelay(void) { return receivedVideoDelay; } - void SetReceivedVPPDelay(bool Received) { receivedVPPDelay = Received; } + void SetReceivedDRMDelay(bool Received) { receivedDRMDelay = Received; } void SetReceivedVideoDelay(bool Received) { receivedVideoDelay = Received; } void SetFastBlank(bool onoff); void SetTVAV(bool onoff); @@ -262,8 +231,6 @@ public: int StartVBI(unsigned short pid); int StopVBI(void); bool GetScreenImage(unsigned char * &data, int &xres, int &yres, bool get_video = true, bool get_osd = false, bool scale_to_video = false); - void SetDemux(cDemux *Demux); - static cVideo *GetDecoder(unsigned int Unit); }; #endif // __VIDEO_CS_H_ From 2aea312e7b8de2c47d930b351fababd9be556eba Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 14:02:20 +0400 Subject: [PATCH 045/442] cross-configure.apollo.debug: add boxmodel --- cross-configure.apollo.debug | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cross-configure.apollo.debug b/cross-configure.apollo.debug index 190dfdafb..ba8444848 100755 --- a/cross-configure.apollo.debug +++ b/cross-configure.apollo.debug @@ -14,12 +14,12 @@ export STRIP=$CCPATH$HOST-strip export CFLAGS="-Wall -Wextra -Wshadow -g -ggdb3 \ -mcpu=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=hard \ - -D__KERNEL_STRICT_NAMES -DISAPOLLO -DFB_HW_ACCELERATION \ + -D__KERNEL_STRICT_NAMES -DFB_HW_ACCELERATION \ -I"$PWD"/include -I"$PWD"/include/linux/dvb -I"$PREFIX"/include/freetype2" export CXXFLAGS="-Wall -Wextra -Wshadow -g -ggdb3 \ -mcpu=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=hard \ - -D__KERNEL_STRICT_NAMES -DISAPOLLO -DFB_HW_ACCELERATION \ + -D__KERNEL_STRICT_NAMES -DFB_HW_ACCELERATION \ -I"$PWD"/include -I"$PWD"/include/linux/dvb -I"$PREFIX"/include/freetype2" export LDFLAGS="-L"$PREFIX"/lib -lcurl -lssl -lcrypto -ldl" @@ -29,5 +29,5 @@ export FREETYPE_CONFIG=$PREFIX/bin/freetype-config export CURL_CONFIG=$PREFIX/bin/curl-config ./autogen.sh -./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --enable-flac --with-target=cdk --with-targetprefix="" --enable-mdev "$*" +./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --enable-flac --with-target=cdk --with-targetprefix="" --with-boxmodel=apollo --enable-mdev "$*" From 63807632099f49f3f3041b7c637e0d11dd2762bb Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 14:04:07 +0400 Subject: [PATCH 046/442] src/driver/rcinput.cpp: change ifdefs for headers and set_rc_hw --- src/driver/rcinput.cpp | 2 +- src/driver/rcinput.h | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 070c24fab..43288e0c6 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -1574,7 +1574,7 @@ void CRCInput::play_click() } -#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H +#ifdef IOC_IR_SET_PRI_PROTOCOL // hint: ir_protocol_t and other useful things are defined in cs_ir_generic.h void CRCInput::set_rc_hw(ir_protocol_t ir_protocol, unsigned int ir_address) { diff --git a/src/driver/rcinput.h b/src/driver/rcinput.h index 5a88f0d48..64231c877 100644 --- a/src/driver/rcinput.h +++ b/src/driver/rcinput.h @@ -41,6 +41,9 @@ #ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H #include #endif +#ifdef HAVE_COOLSTREAM_NEVIS_IR_H +#include +#endif #ifndef KEY_OK #define KEY_OK 0x160 @@ -152,7 +155,7 @@ class CRCInput int translate(int code, int num); void calculateMaxFd(void); int checkTimers(); -#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H +#ifdef IOC_IR_SET_PRI_PROTOCOL void set_rc_hw(ir_protocol_t ir_protocol, unsigned int ir_address); #endif public: From c9bf61511ba7b1ef109562579acdc0ff0c319fa0 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 14:04:48 +0400 Subject: [PATCH 047/442] src/gui/keybind_setup.cpp: change ifdef for RC_HW_SELECT --- src/gui/keybind_setup.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/gui/keybind_setup.cpp b/src/gui/keybind_setup.cpp index 8ef889b29..478602188 100644 --- a/src/gui/keybind_setup.cpp +++ b/src/gui/keybind_setup.cpp @@ -33,20 +33,6 @@ #include #endif -#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H -/* define constants instead of #ifdef'ing the corresponding code. - * the compiler will optimize it away anyway, but the syntax is - * still checked */ -#define RC_HW_SELECT true -#else -#define RC_HW_SELECT false -#ifdef HAVE_COOL_HARDWARE -#warning header coolstream/cs_ir_generic.h not found -#warning you probably have an old driver installation -#warning you´ll be missing the remotecontrol selection feature! -#endif -#endif - #include "keybind_setup.h" #include @@ -65,6 +51,19 @@ #include +#ifdef IOC_IR_SET_PRI_PROTOCOL +/* define constants instead of #ifdef'ing the corresponding code. + * the compiler will optimize it away anyway, but the syntax is + * still checked */ +#define RC_HW_SELECT true +#else +#define RC_HW_SELECT false +#ifdef HAVE_COOL_HARDWARE +#warning header coolstream/cs_ir_generic.h not found +#warning you probably have an old driver installation +#warning you´ll be missing the remotecontrol selection feature! +#endif +#endif CKeybindSetup::CKeybindSetup() { From bc0c0fb361c45c4228b1714b123f4145cc5a638f Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 14:05:16 +0400 Subject: [PATCH 048/442] src/gui/videosettings.cpp: ifdef for video modes --- src/gui/videosettings.cpp | 44 +++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index d02e8d161..f2aa163b9 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -104,6 +104,7 @@ const CMenuOptionChooser::keyval VIDEOMENU_43MODE_OPTIONS[VIDEOMENU_43MODE_OPTIO //{ 2, LOCALE_VIDEOMENU_AUTO } // whatever is this auto mode, it seems its totally broken }; +#ifdef ANALOG_MODE #define VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT 8 const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT] = { @@ -117,7 +118,6 @@ const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1_OPTIONS[VIDEOMENU_VID { ANALOG_MODE(CINCH,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } }; -#ifdef ISAPOLLO #define VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT 4 const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_TANK_OPTIONS[VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT] = { @@ -126,7 +126,6 @@ const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_TANK_OPTIONS[VIDEOMENU_VI { ANALOG_MODE(BOTH ,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB }, /* */ { ANALOG_MODE(BOTH ,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB }, /* */ }; -#endif #define VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT 4 const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT] = @@ -137,13 +136,6 @@ const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS[VID { ANALOG_MODE(SCART,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, }; -// #define VIDEOMENU_VCRSIGNAL_OPTION_COUNT 2 -// const CMenuOptionChooser::keyval VIDEOMENU_VCRSIGNAL_OPTIONS[VIDEOMENU_VCRSIGNAL_OPTION_COUNT] = -// { -// { 2, LOCALE_VIDEOMENU_VCRSIGNAL_SVIDEO }, -// { 0, LOCALE_VIDEOMENU_VCRSIGNAL_COMPOSITE } -// }; - #define VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT 4 const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT] = { @@ -152,6 +144,38 @@ const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTIONS[VID { ANALOG_MODE(CINCH,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, { ANALOG_MODE(CINCH,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } }; +#else +#define VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT 8 +const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT] = +{ + { ANALOG_SD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART }, /* composite + RGB (for both SCART and Cinch) */ + { ANALOG_SD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ + { ANALOG_SD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART }, /* YPbPr SCART (with wrongly connected Cinch) */ + { ANALOG_SD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH }, /* YPbPr Cinch (with wrongly connected SCART) */ + { ANALOG_HD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_RGB_SCART }, + { ANALOG_HD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, + { ANALOG_HD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, + { ANALOG_HD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } +}; + +#define VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT 4 +const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT] = +{ + { ANALOG_SD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART }, /* composite + RGB */ + { ANALOG_SD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART }, /* YPbPr SCART */ + { ANALOG_HD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_RGB_SCART }, + { ANALOG_HD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, +}; + +#define VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT 4 +const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT] = +{ + { ANALOG_SD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ + { ANALOG_SD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH }, /* YPbPr Cinch (with wrongly connected SCART) */ + { ANALOG_HD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, + { ANALOG_HD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } +}; +#endif /* numbers corresponding to video.cpp from zapit */ CMenuOptionChooser::keyval_ext VIDEOMENU_VIDEOMODE_OPTIONS[VIDEOMENU_VIDEOMODE_OPTION_COUNT] = @@ -207,8 +231,10 @@ int CVideoSettings::showVideoSetup() else if (system_rev > 0x06) { if (system_rev == 9) { +#ifdef ANALOG_MODE vs_analg_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_ANALOG_MODE, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_TANK_OPTIONS, VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT, true, this); vs_analg_ch->setHint("", LOCALE_MENU_HINT_VIDEO_ANALOG_MODE); +#endif } else { if(system_rev != 10) { vs_scart_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_SCART, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT, true, this); From 1413177ad164482c2e3a197ea8ef91288c39f4ff Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 14:16:26 +0400 Subject: [PATCH 049/442] driver/rcinput.h: try to fix libcs headers --- src/driver/rcinput.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/driver/rcinput.h b/src/driver/rcinput.h index 64231c877..1591461d4 100644 --- a/src/driver/rcinput.h +++ b/src/driver/rcinput.h @@ -38,12 +38,16 @@ #include #include #include + +#ifdef BOXMODEL_APOLLO #ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H -#include +#include #endif +#else #ifdef HAVE_COOLSTREAM_NEVIS_IR_H #include #endif +#endif #ifndef KEY_OK #define KEY_OK 0x160 From 185abd1a64d2fd5b234bc137e06eabb0ea302ff8 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 14:16:57 +0400 Subject: [PATCH 050/442] driver/vfd.h: try to fix libcs headers --- src/driver/vfd.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/driver/vfd.h b/src/driver/vfd.h index 5de521eb1..3047bf8d0 100644 --- a/src/driver/vfd.h +++ b/src/driver/vfd.h @@ -42,7 +42,11 @@ #include #include -#include +#ifdef BOXMODEL_APOLLO +#include +#else +#include +#endif class CVFD { From d3d2efe475e1c7109fb82e959837454d0f8d9a46 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 14:17:16 +0400 Subject: [PATCH 051/442] Makefiles.am: add conditional include for libcoolstream --- lib/libdvbsub/Makefile.am | 4 ++++ lib/libtuxtxt/Makefile.am | 5 +++++ src/Makefile.am | 12 ++++++++++-- src/daemonc/Makefile.am | 4 ++++ src/driver/Makefile.am | 7 +++++-- src/driver/audiodec/Makefile.am | 4 ++++ src/driver/pictureviewer/Makefile.am | 4 ++++ src/eitd/Makefile.am | 4 ++++ src/gui/Makefile.am | 5 +++++ src/gui/bedit/Makefile.am | 8 +++++++- src/gui/widget/Makefile.am | 5 +++++ src/nhttpd/tuxboxapi/coolstream/Makefile.am | 4 ++++ src/system/Makefile.am | 4 ++++ src/zapit/src/Makefile.am | 4 ++++ src/zapit/src/zapit.cpp | 7 +++++++ 15 files changed, 76 insertions(+), 5 deletions(-) diff --git a/lib/libdvbsub/Makefile.am b/lib/libdvbsub/Makefile.am index 2158f8db9..ae9ce161c 100644 --- a/lib/libdvbsub/Makefile.am +++ b/lib/libdvbsub/Makefile.am @@ -5,8 +5,12 @@ INCLUDES = \ -I$(top_srcdir)/src/zapit/include if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif diff --git a/lib/libtuxtxt/Makefile.am b/lib/libtuxtxt/Makefile.am index 827282d3f..8c3a80248 100644 --- a/lib/libtuxtxt/Makefile.am +++ b/lib/libtuxtxt/Makefile.am @@ -6,8 +6,13 @@ INCLUDES = \ $(FREETYPE_CFLAGS) if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif + if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif diff --git a/src/Makefile.am b/src/Makefile.am index 500996bad..2111f4ad4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -19,8 +19,12 @@ INCLUDES = \ @LIBCS_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if BOXTYPE_TRIPLE SUBDIRS += lcddisplay INCLUDES += -I$(top_srcdir)/lib/libtriple @@ -105,8 +109,12 @@ neutrino_LDADD += \ endif if BOXTYPE_COOL -neutrino_LDADD += \ - -lcoolstream-mt +neutrino_LDADD += -lcoolstream-mt +if ENABLE_TMSDK +else +neutrino_LDADD += -lnxp +endif + bin_PROGRAMS += drivertool diff --git a/src/daemonc/Makefile.am b/src/daemonc/Makefile.am index 076234a8e..bd22d2282 100644 --- a/src/daemonc/Makefile.am +++ b/src/daemonc/Makefile.am @@ -13,8 +13,12 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif diff --git a/src/driver/Makefile.am b/src/driver/Makefile.am index 1216726f1..7fe05bdea 100644 --- a/src/driver/Makefile.am +++ b/src/driver/Makefile.am @@ -42,8 +42,11 @@ if BOXTYPE_COOL libneutrino_driver_a_SOURCES += \ vfd.cpp -INCLUDES += \ - -I$(top_srcdir)/lib/libcoolstream +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else +INCLUDES += -I$(top_srcdir)/lib/libcoolstream +endif endif if BOXTYPE_TRIPLE libneutrino_driver_a_SOURCES += \ diff --git a/src/driver/audiodec/Makefile.am b/src/driver/audiodec/Makefile.am index c21b2c4d0..7062712bd 100644 --- a/src/driver/audiodec/Makefile.am +++ b/src/driver/audiodec/Makefile.am @@ -12,8 +12,12 @@ INCLUDES = \ @VORBISIDEC_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif diff --git a/src/driver/pictureviewer/Makefile.am b/src/driver/pictureviewer/Makefile.am index c70fcf859..f5aab0692 100644 --- a/src/driver/pictureviewer/Makefile.am +++ b/src/driver/pictureviewer/Makefile.am @@ -10,8 +10,12 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif diff --git a/src/eitd/Makefile.am b/src/eitd/Makefile.am index c151cd6b2..d583d3081 100644 --- a/src/eitd/Makefile.am +++ b/src/eitd/Makefile.am @@ -10,8 +10,12 @@ INCLUDES = \ -I$(top_srcdir)/lib/xmltree if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am index 39c5967a5..3c9715b7c 100644 --- a/src/gui/Makefile.am +++ b/src/gui/Makefile.am @@ -36,8 +36,13 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif + if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif diff --git a/src/gui/bedit/Makefile.am b/src/gui/bedit/Makefile.am index d7293662f..871b56919 100644 --- a/src/gui/bedit/Makefile.am +++ b/src/gui/bedit/Makefile.am @@ -8,10 +8,16 @@ INCLUDES = \ -I$(top_srcdir)/lib \ -I$(top_srcdir)/lib/libeventserver \ -I$(top_srcdir)/lib/libconfigfile \ - -I$(top_srcdir)/lib/libcoolstream \ -I$(top_srcdir)/lib/xmltree \ @FREETYPE_CFLAGS@ +if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else +INCLUDES += -I$(top_srcdir)/lib/libcoolstream +endif +endif noinst_LIBRARIES = libneutrino_gui_bedit.a diff --git a/src/gui/widget/Makefile.am b/src/gui/widget/Makefile.am index 4b12dbb6a..c6f89db41 100644 --- a/src/gui/widget/Makefile.am +++ b/src/gui/widget/Makefile.am @@ -11,8 +11,13 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif + if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif diff --git a/src/nhttpd/tuxboxapi/coolstream/Makefile.am b/src/nhttpd/tuxboxapi/coolstream/Makefile.am index f26f6d934..863663fe6 100644 --- a/src/nhttpd/tuxboxapi/coolstream/Makefile.am +++ b/src/nhttpd/tuxboxapi/coolstream/Makefile.am @@ -16,8 +16,12 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif diff --git a/src/system/Makefile.am b/src/system/Makefile.am index 1e42f4a63..081507c44 100644 --- a/src/system/Makefile.am +++ b/src/system/Makefile.am @@ -15,8 +15,12 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif diff --git a/src/zapit/src/Makefile.am b/src/zapit/src/Makefile.am index b63a0641f..970b026f4 100644 --- a/src/zapit/src/Makefile.am +++ b/src/zapit/src/Makefile.am @@ -12,8 +12,12 @@ INCLUDES = \ -I$(top_srcdir)/lib/xmltree if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index 8e29bad9a..29a623305 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -2036,6 +2036,7 @@ bool CZapit::Start(Z_start_arg *ZapStart_arg) audioDemux = new cDemux(); audioDemux->Open(DMX_AUDIO_CHANNEL); +#ifdef BOXMODEL_APOLLO videoDecoder = cVideo::GetDecoder(0); audioDecoder = cAudio::GetDecoder(0); @@ -2045,6 +2046,12 @@ bool CZapit::Start(Z_start_arg *ZapStart_arg) audioDecoder->SetDemux(audioDemux); audioDecoder->SetVideo(videoDecoder); +#else + videoDecoder = new cVideo(video_mode, videoDemux->getChannel(), videoDemux->getBuffer()); + videoDecoder->Standby(false); + + audioDecoder = new cAudio(audioDemux->getBuffer(), videoDecoder->GetTVEnc(), NULL /*videoDecoder->GetTVEncSD()*/); +#endif videoDecoder->SetAudioHandle(audioDecoder->GetHandle()); From 71999b5f08372f63bb75d37c89c2bc7f293c4152 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 15:12:34 +0400 Subject: [PATCH 052/442] driver/framebuffer.cpp: fix USE_NEVIS_GXA code --- src/driver/framebuffer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index b4f1e9728..32d601a8f 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -777,9 +777,9 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int *(fbp + pos) = col; } fbp += swidth; +#endif line++; } -#endif } #ifdef USE_NEVIS_GXA /* the GXA seems to do asynchronous rendering, so we add a sync marker From fac86b3bdb193da346af2c298bdbebe6adae6e94 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 15:13:21 +0400 Subject: [PATCH 053/442] eitd/sectionsd.cpp: fix different uclibc/glibc malloc_stats --- src/eitd/sectionsd.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 7f40b6452..137cbf1e1 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -996,7 +996,11 @@ static void commandDumpStatusInformation(int /*connfd*/, char* /*data*/, const u // resourceUsage.ru_maxrss, resourceUsage.ru_ixrss, resourceUsage.ru_idrss, resourceUsage.ru_isrss, ); printf("%s\n", stati); +#ifdef __UCLIBC__ malloc_stats(NULL); +#else + malloc_stats(); +#endif return ; } @@ -1122,7 +1126,11 @@ static void FreeMemory() unlockEvents(); +#ifdef __UCLIBC__ malloc_stats(NULL); +#else + malloc_stats(); +#endif xprintf("[sectionsd] free memory done\n"); //wakeupAll(); //FIXME should we re-start eit here ? } @@ -1902,7 +1910,11 @@ static void print_meminfo(void) if (!sections_debug) return; +#ifdef __UCLIBC__ malloc_stats(NULL); +#else + malloc_stats(); +#endif } //--------------------------------------------------------------------- From d3e2a2bdd02da824a8c32c26ec45c7c03c806a22 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 15:14:12 +0400 Subject: [PATCH 054/442] add libcoolstream/cs_frontpanel.h copy --- lib/libcoolstream/cs_frontpanel.h | 116 ++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 lib/libcoolstream/cs_frontpanel.h diff --git a/lib/libcoolstream/cs_frontpanel.h b/lib/libcoolstream/cs_frontpanel.h new file mode 100644 index 000000000..97c0f577a --- /dev/null +++ b/lib/libcoolstream/cs_frontpanel.h @@ -0,0 +1,116 @@ +/* + * Driver for the Coolstream Frontpanel - public definititons. + * + * Copyright (C) 2008 - 2012 Coolstream International Limited + */ + +#ifndef __CS_FRONTPANEL_H__ +#define __CS_FRONTPANEL_H__ + +#define CS_FP_DISPLAY_DEVICE_NAME "cs_display" +#define CS_FP_DISPLAY_DEVICE_MAJOR 238 + +typedef enum { + /* for all frontpanels with */ + FP_ICON_NONE = 0x00000000, + FP_ICON_BAR8 = 0x00000004, + FP_ICON_BAR7 = 0x00000008, + FP_ICON_BAR6 = 0x00000010, + FP_ICON_BAR5 = 0x00000020, + FP_ICON_BAR4 = 0x00000040, + FP_ICON_BAR3 = 0x00000080, + FP_ICON_BAR2 = 0x00000100, + FP_ICON_BAR1 = 0x00000200, + FP_ICON_FRAME = 0x00000400, + FP_ICON_MUTE = 0x00001000, + FP_ICON_DOLBY = 0x00002000, + FP_ICON_TV = 0x00020000, + FP_ICON_RADIO = 0x00040000, + FP_ICON_HD = 0x01000001, + FP_ICON_1080P = 0x02000001, + FP_ICON_1080I = 0x03000001, + FP_ICON_720P = 0x04000001, + FP_ICON_480P = 0x05000001, + FP_ICON_480I = 0x06000001, + FP_ICON_MP3 = 0x08000001, + FP_ICON_PLAY = 0x09000001, + FP_ICON_PAUSE = 0x0A000001, + FP_ICON_CAM1 = 0x0B000001, /* record */ + /* only for frontpanels with VFD */ + FP_ICON_HDD = 0x00000800, + FP_ICON_POWER = 0x00004000, + FP_ICON_TIMESHIFT = 0x00008000, + FP_ICON_SIGNAL = 0x00010000, + FP_ICON_USB = 0x07000001, + FP_ICON_COL1 = 0x09000002, + FP_ICON_COL2 = 0x0B000002, + FP_ICON_CAM2 = 0x0C000001, + /* only for frontpanels with OLED */ + FP_ICON_SD = 0x01000002, + FP_ICON_576P = 0x02000002, + FP_ICON_576I = 0x03000002, + FP_ICON_MP2 = 0x07000002, + FP_ICON_DTS = 0x08000002 +} fp_icon; + +typedef enum { + FP_FLAG_NONE = 0x00, + FP_FLAG_SCROLL_ON = 0x01, /* switch scrolling on */ + FP_FLAG_SCROLL_LTR = 0x02, /* scroll from left to right instead of default right to left direction (i.e. for arabic text) */ + FP_FLAG_SCROLL_SIO = 0x04, /* start/stop scrolling with empty screen (scroll in/out) */ + FP_FLAG_SCROLL_DELAY = 0x08, /* delayed scroll start */ + FP_FLAG_ALIGN_LEFT = 0x10, /* align the text in display from the left (default) */ + FP_FLAG_ALIGN_RIGHT = 0x20, /* align the text in display from the right (arabic) */ + FP_FLAG_UPDATE_SCROLL_POS = 0x40, /* update the current position for scrolling */ +} fp_flag; + +typedef struct { + unsigned char brightness; + unsigned char flags; + unsigned char current_hour; + unsigned char current_minute; + unsigned char timer_minutes_hi; + unsigned char timer_minutes_lo; +} fp_standby_data_t; + +typedef enum { + FP_LED_1_ON = 0x81, + FP_LED_2_ON = 0x82, + FP_LED_3_ON = 0x83, + FP_LED_1_OFF = 0x01, + FP_LED_2_OFF = 0x02, + FP_LED_3_OFF = 0x03, +} fp_led_ctrl_t; + +typedef struct { + unsigned char source; + unsigned char time_minutes_hi; + unsigned char time_minutes_lo; +} fp_wakeup_data_t; + +typedef enum { + FP_WAKEUP_SOURCE_TIMER = 0x01, + FP_WAKEUP_SOURCE_BUTTON = 0x02, + FP_WAKEUP_SOURCE_REMOTE = 0x04, + FP_WAKEUP_SOURCE_PWLOST = 0x7F, + FP_WAKEUP_SOURCE_POWER = 0xFF +} fp_wakeup_source; + +typedef struct { + unsigned short addr; + unsigned short cmd; +} fp_standby_cmd_data_t; + +#define IOC_FP_SET_BRIGHT _IOW(0xDE, 1, unsigned char) /* set the display brighness in 16 steps between 0 to 15 */ +#define IOC_FP_CLEAR_ALL _IOW(0xDE, 2, unsigned int) /* clear the entire display (both text and icons) */ +#define IOC_FP_SET_TEXT _IOW(0xDE, 3, char*) /* set a text to be displayed on the display. If arg == NULL, the text is cleared */ +#define IOC_FP_SET_ICON _IOW(0xDE, 4, fp_icon) /* switch the given icon on */ +#define IOC_FP_CLEAR_ICON _IOW(0xDE, 5, fp_icon) /* switch the given icon off */ +#define IOC_FP_SET_OUTPUT _IOW(0xDE, 6, unsigned char) /* switch the given output on (supported by the controller, but not used in the hardware) */ +#define IOC_FP_CLEAR_OUTPUT _IOW(0xDE, 7, unsigned char) /* switch the given output off (supported by the controller, but not used in the hardware) */ +#define IOC_FP_STANDBY _IOW(0xDE, 8, fp_standby_data_t *)/* switch the vfd/psu in standby (NEO and above only) */ +#define IOC_FP_LED_CTRL _IOW(0xDE, 9, unsigned char) /* control the Frontpanles LED's (NEO and above only) */ +#define IOC_FP_GET_WAKEUP _IOW(0xDE, 10, fp_wakeup_data_t *) /* get wakeup data (NEO and above only) */ +#define IOC_FP_STANDBY_CMD _IOW(0xDE, 11, fp_standby_cmd_data_t *) /* get wakeup data (NEO and above only) */ + +#endif /* __CS_FRONTPANEL_H__ */ From 8266597ef1459e125548a48c6cd093b8abe40d88 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 15:14:39 +0400 Subject: [PATCH 055/442] drivertool.c: try to fix different includes --- src/drivertool.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/drivertool.c b/src/drivertool.c index 352fedd1c..5a0b778f1 100644 --- a/src/drivertool.c +++ b/src/drivertool.c @@ -29,11 +29,18 @@ #include #include -#include +#include +#ifdef BOXMODEL_APOLLO #ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H -#include +#include #endif +#else +#ifdef HAVE_COOLSTREAM_NEVIS_IR_H +#include +#endif +#endif + #ifndef IOC_IR_SET_PRI_PROTOCOL /* unfortunately, the shipped headers seem to be still incomplete... From a746945c2d6360dbe97f12c313ff1db939d8bc93 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 15:15:07 +0400 Subject: [PATCH 056/442] neutrino.cpp: ifdef for new analog modes --- src/neutrino.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 1e1f16f4d..6ec300fc9 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -304,8 +304,13 @@ int CNeutrinoApp::loadSetup(const char * fname) } // video g_settings.video_Mode = configfile.getInt32("video_Mode", VIDEO_STD_1080I50); // VIDEO_STD_720P50 +#ifdef ANALOG_MODE g_settings.analog_mode1 = configfile.getInt32("analog_mode1", (int)ANALOG_MODE(SCART,SD,RGB)); // default RGB g_settings.analog_mode2 = configfile.getInt32("analog_mode2", (int)ANALOG_MODE(CINCH,SD,YPRPB)); // default YPBPR +#else + g_settings.analog_mode1 = configfile.getInt32("analog_mode1", (int)ANALOG_SD_RGB_SCART); // default RGB + g_settings.analog_mode2 = configfile.getInt32("analog_mode2", (int)ANALOG_SD_YPRPB_CINCH); // default YPBPR +#endif g_settings.hdmi_cec_mode = configfile.getInt32("hdmi_cec_mode", 0); // default off g_settings.hdmi_cec_view_on = configfile.getInt32("hdmi_cec_view_on", 0); // default off g_settings.hdmi_cec_standby = configfile.getInt32("hdmi_cec_standby", 0); // default off @@ -1696,7 +1701,7 @@ void CNeutrinoApp::InitSectiondClient() } #if HAVE_COOL_HARDWARE -#include +#include #endif void wake_up( bool &wakeup) From af8e9be94bec40656288a02351d10cd32f298bd4 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 15:15:23 +0400 Subject: [PATCH 057/442] timerd/timermanager.cpp: remove unused include --- src/timerd/timermanager.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/timerd/timermanager.cpp b/src/timerd/timermanager.cpp index 7ea3e5ab6..9f1386050 100644 --- a/src/timerd/timermanager.cpp +++ b/src/timerd/timermanager.cpp @@ -35,10 +35,6 @@ #include #include -#ifdef HAVE_COOLSTREAM_CS_FRONTPANEL_H -#include -#endif - #include #include From a3d8085f0d0c8773770f327caeabad4a8bdcd887 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 15:15:55 +0400 Subject: [PATCH 058/442] driver/vfd.h: use cs_frontpanel.h header --- src/driver/vfd.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/driver/vfd.h b/src/driver/vfd.h index 3047bf8d0..5060069c8 100644 --- a/src/driver/vfd.h +++ b/src/driver/vfd.h @@ -42,11 +42,8 @@ #include #include -#ifdef BOXMODEL_APOLLO + #include -#else -#include -#endif class CVFD { From 8267a53049e051f17a299e2af653f7907a6330b2 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 15:16:52 +0400 Subject: [PATCH 059/442] driver/rcinput.cpp: change device back to /dev/input/nevis_ir, apollo has link --- src/driver/rcinput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 43288e0c6..94ba02c40 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -65,7 +65,7 @@ #define ENABLE_REPEAT_CHECK -const char * const RC_EVENT_DEVICE[NUMBER_OF_EVENT_DEVICES] = {"/dev/cs_ir"}; +const char * const RC_EVENT_DEVICE[NUMBER_OF_EVENT_DEVICES] = {"/dev/input/nevis_ir"}; typedef struct input_event t_input_event; #ifdef KEYBOARD_INSTEAD_OF_REMOTE_CONTROL From 51ae1789426b2ac32fe6b9030eb9ff24a7d73ffe Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 18:52:11 +0400 Subject: [PATCH 060/442] driver/framebuffer.cpp: use box model to enable FB_HW_ACCELERATION --- src/driver/framebuffer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index 32d601a8f..8b1b76658 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -54,7 +54,7 @@ extern CPictureViewer * g_PicViewer; #define BACKGROUNDIMAGEWIDTH 720 -#ifdef ISAPOLLO +#ifdef BOXMODEL_APOLLO #ifndef FB_HW_ACCELERATION #define FB_HW_ACCELERATION #endif From 153c9cfa68e96696a674e74cbbd1ebf9da48e3f8 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 11 Jan 2013 18:55:49 +0400 Subject: [PATCH 061/442] zapit/src/femanager.cpp: compat: process old mode in frontend.conf, if present; save only configured satellites to frontend.conf --- src/zapit/src/femanager.cpp | 42 ++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index d65c3e351..c35f753af 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -192,12 +192,24 @@ bool CFEManager::loadSettings() if (!configfile.loadConfig(FECONFIGFILE)) { WARN("%s not found", FECONFIGFILE); config_exist = false; - //return false; } -#if 0 - fe_mode_t newmode = (fe_mode_t) configfile.getInt32("mode", (int) FE_MODE_SINGLE); -#endif + int def_mode0 = CFrontend::FE_MODE_INDEPENDENT; + int def_modeX = CFrontend::FE_MODE_UNUSED; + fe_mode_t newmode = (fe_mode_t) configfile.getInt32("mode", -1); + if (newmode >= 0) { + INFO("old mode param: %d\n", newmode); + if (newmode == FE_MODE_LOOP) { + def_mode0 = CFrontend::FE_MODE_MASTER; + def_modeX = CFrontend::FE_MODE_LINK_LOOP; + } else if (newmode == FE_MODE_TWIN) { + def_mode0 = CFrontend::FE_MODE_MASTER; + def_modeX = CFrontend::FE_MODE_LINK_TWIN; + } else if (newmode == FE_MODE_ALONE) { + def_mode0 = CFrontend::FE_MODE_MASTER; + def_modeX = CFrontend::FE_MODE_INDEPENDENT; + } + } for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; frontend_config_t & fe_config = fe->getConfig(); @@ -211,7 +223,8 @@ bool CFEManager::loadSettings() fe_config.uni_qrg = getConfigValue(fe, "uni_qrg", 0); fe->setRotorSatellitePosition(getConfigValue(fe, "lastSatellitePosition", 0)); - int def_mode = fe->fenumber ? CFrontend::FE_MODE_UNUSED : CFrontend::FE_MODE_INDEPENDENT; + + int def_mode = fe->fenumber ? def_modeX : def_mode0; fe->setMode(getConfigValue(fe, "mode", def_mode)); fe->setMaster(getConfigValue(fe, "master", 0)); @@ -256,23 +269,12 @@ bool CFEManager::loadSettings() void CFEManager::saveSettings(bool write) { - configfile.setInt32("mode", (int) mode); + configfile.clear(); for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; frontend_config_t & fe_config = fe->getConfig(); INFO("fe%d", fe->fenumber); -#if 0 - if(fe->fenumber && mode != FE_MODE_ALONE) { - CFrontend * fe0 = getFE(0); - fe->setSatellites(fe0->getSatellites()); - //fe->setConfig(fe0->getConfig()); - fe->config.diseqcType = fe0->config.diseqcType; - fe->config.diseqcRepeats = fe0->config.diseqcRepeats; - fe->config.motorRotationSpeed = fe0->config.motorRotationSpeed; - fe->config.highVoltage = fe0->config.highVoltage; - } -#endif setConfigValue(fe, "diseqcType", fe_config.diseqcType); setConfigValue(fe, "diseqcRepeats", fe_config.diseqcRepeats); @@ -287,8 +289,10 @@ void CFEManager::saveSettings(bool write) std::vector satList; satellite_map_t satellites = fe->getSatellites(); for(sat_iterator_t sit = satellites.begin(); sit != satellites.end(); ++sit) { - satList.push_back(sit->first); - setSatelliteConfig(fe, sit->second); + if (sit->second.configured) { + satList.push_back(sit->first); + setSatelliteConfig(fe, sit->second); + } } char cfg_key[81]; sprintf(cfg_key, "fe%d_satellites", fe->fenumber); From fb85a2b6edc9d09b8c9ba2029404099c0a7cc511 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:26:38 +0400 Subject: [PATCH 062/442] zapit/src/frontend.cpp: comment diseqc reset for diseqc 1.0/1.1 --- src/zapit/src/frontend.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index b11737941..31cfcfb16 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -198,7 +198,8 @@ bool CFrontend::Open(bool init) printf("[fe%d] frontend fd %d type %d\n", fenumber, fd, info.type); } - //FIXME info.type = FE_QAM; + //FIXME + if (fenumber > 1) info.type = FE_QAM; if (init) Init(); @@ -886,7 +887,7 @@ void CFrontend::setDiseqcType(const diseqc_t newDiseqcType, bool force) secSetTone(SEC_TONE_OFF, 15); sendDiseqcPowerOn(); sendDiseqcReset(); - secSetTone(SEC_TONE_ON, 20); + secSetTone(SEC_TONE_ON, 50); } config.diseqcType = newDiseqcType; @@ -1113,7 +1114,7 @@ bool CFrontend::sendUncommittedSwitchesCommand(int input) }; printf("[fe%d] uncommitted %d -> %d\n", fenumber, uncommitedInput, input); - if ((input < 0) || (uncommitedInput == input)) + if ((input < 0) /* || (uncommitedInput == input) */) return false; uncommitedInput = input; @@ -1180,8 +1181,10 @@ void CFrontend::setDiseqc(int sat_no, const uint8_t pol, const uint32_t frequenc fe_sec_voltage_t v = (pol & 1) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18; secSetVoltage(v, 100); #endif +#if 0 sendDiseqcReset(); usleep(50*1000); /* sleep at least 50 milli seconds */ +#endif for (loop = 0; loop <= config.diseqcRepeats; loop++) { if (config.diseqcType == MINI_DISEQC) sendToneBurst(b, 1); From 28b04c1a136001da589371f61dffda3df4b3f887 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:40:31 +0400 Subject: [PATCH 063/442] zapit/src/frontend.cpp: revert change for debug --- src/zapit/src/frontend.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index 31cfcfb16..c91f5701b 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -198,8 +198,7 @@ bool CFrontend::Open(bool init) printf("[fe%d] frontend fd %d type %d\n", fenumber, fd, info.type); } - //FIXME - if (fenumber > 1) info.type = FE_QAM; + //FIXME if (fenumber > 1) info.type = FE_QAM; if (init) Init(); From c387a6c266f34acb32b4a0a420e843a0f7207156 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:41:12 +0400 Subject: [PATCH 064/442] zapit/src/channel.cpp: add delivery type member --- src/zapit/include/zapit/channel.h | 1 + src/zapit/src/channel.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/zapit/include/zapit/channel.h b/src/zapit/include/zapit/channel.h index 41de92036..60d37f965 100644 --- a/src/zapit/include/zapit/channel.h +++ b/src/zapit/include/zapit/channel.h @@ -183,6 +183,7 @@ class CZapitChannel bool has_bouquet; uint8_t polarization; int flags; + int deltype; /* constructor, desctructor */ CZapitChannel(const std::string & p_name, t_service_id p_sid, t_transport_stream_id p_tsid, t_original_network_id p_onid, unsigned char p_service_type, t_satellite_position p_satellite_position, freq_id_t freq); diff --git a/src/zapit/src/channel.cpp b/src/zapit/src/channel.cpp index 72374d4ad..eb8cc9279 100644 --- a/src/zapit/src/channel.cpp +++ b/src/zapit/src/channel.cpp @@ -67,6 +67,7 @@ void CZapitChannel::Init() record_demux = 2; polarization = 0; flags = 0; + deltype = FE_QPSK; } CZapitChannel::~CZapitChannel(void) From 740073b2c065fbb5c6cff9ff4b3ebb9376d480ea Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:41:58 +0400 Subject: [PATCH 065/442] zapit/include/zapit/frontend_c.h: add fe type helpers, change modes enum order --- src/zapit/include/zapit/frontend_c.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/zapit/include/zapit/frontend_c.h b/src/zapit/include/zapit/frontend_c.h index dd15b998f..461c06c6d 100644 --- a/src/zapit/include/zapit/frontend_c.h +++ b/src/zapit/include/zapit/frontend_c.h @@ -90,11 +90,11 @@ class CFrontend { public: typedef enum { + FE_MODE_UNUSED, FE_MODE_INDEPENDENT, FE_MODE_MASTER, FE_MODE_LINK_LOOP, - FE_MODE_LINK_TWIN, - FE_MODE_UNUSED, + FE_MODE_LINK_TWIN } fe_work_mode_t; private: @@ -255,5 +255,8 @@ class CFrontend return true; return false; } + bool isCable() { return (info.type == FE_QAM); } + bool isSat() { return (info.type == FE_QPSK); } + fe_type_t getType() { return info.type; } }; #endif /* __zapit_frontend_h__ */ From 66b0487e8234a6c796bb7d540d8ed65459b23a77 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:42:31 +0400 Subject: [PATCH 066/442] zapit/include/zapit/satconfig.h: add delivery type --- src/zapit/include/zapit/satconfig.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zapit/include/zapit/satconfig.h b/src/zapit/include/zapit/satconfig.h index 28921dee5..5dc5c2f3f 100644 --- a/src/zapit/include/zapit/satconfig.h +++ b/src/zapit/include/zapit/satconfig.h @@ -38,6 +38,7 @@ typedef struct sat_config { int input; int configured; int cable_nid; + int deltype; } sat_config_t; typedef enum diseqc_cmd_order { From 793478aa0c3ae540601c972e271b259de2351be1 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:43:03 +0400 Subject: [PATCH 067/442] zapit/src/transponder.cpp: rename type to deltype --- src/zapit/include/zapit/transponder.h | 2 +- src/zapit/src/transponder.cpp | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/zapit/include/zapit/transponder.h b/src/zapit/include/zapit/transponder.h index 298d3fe52..3902aa6be 100644 --- a/src/zapit/include/zapit/transponder.h +++ b/src/zapit/include/zapit/transponder.h @@ -33,7 +33,7 @@ public: t_original_network_id original_network_id; transponder_id_t transponder_id; t_satellite_position satellitePosition; - uint8_t type; + uint8_t deltype; FrontendParameters feparams; unsigned char polarization; diff --git a/src/zapit/src/transponder.cpp b/src/zapit/src/transponder.cpp index aa51be576..b1665548a 100644 --- a/src/zapit/src/transponder.cpp +++ b/src/zapit/src/transponder.cpp @@ -36,7 +36,7 @@ transponder::transponder(fe_type_t fType, const transponder_id_t t_id, const Fro satellitePosition = -(satellitePosition & 0xFFF); else satellitePosition = satellitePosition & 0xFFF; - type = fType; + deltype = fType; } transponder::transponder() @@ -47,7 +47,7 @@ transponder::transponder() original_network_id = 0; polarization = 0; satellitePosition = 0; - type = FE_QPSK; + deltype = FE_QPSK; } bool transponder::operator==(const transponder& t) const @@ -67,7 +67,7 @@ bool transponder::compare(const transponder& t) const const struct dvb_frontend_parameters *dvb_feparams1 = &feparams.dvb_feparams; const struct dvb_frontend_parameters *dvb_feparams2 = &t.feparams.dvb_feparams; - if (type == FE_QAM) { + if (deltype == FE_QAM) { ret = ( (t == (*this)) && (dvb_feparams1->u.qam.symbol_rate == dvb_feparams2->u.qam.symbol_rate) && @@ -91,7 +91,7 @@ void transponder::dumpServiceXml(FILE * fd) { struct dvb_frontend_parameters *dvb_feparams = &feparams.dvb_feparams; - if (type == FE_QAM) { + if (deltype == FE_QAM) { fprintf(fd, "\t\t\n", transport_stream_id, original_network_id, dvb_feparams->frequency, dvb_feparams->inversion, @@ -111,7 +111,7 @@ void transponder::dump(std::string label) { struct dvb_frontend_parameters *dvb_feparams = &feparams.dvb_feparams; - if (type == FE_QAM) + if (deltype == FE_QAM) printf("%s tp-id %016llx freq %d rate %d fec %d mod %d\n", label.c_str(), transponder_id, dvb_feparams->frequency, dvb_feparams->u.qam.symbol_rate, dvb_feparams->u.qam.fec_inner, dvb_feparams->u.qam.modulation); @@ -146,13 +146,13 @@ std::string transponder::description() char * f, *s, *m; struct dvb_frontend_parameters *dvb_feparams = &feparams.dvb_feparams; - switch(type) { + switch(deltype) { case FE_QPSK: - CFrontend::getDelSys(type, dvb_feparams->u.qpsk.fec_inner, dvbs_get_modulation(dvb_feparams->u.qpsk.fec_inner), f, s, m); + CFrontend::getDelSys(deltype, dvb_feparams->u.qpsk.fec_inner, dvbs_get_modulation(dvb_feparams->u.qpsk.fec_inner), f, s, m); snprintf(buf, sizeof(buf), "%d %c %d %s %s %s ", dvb_feparams->frequency/1000, pol(polarization), dvb_feparams->u.qpsk.symbol_rate/1000, f, s, m); break; case FE_QAM: - CFrontend::getDelSys(type, dvb_feparams->u.qam.fec_inner, dvb_feparams->u.qam.modulation, f, s, m); + CFrontend::getDelSys(deltype, dvb_feparams->u.qam.fec_inner, dvb_feparams->u.qam.modulation, f, s, m); snprintf(buf, sizeof(buf), "%d %d %s %s %s ", dvb_feparams->frequency/1000, dvb_feparams->u.qam.symbol_rate/1000, f, s, m); break; case FE_OFDM: From f10ea0636dec10302ff820054b6995e1d7f6d65d Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:48:21 +0400 Subject: [PATCH 068/442] gui/infoviewer.cpp: check live frontend for delivery system --- src/gui/infoviewer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index b495afb1f..087550a1b 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -1347,7 +1347,8 @@ void CInfoViewer::showSNR () newfreq = false; std::string polarisation = ""; - if (g_info.delivery_system == DVB_S) + + if (CFEManager::getInstance()->getLiveFE()->getType() == FE_QPSK) polarisation = transponder::pol(CFEManager::getInstance()->getLiveFE()->getPolarization()); int frequency = CFEManager::getInstance()->getLiveFE()->getFrequency(); From dd3bc579a0a0aa0a39c26b1cff9cc857dc172706 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:49:24 +0400 Subject: [PATCH 069/442] gui/miscsettings_menu.cpp: use CFEManager::haveSat in place of glocal delivery system --- src/gui/miscsettings_menu.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/miscsettings_menu.cpp b/src/gui/miscsettings_menu.cpp index 9cb4d2692..d2b46c07e 100644 --- a/src/gui/miscsettings_menu.cpp +++ b/src/gui/miscsettings_menu.cpp @@ -49,6 +49,7 @@ #include #include +#include #include @@ -257,7 +258,7 @@ void CMiscMenue::showMiscSettingsMenuGeneral(CMenuWidget *ms_general) //rotor //don't show rotor settings on cable box - if (g_info.delivery_system == DVB_S) { + if (CFEManager::getInstance()->haveSat()) { mc = new CMenuOptionChooser(LOCALE_EXTRA_ROTOR_SWAP, &g_settings.rotor_swap, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); mc->setHint("", LOCALE_MENU_HINT_ROTOR_SWAP); ms_general->addItem(mc); From 9bb283565b9a50e867fcb1e66c0eadf6d8757abd Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:50:13 +0400 Subject: [PATCH 070/442] gui/start_wizard.cpp: use CFEManager::haveSat in place of glocal delivery system --- src/gui/start_wizard.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/start_wizard.cpp b/src/gui/start_wizard.cpp index 991835987..25b21e0c3 100644 --- a/src/gui/start_wizard.cpp +++ b/src/gui/start_wizard.cpp @@ -100,7 +100,7 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/) CNetworkSetup::getInstance()->setWizardMode(CNetworkSetup::N_SETUP_MODE_WIZARD_NO); } bool init_settings = false; - if (g_info.delivery_system == DVB_S) + if (CFEManager::getInstance()->haveSat()) init_settings = file_exists("/var/tuxbox/config/initial/"); if(init_settings && (res != menu_return::RETURN_EXIT_ALL)) From bee2fa8e85d16545acce9e4f7759c843d45d37a5 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:51:14 +0400 Subject: [PATCH 071/442] gui/streaminfo2.cpp: fix transponder->type --- src/gui/streaminfo2.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index b9b01188f..b7b89f368 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -566,9 +566,9 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) //satellite ypos += iheight; - if(t.type == FE_QPSK) + if(t.deltype == FE_QPSK) sprintf (buf, "%s:",g_Locale->getText (LOCALE_SATSETUP_SATELLITE));//swiped locale - else if(t.type == FE_QAM) + else if(t.deltype == FE_QAM) sprintf (buf, "%s:",g_Locale->getText (LOCALE_CHANNELLIST_PROVS)); g_Font[font_info]->RenderString(xpos, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 @@ -588,7 +588,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) ypos += iheight; scaling = 27000; - if (t.type == FE_QPSK && t.feparams.dvb_feparams.u.qpsk.fec_inner < FEC_S2_QPSK_1_2) + if (t.deltype == FE_QPSK && t.feparams.dvb_feparams.u.qpsk.fec_inner < FEC_S2_QPSK_1_2) scaling = 15000; sprintf (buf, "%s",g_Locale->getText (LOCALE_SCANTS_FREQDATA)); From 1991a0b16ebb429513d48675539ac51bcd0698ca Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:51:39 +0400 Subject: [PATCH 072/442] gui/movieplayer.cpp: enable DTS on apollo --- src/gui/movieplayer.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 5620dcd70..7ae30125d 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -780,7 +780,9 @@ void CMoviePlayerGui::addAudioFormat(int count, std::string &apidtitle, bool fil break; case 6: /*DTS*/ apidtitle.append(" (DTS)"); +#ifndef BOXMODEL_APOLLO enabled = false; +#endif break; case 7: /*MLP*/ apidtitle.append(" (MLP)"); From 093eae2ebc16ad73bdb8c510caa1ae922d6c5a0f Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:52:06 +0400 Subject: [PATCH 073/442] system/setting_helpers.cpp: dont use IOC_CONTROL_PWM_SPEED on apollo --- src/system/setting_helpers.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/system/setting_helpers.cpp b/src/system/setting_helpers.cpp index 266190155..db12ac075 100644 --- a/src/system/setting_helpers.cpp +++ b/src/system/setting_helpers.cpp @@ -495,6 +495,7 @@ int CDataResetNotifier::exec(CMenuTarget* /*parent*/, const std::string& actionK void CFanControlNotifier::setSpeed(unsigned int speed) { +#ifndef BOXMODEL_APOLLO int cfd; printf("FAN Speed %d\n", speed); @@ -507,6 +508,7 @@ void CFanControlNotifier::setSpeed(unsigned int speed) perror("IOC_CONTROL_PWM_SPEED"); close(cfd); +#endif } bool CFanControlNotifier::changeNotify(const neutrino_locale_t, void * data) From 0d18489a89879910f59f59af81dbffb75560cbcf Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:52:36 +0400 Subject: [PATCH 074/442] zapit/src/zapit.cpp: set channel deltype --- src/zapit/src/zapit.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index 29a623305..a224f35d4 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -1545,6 +1545,7 @@ bool CZapit::ParseCommand(CBasicMessage::Header &rmsg, int connfd) satellitePosition, 0 ); + channel->deltype = live_fe->getType(); CServiceManager::getInstance()->AddNVODChannel(channel); } From f8eb8b5297c5022b50803dcf427cee66af957414 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:52:54 +0400 Subject: [PATCH 075/442] zapit/src/scansdt.cpp: set channel deltype --- src/zapit/src/scansdt.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/zapit/src/scansdt.cpp b/src/zapit/src/scansdt.cpp index 1d1b5b538..27d73f293 100644 --- a/src/zapit/src/scansdt.cpp +++ b/src/zapit/src/scansdt.cpp @@ -49,6 +49,7 @@ CSdt::CSdt(t_satellite_position spos, freq_id_t frq, bool curr, int dnum) current = curr; transport_stream_id = 0; original_network_id = 0; + //FIXME sdt update ?? cable = (CServiceScan::getInstance()->GetFrontend()->getInfo()->type == FE_QAM); } @@ -277,6 +278,7 @@ bool CSdt::ParseServiceDescriptor(ServiceDescription * service, ServiceDescripto CZapitChannel * channel = new CZapitChannel(serviceName, channel_id, real_type, satellitePosition, freq_id); + channel->deltype = cable ? FE_QAM : FE_QPSK; CServiceManager::getInstance()->AddCurrentChannel(channel); @@ -324,6 +326,7 @@ bool CSdt::ParseServiceDescriptor(ServiceDescription * service, ServiceDescripto } else { channel = new CZapitChannel(serviceName, channel_id, real_type, satellitePosition, freq_id); + channel->deltype = cable ? FE_QAM : FE_QPSK; CServiceManager::getInstance()->AddChannel(channel); /* mark channel as new, if this satellite already have channels */ From b651c8a591eadc833e92138415be4991789d5607 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:53:16 +0400 Subject: [PATCH 076/442] zapit/src/fastscan.cpp: set channel deltype --- src/zapit/src/fastscan.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zapit/src/fastscan.cpp b/src/zapit/src/fastscan.cpp index 9c2cefde4..81247df2f 100644 --- a/src/zapit/src/fastscan.cpp +++ b/src/zapit/src/fastscan.cpp @@ -317,8 +317,8 @@ bool CServiceScan::ParseFst(unsigned short pid, fast_scan_operator_t * op) channel_id, service_type, satellitePosition, - freq - ); + freq); + newchannel->deltype = FE_QPSK; CServiceManager::getInstance()->AddChannel(newchannel); } newchannel->setName(serviceName); From 46a2222e5ac20630e078c425b64dd779f3362457 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:54:51 +0400 Subject: [PATCH 077/442] system/settings.cpp: split cable and sat scan settings --- src/system/settings.cpp | 45 +++++++++++++++++++-------------- src/system/settings.h | 56 +++++++++++++++++++++++------------------ 2 files changed, 57 insertions(+), 44 deletions(-) diff --git a/src/system/settings.cpp b/src/system/settings.cpp index d9d45c3e9..1f75181e6 100644 --- a/src/system/settings.cpp +++ b/src/system/settings.cpp @@ -109,7 +109,8 @@ CScanSettings::CScanSettings(void) delivery_system = DVB_S; bouquetMode = CZapitClient::BM_UPDATEBOUQUETS; scanType = CServiceScan::SCAN_TVRADIO; - strcpy(satNameNoDiseqc, "none"); + strcpy(satName, "none"); + strcpy(cableName, "none"); } bool CScanSettings::loadSettings(const char * const fileName, const delivery_system_t dsys) @@ -126,7 +127,6 @@ bool CScanSettings::loadSettings(const char * const fileName, const delivery_sys bouquetMode = (CZapitClient::bouquetMode) configfile.getInt32("bouquetMode" , bouquetMode); scanType = (CZapitClient::scanType) configfile.getInt32("scanType", scanType); - strcpy(satNameNoDiseqc, configfile.getString("satNameNoDiseqc", satNameNoDiseqc).c_str()); scan_fta_flag = configfile.getInt32("scan_fta_flag", 0); scan_nit = configfile.getInt32("scan_nit", 1); @@ -135,19 +135,20 @@ bool CScanSettings::loadSettings(const char * const fileName, const delivery_sys scan_reset_numbers = configfile.getInt32("scan_reset_numbers", 0); scan_logical_numbers = configfile.getInt32("scan_logical_numbers", 0); scan_logical_hd = configfile.getInt32("scan_logical_hd", 1); - TP_fec = configfile.getInt32("TP_fec", 1); - TP_pol = configfile.getInt32("TP_pol", 0); - TP_mod = configfile.getInt32("TP_mod", 3); - if(delivery_system == DVB_S) { - strcpy(TP_freq, configfile.getString("TP_freq", "10100000").c_str()); - strcpy(TP_rate, configfile.getString("TP_rate", "27500000").c_str()); - } else { - strcpy(TP_freq, configfile.getString("TP_freq", "369000").c_str()); - strcpy(TP_rate, configfile.getString("TP_rate", "6875000").c_str()); - } + strcpy(satName, configfile.getString("satName", satName).c_str()); + sat_TP_fec = configfile.getInt32("sat_TP_fec", 1); + sat_TP_pol = configfile.getInt32("sat_TP_pol", 0); + strcpy(sat_TP_freq, configfile.getString("sat_TP_freq", "10100000").c_str()); + strcpy(sat_TP_rate, configfile.getString("sat_TP_rate", "27500000").c_str()); + + strcpy(cableName, configfile.getString("cableName", cableName).c_str()); + cable_TP_mod = configfile.getInt32("cable_TP_mod", 3); + cable_TP_fec = configfile.getInt32("cable_TP_fec", 1); + strcpy(cable_TP_freq, configfile.getString("cable_TP_freq", "369000").c_str()); + strcpy(cable_TP_rate, configfile.getString("cable_TP_rate", "6875000").c_str()); #if 1 - if(TP_fec == 4) TP_fec = 5; + if(sat_TP_fec == 4) sat_TP_fec = 5; #endif fast_type = configfile.getInt32("fast_type", 1); fast_op = configfile.getInt32("fast_op", 0); @@ -161,7 +162,6 @@ bool CScanSettings::saveSettings(const char * const fileName) configfile.setInt32("delivery_system", delivery_system); configfile.setInt32("bouquetMode", bouquetMode); configfile.setInt32("scanType", scanType); - configfile.setString("satNameNoDiseqc", satNameNoDiseqc); configfile.setInt32("scan_fta_flag", scan_fta_flag); configfile.setInt32("scan_nit", scan_nit); @@ -170,15 +170,22 @@ bool CScanSettings::saveSettings(const char * const fileName) configfile.setInt32("scan_reset_numbers", scan_reset_numbers); configfile.setInt32("scan_logical_numbers", scan_logical_numbers); configfile.setInt32("scan_logical_hd", scan_logical_hd); - configfile.setInt32("TP_fec", TP_fec); - configfile.setInt32("TP_pol", TP_pol); - configfile.setInt32("TP_mod", TP_mod); - configfile.setString("TP_freq", TP_freq); - configfile.setString("TP_rate", TP_rate); configfile.setInt32("fast_type", fast_type); configfile.setInt32("fast_op", fast_op); configfile.setInt32("cable_nid", cable_nid); + configfile.setString("satName", satName); + configfile.setInt32("sat_TP_fec", sat_TP_fec); + configfile.setInt32("sat_TP_pol", sat_TP_pol); + configfile.setString("sat_TP_freq", sat_TP_freq); + configfile.setString("sat_TP_rate", sat_TP_rate); + + configfile.setString("cableName", cableName); + configfile.setInt32("cable_TP_fec", cable_TP_fec); + configfile.setInt32("cable_TP_mod", cable_TP_mod); + configfile.setString("cable_TP_freq", cable_TP_freq); + configfile.setString("cable_TP_rate", cable_TP_rate); + if(configfile.getModifiedFlag()) configfile.saveConfig(fileName); diff --git a/src/system/settings.h b/src/system/settings.h index 29c9ee2fb..a9b296a05 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -669,34 +669,40 @@ const int PARENTALLOCK_PROMPT_ONSIGNAL = 3; class CScanSettings { -public: - CConfigFile configfile; - int bouquetMode; - int scanType; + public: + CConfigFile configfile; + int bouquetMode; + int scanType; - char satNameNoDiseqc[50]; - delivery_system_t delivery_system; - int scan_nit; - int scan_nit_manual; - int scan_bat; - int scan_fta_flag; - int scan_reset_numbers; - int scan_logical_numbers; - int scan_logical_hd; - int TP_fec; - int TP_pol; - int TP_mod; - char TP_freq[10]; - char TP_rate[9]; - int fast_type; - int fast_op; - int cable_nid; + delivery_system_t delivery_system; + int scan_nit; + int scan_nit_manual; + int scan_bat; + int scan_fta_flag; + int scan_reset_numbers; + int scan_logical_numbers; + int scan_logical_hd; + int fast_type; + int fast_op; + int cable_nid; - CScanSettings(); + char satName[50]; + int sat_TP_fec; + int sat_TP_pol; + char sat_TP_freq[10]; + char sat_TP_rate[9]; - //void useDefaults(const delivery_system_t _delivery_system); - bool loadSettings(const char * const fileName, const delivery_system_t _delivery_system); - bool saveSettings(const char * const fileName); + char cableName[50]; + int cable_TP_mod; + int cable_TP_fec; + char cable_TP_freq[10]; + char cable_TP_rate[9]; + + CScanSettings(); + + //void useDefaults(const delivery_system_t _delivery_system); + bool loadSettings(const char * const fileName, const delivery_system_t _delivery_system); + bool saveSettings(const char * const fileName); }; From 6d362f185d329bc64dcb5bc36ad54bc466e84f7a Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:55:31 +0400 Subject: [PATCH 078/442] gui/test_menu.cpp: change satNameNoDiseqc to satName --- src/gui/test_menu.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index d0e3419be..d0e3385c1 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -256,7 +256,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) CScanTs * scanTs = new CScanTs(); int freq = (actionKey == "22kon1") ? 12000*1000: 11000*1000; sprintf(scansettings.TP_freq, "%d", freq); - strncpy(scansettings.satNameNoDiseqc, + strncpy(scansettings.satName, CServiceManager::getInstance()->GetSatelliteName(130).c_str(), 50); scanTs->exec(NULL, "test"); @@ -267,7 +267,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) { int freq = (actionKey == "22kon2") ? 12000*1000: 11000*1000; sprintf(scansettings.TP_freq, "%d", freq); - strncpy(scansettings.satNameNoDiseqc, + strncpy(scansettings.satName, CServiceManager::getInstance()->GetSatelliteName(192).c_str(), 50); CScanTs * scanTs = new CScanTs(); @@ -278,7 +278,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) else if (actionKey == "scan1" || actionKey == "scan2") { int fnum = actionKey == "scan1" ? 0 : 1; - strncpy(scansettings.satNameNoDiseqc, actionKey == "scan1" ? + strncpy(scansettings.satName, actionKey == "scan1" ? CServiceManager::getInstance()->GetSatelliteName(130).c_str() : CServiceManager::getInstance()->GetSatelliteName(192).c_str(), 50); From ca8fb27e4e528fc8950c74d3576058956ec9773f Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:56:16 +0400 Subject: [PATCH 079/442] gui/motorcontrol.cpp: use new scan settings names --- src/gui/motorcontrol.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/gui/motorcontrol.cpp b/src/gui/motorcontrol.cpp index 627535772..51ed3e27b 100644 --- a/src/gui/motorcontrol.cpp +++ b/src/gui/motorcontrol.cpp @@ -136,9 +136,9 @@ int CMotorControl::exec(CMenuTarget* parent, const std::string &) #if 0 /* send satellite list to zapit */ for(sit = satellitePositions.begin(); sit != satellitePositions.end(); sit++) { - if(!strcmp(sit->second.name.c_str(),scansettings.satNameNoDiseqc)) { + if(!strcmp(sit->second.name.c_str(),scansettings.satName)) { sat.position = sit->first; - strncpy(sat.satName, scansettings.satNameNoDiseqc, 49); + strncpy(sat.satName, scansettings.satName, 49); satList.push_back(sat); if(sit->second.motor_position) motorPosition = sit->second.motor_position; @@ -147,8 +147,8 @@ int CMotorControl::exec(CMenuTarget* parent, const std::string &) } #endif /* send satellite list to zapit */ - sat.position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satNameNoDiseqc); - strncpy(sat.satName, scansettings.satNameNoDiseqc, 49); + sat.position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satName); + strncpy(sat.satName, scansettings.satName, 49); satList.push_back(sat); satellite_map_t & satmap = frontend->getSatellites(); @@ -162,10 +162,10 @@ int CMotorControl::exec(CMenuTarget* parent, const std::string &) g_Zapit->setScanSatelliteList( satList); CZapit::getInstance()->SetLiveFrontend(frontend); - TP.feparams.dvb_feparams.frequency = atoi(scansettings.TP_freq); - TP.feparams.dvb_feparams.u.qpsk.symbol_rate = atoi(scansettings.TP_rate); - TP.feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t)scansettings.TP_fec; - TP.polarization = scansettings.TP_pol; + TP.feparams.dvb_feparams.frequency = atoi(scansettings.sat_TP_freq); + TP.feparams.dvb_feparams.u.qpsk.symbol_rate = atoi(scansettings.sat_TP_rate); + TP.feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t)scansettings.sat_TP_fec; + TP.polarization = scansettings.sat_TP_pol; g_Zapit->tune_TP(TP); From 4372df5a25faabfe65bb6433fd7f02abfa9bde37 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 15:58:13 +0400 Subject: [PATCH 080/442] gui/scan.cpp: add delivery type member, use it to find scanned type --- src/gui/scan.cpp | 53 +++++++++++++++++++++++++++--------------------- src/gui/scan.h | 4 +++- 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/gui/scan.cpp b/src/gui/scan.cpp index e3b50c908..d30030f63 100644 --- a/src/gui/scan.cpp +++ b/src/gui/scan.cpp @@ -74,7 +74,7 @@ extern cVideo * videoDecoder; #define BAR_WIDTH 150 #define BAR_HEIGHT 16//(13 + BAR_BORDER*2) -CScanTs::CScanTs() +CScanTs::CScanTs(int dtype) { frameBuffer = CFrameBuffer::getInstance(); radar = 0; @@ -83,13 +83,17 @@ CScanTs::CScanTs() sigscale = new CProgressBar(true, BAR_WIDTH, BAR_HEIGHT); snrscale = new CProgressBar(true, BAR_WIDTH, BAR_HEIGHT); + deltype = dtype; } void CScanTs::prev_next_TP( bool up) { t_satellite_position position = 0; - position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satNameNoDiseqc); + if (deltype == FE_QPSK) + position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satName); + else + position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.cableName); transponder_list_t &select_transponders = CServiceManager::getInstance()->GetSatelliteTransponders(position); transponder_list_t::iterator tI; @@ -114,7 +118,7 @@ void CScanTs::prev_next_TP( bool up) if(next_tp) { TP.feparams.dvb_feparams.frequency = tI->second.feparams.dvb_feparams.frequency; - if(g_info.delivery_system == DVB_S) { + if (deltype == FE_QPSK) { TP.feparams.dvb_feparams.u.qpsk.symbol_rate = tI->second.feparams.dvb_feparams.u.qpsk.symbol_rate; TP.feparams.dvb_feparams.u.qpsk.fec_inner = tI->second.feparams.dvb_feparams.u.qpsk.fec_inner; TP.polarization = tI->second.polarization; @@ -133,15 +137,15 @@ void CScanTs::testFunc() char buffer[128]; char * f, *s, *m; - CFrontend * frontend = CServiceScan::getInstance()->GetFrontend(); - if(frontend->getInfo()->type == FE_QPSK) { - frontend->getDelSys(TP.feparams.dvb_feparams.u.qpsk.fec_inner, dvbs_get_modulation((fe_code_rate_t)TP.feparams.dvb_feparams.u.qpsk.fec_inner), f, s, m); + if(deltype == FE_QPSK) { + CFrontend::getDelSys(deltype, TP.feparams.dvb_feparams.u.qpsk.fec_inner, dvbs_get_modulation((fe_code_rate_t)TP.feparams.dvb_feparams.u.qpsk.fec_inner), f, s, m); snprintf(buffer,sizeof(buffer), "%u %c %d %s %s %s", TP.feparams.dvb_feparams.frequency/1000, transponder::pol(TP.polarization), TP.feparams.dvb_feparams.u.qpsk.symbol_rate/1000, f, s, m); - } else if(frontend->getInfo()->type == FE_QAM) { - frontend->getDelSys(scansettings.TP_fec, scansettings.TP_mod, f, s, m); - snprintf(buffer,sizeof(buffer), "%u %d %s %s %s", atoi(scansettings.TP_freq)/1000, atoi(scansettings.TP_rate)/1000, f, s, m); + } else { + CFrontend::getDelSys(deltype, TP.feparams.dvb_feparams.u.qam.fec_inner, TP.feparams.dvb_feparams.u.qam.modulation, f, s, m); + snprintf(buffer,sizeof(buffer), "%u %d %s %s %s", TP.feparams.dvb_feparams.frequency/1000, TP.feparams.dvb_feparams.u.qam.symbol_rate/1000, f, s, m); } - paintLine(xpos2, ypos_cur_satellite, w - 95, scansettings.satNameNoDiseqc); +printf("CScanTs::testFunc: %s\n", buffer); + paintLine(xpos2, ypos_cur_satellite, w - 95, pname); paintLine(xpos2, ypos_frequency, w, buffer); success = g_Zapit->tune_TP(TP); } @@ -172,6 +176,8 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) bool manual = (actionKey == "manual") || test; bool fast = (actionKey == "fast"); + pname = (deltype == FE_QPSK) ? scansettings.satName : scansettings.cableName; + int scan_pids = CZapit::getInstance()->scanPids(); hheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); @@ -208,22 +214,23 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) if(scansettings.scan_nit_manual) scan_flags |= CServiceScan::SCAN_NIT; TP.scan_mode = scan_flags; - TP.feparams.dvb_feparams.frequency = atoi(scansettings.TP_freq); - if(g_info.delivery_system == DVB_S) { - TP.feparams.dvb_feparams.u.qpsk.symbol_rate = atoi(scansettings.TP_rate); - TP.feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t) scansettings.TP_fec; - TP.polarization = scansettings.TP_pol; + if (deltype == FE_QPSK) { + TP.feparams.dvb_feparams.frequency = atoi(scansettings.sat_TP_freq); + TP.feparams.dvb_feparams.u.qpsk.symbol_rate = atoi(scansettings.sat_TP_rate); + TP.feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t) scansettings.sat_TP_fec; + TP.polarization = scansettings.sat_TP_pol; } else { - TP.feparams.dvb_feparams.u.qam.symbol_rate = atoi(scansettings.TP_rate); - TP.feparams.dvb_feparams.u.qam.fec_inner = (fe_code_rate_t)scansettings.TP_fec; - TP.feparams.dvb_feparams.u.qam.modulation = (fe_modulation_t) scansettings.TP_mod; + TP.feparams.dvb_feparams.frequency = atoi(scansettings.cable_TP_freq); + TP.feparams.dvb_feparams.u.qam.symbol_rate = atoi(scansettings.cable_TP_rate); + TP.feparams.dvb_feparams.u.qam.fec_inner = (fe_code_rate_t)scansettings.cable_TP_fec; + TP.feparams.dvb_feparams.u.qam.modulation = (fe_modulation_t) scansettings.cable_TP_mod; } //printf("[neutrino] freq %d rate %d fec %d pol %d\n", TP.feparams.dvb_feparams.frequency, TP.feparams.dvb_feparams.u.qpsk.symbol_rate, TP.feparams.dvb_feparams.u.qpsk.fec_inner, TP.polarization); } else { if(scansettings.scan_nit) scan_flags |= CServiceScan::SCAN_NIT; } - if(g_info.delivery_system == DVB_C) + if(deltype == FE_QAM) CServiceScan::getInstance()->SetCableNID(scansettings.cable_nid); CZapitClient::commandSetScanSatelliteList sat; @@ -232,8 +239,8 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) if(fast) { } else if(manual || !scan_all) { - sat.position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satNameNoDiseqc); - strncpy(sat.satName, scansettings.satNameNoDiseqc, 49); + sat.position = CServiceManager::getInstance()->GetSatellitePosition(pname); + strncpy(sat.satName, pname, 49); satList.push_back(sat); } else { satellite_map_t & satmap = CServiceManager::getInstance()->SatelliteList(); @@ -493,12 +500,12 @@ void CScanTs::paint(bool fortest) ypos_cur_satellite = ypos; - if (g_info.delivery_system == DVB_S) + if(deltype == FE_QPSK) { //sat paintLineLocale(xpos1, &ypos, width - xpos1, LOCALE_SCANTS_ACTSATELLITE); xpos2 = xpos1 + 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(LOCALE_SCANTS_ACTSATELLITE), true); // UTF-8 } - if (g_info.delivery_system == DVB_C) + if(deltype == FE_QAM) { //cable paintLineLocale(xpos1, &ypos, width - xpos1, LOCALE_SCANTS_ACTCABLE); xpos2 = xpos1 + 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(LOCALE_SCANTS_ACTCABLE), true); // UTF-8 diff --git a/src/gui/scan.h b/src/gui/scan.h index db871bcc0..9a1d32cad 100644 --- a/src/gui/scan.h +++ b/src/gui/scan.h @@ -80,9 +80,11 @@ class CScanTs : public CMenuTarget void testFunc(); void prev_next_TP(bool); TP_params TP; + int deltype; + char * pname; public: - CScanTs(); + CScanTs(int dtype = FE_QPSK); void hide(); int exec(CMenuTarget* parent, const std::string & actionKey); }; From 47ac8552980c1eb4fe2e1d551ffb6a110940687a Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 16:00:51 +0400 Subject: [PATCH 081/442] zapit/src/getservices.cpp: load cable and/or sat xml, depending on frontend types found; set channels delivery type; --- src/zapit/include/zapit/getservices.h | 11 ++- src/zapit/src/getservices.cpp | 132 ++++++++++++++++---------- 2 files changed, 91 insertions(+), 52 deletions(-) diff --git a/src/zapit/include/zapit/getservices.h b/src/zapit/include/zapit/getservices.h index 7783bcfbb..c8bce6951 100644 --- a/src/zapit/include/zapit/getservices.h +++ b/src/zapit/include/zapit/getservices.h @@ -68,6 +68,7 @@ class CServiceManager int tp_count; uint32_t fake_tid; uint32_t fake_nid; + uint32_t fake_pos; int newfound; tallchans allchans; @@ -87,13 +88,15 @@ class CServiceManager satellite_map_t satellitePositions; sat_transponder_map_t satelliteTransponders; - bool ParseScanXml(); - void ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, bool cable); - void ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization); + bool ParseScanXml(fe_type_t delsys); + void ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, fe_type_t delsys); + void ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization, fe_type_t delsys); void FindTransponder(xmlNodePtr search); void ParseSatTransponders(fe_type_t frontendType, xmlNodePtr search, t_satellite_position satellitePosition); int LoadMotorPositions(void); + bool LoadScanXml(fe_type_t delsys); + void WriteSatHeader(FILE * fd, sat_config_t &config); void WriteCurrentService(FILE * fd, bool &satfound, bool &tpdone, bool &updated, char * satstr, transponder &tp, CZapitChannel &channel, const char * action); @@ -107,7 +110,7 @@ class CServiceManager static void CopyFile(char * from, char * to); - bool InitSatPosition(t_satellite_position position, char * name = NULL, bool force = false); + bool InitSatPosition(t_satellite_position position, char * name = NULL, bool force = false, int deltype = FE_QPSK); bool LoadServices(bool only_current); void SaveServices(bool tocopy, bool if_changed = false); void SaveMotorPositions(); diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index 0aa479238..f6e8b2368 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -57,14 +57,14 @@ CServiceManager * CServiceManager::getInstance() return manager; } -bool CServiceManager::ParseScanXml(void) +bool CServiceManager::ParseScanXml(fe_type_t delsys) { if(scanInputParser) { delete scanInputParser; scanInputParser = NULL; } - frontendType = CFEManager::getInstance()->getLiveFE()->getInfo()->type; - switch (frontendType) { + //frontendType = CFEManager::getInstance()->getLiveFE()->getInfo()->type; + switch (delsys) { case FE_QPSK: scanInputParser = parseXmlFile(SATELLITES_XML); break; @@ -291,7 +291,7 @@ std::string CServiceManager::GetServiceName(t_channel_id channel_id) return ""; } -void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, bool cable) +void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, fe_type_t delsys) { uint8_t polarization = 0; @@ -304,7 +304,7 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa feparams.dvb_feparams.frequency = xmlGetNumericAttribute(node, "frq", 0); feparams.dvb_feparams.inversion = (fe_spectral_inversion) xmlGetNumericAttribute(node, "inv", 0); - if(cable) { + if(delsys == FE_QAM) { feparams.dvb_feparams.u.qam.symbol_rate = xmlGetNumericAttribute(node, "sr", 0); feparams.dvb_feparams.u.qam.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(node, "fec", 0); feparams.dvb_feparams.u.qam.modulation = (fe_modulation_t) xmlGetNumericAttribute(node, "mod", 0); @@ -325,10 +325,10 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa else feparams.dvb_feparams.frequency = (int) 1000 * (int) round ((double) feparams.dvb_feparams.frequency / (double) 1000); } - freq_id_t freq = CREATE_FREQ_ID(feparams.dvb_feparams.frequency, cable); + freq_id_t freq = CREATE_FREQ_ID(feparams.dvb_feparams.frequency, delsys == FE_QAM); transponder_id_t tid = CREATE_TRANSPONDER_ID64(freq, satellitePosition,original_network_id,transport_stream_id); - transponder t(frontendType, tid, feparams, polarization); + transponder t(delsys, tid, feparams, polarization); pair::iterator,bool> ret; ret = transponders.insert(transponder_pair_t(tid, t)); @@ -336,7 +336,7 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa t.dump("[zapit] duplicate in all transponders:"); /* read channels that belong to the current transponder */ - ParseChannels(node->xmlChildrenNode, transport_stream_id, original_network_id, satellitePosition, freq, polarization); + ParseChannels(node->xmlChildrenNode, transport_stream_id, original_network_id, satellitePosition, freq, polarization, delsys); /* hop to next transponder */ node = node->xmlNextNode; @@ -345,7 +345,7 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa return; } -void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization) +void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization, fe_type_t delsys) { int dummy = 0; int * have_ptr = &dummy; @@ -388,6 +388,7 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id CZapitChannel * channel = new CZapitChannel(name, chid, service_type, satellitePosition, freq); + channel->deltype = delsys; service_number_map_t * channel_numbers = (service_type == ST_DIGITAL_RADIO_SOUND_SERVICE) ? &radio_numbers : &tv_numbers; @@ -438,18 +439,21 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id void CServiceManager::FindTransponder(xmlNodePtr search) { while (search) { - bool cable = false; + fe_type_t delsys = FE_QPSK; if (!(strcmp(xmlGetName(search), "cable"))) - cable = true; + delsys = FE_QAM; else if ((strcmp(xmlGetName(search), "sat"))) { search = search->xmlNextNode; continue; } - t_satellite_position satellitePosition = xmlGetSignedNumericAttribute(search, "position", 10); + //t_satellite_position satellitePosition = xmlGetSignedNumericAttribute(search, "position", 10); + char * name = xmlGetAttribute(search, "name"); + t_satellite_position satellitePosition = GetSatellitePosition(name); + DBG("going to parse dvb-%c provider %s\n", xmlGetName(search)[0], xmlGetAttribute(search, "name")); - ParseTransponders(search->xmlChildrenNode, satellitePosition, cable); + ParseTransponders(search->xmlChildrenNode, satellitePosition, delsys); newfound++; search = search->xmlNextNode; } @@ -565,7 +569,7 @@ void CServiceManager::SaveMotorPositions() fclose(fd); } #endif -bool CServiceManager::InitSatPosition(t_satellite_position position, char * name, bool force) +bool CServiceManager::InitSatPosition(t_satellite_position position, char * name, bool force, int deltype) { if(force || (satellitePositions.find(position) == satellitePositions.end())) { satellitePositions[position].position = position; @@ -582,6 +586,7 @@ bool CServiceManager::InitSatPosition(t_satellite_position position, char * name satellitePositions[position].input = 0; satellitePositions[position].configured = 0; satellitePositions[position].cable_nid = 0; + satellitePositions[position].deltype = deltype; if(name) satellitePositions[position].name = name; return true; @@ -589,20 +594,54 @@ bool CServiceManager::InitSatPosition(t_satellite_position position, char * name return false; } +bool CServiceManager::LoadScanXml(fe_type_t delsys) +{ + if (ParseScanXml(delsys)) { + /* fake position for non-satellite */ + t_satellite_position position; + + xmlNodePtr search = xmlDocGetRootElement(scanInputParser)->xmlChildrenNode; + while (search) { + if (!(strcmp(xmlGetName(search), "sat"))) { + position = xmlGetSignedNumericAttribute(search, "position", 10); + char * name = xmlGetAttribute(search, "name"); + InitSatPosition(position, name, false, delsys); + } else if(!(strcmp(xmlGetName(search), "cable"))) { + char * name = xmlGetAttribute(search, "name"); + position = fake_pos++; + InitSatPosition(position, name, false, delsys); + satellitePositions[position].cable_nid = xmlGetNumericAttribute(search, "nid", 0); + } + ParseSatTransponders(delsys, search, position); + search = search->xmlNextNode; + } + delete scanInputParser; + scanInputParser = NULL; + return true; + } + return false; +} + bool CServiceManager::LoadServices(bool only_current) { if(CFEManager::getInstance()->getLiveFE() == NULL) return false; xmlDocPtr parser; - static bool satcleared = 0;//clear only once, because menu is static service_count = 0; printf("[zapit] Loading services, channel size %d ..\n", sizeof(CZapitChannel)); - frontendType = CFEManager::getInstance()->getLiveFE()->getInfo()->type; + //frontendType = CFEManager::getInstance()->getLiveFE()->getInfo()->type; if(only_current) goto do_current; +#if 0 // FIXME: obsolete ? + static bool satcleared = 0;//clear only once, because menu is static + if(!satcleared) { + satellitePositions.clear(); + satcleared = 1; + } +#endif TIMER_START(); allchans.clear(); transponders.clear(); @@ -612,39 +651,31 @@ bool CServiceManager::LoadServices(bool only_current) dup_numbers = false; fake_tid = fake_nid = 0; + fake_pos = 0xF00; - if (ParseScanXml()) { - t_satellite_position position = 0; - if(!satcleared) { - satellitePositions.clear(); - } - satcleared = 1; - - xmlNodePtr search = xmlDocGetRootElement(scanInputParser)->xmlChildrenNode; - while (search) { - if (!(strcmp(xmlGetName(search), "sat"))) { - position = xmlGetSignedNumericAttribute(search, "position", 10); - char * name = xmlGetAttribute(search, "name"); - InitSatPosition(position, name); - } else if(!(strcmp(xmlGetName(search), "cable"))) { - char * name = xmlGetAttribute(search, "name"); - InitSatPosition(position, name); - satellitePositions[position].cable_nid = xmlGetNumericAttribute(search, "nid", 0); - } - ParseSatTransponders(frontendType, search, position); - position++; - search = search->xmlNextNode; - } + if (CFEManager::getInstance()->haveSat()) { + INFO("Loading satellites..."); + LoadScanXml(FE_QPSK); + } + if (CFEManager::getInstance()->haveCable()) { + INFO("Loading cables..."); + LoadScanXml(FE_QAM); } parser = parseXmlFile(SERVICES_XML); if (parser != NULL) { xmlNodePtr search = xmlDocGetRootElement(parser)->xmlChildrenNode; while (search) { + char * name = xmlGetAttribute(search, "name"); + t_satellite_position position; if (!(strcmp(xmlGetName(search), "sat"))) { - t_satellite_position position = xmlGetSignedNumericAttribute(search, "position", 10); - char * name = xmlGetAttribute(search, "name"); - InitSatPosition(position, name); + position = xmlGetSignedNumericAttribute(search, "position", 10); + InitSatPosition(position, name, false, FE_QPSK); + } else { + position = GetSatellitePosition(name); + if (!position) + position = fake_pos++; + InitSatPosition(position, name, false, FE_QAM); } search = search->xmlNextNode; @@ -653,9 +684,11 @@ bool CServiceManager::LoadServices(bool only_current) xmlFreeDoc(parser); } - if(frontendType == FE_QPSK) { +#if 0 + if (CFEManager::getInstance()->haveSat()) { LoadMotorPositions(); } +#endif LoadProviderMap(); printf("[zapit] %d services loaded (%d)...\n", service_count, allchans.size()); @@ -709,7 +742,7 @@ void CServiceManager::CopyFile(char * from, char * to) void CServiceManager::WriteSatHeader(FILE * fd, sat_config_t &config) { - switch (frontendType) { + switch (config.deltype) { case FE_QPSK: /* satellite */ fprintf(fd, "\t\n", config.name.c_str(), config.position, config.diseqc, config.uncommited); @@ -776,7 +809,7 @@ void CServiceManager::SaveServices(bool tocopy, bool if_changed) if(tpdone) fprintf(fd, "\t\t\n"); } if(satdone) { - switch (frontendType) { + switch (spos_it->second.deltype) { case FE_QPSK: fprintf(fd, "\t\n"); break; @@ -896,12 +929,15 @@ bool CServiceManager::SaveCurrentServices(transponder_id_t tpid) return false; } - switch (frontendType) { + const char * footer; + switch (tI->second.deltype) { case FE_QPSK: /* satellite */ sprintf(satstr, "\t<%s name=\"%s\" position=\"%hd\">\n", "sat", spos_it->second.name.c_str(), satellitePosition); + footer = ""; break; case FE_QAM: /* cable */ sprintf(satstr, "\t<%s name=\"%s\"\n", "cable", spos_it->second.name.c_str()); + footer = ""; break; case FE_OFDM: default: @@ -912,7 +948,7 @@ bool CServiceManager::SaveCurrentServices(transponder_id_t tpid) fprintf(fd, "\n\n"); } else { fgets(buffer, 255, fd1); - while(!feof(fd1) && !strstr(buffer, satfound ? "" : "")) { + while(!feof(fd1) && !strstr(buffer, satfound ? footer : "")) { if(!satfound && !strcmp(buffer, satstr)) satfound = 1; fputs(buffer, fd); @@ -939,9 +975,9 @@ bool CServiceManager::SaveCurrentServices(transponder_id_t tpid) } if(tpdone) { fprintf(fd, "\t\t\n"); - fprintf(fd, "\t\n"); + fprintf(fd, "\t%s\n", footer); } else if(satfound) - fprintf(fd, "\t\n"); + fprintf(fd, "\t%s\n", footer); if(fd1) { fgets(buffer, 255, fd1); while(!feof(fd1)) { From 456041195bed40332857c107280bbe3a5ef697b7 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 16:02:18 +0400 Subject: [PATCH 082/442] zapit/src/femanager.cpp: fixes for mixed frontends, add helpers --- src/zapit/include/zapit/femanager.h | 4 ++ src/zapit/src/femanager.cpp | 72 ++++++++++++++++++++++++----- 2 files changed, 65 insertions(+), 11 deletions(-) diff --git a/src/zapit/include/zapit/femanager.h b/src/zapit/include/zapit/femanager.h index d82a28314..5b794c530 100644 --- a/src/zapit/include/zapit/femanager.h +++ b/src/zapit/include/zapit/femanager.h @@ -133,5 +133,9 @@ class CFEManager bool lockDemux(int i, transponder_id_t id); void unlockDemux(int i); bool haveFreeDemux(); + bool haveSat(); + bool haveCable(); + bool satOnly() { return (haveSat() && !haveCable()); } + bool cableOnly() { return (haveCable() && !haveSat()); } }; #endif /* __femanager_h__ */ diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index c35f753af..445851b16 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -196,7 +196,7 @@ bool CFEManager::loadSettings() int def_mode0 = CFrontend::FE_MODE_INDEPENDENT; int def_modeX = CFrontend::FE_MODE_UNUSED; - fe_mode_t newmode = (fe_mode_t) configfile.getInt32("mode", -1); + int newmode = (fe_mode_t) configfile.getInt32("mode", -1); if (newmode >= 0) { INFO("old mode param: %d\n", newmode); if (newmode == FE_MODE_LOOP) { @@ -206,10 +206,12 @@ bool CFEManager::loadSettings() def_mode0 = CFrontend::FE_MODE_MASTER; def_modeX = CFrontend::FE_MODE_LINK_TWIN; } else if (newmode == FE_MODE_ALONE) { - def_mode0 = CFrontend::FE_MODE_MASTER; + def_mode0 = CFrontend::FE_MODE_INDEPENDENT; def_modeX = CFrontend::FE_MODE_INDEPENDENT; } } + bool fsat = true; + bool fcable = true; for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; frontend_config_t & fe_config = fe->getConfig(); @@ -224,7 +226,21 @@ bool CFEManager::loadSettings() fe->setRotorSatellitePosition(getConfigValue(fe, "lastSatellitePosition", 0)); - int def_mode = fe->fenumber ? def_modeX : def_mode0; + /* default mode for first / next frontends */ + int def_mode = def_modeX; + if (fe->isSat() && fsat) { + fsat = false; + def_mode = def_mode0; + } + if (fe->isCable()) { + if (fcable) { + fcable = false; + def_mode = def_mode0; + } + if (def_mode > CFrontend::FE_MODE_INDEPENDENT) + def_mode = CFrontend::FE_MODE_INDEPENDENT; + } + fe->setMode(getConfigValue(fe, "mode", def_mode)); fe->setMaster(getConfigValue(fe, "master", 0)); @@ -236,6 +252,9 @@ bool CFEManager::loadSettings() satellite_map_t satlist = CServiceManager::getInstance()->SatelliteList(); for(sat_iterator_t sit = satlist.begin(); sit != satlist.end(); ++sit) { + if (fe->getInfo()->type != sit->second.deltype) + continue; + t_satellite_position position = sit->first; sat_config_t satconfig; /* defaults, to replace CServiceManager::InitSatPosition/LoadMotorPositions @@ -340,9 +359,10 @@ void CFEManager::linkFrontends(bool init) OpenThreads::ScopedLock m_lock(mutex); for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; +#if 0 if (fe->getInfo()->type != FE_QPSK) fe->setMode(CFrontend::FE_MODE_INDEPENDENT); - +#endif int femode = fe->getMode(); fe->slave = false; fe->linkmap.clear(); @@ -354,7 +374,7 @@ void CFEManager::linkFrontends(bool init) CFrontend * fe2 = it2->second; if (!CFrontend::linked(fe2->getMode())) continue; - if (fe2->getMaster() != fe->fenumber) + if (fe2->getType() != fe->getType() || (fe2->getMaster() != fe->fenumber)) continue; #if 0 int mnum = fe2->getMaster(); @@ -472,6 +492,8 @@ CFrontend * CFEManager::getFrontend(CZapitChannel * channel) for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * mfe = it->second; + if (mfe->getType() != channel->deltype) + continue; if (mfe->getMode() == CFrontend::FE_MODE_UNUSED || CFrontend::linked(mfe->getMode())) continue; @@ -499,7 +521,7 @@ CFrontend * CFEManager::getFrontend(CZapitChannel * channel) fe->Locked(), fe->getFrequency(), fe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId()); if(fe->Locked()) { - if ((fe->getCurrentSatellitePosition() != satellitePosition)) { + if (fe->isSat() && (fe->getCurrentSatellitePosition() != satellitePosition)) { free_frontend = NULL; free_twin = NULL; break; @@ -621,11 +643,18 @@ CFrontend * CFEManager::getScanFrontend(t_satellite_position satellitePosition) CFrontend * frontend = NULL; for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * mfe = it->second; - satellite_map_t & satmap = mfe->getSatellites(); - sat_iterator_t sit = satmap.find(satellitePosition); - if ((sit != satmap.end()) && sit->second.configured) { - frontend = mfe; - break; + if(mfe->isCable()) { + if ((satellitePosition & 0xF00) == 0xF00) { + frontend = mfe; + break; + } + } else { + satellite_map_t & satmap = mfe->getSatellites(); + sat_iterator_t sit = satmap.find(satellitePosition); + if ((sit != satmap.end()) && sit->second.configured) { + frontend = mfe; + break; + } } } INFO("Selected fe: %d", frontend ? frontend->fenumber : -1); @@ -669,6 +698,7 @@ bool CFEManager::unlockFrontend(CFrontend * frontend, bool unlock_demux) return true; } +// FIXME bool CFEManager::haveFreeFrontend() { if(have_locked) { @@ -685,3 +715,23 @@ bool CFEManager::haveFreeFrontend() } return true; } + +bool CFEManager::haveSat() +{ + for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { + CFrontend * fe = it->second; + if (fe->getInfo()->type == FE_QPSK) + return true; + } + return false; +} + +bool CFEManager::haveCable() +{ + for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { + CFrontend * fe = it->second; + if (fe->getInfo()->type == FE_QAM) + return true; + } + return false; +} From 570b902dcb002f4064a0333b16ce2e854aa87a60 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 16:18:19 +0400 Subject: [PATCH 083/442] gui/scan_setup.cpp: rework tuner setup and scan menu for mixed frontend types --- src/gui/scan_setup.cpp | 463 +++++++++++++++++++++++++---------------- src/gui/scan_setup.h | 1 + 2 files changed, 285 insertions(+), 179 deletions(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 80f59c7cc..7c648a57c 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -205,8 +205,18 @@ CScanSetup::CScanSetup(bool wizard_mode) satprov_locale = (r_system == DVB_S) ? LOCALE_SATSETUP_SATELLITE : LOCALE_CABLESETUP_PROVIDER; satSelect = NULL; + cableSelect = NULL; + satOnOff = NULL; + fautoScanAll = NULL; frontendSetup = NULL; + fsatSetup = NULL; + fsatSelect = NULL; + dtype = NULL; + uniSetup = NULL; + ojDiseqcRepeats = NULL; nid = NULL; + lcnhd = NULL; + linkfe = NULL; } CScanSetup* CScanSetup::getInstance() @@ -282,23 +292,28 @@ int CScanSetup::exec(CMenuTarget* parent, const std::string &actionKey) g_settings.keep_channel_numbers = 1; CServiceManager::getInstance()->KeepNumbers(g_settings.keep_channel_numbers); } - CScanTs scanTs; + CScanTs scanTs(FE_QAM); scanTs.exec(NULL, "manual"); return res; } std::string scants_key[] = {"all", "manual", "test", "fast", "auto"/*doesn't exists in CScanTs!*/}; - for (uint i=0; i< (sizeof(scants_key)/sizeof(scants_key[0])); i++) - { - if (actionKey == scants_key[i]) + if (actionKey.size() > 1) { + int delsys = actionKey[0] == 's' ? FE_QPSK : FE_QAM; + std::string as = actionKey.substr(1); + printf("[neutrino] CScanSetup::%s scan %c in %s mode...\n", __FUNCTION__, actionKey[0], as.c_str()); + for (uint i=0; i< (sizeof(scants_key)/sizeof(scants_key[0])); i++) { - printf("[neutrino] CScanSetup::%s %s...\n", __FUNCTION__, scants_key[i].c_str()); - //ensure that be saved all settings before scan... - saveScanSetup(); - //...then start scan - CScanTs scanTs; - scanTs.exec(NULL, scants_key[i]); - return res; + if (as == scants_key[i]) + { + printf("[neutrino] CScanSetup::%s %s...\n", __FUNCTION__, scants_key[i].c_str()); + //ensure that be saved all settings before scan... + saveScanSetup(); + //...then start scan + CScanTs scanTs(delsys); + scanTs.exec(NULL, scants_key[i]); + return res; + } } } @@ -337,6 +352,7 @@ int CScanSetup::showScanMenu() { printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); int shortcut = 1; + int w = getSatMenuListWidth(); CMenuForwarder * mf; CMenuOptionChooser * mc; @@ -368,42 +384,112 @@ int CScanSetup::showScanMenu() settings->addItem(mc); //sat/provider selector - satSelect = new CMenuOptionStringChooser(satprov_locale, scansettings.satNameNoDiseqc, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); - satOnOff = new CMenuWidget(satprov_locale, NEUTRINO_ICON_SETTINGS, width); - if (r_system == DVB_S) //sat - { - satSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATELLITE); - //settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCANTS_PREVERENCES_RECEIVING_SYSTEM)); + if(CFEManager::getInstance()->getFrontendCount() > 1) { CMenuWidget * setupMenu = new CMenuWidget(LOCALE_SATSETUP_FE_SETUP, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_SCAN_FE_SETUP); addScanMenuFrontendSetup(setupMenu); mf = new CMenuDForwarder(LOCALE_SATSETUP_FE_SETUP, allow_start, NULL, setupMenu, "", CRCInput::convertDigitToKey(shortcut++)); mf->setHint("", LOCALE_MENU_HINT_SCAN_FESETUP); settings->addItem(mf); + } + + if (CFEManager::getInstance()->haveSat()) { + r_system = DVB_S; + + settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCANTS_PREVERENCES_RECEIVING_SYSTEM)); + + satSelect = new CMenuOptionStringChooser(LOCALE_SATSETUP_SATELLITE, scansettings.satName, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + satSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATELLITE); + + satOnOff = new CMenuWidget(LOCALE_SATSETUP_SATELLITE, NEUTRINO_ICON_SETTINGS, width); + +#if 0 + CMenuWidget * setupMenu = new CMenuWidget(LOCALE_SATSETUP_FE_SETUP, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_SCAN_FE_SETUP); + addScanMenuFrontendSetup(setupMenu); + mf = new CMenuDForwarder(LOCALE_SATSETUP_FE_SETUP, allow_start, NULL, setupMenu, "", CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_SCAN_FESETUP); + settings->addItem(mf); +#endif /* add configured satellites to satSelect */ fillSatSelect(satSelect); + + //auto scan + char autoscan[64]; + std::string s_capt_part = g_Locale->getText(LOCALE_SATSETUP_SATELLITE); + snprintf(autoscan, 64, g_Locale->getText(LOCALE_SATSETUP_AUTO_SCAN), s_capt_part.c_str()); + + /* FIXME leak, satSelect added to both auto and manual scan, so one of them cannot be deleted */ + CMenuWidget * autoScan = new CMenuWidget(LOCALE_SERVICEMENU_SCANTS, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN); + addScanMenuAutoScan(autoScan); + mf = new CMenuForwarderNonLocalized(autoscan, true, NULL, autoScan, "", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTO); + settings->addItem(mf); + + //manual scan + CMenuWidget * manualScan = new CMenuWidget(LOCALE_SATSETUP_MANUAL_SCAN, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN); + addScanMenuManualScan(manualScan); + mf = new CMenuForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, manualScan, "", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL); + settings->addItem(mf); + //auto scan all + CMenuWidget * autoScanAll = new CMenuWidget(LOCALE_SATSETUP_AUTO_SCAN_ALL, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN_ALL); + addScanMenuAutoScanAll(autoScanAll); + fautoScanAll = new CMenuDForwarder(LOCALE_SATSETUP_AUTO_SCAN_ALL, true /*(dmode != NO_DISEQC)*/, NULL, autoScanAll, "", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + fautoScanAll->setHint("", LOCALE_MENU_HINT_SCAN_AUTOALL); + settings->addItem(fautoScanAll); +#ifdef ENABLE_FASTSCAN + //fast scan + CMenuWidget * fastScanMenu = new CMenuWidget(LOCALE_SATSETUP_FASTSCAN_HEAD, NEUTRINO_ICON_SETTINGS, MN_WIDGET_ID_SCAN_FAST_SCAN); + addScanMenuFastScan(fastScanMenu); + mf = new CMenuDForwarder(LOCALE_SATSETUP_FASTSCAN_HEAD, true, NULL, fastScanMenu, "", CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_SCAN_FAST); + settings->addItem(mf); +#endif } - else if (r_system == DVB_C) //cable - { - satSelect->setHint("", LOCALE_MENU_HINT_SCAN_CABLE); + if (CFEManager::getInstance()->haveCable()) { + r_system = DVB_C; + + cableSelect = new CMenuOptionStringChooser(LOCALE_CABLESETUP_PROVIDER, scansettings.cableName, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + cableSelect->setHint("", LOCALE_MENU_HINT_SCAN_CABLE); //-------------------------------------------------------------- settings->addItem(GenericMenuSeparatorLine); //-------------------------------------------------------------- - fillCableSelect(satSelect); + fillCableSelect(cableSelect); //tune timeout - CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); - nc->setHint("", LOCALE_MENU_HINT_SCAN_FETIMEOUT); - settings->addItem(nc); -#if 0 - if(CFEManager::getInstance()->getFrontendCount() > 1) { - femode = CFEManager::getInstance()->getMode(); - mc = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE, (int *)&femode, SATSETUP_FRONTEND_MODE, 2, true, this); - mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); - settings->addItem(mc); + if(CFEManager::getInstance()->getFrontendCount() <= 1) { + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); + nc->setHint("", LOCALE_MENU_HINT_SCAN_FETIMEOUT); + settings->addItem(nc); } -#endif nid = new CIntInput(LOCALE_SATSETUP_CABLE_NID, (int&) scansettings.cable_nid, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); + + //auto scan + char autoscan[64]; + std::string s_capt_part = g_Locale->getText(LOCALE_CABLESETUP_PROVIDER); + snprintf(autoscan, 64, g_Locale->getText(LOCALE_SATSETUP_AUTO_SCAN), s_capt_part.c_str()); + bool have_sat = CFEManager::getInstance()->haveSat(); + + /* FIXME leak, satSelect added to both auto and manual scan, so one of them cannot be deleted */ + CMenuWidget * autoScan = new CMenuWidget(LOCALE_SERVICEMENU_SCANTS, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN); + addScanMenuAutoScan(autoScan); + mf = new CMenuForwarderNonLocalized(autoscan, true, NULL, autoScan, "", have_sat ? CRCInput::RC_nokey : CRCInput::RC_green, have_sat ? NULL : NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTO); + settings->addItem(mf); + + //manual scan + CMenuWidget * manualScan = new CMenuWidget(LOCALE_SATSETUP_MANUAL_SCAN, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN); + addScanMenuManualScan(manualScan); + mf = new CMenuForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, manualScan, "", have_sat ? CRCInput::RC_nokey : CRCInput::RC_yellow, have_sat ? NULL : NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL); + settings->addItem(mf); + //simple cable scan + CMenuWidget * cableScan = new CMenuWidget(LOCALE_SATSETUP_CABLE, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_CABLE_SCAN); + addScanMenuCable(cableScan); + CMenuForwarder * fcableScan = new CMenuDForwarder(LOCALE_SATSETUP_CABLE, true, NULL, cableScan, "", have_sat ? CRCInput::RC_nokey : CRCInput::RC_blue, have_sat ? NULL : NEUTRINO_ICON_BUTTON_BLUE); + fcableScan->setHint("", LOCALE_MENU_HINT_SCAN_CABLE_SIMPLE); + settings->addItem(fcableScan); } +#if 0 //-------------------------------------------------------------- settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCANTS_PREVERENCES_SCAN)); //-------------------------------------------------------------- @@ -454,7 +540,7 @@ int CScanSetup::showScanMenu() fcableScan->setHint("", LOCALE_MENU_HINT_SCAN_CABLE_SIMPLE); settings->addItem(fcableScan); } - +#endif int res = settings->exec(NULL, ""); //delete satSelect; @@ -553,7 +639,6 @@ int CScanSetup::showFrontendSetup(int number) CMenuWidget * setupMenu = new CMenuWidget(name, NEUTRINO_ICON_SETTINGS, width); setupMenu->setSelected(feselected); setupMenu->addIntroItems(); -//<<<<<<< HEAD int fecount = CFEManager::getInstance()->getFrontendCount(); @@ -574,10 +659,10 @@ int CScanSetup::showFrontendSetup(int number) /* enable master option, check if we have masters to enable link options */ mode_count = 3; for (int i = 0; i < fecount; i++) { - if (i != fenumber && CFEManager::getInstance()->getFE(i)->getMode() == CFrontend::FE_MODE_MASTER) { - int num = CFEManager::getInstance()->getFE(i)->getNumber(); - snprintf(fename[select_count], sizeof(fename[select_count]), "%d: %s", num+1, - CFEManager::getInstance()->getFE(i)->getInfo()->name); + CFrontend * testfe = CFEManager::getInstance()->getFE(i); + if (i != fenumber && (fe->getType() == testfe->getType()) && (testfe->getMode() == CFrontend::FE_MODE_MASTER)) { + int num = testfe->getNumber(); + snprintf(fename[select_count], sizeof(fename[select_count]), "%d: %s", num+1, testfe->getInfo()->name); feselect[select_count].key = num; feselect[select_count].value = NONEXISTANT_LOCALE; feselect[select_count].valname = fename[select_count]; @@ -607,79 +692,71 @@ int CScanSetup::showFrontendSetup(int number) mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); setupMenu->addItem(mc); - /* disable all but mode option for linked frontends */ - bool allow_moptions = !CFrontend::linked(femode); + if (fe->getInfo()->type == FE_QPSK) { + /* disable all but mode option for linked frontends */ + bool allow_moptions = !CFrontend::linked(femode); - /* link to master select */ - linkfe = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE_MASTER, &femaster, feselect, select_count, !allow_moptions, this, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN, true); - setupMenu->addItem(linkfe); + /* link to master select */ + linkfe = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE_MASTER, &femaster, feselect, select_count, !allow_moptions, this, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN, true); + setupMenu->addItem(linkfe); + /* diseqc type select */ + dtype = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC, (int *)&dmode, SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT, + femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP, + this, CRCInput::convertDigitToKey(shortcut++), "", true); + dtype->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCTYPE); + setupMenu->addItem(dtype); - /* diseqc type select */ - dtype = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC, (int *)&dmode, SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT, - femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP, - this, CRCInput::convertDigitToKey(shortcut++), "", true); - dtype->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCTYPE); - setupMenu->addItem(dtype); + /* diseqc repeats */ + ojDiseqcRepeats = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQCREPEAT, (int *)&fe_config.diseqcRepeats, allow_moptions && (dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED), 0, 2, NULL); + ojDiseqcRepeats->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCREPEAT); + setupMenu->addItem(ojDiseqcRepeats); - /* diseqc repeats */ - ojDiseqcRepeats = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQCREPEAT, (int *)&fe_config.diseqcRepeats, allow_moptions && (dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED), 0, 2, NULL); -#if 0 //======= - - bool option_onoff = (number > 0 && fe_config.diseqcType == DISEQC_UNICABLE && femode == CFEManager::FE_MODE_TWIN) ? false : true; - - CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC, (int *)&dmode, SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT, allow_start && option_onoff, this, CRCInput::convertDigitToKey(shortcut++), "", true); - mc->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCTYPE); - setupMenu->addItem(mc); + CMenuWidget * satToSelect = new CMenuWidget(LOCALE_SATSETUP_SELECT_SAT, NEUTRINO_ICON_SETTINGS, width); + satToSelect->addIntroItems(); - ojDiseqcRepeats = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQCREPEAT, (int *)&fe_config.diseqcRepeats, (dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED) && (dmode != DISEQC_UNICABLE), 0, 2, NULL); -#endif //>>>>>>> dvbsi++ - ojDiseqcRepeats->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCREPEAT); - setupMenu->addItem(ojDiseqcRepeats); + satellite_map_t & satmap = fe->getSatellites(); + for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); ++sit) + { + std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); + mc = new CMenuOptionChooser(satname.c_str(), &sit->second.configured, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_SATENABLE); + satToSelect->addItem(mc); + } + fsatSelect = new CMenuForwarder(LOCALE_SATSETUP_SELECT_SAT, allow_moptions, NULL, satToSelect, "", CRCInput::convertDigitToKey(shortcut++)); + fsatSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATADD); + setupMenu->addItem(fsatSelect); - CMenuWidget satToSelect(LOCALE_SATSETUP_SELECT_SAT, NEUTRINO_ICON_SETTINGS, width); - satToSelect.addIntroItems(); + fsatSetup = new CMenuForwarder(LOCALE_SATSETUP_SAT_SETUP, allow_moptions, NULL, this, "satsetup", CRCInput::convertDigitToKey(shortcut++)); + fsatSetup->setHint("", LOCALE_MENU_HINT_SCAN_SATSETUP); + setupMenu->addItem(fsatSetup); - satellite_map_t & satmap = fe->getSatellites(); - for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); ++sit) - { - std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); - mc = new CMenuOptionChooser(satname.c_str(), &sit->second.configured, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); - mc->setHint("", LOCALE_MENU_HINT_SCAN_SATENABLE); - satToSelect.addItem(mc); + uniSetup = new CMenuForwarder(LOCALE_SATSETUP_UNI_SETTINGS, (dmode == DISEQC_UNICABLE), NULL, this, "unisetup", CRCInput::convertDigitToKey(shortcut++)); + setupMenu->addItem(uniSetup); + + setupMenu->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SATSETUP_EXTENDED_MOTOR)); + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_MOTOR_SPEED, (int *)&fe_config.motorRotationSpeed, true, 0, 64, NULL); + nc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_SPEED); + setupMenu->addItem(nc); + + mc = new CMenuOptionChooser(LOCALE_EXTRA_ZAPIT_HVOLTAGE, (int *)&fe_config.highVoltage, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_18V); + setupMenu->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_SATSETUP_USE_USALS, &all_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_SCAN_USALSALL); + setupMenu->addItem(mc); + + CMenuForwarder * mf = new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, true, NULL, this, "satfind", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + mf->setHint("", LOCALE_MENU_HINT_SCAN_SATFIND); + setupMenu->addItem(mf); } - fsatSelect = new CMenuForwarder(LOCALE_SATSETUP_SELECT_SAT, allow_moptions, NULL, &satToSelect, "", CRCInput::convertDigitToKey(shortcut++)); - fsatSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATADD); - setupMenu->addItem(fsatSelect); - - fsatSetup = new CMenuForwarder(LOCALE_SATSETUP_SAT_SETUP, allow_moptions, NULL, this, "satsetup", CRCInput::convertDigitToKey(shortcut++)); - fsatSetup->setHint("", LOCALE_MENU_HINT_SCAN_SATSETUP); - setupMenu->addItem(fsatSetup); - - uniSetup = new CMenuForwarder(LOCALE_SATSETUP_UNI_SETTINGS, (dmode == DISEQC_UNICABLE), NULL, this, "unisetup", CRCInput::convertDigitToKey(shortcut++)); - setupMenu->addItem(uniSetup); - - setupMenu->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SATSETUP_EXTENDED_MOTOR)); - CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_MOTOR_SPEED, (int *)&fe_config.motorRotationSpeed, true, 0, 64, NULL); - nc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_SPEED); - setupMenu->addItem(nc); - - mc = new CMenuOptionChooser(LOCALE_EXTRA_ZAPIT_HVOLTAGE, (int *)&fe_config.highVoltage, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); - mc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_18V); - setupMenu->addItem(mc); - - mc = new CMenuOptionChooser(LOCALE_SATSETUP_USE_USALS, &all_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); - mc->setHint("", LOCALE_MENU_HINT_SCAN_USALSALL); - setupMenu->addItem(mc); - - CMenuForwarder * mf = new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, true, NULL, this, "satfind", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); - mf->setHint("", LOCALE_MENU_HINT_SCAN_SATFIND); - setupMenu->addItem(mf); int res = setupMenu->exec(NULL, ""); feselected = setupMenu->getSelected(); /* add configured satellites to satSelect in case they changed */ - fillSatSelect(satSelect); + if (fe->isSat()) + fillSatSelect(satSelect); delete setupMenu; /* re-link in case mode changed, without fe init */ @@ -708,7 +785,7 @@ int CScanSetup::showUnicableSetup() uni_setup->addIntroItems(); uni_setup->addItem(uniscr); - CMenuForwarder *mf = new CMenuForwarder(LOCALE_UNICABLE_QRG, true, uniqrg->getValue(), uniqrg); + CMenuForwarder *mf = new CMenuDForwarder(LOCALE_UNICABLE_QRG, true, uniqrg->getValue(), uniqrg); uni_setup->addItem(mf); res = uni_setup->exec(NULL, ""); delete uni_setup; @@ -729,9 +806,9 @@ int CScanSetup::showScanMenuLnbSetup() CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); char name[255]; - snprintf(name, sizeof(name), "%s %d: %s", g_Locale->getText(satprov_locale), fenumber+1, fe->getInfo()->name); + snprintf(name, sizeof(name), "%s %d: %s", g_Locale->getText(LOCALE_SATSETUP_SATELLITE), fenumber+1, fe->getInfo()->name); - CMenuWidget * sat_setup = new CMenuWidget(name /*satprov_locale*/, NEUTRINO_ICON_SETTINGS, width); + CMenuWidget * sat_setup = new CMenuWidget(name, NEUTRINO_ICON_SETTINGS, width); sat_setup->addIntroItems(); satellite_map_t & satmap = fe->getSatellites(); @@ -786,6 +863,10 @@ void CScanSetup::fillSatSelect(CMenuOptionStringChooser * select) int count = CFEManager::getInstance()->getFrontendCount(); for(int i = 0; i < count; i++) { CFrontend * fe = CFEManager::getInstance()->getFE(i); + + if (fe->getInfo()->type != FE_QPSK) + continue; + satellite_map_t & satmap = fe->getSatellites(); for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); ++sit) { tmpit = satpos.find(sit->first); @@ -794,7 +875,7 @@ void CScanSetup::fillSatSelect(CMenuOptionStringChooser * select) select->addOption(satname.c_str()); satpos.insert(sit->first); - if (!sfound && strcmp(scansettings.satNameNoDiseqc, satname.c_str()) == 0) + if (!sfound && strcmp(scansettings.satName, satname.c_str()) == 0) sfound = true; } } @@ -806,7 +887,7 @@ void CScanSetup::fillSatSelect(CMenuOptionStringChooser * select) if(!sfound && !satpos.empty()) { tmpit = satpos.begin(); std::string satname = CServiceManager::getInstance()->GetSatelliteName(*tmpit); - snprintf(scansettings.satNameNoDiseqc, sizeof(scansettings.satNameNoDiseqc), "%s", satname.c_str()); + snprintf(scansettings.satName, sizeof(scansettings.satName), "%s", satname.c_str()); } satellite_map_t & satmap = CServiceManager::getInstance()->SatelliteList(); for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); sit++) { @@ -826,20 +907,25 @@ void CScanSetup::fillCableSelect(CMenuOptionStringChooser * select) //don't misunderstand the name "satSelect", in this context it's actually for cable providers satellite_map_t satmap = CServiceManager::getInstance()->SatelliteList(); bool sfound = false; + std::string fname; for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); sit++) { + if (sit->second.deltype != FE_QAM) + continue; + printf("Adding cable menu for %s position %d\n", sit->second.name.c_str(), sit->first); select->addOption(sit->second.name.c_str()); - if (!sfound && strcmp(scansettings.satNameNoDiseqc, sit->second.name.c_str()) == 0) + if (fname.empty()) + fname = sit->second.name; + + if (!sfound && strcmp(scansettings.cableName, sit->second.name.c_str()) == 0) sfound = true; dprintf(DEBUG_DEBUG, "got scanprovider (cable): %s\n", sit->second.name.c_str()); } - if (!sfound && !satmap.empty()) { - sat_iterator_t sit = satmap.begin(); - snprintf(scansettings.satNameNoDiseqc, sizeof(scansettings.satNameNoDiseqc), "%s", sit->second.name.c_str()); - } + if (!sfound && !fname.empty()) + snprintf(scansettings.cableName, sizeof(scansettings.cableName), "%s", fname.c_str()); } int CScanSetup::showScanMenuSatFind() @@ -848,13 +934,16 @@ int CScanSetup::showScanMenuSatFind() int count = 0; CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); char name[255]; + + r_system = DVB_S; + snprintf(name, sizeof(name), "%s %d: %s", g_Locale->getText(LOCALE_MOTORCONTROL_HEAD), fenumber+1, fe->getInfo()->name); CMenuWidget* sat_findMenu = new CMenuWidget(name /*LOCALE_MOTORCONTROL_HEAD*/, NEUTRINO_ICON_SETTINGS, width); sat_findMenu->addIntroItems(); - CMenuOptionStringChooser * feSatSelect = new CMenuOptionStringChooser(satprov_locale, scansettings.satNameNoDiseqc, true, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + CMenuOptionStringChooser * feSatSelect = new CMenuOptionStringChooser(LOCALE_SATSETUP_SATELLITE, scansettings.satName, true, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); feSatSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATSELECT); satellite_map_t & satmap = fe->getSatellites(); @@ -865,19 +954,19 @@ int CScanSetup::showScanMenuSatFind() continue; std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); feSatSelect->addOption(satname.c_str()); - if (!sfound && strcmp(scansettings.satNameNoDiseqc, satname.c_str()) == 0) + if (!sfound && strcmp(scansettings.satName, satname.c_str()) == 0) sfound = true; if (!sfound && firstname.empty()) firstname = satname; count++; } if(count && !sfound) - snprintf(scansettings.satNameNoDiseqc, sizeof(scansettings.satNameNoDiseqc), "%s", firstname.c_str()); + snprintf(scansettings.satName, sizeof(scansettings.satName), "%s", firstname.c_str()); sat_findMenu->addItem(feSatSelect); CTPSelectHandler tpSelect; - CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, &tpSelect, "test", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, &tpSelect, "sat", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); mf->setHint("", LOCALE_MENU_HINT_SCAN_TPSELECT); sat_findMenu->addItem(mf); sat_findMenu->addItem(GenericMenuSeparatorLine); @@ -962,17 +1051,17 @@ void CScanSetup::addScanMenuManualScan(CMenuWidget *manual_Scan) manual_Scan->addIntroItems(); //---------------------------------------------------------------------- - manual_Scan->addItem(satSelect); - if (r_system == DVB_C) { //cable -#if 0 - CIntInput* nid = new CIntInput(LOCALE_SATSETUP_CABLE_NID, (int&) scansettings.cable_nid, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); - mf = new CMenuDForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); -#endif + if (r_system == DVB_C) { + manual_Scan->addItem(cableSelect); mf = new CMenuForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); mf->setHint("", LOCALE_MENU_HINT_SCAN_NID); manual_Scan->addItem(mf); + mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler(), "cable", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + } else { + manual_Scan->addItem(satSelect); + mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler(), "sat", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); } - mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler()/*tpSelect*/, "test", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_TPSELECT); manual_Scan->addItem(mf); @@ -983,11 +1072,11 @@ void CScanSetup::addScanMenuManualScan(CMenuWidget *manual_Scan) //---------------------------------------------------------------------- manual_Scan->addItem(GenericMenuSeparatorLine); - mf = new CMenuForwarder(LOCALE_SCANTS_TEST, allow_start, NULL, this, "test", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf = new CMenuForwarder(LOCALE_SCANTS_TEST, allow_start, NULL, this, r_system == DVB_C ? "ctest" : "stest", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); mf->setHint("", LOCALE_MENU_HINT_SCAN_TEST); manual_Scan->addItem(mf); - mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "manual", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, r_system == DVB_C ? "cmanual" : "smanual", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); mf->setHint("", LOCALE_MENU_HINT_SCAN_START); manual_Scan->addItem(mf); } @@ -998,7 +1087,7 @@ void CScanSetup::addScanMenuAutoScanAll(CMenuWidget *auto_ScanAll) printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); auto_ScanAll->addIntroItems(); //---------------------------------------------------------------------- - CMenuForwarder * mf = new CMenuForwarder(satprov_locale, true, NULL, satOnOff, "", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_SATSETUP_SATELLITE, true, NULL, satOnOff, "", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTOALL_SELECT); auto_ScanAll->addItem(mf); @@ -1007,7 +1096,7 @@ void CScanSetup::addScanMenuAutoScanAll(CMenuWidget *auto_ScanAll) addListFlagsItems(auto_ScanAll, 1); //---------------------------------------------------------------------- auto_ScanAll->addItem(GenericMenuSeparatorLine); - mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "all", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "sall", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); mf->setHint("", LOCALE_MENU_HINT_SCAN_START); auto_ScanAll->addItem(mf); } @@ -1045,7 +1134,7 @@ void CScanSetup::addScanMenuFastScan(CMenuWidget *fast_ScanMenu) fast_ScanMenu->addItem(fastType); //---------------------------------------------------------------------- fast_ScanMenu->addItem(GenericMenuSeparatorLine); - CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "fast", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "sfast", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); mf->setHint("", LOCALE_MENU_HINT_SCAN_START); fast_ScanMenu->addItem(mf); } @@ -1058,22 +1147,20 @@ void CScanSetup::addScanMenuAutoScan(CMenuWidget *auto_Scan) CMenuForwarder * mf; auto_Scan->addIntroItems(); - auto_Scan->addItem(satSelect); if (r_system == DVB_C) { //cable -#if 0 - CIntInput* nid = new CIntInput(LOCALE_SATSETUP_CABLE_NID, (int&) scansettings.cable_nid, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); - mf = new CMenuDForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); -#endif + auto_Scan->addItem(cableSelect); mf = new CMenuForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); mf->setHint("", LOCALE_MENU_HINT_SCAN_NID); auto_Scan->addItem(mf); - } + } else + auto_Scan->addItem(satSelect); + auto_Scan->addItem(GenericMenuSeparatorLine); //---------------------------------------------------------------------- addListFlagsItems(auto_Scan, 1); //---------------------------------------------------------------------- auto_Scan->addItem(GenericMenuSeparatorLine); - mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "auto", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, r_system == DVB_C ? "cauto" : "sauto", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); mf->setHint("", LOCALE_MENU_HINT_SCAN_START); auto_Scan->addItem(mf); } @@ -1087,7 +1174,7 @@ void CScanSetup::addScanMenuCable(CMenuWidget *menu) menu->addIntroItems(); //---------------------------------------------------------------------- - CMenuOptionStringChooser * select = new CMenuOptionStringChooser(satprov_locale, scansettings.satNameNoDiseqc, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + CMenuOptionStringChooser * select = new CMenuOptionStringChooser(LOCALE_CABLESETUP_PROVIDER, scansettings.cableName, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); fillCableSelect(select); select->setHint("", LOCALE_MENU_HINT_SCAN_CABLE); menu->addItem(select); @@ -1096,21 +1183,21 @@ void CScanSetup::addScanMenuCable(CMenuWidget *menu) mf->setHint("", LOCALE_MENU_HINT_SCAN_NID); menu->addItem(mf); - mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler(), "test", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler(), "cable", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); mf->setHint("", LOCALE_MENU_HINT_SCAN_TPSELECT); menu->addItem(mf); menu->addItem(GenericMenuSeparatorLine); - CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); - CMenuForwarder *Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); + CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.cable_TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + CMenuForwarder *Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.cable_TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); - CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); - CMenuForwarder *Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); + CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.cable_TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + CMenuForwarder *Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.cable_TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); Rate->setHint("", LOCALE_MENU_HINT_SCAN_RATE); - CMenuOptionChooser * mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_MOD, (int *)&scansettings.TP_mod, SATSETUP_SCANTP_MOD, SATSETUP_SCANTP_MOD_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + CMenuOptionChooser * mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_MOD, (int *)&scansettings.cable_TP_mod, SATSETUP_SCANTP_MOD, SATSETUP_SCANTP_MOD_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); mod_pol->setHint("", LOCALE_MENU_HINT_SCAN_MOD); menu->addItem(Freq); @@ -1142,24 +1229,32 @@ int CScanSetup::addScanOptionsItems(CMenuWidget *options_menu, const int &shortc printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); int shortCut = shortcut; - CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); - CMenuForwarder *Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); - Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); - - CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); - CMenuForwarder *Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); - Rate->setHint("", LOCALE_MENU_HINT_SCAN_RATE); CMenuOptionChooser *fec = NULL; - - CMenuOptionChooser *mod_pol= NULL; + CMenuOptionChooser *mod_pol = NULL; + CMenuForwarder *Freq = NULL; + CMenuForwarder *Rate = NULL; if (r_system == DVB_S) { - fec = new CMenuOptionChooser(LOCALE_EXTRA_TP_FEC, (int *)&scansettings.TP_fec, SATSETUP_SCANTP_FEC, fec_count, true, NULL, CRCInput::convertDigitToKey(shortCut++), "", true); + CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.sat_TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.sat_TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); + Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); + + CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.sat_TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.sat_TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); + Rate->setHint("", LOCALE_MENU_HINT_SCAN_RATE); + fec = new CMenuOptionChooser(LOCALE_EXTRA_TP_FEC, (int *)&scansettings.sat_TP_fec, SATSETUP_SCANTP_FEC, fec_count, true, NULL, CRCInput::convertDigitToKey(shortCut++), "", true); fec->setHint("", LOCALE_MENU_HINT_SCAN_FEC); - mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_POL, (int *)&scansettings.TP_pol, SATSETUP_SCANTP_POL, SATSETUP_SCANTP_POL_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_POL, (int *)&scansettings.sat_TP_pol, SATSETUP_SCANTP_POL, SATSETUP_SCANTP_POL_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); mod_pol->setHint("", LOCALE_MENU_HINT_SCAN_POL); } else if (r_system == DVB_C) { - mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_MOD, (int *)&scansettings.TP_mod, SATSETUP_SCANTP_MOD, SATSETUP_SCANTP_MOD_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.cable_TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.cable_TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); + Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); + + CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.cable_TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.cable_TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); + Rate->setHint("", LOCALE_MENU_HINT_SCAN_RATE); + mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_MOD, (int *)&scansettings.cable_TP_mod, SATSETUP_SCANTP_MOD, SATSETUP_SCANTP_MOD_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); mod_pol->setHint("", LOCALE_MENU_HINT_SCAN_MOD); } @@ -1302,9 +1397,9 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* fillSatSelect(satSelect); #endif CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); - if (fe) { + fe->setMode(femode); + if (fe && fe->getType() == FE_QPSK) { linkfe->setActive(CFrontend::linked(femode)); - //dtype->setActive(!CFrontend::linked(femode)); dtype->setActive(femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); uniSetup->setActive(dmode == DISEQC_UNICABLE && femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); fsatSelect->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); @@ -1312,9 +1407,9 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* bool enable = (dmode < DISEQC_ADVANCED) && (dmode != NO_DISEQC); ojDiseqcRepeats->setActive(!CFrontend::linked(femode) && enable); - fe->setMode(femode); /* if mode changed, set current master too */ - fe->setMaster(femaster); + if (femaster >= 0) + fe->setMaster(femaster); } } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_FE_MODE_MASTER)) { @@ -1324,11 +1419,11 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* fe->setMaster(femaster); } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_CABLESETUP_PROVIDER)) { - printf("[neutrino] CScanSetup::%s: new provider: [%s]\n", __FUNCTION__, scansettings.satNameNoDiseqc); + printf("[neutrino] CScanSetup::%s: new provider: [%s]\n", __FUNCTION__, scansettings.cableName); satellite_map_t & satmap = CServiceManager::getInstance()->SatelliteList(); for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); sit++) { - if (strcmp(scansettings.satNameNoDiseqc, sit->second.name.c_str()) == 0) { + if (strcmp(scansettings.cableName, sit->second.name.c_str()) == 0) { if(sit->second.cable_nid > 0) { scansettings.cable_nid = sit->second.cable_nid; nid->updateValue(); @@ -1350,23 +1445,26 @@ void CScanSetup::updateManualSettings() { CZapitChannel * channel = CZapit::getInstance()->GetCurrentChannel(); if(channel) { - strncpy(scansettings.satNameNoDiseqc, - CServiceManager::getInstance()->GetSatelliteName(channel->getSatellitePosition()).c_str(), 50); transponder_list_t::iterator tI; tI = transponders.find(channel->getTransponderId()); if(tI != transponders.end()) { - sprintf(scansettings.TP_freq, "%d", tI->second.feparams.dvb_feparams.frequency); CFrontend * frontend = CFEManager::getInstance()->getLiveFE(); - switch (frontend->getInfo()->type) { + switch (frontend->getType()) { case FE_QPSK: - sprintf(scansettings.TP_rate, "%d", tI->second.feparams.dvb_feparams.u.qpsk.symbol_rate); - scansettings.TP_fec = tI->second.feparams.dvb_feparams.u.qpsk.fec_inner; - scansettings.TP_pol = tI->second.polarization; + sprintf(scansettings.sat_TP_freq, "%d", tI->second.feparams.dvb_feparams.frequency); + sprintf(scansettings.sat_TP_rate, "%d", tI->second.feparams.dvb_feparams.u.qpsk.symbol_rate); + scansettings.sat_TP_fec = tI->second.feparams.dvb_feparams.u.qpsk.fec_inner; + scansettings.sat_TP_pol = tI->second.polarization; + strncpy(scansettings.satName, + CServiceManager::getInstance()->GetSatelliteName(channel->getSatellitePosition()).c_str(), 50); break; case FE_QAM: - sprintf(scansettings.TP_rate, "%d", tI->second.feparams.dvb_feparams.u.qam.symbol_rate); - scansettings.TP_fec = tI->second.feparams.dvb_feparams.u.qam.fec_inner; - scansettings.TP_mod = tI->second.feparams.dvb_feparams.u.qam.modulation; + sprintf(scansettings.cable_TP_freq, "%d", tI->second.feparams.dvb_feparams.frequency); + sprintf(scansettings.cable_TP_rate, "%d", tI->second.feparams.dvb_feparams.u.qam.symbol_rate); + scansettings.cable_TP_fec = tI->second.feparams.dvb_feparams.u.qam.fec_inner; + scansettings.cable_TP_mod = tI->second.feparams.dvb_feparams.u.qam.modulation; + strncpy(scansettings.cableName, + CServiceManager::getInstance()->GetSatelliteName(channel->getSatellitePosition()).c_str(), 50); break; case FE_OFDM: case FE_ATSC: @@ -1376,7 +1474,7 @@ void CScanSetup::updateManualSettings() } } -int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &/*actionkey*/) +int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &actionkey) { std::map tmplist; std::map::iterator tmpI; @@ -1390,7 +1488,15 @@ int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &/*actionkey*/ if (parent) parent->hide(); - t_satellite_position position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satNameNoDiseqc); + t_satellite_position position; + char * name; + if (actionkey == "sat") + name = scansettings.satName; + else + name = scansettings.cableName; + + position = CServiceManager::getInstance()->GetSatellitePosition(name); + INFO("%s: %s\n", actionkey.c_str(), name); if (old_position != position) { old_selected = 0; @@ -1406,7 +1512,6 @@ int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &/*actionkey*/ if(channel) CServiceManager::getInstance()->GetTransponder(channel->getTransponderId(), ct); - CFrontend * frontend = CFEManager::getInstance()->getLiveFE(); int i = 0; transponder_list_t &select_transponders = CServiceManager::getInstance()->GetSatelliteTransponders(position); for (transponder_list_t::iterator tI = select_transponders.begin(); tI != select_transponders.end(); ++tI) { @@ -1427,7 +1532,7 @@ int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &/*actionkey*/ } if (i == 0) { std::string text = "No transponders found for "; - text += scansettings.satNameNoDiseqc; + text += name; ShowHintUTF(LOCALE_MESSAGEBOX_ERROR, text.c_str(), 450, 2); return menu_return::RETURN_REPAINT; } @@ -1445,18 +1550,18 @@ int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &/*actionkey*/ printf("CTPSelectHandler::exec: selected TP: freq %d pol %d SR %d\n", tmpI->second.feparams.dvb_feparams.frequency, tmpI->second.polarization, tmpI->second.feparams.dvb_feparams.u.qpsk.symbol_rate); - sprintf(scansettings.TP_freq, "%d", tmpI->second.feparams.dvb_feparams.frequency); - - switch (frontend->getInfo()->type) { + switch (tmpI->second.deltype) { case FE_QPSK: - sprintf(scansettings.TP_rate, "%d", tmpI->second.feparams.dvb_feparams.u.qpsk.symbol_rate); - scansettings.TP_fec = tmpI->second.feparams.dvb_feparams.u.qpsk.fec_inner; - scansettings.TP_pol = tmpI->second.polarization; + sprintf(scansettings.sat_TP_freq, "%d", tmpI->second.feparams.dvb_feparams.frequency); + sprintf(scansettings.sat_TP_rate, "%d", tmpI->second.feparams.dvb_feparams.u.qpsk.symbol_rate); + scansettings.sat_TP_fec = tmpI->second.feparams.dvb_feparams.u.qpsk.fec_inner; + scansettings.sat_TP_pol = tmpI->second.polarization; break; case FE_QAM: - sprintf(scansettings.TP_rate, "%d", tmpI->second.feparams.dvb_feparams.u.qam.symbol_rate); - scansettings.TP_fec = tmpI->second.feparams.dvb_feparams.u.qam.fec_inner; - scansettings.TP_mod = tmpI->second.feparams.dvb_feparams.u.qam.modulation; + sprintf(scansettings.cable_TP_freq, "%d", tmpI->second.feparams.dvb_feparams.frequency); + sprintf(scansettings.cable_TP_rate, "%d", tmpI->second.feparams.dvb_feparams.u.qam.symbol_rate); + scansettings.cable_TP_fec = tmpI->second.feparams.dvb_feparams.u.qam.fec_inner; + scansettings.cable_TP_mod = tmpI->second.feparams.dvb_feparams.u.qam.modulation; break; case FE_OFDM: case FE_ATSC: diff --git a/src/gui/scan_setup.h b/src/gui/scan_setup.h index c565cbe69..3d477eb04 100644 --- a/src/gui/scan_setup.h +++ b/src/gui/scan_setup.h @@ -51,6 +51,7 @@ class CScanSetup : public CMenuTarget, public CChangeObserver private: CMenuOptionStringChooser *satSelect; + CMenuOptionStringChooser *cableSelect; CMenuWidget *satOnOff; /* global items to be enabled/disabled in notify */ From 1adc51c0b8d120306cb06ce3843f4e5d66853cdb Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Wed, 16 Jan 2013 11:31:47 +0800 Subject: [PATCH 084/442] merge neutrino-apollo --- data/locale/english.locale | 2 ++ src/gui/videosettings.cpp | 14 ++++++++------ src/system/locals.h | 2 ++ src/system/locals_intern.h | 2 ++ 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/data/locale/english.locale b/data/locale/english.locale index 56a54d1f3..fe7584a9a 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1792,6 +1792,8 @@ videomenu.analog_sd_rgb_cinch RGB on cinch (SD) videomenu.analog_sd_rgb_scart RGB on scart (SD) videomenu.analog_sd_yprpb_cinch YPbPr on cinch (SD) videomenu.analog_sd_yprpb_scart YPbPr on scart (SD) +videomenu.analog_auto AUTO +videomenu.analog_cvbs CVBS videomenu.analog_hd_rgb RGB (HD) videomenu.analog_hd_yprpb YPbPr(HD) videomenu.analog_sd_rgb RGB (SD) diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index f2aa163b9..48d4ed339 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -118,13 +118,15 @@ const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1_OPTIONS[VIDEOMENU_VID { ANALOG_MODE(CINCH,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } }; -#define VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT 4 +#define VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT 6 const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_TANK_OPTIONS[VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT] = { - { ANALOG_MODE(BOTH ,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB }, /* Scart and Cinch */ - { ANALOG_MODE(BOTH ,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB }, /* */ - { ANALOG_MODE(BOTH ,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB }, /* */ - { ANALOG_MODE(BOTH ,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB }, /* */ + { ANALOG_MODE(BOTH ,xD,AUTO ),LOCALE_VIDEOMENU_ANALOG_AUTO }, /* Encoder automatically adjusts based on content */ + { ANALOG_MODE(BOTH ,xD,CVBS ),LOCALE_VIDEOMENU_ANALOG_CVBS }, /* CVBS on SCART (disables fastblank, un-used dacs) */ + { ANALOG_MODE(BOTH ,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB }, /* SD RGB on Cinch and SCART */ + { ANALOG_MODE(BOTH ,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB }, /* SD YPrPb on Cinch and SCART */ + { ANALOG_MODE(BOTH ,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB }, /* HD RGB on Cinch and SCART */ + { ANALOG_MODE(BOTH ,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB }, /* HD YPrPb on Cinch and SCART */ }; #define VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT 4 @@ -230,8 +232,8 @@ int CVideoSettings::showVideoSetup() } else if (system_rev > 0x06) { - if (system_rev == 9) { #ifdef ANALOG_MODE + if (system_rev == 9 || system_rev == 11) { // Tank, Trinity. vs_analg_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_ANALOG_MODE, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_TANK_OPTIONS, VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT, true, this); vs_analg_ch->setHint("", LOCALE_MENU_HINT_VIDEO_ANALOG_MODE); #endif diff --git a/src/system/locals.h b/src/system/locals.h index 0d9a87465..5c96fe010 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -1819,6 +1819,8 @@ typedef enum LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART, + LOCALE_VIDEOMENU_ANALOG_AUTO, + LOCALE_VIDEOMENU_ANALOG_CVBS, LOCALE_VIDEOMENU_ANALOG_HD_RGB, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB, LOCALE_VIDEOMENU_ANALOG_SD_RGB, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 8f5b1fa76..bb507003b 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -1819,6 +1819,8 @@ const char * locale_real_names[] = "videomenu.analog_sd_rgb_scart", "videomenu.analog_sd_yprpb_cinch", "videomenu.analog_sd_yprpb_scart", + "videomenu.analog_auto", + "videomenu.analog_cvbs", "videomenu.analog_hd_rgb", "videomenu.analog_hd_yprpb", "videomenu.analog_sd_rgb", From 60b5c40d145f7f26b2644964572fec653b35dc0f Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 16:35:38 +0400 Subject: [PATCH 085/442] lib/libcoolstream2/video_cs.h: update apollo header --- lib/libcoolstream2/video_cs.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/libcoolstream2/video_cs.h b/lib/libcoolstream2/video_cs.h index 52946dd0c..96cf9a1f5 100644 --- a/lib/libcoolstream2/video_cs.h +++ b/lib/libcoolstream2/video_cs.h @@ -28,6 +28,8 @@ typedef enum { ANALOG_SD_YPRPB = (1 << 2), // Output SD in YPbPr format (component) ANALOG_HD_RGB = (1 << 3), // Output HD in RGB format ANALOG_HD_YPRPB = (1 << 4), // Output HD in YPbPr format (component) + ANALOG_xD_AUTO = (1 << 5), // Output is automatically determined based on + // content. (TANK/Trinity only) // Output types ANALOG_xD_SCART = (1 << 8), // Output is SCART ANALOG_xD_CINCH = (1 << 9), // Output is Cinch From 5d7406831aa600c2352461652d69553a88fe05fa Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 16 Jan 2013 17:34:54 +0400 Subject: [PATCH 086/442] gui/scan_setup.cpp: fix merge --- src/gui/scan_setup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index fb9431046..7c648a57c 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -1030,7 +1030,7 @@ void CScanSetup::addScanMenuTempSat(CMenuWidget *temp_sat, sat_config_t & satcon temp_sat->addItem(unilnb); } - CMenuForwarder *mf = new CMenuDForwarder(LOCALE_SATSETUP_LOFL, true, lofL->getValue(), lofL); + mf = new CMenuDForwarder(LOCALE_SATSETUP_LOFL, true, lofL->getValue(), lofL); mf->setHint("", LOCALE_MENU_HINT_SCAN_LOFL); temp_sat->addItem(mf); mf = new CMenuDForwarder(LOCALE_SATSETUP_LOFH, true, lofH->getValue(), lofH); From e7833b099f8ca9a45035d4f4c210efa0bd578d7e Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Fri, 18 Jan 2013 14:21:41 +0800 Subject: [PATCH 087/442] merge neutrino-apollo --- src/driver/framebuffer.cpp | 524 ++++++++++++++++++------------------- src/driver/framebuffer.h | 4 +- 2 files changed, 262 insertions(+), 266 deletions(-) diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index 8b1b76658..3de58bb4d 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -2,7 +2,7 @@ Neutrino-GUI - DBoxII-Project Copyright (C) 2001 Steffen Hehn 'McClean' - 2003 thegoodguy + 2003 thegoodguy License: GPL @@ -79,35 +79,35 @@ extern CPictureViewer * g_PicViewer; #undef GXA_CONTENT_ID_REG #endif -#define GXA_POINT(x, y) (((y) & 0x0FFF) << 16) | ((x) & 0x0FFF) -#define GXA_SRC_BMP_SEL(x) (x << 8) -#define GXA_DST_BMP_SEL(x) (x << 5) -#define GXA_PARAM_COUNT(x) (x << 2) +#define GXA_POINT(x, y) (((y) & 0x0FFF) << 16) | ((x) & 0x0FFF) +#define GXA_SRC_BMP_SEL(x) (x << 8) +#define GXA_DST_BMP_SEL(x) (x << 5) +#define GXA_PARAM_COUNT(x) (x << 2) #define GXA_CMD_REG 0x001C #define GXA_FG_COLOR_REG 0x0020 -#define GXA_BG_COLOR_REG 0x0024 -#define GXA_LINE_CONTROL_REG 0x0038 -#define GXA_BMP2_TYPE_REG 0x0050 -#define GXA_BMP2_ADDR_REG 0x0054 +#define GXA_BG_COLOR_REG 0x0024 +#define GXA_LINE_CONTROL_REG 0x0038 +#define GXA_BMP2_TYPE_REG 0x0050 +#define GXA_BMP2_ADDR_REG 0x0054 #define GXA_DEPTH_REG 0x00F4 -#define GXA_CONTENT_ID_REG 0x0144 +#define GXA_CONTENT_ID_REG 0x0144 -#define GXA_CMD_BLT 0x00010800 -#define GXA_CMD_NOT_ALPHA 0x00011000 -#define GXA_CMD_NOT_TEXT 0x00018000 +#define GXA_CMD_BLT 0x00010800 +#define GXA_CMD_NOT_ALPHA 0x00011000 +#define GXA_CMD_NOT_TEXT 0x00018000 #define GXA_CMD_QMARK 0x00001000 -#define GXA_BMP1_TYPE_REG 0x0048 -#define GXA_BMP1_ADDR_REG 0x004C +#define GXA_BMP1_TYPE_REG 0x0048 +#define GXA_BMP1_ADDR_REG 0x004C -#define GXA_BLEND_CFG_REG 0x003C -#define GXA_CFG_REG 0x0030 -#define GXA_CFG2_REG 0x00FC +#define GXA_BLEND_CFG_REG 0x003C +#define GXA_CFG_REG 0x0030 +#define GXA_CFG2_REG 0x00FC /* static unsigned int _read_gxa(volatile unsigned char *base_addr, unsigned int offset) { - return *(volatile unsigned int *)(base_addr + offset); + return *(volatile unsigned int *)(base_addr + offset); } */ @@ -115,9 +115,9 @@ static unsigned int _mark = 0; static void _write_gxa(volatile unsigned char *base_addr, unsigned int offset, unsigned int value) { - while( (*(volatile unsigned int *)(base_addr + GXA_DEPTH_REG)) & 0x40000000) - {}; - *(volatile unsigned int *)(base_addr + offset) = value; + while( (*(volatile unsigned int *)(base_addr + GXA_DEPTH_REG)) & 0x40000000) + {}; + *(volatile unsigned int *)(base_addr + offset) = value; } /* this adds a tagged marker into the GXA queue. Once this comes out @@ -156,12 +156,12 @@ void CFrameBuffer::waitForIdle(void) static uint8_t * virtual_fb = NULL; inline unsigned int make16color(uint16_t r, uint16_t g, uint16_t b, uint16_t t, - uint32_t /*rl*/ = 0, uint32_t /*ro*/ = 0, - uint32_t /*gl*/ = 0, uint32_t /*go*/ = 0, - uint32_t /*bl*/ = 0, uint32_t /*bo*/ = 0, - uint32_t /*tl*/ = 0, uint32_t /*to*/ = 0) + uint32_t /*rl*/ = 0, uint32_t /*ro*/ = 0, + uint32_t /*gl*/ = 0, uint32_t /*go*/ = 0, + uint32_t /*bl*/ = 0, uint32_t /*bo*/ = 0, + uint32_t /*tl*/ = 0, uint32_t /*to*/ = 0) { - return ((t << 24) & 0xFF000000) | ((r << 8) & 0xFF0000) | ((g << 0) & 0xFF00) | (b >> 8 & 0xFF); + return ((t << 24) & 0xFF000000) | ((r << 8) & 0xFF0000) | ((g << 0) & 0xFF00) | (b >> 8 & 0xFF); } CFrameBuffer::CFrameBuffer() @@ -185,7 +185,7 @@ CFrameBuffer::CFrameBuffer() m_transparent_default = CFrameBuffer::TM_BLACK; // TM_BLACK: Transparency when black content ('pseudo' transparency) // TM_NONE: No 'pseudo' transparency // TM_INI: Transparency depends on g_settings.infobar_alpha ??? - m_transparent = m_transparent_default; + m_transparent = m_transparent_default; //FIXME: test memset(red, 0, 256*sizeof(__u16)); memset(green, 0, 256*sizeof(__u16)); @@ -209,20 +209,20 @@ CFrameBuffer* CFrameBuffer::getInstance() #ifdef USE_NEVIS_GXA void CFrameBuffer::setupGXA(void) { - // We (re)store the GXA regs here in case DFB override them and was not - // able to restore them. - _write_gxa(gxa_base, GXA_BMP2_TYPE_REG, (3 << 16) | screeninfo.xres); - _write_gxa(gxa_base, GXA_BMP2_ADDR_REG, (unsigned int) fix.smem_start); - _write_gxa(gxa_base, GXA_BLEND_CFG_REG, 0x00089064); + // We (re)store the GXA regs here in case DFB override them and was not + // able to restore them. + _write_gxa(gxa_base, GXA_BMP2_TYPE_REG, (3 << 16) | screeninfo.xres); + _write_gxa(gxa_base, GXA_BMP2_ADDR_REG, (unsigned int) fix.smem_start); + _write_gxa(gxa_base, GXA_BLEND_CFG_REG, 0x00089064); // TODO check mono-flip, bit 8 - _write_gxa(gxa_base, GXA_CFG_REG, 0x100 | (1 << 12) | (1 << 29)); - _write_gxa(gxa_base, GXA_CFG2_REG, 0x1FF); + _write_gxa(gxa_base, GXA_CFG_REG, 0x100 | (1 << 12) | (1 << 29)); + _write_gxa(gxa_base, GXA_CFG2_REG, 0x1FF); _write_gxa(gxa_base, GXA_BG_COLOR_REG, (unsigned int) backgroundColor); } #endif void CFrameBuffer::init(const char * const fbDevice) { - int tr = 0xFF; + int tr = 0xFF; fd = open(fbDevice, O_RDWR); if(!fd) fd = open(fbDevice, O_RDWR); @@ -276,29 +276,29 @@ void CFrameBuffer::init(const char * const fbDevice) #endif cache_size = 0; - /* Windows Colors */ - paletteSetColor(0x1, 0x010101, tr); - paletteSetColor(0x2, 0x800000, tr); - paletteSetColor(0x3, 0x008000, tr); - paletteSetColor(0x4, 0x808000, tr); - paletteSetColor(0x5, 0x000080, tr); - paletteSetColor(0x6, 0x800080, tr); - paletteSetColor(0x7, 0x008080, tr); - paletteSetColor(0x8, 0xA0A0A0, tr); - paletteSetColor(0x9, 0x505050, tr); - paletteSetColor(0xA, 0xFF0000, tr); - paletteSetColor(0xB, 0x00FF00, tr); - paletteSetColor(0xC, 0xFFFF00, tr); - paletteSetColor(0xD, 0x0000FF, tr); - paletteSetColor(0xE, 0xFF00FF, tr); - paletteSetColor(0xF, 0x00FFFF, tr); - paletteSetColor(0x10, 0xFFFFFF, tr); - paletteSetColor(0x11, 0x000000, tr); - paletteSetColor(COL_BACKGROUND, 0x000000, 0xffff); + /* Windows Colors */ + paletteSetColor(0x1, 0x010101, tr); + paletteSetColor(0x2, 0x800000, tr); + paletteSetColor(0x3, 0x008000, tr); + paletteSetColor(0x4, 0x808000, tr); + paletteSetColor(0x5, 0x000080, tr); + paletteSetColor(0x6, 0x800080, tr); + paletteSetColor(0x7, 0x008080, tr); + paletteSetColor(0x8, 0xA0A0A0, tr); + paletteSetColor(0x9, 0x505050, tr); + paletteSetColor(0xA, 0xFF0000, tr); + paletteSetColor(0xB, 0x00FF00, tr); + paletteSetColor(0xC, 0xFFFF00, tr); + paletteSetColor(0xD, 0x0000FF, tr); + paletteSetColor(0xE, 0xFF00FF, tr); + paletteSetColor(0xF, 0x00FFFF, tr); + paletteSetColor(0x10, 0xFFFFFF, tr); + paletteSetColor(0x11, 0x000000, tr); + paletteSetColor(COL_BACKGROUND, 0x000000, 0xffff); - paletteSet(); + paletteSet(); - useBackground(false); + useBackground(false); m_transparent = m_transparent_default; #if 0 if ((tty=open("/dev/vc/0", O_RDWR))<0) { @@ -481,8 +481,8 @@ int CFrameBuffer::setMode(unsigned int /*nxRes*/, unsigned int /*nyRes*/, unsign if ((screeninfo.xres!=nxRes) && (screeninfo.yres!=nyRes) && (screeninfo.bits_per_pixel!=nbpp)) { printf("SetMode failed: wanted: %dx%dx%d, got %dx%dx%d\n", - nxRes, nyRes, nbpp, - screeninfo.xres, screeninfo.yres, screeninfo.bits_per_pixel); + nxRes, nyRes, nbpp, + screeninfo.xres, screeninfo.yres, screeninfo.bits_per_pixel); return -1; } #endif @@ -508,9 +508,9 @@ int CFrameBuffer::setMode(unsigned int /*nxRes*/, unsigned int /*nyRes*/, unsign //memset(getFrameBufferPointer(), 0, stride * yRes); paintBackground(); - if (ioctl(fd, FBIOBLANK, FB_BLANK_UNBLANK) < 0) { - printf("screen unblanking failed\n"); - } + if (ioctl(fd, FBIOBLANK, FB_BLANK_UNBLANK) < 0) { + printf("screen unblanking failed\n"); + } return 0; } #if 0 @@ -537,12 +537,13 @@ void CFrameBuffer::setBlendLevel(int level) if (ioctl(fd, FBIO_SETOPACITY, value)) printf("FBIO_SETOPACITY failed.\n"); -#if 1 - if(level == 100) // TODO: sucks. - usleep(20000); +#ifndef ISAPOLLO + if(level == 100) // TODO: sucks. + usleep(20000); #endif #endif } + #if 0 //never used void CFrameBuffer::setAlphaFade(int in, int num, int tr) @@ -557,6 +558,7 @@ void CFrameBuffer::paletteFade(int i, __u32 rgb1, __u32 rgb2, int level) __u16 *r = cmap.red+i; __u16 *g = cmap.green+i; __u16 *b = cmap.blue+i; + *r= ((rgb2&0xFF0000)>>16)*level; *g= ((rgb2&0x00FF00)>>8 )*level; *b= ((rgb2&0x0000FF) )*level; @@ -576,10 +578,10 @@ void CFrameBuffer::paletteGenFade(int in, __u32 rgb1, __u32 rgb2, int num, int t void CFrameBuffer::paletteSetColor(int i, __u32 rgb, int tr) { - cmap.red[i] =(rgb&0xFF0000)>>8; - cmap.green[i] =(rgb&0x00FF00) ; - cmap.blue[i] =(rgb&0x0000FF)<<8; - cmap.transp[i] = tr; + cmap.red[i] =(rgb&0xFF0000)>>8; + cmap.green[i] =(rgb&0x00FF00) ; + cmap.blue[i] =(rgb&0x0000FF)<<8; + cmap.transp[i] = tr; } void CFrameBuffer::paletteSet(struct fb_cmap *map) @@ -591,69 +593,52 @@ void CFrameBuffer::paletteSet(struct fb_cmap *map) map = &cmap; if(bpp == 8) { -//printf("Set palette for %dbit\n", bpp); + //printf("Set palette for %dbit\n", bpp); ioctl(fd, FBIOPUTCMAP, map); } + uint32_t rl, ro, gl, go, bl, bo, tl, to; - rl = screeninfo.red.length; - ro = screeninfo.red.offset; - gl = screeninfo.green.length; - go = screeninfo.green.offset; - bl = screeninfo.blue.length; - bo = screeninfo.blue.offset; - tl = screeninfo.transp.length; - to = screeninfo.transp.offset; + + rl = screeninfo.red.length; + ro = screeninfo.red.offset; + gl = screeninfo.green.length; + go = screeninfo.green.offset; + bl = screeninfo.blue.length; + bo = screeninfo.blue.offset; + tl = screeninfo.transp.length; + to = screeninfo.transp.offset; for (int i = 0; i < 256; i++) { - realcolor[i] = make16color(cmap.red[i], cmap.green[i], cmap.blue[i], cmap.transp[i], - rl, ro, gl, go, bl, bo, tl, to); + realcolor[i] = make16color(cmap.red[i], cmap.green[i], cmap.blue[i], cmap.transp[i], + rl, ro, gl, go, bl, bo, tl, to); } } -#if 0 -void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int dy, const fb_pixel_t col) -{ - if (!getActive()) - return; - - uint8_t * pos = ((uint8_t *)getFrameBufferPointer()) + x * sizeof(fb_pixel_t) + stride * y; - for (int count = 0; count < dy; count++) { - fb_pixel_t * dest = (fb_pixel_t *)pos; - for (int i = 0; i < dx; i++) - *(dest++) = col; - pos += stride; - } -} -#endif - void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int dy, const fb_pixel_t col, int radius, int type) { - /* draw a filled rectangle (with additional round corners) */ + /* draw a filled rectangle (with additional round corners) */ - if (!getActive()) - return; + if (!getActive()) + return; - int corner_tl = (type & CORNER_TOP_LEFT) ? 1 : 0; - int corner_tr = (type & CORNER_TOP_RIGHT) ? 1 : 0; - int corner_bl = (type & CORNER_BOTTOM_LEFT) ? 1 : 0; - int corner_br = (type & CORNER_BOTTOM_RIGHT) ? 1 : 0; - -#ifdef USE_NEVIS_GXA - OpenThreads::ScopedLock m_lock(mutex); -#else - int swidth = stride / sizeof(fb_pixel_t); - fb_pixel_t *fbp = getFrameBufferPointer() + (swidth * y); +#if defined(USE_NEVIS_GXA) + OpenThreads::ScopedLock m_lock(mutex); #endif - /* this table contains the x coordinates for a quarter circle (the bottom right quarter) with fixed - radius of 540 px which is the half of the max HD graphics size of 1080 px. So with that table we - ca draw boxes with round corners and als circles by just setting dx = dy = radius (max 540). */ - static const int q_circle[541] = { + bool corner_tl = (type & CORNER_TOP_LEFT) == CORNER_TOP_LEFT; + bool corner_tr = (type & CORNER_TOP_RIGHT) == CORNER_TOP_RIGHT; + bool corner_bl = (type & CORNER_BOTTOM_LEFT) == CORNER_BOTTOM_LEFT; + bool corner_br = (type & CORNER_BOTTOM_RIGHT)== CORNER_BOTTOM_RIGHT; + + /* this table contains the x coordinates for a quarter circle (the bottom right quarter) with fixed + radius of 540 px which is the half of the max HD graphics size of 1080 px. So with that table we + ca draw boxes with round corners and als circles by just setting dx = dy = radius (max 540). */ + static const int q_circle[541] = { 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, - 539, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 537, 537, 537, 537, 537, 537, 537, - 537, 537, 536, 536, 536, 536, 536, 536, 536, 536, 535, 535, 535, 535, 535, 535, 535, 535, 534, 534, + 540, 540, 540, 540, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, + 539, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 536, 536, 536, 536, 536, 536, 536, 536, 535, 535, 535, 535, 535, 535, 535, 535, 534, 534, 534, 534, 534, 534, 533, 533, 533, 533, 533, 533, 532, 532, 532, 532, 532, 532, 531, 531, 531, 531, - 531, 531, 530, 530, 530, 530, 529, 529, 529, 529, 529, 529, 528, 528, 528, 528, 527, 527, 527, 527, + 531, 531, 530, 530, 530, 530, 529, 529, 529, 529, 529, 529, 528, 528, 528, 528, 527, 527, 527, 527, 527, 526, 526, 526, 526, 525, 525, 525, 525, 524, 524, 524, 524, 523, 523, 523, 523, 522, 522, 522, 522, 521, 521, 521, 521, 520, 520, 520, 519, 519, 519, 518, 518, 518, 518, 517, 517, 517, 516, 516, 516, 515, 515, 515, 515, 514, 514, 514, 513, 513, 513, 512, 512, 512, 511, 511, 511, 510, 510, 510, @@ -677,121 +662,113 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int 147, 144, 140, 136, 132, 128, 124, 120, 115, 111, 105, 101, 95, 89, 83, 77, 69, 61, 52, 40, 23}; - int line = 0; -#ifdef USE_NEVIS_GXA - unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; + int line = 0; - _write_gxa(gxa_base, GXA_FG_COLOR_REG, (unsigned int) col); /* setup the drawing color */ - _write_gxa(gxa_base, GXA_LINE_CONTROL_REG, 0x00000404); /* X is major axis, skip last pixel */ -#endif + if (type && radius) { + int ofs, scf, scl, ofl, ofr; + /* just an multiplicator for all math to reduce rounding errors */ + #define MUL 32768 - if ((type) && (radius)) - { - #define MUL 32768 /* just an multiplicator for all math to reduce rounding errors */ - int ofs, scf, scl, ofl, ofr; + /* limit the radius */ + if (radius > dx) + radius = dx; + if (radius > dy) + radius = dy; + if (radius > 540) + radius = 540; - /* limit the radius */ - if (radius > dx) - radius = dx; - if (radius > dy) - radius = dy; - if (radius > 540) - radius = 540; - if (radius < 1) /* dx or dy = 0... */ - radius = 1; /* avoid div by zero below */ + scf = (540 * MUL) / ((radius < 1) ? 1 : radius); - scf = (540 * MUL) / radius; + while (line < dy) { + ofl = ofr = 0; - while (line < dy) - { - ofl = ofr = 0; - - if (line < radius && (type & CORNER_TOP)) /* one of the top corners */ - { - /* uper round corners */ - scl = scf * (radius - line) / MUL; - if ((scf * (radius - line) % MUL) >= (MUL / 2)) /* round up */ - scl++; - ofs = radius - (q_circle[scl] * MUL / scf); - // ofl = corner_tl * ofs; // might depend on the arch if multiply is faster or not - ofl = corner_tl ? ofs : 0; - ofr = corner_tr ? ofs : 0; - } - else if ((line >= dy - radius) && (type & CORNER_BOTTOM)) /* one of the bottom corners */ - { - /* lower round corners */ - scl = scf * (radius - (dy - (line + 1))) / MUL; - if ((scf * (radius - (dy - (line + 1))) % MUL) >= (MUL / 2)) /* round up */ - scl++; - ofs = radius - (q_circle[scl] * MUL / scf); - ofl = corner_bl ? ofs : 0; - ofr = corner_br ? ofs : 0; - } -#if defined(FB_HW_ACCELERATION) - if (dx-ofr-ofl == 0) - printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, dx-ofr-ofl, y+line); - - paintHLine(x+ofl, x+dx-ofr, y+line, col); -#elif defined(USE_NEVIS_GXA) - _write_gxa(gxa_base, cmd, GXA_POINT(x + dx - ofr, y + line)); /* endig point */ - _write_gxa(gxa_base, cmd, GXA_POINT(x + ofl, y + line)); /* start point */ -#else - for (int pos = x + ofl; pos < x + dx - ofr; pos++) - { - *(fbp + pos) = col; - } - fbp += swidth; -#endif - line++; - } - } - else - { + if (line < radius && (type & CORNER_TOP)) {/* one of the top corners */ + //printf("1: x %d y %d dx %d dy %d rad %d line %d\n", x, y, dx, dy, radius, line); + /* uper round corners */ + scl = scf * (radius - line) / MUL; + if ((scf * (radius - line) % MUL) >= (MUL / 2)) /* round up */ + scl++; + ofs = radius - (q_circle[scl] * MUL / scf); + // ofl = corner_tl * ofs; // might depend on the arch if multiply is faster or not + ofl = corner_tl ? ofs : 0; + ofr = corner_tr ? ofs : 0; + } else if ((line >= dy - radius) && (type & CORNER_BOTTOM)) { /* one of the bottom corners */ + //printf("2: x %d y %d dx %d dy %d rad %d line %d\n", x, y, dx, dy, radius, line); + /* lower round corners */ + scl = scf * (radius - (dy - (line + 1))) / MUL; + if ((scf * (radius - (dy - (line + 1))) % MUL) >= (MUL / 2)) /* round up */ + scl++; + ofs = radius - (q_circle[scl] * MUL / scf); + ofl = corner_bl ? ofs : 0; + ofr = corner_br ? ofs : 0; + } else { + //printf("3: x %d y %d dx %d dy %d rad %d line %d\n", x, y, dx, dy, radius, line); #ifdef FB_HW_ACCELERATION - /* FIXME small size faster to do by software */ - if (dx > 10 || dy > 10) { - fb_fillrect fillrect; - fillrect.dx = x; - fillrect.dy = y; - fillrect.width = dx; - fillrect.height = dy; - fillrect.color = col; - fillrect.rop = ROP_COPY; - if (dx == 0 || dy == 0) { - printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, x+dx, x+dy); - return; + /* FIXME small size faster to do by software */ + fb_fillrect fillrect; + int rect_height_mult = (((type & (CORNER_BOTTOM | CORNER_TOP)) == (CORNER_BOTTOM | CORNER_TOP)) ? 2 : 1); + + fillrect.dx = x; + fillrect.dy = y + line; + fillrect.width = dx; + fillrect.height = dy - (radius * rect_height_mult); + fillrect.color = col; + fillrect.rop = ROP_COPY; + if (dx == 0 || dy == 0) { + printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, x+dx, x+dy); + return; + } + + ioctl(fd, FBIO_FILL_RECT, &fillrect); + line += dy - (radius * rect_height_mult); + continue; +#endif + + } + + if (dx-ofr-ofl == 0) + printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, dx-ofr-ofl, y+line); + + paintHLineRelInternal(x+ofl, dx-ofl-ofr, y+line, col); + line++; + } + } else { +#ifdef FB_HW_ACCELERATION + /* FIXME small size faster to do by software */ + if (dx > 10 || dy > 10) { + fb_fillrect fillrect; + + fillrect.dx = x; + fillrect.dy = y; + fillrect.width = dx; + fillrect.height = dy; + fillrect.color = col; + fillrect.rop = ROP_COPY; + if (dx == 0 || dy == 0) { + printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, x+dx, x+dy); + return; + } + + ioctl(fd, FBIO_FILL_RECT, &fillrect); } - ioctl(fd, FBIO_FILL_RECT, &fillrect); - paintHLine(x, x+dx, y+line, col); - return; } -#endif - while (line < dy) - { -#ifdef USE_NEVIS_GXA - _write_gxa(gxa_base, cmd, GXA_POINT(x + dx, y + line)); /* endig point */ - _write_gxa(gxa_base, cmd, GXA_POINT(x, y + line)); /* start point */ #else - for (int pos = x; pos < x + dx; pos++) - { - *(fbp + pos) = col; - } - fbp += swidth; -#endif - line++; + while (line < dy) { + paintHLineRelInternal(x+ofl, dx-ofl-ofr, y+line col); + line++; } - } + #ifdef USE_NEVIS_GXA - /* the GXA seems to do asynchronous rendering, so we add a sync marker - to which the fontrenderer code can synchronize */ - add_gxa_sync_marker(); + /* the GXA seems to do asynchronous rendering, so we add a sync marker + * to which the fontrenderer code can synchronize + */ + add_gxa_sync_marker(); +#endif #endif } -void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) +void CFrameBuffer::paintVLineRelInternal(int x, int y, int dy, const fb_pixel_t col) { - if (!getActive()) - return; #if defined(FB_HW_ACCELERATION) fb_fillrect fillrect; @@ -803,7 +780,6 @@ void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) fillrect.rop = ROP_COPY; ioctl(fd, FBIO_FILL_RECT, &fillrect); #elif defined(USE_NEVIS_GXA) - OpenThreads::ScopedLock m_lock(mutex); /* draw a single vertical line from point x/y with hight dx */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; @@ -821,11 +797,19 @@ void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) #endif /* USE_NEVIS_GXA */ } -void CFrameBuffer::paintHLineRel(int x, int dx, int y, const fb_pixel_t col) +void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) { if (!getActive()) return; +#if defined(USE_NEVIS_GXA) + OpenThreads::ScopedLock m_lock(mutex); +#endif + paintVLineRelInternal(x, y, dy, col); +} + +void CFrameBuffer::paintHLineRelInternal(int x, int dx, int y, const fb_pixel_t col) +{ #if defined(FB_HW_ACCELERATION) fb_fillrect fillrect; fillrect.dx = x; @@ -836,7 +820,6 @@ void CFrameBuffer::paintHLineRel(int x, int dx, int y, const fb_pixel_t col) fillrect.rop = ROP_COPY; ioctl(fd, FBIO_FILL_RECT, &fillrect); #elif defined(USE_NEVIS_GXA) - OpenThreads::ScopedLock m_lock(mutex); /* draw a single horizontal line from point x/y with width dx */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; @@ -853,6 +836,17 @@ void CFrameBuffer::paintHLineRel(int x, int dx, int y, const fb_pixel_t col) #endif /* USE_NEVIS_GXA */ } +void CFrameBuffer::paintHLineRel(int x, int dx, int y, const fb_pixel_t col) +{ + if (!getActive()) + return; + +#if defined(USE_NEVIS_GXA) + OpenThreads::ScopedLock m_lock(mutex); +#endif + paintHLineRelInternal(x, dx, y, col); +} + void CFrameBuffer::setIconBasePath(const std::string & iconPath) { iconBasePath = iconPath; @@ -892,8 +886,8 @@ bool CFrameBuffer::paintIcon8(const std::string & filename, const int x, const i //printf("%s(file, %d, %d, %d)\n", __FUNCTION__, x, y, offset); struct rawHeader header; - uint16_t width, height; - int lfd; + uint16_t width, height; + int lfd; lfd = open((iconBasePath + filename).c_str(), O_RDONLY); @@ -937,8 +931,8 @@ bool CFrameBuffer::paintIcon(const std::string & filename, const int x, const in const int h, const unsigned char offset, bool paint, bool paintBg, const fb_pixel_t colBg) { struct rawHeader header; - int width, height; - int lfd; + int width, height; + int lfd; fb_pixel_t * data; struct rawIcon tmpIcon; std::map::iterator it; @@ -1045,7 +1039,7 @@ void CFrameBuffer::loadPal(const std::string & filename, const unsigned char off //printf("%s()\n", __FUNCTION__); struct rgbData rgbdata; - int lfd; + int lfd; lfd = open((iconBasePath + filename).c_str(), O_RDONLY); @@ -1094,9 +1088,9 @@ void CFrameBuffer::paintBoxFrame(const int sx, const int sy, const int dx, const int radius = rad; int c_radius = rad << 1; - paintBoxRel(sx + rad , sy , dx - c_radius, px, col); // upper horizontal + paintBoxRel(sx + rad , sy , dx - c_radius, px, col); // upper horizontal paintBoxRel(sx + rad , sy + dy - px, dx - c_radius, px, col); // lower horizontal - paintBoxRel(sx , sy + rad , px, dy - c_radius , col); // left vertical + paintBoxRel(sx , sy + rad , px, dy - c_radius , col); // left vertical paintBoxRel(sx + dx - px, sy + rad , px, dy - c_radius , col); // right vertical if (!radius) @@ -1133,14 +1127,14 @@ void CFrameBuffer::paintBoxFrame(const int sx, const int sy, const int dx, const int width = 0; while (width <= px) { - paintPixel(x2 + x , y1 - y + width, col); // 1. oct - paintPixel(x2 + y - width, y1 - x , col); // 2. oct - paintPixel(x2 + y - width, y2 + x , col); // 3. oct - paintPixel(x2 + x , y2 + y - width, col); // 4. oct - paintPixel(x1 - x , y2 + y - width, col); // 5. oct - paintPixel(x1 - y + width, y2 + x , col); // 6. oct - paintPixel(x1 - y + width, y1 - x , col); // 7. oct - paintPixel(x1 - x , y1 - y + width, col); // 8. oct + paintPixel(x2 + x , y1 - y + width, col); // 1. oct + paintPixel(x2 + y - width, y1 - x , col); // 2. oct + paintPixel(x2 + y - width, y2 + x , col); // 3. oct + paintPixel(x2 + x , y2 + y - width, col); // 4. oct + paintPixel(x1 - x , y2 + y - width, col); // 5. oct + paintPixel(x1 - y + width, y2 + x , col); // 6. oct + paintPixel(x1 - y + width, y1 - x , col); // 7. oct + paintPixel(x1 - x , y1 - y + width, col); // 8. oct width++; } } @@ -1244,7 +1238,7 @@ void CFrameBuffer::setBackgroundColor(const fb_pixel_t color) bool CFrameBuffer::loadPictureToMem(const std::string & filename, const uint16_t width, const uint16_t height, const uint16_t pstride, fb_pixel_t * memp) { struct rawHeader header; - int lfd; + int lfd; //printf("%s(%d, %d, memp)\n", __FUNCTION__, width, height); @@ -1292,8 +1286,8 @@ bool CFrameBuffer::loadPicture2FrameBuffer(const std::string & filename) bool CFrameBuffer::savePictureFromMem(const std::string & filename, const fb_pixel_t * const memp) { struct rawHeader header; - uint16_t width, height; - int lfd; + uint16_t width, height; + int lfd; width = BACKGROUNDIMAGEWIDTH; height = 576; @@ -1302,7 +1296,7 @@ bool CFrameBuffer::savePictureFromMem(const std::string & filename, const fb_pix header.width_hi = width >> 8; header.height_lo = height & 0xFF; header.height_hi = height >> 8; - header.transp = 0; + header.transp = 0; lfd = open((iconBasePath + filename).c_str(), O_WRONLY | O_CREAT, 0644); @@ -1485,7 +1479,7 @@ void CFrameBuffer::SaveScreen(int x, int y, int dx, int dy, fb_pixel_t * const m pos += stride; } #if 0 //FIXME test to flush cache - if (ioctl(fd, 1, FB_BLANK_UNBLANK) < 0); + if (ioctl(fd, 1, FB_BLANK_UNBLANK) < 0); #endif //RestoreScreen(x, y, dx, dy, memp); //FIXME #if 0 @@ -1587,9 +1581,9 @@ void * CFrameBuffer::int_convertRGB2FB(unsigned char *rgbbuff, unsigned long x, if (alpha) { for(i = 0; i < count ; i++) fbbuff[i] = ((rgbbuff[i*4+3] << 24) & 0xFF000000) | - ((rgbbuff[i*4] << 16) & 0x00FF0000) | - ((rgbbuff[i*4+1] << 8) & 0x0000FF00) | - ((rgbbuff[i*4+2]) & 0x000000FF); + ((rgbbuff[i*4] << 16) & 0x00FF0000) | + ((rgbbuff[i*4+1] << 8) & 0x0000FF00) | + ((rgbbuff[i*4+2]) & 0x000000FF); } else { switch (m_transparent) { case CFrameBuffer::TM_BLACK: @@ -1657,10 +1651,10 @@ void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32 } #elif defined(USE_NEVIS_GXA) - u32 cmd; - void * uKva; + u32 cmd; + void * uKva; - uKva = cs_phys_addr(fbbuff); + uKva = cs_phys_addr(fbbuff); //printf("CFrameBuffer::blit2FB: data %x Kva %x\n", (int) fbbuff, (int) uKva); if(uKva != NULL) { @@ -1704,31 +1698,31 @@ void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32 void CFrameBuffer::displayRGB(unsigned char *rgbbuff, int x_size, int y_size, int x_pan, int y_pan, int x_offs, int y_offs, bool clearfb, int transp) { - void *fbbuff = NULL; + void *fbbuff = NULL; - if(rgbbuff == NULL) - return; + if(rgbbuff == NULL) + return; - /* correct panning */ - if(x_pan > x_size - (int)xRes) x_pan = 0; - if(y_pan > y_size - (int)yRes) y_pan = 0; + /* correct panning */ + if(x_pan > x_size - (int)xRes) x_pan = 0; + if(y_pan > y_size - (int)yRes) y_pan = 0; - /* correct offset */ - if(x_offs + x_size > (int)xRes) x_offs = 0; - if(y_offs + y_size > (int)yRes) y_offs = 0; + /* correct offset */ + if(x_offs + x_size > (int)xRes) x_offs = 0; + if(y_offs + y_size > (int)yRes) y_offs = 0; - /* blit buffer 2 fb */ - fbbuff = convertRGB2FB(rgbbuff, x_size, y_size, transp); - if(fbbuff==NULL) - return; + /* blit buffer 2 fb */ + fbbuff = convertRGB2FB(rgbbuff, x_size, y_size, transp); + if(fbbuff==NULL) + return; - /* ClearFB if image is smaller */ - /* if(x_size < (int)xRes || y_size < (int)yRes) */ - if(clearfb) - CFrameBuffer::getInstance()->Clear(); + /* ClearFB if image is smaller */ + /* if(x_size < (int)xRes || y_size < (int)yRes) */ + if(clearfb) + CFrameBuffer::getInstance()->Clear(); - blit2FB(fbbuff, x_size, y_size, x_offs, y_offs, x_pan, y_pan); - cs_free_uncached(fbbuff); + blit2FB(fbbuff, x_size, y_size, x_offs, y_offs, x_pan, y_pan); + cs_free_uncached(fbbuff); } void CFrameBuffer::paintMuteIcon(bool paint, int ax, int ay, int dx, int dy, bool paintFrame) diff --git a/src/driver/framebuffer.h b/src/driver/framebuffer.h index 7797374e7..7ebde01f4 100644 --- a/src/driver/framebuffer.h +++ b/src/driver/framebuffer.h @@ -118,6 +118,9 @@ class CFrameBuffer int cache_size; void * int_convertRGB2FB(unsigned char *rgbbuff, unsigned long x, unsigned long y, int transp, bool alpha); int m_transparent_default, m_transparent; + // Unlocked versions (no mutex) + void paintHLineRelInternal(int x, int dx, int y, const fb_pixel_t col); + void paintVLineRelInternal(int x, int y, int dy, const fb_pixel_t col); public: fb_pixel_t realcolor[256]; @@ -176,7 +179,6 @@ class CFrameBuffer inline void paintHLine(int xa, int xb, int y, const fb_pixel_t col) { paintHLineRel(xa, xb - xa, y, col); } void paintHLineRel(int x, int dx, int y, const fb_pixel_t col); - void setIconBasePath(const std::string & iconPath); void getIconSize(const char * const filename, int* width, int *height); From 03ee79aaf0d0d1746c9add64137c21823208e967 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 18 Jan 2013 11:10:35 +0400 Subject: [PATCH 088/442] driver/framebuffer.cpp: fix --- src/driver/framebuffer.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index 3de58bb4d..9bf75ae85 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -750,12 +750,13 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int } ioctl(fd, FBIO_FILL_RECT, &fillrect); + return; + } +#endif + while (line < dy) { + paintHLineRelInternal(x, dx, y+line, col); + line++; } - } -#else - while (line < dy) { - paintHLineRelInternal(x+ofl, dx-ofl-ofr, y+line col); - line++; } #ifdef USE_NEVIS_GXA @@ -764,7 +765,6 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int */ add_gxa_sync_marker(); #endif -#endif } void CFrameBuffer::paintVLineRelInternal(int x, int y, int dy, const fb_pixel_t col) From a53285db10d9cb801c5ef5d7d2586dcb3524897a Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 18 Jan 2013 11:25:49 +0400 Subject: [PATCH 089/442] gui/videosettings.cpp: fix compile --- src/gui/videosettings.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index 48d4ed339..29cb6cd3c 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -236,8 +236,9 @@ int CVideoSettings::showVideoSetup() if (system_rev == 9 || system_rev == 11) { // Tank, Trinity. vs_analg_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_ANALOG_MODE, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_TANK_OPTIONS, VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT, true, this); vs_analg_ch->setHint("", LOCALE_MENU_HINT_VIDEO_ANALOG_MODE); + } else #endif - } else { + { if(system_rev != 10) { vs_scart_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_SCART, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT, true, this); vs_scart_ch->setHint("", LOCALE_MENU_HINT_VIDEO_SCART_MODE); From a27fb18e34f68e30e5276cd238ebb6362ba280be Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 18 Jan 2013 12:31:28 +0400 Subject: [PATCH 090/442] zapit/src/getservices.cpp: fix uninitialized warnings --- src/zapit/src/getservices.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index f6e8b2368..d58852c58 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -598,7 +598,7 @@ bool CServiceManager::LoadScanXml(fe_type_t delsys) { if (ParseScanXml(delsys)) { /* fake position for non-satellite */ - t_satellite_position position; + t_satellite_position position = 0; xmlNodePtr search = xmlDocGetRootElement(scanInputParser)->xmlChildrenNode; while (search) { @@ -929,7 +929,7 @@ bool CServiceManager::SaveCurrentServices(transponder_id_t tpid) return false; } - const char * footer; + const char * footer = ""; switch (tI->second.deltype) { case FE_QPSK: /* satellite */ sprintf(satstr, "\t<%s name=\"%s\" position=\"%hd\">\n", "sat", spos_it->second.name.c_str(), satellitePosition); From 1813a52a79e771cf3affee0ce2a2bf62935226b6 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 18 Jan 2013 13:28:13 +0400 Subject: [PATCH 091/442] zapit/src/femanager.cpp fix livefe check --- src/zapit/src/femanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index 445851b16..25d0651c4 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -485,7 +485,7 @@ CFrontend * CFEManager::getFrontend(CZapitChannel * channel) CFrontend * free_frontend = NULL; CFrontend * same_tid_fe = NULL; - if (livefe && livefe->sameTsidOnid(channel->getTransponderId())) + if (livefe && livefe->tuned && livefe->sameTsidOnid(channel->getTransponderId())) return livefe; t_satellite_position satellitePosition = channel->getSatellitePosition(); From ce88294b001c310bde9f12f8b1bce906c02208b5 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Fri, 18 Jan 2013 19:14:39 +0800 Subject: [PATCH 092/442] src/driver/fade.cpp: fix fade. needs to be tested. --- src/driver/fade.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/driver/fade.cpp b/src/driver/fade.cpp index 3368d97ca..89b049cbb 100644 --- a/src/driver/fade.cpp +++ b/src/driver/fade.cpp @@ -27,6 +27,10 @@ #include #include +#ifdef HAVE_COOL_HARDWARE +#include +#endif + COSDFader::COSDFader(unsigned char & alpha) : max_alpha(alpha) { @@ -49,7 +53,12 @@ void COSDFader::StartFadeIn() fadeIn = true; fadeOut = false; fadeValue = 100; +#ifdef HAVE_COOL_HARDWARE + frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_UNIFORM_ALPHA); // Global alpha multiplied with pixel alpha +#else frameBuffer->setBlendMode(2); // Global alpha multiplied with pixel alpha +#endif + frameBuffer->setBlendLevel(fadeValue); fadeTimer = g_RCInput->addTimer( FADE_TIME, false ); } @@ -65,7 +74,11 @@ bool COSDFader::StartFadeOut() if ((!fadeOut) && g_settings.widget_fade) { fadeOut = true; fadeTimer = g_RCInput->addTimer( FADE_TIME, false ); +#ifdef HAVE_COOL_HARDWARE + frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_UNIFORM_ALPHA); // Global alpha multiplied with pixel alpha +#else frameBuffer->setBlendMode(2); // Global alpha multiplied with pixel alpha +#endif ret = true; } return ret; @@ -75,7 +88,11 @@ void COSDFader::Stop() { if ( fadeIn || fadeOut ) { g_RCInput->killTimer(fadeTimer); - frameBuffer->setBlendMode(1); // Set back to per pixel alpha +#ifdef HAVE_COOL_HARDWARE + frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_PER_PIXEL); // Global alpha multiplied with pixel alpha +#else + frameBuffer->setBlendMode(1); // Global alpha multiplied with pixel alpha +#endif fadeIn = fadeOut = false; } } @@ -99,7 +116,11 @@ bool COSDFader::Fade() fadeValue = max_alpha; g_RCInput->killTimer (fadeTimer); fadeIn = false; - frameBuffer->setBlendMode(1); // Set back to per pixel alpha +#ifdef HAVE_COOL_HARDWARE + frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_PER_PIXEL); // Global alpha multiplied with pixel alpha +#else + frameBuffer->setBlendMode(1); // Global alpha multiplied with pixel alpha +#endif } else frameBuffer->setBlendLevel(fadeValue); } From 29e5a32e09eda4903c3004c7d71289acf5c75df6 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Fri, 18 Jan 2013 19:15:12 +0800 Subject: [PATCH 093/442] src/driver/framebuffer.cpp: don't use 2d accelerator for small lines, fall-back to s/w. --- src/driver/framebuffer.cpp | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index 9bf75ae85..46d4a68b6 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -769,7 +769,6 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int void CFrameBuffer::paintVLineRelInternal(int x, int y, int dy, const fb_pixel_t col) { - #if defined(FB_HW_ACCELERATION) fb_fillrect fillrect; fillrect.dx = x; @@ -811,14 +810,22 @@ void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) void CFrameBuffer::paintHLineRelInternal(int x, int dx, int y, const fb_pixel_t col) { #if defined(FB_HW_ACCELERATION) - fb_fillrect fillrect; - fillrect.dx = x; - fillrect.dy = y; - fillrect.width = dx; - fillrect.height = 1; - fillrect.color = col; - fillrect.rop = ROP_COPY; - ioctl(fd, FBIO_FILL_RECT, &fillrect); + if (dx >= 10) { + fb_fillrect fillrect; + fillrect.dx = x; + fillrect.dy = y; + fillrect.width = dx; + fillrect.height = 1; + fillrect.color = col; + fillrect.rop = ROP_COPY; + ioctl(fd, FBIO_FILL_RECT, &fillrect); + } else { + uint8_t * pos = ((uint8_t *)getFrameBufferPointer()) + x * sizeof(fb_pixel_t) + stride * y; + + fb_pixel_t * dest = (fb_pixel_t *)pos; + for (int i = 0; i < dx; i++) + *(dest++) = col; + } #elif defined(USE_NEVIS_GXA) /* draw a single horizontal line from point x/y with width dx */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; From 0dfd9d0a470424dfc1fd5b2f9c2f274d41ddc3e0 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 18 Jan 2013 15:48:13 +0400 Subject: [PATCH 094/442] driver/framebuffer.cpp: paintBoxRel with solid fill for nevis --- src/driver/framebuffer.cpp | 148 ++++++++++++++++++++----------------- 1 file changed, 82 insertions(+), 66 deletions(-) diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index 46d4a68b6..253d335d1 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -59,6 +59,9 @@ extern CPictureViewer * g_PicViewer; #define FB_HW_ACCELERATION #endif #endif +#if defined(FB_HW_ACCELERATION) && defined(USE_NEVIS_GXA) +#error +#endif //#undef USE_NEVIS_GXA //FIXME /*******************************************************************************/ #ifdef USE_NEVIS_GXA @@ -92,6 +95,7 @@ extern CPictureViewer * g_PicViewer; #define GXA_BMP2_ADDR_REG 0x0054 #define GXA_DEPTH_REG 0x00F4 #define GXA_CONTENT_ID_REG 0x0144 +#define GXA_BLT_CONTROL_REG 0x0034 #define GXA_CMD_BLT 0x00010800 #define GXA_CMD_NOT_ALPHA 0x00011000 @@ -100,6 +104,7 @@ extern CPictureViewer * g_PicViewer; #define GXA_BMP1_TYPE_REG 0x0048 #define GXA_BMP1_ADDR_REG 0x004C +#define GXA_BMP7_TYPE_REG 0x0078 #define GXA_BLEND_CFG_REG 0x003C #define GXA_CFG_REG 0x0030 @@ -218,6 +223,7 @@ void CFrameBuffer::setupGXA(void) _write_gxa(gxa_base, GXA_CFG_REG, 0x100 | (1 << 12) | (1 << 29)); _write_gxa(gxa_base, GXA_CFG2_REG, 0x1FF); _write_gxa(gxa_base, GXA_BG_COLOR_REG, (unsigned int) backgroundColor); + _write_gxa(gxa_base, GXA_BMP7_TYPE_REG, (3 << 16) | screeninfo.xres | (1 << 27)); } #endif void CFrameBuffer::init(const char * const fbDevice) @@ -620,54 +626,64 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int if (!getActive()) return; -#if defined(USE_NEVIS_GXA) + if (dx == 0 || dy == 0) { + printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, x+dx, x+dy); + return; + } +#if defined(FB_HW_ACCELERATION) + fb_fillrect fillrect; + fillrect.color = col; + fillrect.rop = ROP_COPY; +#elif defined(USE_NEVIS_GXA) OpenThreads::ScopedLock m_lock(mutex); + /* solid fill with background color */ + unsigned int cmd = GXA_CMD_BLT | GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(7) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; + _write_gxa(gxa_base, GXA_BG_COLOR_REG, (unsigned int) col); /* setup the drawing color */ #endif - bool corner_tl = (type & CORNER_TOP_LEFT) == CORNER_TOP_LEFT; - bool corner_tr = (type & CORNER_TOP_RIGHT) == CORNER_TOP_RIGHT; - bool corner_bl = (type & CORNER_BOTTOM_LEFT) == CORNER_BOTTOM_LEFT; - bool corner_br = (type & CORNER_BOTTOM_RIGHT)== CORNER_BOTTOM_RIGHT; - /* this table contains the x coordinates for a quarter circle (the bottom right quarter) with fixed radius of 540 px which is the half of the max HD graphics size of 1080 px. So with that table we ca draw boxes with round corners and als circles by just setting dx = dy = radius (max 540). */ static const int q_circle[541] = { - 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, - 539, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 537, 537, 537, 537, 537, 537, 537, - 537, 537, 536, 536, 536, 536, 536, 536, 536, 536, 535, 535, 535, 535, 535, 535, 535, 535, 534, 534, - 534, 534, 534, 534, 533, 533, 533, 533, 533, 533, 532, 532, 532, 532, 532, 532, 531, 531, 531, 531, - 531, 531, 530, 530, 530, 530, 529, 529, 529, 529, 529, 529, 528, 528, 528, 528, 527, 527, 527, 527, - 527, 526, 526, 526, 526, 525, 525, 525, 525, 524, 524, 524, 524, 523, 523, 523, 523, 522, 522, 522, - 522, 521, 521, 521, 521, 520, 520, 520, 519, 519, 519, 518, 518, 518, 518, 517, 517, 517, 516, 516, - 516, 515, 515, 515, 515, 514, 514, 514, 513, 513, 513, 512, 512, 512, 511, 511, 511, 510, 510, 510, - 509, 509, 508, 508, 508, 507, 507, 507, 506, 506, 506, 505, 505, 504, 504, 504, 503, 503, 502, 502, - 502, 501, 501, 500, 500, 499, 499, 499, 498, 498, 498, 497, 497, 496, 496, 496, 495, 495, 494, 494, - 493, 493, 492, 492, 491, 491, 490, 490, 490, 489, 489, 488, 488, 487, 487, 486, 486, 485, 485, 484, - 484, 483, 483, 482, 482, 481, 481, 480, 480, 479, 479, 478, 478, 477, 477, 476, 476, 475, 475, 474, - 473, 473, 472, 472, 471, 471, 470, 470, 469, 468, 468, 467, 466, 466, 465, 465, 464, 464, 463, 462, - 462, 461, 460, 460, 459, 459, 458, 458, 457, 456, 455, 455, 454, 454, 453, 452, 452, 451, 450, 450, - 449, 449, 448, 447, 446, 446, 445, 445, 444, 443, 442, 441, 441, 440, 440, 439, 438, 437, 436, 436, - 435, 435, 434, 433, 432, 431, 431, 430, 429, 428, 427, 427, 426, 425, 425, 424, 423, 422, 421, 421, - 420, 419, 418, 417, 416, 416, 415, 414, 413, 412, 412, 411, 410, 409, 408, 407, 406, 405, 404, 403, - 403, 402, 401, 400, 399, 398, 397, 397, 395, 394, 393, 393, 392, 391, 390, 389, 388, 387, 386, 385, - 384, 383, 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, 372, 371, 369, 368, 367, 367, 365, 364, - 363, 362, 361, 360, 358, 357, 356, 355, 354, 353, 352, 351, 350, 348, 347, 346, 345, 343, 342, 341, - 340, 339, 337, 336, 335, 334, 332, 331, 329, 328, 327, 326, 324, 323, 322, 321, 319, 317, 316, 315, - 314, 312, 310, 309, 308, 307, 305, 303, 302, 301, 299, 297, 296, 294, 293, 291, 289, 288, 287, 285, - 283, 281, 280, 278, 277, 275, 273, 271, 270, 268, 267, 265, 263, 261, 259, 258, 256, 254, 252, 250, - 248, 246, 244, 242, 240, 238, 236, 234, 232, 230, 228, 225, 223, 221, 219, 217, 215, 212, 210, 207, - 204, 202, 200, 197, 195, 192, 190, 187, 184, 181, 179, 176, 173, 170, 167, 164, 160, 157, 154, 150, - 147, 144, 140, 136, 132, 128, 124, 120, 115, 111, 105, 101, 95, 89, 83, 77, 69, 61, 52, 40, - 23}; + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, + 539, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 536, 536, 536, 536, 536, 536, 536, 536, 535, 535, 535, 535, 535, 535, 535, 535, 534, 534, + 534, 534, 534, 534, 533, 533, 533, 533, 533, 533, 532, 532, 532, 532, 532, 532, 531, 531, 531, 531, + 531, 531, 530, 530, 530, 530, 529, 529, 529, 529, 529, 529, 528, 528, 528, 528, 527, 527, 527, 527, + 527, 526, 526, 526, 526, 525, 525, 525, 525, 524, 524, 524, 524, 523, 523, 523, 523, 522, 522, 522, + 522, 521, 521, 521, 521, 520, 520, 520, 519, 519, 519, 518, 518, 518, 518, 517, 517, 517, 516, 516, + 516, 515, 515, 515, 515, 514, 514, 514, 513, 513, 513, 512, 512, 512, 511, 511, 511, 510, 510, 510, + 509, 509, 508, 508, 508, 507, 507, 507, 506, 506, 506, 505, 505, 504, 504, 504, 503, 503, 502, 502, + 502, 501, 501, 500, 500, 499, 499, 499, 498, 498, 498, 497, 497, 496, 496, 496, 495, 495, 494, 494, + 493, 493, 492, 492, 491, 491, 490, 490, 490, 489, 489, 488, 488, 487, 487, 486, 486, 485, 485, 484, + 484, 483, 483, 482, 482, 481, 481, 480, 480, 479, 479, 478, 478, 477, 477, 476, 476, 475, 475, 474, + 473, 473, 472, 472, 471, 471, 470, 470, 469, 468, 468, 467, 466, 466, 465, 465, 464, 464, 463, 462, + 462, 461, 460, 460, 459, 459, 458, 458, 457, 456, 455, 455, 454, 454, 453, 452, 452, 451, 450, 450, + 449, 449, 448, 447, 446, 446, 445, 445, 444, 443, 442, 441, 441, 440, 440, 439, 438, 437, 436, 436, + 435, 435, 434, 433, 432, 431, 431, 430, 429, 428, 427, 427, 426, 425, 425, 424, 423, 422, 421, 421, + 420, 419, 418, 417, 416, 416, 415, 414, 413, 412, 412, 411, 410, 409, 408, 407, 406, 405, 404, 403, + 403, 402, 401, 400, 399, 398, 397, 397, 395, 394, 393, 393, 392, 391, 390, 389, 388, 387, 386, 385, + 384, 383, 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, 372, 371, 369, 368, 367, 367, 365, 364, + 363, 362, 361, 360, 358, 357, 356, 355, 354, 353, 352, 351, 350, 348, 347, 346, 345, 343, 342, 341, + 340, 339, 337, 336, 335, 334, 332, 331, 329, 328, 327, 326, 324, 323, 322, 321, 319, 317, 316, 315, + 314, 312, 310, 309, 308, 307, 305, 303, 302, 301, 299, 297, 296, 294, 293, 291, 289, 288, 287, 285, + 283, 281, 280, 278, 277, 275, 273, 271, 270, 268, 267, 265, 263, 261, 259, 258, 256, 254, 252, 250, + 248, 246, 244, 242, 240, 238, 236, 234, 232, 230, 228, 225, 223, 221, 219, 217, 215, 212, 210, 207, + 204, 202, 200, 197, 195, 192, 190, 187, 184, 181, 179, 176, 173, 170, 167, 164, 160, 157, 154, 150, + 147, 144, 140, 136, 132, 128, 124, 120, 115, 111, 105, 101, 95, 89, 83, 77, 69, 61, 52, 40, + 23}; int line = 0; if (type && radius) { + bool corner_tl = (type & CORNER_TOP_LEFT) == CORNER_TOP_LEFT; + bool corner_tr = (type & CORNER_TOP_RIGHT) == CORNER_TOP_RIGHT; + bool corner_bl = (type & CORNER_BOTTOM_LEFT) == CORNER_BOTTOM_LEFT; + bool corner_br = (type & CORNER_BOTTOM_RIGHT)== CORNER_BOTTOM_RIGHT; int ofs, scf, scl, ofl, ofr; /* just an multiplicator for all math to reduce rounding errors */ - #define MUL 32768 +#define MUL 32768 /* limit the radius */ if (radius > dx) @@ -703,63 +719,66 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int ofr = corner_br ? ofs : 0; } else { //printf("3: x %d y %d dx %d dy %d rad %d line %d\n", x, y, dx, dy, radius, line); -#ifdef FB_HW_ACCELERATION - /* FIXME small size faster to do by software */ - fb_fillrect fillrect; +#if defined(FB_HW_ACCELERATION) || defined(USE_NEVIS_GXA) int rect_height_mult = (((type & (CORNER_BOTTOM | CORNER_TOP)) == (CORNER_BOTTOM | CORNER_TOP)) ? 2 : 1); - +#if defined(FB_HW_ACCELERATION) fillrect.dx = x; fillrect.dy = y + line; fillrect.width = dx; fillrect.height = dy - (radius * rect_height_mult); - fillrect.color = col; - fillrect.rop = ROP_COPY; - if (dx == 0 || dy == 0) { - printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, x+dx, x+dy); - return; - } ioctl(fd, FBIO_FILL_RECT, &fillrect); +#elif defined(USE_NEVIS_GXA) + _write_gxa(gxa_base, GXA_BLT_CONTROL_REG, 0); + _write_gxa(gxa_base, cmd, GXA_POINT(x, y + line)); /* destination x/y */ + _write_gxa(gxa_base, cmd, GXA_POINT(dx, dy - (radius * rect_height_mult))); /* width/height */ +#endif line += dy - (radius * rect_height_mult); continue; #endif - } if (dx-ofr-ofl == 0) printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, dx-ofr-ofl, y+line); - +#ifdef USE_NEVIS_GXA + _write_gxa(gxa_base, GXA_BLT_CONTROL_REG, 0); + _write_gxa(gxa_base, cmd, GXA_POINT(x + ofl, y + line)); /* destination x/y */ + _write_gxa(gxa_base, cmd, GXA_POINT(dx-ofr-ofr, 1)); /* width/height */ +#else paintHLineRelInternal(x+ofl, dx-ofl-ofr, y+line, col); +#endif line++; } } else { -#ifdef FB_HW_ACCELERATION +#if defined(FB_HW_ACCELERATION) /* FIXME small size faster to do by software */ if (dx > 10 || dy > 10) { - fb_fillrect fillrect; - fillrect.dx = x; fillrect.dy = y; fillrect.width = dx; fillrect.height = dy; - fillrect.color = col; - fillrect.rop = ROP_COPY; - if (dx == 0 || dy == 0) { - printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, x+dx, x+dy); - return; - } - ioctl(fd, FBIO_FILL_RECT, &fillrect); return; } #endif +#if defined(USE_NEVIS_GXA) + _write_gxa(gxa_base, GXA_BLT_CONTROL_REG, 0); + _write_gxa(gxa_base, cmd, GXA_POINT(x, y)); /* destination x/y */ + _write_gxa(gxa_base, cmd, GXA_POINT(dx, dy)); /* width/height */ +#else + int swidth = stride / sizeof(fb_pixel_t); + fb_pixel_t *fbp = getFrameBufferPointer() + (swidth * y); while (line < dy) { - paintHLineRelInternal(x, dx, y+line, col); + for (int pos = x; pos < x + dx; pos++) + *(fbp + pos) = col; + + fbp += swidth; line++; } +#endif } - #ifdef USE_NEVIS_GXA + _write_gxa(gxa_base, GXA_BG_COLOR_REG, (unsigned int) backgroundColor); //FIXME needed ? /* the GXA seems to do asynchronous rendering, so we add a sync marker * to which the fontrenderer code can synchronize */ @@ -769,6 +788,7 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int void CFrameBuffer::paintVLineRelInternal(int x, int y, int dy, const fb_pixel_t col) { + #if defined(FB_HW_ACCELERATION) fb_fillrect fillrect; fillrect.dx = x; @@ -819,14 +839,10 @@ void CFrameBuffer::paintHLineRelInternal(int x, int dx, int y, const fb_pixel_t fillrect.color = col; fillrect.rop = ROP_COPY; ioctl(fd, FBIO_FILL_RECT, &fillrect); - } else { - uint8_t * pos = ((uint8_t *)getFrameBufferPointer()) + x * sizeof(fb_pixel_t) + stride * y; - - fb_pixel_t * dest = (fb_pixel_t *)pos; - for (int i = 0; i < dx; i++) - *(dest++) = col; + return; } -#elif defined(USE_NEVIS_GXA) +#endif +#if defined(USE_NEVIS_GXA) /* draw a single horizontal line from point x/y with width dx */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; From 55c32bcb73f8f316fb668dc77fbcde29732d1be2 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 18 Jan 2013 15:51:19 +0400 Subject: [PATCH 095/442] zapit/src/femanager.cpp: make sure single-tuner is independent --- src/zapit/src/femanager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index 25d0651c4..1b0379f1e 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -240,6 +240,8 @@ bool CFEManager::loadSettings() if (def_mode > CFrontend::FE_MODE_INDEPENDENT) def_mode = CFrontend::FE_MODE_INDEPENDENT; } + if (femap.size() == 1) + def_mode = CFrontend::FE_MODE_INDEPENDENT; fe->setMode(getConfigValue(fe, "mode", def_mode)); fe->setMaster(getConfigValue(fe, "master", 0)); From ca8185bff9f6efe2253368b262555a49a20d301b Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 18 Jan 2013 15:52:12 +0400 Subject: [PATCH 096/442] gui/scan_setup.cpp: for single-tuner, disable mode switch, dont show link option --- src/gui/scan_setup.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 7c648a57c..5367c2111 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -385,7 +385,7 @@ int CScanSetup::showScanMenu() //sat/provider selector - if(CFEManager::getInstance()->getFrontendCount() > 1) { + if(CFEManager::getInstance()->haveSat() || CFEManager::getInstance()->getFrontendCount() > 1) { CMenuWidget * setupMenu = new CMenuWidget(LOCALE_SATSETUP_FE_SETUP, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_SCAN_FE_SETUP); addScanMenuFrontendSetup(setupMenu); mf = new CMenuDForwarder(LOCALE_SATSETUP_FE_SETUP, allow_start, NULL, setupMenu, "", CRCInput::convertDigitToKey(shortcut++)); @@ -681,7 +681,7 @@ int CScanSetup::showFrontendSetup(int number) bool enable = true; /* disable mode option, if fe is master and there are links - prevent master mode change and hence linked in undefined state */ - if (fe->hasLinks()) + if (fe->hasLinks() || fecount == 1) enable = false; if (CFrontend::linked(femode)) @@ -696,9 +696,11 @@ int CScanSetup::showFrontendSetup(int number) /* disable all but mode option for linked frontends */ bool allow_moptions = !CFrontend::linked(femode); - /* link to master select */ - linkfe = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE_MASTER, &femaster, feselect, select_count, !allow_moptions, this, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN, true); - setupMenu->addItem(linkfe); + if (fecount > 1) { + /* link to master select */ + linkfe = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE_MASTER, &femaster, feselect, select_count, !allow_moptions, this, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN, true); + setupMenu->addItem(linkfe); + } /* diseqc type select */ dtype = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC, (int *)&dmode, SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT, femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP, @@ -759,6 +761,7 @@ int CScanSetup::showFrontendSetup(int number) fillSatSelect(satSelect); delete setupMenu; + linkfe = NULL; /* re-link in case mode changed, without fe init */ CFEManager::getInstance()->linkFrontends(false); /* copy settings from master, if it set and fe linked */ @@ -1399,7 +1402,8 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); fe->setMode(femode); if (fe && fe->getType() == FE_QPSK) { - linkfe->setActive(CFrontend::linked(femode)); + if (linkfe) + linkfe->setActive(CFrontend::linked(femode)); dtype->setActive(femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); uniSetup->setActive(dmode == DISEQC_UNICABLE && femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); fsatSelect->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); From 777e417c0a55ada9659234f2f0b11fa725e5d0f0 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 18 Jan 2013 15:58:25 +0400 Subject: [PATCH 097/442] driver/fade.cpp: fix compile for nevis --- src/driver/fade.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/driver/fade.cpp b/src/driver/fade.cpp index 89b049cbb..caefff571 100644 --- a/src/driver/fade.cpp +++ b/src/driver/fade.cpp @@ -53,7 +53,7 @@ void COSDFader::StartFadeIn() fadeIn = true; fadeOut = false; fadeValue = 100; -#ifdef HAVE_COOL_HARDWARE +#ifdef BOXMODEL_APOLLO frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_UNIFORM_ALPHA); // Global alpha multiplied with pixel alpha #else frameBuffer->setBlendMode(2); // Global alpha multiplied with pixel alpha @@ -74,7 +74,7 @@ bool COSDFader::StartFadeOut() if ((!fadeOut) && g_settings.widget_fade) { fadeOut = true; fadeTimer = g_RCInput->addTimer( FADE_TIME, false ); -#ifdef HAVE_COOL_HARDWARE +#ifdef BOXMODEL_APOLLO frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_UNIFORM_ALPHA); // Global alpha multiplied with pixel alpha #else frameBuffer->setBlendMode(2); // Global alpha multiplied with pixel alpha @@ -88,7 +88,7 @@ void COSDFader::Stop() { if ( fadeIn || fadeOut ) { g_RCInput->killTimer(fadeTimer); -#ifdef HAVE_COOL_HARDWARE +#ifdef BOXMODEL_APOLLO frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_PER_PIXEL); // Global alpha multiplied with pixel alpha #else frameBuffer->setBlendMode(1); // Global alpha multiplied with pixel alpha @@ -116,7 +116,7 @@ bool COSDFader::Fade() fadeValue = max_alpha; g_RCInput->killTimer (fadeTimer); fadeIn = false; -#ifdef HAVE_COOL_HARDWARE +#ifdef BOXMODEL_APOLLO frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_PER_PIXEL); // Global alpha multiplied with pixel alpha #else frameBuffer->setBlendMode(1); // Global alpha multiplied with pixel alpha From ca3ac518814f5203abfee90014e2dd78a11afc3c Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 18 Jan 2013 16:53:40 +0400 Subject: [PATCH 098/442] lib/libcoolstream2: sync control headers --- lib/libcoolstream2/control.h | 16 ---------------- lib/libcoolstream2/tsrouter.h | 5 +++++ 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/lib/libcoolstream2/control.h b/lib/libcoolstream2/control.h index 56d38f696..20309deab 100644 --- a/lib/libcoolstream2/control.h +++ b/lib/libcoolstream2/control.h @@ -33,28 +33,12 @@ typedef struct _scart_status { bool fastblank; } scart_status_t; -typedef struct _pwm_status { - u16 pwm_pulse_first; - u16 pwm_pulse_second; - u32 pwm_clock; -} pwm_status_t; - -typedef struct cs_control_data { - scart_status_t scart_status; - pwm_status_t pwm_status; - bool hdd_power; - u32 readers; - u32 sys_serial_high, sys_serial_low; - u32 sys_revision; -} cs_control_data_t; - /* ioctls */ #define CS_CONTROL_MAGIC 0xDE #define IOC_CONTROL_WIDESCREEN _IOW(CS_CONTROL_MAGIC, 20, unsigned int) #define IOC_CONTROL_TVAV _IOW(CS_CONTROL_MAGIC, 21, unsigned int) #define IOC_CONTROL_RGB _IOW(CS_CONTROL_MAGIC, 22, unsigned int) #define IOC_CONTROL_SCART_STATUS _IOR(CS_CONTROL_MAGIC, 23, scart_status_t *) -#define IOC_CONTROL_PWM_SPEED _IOW(CS_CONTROL_MAGIC, 24, unsigned int) #define IOC_CONTROL_HDDPOWER _IOW(CS_CONTROL_MAGIC, 25, unsigned int) /* ioctl for getting board serial and revision */ diff --git a/lib/libcoolstream2/tsrouter.h b/lib/libcoolstream2/tsrouter.h index 672d6721d..613b0ffb1 100644 --- a/lib/libcoolstream2/tsrouter.h +++ b/lib/libcoolstream2/tsrouter.h @@ -29,4 +29,9 @@ extern void cs_tsx_tsp_get_port_config(tsrouter_tsp_config_t *conf); extern void cs_tsx_hsdp_set_port_config(const tsrouter_hsdp_config_t *conf); extern void cs_tsx_tsp_set_port_config(const tsrouter_tsp_config_t *conf); +extern void cs_tsx_hsdp_get_port_pll(unsigned int port, unsigned int *pll_index); +extern void cs_tsx_hsdp_set_port_pll(unsigned int port, unsigned int pll_index); + +extern void cs_tsx_hsdp_get_port_speed(unsigned int port, unsigned int *speed); +extern void cs_tsx_hsdp_set_port_speed(unsigned int port, unsigned int speed); #endif /* __TSROUTER_H */ From 3f7ddf58a5c3ccb980e8bb1b673beade29a85790 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 23 Jan 2013 11:57:27 +0400 Subject: [PATCH 099/442] driver/framebuffer.cpp: move fade sleep workaround to fade.cpp --- src/driver/fade.cpp | 5 +++-- src/driver/framebuffer.cpp | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/driver/fade.cpp b/src/driver/fade.cpp index caefff571..fa6c9a5d9 100644 --- a/src/driver/fade.cpp +++ b/src/driver/fade.cpp @@ -88,10 +88,11 @@ void COSDFader::Stop() { if ( fadeIn || fadeOut ) { g_RCInput->killTimer(fadeTimer); + usleep(40000); #ifdef BOXMODEL_APOLLO - frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_PER_PIXEL); // Global alpha multiplied with pixel alpha + frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_PER_PIXEL); // Global alpha multiplied with pixel alpha #else - frameBuffer->setBlendMode(1); // Global alpha multiplied with pixel alpha + frameBuffer->setBlendMode(1); // Global alpha multiplied with pixel alpha #endif fadeIn = fadeOut = false; } diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index 253d335d1..eb2e49089 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -543,7 +543,7 @@ void CFrameBuffer::setBlendLevel(int level) if (ioctl(fd, FBIO_SETOPACITY, value)) printf("FBIO_SETOPACITY failed.\n"); -#ifndef ISAPOLLO +#if 0 if(level == 100) // TODO: sucks. usleep(20000); #endif From e9ab19f6aa794cd1dbf19b9277a20fc5afc2d0fd Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Thu, 24 Jan 2013 17:40:31 +0800 Subject: [PATCH 100/442] neutrino: diseqc changes for testing. --- src/zapit/include/zapit/frontend_c.h | 9 ++- src/zapit/src/frontend.cpp | 108 ++++++++++++++++----------- 2 files changed, 69 insertions(+), 48 deletions(-) diff --git a/src/zapit/include/zapit/frontend_c.h b/src/zapit/include/zapit/frontend_c.h index 461c06c6d..feefe3feb 100644 --- a/src/zapit/include/zapit/frontend_c.h +++ b/src/zapit/include/zapit/frontend_c.h @@ -26,6 +26,7 @@ #include #include + #include #include #include @@ -148,12 +149,12 @@ class CFrontend void secSetTone(const fe_sec_tone_mode_t mode, const uint32_t ms); void secSetVoltage(const fe_sec_voltage_t voltage, const uint32_t ms); void sendDiseqcCommand(const struct dvb_diseqc_master_cmd *cmd, const uint32_t ms); - void sendDiseqcPowerOn(void); - void sendDiseqcReset(void); + void sendDiseqcStandby(uint32_t ms = 100); + void sendDiseqcPowerOn(uint32_t ms = 100); + void sendDiseqcReset(uint32_t ms = 40); void sendDiseqcSmatvRemoteTuningCommand(const uint32_t frequency); uint32_t sendEN50494TuningCommand(const uint32_t frequency, const int high_band, const int horizontal, const int bank); - void sendDiseqcStandby(void); - void sendDiseqcZeroByteCommand(const uint8_t frm, const uint8_t addr, const uint8_t cmd); + void sendDiseqcZeroByteCommand(const uint8_t frm, const uint8_t addr, const uint8_t cmd, uint32_t ms = 15); void sendToneBurst(const fe_sec_mini_cmd_t burst, const uint32_t ms); int setFrontend(const FrontendParameters *feparams, bool nowait = false); void setSec(const uint8_t sat_no, const uint8_t pol, const bool high_band); diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index c91f5701b..ed19f16dd 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -213,8 +213,10 @@ bool CFrontend::Open(bool init) void CFrontend::Init(void) { mutex.lock(); + // Set the voltage to On, and wait voltage to become stable + // and wait for diseqc equipment to be ready. secSetVoltage(SEC_VOLTAGE_13, 100); - secSetTone(SEC_TONE_OFF, 15); + secSetTone(SEC_TONE_OFF, 20); setDiseqcType((diseqc_t) config.diseqcType, true); mutex.unlock(); } @@ -228,11 +230,15 @@ void CFrontend::Close(void) if (!slave && config.diseqcType > MINI_DISEQC) sendDiseqcStandby(); + // Disable tone first as it's imposed on voltage + secSetTone(SEC_TONE_OFF, 20); + // Disable voltage immediately and wait 50ms to prevent + // a fast power-off -> power-on sequence where diseqc equipment + // might not reset properly. + secSetVoltage(SEC_VOLTAGE_OFF, 50); - secSetVoltage(SEC_VOLTAGE_OFF, 0); - secSetTone(SEC_TONE_OFF, 15); - tuned = false; - standby = true;; + tuned = false; + standby = true;; close(fd); fd = -1; } @@ -243,8 +249,12 @@ void CFrontend::setMasterSlave(bool _slave) return; if(_slave) { - secSetVoltage(SEC_VOLTAGE_OFF, 0); - secSetTone(SEC_TONE_OFF, 15); + // Disable tone first as it's imposed on voltage + secSetTone(SEC_TONE_OFF, 20); + // Disable voltage immediately and wait 50ms to prevent + // a fast power-off -> power-on sequence where diseqc equipment + // might not reset properly. + secSetVoltage(SEC_VOLTAGE_OFF, 50); } slave = _slave; if(!slave) @@ -400,6 +410,7 @@ uint16_t CFrontend::getSignalNoiseRatio(void) const fop(ioctl, FE_READ_SNR, &snr); return snr; } + #if 0 //never used uint32_t CFrontend::getUncorrectedBlocks(void) const @@ -410,6 +421,7 @@ uint32_t CFrontend::getUncorrectedBlocks(void) const return blocks; } #endif + struct dvb_frontend_event CFrontend::getEvent(void) { struct dvb_frontend_event event; @@ -822,6 +834,7 @@ void CFrontend::sendDiseqcCommand(const struct dvb_diseqc_master_cmd *cmd, const for (int i = 0; i < cmd->msg_len; i++) printf("0x%X ", cmd->msg[i]); printf("\n"); + if (fop(ioctl, FE_DISEQC_SEND_MASTER_CMD, cmd) == 0) usleep(1000 * ms); } @@ -881,11 +894,11 @@ void CFrontend::setDiseqcType(const diseqc_t newDiseqcType, bool force) secSetTone(SEC_TONE_OFF, 0); secSetVoltage(SEC_VOLTAGE_13, 0); } - else if ((force && (newDiseqcType != NO_DISEQC)) || ((config.diseqcType <= MINI_DISEQC) - && (newDiseqcType > MINI_DISEQC))) { + else if ((force && (newDiseqcType != NO_DISEQC)) || + ((config.diseqcType <= MINI_DISEQC) && (newDiseqcType > MINI_DISEQC))) { secSetTone(SEC_TONE_OFF, 15); - sendDiseqcPowerOn(); sendDiseqcReset(); + sendDiseqcPowerOn(); secSetTone(SEC_TONE_ON, 50); } @@ -1144,7 +1157,6 @@ bool CFrontend::setDiseqcSimple(int sat_no, const uint8_t pol, const uint32_t fr secSetTone(SEC_TONE_OFF, 20); secSetVoltage(v, 100); - sendDiseqcCommand(&cmd, 100); return true; } @@ -1175,31 +1187,32 @@ void CFrontend::setDiseqc(int sat_no, const uint8_t pol, const uint32_t frequenc if (slave) return; + // Disable tone for at least 15ms secSetTone(SEC_TONE_OFF, 20); -#if 1 - fe_sec_voltage_t v = (pol & 1) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18; - secSetVoltage(v, 100); -#endif -#if 0 - sendDiseqcReset(); - usleep(50*1000); /* sleep at least 50 milli seconds */ -#endif - for (loop = 0; loop <= config.diseqcRepeats; loop++) { - if (config.diseqcType == MINI_DISEQC) - sendToneBurst(b, 1); + // Set wanted voltage and wait at least 100 ms, in case voltage was off. + secSetVoltage((pol & 1) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18, 100); +#if 0 /* FIXME: is this necessary ? */ + sendDiseqcReset(); + sendDiseqcPowerOn(); +#endif + + for (loop = 0; loop <= config.diseqcRepeats; loop++) { delay = 0; + if (config.diseqcType == DISEQC_1_1) { /* setup the uncommited switch first */ - delay = 60; // delay for 1.0 after 1.1 command + delay = 100; // delay for 1.0 after 1.1 command cmd.msg[2] = 0x39; /* port group = uncommited switches */ #if 1 /* for 16 inputs */ cmd.msg[3] = 0xF0 | ((sat_no / 4) & 0x03); - sendDiseqcCommand(&cmd, 100); /* send the command to setup second uncommited switch and wait 100 ms !!! */ + //send the command to setup second uncommited switch and + // wait 100 ms. + sendDiseqcCommand(&cmd, 100); #else /* for 64 inputs */ - uint8_t cascade_input[16] = { 0xF0, 0xF4, 0xF8, 0xFC, 0xF1, 0xF5, 0xF9, 0xFD, 0xF2, 0xF6, 0xFA, + uint8_t cascade_input[16] = {0xF0, 0xF4, 0xF8, 0xFC, 0xF1, 0xF5, 0xF9, 0xFD, 0xF2, 0xF6, 0xFA, 0xFE, 0xF3, 0xF7, 0xFB, 0xFF }; cmd.msg[3] = cascade_input[(sat_no / 4) & 0xFF]; @@ -1208,22 +1221,30 @@ void CFrontend::setDiseqc(int sat_no, const uint8_t pol, const uint32_t frequenc sendDiseqcCommand(&cmd, 100); /* send the command to setup second uncommited switch and wait 100 ms !!! */ #endif } - if (config.diseqcType >= DISEQC_1_0) { /* DISEQC 1.0 */ + if (config.diseqcType >= DISEQC_1_0) { /* DISEQC 1.0 */ usleep(delay * 1000); //cmd.msg[0] |= 0x01; /* repeated transmission */ cmd.msg[2] = 0x38; /* port group = commited switches */ - cmd.msg[3] = 0xF0 | ((sat_no % 4) << 2) | ((pol & 1) ? 0 : 2) | (high_band ? 1 : 0); + cmd.msg[3] = 0xF0 | ((sat_no & 0x0F) << 2) | ((pol & 1) ? 0 : 2) | (high_band ? 1 : 0); sendDiseqcCommand(&cmd, 100); /* send the command to setup second commited switch */ } cmd.msg[0] = 0xE1; usleep(50 * 1000); /* sleep at least 50 milli seconds */ } + // Toneburst should not be repeated and should be sent AFTER + // all diseqc, this means we don't support a toneburst switch + // before any diseqc equipment. + if (config.diseqcType == MINI_DISEQC) + sendToneBurst(b, 1); + usleep(25 * 1000); if (config.diseqcType == SMATV_REMOTE_TUNING) sendDiseqcSmatvRemoteTuningCommand(frequency); + + usleep(25 * 1000); } void CFrontend::setSec(const uint8_t /*sat_no*/, const uint8_t pol, const bool high_band) @@ -1232,43 +1253,42 @@ void CFrontend::setSec(const uint8_t /*sat_no*/, const uint8_t pol, const bool h fe_sec_tone_mode_t t = high_band ? SEC_TONE_ON : SEC_TONE_OFF; currentTransponder.polarization = pol; - secSetTone(t, 15); + // set tone off first + secSetTone(SEC_TONE_OFF, 20); + // set the desired voltage secSetVoltage(v, 100); + // set tone according to what's needed. + secSetTone(t, 15); } -void CFrontend::sendDiseqcPowerOn(void) +void CFrontend::sendDiseqcPowerOn(uint32_t ms) { - // FIXME power on can take a while. Should be wait - // more time here ? 15 ms enough for some switches ? printf("[fe%d] diseqc power on\n", fenumber); - sendDiseqcZeroByteCommand(0xe0, 0x10, 0x03); + // Send power on to 'all' equipment + sendDiseqcZeroByteCommand(0xe0, 0x00, 0x03, ms); } -void CFrontend::sendDiseqcReset(void) +void CFrontend::sendDiseqcReset(uint32_t ms) { printf("[fe%d] diseqc reset\n", fenumber); -#if 0 - /* Reset && Clear Reset */ - sendDiseqcZeroByteCommand(0xe0, 0x10, 0x00); - sendDiseqcZeroByteCommand(0xe0, 0x10, 0x01); -#else - sendDiseqcZeroByteCommand(0xe0, 0x00, 0x00); // enigma -#endif + // Send reset to 'all' equipment + sendDiseqcZeroByteCommand(0xe0, 0x00, 0x00, ms); } -void CFrontend::sendDiseqcStandby(void) +void CFrontend::sendDiseqcStandby(uint32_t ms) { printf("[fe%d] diseqc standby\n", fenumber); - sendDiseqcZeroByteCommand(0xe0, 0x10, 0x02); + // Send power off to 'all' equipment + sendDiseqcZeroByteCommand(0xe0, 0x00, 0x02, ms); } -void CFrontend::sendDiseqcZeroByteCommand(uint8_t framing_byte, uint8_t address, uint8_t command) +void CFrontend::sendDiseqcZeroByteCommand(uint8_t framing_byte, uint8_t address, uint8_t command, uint32_t ms) { struct dvb_diseqc_master_cmd diseqc_cmd = { {framing_byte, address, command, 0x00, 0x00, 0x00}, 3 }; - sendDiseqcCommand(&diseqc_cmd, 15); + sendDiseqcCommand(&diseqc_cmd, ms); } void CFrontend::sendDiseqcSmatvRemoteTuningCommand(const uint32_t frequency) From 740efbba6b1aa65efdb0034e4fd54b4d2fade572 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 24 Jan 2013 13:41:58 +0400 Subject: [PATCH 101/442] locals: add locale for diseqc order and missed hints --- data/locale/english.locale | 5 ++++- src/system/locals.h | 3 +++ src/system/locals_intern.h | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/data/locale/english.locale b/data/locale/english.locale index fe7584a9a..f7f82782d 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -964,13 +964,15 @@ menu.hint_scan_cable Select cable network to scan menu.hint_scan_cable_simple Cable scan with optional\nprovider channel numbering menu.hint_scan_commited Select commited input for\nthis satellite menu.hint_scan_diseqc Select diseqc switch input for\nthis satellite +menu.hint_scan_diseqcorder Diseqc command order for cascaded switches menu.hint_scan_diseqcrepeat Diseqc repeat for cascaded switches menu.hint_scan_diseqctype Select your diseqc switch protocol\nwith 'advanced' you can use uncommited switches menu.hint_scan_fast CanalDigitaal/TéléSAT/TV Vlaanderen provider scan\nWARNING: diseqc config will be overwritten menu.hint_scan_fastprov Select provider to scan menu.hint_scan_fasttype Select fast scan type menu.hint_scan_fec Select transponder FEC -menu.hint_scan_femode Select second tuner connection type +menu.hint_scan_femode Select tuner connection type +menu.hint_scan_felink Select tuner to link tuner to menu.hint_scan_fesetup Configure tuner(s) menu.hint_scan_fetimeout Time to wait for signal, in 1/10 of second menu.hint_scan_freq Enter transponder frequency @@ -1534,6 +1536,7 @@ satsetup.diseqc12 DiSEqC 1.2 satsetup.diseqc_advanced Advanced satsetup.diseqc_com_uncom Commited/Uncommited satsetup.diseqc_input DiSEqC input +satsetup.diseqc_order DiSEqC command order satsetup.diseqc_uncom_com Uncommited/Commited satsetup.diseqcrepeat DiSEqC-repeats satsetup.extended DiSEqC-Settings diff --git a/src/system/locals.h b/src/system/locals.h index 5c96fe010..e79056e96 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -991,6 +991,7 @@ typedef enum LOCALE_MENU_HINT_SCAN_CABLE_SIMPLE, LOCALE_MENU_HINT_SCAN_COMMITED, LOCALE_MENU_HINT_SCAN_DISEQC, + LOCALE_MENU_HINT_SCAN_DISEQCORDER, LOCALE_MENU_HINT_SCAN_DISEQCREPEAT, LOCALE_MENU_HINT_SCAN_DISEQCTYPE, LOCALE_MENU_HINT_SCAN_FAST, @@ -998,6 +999,7 @@ typedef enum LOCALE_MENU_HINT_SCAN_FASTTYPE, LOCALE_MENU_HINT_SCAN_FEC, LOCALE_MENU_HINT_SCAN_FEMODE, + LOCALE_MENU_HINT_SCAN_FELINK, LOCALE_MENU_HINT_SCAN_FESETUP, LOCALE_MENU_HINT_SCAN_FETIMEOUT, LOCALE_MENU_HINT_SCAN_FREQ, @@ -1561,6 +1563,7 @@ typedef enum LOCALE_SATSETUP_DISEQC_ADVANCED, LOCALE_SATSETUP_DISEQC_COM_UNCOM, LOCALE_SATSETUP_DISEQC_INPUT, + LOCALE_SATSETUP_DISEQC_ORDER, LOCALE_SATSETUP_DISEQC_UNCOM_COM, LOCALE_SATSETUP_DISEQCREPEAT, LOCALE_SATSETUP_EXTENDED, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index bb507003b..5bfdfd3ed 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -991,6 +991,7 @@ const char * locale_real_names[] = "menu.hint_scan_cable_simple", "menu.hint_scan_commited", "menu.hint_scan_diseqc", + "menu.hint_scan_diseqcorder", "menu.hint_scan_diseqcrepeat", "menu.hint_scan_diseqctype", "menu.hint_scan_fast", @@ -998,6 +999,7 @@ const char * locale_real_names[] = "menu.hint_scan_fasttype", "menu.hint_scan_fec", "menu.hint_scan_femode", + "menu.hint_scan_felink", "menu.hint_scan_fesetup", "menu.hint_scan_fetimeout", "menu.hint_scan_freq", @@ -1561,6 +1563,7 @@ const char * locale_real_names[] = "satsetup.diseqc_advanced", "satsetup.diseqc_com_uncom", "satsetup.diseqc_input", + "satsetup.diseqc_order", "satsetup.diseqc_uncom_com", "satsetup.diseqcrepeat", "satsetup.extended", From 0deb430615b0ce8c594198c1e59cfa12688e3394 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 24 Jan 2013 13:42:55 +0400 Subject: [PATCH 102/442] zapit/include/zapit/frontend_types.h: add diseqc_order to frontend config --- src/zapit/include/zapit/frontend_types.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zapit/include/zapit/frontend_types.h b/src/zapit/include/zapit/frontend_types.h index 1e8fa6a88..590b383f3 100644 --- a/src/zapit/include/zapit/frontend_types.h +++ b/src/zapit/include/zapit/frontend_types.h @@ -37,6 +37,7 @@ typedef struct frontend_config { int uni_lnb; int motorRotationSpeed; int highVoltage; + int diseqc_order; } frontend_config_t; #endif // __FRONTEND_TYPES_H__ From 2efc58cdf01d646ed935f9cf79305391094eee26 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 24 Jan 2013 13:44:48 +0400 Subject: [PATCH 103/442] zapit/src/femanager.cpp: save/load fe diseqc order --- src/zapit/src/femanager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index 1b0379f1e..2aecd509c 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -223,6 +223,7 @@ bool CFEManager::loadSettings() fe_config.highVoltage = getConfigValue(fe, "highVoltage", 0); fe_config.uni_scr = getConfigValue(fe, "uni_scr", -1); fe_config.uni_qrg = getConfigValue(fe, "uni_qrg", 0); + fe_config.diseqc_order = getConfigValue(fe, "diseqc_order", UNCOMMITED_FIRST); fe->setRotorSatellitePosition(getConfigValue(fe, "lastSatellitePosition", 0)); @@ -303,6 +304,7 @@ void CFEManager::saveSettings(bool write) setConfigValue(fe, "highVoltage", fe_config.highVoltage); setConfigValue(fe, "uni_scr", fe_config.uni_scr); setConfigValue(fe, "uni_qrg", fe_config.uni_qrg); + setConfigValue(fe, "diseqc_order", fe_config.diseqc_order); setConfigValue(fe, "lastSatellitePosition", fe->getRotorSatellitePosition()); setConfigValue(fe, "mode", fe->getMode()); setConfigValue(fe, "master", fe->getMaster()); From 4fc2e13df38e9f841d2a8c971662272183e7e3a7 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 24 Jan 2013 13:46:07 +0400 Subject: [PATCH 104/442] zapit/src/frontend.cpp: use per-frontend diseqc order --- src/zapit/src/frontend.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index c91f5701b..db1a7c6f7 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -995,7 +995,7 @@ void CFrontend::setInput(t_satellite_position satellitePosition, uint32_t freque setDiseqc(sit->second.diseqc, polarization, frequency); return; } - if (sit->second.diseqc_order == COMMITED_FIRST) { + if (config.diseqc_order /*sit->second.diseqc_order*/ == COMMITED_FIRST) { if (setDiseqcSimple(sit->second.commited, polarization, frequency)) uncommitedInput = 255; sendUncommittedSwitchesCommand(sit->second.uncommited); From 972dea8b373de9c79cf445be3fad40ec143b33fa Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 24 Jan 2013 13:47:21 +0400 Subject: [PATCH 105/442] gui/scan_setup.cpp: add diseqc order option for advanced diseqc mode; add missed hints; fix diseqc options enable/disable --- src/gui/scan_setup.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 5367c2111..9cfc0ede6 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -694,11 +694,12 @@ int CScanSetup::showFrontendSetup(int number) if (fe->getInfo()->type == FE_QPSK) { /* disable all but mode option for linked frontends */ - bool allow_moptions = !CFrontend::linked(femode); + bool allow_moptions = !CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED; if (fecount > 1) { /* link to master select */ linkfe = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE_MASTER, &femaster, feselect, select_count, !allow_moptions, this, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN, true); + linkfe->setHint("", LOCALE_MENU_HINT_SCAN_FELINK); setupMenu->addItem(linkfe); } /* diseqc type select */ @@ -713,6 +714,13 @@ int CScanSetup::showFrontendSetup(int number) ojDiseqcRepeats->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCREPEAT); setupMenu->addItem(ojDiseqcRepeats); + /* diseqc cmd order select */ + dorder = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC_ORDER, (int *)&fe_config.diseqc_order, DISEQC_ORDER_OPTIONS, DISEQC_ORDER_OPTION_COUNT, + allow_moptions && (dmode == DISEQC_ADVANCED), + this, CRCInput::convertDigitToKey(shortcut++), "", true); + dorder->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCORDER); + setupMenu->addItem(dorder); + CMenuWidget * satToSelect = new CMenuWidget(LOCALE_SATSETUP_SELECT_SAT, NEUTRINO_ICON_SETTINGS, width); satToSelect->addIntroItems(); @@ -1378,7 +1386,8 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* #endif uniSetup->setActive(dmode == DISEQC_UNICABLE); bool enable = (dmode < DISEQC_ADVANCED) && (dmode != NO_DISEQC); - ojDiseqcRepeats->setActive(enable); + ojDiseqcRepeats->setActive(enable && !CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); + dorder->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED && dmode == DISEQC_ADVANCED); } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_FE_MODE)) { @@ -1404,12 +1413,14 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* if (fe && fe->getType() == FE_QPSK) { if (linkfe) linkfe->setActive(CFrontend::linked(femode)); + /* leave diseqc type enabled for TWIN in case user need different unicable setup */ dtype->setActive(femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); uniSetup->setActive(dmode == DISEQC_UNICABLE && femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); + dorder->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED && dmode == DISEQC_ADVANCED); fsatSelect->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); fsatSetup->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); bool enable = (dmode < DISEQC_ADVANCED) && (dmode != NO_DISEQC); - ojDiseqcRepeats->setActive(!CFrontend::linked(femode) && enable); + ojDiseqcRepeats->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED && enable); /* if mode changed, set current master too */ if (femaster >= 0) From 9fc68699619c41a484c7958b84481add1d102d81 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 24 Jan 2013 13:47:49 +0400 Subject: [PATCH 106/442] gui/scan_setup.h: add diseqc order chooser --- src/gui/scan_setup.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/scan_setup.h b/src/gui/scan_setup.h index 3d477eb04..7ef59fe33 100644 --- a/src/gui/scan_setup.h +++ b/src/gui/scan_setup.h @@ -60,6 +60,7 @@ class CScanSetup : public CMenuTarget, public CChangeObserver CMenuForwarder *fsatSetup; CMenuForwarder *fsatSelect; CMenuOptionChooser * dtype; + CMenuOptionChooser * dorder; CMenuForwarder *uniSetup; CMenuOptionNumberChooser * ojDiseqcRepeats; CIntInput * nid; From 8dfa22692077c307d7cf7e422e1d9afc24fd7ab5 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Fri, 25 Jan 2013 10:33:40 +0800 Subject: [PATCH 107/442] neutrino: fix file locations. use the predetermined CONFIGDIR instead of hardcoding paths. --- src/driver/framebuffer.cpp | 2 +- src/eitd/SIlanguage.cpp | 2 +- src/eitd/edvbstring.cpp | 2 +- src/eitd/sectionsd.cpp | 4 ++-- src/eitd/xmlutil.cpp | 4 ++-- src/gui/keybind_setup.cpp | 2 +- src/gui/osdlang_setup.cpp | 2 +- src/gui/settings_manager.cpp | 2 +- src/gui/start_wizard.cpp | 2 +- src/nhttpd/tuxboxapi/coolstream/controlapi.cpp | 4 ++-- src/nhttpd/tuxboxapi/dbox/controlapi.cpp | 4 ++-- src/system/localize.cpp | 2 +- 12 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index 253d335d1..f989516be 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -1569,7 +1569,7 @@ void CFrameBuffer::Clear() //never used void CFrameBuffer::showFrame(const std::string & filename) { - std::string varpath = "/var/tuxbox/config/neutrino/icons/"; + std::string varpath = CONFIGDIR "/neutrino/icons/"; if(!access((varpath + filename).c_str(), F_OK)) videoDecoder->ShowPicture((varpath + filename).c_str()); else diff --git a/src/eitd/SIlanguage.cpp b/src/eitd/SIlanguage.cpp index e6ec07ae8..44db9a74d 100644 --- a/src/eitd/SIlanguage.cpp +++ b/src/eitd/SIlanguage.cpp @@ -32,7 +32,7 @@ #include "SIlanguage.hpp" -#define LANGUAGEFILE "/var/tuxbox/config/epglanguages.conf" +#define LANGUAGEFILE CONFIGDIR "/epglanguages.conf" std::vector SIlanguage::languages; pthread_mutex_t SIlanguage::languages_lock = PTHREAD_MUTEX_INITIALIZER; diff --git a/src/eitd/edvbstring.cpp b/src/eitd/edvbstring.cpp index 24882425e..010c3eaa3 100644 --- a/src/eitd/edvbstring.cpp +++ b/src/eitd/edvbstring.cpp @@ -17,7 +17,7 @@ std::set TransponderUseTwoCharMapping; int readEncodingFile() { - FILE *f = fopen("/var/tuxbox/config/encoding.conf", "rt"); + FILE *f = fopen(CONFIGDIR "/encoding.conf", "rt"); if (f) { CountryCodeDefaultMapping.clear(); TransponderDefaultMapping.clear(); diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 137cbf1e1..8ff854ed4 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -92,7 +92,7 @@ static bool messaging_zap_detected = false; /*static*/ bool dvb_time_update = false; //NTP-Config -#define CONF_FILE "/var/tuxbox/config/neutrino.conf" +#define CONF_FILE CONFIGDIR "/neutrino.conf" #ifdef USE_BB_NTPD const std::string ntp_system_cmd_prefix = "/sbin/ntpd -q -p "; @@ -1629,7 +1629,7 @@ void CEitThread::beforeSleep() messaging_zap_detected = false; unlockMessaging(); if(notify_complete) - system("/var/tuxbox/config/epgdone.sh"); + system(CONFIGDIR "/epgdone.sh"); } /********************************************************************************/ diff --git a/src/eitd/xmlutil.cpp b/src/eitd/xmlutil.cpp index b700011f3..424dc38ed 100644 --- a/src/eitd/xmlutil.cpp +++ b/src/eitd/xmlutil.cpp @@ -47,8 +47,8 @@ extern bool reader_ready; extern pthread_rwlock_t eventsLock; extern bool dvb_time_update; -std::string epg_filter_dir = "/var/tuxbox/config/zapit/epgfilter.xml"; -std::string dvbtime_filter_dir = "/var/tuxbox/config/zapit/dvbtimefilter.xml"; +std::string epg_filter_dir = CONFIGDIR "/zapit/epgfilter.xml"; +std::string dvbtime_filter_dir = CONFIGDIR "/zapit/dvbtimefilter.xml"; bool epg_filter_is_whitelist = false; bool epg_filter_except_current_next = false; diff --git a/src/gui/keybind_setup.cpp b/src/gui/keybind_setup.cpp index 478602188..376452cb2 100644 --- a/src/gui/keybind_setup.cpp +++ b/src/gui/keybind_setup.cpp @@ -91,7 +91,7 @@ int CKeybindSetup::exec(CMenuTarget* parent, const std::string &actionKey) CFileFilter fileFilter; fileFilter.addFilter("conf"); fileBrowser.Filter = &fileFilter; - if (fileBrowser.exec("/var/tuxbox/config") == true) { + if (fileBrowser.exec(CONFIGDIR "") == true) { CNeutrinoApp::getInstance()->loadKeys(fileBrowser.getSelectedFile()->Name.c_str()); printf("[neutrino keybind_setup] new keys: %s\n", fileBrowser.getSelectedFile()->Name.c_str()); } diff --git a/src/gui/osdlang_setup.cpp b/src/gui/osdlang_setup.cpp index 7aec3d37d..0266b79dc 100644 --- a/src/gui/osdlang_setup.cpp +++ b/src/gui/osdlang_setup.cpp @@ -163,7 +163,7 @@ void COsdLangSetup::showLanguageSetup(CMenuWidget *osdl_setup) struct dirent **namelist; int n; // printf("scanning locale dir now....(perhaps)\n"); - char *pfad[] = {(char *) DATADIR "/neutrino/locale",(char *) "/var/tuxbox/config/locale"}; + char *pfad[] = {(char *) DATADIR "/neutrino/locale",(char *) CONFIGDIR "/locale"}; osdl_setup->addIntroItems(); diff --git a/src/gui/settings_manager.cpp b/src/gui/settings_manager.cpp index 9bb4f3c60..c001f18a0 100644 --- a/src/gui/settings_manager.cpp +++ b/src/gui/settings_manager.cpp @@ -71,7 +71,7 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) { fileFilter.addFilter("conf"); fileBrowser.Filter = &fileFilter; - if (fileBrowser.exec("/var/tuxbox/config") == true) + if (fileBrowser.exec(CONFIGDIR "") == true) { CNeutrinoApp::getInstance()->loadSetup(fileBrowser.getSelectedFile()->Name.c_str()); CColorSetupNotifier *colorSetupNotifier = new CColorSetupNotifier; diff --git a/src/gui/start_wizard.cpp b/src/gui/start_wizard.cpp index 25b21e0c3..bd78c0a6d 100644 --- a/src/gui/start_wizard.cpp +++ b/src/gui/start_wizard.cpp @@ -101,7 +101,7 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/) } bool init_settings = false; if (CFEManager::getInstance()->haveSat()) - init_settings = file_exists("/var/tuxbox/config/initial/"); + init_settings = file_exists(CONFIGDIR "/initial/"); if(init_settings && (res != menu_return::RETURN_EXIT_ALL)) { diff --git a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp index f212fab5f..c416e4cfc 100644 --- a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp @@ -514,14 +514,14 @@ void CControlAPI::GetTimeCGI(CyhookHandler *hh) // send services.xml void CControlAPI::GetServicesxmlCGI(CyhookHandler *hh) { - hh->SendFile("/var/tuxbox/config/zapit/services.xml"); + hh->SendFile(CONFIGDIR "/zapit/services.xml"); } //----------------------------------------------------------------------------- // send bouquets.xml void CControlAPI::GetBouquetsxmlCGI(CyhookHandler *hh) { - hh->SendFile("/var/tuxbox/config/zapit/bouquets.xml"); + hh->SendFile(CONFIGDIR "/zapit/bouquets.xml"); } //----------------------------------------------------------------------------- diff --git a/src/nhttpd/tuxboxapi/dbox/controlapi.cpp b/src/nhttpd/tuxboxapi/dbox/controlapi.cpp index 9b39fbce9..af2dd1b62 100644 --- a/src/nhttpd/tuxboxapi/dbox/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/dbox/controlapi.cpp @@ -524,14 +524,14 @@ void CControlAPI::SettingsCGI(CyhookHandler *hh) // send services.xml void CControlAPI::GetServicesxmlCGI(CyhookHandler *hh) { - hh->SendFile("/var/tuxbox/config/zapit/services.xml"); + hh->SendFile(CONFIGDIR "/zapit/services.xml"); } //----------------------------------------------------------------------------- // send bouquets.xml void CControlAPI::GetBouquetsxmlCGI(CyhookHandler *hh) { - hh->SendFile("/var/tuxbox/config/zapit/bouquets.xml"); + hh->SendFile(CONFIGDIR "/zapit/bouquets.xml"); } //----------------------------------------------------------------------------- diff --git a/src/system/localize.cpp b/src/system/localize.cpp index bed4a433a..21558ad7f 100644 --- a/src/system/localize.cpp +++ b/src/system/localize.cpp @@ -111,7 +111,7 @@ CLocaleManager::~CLocaleManager() delete[] defaultData; } -const char * path[2] = {"/var/tuxbox/config/locale/", DATADIR "/neutrino/locale/"}; +const char * path[2] = {CONFIGDIR "/locale/", DATADIR "/neutrino/locale/"}; CLocaleManager::loadLocale_ret_t CLocaleManager::loadLocale(const char * const locale, bool asdefault) { From 75cc4b4c9ec418de6b61d748ce18ffd93bda7c37 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 28 Jan 2013 11:48:38 +0400 Subject: [PATCH 108/442] zapit/include/zapit/channel.h: add NOT_FOUND flag to mark channels not present in services.xml --- src/zapit/include/zapit/channel.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/zapit/include/zapit/channel.h b/src/zapit/include/zapit/channel.h index 60d37f965..fd7a70b01 100644 --- a/src/zapit/include/zapit/channel.h +++ b/src/zapit/include/zapit/channel.h @@ -168,7 +168,10 @@ class CZapitChannel typedef enum channel_flags { NEW = 0x01, REMOVED = 0x02, - UPDATED = 0x04 + UPDATED = 0x04, + NOT_FOUND = 0x08, + PRESENT = 0x05, // NEW + UPDATED + ANY = 0xFF } channel_flags_t; casys_map_t camap; From 189635fd6f1905a08bac9763649220465650cc4e Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 28 Jan 2013 11:49:39 +0400 Subject: [PATCH 109/442] zapit/src/fastscan.cpp: set channels flags to UPDATED --- src/zapit/src/fastscan.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/zapit/src/fastscan.cpp b/src/zapit/src/fastscan.cpp index 81247df2f..83a8f33a6 100644 --- a/src/zapit/src/fastscan.cpp +++ b/src/zapit/src/fastscan.cpp @@ -321,6 +321,8 @@ bool CServiceScan::ParseFst(unsigned short pid, fast_scan_operator_t * op) newchannel->deltype = FE_QPSK; CServiceManager::getInstance()->AddChannel(newchannel); } + // FIXME detect new/removed + newchannel->flags = CZapitChannel::UPDATED; newchannel->setName(serviceName); newchannel->setServiceType(service_type); newchannel->setVideoPid(video_pid); From c7ef67ac847b63ef5869ce368aaf507ca865bd85 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 28 Jan 2013 11:50:41 +0400 Subject: [PATCH 110/442] data/locale/english.locale: change bouquets mode 'erase all' to 'erase old' --- data/locale/english.locale | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/locale/english.locale b/data/locale/english.locale index f7f82782d..bdb0032f3 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1593,7 +1593,7 @@ scants.actcable Cable: scants.actsatellite Satellite: scants.bouquet Bouquet scants.bouquet_create create new -scants.bouquet_erase erase all +scants.bouquet_erase erase old scants.bouquet_leave leave current scants.bouquet_satellite Satellite-Bouquet scants.bouquet_update update From c8414974faa6c546747ad055157a5dea0249f4f0 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 28 Jan 2013 11:56:54 +0400 Subject: [PATCH 111/442] zapit/src/scansdt.cpp: set existing channel's flags to UPDATED --- src/zapit/src/scansdt.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/zapit/src/scansdt.cpp b/src/zapit/src/scansdt.cpp index 27d73f293..7ddad463b 100644 --- a/src/zapit/src/scansdt.cpp +++ b/src/zapit/src/scansdt.cpp @@ -321,14 +321,12 @@ bool CSdt::ParseServiceDescriptor(ServiceDescription * service, ServiceDescripto if (channel) { channel->setName(serviceName); channel->setServiceType(real_type); - channel->flags &= ~CZapitChannel::REMOVED; - channel->flags |= CZapitChannel::UPDATED; + channel->flags = CZapitChannel::UPDATED; } else { channel = new CZapitChannel(serviceName, channel_id, real_type, satellitePosition, freq_id); - channel->deltype = cable ? FE_QAM : FE_QPSK; - CServiceManager::getInstance()->AddChannel(channel); + channel->deltype = cable ? FE_QAM : FE_QPSK; /* mark channel as new, if this satellite already have channels */ if (CServiceScan::getInstance()->SatHaveChannels()) channel->flags = CZapitChannel::NEW; From a4005bc75c6c5a07ed484a1f906e5b2760157ae0 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 28 Jan 2013 12:03:03 +0400 Subject: [PATCH 112/442] zapit/src/bouquets.cpp: dont clear user-bouquets in 'erase' mode; add helpers to get filtered channel lists; add channels not present in services.xml with NOT_FOUND flag --- src/zapit/include/zapit/bouquets.h | 4 ++- src/zapit/src/bouquets.cpp | 44 ++++++++++++++++++++++++++---- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/zapit/include/zapit/bouquets.h b/src/zapit/include/zapit/bouquets.h index 5b8e7f971..c9eeb272e 100644 --- a/src/zapit/include/zapit/bouquets.h +++ b/src/zapit/include/zapit/bouquets.h @@ -57,6 +57,8 @@ class CZapitBouquet CZapitChannel* getChannelByChannelID(const t_channel_id channel_id, const unsigned char serviceType = ST_RESERVED); void sortBouquet(void); void sortBouquetByNumber(void); + bool getTvChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); + bool getRadioChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); }; typedef vector BouquetList; @@ -115,7 +117,7 @@ class CBouquetManager void moveBouquet(const unsigned int oldId, const unsigned int newId); bool existsChannelInBouquet(unsigned int bq_id, const t_channel_id channel_id); - void clearAll(); + void clearAll(bool user = true); void sortBouquets(void); }; diff --git a/src/zapit/src/bouquets.cpp b/src/zapit/src/bouquets.cpp index 8a74c0a8f..9f46b7858 100644 --- a/src/zapit/src/bouquets.cpp +++ b/src/zapit/src/bouquets.cpp @@ -157,6 +157,26 @@ void CZapitBouquet::moveService(const unsigned int oldPosition, const unsigned i } } +bool CZapitBouquet::getTvChannels(ZapitChannelList &list, int flags) +{ + list.clear(); + for (ZapitChannelList::iterator it = tvChannels.begin(); it != tvChannels.end(); ++it) { + if ((*it)->flags & flags) + list.push_back(*it); + } + return (!list.empty()); +} + +bool CZapitBouquet::getRadioChannels(ZapitChannelList &list, int flags) +{ + list.clear(); + for (ZapitChannelList::iterator it = tvChannels.begin(); it != tvChannels.end(); ++it) { + if ((*it)->flags & flags) + list.push_back(*it); + } + return (!list.empty()); +} + #if 0 size_t CZapitBouquet::recModeRadioSize(const transponder_id_t transponder_id) { @@ -262,7 +282,7 @@ void CBouquetManager::saveBouquets(const CZapitClient::bouquetMode bouquetMode, if (bouquetMode == CZapitClient::BM_DELETEBOUQUETS) { INFO("removing existing bouquets"); //unlink(BOUQUETS_XML); - g_bouquetManager->clearAll(); + g_bouquetManager->clearAll(false); } if (bouquetMode == CZapitClient::BM_DONTTOUCHBOUQUETS) return; @@ -279,7 +299,7 @@ void CBouquetManager::saveBouquets(const CZapitClient::bouquetMode bouquetMode, Bouquets[0]->Name = providerName; } - if ((bouquetMode == CZapitClient::BM_UPDATEBOUQUETS) || (bouquetMode == CZapitClient::BM_CREATESATELLITEBOUQUET)) { + if ((bouquetMode == CZapitClient::BM_UPDATEBOUQUETS) || (bouquetMode == CZapitClient::BM_DELETEBOUQUETS)) { while (!(Bouquets.empty())) { CZapitBouquet* bouquet; int dest = g_bouquetManager->existsBouquet(Bouquets[0]->Name.c_str()); @@ -378,6 +398,13 @@ void CBouquetManager::parseBouquetsXml(const char *fname, bool bUser) chan->bAlwaysLocked = newBouquet->bLocked; newBouquet->addService(chan); + } else if (bUser) { + chan = new CZapitChannel(name2, CREATE_CHANNEL_ID64, 1 /*service_type*/, + satellitePosition, freq); + CServiceManager::getInstance()->AddChannel(chan); + chan->flags = CZapitChannel::NOT_FOUND; + chan->bAlwaysLocked = newBouquet->bLocked; + newBouquet->addService(chan); } channel_node = channel_node->xmlNextNode; @@ -616,12 +643,19 @@ void CBouquetManager::moveBouquet(const unsigned int oldId, const unsigned int n } } -void CBouquetManager::clearAll() +void CBouquetManager::clearAll(bool user) { - for (unsigned int i =0; i < Bouquets.size(); i++) - delete Bouquets[i]; + BouquetList tmplist; + for (unsigned int i =0; i < Bouquets.size(); i++) { + if (!user || !Bouquets[i]->bFav) + delete Bouquets[i]; + else + tmplist.push_back(Bouquets[i]); + } Bouquets.clear(); + if (!user) + Bouquets = tmplist; remainChannels = NULL; } From 776377089cc6fc1548e70b955e210cf967a8c215 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 28 Jan 2013 12:06:41 +0400 Subject: [PATCH 113/442] zapit/src/getservices.cpp: add flags filter to all get channels functions, change default filter flags to PRESENT (new+updated), dont save channels with NOT_FOUND flag --- src/zapit/include/zapit/getservices.h | 12 ++++---- src/zapit/src/getservices.cpp | 41 +++++++++++++++------------ 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/zapit/include/zapit/getservices.h b/src/zapit/include/zapit/getservices.h index c8bce6951..975da4388 100644 --- a/src/zapit/include/zapit/getservices.h +++ b/src/zapit/include/zapit/getservices.h @@ -135,12 +135,12 @@ class CServiceManager std::string GetServiceName(t_channel_id channel_id); tallchans* GetAllChannels(){ return &allchans; }; - bool GetAllRadioChannels(ZapitChannelList &list, int flags = 0); - bool GetAllTvChannels(ZapitChannelList &list, int flags = 0); - bool GetAllHDChannels(ZapitChannelList &list); - bool GetAllSatelliteChannels(ZapitChannelList &list, t_satellite_position position); - bool GetAllTransponderChannels(ZapitChannelList &list, transponder_id_t tpid); - bool GetAllUnusedChannels(ZapitChannelList &list); + bool GetAllRadioChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); + bool GetAllTvChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); + bool GetAllHDChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); + bool GetAllSatelliteChannels(ZapitChannelList &list, t_satellite_position position, int flags = CZapitChannel::PRESENT); + bool GetAllTransponderChannels(ZapitChannelList &list, transponder_id_t tpid, int flags = CZapitChannel::PRESENT); + bool GetAllUnusedChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); bool IsChannelTVChannel(const t_channel_id channel_id); diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index d58852c58..2bde7fd7c 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -225,7 +225,7 @@ bool CServiceManager::GetAllRadioChannels(ZapitChannelList &list, int flags) list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { if (it->second.getServiceType() == ST_DIGITAL_RADIO_SOUND_SERVICE && - ((flags == 0) || (it->second.flags & flags))) + (it->second.flags & flags)) list.push_back(&(it->second)); } return (!list.empty()); @@ -236,47 +236,47 @@ bool CServiceManager::GetAllTvChannels(ZapitChannelList &list, int flags) list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { if (it->second.getServiceType() != ST_DIGITAL_RADIO_SOUND_SERVICE && - ((flags == 0) || (it->second.flags & flags))) + (it->second.flags & flags)) list.push_back(&(it->second)); } return (!list.empty()); } -bool CServiceManager::GetAllHDChannels(ZapitChannelList &list) +bool CServiceManager::GetAllHDChannels(ZapitChannelList &list, int flags) { list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { - if (it->second.isHD()) + if ((it->second.flags & flags) && it->second.isHD()) list.push_back(&(it->second)); } return (!list.empty()); } -bool CServiceManager::GetAllUnusedChannels(ZapitChannelList &list) +bool CServiceManager::GetAllUnusedChannels(ZapitChannelList &list, int flags) { list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { - if (it->second.has_bouquet == false) + if ((it->second.flags & flags) && it->second.has_bouquet == false) list.push_back(&(it->second)); } return (!list.empty()); } -bool CServiceManager::GetAllSatelliteChannels(ZapitChannelList &list, t_satellite_position position) +bool CServiceManager::GetAllSatelliteChannels(ZapitChannelList &list, t_satellite_position position, int flags) { list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { - if(it->second.getSatellitePosition() == position) + if((it->second.flags & flags) && it->second.getSatellitePosition() == position) list.push_back(&(it->second)); } return (!list.empty()); } -bool CServiceManager::GetAllTransponderChannels(ZapitChannelList &list, transponder_id_t tpid) +bool CServiceManager::GetAllTransponderChannels(ZapitChannelList &list, transponder_id_t tpid, int flags) { list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { - if(it->second.getTransponderId() == tpid) + if((it->second.flags & flags) && it->second.getTransponderId() == tpid) list.push_back(&(it->second)); } return (!list.empty()); @@ -368,6 +368,9 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id uint16_t scrambled = xmlGetNumericAttribute(node, "s", 16); int number = xmlGetNumericAttribute(node, "num", 10); int flags = xmlGetNumericAttribute(node, "f", 10); + /* default if no flags present */ + if (flags == 0) + flags = CZapitChannel::UPDATED; t_channel_id chid = CREATE_CHANNEL_ID64; char *ptr = xmlGetAttribute(node, "action"); @@ -789,6 +792,8 @@ void CServiceManager::SaveServices(bool tocopy, bool if_changed) continue; } for (channel_map_iterator_t ccI = allchans.begin(); ccI != allchans.end(); ++ccI) { + if(ccI->second.flags & CZapitChannel::NOT_FOUND) + continue; if(ccI->second.getTransponderId() == tI->first) { if(!satdone) { WriteSatHeader(fd, spos_it->second); @@ -848,16 +853,16 @@ bool CServiceManager::CopyCurrentServices(transponder_id_t tpid) aI = allchans.find(cI->second.getChannelID()); if(aI == allchans.end()) { channel_insert_res_t ret = allchans.insert(channel_pair_t (cI->second.getChannelID(), cI->second)); - ret.first->second.flags |= CZapitChannel::NEW; + ret.first->second.flags = CZapitChannel::NEW; updated = true; -printf("CServiceManager::CopyCurrentServices: [%s] add\n", cI->second.getName().c_str()); + printf("CServiceManager::CopyCurrentServices: [%s] add\n", cI->second.getName().c_str()); } else { if(cI->second.scrambled != aI->second.scrambled || cI->second.getName() != aI->second.getName()) { aI->second.setName(cI->second.getName()); aI->second.scrambled = cI->second.scrambled; - aI->second.flags |= CZapitChannel::UPDATED; + aI->second.flags = CZapitChannel::UPDATED; updated = true; -printf("CServiceManager::CopyCurrentServices: [%s] replace\n", cI->second.getName().c_str()); + printf("CServiceManager::CopyCurrentServices: [%s] replace\n", cI->second.getName().c_str()); } } } @@ -865,12 +870,12 @@ printf("CServiceManager::CopyCurrentServices: [%s] replace\n", cI->second.getNam if(aI->second.getTransponderId() == tpid) { channel_map_iterator_t dI = curchans.find(aI->second.getChannelID()); if(dI == curchans.end()) { - aI->second.flags |= CZapitChannel::REMOVED; + aI->second.flags = CZapitChannel::REMOVED; updated = true; -printf("CServiceManager::CopyCurrentServices: [%s] remove\n", aI->second.getName().c_str()); + printf("CServiceManager::CopyCurrentServices: [%s] remove\n", aI->second.getName().c_str()); } else if(aI->second.flags & CZapitChannel::REMOVED) { -printf("CServiceManager::CopyCurrentServices: [%s] restore\n", aI->second.getName().c_str()); - aI->second.flags = 0; + printf("CServiceManager::CopyCurrentServices: [%s] restore\n", aI->second.getName().c_str()); + aI->second.flags = CZapitChannel::UPDATED; updated = true; } } From ea8c9c235635ea6d426faee8d26832bc9e5b1065 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 28 Jan 2013 13:58:45 +0400 Subject: [PATCH 114/442] zapit/src/scansdt.cpp: add missed channel flags - they should not be 0 --- src/zapit/src/scansdt.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zapit/src/scansdt.cpp b/src/zapit/src/scansdt.cpp index 7ddad463b..cfd7939f0 100644 --- a/src/zapit/src/scansdt.cpp +++ b/src/zapit/src/scansdt.cpp @@ -327,6 +327,7 @@ bool CSdt::ParseServiceDescriptor(ServiceDescription * service, ServiceDescripto real_type, satellitePosition, freq_id); CServiceManager::getInstance()->AddChannel(channel); channel->deltype = cable ? FE_QAM : FE_QPSK; + channel->flags = CZapitChannel::UPDATED; /* mark channel as new, if this satellite already have channels */ if (CServiceScan::getInstance()->SatHaveChannels()) channel->flags = CZapitChannel::NEW; From d591e903955f1f5341a16c5b14db570caa3daa53 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 28 Jan 2013 14:44:45 +0400 Subject: [PATCH 115/442] neutrino.cpp: get bouquets with filtering; move HD bouquet to 'all' to use sorting on it --- src/neutrino.cpp | 102 +++++++++++++++++------------------------------ 1 file changed, 37 insertions(+), 65 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 76e48e7ab..760c46546 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -1156,7 +1156,6 @@ extern CBouquetManager *g_bouquetManager; void CNeutrinoApp::channelsInit(bool bOnly) { - int bnum; CBouquet* tmp; printf("[neutrino] Creating channels lists...\n"); @@ -1173,7 +1172,6 @@ void CNeutrinoApp::channelsInit(bool bOnly) if(g_bouquetManager->existsUBouquet(fav_bouquetname, true) == -1) g_bouquetManager->addBouquet(fav_bouquetname, true, true); - if(TVbouquetList) delete TVbouquetList; if(RADIObouquetList) delete RADIObouquetList; @@ -1222,15 +1220,11 @@ void CNeutrinoApp::channelsInit(bool bOnly) tmp = TVallList->addBouquet(g_Locale->getText(LOCALE_CHANNELLIST_HEAD)); delete tmp->channelList; tmp->channelList = new CChannelList(*TVchannelList); - //tmp->channelList->SortAlpha(); RADIOallList = new CBouquetList(g_Locale->getText(LOCALE_CHANNELLIST_HEAD)); tmp = RADIOallList->addBouquet(g_Locale->getText(LOCALE_CHANNELLIST_HEAD)); delete tmp->channelList; tmp->channelList = new CChannelList(*RADIOchannelList); - //tmp->channelList->SortAlpha(); - - TIMER_STOP("[neutrino] sort took"); if(TVsatList) delete TVsatList; TVsatList = new CBouquetList(g_Locale->getText(LOCALE_CHANNELLIST_SATS)); @@ -1241,8 +1235,7 @@ void CNeutrinoApp::channelsInit(bool bOnly) sat_iterator_t sit; satellite_map_t satlist = CServiceManager::getInstance()->SatelliteList(); for(sit = satlist.begin(); sit != satlist.end(); sit++) { - CServiceManager::getInstance()->GetAllSatelliteChannels(zapitList, sit->first); - if( zapitList.empty() ) + if (!CServiceManager::getInstance()->GetAllSatelliteChannels(zapitList, sit->first)) continue; tvi = 0, ri = 0; @@ -1264,36 +1257,42 @@ void CNeutrinoApp::channelsInit(bool bOnly) TVsatList->deleteBouquet(tmp1); if(!ri) RADIOsatList->deleteBouquet(tmp2); - + TIMER_STOP("[neutrino] sat took"); } + /* all HD channels */ + if (g_settings.make_hd_list) { + if (CServiceManager::getInstance()->GetAllHDChannels(zapitList)) { + CBouquet* hdBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_HDTV), false, true); + hdBouquet->channelList->SetChannelList(&zapitList); + TVallList->Bouquets.push_back(hdBouquet); + printf("[neutrino] got %d HD channels\n", zapitList.size()); fflush(stdout); + } + } /* new channels */ if (g_settings.make_new_list) { - CServiceManager::getInstance()->GetAllTvChannels(zapitList, CZapitChannel::NEW); - if (!zapitList.empty()) { + if (CServiceManager::getInstance()->GetAllTvChannels(zapitList, CZapitChannel::NEW)) { CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_NEW), false, true); newBouquet->channelList->SetChannelList(&zapitList); TVallList->Bouquets.push_back(newBouquet); printf("[neutrino] got %d new TV channels\n", zapitList.size()); fflush(stdout); } - CServiceManager::getInstance()->GetAllRadioChannels(zapitList, CZapitChannel::NEW); - if (!zapitList.empty()) { + if (CServiceManager::getInstance()->GetAllRadioChannels(zapitList, CZapitChannel::NEW)) { CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_NEW), false, true); newBouquet->channelList->SetChannelList(&zapitList); RADIOallList->Bouquets.push_back(newBouquet); printf("[neutrino] got %d new RADIO channels\n", zapitList.size()); fflush(stdout); } } + /* removed channels */ if (g_settings.make_removed_list) { - CServiceManager::getInstance()->GetAllTvChannels(zapitList, CZapitChannel::REMOVED); - if (!zapitList.empty()) { + if (CServiceManager::getInstance()->GetAllTvChannels(zapitList, CZapitChannel::REMOVED)) { CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_REMOVED), false, true); newBouquet->channelList->SetChannelList(&zapitList); TVallList->Bouquets.push_back(newBouquet); printf("[neutrino] got %d removed TV channels\n", zapitList.size()); fflush(stdout); } - CServiceManager::getInstance()->GetAllRadioChannels(zapitList, CZapitChannel::REMOVED); - if (!zapitList.empty()) { + if (CServiceManager::getInstance()->GetAllRadioChannels(zapitList, CZapitChannel::REMOVED)) { CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_REMOVED), false, true); newBouquet->channelList->SetChannelList(&zapitList); RADIOallList->Bouquets.push_back(newBouquet); @@ -1303,63 +1302,36 @@ void CNeutrinoApp::channelsInit(bool bOnly) TIMER_STOP("[neutrino] sats took"); } - /* Favorites and providers TV bouquets */ - bnum = 0; + /* Favorites and providers bouquets */ + tvi = ri = 0; for (i = 0; i < g_bouquetManager->Bouquets.size(); i++) { - if (!g_bouquetManager->Bouquets[i]->bHidden && !g_bouquetManager->Bouquets[i]->tvChannels.empty()) - { - if(g_bouquetManager->Bouquets[i]->bUser) - tmp = TVfavList->addBouquet(g_bouquetManager->Bouquets[i]); - else - tmp = TVbouquetList->addBouquet(g_bouquetManager->Bouquets[i]); + if (!g_bouquetManager->Bouquets[i]->bHidden) { + if (g_bouquetManager->Bouquets[i]->getTvChannels(zapitList)) { + if(g_bouquetManager->Bouquets[i]->bUser) + tmp = TVfavList->addBouquet(g_bouquetManager->Bouquets[i]); + else + tmp = TVbouquetList->addBouquet(g_bouquetManager->Bouquets[i]); - ZapitChannelList* channels = &(g_bouquetManager->Bouquets[i]->tvChannels); - tmp->channelList->SetChannelList(channels); - bnum++; + tmp->channelList->SetChannelList(&zapitList); + tvi++; + } + if (g_bouquetManager->Bouquets[i]->getRadioChannels(zapitList)) { + if(g_bouquetManager->Bouquets[i]->bUser) + tmp = RADIOfavList->addBouquet(g_bouquetManager->Bouquets[i]); + else + tmp = RADIObouquetList->addBouquet(g_bouquetManager->Bouquets[i]); + + tmp->channelList->SetChannelList(&zapitList); + ri++; + } } } - printf("[neutrino] got %d TV bouquets\n", bnum); fflush(stdout); - - /* all HD channels */ - if (g_settings.make_hd_list) { - CServiceManager::getInstance()->GetAllHDChannels(zapitList); - if (!zapitList.empty()) { - CBouquet* hdBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_HDTV), false, true); - hdBouquet->channelList->SetChannelList(&zapitList); - hdBouquet->channelList->SortSat(); - TVfavList->Bouquets.push_back(hdBouquet); - printf("[neutrino] got %d HD channels\n", zapitList.size()); fflush(stdout); - } - } - TIMER_STOP("[neutrino] tv took"); - - /* Favorites and provides RADIO bouquets */ - bnum = 0; - for (i = 0; i < g_bouquetManager->Bouquets.size(); i++) { - if (!g_bouquetManager->Bouquets[i]->bHidden && !g_bouquetManager->Bouquets[i]->radioChannels.empty() ) - { - if(g_bouquetManager->Bouquets[i]->bUser) - tmp = RADIOfavList->addBouquet(g_bouquetManager->Bouquets[i]); - else - tmp = RADIObouquetList->addBouquet(g_bouquetManager->Bouquets[i]); - - ZapitChannelList* channels = &(g_bouquetManager->Bouquets[i]->radioChannels); - tmp->channelList->SetChannelList(channels); - bnum++; - } - } - printf("[neutrino] got %d RADIO bouquets\n", bnum); fflush(stdout); + printf("[neutrino] got %d TV and %d RADIO bouquets\n", tvi, ri); fflush(stdout); TIMER_STOP("[neutrino] took"); SetChannelMode(lastChannelMode); dprintf(DEBUG_DEBUG, "\nAll bouquets-channels received\n"); -#ifdef DEBUG - struct mallinfo myinfo = mallinfo(); - printf("[neutrino] total memory allocated by malloc, in bytes: %d (%dkb), chunks %d\n", - myinfo.arena, myinfo.arena / 1024, myinfo.uordblks); -#endif - reloadhintBox->hide(); } From 8e8b65e9d2e1fbbbff24e0f1aa6020d065be3ac8 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 29 Jan 2013 01:06:26 +0800 Subject: [PATCH 116/442] neutrino: add predefined config for nhttpd. --- src/nhttpd/nhttpd.conf.in | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/nhttpd/nhttpd.conf.in diff --git a/src/nhttpd/nhttpd.conf.in b/src/nhttpd/nhttpd.conf.in new file mode 100644 index 000000000..978af8a1c --- /dev/null +++ b/src/nhttpd/nhttpd.conf.in @@ -0,0 +1,23 @@ +Language.directory=languages +Language.selected=Deutsch +Tuxbox.LogosURL=@TARGET_ICONSDIR@/logo +WebsiteMain.directory= @TARGET_PRIVATE_HTTPDDIR@ +WebsiteMain.override_directory=@TARGET_PUBLIC_HTTPDDIR@ +WebsiteMain.port=80 +WebsiteMain.hosted_directory=/var/hosted +configfile.version=4 +mod_auth.authenticate=false +mod_auth.no_auth_client= +mod_auth.password=coolstream +mod_auth.username=root +mod_cache.cache_directory=/tmp/.cache +mod_sendfile.mime_types=htm:text/html,html:text/html,xml:text/xml,txt:text/plain,jpg:image/jpeg,jpeg:image/jpeg,gif:image/gif,png:image/png,bmp:image/bmp,css:text/css,js:text/plain,img:application/octet-stream,ico:image/x-icon,m3u:application/octet-stream,tar:application/octet-stream,gz:text/x-gzip,ts:application/octet-stream +mod_weblog.log_format= +mod_weblog.logfile=/tmp/yhttpd.log +server.chroot= +server.group_name= +server.log.loglevel=0 +server.no_keep-alive_ips= +server.user_name= +webserver.threading=false +webserver.websites=WebsiteMain From fb81654ef2d2214610d0ec495392cca191ad1984 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 29 Jan 2013 01:10:07 +0800 Subject: [PATCH 117/442] neutrino: make default language english. --- src/nhttpd/nhttpd.conf.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nhttpd/nhttpd.conf.in b/src/nhttpd/nhttpd.conf.in index 978af8a1c..78182c8c4 100644 --- a/src/nhttpd/nhttpd.conf.in +++ b/src/nhttpd/nhttpd.conf.in @@ -1,5 +1,5 @@ Language.directory=languages -Language.selected=Deutsch +Language.selected=English Tuxbox.LogosURL=@TARGET_ICONSDIR@/logo WebsiteMain.directory= @TARGET_PRIVATE_HTTPDDIR@ WebsiteMain.override_directory=@TARGET_PUBLIC_HTTPDDIR@ From 9055caf32bc92f56d3fac9602eeff55f81b245dc Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 29 Jan 2013 01:17:23 +0800 Subject: [PATCH 118/442] neutrino: remove space from nhttpd.conf.in. --- src/nhttpd/nhttpd.conf.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nhttpd/nhttpd.conf.in b/src/nhttpd/nhttpd.conf.in index 78182c8c4..a4d74e924 100644 --- a/src/nhttpd/nhttpd.conf.in +++ b/src/nhttpd/nhttpd.conf.in @@ -1,7 +1,7 @@ Language.directory=languages Language.selected=English Tuxbox.LogosURL=@TARGET_ICONSDIR@/logo -WebsiteMain.directory= @TARGET_PRIVATE_HTTPDDIR@ +WebsiteMain.directory=@TARGET_PRIVATE_HTTPDDIR@ WebsiteMain.override_directory=@TARGET_PUBLIC_HTTPDDIR@ WebsiteMain.port=80 WebsiteMain.hosted_directory=/var/hosted From ee169288a59653fa712d683e916bfbd6ee7e2bd2 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 29 Jan 2013 01:18:38 +0800 Subject: [PATCH 119/442] neutrino: add multiple paths so they can be configured and not be hard-coded in multiple files. --- acinclude.m4 | 45 +++++++++++++++++++++++++++--------------- configure.ac | 8 ++++++++ src/nhttpd/nhttpd.conf | 23 --------------------- 3 files changed, 37 insertions(+), 39 deletions(-) delete mode 100644 src/nhttpd/nhttpd.conf diff --git a/acinclude.m4 b/acinclude.m4 index 08a8c1e41..163824de4 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -11,7 +11,7 @@ AC_ARG_WITH(target, AC_ARG_WITH(targetprefix, [ --with-targetprefix=PATH prefix relative to target root (only applicable in cdk mode)], - [targetprefix="$withval"],[targetprefix="NONE"]) + [TARGET_PREFIX="$withval"],[TARGET_PREFIX="NONE"]) AC_ARG_WITH(debug, [ --without-debug disable debugging code], @@ -21,6 +21,7 @@ if test "$DEBUG" = "yes"; then DEBUG_CFLAGS="-g3 -ggdb" AC_DEFINE(DEBUG,1,[Enable debug messages]) fi + AC_ARG_ENABLE(tmsdk, AS_HELP_STRING(--enable-tmsdk, compile inside sdk), ,[enable_tmsdk=no]) @@ -38,7 +39,7 @@ if test "$TARGET" = "native"; then if test "$prefix" = "NONE"; then prefix=/usr/local fi - targetprefix=$prefix + TARGET_PREFIX=$prefix elif test "$TARGET" = "cdk"; then AC_MSG_RESULT(cdk) @@ -50,13 +51,14 @@ elif test "$TARGET" = "cdk"; then CXXFLAGS="-Wall -Os -mcpu=823 -pipe $DEBUG_CFLAGS" fi if test "$prefix" = "NONE"; then - AC_MSG_ERROR(invalid prefix, you need to specify one in cdk mode) + AC_MSG_ERROR([invalid prefix, you need to specify one in cdk mode]) fi - if test "$targetprefix" != "NONE"; then - AC_DEFINE_UNQUOTED(TARGETPREFIX, "${targetprefix}",[The targets prefix]) + if test "$TARGET_PREFIX" != "NONE"; then + AC_DEFINE_UNQUOTED(TARGET_PREFIX, "$TARGET_PREFIX",[The targets prefix]) fi - if test "$targetprefix" = "NONE"; then - targetprefix="" + if test "$TARGET_PREFIX" = "NONE"; then + AC_MSG_ERROR([invalid targetprefix, you need to specify one in cdk mode]) + TARGET_PREFIX="" fi if test "$host_alias" = ""; then cross_compiling=yes @@ -80,7 +82,7 @@ AC_DEFUN([TUXBOX_APPS_DIRECTORY_ONE],[ AC_ARG_WITH($1,[ $6$7 [[PREFIX$4$5]]],[ _$2=$withval if test "$TARGET" = "cdk"; then - $2=`eval echo "${targetprefix}$withval"` + $2=`eval echo "$TARGET_PREFIX$withval"` else $2=$withval fi @@ -95,7 +97,6 @@ AC_ARG_WITH($1,[ $6$7 [[PREFIX$4$5]]],[ TARGET_$2=$_$2 ]) -dnl automake <= 1.6 don't support this dnl AC_SUBST($2) AC_DEFINE_UNQUOTED($2,"$_$2",$7) AC_SUBST(TARGET_$2) @@ -109,10 +110,10 @@ if test "$TARGET" = "cdk"; then sysconfdir="\${prefix}/etc" localstatedir="\${prefix}/var" libdir="\${prefix}/lib" - targetdatadir="\${targetprefix}/share" - targetsysconfdir="\${targetprefix}/etc" - targetlocalstatedir="\${targetprefix}/var" - targetlibdir="\${targetprefix}/lib" + targetdatadir="\${TARGET_PREFIX}/share" + targetsysconfdir="\${TARGET_PREFIX}/etc" + targetlocalstatedir="\${TARGET_PREFIX}/var" + targetlibdir="\${TARGET_PREFIX}/lib" fi TUXBOX_APPS_DIRECTORY_ONE(configdir,CONFIGDIR,localstatedir,/var,/tuxbox/config, @@ -136,8 +137,17 @@ TUXBOX_APPS_DIRECTORY_ONE(plugindir,PLUGINDIR,libdir,/lib,/tuxbox/plugins, TUXBOX_APPS_DIRECTORY_ONE(ucodedir,UCODEDIR,localstatedir,/var,/tuxbox/ucodes, [--with-ucodedir=PATH ],[where to find the ucodes]) -TUXBOX_APPS_DIRECTORY_ONE(themesdir,THEMESDIR,datadir,/share,/tuxbox/neutrino/themes, +TUXBOX_APPS_DIRECTORY_ONE(themesdir,THEMESDIR,datadir,/share/tuxbox, /neutrino/themes, [--with-themesdir=PATH ],[where to find the themes (don't change)]) + +TUXBOX_APPS_DIRECTORY_ONE(iconsdir,ICONSDIR,datadir,/share/tuxbox, /neutrino/icons, + [--with-iconssdir=PATH ],[where to find the icons (don't change)]) + +TUXBOX_APPS_DIRECTORY_ONE(private_httpddir,PRIVATE_HTTPDDIR,datadir,/share,/tuxbox/neutrino/httpd, + [--with-private_httpddir=PATH ],[where to find the the private httpd files]) + +TUXBOX_APPS_DIRECTORY_ONE(public_httpddir,PUBLIC_HTTPDDIR,localstatedir,/var,/httpd, + [--with-public_httpddir=PATH ],[where to find the the public httpd files]) ]) dnl automake <= 1.6 needs this specifications @@ -149,6 +159,9 @@ AC_SUBST(LIBDIR) AC_SUBST(PLUGINDIR) AC_SUBST(UCODEDIR) AC_SUBST(THEMESDIR) +AC_SUBST(ICONSDIR) +AC_SUBST(PRIVATE_HTTPDDIR) +AC_SUBST(PUBLIC_HTTPDDIR) dnl end workaround AC_DEFUN([TUXBOX_APPS_ENDIAN],[ @@ -231,8 +244,8 @@ if test "$$1_CONFIG" != "no"; then $1_CFLAGS=$($$1_CONFIG --cflags) $1_LIBS=$($$1_CONFIG --libs) else - $1_CFLAGS=$($$1_CONFIG --prefix=$targetprefix --cflags) - $1_LIBS=$($$1_CONFIG --prefix=$targetprefix --libs) + $1_CFLAGS=$($$1_CONFIG --prefix=$TARGET_PREFIX --cflags) + $1_LIBS=$($$1_CONFIG --prefix=$TARGET_PREFIX --libs) fi fi fi diff --git a/configure.ac b/configure.ac index d71a7885d..94eee787a 100644 --- a/configure.ac +++ b/configure.ac @@ -122,15 +122,22 @@ AC_ARG_ENABLE(cleanup, [ --enable-cleanup enable cleanup on exit], [AC_DEFINE(EXIT_CLEANUP,1,[enable cleanup on exit])]) +if test "$BOXTYPE" = "coolstream"; then +if test "$BOXMODEL" = "nevis"; then if test -e ${srcdir}/lib/libcoolstream/nevis_ir.h; then AC_DEFINE(HAVE_COOLSTREAM_NEVIS_IR_H,1,[Define to 1 if you have the header file.]) fi +fi + +if test "$BOXMODEL" = "apollo"; then if test -e ${srcdir}/lib/libcoolstream2/cs_ir_generic.h; then AC_DEFINE(HAVE_COOLSTREAM_CS_IR_GENERIC_H,1,[Define to 1 if you have the header file.]) fi if test -e ${srcdir}/lib/libcoolstream2/cs_frontpanel.h; then AC_DEFINE(HAVE_COOLSTREAM_CS_FRONTPANEL_H,1,[Define to 1 if you have the header file.]) fi +fi +fi # # Check for libtdservicedb - the new one - for testing only @@ -179,6 +186,7 @@ src/nhttpd/tuxboxapi/Makefile src/nhttpd/tuxboxapi/coolstream/Makefile src/nhttpd/yhttpd_core/Makefile src/nhttpd/yhttpd_mods/Makefile +src/nhttpd/nhttpd.conf src/Makefile src/daemonc/Makefile src/driver/pictureviewer/Makefile diff --git a/src/nhttpd/nhttpd.conf b/src/nhttpd/nhttpd.conf deleted file mode 100644 index de955798e..000000000 --- a/src/nhttpd/nhttpd.conf +++ /dev/null @@ -1,23 +0,0 @@ -Language.directory=languages -Language.selected=Deutsch -Tuxbox.LogosURL=/usr/share/tuxbox/neutrino/icons/logo -WebsiteMain.directory=/share/tuxbox/neutrino/httpd -WebsiteMain.override_directory=/var/httpd -WebsiteMain.port=80 -WebsiteMain.hosted_directory=/var/hosted -configfile.version=4 -mod_auth.authenticate=false -mod_auth.no_auth_client= -mod_auth.password=coolstream -mod_auth.username=root -mod_cache.cache_directory=/tmp/.cache -mod_sendfile.mime_types=htm:text/html,html:text/html,xml:text/xml,txt:text/plain,jpg:image/jpeg,jpeg:image/jpeg,gif:image/gif,png:image/png,bmp:image/bmp,css:text/css,js:text/plain,img:application/octet-stream,ico:image/x-icon,m3u:application/octet-stream,tar:application/octet-stream,gz:text/x-gzip,ts:application/octet-stream -mod_weblog.log_format= -mod_weblog.logfile=/tmp/yhhtpd.log -server.chroot= -server.group_name= -server.log.loglevel=0 -server.no_keep-alive_ips= -server.user_name= -webserver.threading=false -webserver.websites=WebsiteMain From d1046fd8a5f193275fba8a05070889df650a3cff Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 29 Jan 2013 01:20:28 +0800 Subject: [PATCH 120/442] neutrino make nhttpd depend on neutrino's config. --- src/nhttpd/Makefile.am | 5 +++++ src/nhttpd/yconfig.h | 21 ++++++++++----------- src/nhttpd/yhttpd_core/Makefile.am | 1 + src/nhttpd/yhttpd_mods/Makefile.am | 1 + 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/nhttpd/Makefile.am b/src/nhttpd/Makefile.am index c78ebbbf8..1e1ea948d 100644 --- a/src/nhttpd/Makefile.am +++ b/src/nhttpd/Makefile.am @@ -18,5 +18,10 @@ INCLUDES = \ -I$(top_srcdir)/lib/connection \ @FREETYPE_CFLAGS@ + noinst_LIBRARIES = libnhttpd.a libnhttpd_a_SOURCES = yhttpd.cpp + +libnhttpd_adir = @CONFIGDIR@ +libnhttpd_a_DATA = nhttpd.conf +EXTRA_DIST = nhttpd.conf nhttpd.conf.in \ No newline at end of file diff --git a/src/nhttpd/yconfig.h b/src/nhttpd/yconfig.h index 3912dc04c..cc6a0170e 100644 --- a/src/nhttpd/yconfig.h +++ b/src/nhttpd/yconfig.h @@ -7,6 +7,9 @@ #ifndef __yconfig_h__ #define __yconfig_h__ +#ifdef HAVE_CONFIG_H +#include +#endif // c++ #include #include @@ -101,30 +104,26 @@ #define HTTPD_DEFAULT_LANGUAGE "English" #define AUTHUSER "root" -#ifndef TARGETPREFIX -#define TARGETPREFIX "" -#endif - -#define HTTPD_CONFIGDIR TARGETPREFIX"/var/tuxbox/config" +#define HTTPD_CONFIGDIR CONFIGDIR #define HTTPD_CONFIGFILE HTTPD_CONFIGDIR"/nhttpd.conf" #define YWEB_CONFIGFILE HTTPD_CONFIGDIR"/Y-Web.conf" -#define PUBLICDOCUMENTROOT TARGETPREFIX"/var/httpd" -#define NEUTRINO_CONFIGFILE TARGETPREFIX"/var/tuxbox/config/neutrino.conf" +#define PUBLICDOCUMENTROOT PUBLIC_HTTPDDIR +#define NEUTRINO_CONFIGFILE CONFIGDIR"/neutrino.conf" #define HOSTEDDOCUMENTROOT "/mnt/hosted" #define EXTRASDOCUMENTROOT "/mnt/hosted/extras" #define EXTRASDOCUMENTURL "/hosted/extras" -#define ZAPITXMLPATH TARGETPREFIX"/var/tuxbox/config/zapit" -#define TUXBOX_LOGOS_URL TARGETPREFIX"/usr/share/neutrino/icons/logos" +#define ZAPITXMLPATH CONFIGDIR"/zapit" +#define TUXBOX_LOGOS_URL ICONSDIR"/logo" // switch for Box differences #ifdef CONFIG_SYSTEM_TUXBOX #define AUTHPASSWORD "dbox2" -#define PRIVATEDOCUMENTROOT TARGETPREFIX"/share/tuxbox/neutrino/httpd-y" +#define PRIVATEDOCUMENTROOT DATADIR"/httpd-y" #endif #ifdef CONFIG_SYSTEM_TUXBOX_COOLSTREAM #define AUTHPASSWORD "coolstream" -#define PRIVATEDOCUMENTROOT TARGETPREFIX"/share/tuxbox/neutrino/httpd" +#define PRIVATEDOCUMENTROOT PRIVATE_HTTPDDIR #undef Y_CONFIG_BUILD_AS_DAEMON // No Daemon #endif //----------------------------------------------------------------------------- diff --git a/src/nhttpd/yhttpd_core/Makefile.am b/src/nhttpd/yhttpd_core/Makefile.am index ec562ae50..cc760e315 100644 --- a/src/nhttpd/yhttpd_core/Makefile.am +++ b/src/nhttpd/yhttpd_core/Makefile.am @@ -1,5 +1,6 @@ INCLUDES = \ -I$(srcdir) \ + -I$(top_srcdir) \ -I$(top_srcdir)/lib \ -I$(top_srcdir)/src/zapit/include \ -I$(top_srcdir)/src \ diff --git a/src/nhttpd/yhttpd_mods/Makefile.am b/src/nhttpd/yhttpd_mods/Makefile.am index 74d213c4f..95f936555 100644 --- a/src/nhttpd/yhttpd_mods/Makefile.am +++ b/src/nhttpd/yhttpd_mods/Makefile.am @@ -1,4 +1,5 @@ INCLUDES = \ + -I$(top_srcdir) \ -I$(top_srcdir)/lib \ -I$(top_srcdir)/src/zapit/include \ -I$(top_srcdir)/src \ From 1babe685297b82d99da0191da02e3e13b3a8d044 Mon Sep 17 00:00:00 2001 From: "[CST] Bas" Date: Tue, 29 Jan 2013 01:20:55 +0800 Subject: [PATCH 121/442] neutrino: fix file location. --- src/eitd/SIlanguage.cpp | 6 +++++- src/eitd/SIlanguage.hpp | 2 -- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/eitd/SIlanguage.cpp b/src/eitd/SIlanguage.cpp index 44db9a74d..6cc261251 100644 --- a/src/eitd/SIlanguage.cpp +++ b/src/eitd/SIlanguage.cpp @@ -22,6 +22,10 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include #include @@ -32,7 +36,7 @@ #include "SIlanguage.hpp" -#define LANGUAGEFILE CONFIGDIR "/epglanguages.conf" +static const char LANGUAGEFILE[] = CONFIGDIR "/epglanguages.conf"; std::vector SIlanguage::languages; pthread_mutex_t SIlanguage::languages_lock = PTHREAD_MUTEX_INITIALIZER; diff --git a/src/eitd/SIlanguage.hpp b/src/eitd/SIlanguage.hpp index 133aec0fc..7f80d3a76 100644 --- a/src/eitd/SIlanguage.hpp +++ b/src/eitd/SIlanguage.hpp @@ -29,8 +29,6 @@ #include -#define LANGUAGEFILE "/var/tuxbox/config/epglanguages.conf" - class SIlanguage { public: static void filter(const std::map& s, int max, std::string& retval); From e739868e7c1894095c4342dcf8d646e26b7e3330 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 29 Jan 2013 14:23:50 +0400 Subject: [PATCH 122/442] system/flashtool.cpp: add bad block skip for read/write/erase in case of NAND --- src/system/flashtool.cpp | 244 +++++++++++++++++++++++---------------- src/system/flashtool.h | 7 +- 2 files changed, 151 insertions(+), 100 deletions(-) diff --git a/src/system/flashtool.cpp b/src/system/flashtool.cpp index 063827603..da1611b45 100644 --- a/src/system/flashtool.cpp +++ b/src/system/flashtool.cpp @@ -36,16 +36,6 @@ #include -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,7) -//#include -#include -#else -#include -//#include -#endif - -//#include - #include @@ -78,58 +68,78 @@ void CFlashTool::setStatusViewer( CProgress_StatusViewer* statusview ) bool CFlashTool::readFromMTD( const std::string & filename, int globalProgressEnd ) { - int fd1, fd2; - long filesize; - int globalProgressBegin = 0; + int fd1; + long filesize; + int globalProgressBegin = 0; if(statusViewer) - { statusViewer->showLocalStatus(0); - } - if (mtdDevice.empty()) - { + if (mtdDevice.empty()) { ErrorMessage = "mtd-device not set"; return false; } - if( (fd1 = open( mtdDevice.c_str(), O_RDONLY )) < 0 ) - { + if( (fd = open( mtdDevice.c_str(), O_RDONLY )) < 0 ) { ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_CANTOPENMTD); return false; } + if (!getInfo()) { + close(fd); + return false; + } - if( (fd2 = open( filename.c_str(), O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)) < 0 ) - { + if( (fd1 = open( filename.c_str(), O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)) < 0 ) { ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_CANTOPENFILE); - close(fd1); + close(fd); return false; } if(statusViewer) - { globalProgressBegin = statusViewer->getGlobalStatus(); - } + filesize = CMTDInfo::getInstance()->getMTDSize(mtdDevice); - char buf[1024]; + unsigned char * buf = new unsigned char[meminfo.writesize]; + if (buf == NULL) { + printf("CFlashTool::program: mem alloc failed\n"); + close(fd); + close(fd1); + return false; + } + unsigned mtdoffset = 0; long fsize = filesize; - while(fsize>0) - { - long block = fsize; - if(block>(long)sizeof(buf)) - { - block = sizeof(buf); + while(fsize > 0) { + unsigned block = meminfo.writesize; + if (isnand) { + unsigned blockstart = mtdoffset & ~(meminfo.erasesize - 1); + if (blockstart == mtdoffset) { + while (mtdoffset < meminfo.size) { + printf("CFlashTool::readFromMTD: read block at %x\n", mtdoffset); + loff_t offset = mtdoffset; + int ret = ioctl(fd, MEMGETBADBLOCK, &offset); + if (ret == 0) + break; + printf("CFlashTool::readFromMTD: bad block at %x, skipping..\n", mtdoffset); + mtdoffset += meminfo.erasesize; + fsize -= meminfo.erasesize; + lseek(fd, mtdoffset, SEEK_SET); + continue; + } + if (mtdoffset >= meminfo.size) { + printf("CFlashTool::readFromMTD: end of device...\n"); + break; + } + } } - read( fd1, &buf, block); - write( fd2, &buf, block); + read(fd, buf, block); + write(fd1, buf, block); fsize -= block; + mtdoffset += meminfo.writesize; char prog = char(100-(100./filesize*fsize)); - if(statusViewer) - { + if(statusViewer) { statusViewer->showLocalStatus(prog); - if(globalProgressEnd!=-1) - { + if(globalProgressEnd!=-1) { int globalProg = globalProgressBegin + int((globalProgressEnd-globalProgressBegin) * prog/100. ); statusViewer->showGlobalStatus(globalProg); } @@ -137,34 +147,29 @@ bool CFlashTool::readFromMTD( const std::string & filename, int globalProgressEn } if(statusViewer) - { statusViewer->showLocalStatus(100); - } + delete[] buf; + close(fd); close(fd1); - close(fd2); return true; } bool CFlashTool::program( const std::string & filename, int globalProgressEndErase, int globalProgressEndFlash ) { - int fd1, fd2; - long filesize; - int globalProgressBegin = 0; + int fd1; + ssize_t filesize; + int globalProgressBegin = 0; if(statusViewer) - { statusViewer->showLocalStatus(0); - } - if (mtdDevice.empty()) - { + if (mtdDevice.empty()) { ErrorMessage = "mtd-device not set"; return false; } - if( (fd1 = open( filename.c_str(), O_RDONLY )) < 0 ) - { + if( (fd1 = open( filename.c_str(), O_RDONLY )) < 0 ) { ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_CANTOPENFILE); return false; } @@ -172,65 +177,89 @@ bool CFlashTool::program( const std::string & filename, int globalProgressEndEra filesize = lseek( fd1, 0, SEEK_END); lseek( fd1, 0, SEEK_SET); - if(filesize==0) - { + if(filesize==0) { ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_FILEIS0BYTES); close(fd1); return false; } - if(statusViewer) - { + if(statusViewer) { statusViewer->showLocalStatus(0); statusViewer->showStatusMessageUTF(g_Locale->getText(LOCALE_FLASHUPDATE_ERASING)); // UTF-8 } - //g_Zapit->shutdown(); sleep(2); - if(!erase(globalProgressEndErase)) - { + + if(!erase(globalProgressEndErase)) { close(fd1); return false; } - if(statusViewer) - { + if(statusViewer) { if(globalProgressEndErase!=-1) - { statusViewer->showGlobalStatus(globalProgressEndErase); - } + statusViewer->showLocalStatus(0); statusViewer->showStatusMessageUTF(g_Locale->getText(LOCALE_FLASHUPDATE_PROGRAMMINGFLASH)); // UTF-8 } - if( (fd2 = open( mtdDevice.c_str(), O_WRONLY )) < 0 ) - { + if( (fd = open( mtdDevice.c_str(), O_WRONLY )) < 0 ) { ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_CANTOPENMTD); close(fd1); return false; } if(statusViewer) - { globalProgressBegin = statusViewer->getGlobalStatus(); - } - char buf[1024]; - long fsize = filesize; - while(fsize>0) - { - long block = fsize; - if(block>(long)sizeof(buf)) - { - block = sizeof(buf); + unsigned char * buf = new unsigned char[meminfo.writesize]; + if (buf == NULL) { + printf("CFlashTool::program: mem alloc failed\n"); + close(fd); + close(fd1); + return false; + } + unsigned mtdoffset = 0; + unsigned fsize = filesize; + printf("CFlashTool::program: file %s write size %d, erase size %d\n", filename.c_str(), meminfo.writesize, meminfo.erasesize); + while(fsize > 0) { + unsigned block = meminfo.writesize; + if (block > fsize) + block = fsize; + + unsigned res = read(fd1, buf, block); + if (res != block) { + printf("CFlashTool::program: read from %s failed: %d from %d\n", filename.c_str(), res, block); } - read( fd1, &buf, block); - write( fd2, &buf, block); + if (isnand) { + if (block < (unsigned) meminfo.writesize) { + printf("CFlashTool::program: padding at %x\n", mtdoffset); + memset(buf + res, 0, meminfo.writesize - res); + } + unsigned blockstart = mtdoffset & ~(meminfo.erasesize - 1); + if (blockstart == mtdoffset) { + while (mtdoffset < meminfo.size) { + printf("CFlashTool::program: write block at %x\n", mtdoffset); + loff_t offset = mtdoffset; + int ret = ioctl(fd, MEMGETBADBLOCK, &offset); + if (ret == 0) + break; + printf("CFlashTool::program: bad block at %x, skipping..\n", mtdoffset); + mtdoffset += meminfo.erasesize; + lseek(fd, mtdoffset, SEEK_SET); + continue; + } + if (mtdoffset >= meminfo.size) { + printf("CFlashTool::program: not enough space to write, left: %d\n", fsize); + break; + } + } + } + write(fd, buf, meminfo.writesize); fsize -= block; - char prog = char(100-(100./filesize*fsize)); - if(statusViewer) - { + mtdoffset += meminfo.writesize; + if(statusViewer) { + char prog = char(100-(100./filesize*fsize)); statusViewer->showLocalStatus(prog); - if(globalProgressEndFlash!=-1) - { + if(globalProgressEndFlash!=-1) { int globalProg = globalProgressBegin + int((globalProgressEndFlash-globalProgressBegin) * prog/100. ); statusViewer->showGlobalStatus(globalProg); } @@ -238,53 +267,59 @@ bool CFlashTool::program( const std::string & filename, int globalProgressEndEra } if(statusViewer) - { statusViewer->showLocalStatus(100); - } + delete[] buf; close(fd1); - close(fd2); + close(fd); + // FIXME error message + if (fsize) + return false; + return true; +} + +bool CFlashTool::getInfo() +{ + if (ioctl( fd, MEMGETINFO, &meminfo ) != 0 ) { + // TODO: localize error message + ErrorMessage = "can't get mtd-info"; + return false; + } + isnand = (meminfo.type == MTD_NANDFLASH); + printf("CFlashTool::getInfo: NAND: %s\n", isnand ? "yes" : "no"); return true; } bool CFlashTool::erase(int globalProgressEnd) { - int fd; - mtd_info_t meminfo; - erase_info_t lerase; - int globalProgressBegin = 0; + erase_info_t lerase; + int globalProgressBegin = 0; if( (fd = open( mtdDevice.c_str(), O_RDWR )) < 0 ) { + printf("CFlashTool::erase: cant open %s\n", mtdDevice.c_str()); ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_CANTOPENMTD); return false; } - if( ioctl( fd, MEMGETINFO, &meminfo ) != 0 ) - { - // TODO: localize error message - ErrorMessage = "can't get mtd-info"; + if (!getInfo()) { close(fd); return false; } if(statusViewer) - { globalProgressBegin = statusViewer->getGlobalStatus(); - } lerase.length = meminfo.erasesize; - for (lerase.start = 0; lerase.start < meminfo.size;lerase.start += meminfo.erasesize) + + for (lerase.start = 0; lerase.start < meminfo.size; lerase.start += meminfo.erasesize) { - printf( "Erasing %s erase size %x start %x size %x\n", + /* printf( "Erasing %s erase size %x start %x size %x\n", mtdDevice.c_str(), meminfo.erasesize, lerase.start, - meminfo.size ); - printf( "\rErasing %u Kbyte @ %x -- %2u %% complete.", - meminfo.erasesize/1024, lerase.start, - lerase.start*100/meminfo.size ); + meminfo.size ); */ + int prog = int(lerase.start*100./meminfo.size); if(statusViewer) { - int prog = int(lerase.start*100./meminfo.size); statusViewer->showLocalStatus(prog); if(globalProgressEnd!=-1) { @@ -292,6 +327,14 @@ bool CFlashTool::erase(int globalProgressEnd) statusViewer->showGlobalStatus(globalProg); } } + if (isnand) { + loff_t offset = lerase.start; + int ret = ioctl(fd, MEMGETBADBLOCK, &offset); + if (ret > 0) { + printf("Erasing: bad block at %x, skipping..\n", lerase.start); + continue; + } + } if(ioctl( fd, MEMERASE, &lerase) != 0) { @@ -299,6 +342,9 @@ bool CFlashTool::erase(int globalProgressEnd) close(fd); return false; } + printf( "Erasing %u Kbyte @ %x -- %2u %% complete.\n", + meminfo.erasesize/1024, lerase.start, + prog /* lerase.start*100/meminfo.size */); } close(fd); diff --git a/src/system/flashtool.h b/src/system/flashtool.h index ea27d198b..1e1fcd625 100644 --- a/src/system/flashtool.h +++ b/src/system/flashtool.h @@ -37,7 +37,7 @@ #include #include - +#include class CFlashTool { @@ -47,6 +47,11 @@ class CFlashTool std::string mtdDevice; std::string ErrorMessage; + int fd; + mtd_info_t meminfo; + bool isnand; + + bool getInfo(); bool erase(int globalProgressEnd=-1); public: From 5f105f2ee329c00ec51d7ca8dead24735500b544 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 29 Jan 2013 14:24:47 +0400 Subject: [PATCH 123/442] gui/update.cpp: use mtd0 as default on apollo, disable uboot/uldr partitions write --- src/gui/update.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/gui/update.cpp b/src/gui/update.cpp index 51ed5e007..0fb653b95 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -85,7 +85,11 @@ extern int allow_flash; #define FILEBROWSER_UPDATE_FILTER "img" #define MTD_OF_WHOLE_IMAGE 0 -#define MTD_DEVICE_OF_UPDATE_PART "/dev/mtd2" +#ifdef BOXMODEL_APOLLO +#define MTD_DEVICE_OF_UPDATE_PART "/dev/mtd0" +#else +#define MTD_DEVICE_OF_UPDATE_PART "/dev/mtd3" +#endif CFlashUpdate::CFlashUpdate() :CProgressWindow() @@ -93,6 +97,8 @@ CFlashUpdate::CFlashUpdate() width = w_max (40, 10); setTitle(LOCALE_FLASHUPDATE_HEAD); sysfs = CMTDInfo::getInstance()->findMTDsystem(); + if (sysfs.empty()) + sysfs = MTD_DEVICE_OF_UPDATE_PART; printf("Mtd partition to update: %s\n", sysfs.c_str()); } @@ -458,9 +464,7 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) #endif if(fileType < '3') { CNeutrinoApp::getInstance()->exec(NULL, "savesettings"); - sleep(2); //flash it... - if (ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_APPLY_SETTINGS), CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE) == CMessageBox::mbrYes) if (!CExtUpdate::getInstance()->applySettings(filename, CExtUpdate::MODE_SOFTUPDATE)) return menu_return::RETURN_REPAINT; @@ -486,9 +490,9 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) CFSMounter::umount(); ShowHintUTF(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_FLASHREADYREBOOT)); // UTF-8 + sleep(2); //my_system("/etc/init.d/rcK"); ft.reboot(); - sleep(20000); } else if(fileType == 'T') // display file contents { @@ -604,7 +608,7 @@ void CFlashExpert::writemtd(const std::string & filename, int mtdNumber) } else { showGlobalStatus(100); showStatusMessageUTF(g_Locale->getText(LOCALE_FLASHUPDATE_READY)); // UTF-8 - sleep(1); + sleep(2); hide(); ShowHintUTF(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_FLASHREADYREBOOT)); // UTF-8 ft.reboot(); @@ -629,9 +633,15 @@ void CFlashExpert::showMTDSelector(const std::string & actionkey) for(int lx=0;lxgetMTDCount();lx++) { char sActionKey[20]; bool enabled = true; +#ifdef BOXMODEL_APOLLO + // disable write uboot / uldr, FIXME correct numbers + if ((actionkey == "writemtd") && (lx == 5 || lx == 6)) + enabled = false; +#else // disable write uboot if ((actionkey == "writemtd") && (lx == 0)) enabled = false; +#endif sprintf(sActionKey, "%s%d", actionkey.c_str(), lx); mtdselector->addItem(new CMenuForwarderNonLocalized(mtdInfo->getMTDName(lx).c_str(), enabled, NULL, this, sActionKey, CRCInput::convertDigitToKey(shortcut++))); } From 6804d18d1ca205de3f8cd1a8e8b17c23bd9ce5d0 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 29 Jan 2013 14:44:45 +0400 Subject: [PATCH 124/442] gui/start_wizard.cpp: copy initial settings using CONFIGDIR --- src/gui/start_wizard.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/start_wizard.cpp b/src/gui/start_wizard.cpp index bd78c0a6d..0fc08c5cc 100644 --- a/src/gui/start_wizard.cpp +++ b/src/gui/start_wizard.cpp @@ -107,7 +107,7 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/) { if (ShowMsgUTF(LOCALE_WIZARD_INITIAL_SETTINGS, g_Locale->getText(LOCALE_WIZARD_INSTALL_SETTINGS), CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes) { - system("/bin/cp /var/tuxbox/config/initial/* /var/tuxbox/config/zapit/"); + system("/bin/cp " CONFIGDIR "/initial/* " CONFIGDIR "/zapit/"); CFEManager::getInstance()->loadSettings(); CFEManager::getInstance()->saveSettings(); CZapit::getInstance()->PrepareChannels(); From 4b10e2e7c9793eab87175f13817dda7f032c81e3 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 29 Jan 2013 14:48:00 +0400 Subject: [PATCH 125/442] system/setting_helpers.cpp: use CONFIGDIR to remove xml/conf files --- src/system/setting_helpers.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/system/setting_helpers.cpp b/src/system/setting_helpers.cpp index db12ac075..8ceabf919 100644 --- a/src/system/setting_helpers.cpp +++ b/src/system/setting_helpers.cpp @@ -467,7 +467,7 @@ int CDataResetNotifier::exec(CMenuTarget* /*parent*/, const std::string& actionK return true; if(delete_all) { - my_system("/bin/sh", "-c", "rm -f /var/tuxbox/config/zapit/*.conf"); + my_system("/bin/sh", "-c", "rm -f " CONFIGDIR "/zapit/*.conf"); CServiceManager::getInstance()->SatelliteList().clear(); CZapit::getInstance()->LoadSettings(); CZapit::getInstance()->GetConfig(zapitCfg); @@ -487,7 +487,7 @@ int CDataResetNotifier::exec(CMenuTarget* /*parent*/, const std::string& actionK CFrameBuffer::getInstance()->Clear(); } if(delete_chan) { - my_system("/bin/sh", "-c", "rm -f /var/tuxbox/config/zapit/*.xml"); + my_system("/bin/sh", "-c", "rm -f " CONFIGDIR "/zapit/*.xml"); g_Zapit->reinitChannels(); } return ret; From b0e404922a00fdf31bccf1709b75c11a71bc378e Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 29 Jan 2013 14:49:25 +0400 Subject: [PATCH 126/442] .gitignore: add generated src/nhttpd/nhttpd.conf --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f72cf9363..feb9efde5 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ src/zapit/src/udpstreampes src/drivertool src/gui/svn_version.h src/gui/git_version.h +src/nhttpd/nhttpd.conf From d1cbff900f742ba04f45e4b9c658f1d7f5d565eb Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 29 Jan 2013 17:38:39 +0400 Subject: [PATCH 127/442] system/flashtool.cpp: fix buffer size for nor --- src/system/flashtool.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/system/flashtool.cpp b/src/system/flashtool.cpp index da1611b45..13f4a4580 100644 --- a/src/system/flashtool.cpp +++ b/src/system/flashtool.cpp @@ -285,6 +285,9 @@ bool CFlashTool::getInfo() ErrorMessage = "can't get mtd-info"; return false; } + if (meminfo.writesize < 1024) + meminfo.writesize = 1024; + isnand = (meminfo.type == MTD_NANDFLASH); printf("CFlashTool::getInfo: NAND: %s\n", isnand ? "yes" : "no"); return true; From 38461dca6cc338c2b21c1d71031e397214cb4c7a Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 29 Jan 2013 17:41:06 +0400 Subject: [PATCH 128/442] configure scripts: add boxmodel --- cross-configure.cool | 2 +- cross-configure.cool.debug | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cross-configure.cool b/cross-configure.cool index 60daab140..0a982071c 100755 --- a/cross-configure.cool +++ b/cross-configure.cool @@ -27,5 +27,5 @@ export FREETYPE_CONFIG=$PREFIX/bin/freetype-config export CURL_CONFIG=$PREFIX/bin/curl-config ./autogen.sh -./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --enable-flac --with-target=cdk --with-targetprefix="" "$*" +./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --enable-flac --with-target=cdk --with-targetprefix="" --with-boxmodel=nevis "$*" diff --git a/cross-configure.cool.debug b/cross-configure.cool.debug index 10f42ba3b..665ca44cb 100755 --- a/cross-configure.cool.debug +++ b/cross-configure.cool.debug @@ -27,5 +27,5 @@ export FREETYPE_CONFIG=$PREFIX/bin/freetype-config export CURL_CONFIG=$PREFIX/bin/curl-config ./autogen.sh -./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --enable-flac --with-target=cdk --with-targetprefix="" "$*" +./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --enable-flac --with-target=cdk --with-targetprefix="" --with-boxmodel=nevis "$*" From 6724414335bb0745555900a01f2103f93362757d Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 30 Jan 2013 11:16:24 +0400 Subject: [PATCH 129/442] configure.ac: always define HAVE_COOLSTREAM_NEVIS_IR_H, ifdef in rcinput.h decide what to include --- configure.ac | 2 -- 1 file changed, 2 deletions(-) diff --git a/configure.ac b/configure.ac index 94eee787a..8df2e071d 100644 --- a/configure.ac +++ b/configure.ac @@ -123,11 +123,9 @@ AC_ARG_ENABLE(cleanup, [AC_DEFINE(EXIT_CLEANUP,1,[enable cleanup on exit])]) if test "$BOXTYPE" = "coolstream"; then -if test "$BOXMODEL" = "nevis"; then if test -e ${srcdir}/lib/libcoolstream/nevis_ir.h; then AC_DEFINE(HAVE_COOLSTREAM_NEVIS_IR_H,1,[Define to 1 if you have the header file.]) fi -fi if test "$BOXMODEL" = "apollo"; then if test -e ${srcdir}/lib/libcoolstream2/cs_ir_generic.h; then From 55e3db20b8fb98961298a9dec659978541055eb4 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 30 Jan 2013 11:37:08 +0400 Subject: [PATCH 130/442] zapit/src/bouquets.cpp: fix copy/paste in getRadioChannels --- src/zapit/src/bouquets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zapit/src/bouquets.cpp b/src/zapit/src/bouquets.cpp index f2102e8c1..05204462a 100644 --- a/src/zapit/src/bouquets.cpp +++ b/src/zapit/src/bouquets.cpp @@ -172,7 +172,7 @@ bool CZapitBouquet::getTvChannels(ZapitChannelList &list, int flags) bool CZapitBouquet::getRadioChannels(ZapitChannelList &list, int flags) { list.clear(); - for (ZapitChannelList::iterator it = tvChannels.begin(); it != tvChannels.end(); ++it) { + for (ZapitChannelList::iterator it = radioChannels.begin(); it != radioChannels.end(); ++it) { if ((*it)->flags & flags) list.push_back(*it); } From 62529ede9cc16cb1e396c5cd8ef8858ea6215c19 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 30 Jan 2013 11:39:51 +0400 Subject: [PATCH 131/442] gui/zapit_setup.cpp: filter bouquets channels, fix return values to close all menus on menu key --- src/gui/zapit_setup.cpp | 31 ++++++++++++++----------------- src/gui/zapit_setup.h | 4 ++-- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/gui/zapit_setup.cpp b/src/gui/zapit_setup.cpp index 245af0c4e..724b194ed 100644 --- a/src/gui/zapit_setup.cpp +++ b/src/gui/zapit_setup.cpp @@ -44,23 +44,18 @@ CZapitSetup::CZapitSetup() CZapitSetup::~CZapitSetup() { - } int CZapitSetup::exec(CMenuTarget* parent, const std::string &/*actionKey*/) { printf("[neutrino] init zapit menu setup...\n"); - int res = menu_return::RETURN_REPAINT; - if (parent) parent->hide(); - showMenu(); - - return res; + return showMenu(); } -void CZapitSetup::showMenu() +int CZapitSetup::showMenu() { //menue init CMenuWidget *zapit = new CMenuWidget(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_ZAPIT); @@ -86,9 +81,10 @@ void CZapitSetup::showMenu() zapit->addItem(zapit1); zapit->addItem(zapit2); - zapit->exec(NULL, ""); + int res = zapit->exec(NULL, ""); delete miscZapitNotifier; delete zapit; + return res; } //select menu @@ -107,19 +103,15 @@ int CSelectChannelWidget::exec(CMenuTarget* parent, const std::string& actionKey int res = menu_return::RETURN_REPAINT; if (parent) - { parent->hide(); - } if(actionKey == "tv") { - InitZapitChannelHelper(CZapitClient::MODE_TV); - return res; + return InitZapitChannelHelper(CZapitClient::MODE_TV); } else if(actionKey == "radio") { - InitZapitChannelHelper(CZapitClient::MODE_RADIO); - return res; + return InitZapitChannelHelper(CZapitClient::MODE_RADIO); } else if (strncmp(actionKey.c_str(), "ZCT:", 4) == 0 || strncmp(actionKey.c_str(), "ZCR:", 4) == 0) { @@ -147,7 +139,7 @@ int CSelectChannelWidget::exec(CMenuTarget* parent, const std::string& actionKey } extern CBouquetManager *g_bouquetManager; -void CSelectChannelWidget::InitZapitChannelHelper(CZapitClient::channelsMode mode) +int CSelectChannelWidget::InitZapitChannelHelper(CZapitClient::channelsMode mode) { std::vector toDelete; CMenuWidget mctv(LOCALE_TIMERLIST_BOUQUETSELECT, NEUTRINO_ICON_SETTINGS, width); @@ -157,7 +149,11 @@ void CSelectChannelWidget::InitZapitChannelHelper(CZapitClient::channelsMode mod CMenuWidget* mwtv = new CMenuWidget(LOCALE_TIMERLIST_CHANNELSELECT, NEUTRINO_ICON_SETTINGS, width); toDelete.push_back(mwtv); mwtv->addIntroItems(); - ZapitChannelList channels = (mode == CZapitClient::MODE_RADIO) ? g_bouquetManager->Bouquets[i]->radioChannels : g_bouquetManager->Bouquets[i]->tvChannels; + ZapitChannelList channels; + if (mode == CZapitClient::MODE_RADIO) + g_bouquetManager->Bouquets[i]->getRadioChannels(channels); + else + g_bouquetManager->Bouquets[i]->getTvChannels(channels); for(int j = 0; j < (int) channels.size(); j++) { CZapitChannel * channel = channels[j]; char cChannelId[60] = {0}; @@ -173,7 +169,7 @@ void CSelectChannelWidget::InitZapitChannelHelper(CZapitClient::channelsMode mod mctv.addItem(new CMenuForwarderNonLocalized(g_bouquetManager->Bouquets[i]->Name.c_str(), true, NULL, mwtv)); } } - mctv.exec (NULL, ""); + int res = mctv.exec (NULL, ""); // delete dynamic created objects for(unsigned int count=0;count Date: Wed, 30 Jan 2013 11:54:49 +0400 Subject: [PATCH 132/442] gui/timerlist.cpp: filter bouquets channels --- src/gui/timerlist.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index 2491ddcc3..9da35659a 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -1177,23 +1177,24 @@ int CTimerList::newTimer() CMenuWidget* mwradio = new CMenuWidget(LOCALE_TIMERLIST_CHANNELSELECT, NEUTRINO_ICON_SETTINGS); toDelete.push_back(mwradio); - ZapitChannelList* channels = &(g_bouquetManager->Bouquets[i]->tvChannels); - for (int j = 0; j < (int) channels->size(); j++) { + ZapitChannelList channels; + g_bouquetManager->Bouquets[i]->getTvChannels(channels); + for (int j = 0; j < (int) channels.size(); j++) { char cChannelId[3+16+1+1]; - sprintf(cChannelId, "SC:" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS ",", (*channels)[j]->channel_id); - mwtv->addItem(new CMenuForwarderNonLocalized((*channels)[j]->getName().c_str(), true, NULL, this, (std::string(cChannelId) + (*channels)[j]->getName()).c_str(), CRCInput::RC_nokey, NULL, (*channels)[j]->scrambled ? NEUTRINO_ICON_SCRAMBLED : NULL)); + sprintf(cChannelId, "SC:" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS ",", channels[j]->channel_id); + mwtv->addItem(new CMenuForwarderNonLocalized(channels[j]->getName().c_str(), true, NULL, this, (std::string(cChannelId) + channels[j]->getName()).c_str(), CRCInput::RC_nokey, NULL, channels[j]->scrambled ? NEUTRINO_ICON_SCRAMBLED : NULL)); } - if (!channels->empty()) + if (!channels.empty()) mctv.addItem(new CMenuForwarderNonLocalized(g_bouquetManager->Bouquets[i]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) : g_bouquetManager->Bouquets[i]->Name.c_str() /*g_bouquetManager->Bouquets[i]->Name.c_str()*/, true, NULL, mwtv)); - channels = &(g_bouquetManager->Bouquets[i]->radioChannels); - for (int j = 0; j < (int) channels->size(); j++) { + g_bouquetManager->Bouquets[i]->getRadioChannels(channels); + for (int j = 0; j < (int) channels.size(); j++) { char cChannelId[3+16+1+1]; - sprintf(cChannelId, "SC:" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS ",", (*channels)[j]->channel_id); - mwradio->addItem(new CMenuForwarderNonLocalized((*channels)[j]->getName().c_str(), true, NULL, this, (std::string(cChannelId) + (*channels)[j]->getName()).c_str(), CRCInput::RC_nokey, NULL, (*channels)[j]->scrambled ? NEUTRINO_ICON_SCRAMBLED : NULL)); + sprintf(cChannelId, "SC:" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS ",", channels[j]->channel_id); + mwradio->addItem(new CMenuForwarderNonLocalized(channels[j]->getName().c_str(), true, NULL, this, (std::string(cChannelId) + channels[j]->getName()).c_str(), CRCInput::RC_nokey, NULL, channels[j]->scrambled ? NEUTRINO_ICON_SCRAMBLED : NULL)); } - if (!channels->empty()) + if (!channels.empty()) mcradio.addItem(new CMenuForwarderNonLocalized(g_bouquetManager->Bouquets[i]->Name.c_str(), true, NULL, mwradio)); } } From 720bfba267271a03d2f2e70ee350932fc111c531 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 30 Jan 2013 13:05:08 +0400 Subject: [PATCH 133/442] nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp: filter channels, show real channel number --- .../tuxboxapi/coolstream/neutrinoyparser.cpp | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp index 0da2265af..71b8de441 100644 --- a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp @@ -219,9 +219,14 @@ std::string CNeutrinoYParser::func_get_bouquets_as_dropdown(CyhookHandler *, st int mode = NeutrinoAPI->Zapit->getMode(); for (int i = 0; i < (int) g_bouquetManager->Bouquets.size(); i++) { - ZapitChannelList * channels = mode == CZapitClient::MODE_RADIO ? &g_bouquetManager->Bouquets[i]->radioChannels : &g_bouquetManager->Bouquets[i]->tvChannels; + //ZapitChannelList &channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[i]->radioChannels : g_bouquetManager->Bouquets[i]->tvChannels; + ZapitChannelList channels; + if (mode == CZapitClient::MODE_RADIO) + g_bouquetManager->Bouquets[i]->getRadioChannels(channels); + else + g_bouquetManager->Bouquets[i]->getTvChannels(channels); sel=(nr==(i+1)) ? "selected=\"selected\"" : ""; - if(!channels->empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true")) + if(!channels.empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true")) yresult += string_printf("\n", i + 1, sel.c_str(), std::string(g_bouquetManager->Bouquets[i]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) :g_bouquetManager->Bouquets[i]->Name.c_str()).c_str()); //yresult += string_printf("\n", i + 1, sel.c_str(), (encodeString(std::string(g_bouquetManager->Bouquets[i]->Name.c_str()))).c_str()); @@ -241,8 +246,13 @@ std::string CNeutrinoYParser::func_get_bouquets_as_templatelist(CyhookHandler * //ytemplate += "\n"; //FIXME add newline to printf int mode = NeutrinoAPI->Zapit->getMode(); for (int i = 0; i < (int) g_bouquetManager->Bouquets.size(); i++) { - ZapitChannelList * channels = mode == CZapitClient::MODE_RADIO ? &g_bouquetManager->Bouquets[i]->radioChannels : &g_bouquetManager->Bouquets[i]->tvChannels; - if(!channels->empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true")) { + //ZapitChannelList &channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[i]->radioChannels : g_bouquetManager->Bouquets[i]->tvChannels; + ZapitChannelList channels; + if (mode == CZapitClient::MODE_RADIO) + g_bouquetManager->Bouquets[i]->getRadioChannels(channels); + else + g_bouquetManager->Bouquets[i]->getTvChannels(channels); + if(!channels.empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true")) { yresult += string_printf(ytemplate.c_str(), i + 1, g_bouquetManager->Bouquets[i]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) : g_bouquetManager->Bouquets[i]->Name.c_str()); yresult += "\r\n"; } @@ -280,7 +290,11 @@ std::string CNeutrinoYParser::func_get_channels_as_dropdown(CyhookHandler *, st if(bnumber > 0) { bnumber--; ZapitChannelList channels; - channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[bnumber]->radioChannels : g_bouquetManager->Bouquets[bnumber]->tvChannels; + //channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[bnumber]->radioChannels : g_bouquetManager->Bouquets[bnumber]->tvChannels; + if (mode == CZapitClient::MODE_RADIO) + g_bouquetManager->Bouquets[bnumber]->getRadioChannels(channels); + else + g_bouquetManager->Bouquets[bnumber]->getTvChannels(channels); for(int j = 0; j < (int) channels.size(); j++) { CEPGData epg; CZapitChannel * channel = channels[j]; @@ -304,7 +318,7 @@ std::string CNeutrinoYParser::func_get_bouquets_with_epg(CyhookHandler *hh, std: int BouquetNr = 0; std::string abnumber, tmp,yresult; ZapitChannelList channels; - int num; + //int num; int mode = NeutrinoAPI->Zapit->getMode(); ySplitString(para," ",abnumber, tmp); @@ -312,13 +326,19 @@ std::string CNeutrinoYParser::func_get_bouquets_with_epg(CyhookHandler *hh, std: BouquetNr = atoi(abnumber.c_str()); if (BouquetNr > 0) { BouquetNr--; +#if 0 channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[BouquetNr]->radioChannels : g_bouquetManager->Bouquets[BouquetNr]->tvChannels; num = 1 + (mode == CZapitClient::MODE_RADIO ? g_bouquetManager->radioChannelsBegin().getNrofFirstChannelofBouquet(BouquetNr) : g_bouquetManager->tvChannelsBegin().getNrofFirstChannelofBouquet(BouquetNr)) ; +#endif + if (mode == CZapitClient::MODE_RADIO) + g_bouquetManager->Bouquets[BouquetNr]->getRadioChannels(channels); + else + g_bouquetManager->Bouquets[BouquetNr]->getTvChannels(channels); } else { CBouquetManager::ChannelIterator cit = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->radioChannelsBegin() : g_bouquetManager->tvChannelsBegin(); for (; !(cit.EndOfChannels()); cit++) channels.push_back(*cit); - num = 1; + //num = 1; } NeutrinoAPI->GetChannelEvents(); @@ -378,7 +398,7 @@ std::string CNeutrinoYParser::func_get_bouquets_with_epg(CyhookHandler *hh, std: "')\">%s\n", ((channel->channel_id == current_channel) ? "" : " "), channel->channel_id, - num + j /*channel->nr*/, + channel->number /* num + j */, channel->getName().c_str(), (channel->getServiceType() == ST_NVOD_REFERENCE_SERVICE) ? " (NVOD)" : "", channel->channel_id, @@ -950,6 +970,8 @@ std::string CNeutrinoYParser::func_set_timer_form(CyhookHandler *hh, std::strin t_channel_id current_channel = (cmd == "new") ? CZapit::getInstance()->GetCurrentChannelID() : timer.channel_id; CBouquetManager::ChannelIterator cit = g_bouquetManager->tvChannelsBegin(); for (; !(cit.EndOfChannels()); cit++) { + if (((*cit)->flags & CZapitChannel::REMOVED) || (*cit)->flags & CZapitChannel::NOT_FOUND) + continue; sel = ((*cit)->channel_id == current_channel) ? "selected=\"selected\"" : ""; hh->ParamList["program_row"] += string_printf("