Exemple #1
0
extern "C" void kmain(uint64_t magic, multiboot_info_t * info)
{
    uint64_t volatile old_count=0;

	Video::Install();

	show_welcome();

	show_boot_msg("test", "info", true);
	show_boot_msg("test", "info", false);

	Idt::Install();
	Isr::install();
	Irq::Install();

	sti();

    VirtualMemory::Install();

    old_count = g_cpu_count;
	printf("In 64bit now - %d CPU's Active\n", old_count);
	for (;;)
	{
        if (old_count != g_cpu_count)
        {
            old_count = g_cpu_count;
            printf("In 64bit now - %d CPU's Active\n", old_count);
        }
	}
}
Exemple #2
0
static void menu_select_callback(MenuLayer *menu_layer, MenuIndex *cell_index, void *data) {
  switch (cell_index->row) {
    case 0:
      next_unit_index();
      break;

    case 1:
      next_format();
      break;

    case 2:
      toggle_first_day();
      break;

    case 3:
      if (!get_has_reminders()) {
        show_time();
      } else {
        set_has_reminders(0);
        cancell_all_reminders();
        menu_layer_reload_data(menu_layer);
      }

      break;

    case 4:
        show_welcome();
        break;
  }

  layer_mark_dirty((Layer *)menu_layer_get_scroll_layer(menu_layer));
}
Exemple #3
0
/**
 * void main_loop(FILE *stream, int interactive)
 *
 * Reads, tokenises, parses ane executes input from the given stream. If
 * interactive mode is on, outputs a welcome message and a prompt.
 */
