?? app4.4.c
字號:
/********************************************************************************
* Company Name : Kobekara
* Project Name : Intelligent House
* Module Name : IH
* Decription : Application IH in MID
* Programmer : Tran Chi Nghia
* Creation Date : 11/02/2009
********************************************************************************
* Modified Histories: Date Programmer Function Name
*
*********************************************************************************/
#include<gtk/gtk.h>
#include<assert.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <pthread.h>
#include <gdk/gdkx.h>
#include <X11/extensions/Xrandr.h>
#define SIZE 10
#define SIZE_DEVICE 90
#define X_IMAGE_SIZE 60
#define Y_IMAGE_SIZE 50
#define LOGIN_WIDTH 300
#define LOGIN_HEIGHT 200
#define NOTEBOOK_WIDTH 700
#define NOTEBOOK_HEIGHT 350
#define FOINT_SIZE 14
#define RECORD_LEN_USER 20
#define RECORD_LEN_DEVICE 20
#define NUMBER_DEVICE 5
#define NUMBER_USER 3
#define NUMBER_PAGES 4
#define PORT 4444
#define BUFFER_SIZE 256
typedef struct
{
gint8 key;
char* name;
} Device;
typedef struct
{
gint8 key;
char* usr;
char* pass;
} User;
enum Report
{
DEVICE_NAME,
USER_NAME,
EVENT,
MINUTE,
HOUR,
DAY,
MONTH,
YEAR,
COLUMNS
};
typedef struct
{
char* device_name;
char* user_name;
char* event;
gint8 minute;
gint8 hour;
gint8 day;
gint8 month;
int year;
} ListItems;
typedef struct
{
gint8 id_device;
gint8 id_user;
gint8 id_event;
gint8 minute;
gint8 hour;
gint8 day;
gint8 month;
gint8 year;
} buffer_report;
GtkWidget *window;
GtkWidget *dialog;
GtkWidget *dialog_channel;
GtkWidget *spinner_day, *spinner_month, *spinner_year;
GtkWidget *spinner_hour, *spinner_minute;
GtkWidget *button_apply, *button_cancel;
GtkWidget *combo;
GtkWidget* time_label;
GdkDisplay *display;
PangoFontDescription *init_font;
GtkWidget* arr_all_devices[NUMBER_DEVICE];
GtkWidget* arr_active_unactive[NUMBER_DEVICE];
GtkWidget* arr_hbutton_box[3];
GtkWidget* arr_fix_box[4];
GtkWidget *treeview;
// file data variable
char* file_name_user = "/usr/src/user.data";
char* file_name_device = "/usr/src/device.data";
char buf [RECORD_LEN_USER];
FILE* db_file_user;
FILE* db_file_device;
// socket variable
int sockfd;
struct sockaddr_in serv_addr;
/* buffer send and recive data */
gint8 send_buffer[BUFFER_SIZE];
gint8 recive_buffer[BUFFER_SIZE];
/* array name devices */
Device all_device [NUMBER_DEVICE];
User all_user [NUMBER_USER];
G_LOCK_DEFINE_STATIC (state_arr);
static volatile gint8 state_arr[NUMBER_DEVICE];
G_LOCK_DEFINE_STATIC (data_buffer);
static volatile buffer_report data_buffer[10] ;
ListItems list[10];
void update_report ();
void alarm_form ( gchar* message, gint8 data);
void setup_tree_view (GtkWidget *treeview);
void create_report ();
void write_users ();
void read_users ();
void write_devices ();
void read_devices ();
void message_form (gchar* message);
void *do_thread_recive (void *data);
void create_socket ();
gint delete_event_handler (GtkWidget *widget, GdkEvent event, gpointer data);
GtkWidget *create_button ( gchar* style, gchar* title);
void end_program (GtkWidget *widget, gpointer data);
void apply_click (GtkWidget* button, gint8 data);
void cancel_click (GtkWidget* button, gint8 data);
void function_open_all (GtkWidget* button, gint8 data);
void function_close_all (GtkWidget* button, gint8 data);
void button_clicked (GtkWidget* widget, gint8 data);
void function_open (GtkWidget* button, gint8 data);
void function_close (GtkWidget* button, gint8 data);
void function_alarm (GtkWidget* button, gint8 data);
void function_channel (GtkWidget* button, gint8 data);
void send_channel (GtkWidget* button, gint8 data);
void create_form_login ();
void create_devices (GtkWidget* arr_button_device[], Device devices []);
void create_form_devices ();
GtkWidget *create_main_window( const gchar*title );
int put_record (FILE* file, int record_num, int record_len, void* buf);
int get_record (FILE* file, int record_num, int record_len, void* buf);
/**************************************************************************
* Create Date : 02/11/2009
* Creator Name : Tran Chi Nghia
* Decription : main function in module
* Parameter : 2
* "argc"(I): paramenter.
* "argv"(I): array paramenter.
* Return : 0
***************************************************************************/
int main (int argc, char **argv)
{
/* init threads */
g_thread_init(NULL);
gdk_threads_init();
/*endter thread*/
gdk_threads_enter();
/* create socket */
gtk_init(&argc, &argv);
/* write data about acounts to file */
write_users ();
/* read information about acounts in file*/
read_users ();
/*write data about devices to file*/
write_devices ();
/* read info device in file */
read_devices ();
/* create socket*/
create_socket () ;
/* create main window of application IH */
window =create_main_window("Intelligent House");
/*create form login*/
create_form_login ();
/*create main form*/
create_form_devices ();
/* create a thread to recive signal from server*/
if (!g_thread_create(do_thread_recive, NULL, FALSE, NULL))
{
g_printerr ("Failed to create YES thread: %s\n");
return 1;
}
/* show main window and all child objects*/
gtk_widget_show_all(window);
/* enter the GTK main loop */
gtk_main();
/* leave thread*/
gdk_threads_leave();
return 0;
}
/**************************************************************************
* Create Date : 02/11/2009
* Creator Name : Tran Chi Nghia
* Decription : write infomation about acount to file
* Parameter : none
* Return : none
***************************************************************************/
void write_users ()
{
/*variables*/
int i, num_user;
/* open file */
db_file_user = fopen (file_name_user, "w+");
if (!db_file_user)
{
perror ("fopen");
exit (1);
}
/* number of users*/
num_user = NUMBER_USER;
/* infomation array about acounts */
User arr_user [NUMBER_USER] = {{0,"moblin","1"},{1,"moblin2","12"},{2,"moblin3","123"}} ;
/* put record users to file */
put_record (db_file_user, 0, sizeof (int), &num_user);
for ( i = 0; i<NUMBER_USER; i++ )
{
put_record (db_file_user, i+1, sizeof (User), &arr_user[i]);
}
/* close file*/
if (fclose (db_file_user) == EOF )
{
perror ("fclose");
exit(1);
}
}
/**************************************************************************
* Create Date : 02/11/2009
* Creator Name : Tran Chi Nghia
* Decription : read infomation about users in file
* Parameter : none
* Return : none
***************************************************************************/
void read_users ()
{
int i, num_user; // number of user
/*open file to read*/
db_file_user = fopen (file_name_user, "r");
if (!db_file_user)
{
perror ("fopen");
exit (1);
}
/* read information about user*/
get_record ( db_file_user , 0, sizeof (int), &num_user );
for ( i=0; i<num_user; i++)
{
get_record ( db_file_user , i+1, sizeof (User), &all_user[i] );
}
/* close file */
if(fclose (db_file_user) == EOF )
{
perror ("fclose");
exit(1);
}
}
/**************************************************************************
* Create Date : 02/11/2009
* Creator Name : Tran Chi Nghia
* Decription : write infomation about devices to file
* Parameter : none
* Return : none
***************************************************************************/
void write_devices ()
{
int i;
/*number of devices */
int num_device;
/* open file to writing*/
db_file_device = fopen (file_name_device, "w+");
if (!db_file_device)
{
perror ("fopen");
exit (1);
}
/* number of devices*/
num_device =NUMBER_DEVICE;
/* array of devices */
Device arr_device [NUMBER_DEVICE] = {{0,"Light"},{1,"Fan"},{2,"Key"},{3,"Wave"},{4,"LCD"}};
/* write array devices into file */
put_record (db_file_device, 0, sizeof (int), &num_device);
for ( i = 0; i<NUMBER_DEVICE; i++ )
{
put_record (db_file_device, i+1, sizeof (Device), &arr_device[i]);
}
/* close file */
if (fclose (db_file_device) == EOF )
{
perror ("fclose");
exit(1);
}
}
/**************************************************************************
* Create Date : 02/11/2009
* Creator Name : Tran Chi Nghia
* Decription : read infomation about devices in file
* Parameter : none
* Return : none
***************************************************************************/
void read_devices ()
{
/* variables*/
int i, num_device;
/* open file */
db_file_device = fopen (file_name_device, "r");
if (!db_file_device)
{
perror ("fopen");
exit (1);
}
/* read number of devices and save to num_device variable */
get_record ( db_file_device , 0, sizeof (int), &num_device );
/* read infomation about devices and save to array all_device */
for ( i=0; i<num_device; i++)
{
get_record ( db_file_device , i+1, sizeof (Device), &all_device[i] );
}
/* close file */
if(fclose (db_file_device) == EOF )
{
perror ("fclose");
exit(1);
}
}
/**************************************************************************
* Create Date : 02/11/2009
* Creator Name : Tran Chi Nghia
* Decription : handle event delete main window
* Parameter : 3
"widget" (I) : object handle event
"event" (I) : the kind of event
"data" (I): data send to handle
* Return : gint
***************************************************************************/
gint delete_event_handler (GtkWidget *widget, GdkEvent event, gpointer data)
{
return FALSE;
}
/**************************************************************************
* Create Date : 02/11/2009
* Creator Name : Tran Chi Nghia
* Decription : handle event delete main window
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -