#include <gtk/gtk.h>
#include <string.h>
#include
<stdio.h>
#include
<stdlib.h>
#include
<unistd.h>
#include
<sys/types.h>
#include
<sys/stat.h>
#include
<fcntl.h>
#include
<termios.h>
#include
<errno.h>
int serial_fd;
int init_serial();
void closeApp ( GtkWidget *window, gpointer data)
{
gtk_main_quit();
}
void send_button_clicked (GtkWidget *button, gpointer data)
{
const char *send_text =
gtk_entry_get_text(GTK_ENTRY((GtkWidget *) data));
char buf[512];
memset(buf, '\0',
sizeof(buf)/sizeof(buf));
strcpy(buf,send_text);
int len = strlen(buf);
int send_number = write (serial_fd, buf,
len);
}
void receive_button_clicked (GtkWidget *button, gpointer
data)
{
int read_number;
char buffer[512];
memset(buffer,'\0',sizeof(buffer)/sizeof(char));
if ( read_number =
read(serial_fd, buffer, 512)>0 )
{
gtk_entry_set_text(GTK_ENTRY((GtkWidget *)data), buffer);
memset(buffer,'\0',sizeof(buffer)/sizeof(char));
}
}
int main (int argc, char *argv[])
{
init_serial();
GtkWidget *window;
GtkWidget *send_label, *receive_label;
GtkWidget *send_entry, *receive_entry;
GtkWidget *send_button, *receive_button;
GtkWidget *hbox1, *hbox2, *hbox3;
GtkWidget *vbox;
gtk_init(&argc,
&argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),
"GtkEntryBox");
gtk_window_set_position(GTK_WINDOW(window),
GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 200,
200);
gtk_signal_connect ( GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC ( closeApp), NULL);
send_label = gtk_label_new("send:");
receive_label =
gtk_label_new("receive:");
send_entry = gtk_entry_new();
receive_entry = gtk_entry_new();
send_button = gtk_button_new_with_label("Send");
receive_button =
gtk_button_new_with_label("Receive");
gtk_signal_connect (GTK_OBJECT (send_button),
"clicked",
GTK_SIGNAL_FUNC(send_button_clicked), send_entry);
gtk_signal_connect (GTK_OBJECT (receive_button),
"clicked",
GTK_SIGNAL_FUNC(receive_button_clicked), receive_entry);
hbox1 = gtk_hbox_new ( TRUE, 5 );
hbox2 = gtk_hbox_new ( TRUE, 5 );
hbox3 = gtk_hbox_new ( TRUE, 5 );
vbox = gtk_vbox_new ( FALSE,
10);
gtk_box_pack_start(GTK_BOX(hbox1), send_label, TRUE, FALSE,
5);
gtk_box_pack_start(GTK_BOX(hbox1), send_entry, TRUE, FALSE,
5);
gtk_box_pack_start(GTK_BOX(hbox2), receive_label, TRUE,
FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox2), receive_entry, TRUE,
FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox3), send_button,
TRUE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox3),
receive_button, TRUE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE,
5);
gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE,
5);
gtk_box_pack_start(GTK_BOX(vbox), hbox3, FALSE, FALSE,
5);
// read_timer = g_timeout_add(100, read_callback,
NULL);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR
); //| O_NOCTTY |
O_NDELAY
if (-1 == fd)
{
perror("Can't Open
Serial Port");
return
-1;
}
else
return fd;
}
void set_speed(int fd, int speed);
int init_serial(){
int nread;
char *dev = "/dev/ttyS0"; //串口
serial_fd = OpenDev(dev);
set_speed(serial_fd,9600);
if (set_Parity(serial_fd,8,1,'N') ==
FALSE) {
printf("Set Parity
Error\n");
exit (0);
}
return 0;
}
int speed_arr[] = { B38400, B19200, B9600,
B4800, B2400, B1200, B300,
B38400, B19200, B9600, B4800, B2400, B1200, B300,
};
int name_arr[] = {38400, 19200,
9600, 4800, 2400, 1200, 300,
38400,
19200, 9600, 4800, 2400, 1200, 300,
};
void set_speed(int fd, int speed){
int i;
int status;
struct termios Opt;
tcgetattr(fd, &Opt);
for ( i= 0; i <
sizeof(speed_arr) / sizeof(int); i++)
{
if (speed ==
name_arr[i]) {
tcflush(fd, TCIOFLUSH);
cfsetispeed(&Opt, speed_arr[i]);
cfsetospeed(&Opt, speed_arr[i]);
status = tcsetattr(fd, TCSANOW, &Opt);
if (status != 0)
{
perror("tcsetattr fd");
return;
}
tcflush(fd,TCIOFLUSH);
}
}
}
int set_Parity(int fd,int databits,int stopbits,int parity)
{
struct termios options;
if ( tcgetattr(
fd,&options) != 0)
{
perror("SetupSerial
1");