void main_loop(FILE *stream, int interactive) {
	char buffer[BUFFER_MAX_SIZE];
	char last_line[BUFFER_MAX_SIZE];
	int more_to_read = TRUE;
	tokarray_t *tokens;
	expression_t *expr;
	
	bzero(buffer, BUFFER_MAX_SIZE);
	bzero(last_line, BUFFER_MAX_SIZE);
	
	if (interactive == TRUE) {
		show_welcome();
	}
	
	while (more_to_read == TRUE) {
		if (interactive == TRUE) {
			show_prompt();
		}
		
		/* Read a line of input. */
		more_to_read = read_data(stream, buffer, BUFFER_MAX_SIZE);
		
		if (strlen(buffer) == 0) {
			continue;
		}
		
		strcpy(last_line, buffer);
		
		/* Tokenise the input. */
		tokens = tokenise_input(buffer);
		
		if (tokens == NULL) {
			printf("!tmnsh: Could not tokenise input: %s\n", last_line);
			continue;
		}
		
		/* Parse the tokens into an expression. */
		expr = parse_tokens(tokens);
		
		if (expr == NULL) {
			printf("!tmnsh: Could not parse input: %s\n", last_line);
			tokarray_destroy(tokens); /* Clean up. */
			continue;
		}
		
		/* Interpret the expression and execute the commands. */
		interpret_expression(expr);
		
		expression_destroy(expr); /* Clean up. */
		bzero(buffer, BUFFER_MAX_SIZE);
		bzero(last_line, BUFFER_MAX_SIZE);
	}
}
	//
	// Implement the CThread::run() virtual function
	//
	virtual void run() {
		m_con.assign(m_usb, m_usb);
		m_usb.enable();

		while(1) {
			if ( m_usb.isConnected() ) {
				show_welcome();
			}
			LEDs[3] = !LEDs[3];
			sleep(500);
		}
Exemple #5
0
int main(void)
{

	//	设定吃药方案,并上传到服务器
	//	设定吃药方案,并传给药盒	
	//	修改吃药方案,上传服务器
	//	接收服务器的信息
	//	过往吃药信息查询		
	//	手机注册


	int ret,fd,maxfd;
	struct sockaddr_in sin;
	char buf[BUFSIZ];
	fd_set rset;
	struct timeval tout;
	sqlite3 *db;
	sqlite3_open("./mdc.db", &db);//打开数据库文件
	create(db);
	show_welcome();
	/*1.创建一个套接字*/
	fd=socket(AF_INET,SOCK_STREAM,0);//ipV4的TCP编程
	if(fd<0)
	{
		perror("socket fail");
		exit(1);
	}	
	/*2.连接服务器*/
	/*2.1 填充要连接的服务器信息*/
	bzero(&sin,sizeof(sin));
	sin.sin_family=AF_INET;
	sin.sin_port=htons(SERV_PORT);//主机字节序转换为网络字节序
	//十进制点分形式字符串IP地址转换为32位二进制的网络字节
	sin.sin_addr.s_addr=inet_addr(SERV_IP1);
	/*2.2 连接服务器(在两个套接字之间创建连接)*/
	if(connect(fd,(struct sockaddr *)&sin,sizeof(sin))<0)
	{
		perror("connect fail");
		exit(1);
	}
	printf ("TCP client starting...OK!\n");
	/*3.和服务器进行数据交互*/
	while(1)
	{
		tout.tv_sec=5;
		tout.tv_usec=0;
		/*把rset清零*/
		FD_ZERO(&rset);
		/*依次把所有要监控的文件描述符加入到集合rset中*/
		FD_SET(0,&rset);
		FD_SET(fd,&rset);
		maxfd=fd;
		/*调用select函数*/
		ret=select(maxfd+1,&rset,NULL,NULL,&tout);
		/*依次判断被监控的文件描述符是否有数据*/
		if(FD_ISSET(0,&rset))//标准键盘上有输入
		{
			bzero(buf,BUFSIZ);
			input_handle(fd,buf,BUFSIZ-1,db);
		}
		if(FD_ISSET(fd,&rset))//套接字上有数据
		{
			bzero(buf,BUFSIZ);
			ser_data_handle(fd,buf,BUFSIZ-1);
		}
		/*确认是否是超时返回*/
		if(!ret||(tout.tv_sec==0&&tout.tv_usec==0))
			printf("timeout!\n");
	}

	sqlite3_close(db);//关闭数据库
	close(fd);

	return 0;
}
Exemple #6
0
static int signal_update_order(LassiConnection *lc, DBusMessage *m) {
    gint32 generation;
    DBusError e;
    DBusMessageIter iter, sub;
    GList *new_order = NULL, *merged_order = NULL;
    int r = 0;
    int c = 0;

    dbus_error_init(&e);

    if (!(dbus_message_get_args(
                m, &e,
                DBUS_TYPE_INT32, &generation,
                DBUS_TYPE_INVALID))) {
        g_warning("Received invalid message: %s", e.message);
        dbus_error_free(&e);
        return -1;
    }

    dbus_message_iter_init(m, &iter);
    dbus_message_iter_next(&iter);

    if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY || dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRING) {
        g_debug("Bad connection list fo the left");
        return -1;
    }

    if (lc->server->order_generation > generation) {
        g_debug("Ignoring request for layout");
        return 0;
    }

    dbus_message_iter_recurse(&iter, &sub);

    while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID) {
        const char *id;
        dbus_message_iter_get_basic(&sub, &id);
        new_order = g_list_prepend(new_order, g_strdup(id));
        dbus_message_iter_next(&sub);
    }

    new_order = g_list_reverse(new_order);

    if (!lassi_list_nodups(new_order)) {
        g_warning("Received invalid list.");
        r = -1;
        goto finish;
    }

    c = lassi_list_compare(lc->server->order, new_order);

    if (c == 0) {
        g_debug("Requested order identical to ours.");
        goto finish;
    }

    if (lc->server->order_generation == generation &&  c > 0) {
        g_debug("Ignoring request for layout 2");
        goto finish;
    }

    merged_order = lassi_list_merge(lassi_list_copy(new_order), lc->server->order);

    if (lassi_list_compare(lc->server->order, merged_order)) {
        lassi_server_set_order(lc->server, merged_order);
        merged_order = NULL;
    }

    lassi_server_send_update_order(lc->server, lassi_list_compare(lc->server->order, new_order) ? NULL : lc);

    lc->server->order_generation = generation;

finish:

    lassi_list_free(new_order);
    lassi_list_free(merged_order);

    if (lc->delayed_welcome) {
        lc->delayed_welcome = FALSE;
        show_welcome(lc, TRUE);
    }

    return r;
}
Exemple #7
0
static int signal_hello(LassiConnection *lc, DBusMessage *m) {
    const char *id, *address;
    DBusError e;
    GList *i;
    dbus_bool_t b;
    DBusMessage *n;
    gint32 active_generation, order_generation, clipboard_generation;

    dbus_error_init(&e);

    if (lc->id) {
        g_debug("Received duplicate HelloNode.");
        return -1;
    }

    if (!(dbus_message_get_args(
                m, &e,
                DBUS_TYPE_STRING, &id,
                DBUS_TYPE_STRING, &address,
                DBUS_TYPE_INT32, &active_generation,
                DBUS_TYPE_INT32, &order_generation,
                DBUS_TYPE_INT32, &clipboard_generation,
                DBUS_TYPE_INVALID))) {
        g_warning("Received invalid message: %s", e.message);
        dbus_error_free(&e);
        return -1;
    }

    if (strcmp(id, lc->server->id) == 0) {
        g_debug("Dropping looped back connection.");
        return -1;
    }

    if (g_hash_table_lookup(lc->server->connections_by_id, id)) {
        g_debug("Dropping duplicate connection.");
        return -1;
    }

    lc->server->active_generation = MAX(lc->server->active_generation, active_generation);
    lc->server->order_generation = MAX(lc->server->order_generation, order_generation);
    lc->server->clipboard_generation = MAX(lc->server->clipboard_generation, clipboard_generation);

    g_debug("Got welcome from %s (%s)", id, address);

    lc->id = g_strdup(id);
    lc->address = g_strdup(address);
    g_hash_table_insert(lc->server->connections_by_id, lc->id, lc);
    server_position_connection(lc->server, lc);

    /* Notify all old nodes of the new one */
    n = dbus_message_new_signal("/", LASSI_INTERFACE, "NodeAdded");
    g_assert(n);

    b = dbus_message_append_args(n, DBUS_TYPE_STRING, &id, DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID);
    g_assert(b);

    server_broadcast(lc->server, n, lc);
    dbus_message_unref(n);

    /* Notify new node about old nodes */
    for (i = lc->server->connections; i; i = i->next) {
        LassiConnection *k = i->data;

        if (k == lc || !k->id)
            continue;

        n = dbus_message_new_signal("/", LASSI_INTERFACE, "NodeAdded");
        g_assert(n);

        b = dbus_message_append_args(n, DBUS_TYPE_STRING, &id, DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID);
        g_assert(b);

        b = dbus_connection_send(lc->dbus_connection, n, NULL);
        g_assert(b);

        dbus_message_unref(n);
    }

    if (lc->we_are_client) {
        server_send_update_grab(lc->server, -1);
        lassi_server_send_update_order(lc->server, NULL);

        lc->delayed_welcome = FALSE;
        show_welcome(lc, TRUE);
    } else
        lc->delayed_welcome = TRUE;

    server_layout_changed(lc->server, -1);
    lassi_prefs_update(&lc->server->prefs_info);

    server_dump(lc->server);

    return 0;
}
Exemple #8
0
static void connection_unlink(LassiConnection *lc, gboolean remove_from_order) {
    LassiServer *ls;
    g_assert(lc);

    g_debug("Unlinking %s (%s)", lc->id, lc->address);

    ls = lc->server;

    if (lc->id) {
        DBusMessage *n;
        dbus_bool_t b;

        /* Tell everyone */
        n = dbus_message_new_signal("/", LASSI_INTERFACE, "NodeRemoved");
        g_assert(n);

        b = dbus_message_append_args(n,
                                     DBUS_TYPE_STRING, &lc->id,
                                     DBUS_TYPE_STRING, &lc->address,
                                     DBUS_TYPE_BOOLEAN, &remove_from_order,
                                     DBUS_TYPE_INVALID);
        g_assert(b);

        server_broadcast(ls, n, NULL);
        dbus_message_unref(n);
    }

    ls->connections = g_list_remove(ls->connections, lc);
    ls->n_connections --;

    if (lc->id) {
        show_welcome(lc, FALSE);

        g_hash_table_remove(ls->connections_by_id, lc->id);
        ls->connections_left = g_list_remove(ls->connections_left, lc);
        ls->connections_right = g_list_remove(ls->connections_right, lc);

        if (ls->active_connection == lc)
            server_pick_active_connection(ls);

        if (ls->clipboard_connection == lc) {
            ls->clipboard_connection = NULL;
            ls->clipboard_empty = TRUE;
            lassi_clipboard_clear(&lc->server->clipboard_info, FALSE);
        }

        if (ls->primary_connection == lc) {
            ls->primary_connection = NULL;
            ls->primary_empty = TRUE;
            lassi_clipboard_clear(&lc->server->clipboard_info, TRUE);
        }

        if (remove_from_order) {
            GList *i = g_list_find_custom(ls->order, lc->id, (GCompareFunc) strcmp);

            if (i)
                ls->order = g_list_delete_link(ls->order, i);
        }

        server_layout_changed(ls, -1);
        lassi_prefs_update(&ls->prefs_info);
        server_dump(ls);
    }

    lassi_tray_update(&ls->tray_info, ls->n_connections);

    connection_destroy(lc);
}