Example #1
0
T_QUEUE ipc_setup(void)
{
	/* Framework initializations */
	T_QUEUE queue = queue_create(32, NULL);
	assert(queue);

	/* Initialize IPC: channels have been chosen arbitrarily */
	ipc_init(0, 5, 1, 6, CPU_ID_ARC);
	ipc_async_init(queue);

	set_cpu_id(CPU_ID_QUARK);
	set_cpu_message_sender(CPU_ID_ARC, ipc_async_send_message);
	set_cpu_free_handler(CPU_ID_ARC, ipc_async_free_message);
#ifdef CONFIG_IPC_UART
	set_cpu_message_sender(CPU_ID_BLE, send_message_ipc_uart);
	set_cpu_free_handler(CPU_ID_BLE, free_message_ipc_uart);
#endif
	return queue;
}
Example #2
0
void main(int argc, char** argv)
{
    int loops = 0;
    void * cfw_channel;

    if (argc > 1) {
	    baud_rate = baudrate_to_termios(strtol(argv[1], NULL, 0));
    } else {
	    baud_rate = baudrate_to_termios(0); /* forcing 115200 */
    }
    /* Set the remote CPU handlers */
    set_cpu_message_sender(CPU_ID_BLE, linux_ipc_send_message);
    set_cpu_message_sender(CPU_ID_ARC, linux_ipc_send_message);
    set_cpu_message_sender(CPU_ID_HOST, linux_ipc_send_message);
    set_cpu_free_handler(CPU_ID_BLE, linux_ipc_free);
    set_cpu_free_handler(CPU_ID_ARC, linux_ipc_free);
    set_cpu_free_handler(CPU_ID_HOST, linux_ipc_free);
    set_cpu_id(CPU_ID_QUARK);


    int uart_fd = wait_client(SOCKET_NAME, UART_PORT);

    printf("Client connected on %d\n", uart_fd);
    uart_ipc_init(uart_fd);
    fd_set fds;
    FD_ZERO(&fds);
    struct timeval tv;
    _server_cb.queue = queue_create(10, NULL);
    cfw_service_mgr_init(_server_cb.queue);

    /* We use the main task queue to support most services */
    set_service_queue(_server_cb.queue);

    _server_cb.client = (cfw_client_t *)cfw_client_init(_server_cb.queue, srv_client_handle_msg,
		    &_server_cb);
    /* get informed on new services */
    cfw_register_svc_available(_server_cb.client, BLE_CORE_SERVICE_ID, &_server_cb);

    /* some test services */
    test_service_init(_server_cb.queue, TEST_SERVICE_ID);

    /* ble service */
    ble_cfw_service_init(_server_cb.queue);

    cfw_channel = ipc_uart_channel_open(0, ipc_uart_message_cback);
    linux_ipc_set_channel(cfw_channel);

    while(1) {
        FD_SET(uart_fd, &fds);
        FD_SET(0, &fds);
        tv.tv_sec = 1;
        tv.tv_usec = 0;

        int ret = select(uart_fd + 1, &fds, NULL, NULL, &tv);
        if (ret == -1) {
            perror("select()");
        } else if (ret) {
            if (FD_ISSET(0, &fds)) {
            } else if(FD_ISSET(uart_fd, &fds)) {
                uart_ipc_handle_data(uart_fd);
            }
        } else {
            printf(".");
#ifdef CONFIG_BLE_CORE_TEST
            test_ble_service_update_battery_level(battery_level--);
            if (battery_level == 10)
        	    battery_level = 100;
#endif
        }
        cfw_process(_server_cb.queue);
    }
}