-- 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;