vdr 2.6.3
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
33int 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
66int 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
82int 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
122int 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
138int 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
162int 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
184int 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
215int 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
231int 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
253int 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
270int 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
319int 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
335int 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
353int 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
382int 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
429int 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
445int 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
485int 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
502int 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
525int 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
549int 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
573int 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
610int 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
647int 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
684int 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}
void BitBuffer_Init(BitBuffer_t *BitBuffer, uint8_t *Data, uint32_t MaxLength)
Definition: bitbuffer.c:28
void BitBuffer_SetBits(BitBuffer_t *BitBuffer, int NumBits, uint32_t Data)
Definition: bitbuffer.c:37
void HdffCmdBuildHeader(BitBuffer_t *MsgBuf, HdffMessageType_t MsgType, HdffMessageGroup_t MsgGroup, HdffMessageId_t MsgId)
Definition: hdffcmd_base.c:26
uint32_t HdffCmdSetLength(BitBuffer_t *MsgBuf)
Definition: hdffcmd_base.c:36
#define OSD_RAW_CMD
Definition: hdffcmd_base.h:43
#define OSD_RAW_DATA
Definition: hdffcmd_base.h:44
@ HDFF_MSG_GROUP_OSD
Definition: hdffcmd_defs.h:41
@ HDFF_MSG_TYPE_COMMAND
Definition: hdffcmd_defs.h:29
@ HDFF_MSG_TYPE_ANSWER
Definition: hdffcmd_defs.h:30
@ HDFF_MSG_OSD_DELETE_DISPLAY
Definition: hdffcmd_defs.h:86
@ HDFF_MSG_OSD_SET_PALETTE_COLORS
Definition: hdffcmd_defs.h:96
@ HDFF_MSG_OSD_CREATE_DISPLAY
Definition: hdffcmd_defs.h:85
@ HDFF_MSG_OSD_DRAW_UTF8_TEXT
Definition: hdffcmd_defs.h:109
@ HDFF_MSG_OSD_DRAW_TEXT
Definition: hdffcmd_defs.h:106
@ HDFF_MSG_OSD_DRAW_BITMAP
Definition: hdffcmd_defs.h:108
@ HDFF_MSG_OSD_SET_DISPLAY_PALETTE
Definition: hdffcmd_defs.h:95
@ HDFF_MSG_OSD_DRAW_RECTANGLE
Definition: hdffcmd_defs.h:102
@ HDFF_MSG_OSD_DELETE_PALETTE
Definition: hdffcmd_defs.h:94
@ HDFF_MSG_OSD_CREATE_FONT_FACE
Definition: hdffcmd_defs.h:97
@ HDFF_MSG_OSD_DELETE_FONT_FACE
Definition: hdffcmd_defs.h:98
@ HDFF_MSG_OSD_CREATE_FONT
Definition: hdffcmd_defs.h:99
@ HDFF_MSG_OSD_DRAW_WIDE_TEXT
Definition: hdffcmd_defs.h:107
@ HDFF_MSG_OSD_DELETE_FONT
Definition: hdffcmd_defs.h:100
@ HDFF_MSG_OSD_SAVE_REGION
Definition: hdffcmd_defs.h:91
@ HDFF_MSG_OSD_RESTORE_REGION
Definition: hdffcmd_defs.h:92
@ HDFF_MSG_OSD_SET_DISPLAY_OUTPUT_RECTANGLE
Definition: hdffcmd_defs.h:88
@ HDFF_MSG_OSD_CREATE_PALETTE
Definition: hdffcmd_defs.h:93
@ HDFF_MSG_OSD_RESET
Definition: hdffcmd_defs.h:84
@ HDFF_MSG_OSD_SET_DISPLAY_CLIPPLING_AREA
Definition: hdffcmd_defs.h:89
@ HDFF_MSG_OSD_DRAW_SLOPE
Definition: hdffcmd_defs.h:105
@ HDFF_MSG_OSD_DRAW_ELLIPSE
Definition: hdffcmd_defs.h:104
@ HDFF_MSG_OSD_ENABLE_DISPLAY
Definition: hdffcmd_defs.h:87
@ HDFF_MSG_OSD_RENDER_DISPLAY
Definition: hdffcmd_defs.h:90
@ HDFF_MSG_OSD_CONFIGURE
Definition: hdffcmd_defs.h:83
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 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
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
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 HdffCmdOsdCreatePalette(int OsdDevice, HdffColorType_t ColorType, HdffColorFormat_t ColorFormat, uint32_t NumColors, const uint32_t *Colors, uint32_t *NewPalette)
Definition: hdffcmd_osd.c:270
int HdffCmdOsdDeleteDisplay(int OsdDevice, uint32_t Display)
Definition: hdffcmd_osd.c:122
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 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 HdffCmdOsdDeleteFont(int OsdDevice, uint32_t Font)
Definition: hdffcmd_osd.c:485
int HdffCmdOsdRestoreRegion(int OsdDevice, uint32_t Display)
Definition: hdffcmd_osd.c:253
int HdffCmdOsdCreateDisplay(int OsdDevice, uint16_t Width, uint16_t Height, HdffColorType_t ColorType, uint32_t *NewDisplay)
Definition: hdffcmd_osd.c:82
int HdffCmdOsdDeletePalette(int OsdDevice, uint32_t Palette)
Definition: hdffcmd_osd.c:319
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 HdffCmdOsdCreateFont(int OsdDevice, uint32_t FontFace, uint32_t Size, uint32_t *NewFont)
Definition: hdffcmd_osd.c:445
int HdffCmdOsdSaveRegion(int OsdDevice, uint32_t Display, uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height)
Definition: hdffcmd_osd.c:231
int HdffCmdOsdConfigure(int OsdDevice, const HdffOsdConfig_t *Config)
Definition: hdffcmd_osd.c:33
int HdffCmdOsdDeleteFontFace(int OsdDevice, uint32_t FontFace)
Definition: hdffcmd_osd.c:429
int HdffCmdOsdEnableDisplay(int OsdDevice, uint32_t Display, int Enable)
Definition: hdffcmd_osd.c:138
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
int HdffCmdOsdSetDisplayPalette(int OsdDevice, uint32_t Display, uint32_t Palette)
Definition: hdffcmd_osd.c:335
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
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 HdffCmdOsdReset(int OsdDevice)
Definition: hdffcmd_osd.c:66
int HdffCmdOsdCreateFontFace(int OsdDevice, const uint8_t *FontData, uint32_t DataSize, uint32_t *NewFontFace)
Definition: hdffcmd_osd.c:382
int HdffCmdOsdRenderDisplay(int OsdDevice, uint32_t Display)
Definition: hdffcmd_osd.c:215
HdffColorType_t
Definition: hdffcmd_osd.h:47
#define HDFF_INVALID_HANDLE
Definition: hdffcmd_osd.h:28
HdffColorFormat_t
Definition: hdffcmd_osd.h:61
static const cCursesFont Font
Definition: skincurses.c:31
uint16_t FontDpi
Definition: hdffcmd_osd.h:43
void * result_data
Definition: hdffcmd_base.h:33
const void * cmd_data
Definition: hdffcmd_base.h:31
const void * data_buffer
Definition: hdffcmd_base.h:38