Various projects using Raspberry Pi
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

131 lines
3.8 KiB

-- raspilcd, a simple tool to display bmp pictures & text on a ST7565 LCD
-- Copyright (C) 2014 Torsten Meissner
--
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see http://www.gnu.org/licenses/.
with bcm2835_h;
with st7565lcd;
with Interfaces;
use Interfaces;
with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Streams.Stream_IO;
with Ada.Command_Line;
use Ada.Command_Line;
procedure raspilcd is
-- shorter names for packages
package LCD renames st7565lcd;
package IOS renames Ada.Streams.Stream_IO;
-- stream.io definitions
My_File : IOS.FILE_TYPE;
My_File_Access : IOS.STREAM_ACCESS;
-- picture data
bmp_picture : LCD.t_bmp_picture;
-- lcd pixel array
lcd_data : LCD.t_lcd_array;
-- exception handling
cli_exception : exception;
begin
-- command line argument error
if Argument_Count = 0 or Argument_Count > 2 or
(Argument_Count = 1 and Argument(1) = "-i") or
(Argument_Count = 2 and Argument(1) /= "-i") then
raise cli_exception;
end if;
-- open picture file
declare
filename : string := Argument(Argument_Count);
begin
IOS.Open(My_File, IOS.In_File, filename);
My_File_Access := IOS.Stream(My_File);
end;
-- read in picture
LCD.read_bmp(file => My_File, file_access => My_File_Access, bmp_picture => bmp_picture);
-- print bmp header info
if Argument(1) = "-i" then
put_Line(" width: " & Integer'Image(bmp_picture.header.biWidth));
put_Line(" height: " & Integer'Image(bmp_picture.header.biHeight));
put_Line(" color depth: " & Integer'Image(Integer(bmp_picture.header.biBitCount)));
put_Line(" compression: " & Integer'Image(Integer(bmp_picture.header.biCompression)));
end if;
-- close picture file
Ada.Streams.Stream_IO.Close(My_File);
-- convert bmp to lcd matrix
lcd_data := LCD.bmp_to_lcd(bmp_picture);
-- load bcm2835 lib
-- print picture and some text on lcd
if integer(bcm2835_h.bcm2835_init) /= 0 then
LCD.io_init;
LCD.lcd_init;
LCD.lcd_picture(xpos => 0, ypos => 0, picture => lcd_data);
--bcm2835_h.bcm2835_delay(5000);
--LCD.lcd_clear;
--LCD.lcd_ascii57_string(xpos => 0, ypos => 0, data => "raspiFPGA 0.1");
--LCD.lcd_ascii57_string(xpos => 0, ypos => 1, data => "(c) raspiDEV 2013");
-- close library
if integer(bcm2835_h.bcm2835_close) = 0 then
put_line("Error while closing BCM2835 library");
end if;
end if;
-- exception handling
exception
when cli_exception | CONSTRAINT_ERROR =>
put_line(LCD.exception_head);
put_line("usage: ./raspilcd [option] BMP-FILE (as root)");
put_line(" -i: show bmp info");
when LCD.bmp_exception =>
put_line(LCD.exception_head);
put_line("error: malformed BMP-FILE (valid: 128x64, no compression, 32bpp)");
when LCD.mask_exception =>
put_line(LCD.exception_head);
put_line("error: malformed BMP color mask");
when NAME_ERROR =>
put_line(LCD.exception_head);
put_line("error: Could not find bmp file");
end raspilcd;