12static inline int MAGAZINE(
int page) {
return page / 256; };
17 for (
int i = 0; i < 256; i++)
19 for (
int bit = 0; bit < 8; bit++)
30 bool numeric_input =
false;
202 if (mag > 8 || mag < 1)
211 int_to_subpage_t::const_iterator subpageIter;
212 subpageIter = page->
subpages.begin();
213 while (subpageIter != page->
subpages.end())
227 str += QString(
"%1").arg(subpage->
subpagenum,2,16,QChar(
'0'));
242 spaces.fill(
' ', 27 - str.length());
243 str =
" <" + str + spaces +
" > ";
248 int startPos = selected - 5;
249 startPos = std::max(startPos, 0);
250 if (startPos + 9 >= count)
251 startPos = count - 10;
253 str =
" <" + str.mid(startPos * 3, 27) +
" > ";
260 if (page < 0x100 || page > 0x899)
276 QMutexLocker lock(mag.lock);
279 int_to_page_t::iterator iter;
280 iter = mag.pages.begin();
281 while (iter != mag.pages.end())
290 mag.current_page = 0;
291 mag.current_subpage = 0;
292 mag.loadingpage.active =
false;
306 int vbimode,
int lang,
int flags)
309 if (magazine < 1 || magazine > 8)
312 for(
int m = 1; m <= 8; m++)
329 if (!(isMagazineSerialMode) && m != magazine)
335 int lastSubPage =
m_magazines[m - 1].current_subpage;
337 LOG(VB_VBI, LOG_DEBUG,
338 QString(
"AddPageHeader(p %1, sp %2, lang %3, mag %4, lp %5, lsp %6"
340 .arg(page).arg(subpage).arg(lang).arg(m).arg(lastPage)
341 .arg(lastSubPage).arg(isMagazineSerialMode));
343 if ((page != lastPage || subpage != lastSubPage) &&
350 .pages[lastPage].subpages[lastSubPage]);
351 m_magazines[m - 1].pages[lastPage].pagenum = lastPage;
370 m_magazines[magazine - 1].current_subpage = subpage;
372 for (
auto & line : ttpage->
data)
379 ttpage->
flags = flags;
384 std::fill_n(ttpage->
data[0].data(), 8,
' ');
388 for (
uint j = 8; j < 40; j++)
404 const uint8_t* buf,
int vbimode)
414 if (magazine < 1 || magazine > 8)
417 int currentpage =
m_magazines[magazine - 1].current_page;
439 b1 =
hamm8(buf, &err);
440 b2 =
hamm8(buf + 37, &err);
447 b2 =
hamm84(buf + 37, &err);
454 if (b1 != 0 || !(b2 & 8))
457 for (ptrdiff_t i = 0; i < 6; ++i)
463 b1 =
hamm16(buf+1+(6*i), &err);
464 b2 =
hamm16(buf+3+(6*i), &err);
465 b3 =
hamm16(buf+5+(6*i), &err);
471 b1 = (
hamm84(buf+2+(6*i), &err) * 16) +
472 hamm84(buf+1+(6*i), &err);
473 b2 = (
hamm84(buf+4+(6*i), &err) * 16) +
474 hamm84(buf+3+(6*i), &err);
475 b3 = (
hamm84(buf+6+(6*i), &err) * 16) +
476 hamm84(buf+5+(6*i), &err);
484 int x = (b2 >> 7) | ((b3 >> 5) & 0x06);
485 int nTmp = (magazine ^ x);
486 ttpage->
floflink[i] = (( nTmp ? nTmp : 8) * 256) + b1;
496 if (( row >= 1 ) && ( row <= 24 ))
500 for (
uint j = 0; j < 40; j++)
523 [[maybe_unused]]
int page,
524 [[maybe_unused]]
int subpage,
526 [[maybe_unused]]
int lang)
535 int page,
int direction)
const
539 if (mag > 8 || mag < 1)
544 int_to_page_t::const_iterator pageIter;
555 int_to_page_t::const_reverse_iterator iter;
561 res = &pageIter->second;
571 res = &pageIter->second;
575 res = &pageIter->second;
583 int page,
int subpage,
int direction)
const
587 if (mag > 8 || mag < 1)
592 int_to_page_t::const_iterator pageIter;
598 auto subpageIter = ttpage->
subpages.cbegin();
602 subpageIter = ttpage->
subpages.find(subpage);
604 if (subpageIter == ttpage->
subpages.cend())
608 return &(subpageIter->second);
614 if (subpageIter == ttpage->
subpages.cend())
616 auto iter = ttpage->
subpages.crbegin();
617 res = &(iter->second);
621 res = &(subpageIter->second);
628 if (subpageIter == ttpage->
subpages.cend())
629 subpageIter = ttpage->
subpages.cbegin();
631 res = &(subpageIter->second);
int_to_subpage_t subpages
std::array< uint8_t, 256 > m_bitswap
void AddTeletextData(int magazine, int row, const uint8_t *buf, int vbimode)
virtual void HeaderUpdated(int page, int subpage, tt_line_array &page_ptr, int lang)
void AddPageHeader(int page, int subpage, const uint8_t *buf, int vbimode, int lang, int flags)
const TeletextPage * FindPage(int page, int dir=0) const
virtual void PageUpdated(int page, int subpage)
std::array< TeletextMagazine, 8 > m_magazines
TeletextSubPage * FindSubPage(void)
void SetPage(int page, int subpage)
bool KeyPress(const QString &Key, bool &Exit)
const TeletextSubPage * FindSubPageInternal(int page, int subpage, int direction) const
const TeletextPage * FindPageInternal(int page, int direction) const
std::array< int, 3 > m_pageinput
int subpagenum
the wanted subpage
int flof
page has FastText links
std::array< int, 6 > floflink
FastText links (FLOF)
bool active
data has arrived since page last cleared
bool subtitle
page is subtitle page
std::array< tt_line_array, 25 > data
page data
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
static constexpr const char * ACTION_7
static constexpr const char * ACTION_5
static constexpr const char * ACTION_0
static constexpr const char * ACTION_3
static constexpr const char * ACTION_1
static constexpr const char * ACTION_4
static constexpr const char * ACTION_6
static constexpr const char * ACTION_8
static constexpr const char * ACTION_2
static constexpr const char * ACTION_9
MBASE_PUBLIC long long copy(QFile &dst, QFile &src, uint block_size=0)
Copies src file to dst file.
static eu8 clamp(eu8 value, eu8 low, eu8 high)
static int MAGAZINE(int page)
std::array< uint8_t, 40 > tt_line_array
static constexpr uint8_t TP_INTERRUPTED_SEQ
static constexpr uint8_t TP_MAGAZINE_SERIAL
#define ACTION_NEXTSUBPAGE
#define ACTION_TOGGLEBACKGROUND
#define ACTION_PREVSUBPAGE
#define ACTION_MENUYELLOW
int hamm8(const uint8_t *p, int *err)
int hamm84(const uint8_t *p, int *err)
int hamm16(const uint8_t *p, int *err)
@ VBI_DVB_SUBTITLE
< DVB packet