Leds da porta paralela com interface
Publicado por mazin (última atualização em 14/03/2010)
[ Hits: 6.438 ]
Este script liga e desliga os leds conectados à porta paralela do computador.
/*
************************************************************************************************************
* Programa originalmente (modo texto) escrito por Angelito Monteiro Goulart *
* Modificado para GTK+ (modo grafico) por mazinsw <mazin.z@hotmail.com> *
************************************************************************************************************
* Este programa acende leds conectados na porta paralela do pino 2 até o 8. *
* os leds são associados a resistores de 470R para segurança da porta, e o GND vai do pino 18 até o 25 *
************************************************************************************************************
* TERMO DE RESPONSABILIDADE *
* Não me responsabilizo por nenhum dano causado tanto no equipamento, *
* como na montagem/instalação inadequada dos circuitos. *
************************************************************************************************************
* para compilar é necessário a biblioteca GTK+ 2.0 ca so não tenha 'apt-get install libgtk2.0-dev' *
* comando para compilar gcc -Wall -o gparport gparport.c `pkg-config --libs --cflags gtk+-2.0` *
* para executar use sudo ./gparport *
************************************************************************************************************
***********************(<-Por favor matenha os creditos do programa caso o modifique->)*********************
************************************************************************************************************
* veja o script original do Angelito Monteiro Goulart. *
* http://www.vivaolinux.com.br/script/Acendedor-de-leds-pela-porta-paralela *
************************************************************************************************************
*/
#include <math.h>
#include <cairo.h>
#include <gtk/gtk.h>
#include <sys/io.h>
GtkWidget *ledbutton[8];
int led[8];
static gboolean on_expose_event(GtkWidget *widget,
GdkEventExpose *event, gpointer data)
{
//biblioteca cairo responsável pelo desenho na janela
cairo_t *cr;
cr = gdk_cairo_create(widget->window);
cairo_set_source_rgb(cr, 0, 0, 0);
int i;
for(i = 0; i < 8; i++)
{
//desenhando os leds
if(led[i])
{
cairo_set_source_rgb(cr, 255, 0, 0);
}
else
{
cairo_set_source_rgb(cr, 0, 0, 0);
}
cairo_arc(cr, 60*i + 30, 25, 15, 0, 2*M_PI);
cairo_fill(cr);
}
cairo_destroy(cr);
return FALSE;
}
void buttonclicked(GtkWidget *widget, gpointer button)
{
GdkRegion *region;
int porta;
int i;
for(i = 0; i < 8; i++)
{
if(ledbutton[i] == button)
{
porta = inb(0x378);
//caso esteja ligado
if(led[i])
{
led[i] = 0;
outb(porta - pow(2, i), 0x378);//desliga o led (i + 1)
}
else
{
led[i] = 1;//led ligado
outb(porta + pow(2, i), 0x378);//liga o led (i + 1)
}
//chama o evento de desenho dos leds
region = gdk_drawable_get_clip_region(widget->window);
gdk_window_invalidate_region(widget->window, region, TRUE);
}
}
}
int main( int argc, char *args[])
{
GtkWidget *window;
GtkWidget *frame;
ioperm(0x378, 3, 1);//inicia a porta paralela
outb(0x00, 0x378);
gtk_init(&argc, &args);//inicia o gtk
//criando a janela
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Porta paralela");
gtk_window_set_default_size(GTK_WINDOW(window), 480, 90);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
//criando o painel
frame = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), frame);
char label[6];
int i;
for(i = 0; i < 8; i++)
{
//criando os botoes
sprintf(label, "Led %d", i + 1);
ledbutton[i] = gtk_button_new_with_label(label);
gtk_widget_set_size_request(ledbutton[i], 60, 35);
gtk_fixed_put(GTK_FIXED(frame), ledbutton[i], 60*i, 55);
led[i] = 0; //led desligado
//comando dos botoes
g_signal_connect(ledbutton[i], "clicked",
G_CALLBACK(buttonclicked), ledbutton[i]);
}
//evento acionado assim que a janela é exposta
g_signal_connect(G_OBJECT(window), "expose-event",
G_CALLBACK(on_expose_event), NULL);
//evento acionado quando clicamos em fechar
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_set_app_paintable(window, TRUE);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
Simulador de Escalonamento de Processos
Algoritmo de ordenação Quick Sort
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?









