[U-Boot] [PATCH 2/2] cmp_bmp: allow negative X, Y values for display command

The 'bmp display' command accepts optional X and Y values for the position of the image to be displayed. Change the code which parses the command line to accept negative values.
This feature is useful if you want to use a frame buffer for the console, and you want a banner displayed on the top of the screen that never scrolls off. This can be accomplished by declaring that the width and height of the video screen is smaller than it really is, and then drawing an image in the undeclared area.
For example, if you have 1280x1024 monitor, and you want to display a banner on the top of the screen that's 100 pixels tall, then video_hw_init() should say that display is really 1280x924, and then the banner should be drawn at position (0, -100).
Signed-off-by: Timur Tabi timur@freescale.com --- common/cmd_bmp.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/cmd_bmp.c b/common/cmd_bmp.c index d51cc55..06c1547 100644 --- a/common/cmd_bmp.c +++ b/common/cmd_bmp.c @@ -122,8 +122,8 @@ static int do_bmp_display(cmd_tbl_t * cmdtp, int flag, int argc, char * const ar break; case 4: addr = simple_strtoul(argv[1], NULL, 16); - x = simple_strtoul(argv[2], NULL, 10); - y = simple_strtoul(argv[3], NULL, 10); + x = simple_strtol(argv[2], NULL, 10); + y = simple_strtol(argv[3], NULL, 10); break; default: return cmd_usage(cmdtp);

Hi Timur,
The 'bmp display' command accepts optional X and Y values for the position of the image to be displayed. Change the code which parses the command line to accept negative values.
This feature is useful if you want to use a frame buffer for the console, and you want a banner displayed on the top of the screen that never scrolls off. This can be accomplished by declaring that the width and height of the video screen is smaller than it really is, and then drawing an image in the undeclared area.
For example, if you have 1280x1024 monitor, and you want to display a banner on the top of the screen that's 100 pixels tall, then video_hw_init() should say that display is really 1280x924, and then the banner should be drawn at position (0, -100).
Ugh. I have to admit that I really dislike this patch. What you effectively do is to erase the "aboluteness" of coordinates. Instead of the current 1:1 correspondence between a pixel coordinate and its location on the physical display, you introduce virtual coordinates without any possibility to inquire about the virtual coordinate system in use.
Currently if we display an image at (0, 0) we can be sure that it appears at the edge of the display. With your system one cannot tell without knowing the complete context.
Can't you come up with a scheme which does not destroy this valuable property of our coordinates?
Cheers Detlev

Detlev Zundel wrote:
Can't you come up with a scheme which does not destroy this valuable property of our coordinates?
I'm only doing two things:
1) Exposing a feature of the existing code. Notice that I only had to change two lines in the cmd_bmp code, not any of the core bitmap code, which already takes signed integers.
2) Trying to use the existing bitmap code to do the same thing that we do with the Freescale-specific bitmap code.
If you can tell me how I can display a logo on top of the screen, and have all of the boot text appear below the logo, I'll be happy to do that instead. The logo will then scroll off the top of the screen, but that's okay.

Hi Timur,
Detlev Zundel wrote:
Can't you come up with a scheme which does not destroy this valuable property of our coordinates?
I'm only doing two things:
- Exposing a feature of the existing code. Notice that I only had to change
two lines in the cmd_bmp code, not any of the core bitmap code, which already takes signed integers.
Yes, I fully expected such an answer. Please show me the "existing feature" which started to leak in such virtual coordinates into the code. We should take a look at this and re-evaluate it.
- Trying to use the existing bitmap code to do the same thing that we do
with the Freescale-specific bitmap code.
If you can tell me how I can display a logo on top of the screen, and have all of the boot text appear below the logo, I'll be happy to do that instead. The logo will then scroll off the top of the screen, but that's okay.
We can discuss this once I see the code that makes virtual coordinates neccessary.
Cheers Detlev

On Aug 27, 2010, at 8:14 AM, "Detlev Zundel" dzu@denx.de wrote:
We can discuss this once I see the code that makes virtual coordinates
If you can help me figure out how to get the boot text to appear below the logo, I won't need to use virtual coordinates.

Dear Timur,
On Aug 27, 2010, at 8:14 AM, "Detlev Zundel"dzu@denx.de wrote:
We can discuss this once I see the code that makes virtual coordinates
If you can help me figure out how to get the boot text to appear below the logo, I won't need to use virtual coordinates.
1. would it be possible to output several line-feeds before u-boot starts its output?
2. would it be possible to just manipulate the initial Y for text output?
3. most elegant, however, would be to add a scroll area feature...
just my 0.001 € ;)
Reinhard

On Aug 27, 2010, at 9:10 AM, "Reinhard Meyer" u-boot@emk-elektronik.de wrote:
- would it be possible to just manipulate the initial Y for text output?
I'll try this approach. It should be simple enough.

I'm rescinding this patch. I have some new code that doesn't need this hack.
On Wed, Aug 25, 2010 at 4:36 PM, Timur Tabi timur@freescale.com wrote:
The 'bmp display' command accepts optional X and Y values for the position of the image to be displayed. Change the code which parses the command line to accept negative values.
This feature is useful if you want to use a frame buffer for the console, and you want a banner displayed on the top of the screen that never scrolls off. This can be accomplished by declaring that the width and height of the video screen is smaller than it really is, and then drawing an image in the undeclared area.
For example, if you have 1280x1024 monitor, and you want to display a banner on the top of the screen that's 100 pixels tall, then video_hw_init() should say that display is really 1280x924, and then the banner should be drawn at position (0, -100).
Signed-off-by: Timur Tabi timur@freescale.com
participants (4)
-
Detlev Zundel
-
Reinhard Meyer
-
Tabi Timur-B04825
-
Timur Tabi