static void cmd_handler(void *p1, void *p2, void *p3) { while (1) { struct btp_hdr *cmd; u16_t len; cmd = k_fifo_get(&cmds_queue, K_FOREVER); len = sys_le16_to_cpu(cmd->len); /* TODO * verify if service is registered before calling handler */ switch (cmd->service) { case BTP_SERVICE_ID_CORE: handle_core(cmd->opcode, cmd->index, cmd->data, len); break; case BTP_SERVICE_ID_GAP: tester_handle_gap(cmd->opcode, cmd->index, cmd->data, len); break; case BTP_SERVICE_ID_GATT: tester_handle_gatt(cmd->opcode, cmd->index, cmd->data, len); break; #if defined(CONFIG_BLUETOOTH_L2CAP_DYNAMIC_CHANNEL) case BTP_SERVICE_ID_L2CAP: tester_handle_l2cap(cmd->opcode, cmd->index, cmd->data, len); #endif /* CONFIG_BLUETOOTH_L2CAP_DYNAMIC_CHANNEL */ break; default: tester_rsp(cmd->service, cmd->opcode, cmd->index, BTP_STATUS_FAILED); break; } k_fifo_put(&avail_queue, cmd); } }
static void cmd_handler(int arg1, int arg2) { while (1) { struct btp_hdr *cmd; uint16_t len; cmd = nano_fiber_fifo_get(&cmds_queue, TICKS_UNLIMITED); len = sys_le16_to_cpu(cmd->len); /* TODO * verify if service is registered before calling handler */ switch (cmd->service) { case BTP_SERVICE_ID_CORE: handle_core(cmd->opcode, cmd->index, cmd->data, len); break; case BTP_SERVICE_ID_GAP: tester_handle_gap(cmd->opcode, cmd->index, cmd->data, len); break; case BTP_SERVICE_ID_GATT: tester_handle_gatt(cmd->opcode, cmd->index, cmd->data, len); break; case BTP_SERVICE_ID_L2CAP: tester_handle_l2cap(cmd->opcode, cmd->index, cmd->data, len); break; default: tester_rsp(cmd->service, cmd->opcode, cmd->index, BTP_STATUS_FAILED); break; } nano_fiber_fifo_put(&avail_queue, cmd); } }