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; }
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); } }