static int ipsp_server_sock = 0;
static int ipsp_client_sock = 0;
+static int l2cap_psm;
+static int l2cap_le_server_fd;
+static int l2cap_le_client_fd;
+
static int bt_onoff_cnt = 0;
static int bt_onoff_cnt_success = 0;
static int bt_onoff_cnt_fail = 0;
, BT_UNIT_TEST_FUNCTION_SOCKET_SET_CONNECTION_STATE_CHANGED_CB},
{"bt_socket_unset_connection_state_changed_cb"
, BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_CONNECTION_STATE_CHANGED_CB},
+ {"bt_socket_create_l2cap_channel"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_CREATE_L2CAP_CHANNEL},
+ {"bt_socket_destroy_l2cap_channel"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_DESTROY_L2CAP_CHANNEL},
+ {"bt_socket_listen_and_accept_l2cap_channel"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN_AND_ACCEPT_L2CAP_CHANNEL},
+ {"bt_socket_listen_l2cap_channel"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN_L2CAP_CHANNEL},
+ {"bt_socket_accept_l2cap_channel"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_ACCEPT_L2CAP_CHANNEL},
+ {"bt_socket_reject_l2cap_channel"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_REJECT_L2CAP_CHANNEL},
+ {"bt_socket_connect_l2cap_channel"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_CONNECT_L2CAP_CHANNEL},
+ {"bt_socket_disconnect_l2cap_channel"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_DISCONNECT_L2CAP_CHANNEL},
+ {"bt_socket_send_data_l2cap_channel"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_SEND_DATA_L2CAP_CHANNEL},
+ {"bt_socket_get_l2cap_psm"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_GET_L2CAP_PSM},
+ {"bt_socket_set_l2cap_channel_connection_requested_cb"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_SET_L2CAP_CHANNEL_CONNECTION_REQUESTED_CB},
+ {"bt_socket_unset_l2cap_channel_connection_requested_cb"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_L2CAP_CHANNEL_CONNECTION_REQUESTED_CB},
+ {"bt_socket_set_l2cap_channel_connection_state_changed_cb"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_SET_L2CAP_CHANNEL_CONNECTION_STATE_CHANGED_CB},
+ {"bt_socket_unset_l2cap_channel_connection_state_changed_cb"
+ , BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_L2CAP_CHANNEL_CONNECTION_STATE_CHANGED_CB},
{"Select this menu to set parameters and then select the function again."
, BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
{NULL , 0x0000},
}
}
+static void __bt_socket_l2cap_channel_connection_state_changed_cb(int result,
+ bt_socket_connection_state_e connection_state,
+ bt_socket_l2cap_le_connection_s *connection,
+ void *user_data)
+{
+ TC_PRT("result: %s", __bt_get_error_message(result));
+ TC_PRT("connection_state: %d", connection_state);
+
+ if (connection == NULL) {
+ TC_PRT("No connection data!");
+ return;
+ }
+
+ TC_PRT("socket fd: %d", connection->socket_fd);
+ TC_PRT("server socket fd: %d", connection->server_fd);
+ TC_PRT("role: %d", connection->local_role);
+ TC_PRT("remote address: %s", connection->remote_address);
+ TC_PRT("PSM: %d", connection->psm);
+ l2cap_le_client_fd = connection->socket_fd;
+}
+
static void __bt_adapter_le_state_changed_cb(int result,
bt_adapter_le_state_e adapter_le_state, void *user_data)
{
break;
case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ADD_ADVERTISING_DATA:
param_count = 1;
- TC_PRT("Select advertising data \n (0 : Service uuid, 1: Service solicitation 2 : Appearance & Tx power, 3 : All, 4 : ANCS, 6: Multiple service data, 7: Transport discovery data");
+ TC_PRT("Select advertising data \n (0 : Service uuid, 1: Service solicitation 2 : Appearance & Tx power, 3 : All, 4 : ANCS, 6: Multiple service data, 7: Transport discovery data, 8: L2CAP CoC PSM data");
TC_PRT("\t (Default scan response : Service Data &Local name & Manufacturer data)");
break;
case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_MODE:
case BT_UNIT_TEST_FUNCTION_SOCKET_CREATE_RFCOMM_CUSTOM_UUID:
case BT_UNIT_TEST_FUNCTION_SOCKET_CONNECT_RFCOMM_CUSTOM_UUID:
case BT_UNIT_TEST_FUNCTION_SOCKET_SEND_DATA:
+ case BT_UNIT_TEST_FUNCTION_SOCKET_CREATE_L2CAP_CHANNEL:
+ case BT_UNIT_TEST_FUNCTION_SOCKET_CONNECT_L2CAP_CHANNEL:
+ case BT_UNIT_TEST_FUNCTION_SOCKET_SEND_DATA_L2CAP_CHANNEL:
param_count = 1;
param_type = BT_UNIT_TEST_PARAM_TYPE_STRING;
TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
const char *ams_uuid_128 = "89D3502B-0F36-433A-8EF4-C502AD55F8DC";
int appearance = 192; /* 192 is generic watch */
const char *hid_svc_uuid_16 = "1812";
+ char l2cap_le_service_data[1];
+ const char *l2cap_le_custom_uuid_16 = "c0c1";
+ l2cap_le_service_data[0] = l2cap_psm;
advertiser = advertiser_list[advertiser_index];
TC_PRT("set transport discovery data [0x%04x]", ret);
}
return 0;
+ case 8: /* L2cap CoC socket data */
+ ret = bt_adapter_le_add_advertising_service_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, l2cap_le_custom_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_uuid [0x%04x]", ret);
+
+ ret = bt_adapter_le_add_advertising_service_data(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, l2cap_le_custom_uuid_16,
+ l2cap_le_service_data, sizeof(l2cap_le_service_data));
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_data [0x%04x]", ret);
+
+ return 0;
default:
TC_PRT("No adv data");
break;
ret = bt_socket_unset_connection_state_changed_cb();
TC_PRT("returns %s\n", __bt_get_error_message(ret));
break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_CREATE_L2CAP_CHANNEL: {
+ int socket_fd = 0;
+ l2cap_psm = 37;
+
+ if (g_test_param.param_count > 0) {
+ l2cap_psm = atoi(g_test_param.params[0]);
+ ret = bt_socket_create_l2cap_channel(l2cap_psm, &socket_fd);
+ __bt_free_test_param(&g_test_param);
+ } else {
+ ret = bt_socket_create_l2cap_channel(l2cap_psm, &socket_fd);
+ }
+
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ } else {
+ TC_PRT("socket_fd: %d", socket_fd);
+ l2cap_le_server_fd = socket_fd;
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SOCKET_DESTROY_L2CAP_CHANNEL:
+ ret = bt_socket_destroy_l2cap_channel(l2cap_le_server_fd);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN_AND_ACCEPT_L2CAP_CHANNEL:
+ ret = bt_socket_listen_and_accept_l2cap_channel(l2cap_le_server_fd, 1);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN_L2CAP_CHANNEL:
+ ret = bt_socket_listen_l2cap_channel(l2cap_le_server_fd, 1);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_ACCEPT_L2CAP_CHANNEL: {
+ int socket_fd = 0;
+
+ ret = bt_socket_accept_l2cap_channel(l2cap_le_server_fd);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ } else {
+ TC_PRT("socket_fd: %d", socket_fd);
+ l2cap_le_client_fd = socket_fd;
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SOCKET_REJECT_L2CAP_CHANNEL:
+ ret = bt_socket_reject_l2cap_channel(l2cap_le_server_fd);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_CONNECT_L2CAP_CHANNEL: {
+ l2cap_psm = 37;
+
+ if (g_test_param.param_count > 0) {
+ l2cap_psm = atoi(g_test_param.params[0]);
+ ret = bt_socket_connect_l2cap_channel(remote_addr, l2cap_psm);
+ __bt_free_test_param(&g_test_param);
+ } else {
+ ret = bt_socket_connect_l2cap_channel(remote_addr, l2cap_psm);
+ }
+
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SOCKET_DISCONNECT_L2CAP_CHANNEL:
+ ret = bt_socket_disconnect_l2cap_channel(l2cap_le_client_fd);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_SEND_DATA_L2CAP_CHANNEL: {
+ char data[] = "Sending some test data";
+
+ if (g_test_param.param_count > 0) {
+ ret = bt_socket_send_data_l2cap_channel(l2cap_le_client_fd,
+ g_test_param.params[0],
+ strlen(g_test_param.params[0]) + 1);
+
+ __bt_free_test_param(&g_test_param);
+ } else {
+ ret = bt_socket_send_data_l2cap_channel(l2cap_le_client_fd,
+ data, sizeof(data));
+ }
+
+ TC_PRT("returns %d %s\n", ret, __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SOCKET_GET_L2CAP_PSM: {
+ int psm = -1;
+ ret = bt_socket_get_l2cap_psm(l2cap_le_server_fd, &psm);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ } else {
+ TC_PRT("psm %d\n", psm);
+ l2cap_psm = psm;
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SOCKET_SET_L2CAP_CHANNEL_CONNECTION_REQUESTED_CB:
+ ret = bt_socket_set_l2cap_channel_connection_requested_cb(
+ __bt_socket_connection_requested_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_L2CAP_CHANNEL_CONNECTION_REQUESTED_CB:
+ ret = bt_socket_unset_l2cap_channel_connection_requested_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_SET_L2CAP_CHANNEL_CONNECTION_STATE_CHANGED_CB:
+ ret = bt_socket_set_l2cap_channel_connection_state_changed_cb(
+ __bt_socket_l2cap_channel_connection_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_L2CAP_CHANNEL_CONNECTION_STATE_CHANGED_CB:
+ ret = bt_socket_unset_l2cap_channel_connection_state_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
need_to_set_params = true;