vdr  2.2.0
hdffcmd_osd.c
Go to the documentation of this file.
1 /**********************************************************************
2  *
3  * HDFF firmware command interface library
4  *
5  * Copyright (C) 2011 Andreas Regel
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11 
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16 
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the
19  * Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  *********************************************************************/
23 
24 #include <stdint.h>
25 #include <string.h>
26 #include <sys/ioctl.h>
27 
28 #include "hdffcmd.h"
29 #include "hdffcmd_base.h"
30 #include "hdffcmd_defs.h"
31 
32 
33 int HdffCmdOsdConfigure(int OsdDevice, const HdffOsdConfig_t * Config)
34 {
35  uint8_t cmdData[16];
36  BitBuffer_t cmdBuf;
37  osd_raw_cmd_t osd_cmd;
38 
39  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
40  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
41  osd_cmd.cmd_data = cmdData;
44  if (Config->FontAntialiasing)
45  {
46  BitBuffer_SetBits(&cmdBuf, 1, 1);
47  }
48  else
49  {
50  BitBuffer_SetBits(&cmdBuf, 1, 0);
51  }
52  if (Config->FontKerning)
53  {
54  BitBuffer_SetBits(&cmdBuf, 1, 1);
55  }
56  else
57  {
58  BitBuffer_SetBits(&cmdBuf, 1, 0);
59  }
60  BitBuffer_SetBits(&cmdBuf, 6, 0); // reserved
61  BitBuffer_SetBits(&cmdBuf, 16, Config->FontDpi);
62  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
63  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
64 }
65 
66 int HdffCmdOsdReset(int OsdDevice)
67 {
68  uint8_t cmdData[8];
69  BitBuffer_t cmdBuf;
70  osd_raw_cmd_t osd_cmd;
71 
72  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
73  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
74  osd_cmd.cmd_data = cmdData;
77  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
78  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
79 }
80 
81 
82 int HdffCmdOsdCreateDisplay(int OsdDevice, uint16_t Width, uint16_t Height,
83  HdffColorType_t ColorType, uint32_t * NewDisplay)
84 {
85  uint8_t cmdData[16];
86  uint8_t resultData[16];
87  BitBuffer_t cmdBuf;
88  osd_raw_cmd_t osd_cmd;
89  int err;
90 
91  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
92  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
93  osd_cmd.cmd_data = cmdData;
94  osd_cmd.result_data = resultData;
95  osd_cmd.result_len = sizeof(resultData);
98  BitBuffer_SetBits(&cmdBuf, 16, Width);
99  BitBuffer_SetBits(&cmdBuf, 16, Height);
100  BitBuffer_SetBits(&cmdBuf, 8, ColorType);
101  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
102  err = ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
103  *NewDisplay = HDFF_INVALID_HANDLE;
104  if (err == 0)
105  {
106  if (osd_cmd.result_len > 0)
107  {
108  if (resultData[2] == HDFF_MSG_TYPE_ANSWER)
109  {
110  *NewDisplay = (resultData[6] << 24)
111  | (resultData[7] << 16)
112  | (resultData[8] << 8)
113  | resultData[9];
114  }
115  else
116  err = -1;
117  }
118  }
119  return err;
120 }
121 
122 int HdffCmdOsdDeleteDisplay(int OsdDevice, uint32_t Display)
123 {
124  uint8_t cmdData[16];
125  BitBuffer_t cmdBuf;
126  osd_raw_cmd_t osd_cmd;
127 
128  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
129  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
130  osd_cmd.cmd_data = cmdData;
133  BitBuffer_SetBits(&cmdBuf, 32, Display);
134  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
135  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
136 }
137 
138 int HdffCmdOsdEnableDisplay(int OsdDevice, uint32_t Display, int Enable)
139 {
140  uint8_t cmdData[16];
141  BitBuffer_t cmdBuf;
142  osd_raw_cmd_t osd_cmd;
143 
144  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
145  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
146  osd_cmd.cmd_data = cmdData;
149  BitBuffer_SetBits(&cmdBuf, 32, Display);
150  if (Enable)
151  {
152  BitBuffer_SetBits(&cmdBuf, 1, 1);
153  }
154  else
155  {
156  BitBuffer_SetBits(&cmdBuf, 1, 0);
157  }
158  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
159  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
160 }
161 
162 int HdffCmdOsdSetDisplayOutputRectangle(int OsdDevice, uint32_t Display,
163  uint16_t X, uint16_t Y,
164  uint16_t Width, uint16_t Height)
165 {
166  uint8_t cmdData[20];
167  BitBuffer_t cmdBuf;
168  osd_raw_cmd_t osd_cmd;
169 
170  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
171  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
172  osd_cmd.cmd_data = cmdData;
175  BitBuffer_SetBits(&cmdBuf, 32, Display);
176  BitBuffer_SetBits(&cmdBuf, 16, X);
177  BitBuffer_SetBits(&cmdBuf, 16, Y);
178  BitBuffer_SetBits(&cmdBuf, 16, Width);
179  BitBuffer_SetBits(&cmdBuf, 16, Height);
180  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
181  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
182 }
183 
184 int HdffCmdOsdSetDisplayClippingArea(int OsdDevice, uint32_t Display,
185  int Enable, uint16_t X, uint16_t Y,
186  uint16_t Width, uint16_t Height)
187 {
188  uint8_t cmdData[20];
189  BitBuffer_t cmdBuf;
190  osd_raw_cmd_t osd_cmd;
191 
192  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
193  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
194  osd_cmd.cmd_data = cmdData;
197  BitBuffer_SetBits(&cmdBuf, 32, Display);
198  if (Enable)
199  {
200  BitBuffer_SetBits(&cmdBuf, 1, 1);
201  }
202  else
203  {
204  BitBuffer_SetBits(&cmdBuf, 1, 0);
205  }
206  BitBuffer_SetBits(&cmdBuf, 7, 0); // reserved
207  BitBuffer_SetBits(&cmdBuf, 16, X);
208  BitBuffer_SetBits(&cmdBuf, 16, Y);
209  BitBuffer_SetBits(&cmdBuf, 16, Width);
210  BitBuffer_SetBits(&cmdBuf, 16, Height);
211  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
212  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
213 }
214 
215 int HdffCmdOsdRenderDisplay(int OsdDevice, uint32_t Display)
216 {
217  uint8_t cmdData[16];
218  BitBuffer_t cmdBuf;
219  osd_raw_cmd_t osd_cmd;
220 
221  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
222  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
223  osd_cmd.cmd_data = cmdData;
226  BitBuffer_SetBits(&cmdBuf, 32, Display);
227  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
228  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
229 }
230 
231 int HdffCmdOsdSaveRegion(int OsdDevice, uint32_t Display,
232  uint16_t X, uint16_t Y,
233  uint16_t Width, uint16_t Height)
234 {
235  uint8_t cmdData[20];
236  BitBuffer_t cmdBuf;
237  osd_raw_cmd_t osd_cmd;
238 
239  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
240  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
241  osd_cmd.cmd_data = cmdData;
244  BitBuffer_SetBits(&cmdBuf, 32, Display);
245  BitBuffer_SetBits(&cmdBuf, 16, X);
246  BitBuffer_SetBits(&cmdBuf, 16, Y);
247  BitBuffer_SetBits(&cmdBuf, 16, Width);
248  BitBuffer_SetBits(&cmdBuf, 16, Height);
249  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
250  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
251 }
252 
253 int HdffCmdOsdRestoreRegion(int OsdDevice, uint32_t Display)
254 {
255  uint8_t cmdData[16];
256  BitBuffer_t cmdBuf;
257  osd_raw_cmd_t osd_cmd;
258 
259  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
260  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
261  osd_cmd.cmd_data = cmdData;
264  BitBuffer_SetBits(&cmdBuf, 32, Display);
265  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
266  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
267 }
268 
269 
270 int HdffCmdOsdCreatePalette(int OsdDevice, HdffColorType_t ColorType,
271  HdffColorFormat_t ColorFormat,
272  uint32_t NumColors, const uint32_t * Colors,
273  uint32_t * NewPalette)
274 {
275  uint8_t cmdData[1060];
276  uint8_t resultData[16];
277  BitBuffer_t cmdBuf;
278  osd_raw_cmd_t osd_cmd;
279  int i;
280  int err;
281 
282  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
283  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
284  osd_cmd.cmd_data = cmdData;
285  osd_cmd.result_data = resultData;
286  osd_cmd.result_len = sizeof(resultData);
289  BitBuffer_SetBits(&cmdBuf, 8, ColorType);
290  BitBuffer_SetBits(&cmdBuf, 8, ColorFormat);
291  if (NumColors > 256)
292  NumColors = 256;
293  BitBuffer_SetBits(&cmdBuf, 8, NumColors == 256 ? 0 : NumColors);
294  for (i = 0; i < NumColors; i++)
295  {
296  BitBuffer_SetBits(&cmdBuf, 32, Colors[i]);
297  }
298  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
299  err = ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
300  *NewPalette = HDFF_INVALID_HANDLE;
301  if (err == 0)
302  {
303  if (osd_cmd.result_len > 0)
304  {
305  if (resultData[2] == HDFF_MSG_TYPE_ANSWER)
306  {
307  *NewPalette = (resultData[6] << 24)
308  | (resultData[7] << 16)
309  | (resultData[8] << 8)
310  | resultData[9];
311  }
312  else
313  err = -1;
314  }
315  }
316  return err;
317 }
318 
319 int HdffCmdOsdDeletePalette(int OsdDevice, uint32_t Palette)
320 {
321  uint8_t cmdData[16];
322  BitBuffer_t cmdBuf;
323  osd_raw_cmd_t osd_cmd;
324 
325  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
326  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
327  osd_cmd.cmd_data = cmdData;
330  BitBuffer_SetBits(&cmdBuf, 32, Palette);
331  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
332  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
333 }
334 
335 int HdffCmdOsdSetDisplayPalette(int OsdDevice, uint32_t Display,
336  uint32_t Palette)
337 {
338  uint8_t cmdData[16];
339  BitBuffer_t cmdBuf;
340  osd_raw_cmd_t osd_cmd;
341 
342  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
343  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
344  osd_cmd.cmd_data = cmdData;
347  BitBuffer_SetBits(&cmdBuf, 32, Display);
348  BitBuffer_SetBits(&cmdBuf, 32, Palette);
349  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
350  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
351 }
352 
353 int HdffCmdOsdSetPaletteColors(int OsdDevice, uint32_t Palette,
354  HdffColorFormat_t ColorFormat,
355  uint8_t StartColor, uint32_t NumColors,
356  const uint32_t * Colors)
357 {
358  uint8_t cmdData[1060];
359  BitBuffer_t cmdBuf;
360  osd_raw_cmd_t osd_cmd;
361  int i;
362 
363  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
364  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
365  osd_cmd.cmd_data = cmdData;
368  BitBuffer_SetBits(&cmdBuf, 32, Palette);
369  BitBuffer_SetBits(&cmdBuf, 8, ColorFormat);
370  BitBuffer_SetBits(&cmdBuf, 8, StartColor);
371  if (NumColors > 256)
372  NumColors = 256;
373  BitBuffer_SetBits(&cmdBuf, 8, NumColors == 256 ? 0 : NumColors);
374  for (i = 0; i < NumColors; i++)
375  {
376  BitBuffer_SetBits(&cmdBuf, 32, Colors[i]);
377  }
378  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
379  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
380 }
381 
382 int HdffCmdOsdCreateFontFace(int OsdDevice, const uint8_t * FontData,
383  uint32_t DataSize, uint32_t * NewFontFace)
384 {
385  uint8_t cmdData[16];
386  uint8_t resultData[16];
387  BitBuffer_t cmdBuf;
388  osd_raw_cmd_t osd_cmd;
389  osd_raw_data_t osd_data;
390  int err;
391 
392  *NewFontFace = HDFF_INVALID_HANDLE;
393 
394  memset(&osd_data, 0, sizeof(osd_raw_data_t));
395  osd_data.data_buffer = FontData;
396  osd_data.data_length = DataSize;
397  err = ioctl(OsdDevice, OSD_RAW_DATA, &osd_data);
398  if (err != 0)
399  return err;
400 
401  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
402  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
403  osd_cmd.cmd_data = cmdData;
404  osd_cmd.result_data = resultData;
405  osd_cmd.result_len = sizeof(resultData);
408  BitBuffer_SetBits(&cmdBuf, 16, osd_data.data_handle);
409  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
410  err = ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
411  if (err == 0)
412  {
413  if (osd_cmd.result_len > 0)
414  {
415  if (resultData[2] == HDFF_MSG_TYPE_ANSWER)
416  {
417  *NewFontFace = (resultData[6] << 24)
418  | (resultData[7] << 16)
419  | (resultData[8] << 8)
420  | resultData[9];
421  }
422  else
423  err = -1;
424  }
425  }
426  return err;
427 }
428 
429 int HdffCmdOsdDeleteFontFace(int OsdDevice, uint32_t FontFace)
430 {
431  uint8_t cmdData[16];
432  BitBuffer_t cmdBuf;
433  osd_raw_cmd_t osd_cmd;
434 
435  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
436  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
437  osd_cmd.cmd_data = cmdData;
440  BitBuffer_SetBits(&cmdBuf, 32, FontFace);
441  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
442  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
443 }
444 
445 int HdffCmdOsdCreateFont(int OsdDevice, uint32_t FontFace, uint32_t Size,
446  uint32_t * NewFont)
447 {
448  uint8_t cmdData[16];
449  uint8_t resultData[16];
450  BitBuffer_t cmdBuf;
451  osd_raw_cmd_t osd_cmd;
452  int err;
453 
454  *NewFont = HDFF_INVALID_HANDLE;
455 
456  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
457  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
458  osd_cmd.cmd_data = cmdData;
459  osd_cmd.result_data = resultData;
460  osd_cmd.result_len = sizeof(resultData);
463  BitBuffer_SetBits(&cmdBuf, 32, FontFace);
464  BitBuffer_SetBits(&cmdBuf, 32, Size);
465  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
466  err = ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
467  if (err == 0)
468  {
469  if (osd_cmd.result_len > 0)
470  {
471  if (resultData[2] == HDFF_MSG_TYPE_ANSWER)
472  {
473  *NewFont = (resultData[6] << 24)
474  | (resultData[7] << 16)
475  | (resultData[8] << 8)
476  | resultData[9];
477  }
478  else
479  err = -1;
480  }
481  }
482  return err;
483 }
484 
485 int HdffCmdOsdDeleteFont(int OsdDevice, uint32_t Font)
486 {
487  uint8_t cmdData[16];
488  BitBuffer_t cmdBuf;
489  osd_raw_cmd_t osd_cmd;
490 
491  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
492  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
493  osd_cmd.cmd_data = cmdData;
496  BitBuffer_SetBits(&cmdBuf, 32, Font);
497  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
498  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
499 }
500 
501 
502 int HdffCmdOsdDrawRectangle(int OsdDevice, uint32_t Display, uint16_t X,
503  uint16_t Y, uint16_t Width, uint16_t Height,
504  uint32_t Color)
505 {
506  uint8_t cmdData[24];
507  BitBuffer_t cmdBuf;
508  osd_raw_cmd_t osd_cmd;
509 
510  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
511  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
512  osd_cmd.cmd_data = cmdData;
515  BitBuffer_SetBits(&cmdBuf, 32, Display);
516  BitBuffer_SetBits(&cmdBuf, 16, X);
517  BitBuffer_SetBits(&cmdBuf, 16, Y);
518  BitBuffer_SetBits(&cmdBuf, 16, Width);
519  BitBuffer_SetBits(&cmdBuf, 16, Height);
520  BitBuffer_SetBits(&cmdBuf, 32, Color);
521  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
522  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
523 }
524 
525 int HdffCmdOsdDrawEllipse(int OsdDevice, uint32_t Display, uint16_t CX,
526  uint16_t CY, uint16_t RadiusX, uint16_t RadiusY,
527  uint32_t Color, uint32_t Flags)
528 {
529  uint8_t cmdData[28];
530  BitBuffer_t cmdBuf;
531  osd_raw_cmd_t osd_cmd;
532 
533  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
534  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
535  osd_cmd.cmd_data = cmdData;
538  BitBuffer_SetBits(&cmdBuf, 32, Display);
539  BitBuffer_SetBits(&cmdBuf, 16, CX);
540  BitBuffer_SetBits(&cmdBuf, 16, CY);
541  BitBuffer_SetBits(&cmdBuf, 16, RadiusX);
542  BitBuffer_SetBits(&cmdBuf, 16, RadiusY);
543  BitBuffer_SetBits(&cmdBuf, 32, Color);
544  BitBuffer_SetBits(&cmdBuf, 32, Flags);
545  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
546  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
547 }
548 
549 int HdffCmdOsdDrawSlope(int OsdDevice, uint32_t Display, uint16_t X,
550  uint16_t Y, uint16_t Width, uint16_t Height,
551  uint32_t Color, uint32_t Type)
552 {
553  uint8_t cmdData[28];
554  BitBuffer_t cmdBuf;
555  osd_raw_cmd_t osd_cmd;
556 
557  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
558  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
559  osd_cmd.cmd_data = cmdData;
562  BitBuffer_SetBits(&cmdBuf, 32, Display);
563  BitBuffer_SetBits(&cmdBuf, 16, X);
564  BitBuffer_SetBits(&cmdBuf, 16, Y);
565  BitBuffer_SetBits(&cmdBuf, 16, Width);
566  BitBuffer_SetBits(&cmdBuf, 16, Height);
567  BitBuffer_SetBits(&cmdBuf, 32, Color);
568  BitBuffer_SetBits(&cmdBuf, 32, Type);
569  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
570  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
571 }
572 
573 int HdffCmdOsdDrawText(int OsdDevice, uint32_t Display, uint32_t Font,
574  uint16_t X, uint16_t Y, const char * Text,
575  uint32_t Color)
576 {
577  uint8_t cmdData[1060];
578  BitBuffer_t cmdBuf;
579  osd_raw_cmd_t osd_cmd;
580  int i;
581  int length;
582 
583  length = 0;
584  while (Text[length])
585  {
586  length++;
587  }
588  if (length > 980)
589  length = 980;
590 
591  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
592  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
593  osd_cmd.cmd_data = cmdData;
596  BitBuffer_SetBits(&cmdBuf, 32, Display);
597  BitBuffer_SetBits(&cmdBuf, 32, Font);
598  BitBuffer_SetBits(&cmdBuf, 16, X);
599  BitBuffer_SetBits(&cmdBuf, 16, Y);
600  BitBuffer_SetBits(&cmdBuf, 32, Color);
601  BitBuffer_SetBits(&cmdBuf, 16, length);
602  for (i = 0; i < length; i++)
603  {
604  BitBuffer_SetBits(&cmdBuf, 8, Text[i]);
605  }
606  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
607  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
608 }
609 
610 int HdffCmdOsdDrawUtf8Text(int OsdDevice, uint32_t Display, uint32_t Font,
611  uint16_t X, uint16_t Y, const char * Text,
612  uint32_t Color)
613 {
614  uint8_t cmdData[1060];
615  BitBuffer_t cmdBuf;
616  osd_raw_cmd_t osd_cmd;
617  int i;
618  int length;
619 
620  length = 0;
621  while (Text[length])
622  {
623  length++;
624  }
625  if (length > 980)
626  length = 980;
627 
628  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
629  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
630  osd_cmd.cmd_data = cmdData;
633  BitBuffer_SetBits(&cmdBuf, 32, Display);
634  BitBuffer_SetBits(&cmdBuf, 32, Font);
635  BitBuffer_SetBits(&cmdBuf, 16, X);
636  BitBuffer_SetBits(&cmdBuf, 16, Y);
637  BitBuffer_SetBits(&cmdBuf, 32, Color);
638  BitBuffer_SetBits(&cmdBuf, 16, length);
639  for (i = 0; i < length; i++)
640  {
641  BitBuffer_SetBits(&cmdBuf, 8, Text[i]);
642  }
643  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
644  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
645 }
646 
647 int HdffCmdOsdDrawWideText(int OsdDevice, uint32_t Display, uint32_t Font,
648  uint16_t X, uint16_t Y, const uint16_t * Text,
649  uint32_t Color)
650 {
651  uint8_t cmdData[1060];
652  BitBuffer_t cmdBuf;
653  osd_raw_cmd_t osd_cmd;
654  int i;
655  int length;
656 
657  length = 0;
658  while (Text[length])
659  {
660  length++;
661  }
662  if (length > 480)
663  length = 480;
664 
665  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
666  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
667  osd_cmd.cmd_data = cmdData;
670  BitBuffer_SetBits(&cmdBuf, 32, Display);
671  BitBuffer_SetBits(&cmdBuf, 32, Font);
672  BitBuffer_SetBits(&cmdBuf, 16, X);
673  BitBuffer_SetBits(&cmdBuf, 16, Y);
674  BitBuffer_SetBits(&cmdBuf, 32, Color);
675  BitBuffer_SetBits(&cmdBuf, 16, length);
676  for (i = 0; i < length; i++)
677  {
678  BitBuffer_SetBits(&cmdBuf, 16, Text[i]);
679  }
680  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
681  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
682 }
683 
684 int HdffCmdOsdDrawBitmap(int OsdDevice, uint32_t Display, uint16_t X,
685  uint16_t Y, const uint8_t * Bitmap, uint16_t BmpWidth,
686  uint16_t BmpHeight, uint32_t BmpSize,
687  HdffColorType_t ColorType, uint32_t Palette)
688 {
689  uint8_t cmdData[32];
690  BitBuffer_t cmdBuf;
691  osd_raw_cmd_t osd_cmd;
692  osd_raw_data_t osd_data;
693  int err;
694 
695  memset(&osd_data, 0, sizeof(osd_raw_data_t));
696  osd_data.data_buffer = Bitmap;
697  osd_data.data_length = BmpSize;
698  err = ioctl(OsdDevice, OSD_RAW_DATA, &osd_data);
699  if (err != 0)
700  return err;
701 
702  BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
703  memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
704  osd_cmd.cmd_data = cmdData;
707  BitBuffer_SetBits(&cmdBuf, 32, Display);
708  BitBuffer_SetBits(&cmdBuf, 16, X);
709  BitBuffer_SetBits(&cmdBuf, 16, Y);
710  BitBuffer_SetBits(&cmdBuf, 16, BmpWidth);
711  BitBuffer_SetBits(&cmdBuf, 16, BmpHeight);
712  BitBuffer_SetBits(&cmdBuf, 8, ColorType);
713  BitBuffer_SetBits(&cmdBuf, 6, 0); // reserved
714  BitBuffer_SetBits(&cmdBuf, 2, 0); // uncompressed
715  BitBuffer_SetBits(&cmdBuf, 32, Palette);
716  BitBuffer_SetBits(&cmdBuf, 16, osd_data.data_handle);
717  BitBuffer_SetBits(&cmdBuf, 32, 0);
718  osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
719  return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
720 }
int HdffCmdOsdDeleteFontFace(int OsdDevice, uint32_t FontFace)
Definition: hdffcmd_osd.c:429
void BitBuffer_SetBits(BitBuffer_t *BitBuffer, int NumBits, uint32_t Data)
Definition: bitbuffer.c:37
int HdffCmdOsdCreateFont(int OsdDevice, uint32_t FontFace, uint32_t Size, uint32_t *NewFont)
Definition: hdffcmd_osd.c:445
int HdffCmdOsdReset(int OsdDevice)
Definition: hdffcmd_osd.c:66
const void * cmd_data
Definition: hdffcmd_base.h:31
int HdffCmdOsdCreateDisplay(int OsdDevice, uint16_t Width, uint16_t Height, HdffColorType_t ColorType, uint32_t *NewDisplay)
Definition: hdffcmd_osd.c:82
int HdffCmdOsdRenderDisplay(int OsdDevice, uint32_t Display)
Definition: hdffcmd_osd.c:215
#define HDFF_INVALID_HANDLE
Definition: hdffcmd_osd.h:28
uint32_t HdffCmdSetLength(BitBuffer_t *MsgBuf)
Definition: hdffcmd_base.c:36
HdffColorFormat_t
Definition: hdffcmd_osd.h:60
int HdffCmdOsdConfigure(int OsdDevice, const HdffOsdConfig_t *Config)
Definition: hdffcmd_osd.c:33
int HdffCmdOsdDeleteFont(int OsdDevice, uint32_t Font)
Definition: hdffcmd_osd.c:485
void BitBuffer_Init(BitBuffer_t *BitBuffer, uint8_t *Data, uint32_t MaxLength)
Definition: bitbuffer.c:28
void * result_data
Definition: hdffcmd_base.h:33
int HdffCmdOsdDeletePalette(int OsdDevice, uint32_t Palette)
Definition: hdffcmd_osd.c:319
int HdffCmdOsdDrawEllipse(int OsdDevice, uint32_t Display, uint16_t CX, uint16_t CY, uint16_t RadiusX, uint16_t RadiusY, uint32_t Color, uint32_t Flags)
Definition: hdffcmd_osd.c:525
int HdffCmdOsdSetDisplayClippingArea(int OsdDevice, uint32_t Display, int Enable, uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height)
Definition: hdffcmd_osd.c:184
void HdffCmdBuildHeader(BitBuffer_t *MsgBuf, HdffMessageType_t MsgType, HdffMessageGroup_t MsgGroup, HdffMessageId_t MsgId)
Definition: hdffcmd_base.c:26
int HdffCmdOsdDrawText(int OsdDevice, uint32_t Display, uint32_t Font, uint16_t X, uint16_t Y, const char *Text, uint32_t Color)
Definition: hdffcmd_osd.c:573
int HdffCmdOsdCreateFontFace(int OsdDevice, const uint8_t *FontData, uint32_t DataSize, uint32_t *NewFontFace)
Definition: hdffcmd_osd.c:382
int HdffCmdOsdDrawWideText(int OsdDevice, uint32_t Display, uint32_t Font, uint16_t X, uint16_t Y, const uint16_t *Text, uint32_t Color)
Definition: hdffcmd_osd.c:647
#define OSD_RAW_CMD
Definition: hdffcmd_base.h:43
int HdffCmdOsdRestoreRegion(int OsdDevice, uint32_t Display)
Definition: hdffcmd_osd.c:253
const void * data_buffer
Definition: hdffcmd_base.h:38
int HdffCmdOsdCreatePalette(int OsdDevice, HdffColorType_t ColorType, HdffColorFormat_t ColorFormat, uint32_t NumColors, const uint32_t *Colors, uint32_t *NewPalette)
Definition: hdffcmd_osd.c:270
static const cCursesFont Font
Definition: skincurses.c:30
int HdffCmdOsdDrawSlope(int OsdDevice, uint32_t Display, uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height, uint32_t Color, uint32_t Type)
Definition: hdffcmd_osd.c:549
HdffColorType_t
Definition: hdffcmd_osd.h:46
int HdffCmdOsdDeleteDisplay(int OsdDevice, uint32_t Display)
Definition: hdffcmd_osd.c:122
int HdffCmdOsdEnableDisplay(int OsdDevice, uint32_t Display, int Enable)
Definition: hdffcmd_osd.c:138
int HdffCmdOsdSetDisplayOutputRectangle(int OsdDevice, uint32_t Display, uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height)
Definition: hdffcmd_osd.c:162
int HdffCmdOsdDrawBitmap(int OsdDevice, uint32_t Display, uint16_t X, uint16_t Y, const uint8_t *Bitmap, uint16_t BmpWidth, uint16_t BmpHeight, uint32_t BmpSize, HdffColorType_t ColorType, uint32_t Palette)
Definition: hdffcmd_osd.c:684
int HdffCmdOsdSetPaletteColors(int OsdDevice, uint32_t Palette, HdffColorFormat_t ColorFormat, uint8_t StartColor, uint32_t NumColors, const uint32_t *Colors)
Definition: hdffcmd_osd.c:353
uint16_t FontDpi
Definition: hdffcmd_osd.h:43
int HdffCmdOsdSetDisplayPalette(int OsdDevice, uint32_t Display, uint32_t Palette)
Definition: hdffcmd_osd.c:335
#define OSD_RAW_DATA
Definition: hdffcmd_base.h:44
int HdffCmdOsdDrawUtf8Text(int OsdDevice, uint32_t Display, uint32_t Font, uint16_t X, uint16_t Y, const char *Text, uint32_t Color)
Definition: hdffcmd_osd.c:610
int HdffCmdOsdDrawRectangle(int OsdDevice, uint32_t Display, uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height, uint32_t Color)
Definition: hdffcmd_osd.c:502
int HdffCmdOsdSaveRegion(int OsdDevice, uint32_t Display, uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height)
Definition: hdffcmd_osd.c:231