ipc-tester.c 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500
  1. // SPDX-License-Identifier: LGPL-2.1-or-later
  2. /*
  3. *
  4. * BlueZ - Bluetooth protocol stack for Linux
  5. *
  6. * Copyright (C) 2013-2014 Intel Corporation. All rights reserved.
  7. *
  8. *
  9. */
  10. #ifdef HAVE_CONFIG_H
  11. #include <config.h>
  12. #endif
  13. #define _GNU_SOURCE
  14. #include <stdlib.h>
  15. #include <unistd.h>
  16. #include <errno.h>
  17. #include <poll.h>
  18. #include <sys/socket.h>
  19. #include <sys/types.h>
  20. #include <sys/wait.h>
  21. #include <sys/un.h>
  22. #include <libgen.h>
  23. #include <glib.h>
  24. #include "lib/bluetooth.h"
  25. #include "lib/mgmt.h"
  26. #include "src/shared/tester.h"
  27. #include "src/shared/mgmt.h"
  28. #include "emulator/hciemu.h"
  29. #include "hal-msg.h"
  30. #include "ipc-common.h"
  31. #include <cutils/properties.h>
  32. #define WAIT_FOR_SIGNAL_TIME 2 /* in seconds */
  33. #define EMULATOR_SIGNAL "emulator_started"
  34. struct test_data {
  35. struct mgmt *mgmt;
  36. uint16_t mgmt_index;
  37. struct hciemu *hciemu;
  38. enum hciemu_type hciemu_type;
  39. pid_t bluetoothd_pid;
  40. bool setup_done;
  41. };
  42. struct ipc_data {
  43. void *buffer;
  44. size_t len;
  45. };
  46. struct generic_data {
  47. struct ipc_data ipc_data;
  48. unsigned int num_services;
  49. int init_services[];
  50. };
  51. struct regmod_msg {
  52. struct ipc_hdr header;
  53. struct hal_cmd_register_module cmd;
  54. } __attribute__((packed));
  55. #define CONNECT_TIMEOUT (5 * 1000)
  56. #define SERVICE_NAME "bluetoothd"
  57. static char exec_dir[PATH_MAX];
  58. static int cmd_sk = -1;
  59. static int notif_sk = -1;
  60. static void read_info_callback(uint8_t status, uint16_t length,
  61. const void *param, void *user_data)
  62. {
  63. struct test_data *data = tester_get_data();
  64. const struct mgmt_rp_read_info *rp = param;
  65. char addr[18];
  66. uint16_t manufacturer;
  67. uint32_t supported_settings, current_settings;
  68. tester_print("Read Info callback");
  69. tester_print(" Status: 0x%02x", status);
  70. if (status || !param) {
  71. tester_pre_setup_failed();
  72. return;
  73. }
  74. ba2str(&rp->bdaddr, addr);
  75. manufacturer = btohs(rp->manufacturer);
  76. supported_settings = btohl(rp->supported_settings);
  77. current_settings = btohl(rp->current_settings);
  78. tester_print(" Address: %s", addr);
  79. tester_print(" Version: 0x%02x", rp->version);
  80. tester_print(" Manufacturer: 0x%04x", manufacturer);
  81. tester_print(" Supported settings: 0x%08x", supported_settings);
  82. tester_print(" Current settings: 0x%08x", current_settings);
  83. tester_print(" Class: 0x%02x%02x%02x",
  84. rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]);
  85. tester_print(" Name: %s", rp->name);
  86. tester_print(" Short name: %s", rp->short_name);
  87. if (strcmp(hciemu_get_address(data->hciemu), addr)) {
  88. tester_pre_setup_failed();
  89. return;
  90. }
  91. tester_pre_setup_complete();
  92. }
  93. static void index_added_callback(uint16_t index, uint16_t length,
  94. const void *param, void *user_data)
  95. {
  96. struct test_data *data = tester_get_data();
  97. tester_print("Index Added callback");
  98. tester_print(" Index: 0x%04x", index);
  99. data->mgmt_index = index;
  100. mgmt_send(data->mgmt, MGMT_OP_READ_INFO, data->mgmt_index, 0, NULL,
  101. read_info_callback, NULL, NULL);
  102. }
  103. static void index_removed_callback(uint16_t index, uint16_t length,
  104. const void *param, void *user_data)
  105. {
  106. struct test_data *data = tester_get_data();
  107. tester_print("Index Removed callback");
  108. tester_print(" Index: 0x%04x", index);
  109. if (index != data->mgmt_index)
  110. return;
  111. mgmt_unregister_index(data->mgmt, data->mgmt_index);
  112. mgmt_unref(data->mgmt);
  113. data->mgmt = NULL;
  114. tester_post_teardown_complete();
  115. }
  116. static void read_index_list_callback(uint8_t status, uint16_t length,
  117. const void *param, void *user_data)
  118. {
  119. struct test_data *data = tester_get_data();
  120. tester_print("Read Index List callback");
  121. tester_print(" Status: 0x%02x", status);
  122. if (status || !param) {
  123. tester_pre_setup_failed();
  124. return;
  125. }
  126. mgmt_register(data->mgmt, MGMT_EV_INDEX_ADDED, MGMT_INDEX_NONE,
  127. index_added_callback, NULL, NULL);
  128. mgmt_register(data->mgmt, MGMT_EV_INDEX_REMOVED, MGMT_INDEX_NONE,
  129. index_removed_callback, NULL, NULL);
  130. data->hciemu = hciemu_new(data->hciemu_type);
  131. if (!data->hciemu) {
  132. tester_warn("Failed to setup HCI emulation");
  133. tester_pre_setup_failed();
  134. return;
  135. }
  136. tester_print("New hciemu instance created");
  137. }
  138. static void test_pre_setup(const void *data)
  139. {
  140. struct test_data *test_data = tester_get_data();
  141. if (!tester_use_debug())
  142. fclose(stderr);
  143. test_data->mgmt = mgmt_new_default();
  144. if (!test_data->mgmt) {
  145. tester_warn("Failed to setup management interface");
  146. tester_pre_setup_failed();
  147. return;
  148. }
  149. mgmt_send(test_data->mgmt, MGMT_OP_READ_INDEX_LIST, MGMT_INDEX_NONE, 0,
  150. NULL, read_index_list_callback, NULL, NULL);
  151. }
  152. static void test_post_teardown(const void *data)
  153. {
  154. struct test_data *test_data = tester_get_data();
  155. if (test_data->hciemu) {
  156. hciemu_unref(test_data->hciemu);
  157. test_data->hciemu = NULL;
  158. }
  159. }
  160. static void bluetoothd_start(int hci_index)
  161. {
  162. char prg_name[PATH_MAX + 11];
  163. char index[8];
  164. char *prg_argv[4];
  165. snprintf(prg_name, sizeof(prg_name), "%s/%s", exec_dir, "bluetoothd");
  166. snprintf(index, sizeof(index), "%d", hci_index);
  167. prg_argv[0] = prg_name;
  168. prg_argv[1] = "-i";
  169. prg_argv[2] = index;
  170. prg_argv[3] = NULL;
  171. if (!tester_use_debug())
  172. fclose(stderr);
  173. execve(prg_argv[0], prg_argv, NULL);
  174. }
  175. static void emulator(int pipe, int hci_index)
  176. {
  177. static const char SYSTEM_SOCKET_PATH[] = "\0android_system";
  178. char buf[1024];
  179. struct sockaddr_un addr;
  180. struct timeval tv;
  181. int fd;
  182. ssize_t len;
  183. fd = socket(PF_LOCAL, SOCK_DGRAM | SOCK_CLOEXEC, 0);
  184. if (fd < 0)
  185. goto failed;
  186. tv.tv_sec = WAIT_FOR_SIGNAL_TIME;
  187. tv.tv_usec = 0;
  188. setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(tv));
  189. memset(&addr, 0, sizeof(addr));
  190. addr.sun_family = AF_UNIX;
  191. memcpy(addr.sun_path, SYSTEM_SOCKET_PATH, sizeof(SYSTEM_SOCKET_PATH));
  192. if (bind(fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
  193. perror("Failed to bind system socket");
  194. goto failed;
  195. }
  196. len = write(pipe, EMULATOR_SIGNAL, sizeof(EMULATOR_SIGNAL));
  197. if (len != sizeof(EMULATOR_SIGNAL))
  198. goto failed;
  199. memset(buf, 0, sizeof(buf));
  200. len = read(fd, buf, sizeof(buf));
  201. if (len <= 0 || strcmp(buf, "ctl.start=bluetoothd"))
  202. goto failed;
  203. close(pipe);
  204. close(fd);
  205. return bluetoothd_start(hci_index);
  206. failed:
  207. close(pipe);
  208. if (fd >= 0)
  209. close(fd);
  210. }
  211. static int accept_connection(int sk)
  212. {
  213. int err;
  214. struct pollfd pfd;
  215. int new_sk;
  216. memset(&pfd, 0 , sizeof(pfd));
  217. pfd.fd = sk;
  218. pfd.events = POLLIN;
  219. err = poll(&pfd, 1, CONNECT_TIMEOUT);
  220. if (err < 0) {
  221. err = errno;
  222. tester_warn("Failed to poll: %d (%s)", err, strerror(err));
  223. return -errno;
  224. }
  225. if (err == 0) {
  226. tester_warn("bluetoothd connect timeout");
  227. return -errno;
  228. }
  229. new_sk = accept(sk, NULL, NULL);
  230. if (new_sk < 0) {
  231. err = errno;
  232. tester_warn("Failed to accept socket: %d (%s)",
  233. err, strerror(err));
  234. return -errno;
  235. }
  236. return new_sk;
  237. }
  238. static bool init_ipc(void)
  239. {
  240. struct sockaddr_un addr;
  241. int sk;
  242. int err;
  243. sk = socket(AF_LOCAL, SOCK_SEQPACKET, 0);
  244. if (sk < 0) {
  245. err = errno;
  246. tester_warn("Failed to create socket: %d (%s)", err,
  247. strerror(err));
  248. return false;
  249. }
  250. memset(&addr, 0, sizeof(addr));
  251. addr.sun_family = AF_UNIX;
  252. memcpy(addr.sun_path, BLUEZ_HAL_SK_PATH, sizeof(BLUEZ_HAL_SK_PATH));
  253. if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
  254. err = errno;
  255. tester_warn("Failed to bind socket: %d (%s)", err,
  256. strerror(err));
  257. close(sk);
  258. return false;
  259. }
  260. if (listen(sk, 2) < 0) {
  261. err = errno;
  262. tester_warn("Failed to listen on socket: %d (%s)", err,
  263. strerror(err));
  264. close(sk);
  265. return false;
  266. }
  267. /* Start Android Bluetooth daemon service */
  268. if (property_set("ctl.start", SERVICE_NAME) < 0) {
  269. tester_warn("Failed to start service %s", SERVICE_NAME);
  270. close(sk);
  271. return false;
  272. }
  273. cmd_sk = accept_connection(sk);
  274. if (cmd_sk < 0) {
  275. close(sk);
  276. return false;
  277. }
  278. notif_sk = accept_connection(sk);
  279. if (notif_sk < 0) {
  280. close(sk);
  281. close(cmd_sk);
  282. cmd_sk = -1;
  283. return false;
  284. }
  285. tester_print("bluetoothd connected");
  286. close(sk);
  287. return true;
  288. }
  289. static void cleanup_ipc(void)
  290. {
  291. if (cmd_sk < 0)
  292. return;
  293. close(cmd_sk);
  294. cmd_sk = -1;
  295. }
  296. static gboolean check_for_daemon(gpointer user_data)
  297. {
  298. int status;
  299. struct test_data *data = user_data;
  300. if ((waitpid(data->bluetoothd_pid, &status, WNOHANG))
  301. != data->bluetoothd_pid)
  302. return true;
  303. if (data->setup_done) {
  304. if (WIFEXITED(status) &&
  305. (WEXITSTATUS(status) == EXIT_SUCCESS)) {
  306. tester_test_passed();
  307. return false;
  308. }
  309. tester_test_failed();
  310. } else {
  311. tester_setup_failed();
  312. test_post_teardown(data);
  313. }
  314. tester_warn("Unexpected Daemon shutdown with status %d", status);
  315. return false;
  316. }
  317. static bool setup_module(int service_id)
  318. {
  319. struct ipc_hdr response;
  320. struct ipc_hdr expected_response;
  321. struct regmod_msg btmodule_msg = {
  322. .header = {
  323. .service_id = HAL_SERVICE_ID_CORE,
  324. .opcode = HAL_OP_REGISTER_MODULE,
  325. .len = sizeof(struct hal_cmd_register_module),
  326. },
  327. .cmd = {
  328. .service_id = service_id,
  329. .mode = HAL_MODE_DEFAULT,
  330. .max_clients = 1,
  331. },
  332. };
  333. if (write(cmd_sk, &btmodule_msg, sizeof(btmodule_msg)) < 0)
  334. goto fail;
  335. if (read(cmd_sk, &response, sizeof(response)) < 0)
  336. goto fail;
  337. expected_response = btmodule_msg.header;
  338. expected_response.len = 0;
  339. if (memcmp(&response, &expected_response, sizeof(response)) == 0)
  340. return true;
  341. fail:
  342. tester_warn("Module registration failed.");
  343. return false;
  344. }
  345. static void setup(const void *data)
  346. {
  347. const struct generic_data *generic_data = data;
  348. struct test_data *test_data = tester_get_data();
  349. int signal_fd[2];
  350. char buf[1024];
  351. pid_t pid;
  352. int len;
  353. unsigned int i;
  354. if (pipe(signal_fd))
  355. goto failed;
  356. pid = fork();
  357. if (pid < 0) {
  358. close(signal_fd[0]);
  359. close(signal_fd[1]);
  360. goto failed;
  361. }
  362. if (pid == 0) {
  363. if (!tester_use_debug())
  364. fclose(stderr);
  365. close(signal_fd[0]);
  366. emulator(signal_fd[1], test_data->mgmt_index);
  367. exit(0);
  368. }
  369. close(signal_fd[1]);
  370. test_data->bluetoothd_pid = pid;
  371. len = read(signal_fd[0], buf, sizeof(buf));
  372. if (len <= 0 || (strcmp(buf, EMULATOR_SIGNAL))) {
  373. close(signal_fd[0]);
  374. goto failed;
  375. }
  376. g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, check_for_daemon, test_data,
  377. NULL);
  378. if (!init_ipc()) {
  379. tester_warn("Cannot initialize IPC mechanism!");
  380. goto failed;
  381. }
  382. tester_print("Will init %d services.", generic_data->num_services);
  383. for (i = 0; i < generic_data->num_services; i++)
  384. if (!setup_module(generic_data->init_services[i])) {
  385. cleanup_ipc();
  386. goto failed;
  387. }
  388. test_data->setup_done = true;
  389. tester_setup_complete();
  390. return;
  391. failed:
  392. g_idle_remove_by_data(test_data);
  393. tester_setup_failed();
  394. test_post_teardown(data);
  395. }
  396. static void teardown(const void *data)
  397. {
  398. struct test_data *test_data = tester_get_data();
  399. g_idle_remove_by_data(test_data);
  400. cleanup_ipc();
  401. if (test_data->bluetoothd_pid)
  402. waitpid(test_data->bluetoothd_pid, NULL, 0);
  403. tester_teardown_complete();
  404. }
  405. static void ipc_send_tc(const void *data)
  406. {
  407. const struct generic_data *generic_data = data;
  408. const struct ipc_data *ipc_data = &generic_data->ipc_data;
  409. if (ipc_data->len) {
  410. if (write(cmd_sk, ipc_data->buffer, ipc_data->len) < 0)
  411. tester_test_failed();
  412. }
  413. }
  414. #define service_data(args...) { args }
  415. #define gen_data(writelen, writebuf, servicelist...) \
  416. { \
  417. .ipc_data = { \
  418. .buffer = writebuf, \
  419. .len = writelen, \
  420. }, \
  421. .init_services = service_data(servicelist), \
  422. .num_services = sizeof((const int[]) \
  423. service_data(servicelist)) / \
  424. sizeof(int), \
  425. }
  426. #define test_generic(name, test, setup, teardown, buffer, writelen, \
  427. services...) \
  428. do { \
  429. struct test_data *user; \
  430. static const struct generic_data data = \
  431. gen_data(writelen, buffer, services); \
  432. user = g_malloc0(sizeof(struct test_data)); \
  433. if (!user) \
  434. break; \
  435. user->hciemu_type = HCIEMU_TYPE_BREDRLE; \
  436. tester_add_full(name, &data, test_pre_setup, setup, \
  437. test, teardown, test_post_teardown, \
  438. 3, user, g_free); \
  439. } while (0)
  440. #define test_opcode_valid(_name, _service, _opcode, _len, _servicelist...) \
  441. do { \
  442. static struct ipc_hdr hdr = { \
  443. .service_id = _service, \
  444. .opcode = _opcode, \
  445. .len = _len, \
  446. }; \
  447. \
  448. test_generic("Opcode out of range: "_name, \
  449. ipc_send_tc, setup, teardown, \
  450. &hdr, \
  451. sizeof(hdr), \
  452. _servicelist); \
  453. } while (0)
  454. struct vardata {
  455. struct ipc_hdr hdr;
  456. uint8_t buf[IPC_MTU];
  457. } __attribute__((packed));
  458. #define test_datasize_valid(_name, _service, _opcode, _hlen, _addatasize, \
  459. _servicelist...) \
  460. do { \
  461. static struct vardata vdata = { \
  462. .hdr.service_id = _service, \
  463. .hdr.opcode = _opcode, \
  464. .hdr.len = (_hlen) + (_addatasize), \
  465. .buf = {}, \
  466. }; \
  467. test_generic("Data size "_name, \
  468. ipc_send_tc, setup, teardown, \
  469. &vdata, \
  470. sizeof(vdata.hdr) + (_hlen) + (_addatasize),\
  471. _servicelist); \
  472. } while (0)
  473. static struct regmod_msg register_bt_msg = {
  474. .header = {
  475. .service_id = HAL_SERVICE_ID_CORE,
  476. .opcode = HAL_OP_REGISTER_MODULE,
  477. .len = sizeof(struct hal_cmd_register_module),
  478. },
  479. .cmd = {
  480. .service_id = HAL_SERVICE_ID_BLUETOOTH,
  481. },
  482. };
  483. static struct regmod_msg register_bt_malformed_size_msg = {
  484. .header = {
  485. .service_id = HAL_SERVICE_ID_CORE,
  486. .opcode = HAL_OP_REGISTER_MODULE,
  487. /* wrong payload size declared */
  488. .len = sizeof(struct hal_cmd_register_module) - 1,
  489. },
  490. .cmd = {
  491. .service_id = HAL_SERVICE_ID_CORE,
  492. },
  493. };
  494. struct malformed_data3_struct {
  495. struct regmod_msg valid_msg;
  496. int redundant_data;
  497. } __attribute__((packed));
  498. static struct malformed_data3_struct malformed_data3_msg = {
  499. /* valid register service message */
  500. .valid_msg = {
  501. .header = {
  502. .service_id = HAL_SERVICE_ID_CORE,
  503. .opcode = HAL_OP_REGISTER_MODULE,
  504. .len = sizeof(struct hal_cmd_register_module),
  505. },
  506. .cmd = {
  507. .service_id = HAL_SERVICE_ID_CORE,
  508. },
  509. },
  510. /* plus redundant data */
  511. . redundant_data = 666,
  512. };
  513. static struct ipc_hdr enable_unknown_service_hdr = {
  514. .service_id = HAL_SERVICE_ID_MAX + 1,
  515. .opcode = HAL_OP_REGISTER_MODULE,
  516. .len = 0,
  517. };
  518. static struct ipc_hdr enable_bt_service_hdr = {
  519. .service_id = HAL_SERVICE_ID_BLUETOOTH,
  520. .opcode = HAL_OP_ENABLE,
  521. .len = 0,
  522. };
  523. struct bt_set_adapter_prop_data {
  524. struct ipc_hdr hdr;
  525. struct hal_cmd_set_adapter_prop prop;
  526. /* data placeholder for hal_cmd_set_adapter_prop.val[0] */
  527. uint8_t buf[IPC_MTU - sizeof(struct ipc_hdr) -
  528. sizeof(struct hal_cmd_set_adapter_prop)];
  529. } __attribute__((packed));
  530. #define set_name "new name"
  531. static struct bt_set_adapter_prop_data bt_set_adapter_prop_data_overs = {
  532. .hdr.service_id = HAL_SERVICE_ID_BLUETOOTH,
  533. .hdr.opcode = HAL_OP_SET_ADAPTER_PROP,
  534. .hdr.len = sizeof(struct hal_cmd_set_adapter_prop) + sizeof(set_name),
  535. .prop.type = HAL_PROP_ADAPTER_NAME,
  536. /* declare wrong descriptor length */
  537. .prop.len = sizeof(set_name) + 1,
  538. /* init prop.val[0] */
  539. .buf = set_name,
  540. };
  541. static struct bt_set_adapter_prop_data bt_set_adapter_prop_data_unders = {
  542. .hdr.service_id = HAL_SERVICE_ID_BLUETOOTH,
  543. .hdr.opcode = HAL_OP_SET_ADAPTER_PROP,
  544. .hdr.len = sizeof(struct hal_cmd_set_adapter_prop) + sizeof(set_name),
  545. .prop.type = HAL_PROP_ADAPTER_NAME,
  546. /* declare wrong descriptor length */
  547. .prop.len = sizeof(set_name) - 1,
  548. /* init prop.val[0] */
  549. .buf = set_name,
  550. };
  551. struct bt_set_remote_prop_data {
  552. struct ipc_hdr hdr;
  553. struct hal_cmd_set_remote_device_prop prop;
  554. /* data placeholder for hal_cmd_set_remote_device_prop.val[0] */
  555. uint8_t buf[IPC_MTU - sizeof(struct ipc_hdr) -
  556. sizeof(struct hal_cmd_set_remote_device_prop)];
  557. } __attribute__((packed));
  558. static struct bt_set_remote_prop_data bt_set_remote_prop_data_overs = {
  559. .hdr.service_id = HAL_SERVICE_ID_BLUETOOTH,
  560. .hdr.opcode = HAL_OP_SET_REMOTE_DEVICE_PROP,
  561. .hdr.len = sizeof(struct hal_cmd_set_remote_device_prop) +
  562. sizeof(set_name),
  563. .prop.bdaddr = {},
  564. .prop.type = HAL_PROP_DEVICE_NAME,
  565. /* declare wrong descriptor length */
  566. .prop.len = sizeof(set_name) + 1,
  567. .buf = set_name,
  568. };
  569. static struct bt_set_remote_prop_data bt_set_remote_prop_data_unders = {
  570. .hdr.service_id = HAL_SERVICE_ID_BLUETOOTH,
  571. .hdr.opcode = HAL_OP_SET_REMOTE_DEVICE_PROP,
  572. .hdr.len = sizeof(struct hal_cmd_set_remote_device_prop) +
  573. sizeof(set_name),
  574. .prop.bdaddr = {},
  575. .prop.type = HAL_PROP_DEVICE_NAME,
  576. /* declare wrong descriptor length */
  577. .prop.len = sizeof(set_name) - 1,
  578. .buf = set_name,
  579. };
  580. struct hidhost_set_info_data {
  581. struct ipc_hdr hdr;
  582. struct hal_cmd_hidhost_set_info info;
  583. /* data placeholder for hal_cmd_hidhost_set_info.descr[0] field */
  584. uint8_t buf[IPC_MTU - sizeof(struct ipc_hdr) -
  585. sizeof(struct hal_cmd_hidhost_set_info)];
  586. } __attribute__((packed));
  587. #define set_info_data "some descriptor"
  588. static struct hidhost_set_info_data hidhost_set_info_data_overs = {
  589. .hdr.service_id = HAL_SERVICE_ID_HIDHOST,
  590. .hdr.opcode = HAL_OP_HIDHOST_SET_INFO,
  591. .hdr.len = sizeof(struct hal_cmd_hidhost_set_info) +
  592. sizeof(set_info_data),
  593. /* declare wrong descriptor length */
  594. .info.descr_len = sizeof(set_info_data) + 1,
  595. /* init .info.descr[0] */
  596. .buf = set_info_data,
  597. };
  598. static struct hidhost_set_info_data hidhost_set_info_data_unders = {
  599. .hdr.service_id = HAL_SERVICE_ID_HIDHOST,
  600. .hdr.opcode = HAL_OP_HIDHOST_SET_INFO,
  601. .hdr.len = sizeof(struct hal_cmd_hidhost_set_info) +
  602. sizeof(set_info_data),
  603. /* declare wrong descriptor length */
  604. .info.descr_len = sizeof(set_info_data) - 1,
  605. /* init .info.descr[0] */
  606. .buf = set_info_data,
  607. };
  608. struct hidhost_set_report_data {
  609. struct ipc_hdr hdr;
  610. struct hal_cmd_hidhost_set_report report;
  611. /* data placeholder for hal_cmd_hidhost_set_report.data[0] field */
  612. uint8_t buf[IPC_MTU - sizeof(struct ipc_hdr) -
  613. sizeof(struct hal_cmd_hidhost_set_report)];
  614. } __attribute__((packed));
  615. #define set_rep_data "1234567890"
  616. static struct hidhost_set_report_data hidhost_set_report_data_overs = {
  617. .hdr.service_id = HAL_SERVICE_ID_HIDHOST,
  618. .hdr.opcode = HAL_OP_HIDHOST_SET_REPORT,
  619. .hdr.len = sizeof(struct hal_cmd_hidhost_set_report) +
  620. sizeof(set_rep_data),
  621. /* declare wrong descriptor length */
  622. .report.len = sizeof(set_rep_data) + 1,
  623. /* init report.data[0] */
  624. .buf = set_rep_data,
  625. };
  626. static struct hidhost_set_report_data hidhost_set_report_data_unders = {
  627. .hdr.service_id = HAL_SERVICE_ID_HIDHOST,
  628. .hdr.opcode = HAL_OP_HIDHOST_SET_REPORT,
  629. .hdr.len = sizeof(struct hal_cmd_hidhost_set_report) +
  630. sizeof(set_rep_data),
  631. /* declare wrong descriptor length */
  632. .report.len = sizeof(set_rep_data) - 1,
  633. /* init report.data[0] */
  634. .buf = set_rep_data,
  635. };
  636. struct hidhost_send_data_data {
  637. struct ipc_hdr hdr;
  638. struct hal_cmd_hidhost_send_data hiddata;
  639. /* data placeholder for hal_cmd_hidhost_send_data.data[0] field */
  640. uint8_t buf[IPC_MTU - sizeof(struct ipc_hdr) -
  641. sizeof(struct hal_cmd_hidhost_send_data)];
  642. } __attribute__((packed));
  643. #define send_data_data "1234567890"
  644. static struct hidhost_send_data_data hidhost_send_data_overs = {
  645. .hdr.service_id = HAL_SERVICE_ID_HIDHOST,
  646. .hdr.opcode = HAL_OP_HIDHOST_SEND_DATA,
  647. .hdr.len = sizeof(struct hal_cmd_hidhost_send_data) +
  648. sizeof(send_data_data),
  649. /* declare wrong descriptor length */
  650. .hiddata.len = sizeof(send_data_data) + 1,
  651. /* init .hiddata.data[0] */
  652. .buf = send_data_data,
  653. };
  654. static struct hidhost_send_data_data hidhost_send_data_unders = {
  655. .hdr.service_id = HAL_SERVICE_ID_HIDHOST,
  656. .hdr.opcode = HAL_OP_HIDHOST_SEND_DATA,
  657. .hdr.len = sizeof(struct hal_cmd_hidhost_send_data) +
  658. sizeof(send_data_data),
  659. /* declare wrong descriptor length */
  660. .hiddata.len = sizeof(send_data_data) - 1,
  661. /* init .hiddata.data[0] */
  662. .buf = send_data_data,
  663. };
  664. #define hfp_number "#1234567890"
  665. struct hfp_dial_data {
  666. struct ipc_hdr hdr;
  667. struct hal_cmd_hf_client_dial data;
  668. uint8_t buf[IPC_MTU - sizeof(struct ipc_hdr) -
  669. sizeof(struct hal_cmd_hf_client_dial)];
  670. } __attribute__((packed));
  671. static struct hfp_dial_data hfp_dial_overs = {
  672. .hdr.service_id = HAL_SERVICE_ID_HANDSFREE_CLIENT,
  673. .hdr.opcode = HAL_OP_HF_CLIENT_DIAL,
  674. .hdr.len = sizeof(struct hal_cmd_hf_client_dial) + sizeof(hfp_number),
  675. .data.number_len = sizeof(hfp_number) + 1,
  676. .buf = hfp_number,
  677. };
  678. static struct hfp_dial_data hfp_dial_unders = {
  679. .hdr.service_id = HAL_SERVICE_ID_HANDSFREE_CLIENT,
  680. .hdr.opcode = HAL_OP_HF_CLIENT_DIAL,
  681. .hdr.len = sizeof(struct hal_cmd_hf_client_dial) + sizeof(hfp_number),
  682. .data.number_len = sizeof(hfp_number) - 1,
  683. .buf = hfp_number,
  684. };
  685. int main(int argc, char *argv[])
  686. {
  687. snprintf(exec_dir, sizeof(exec_dir), "%s", dirname(argv[0]));
  688. tester_init(&argc, &argv);
  689. /* check general IPC errors */
  690. test_generic("Too small data",
  691. ipc_send_tc, setup, teardown,
  692. &register_bt_msg, 1);
  693. test_generic("Malformed data (wrong payload declared)",
  694. ipc_send_tc, setup, teardown,
  695. &register_bt_malformed_size_msg,
  696. sizeof(register_bt_malformed_size_msg),
  697. HAL_SERVICE_ID_BLUETOOTH);
  698. test_generic("Malformed data2 (undersized msg)",
  699. ipc_send_tc, setup, teardown,
  700. &register_bt_msg,
  701. sizeof(register_bt_msg) - 1,
  702. HAL_SERVICE_ID_BLUETOOTH);
  703. test_generic("Malformed data3 (oversized msg)",
  704. ipc_send_tc, setup, teardown,
  705. &malformed_data3_msg,
  706. sizeof(malformed_data3_msg),
  707. HAL_SERVICE_ID_BLUETOOTH);
  708. test_generic("Invalid service",
  709. ipc_send_tc, setup, teardown,
  710. &enable_unknown_service_hdr,
  711. sizeof(enable_unknown_service_hdr),
  712. HAL_SERVICE_ID_BLUETOOTH);
  713. test_generic("Enable unregistered service",
  714. ipc_send_tc, setup, teardown,
  715. &enable_bt_service_hdr,
  716. sizeof(enable_bt_service_hdr));
  717. /* check service handler's max opcode value */
  718. test_opcode_valid("CORE", HAL_SERVICE_ID_CORE, 0x03, 0);
  719. test_opcode_valid("BLUETOOTH", HAL_SERVICE_ID_BLUETOOTH, 0x15, 0,
  720. HAL_SERVICE_ID_BLUETOOTH);
  721. test_opcode_valid("SOCK", HAL_SERVICE_ID_SOCKET, 0x03, 0,
  722. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_SOCKET);
  723. test_opcode_valid("HIDHOST", HAL_SERVICE_ID_HIDHOST, 0x10, 0,
  724. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  725. test_opcode_valid("PAN", HAL_SERVICE_ID_PAN, 0x05, 0,
  726. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_PAN);
  727. test_opcode_valid("HANDSFREE", HAL_SERVICE_ID_HANDSFREE, 0x10, 0,
  728. HAL_SERVICE_ID_BLUETOOTH,
  729. HAL_SERVICE_ID_HANDSFREE);
  730. test_opcode_valid("A2DP", HAL_SERVICE_ID_A2DP, 0x03, 0,
  731. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_A2DP);
  732. test_opcode_valid("HEALTH", HAL_SERVICE_ID_HEALTH, 0x06, 0,
  733. HAL_SERVICE_ID_BLUETOOTH,
  734. HAL_SERVICE_ID_HEALTH);
  735. test_opcode_valid("AVRCP", HAL_SERVICE_ID_AVRCP, 0x0b, 0,
  736. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_AVRCP);
  737. test_opcode_valid("GATT", HAL_SERVICE_ID_GATT, 0x24, 0,
  738. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_GATT);
  739. test_opcode_valid("HF_CLIENT", HAL_SERVICE_ID_HANDSFREE_CLIENT, 0x10, 0,
  740. HAL_SERVICE_ID_BLUETOOTH,
  741. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  742. test_opcode_valid("MAP_CLIENT", HAL_SERVICE_ID_MAP_CLIENT, 0x01, 0,
  743. HAL_SERVICE_ID_BLUETOOTH,
  744. HAL_SERVICE_ID_MAP_CLIENT);
  745. /* check for valid data size */
  746. test_datasize_valid("CORE Register+", HAL_SERVICE_ID_CORE,
  747. HAL_OP_REGISTER_MODULE,
  748. sizeof(struct hal_cmd_register_module), 1);
  749. test_datasize_valid("CORE Register-", HAL_SERVICE_ID_CORE,
  750. HAL_OP_REGISTER_MODULE,
  751. sizeof(struct hal_cmd_register_module), -1);
  752. test_datasize_valid("CORE Unregister+", HAL_SERVICE_ID_CORE,
  753. HAL_OP_UNREGISTER_MODULE,
  754. sizeof(struct hal_cmd_unregister_module), 1);
  755. test_datasize_valid("CORE Unregister-", HAL_SERVICE_ID_CORE,
  756. HAL_OP_UNREGISTER_MODULE,
  757. sizeof(struct hal_cmd_unregister_module), -1);
  758. /* check for valid data size for BLUETOOTH */
  759. test_datasize_valid("BT Enable+", HAL_SERVICE_ID_BLUETOOTH,
  760. HAL_OP_ENABLE,
  761. 0, 1,
  762. HAL_SERVICE_ID_BLUETOOTH);
  763. test_datasize_valid("BT Disable+", HAL_SERVICE_ID_BLUETOOTH,
  764. HAL_OP_DISABLE,
  765. 0, 1,
  766. HAL_SERVICE_ID_BLUETOOTH);
  767. test_datasize_valid("BT Get Adapter Props+", HAL_SERVICE_ID_BLUETOOTH,
  768. HAL_OP_GET_ADAPTER_PROPS,
  769. 0, 1,
  770. HAL_SERVICE_ID_BLUETOOTH);
  771. test_datasize_valid("BT Get Adapter Prop+", HAL_SERVICE_ID_BLUETOOTH,
  772. HAL_OP_GET_ADAPTER_PROP,
  773. sizeof(struct hal_cmd_get_adapter_prop), 1,
  774. HAL_SERVICE_ID_BLUETOOTH);
  775. test_datasize_valid("BT Get Adapter Prop-", HAL_SERVICE_ID_BLUETOOTH,
  776. HAL_OP_GET_ADAPTER_PROP,
  777. sizeof(struct hal_cmd_get_adapter_prop), -1,
  778. HAL_SERVICE_ID_BLUETOOTH);
  779. test_datasize_valid("BT Set Adapter Prop+", HAL_SERVICE_ID_BLUETOOTH,
  780. HAL_OP_SET_ADAPTER_PROP,
  781. sizeof(struct hal_cmd_set_adapter_prop), 1,
  782. HAL_SERVICE_ID_BLUETOOTH);
  783. test_datasize_valid("BT Set Adapter Prop-", HAL_SERVICE_ID_BLUETOOTH,
  784. HAL_OP_SET_ADAPTER_PROP,
  785. sizeof(struct hal_cmd_set_adapter_prop), -1,
  786. HAL_SERVICE_ID_BLUETOOTH);
  787. test_generic("Data size BT Set Adapter Prop Vardata+",
  788. ipc_send_tc, setup, teardown,
  789. &bt_set_adapter_prop_data_overs,
  790. (sizeof(struct ipc_hdr) +
  791. sizeof(struct hal_cmd_set_adapter_prop) +
  792. sizeof(set_name)),
  793. HAL_SERVICE_ID_BLUETOOTH);
  794. test_generic("Data size BT Set Adapter Prop Vardata+",
  795. ipc_send_tc, setup, teardown,
  796. &bt_set_adapter_prop_data_unders,
  797. (sizeof(struct ipc_hdr) +
  798. sizeof(struct hal_cmd_set_adapter_prop) +
  799. sizeof(set_name)),
  800. HAL_SERVICE_ID_BLUETOOTH);
  801. test_datasize_valid("BT Get Remote Props+", HAL_SERVICE_ID_BLUETOOTH,
  802. HAL_OP_GET_REMOTE_DEVICE_PROPS,
  803. sizeof(struct hal_cmd_get_remote_device_props), 1,
  804. HAL_SERVICE_ID_BLUETOOTH);
  805. test_datasize_valid("BT Get Remote Props-", HAL_SERVICE_ID_BLUETOOTH,
  806. HAL_OP_GET_REMOTE_DEVICE_PROPS,
  807. sizeof(struct hal_cmd_get_remote_device_props), -1,
  808. HAL_SERVICE_ID_BLUETOOTH);
  809. test_datasize_valid("BT Get Remote Prop+", HAL_SERVICE_ID_BLUETOOTH,
  810. HAL_OP_GET_REMOTE_DEVICE_PROP,
  811. sizeof(struct hal_cmd_get_remote_device_prop), 1,
  812. HAL_SERVICE_ID_BLUETOOTH);
  813. test_datasize_valid("BT Get Remote Prop-", HAL_SERVICE_ID_BLUETOOTH,
  814. HAL_OP_GET_REMOTE_DEVICE_PROP,
  815. sizeof(struct hal_cmd_get_remote_device_prop), -1,
  816. HAL_SERVICE_ID_BLUETOOTH);
  817. test_datasize_valid("BT Set Remote Prop+", HAL_SERVICE_ID_BLUETOOTH,
  818. HAL_OP_SET_REMOTE_DEVICE_PROP,
  819. sizeof(struct hal_cmd_set_remote_device_prop), 1,
  820. HAL_SERVICE_ID_BLUETOOTH);
  821. test_datasize_valid("BT Set Remote Prop-", HAL_SERVICE_ID_BLUETOOTH,
  822. HAL_OP_SET_REMOTE_DEVICE_PROP,
  823. sizeof(struct hal_cmd_set_remote_device_prop), -1,
  824. HAL_SERVICE_ID_BLUETOOTH);
  825. test_generic("Data size BT Set Remote Prop Vardata+",
  826. ipc_send_tc, setup, teardown,
  827. &bt_set_remote_prop_data_overs,
  828. (sizeof(struct ipc_hdr) +
  829. sizeof(struct hal_cmd_set_remote_device_prop) +
  830. sizeof(set_name)),
  831. HAL_SERVICE_ID_BLUETOOTH);
  832. test_generic("Data size BT Set Remote Prop Vardata-",
  833. ipc_send_tc, setup, teardown,
  834. &bt_set_remote_prop_data_unders,
  835. (sizeof(struct ipc_hdr) +
  836. sizeof(struct hal_cmd_set_remote_device_prop) +
  837. sizeof(set_name)),
  838. HAL_SERVICE_ID_BLUETOOTH);
  839. test_datasize_valid("BT Get Remote SV Rec+", HAL_SERVICE_ID_BLUETOOTH,
  840. HAL_OP_GET_REMOTE_SERVICE_REC,
  841. sizeof(struct hal_cmd_get_remote_service_rec), 1,
  842. HAL_SERVICE_ID_BLUETOOTH);
  843. test_datasize_valid("BT Get Remote SV Rec-", HAL_SERVICE_ID_BLUETOOTH,
  844. HAL_OP_GET_REMOTE_SERVICE_REC,
  845. sizeof(struct hal_cmd_get_remote_service_rec), -1,
  846. HAL_SERVICE_ID_BLUETOOTH);
  847. test_datasize_valid("BT Get Remote Services+", HAL_SERVICE_ID_BLUETOOTH,
  848. HAL_OP_GET_REMOTE_SERVICES,
  849. sizeof(struct hal_cmd_get_remote_services), 1,
  850. HAL_SERVICE_ID_BLUETOOTH);
  851. test_datasize_valid("BT Get Remote Services-", HAL_SERVICE_ID_BLUETOOTH,
  852. HAL_OP_GET_REMOTE_SERVICES,
  853. sizeof(struct hal_cmd_get_remote_services), -1,
  854. HAL_SERVICE_ID_BLUETOOTH);
  855. test_datasize_valid("BT Start Discovery+", HAL_SERVICE_ID_BLUETOOTH,
  856. HAL_OP_START_DISCOVERY,
  857. 0, 1,
  858. HAL_SERVICE_ID_BLUETOOTH);
  859. test_datasize_valid("BT Cancel Discovery+", HAL_SERVICE_ID_BLUETOOTH,
  860. HAL_OP_CANCEL_DISCOVERY,
  861. 0, 1,
  862. HAL_SERVICE_ID_BLUETOOTH);
  863. test_datasize_valid("BT Create Bond+", HAL_SERVICE_ID_BLUETOOTH,
  864. HAL_OP_CREATE_BOND,
  865. sizeof(struct hal_cmd_create_bond), 1,
  866. HAL_SERVICE_ID_BLUETOOTH);
  867. test_datasize_valid("BT Create Bond-", HAL_SERVICE_ID_BLUETOOTH,
  868. HAL_OP_CREATE_BOND,
  869. sizeof(struct hal_cmd_create_bond), -1,
  870. HAL_SERVICE_ID_BLUETOOTH);
  871. test_datasize_valid("BT Remove Bond+", HAL_SERVICE_ID_BLUETOOTH,
  872. HAL_OP_REMOVE_BOND,
  873. sizeof(struct hal_cmd_remove_bond), 1,
  874. HAL_SERVICE_ID_BLUETOOTH);
  875. test_datasize_valid("BT Remove Bond-", HAL_SERVICE_ID_BLUETOOTH,
  876. HAL_OP_REMOVE_BOND,
  877. sizeof(struct hal_cmd_remove_bond), -1,
  878. HAL_SERVICE_ID_BLUETOOTH);
  879. test_datasize_valid("BT Cancel Bond+", HAL_SERVICE_ID_BLUETOOTH,
  880. HAL_OP_CANCEL_BOND,
  881. sizeof(struct hal_cmd_cancel_bond), 1,
  882. HAL_SERVICE_ID_BLUETOOTH);
  883. test_datasize_valid("BT Cancel Bond-", HAL_SERVICE_ID_BLUETOOTH,
  884. HAL_OP_CANCEL_BOND,
  885. sizeof(struct hal_cmd_cancel_bond), -1,
  886. HAL_SERVICE_ID_BLUETOOTH);
  887. test_datasize_valid("BT Pin Reply+", HAL_SERVICE_ID_BLUETOOTH,
  888. HAL_OP_PIN_REPLY,
  889. sizeof(struct hal_cmd_pin_reply), 1,
  890. HAL_SERVICE_ID_BLUETOOTH);
  891. test_datasize_valid("BT Pin Reply-", HAL_SERVICE_ID_BLUETOOTH,
  892. HAL_OP_PIN_REPLY,
  893. sizeof(struct hal_cmd_pin_reply), -1,
  894. HAL_SERVICE_ID_BLUETOOTH);
  895. test_datasize_valid("BT SSP Reply+", HAL_SERVICE_ID_BLUETOOTH,
  896. HAL_OP_SSP_REPLY,
  897. sizeof(struct hal_cmd_ssp_reply), 1,
  898. HAL_SERVICE_ID_BLUETOOTH);
  899. test_datasize_valid("BT SSP Reply-", HAL_SERVICE_ID_BLUETOOTH,
  900. HAL_OP_SSP_REPLY,
  901. sizeof(struct hal_cmd_ssp_reply), -1,
  902. HAL_SERVICE_ID_BLUETOOTH);
  903. test_datasize_valid("BT DUT Mode Conf+", HAL_SERVICE_ID_BLUETOOTH,
  904. HAL_OP_DUT_MODE_CONF,
  905. sizeof(struct hal_cmd_dut_mode_conf), 1,
  906. HAL_SERVICE_ID_BLUETOOTH);
  907. test_datasize_valid("BT DUT Mode Conf-", HAL_SERVICE_ID_BLUETOOTH,
  908. HAL_OP_DUT_MODE_CONF,
  909. sizeof(struct hal_cmd_dut_mode_conf), -1,
  910. HAL_SERVICE_ID_BLUETOOTH);
  911. test_datasize_valid("BT DUT Mode Send+", HAL_SERVICE_ID_BLUETOOTH,
  912. HAL_OP_DUT_MODE_SEND,
  913. sizeof(struct hal_cmd_dut_mode_send), 1,
  914. HAL_SERVICE_ID_BLUETOOTH);
  915. test_datasize_valid("BT DUT Mode Send-", HAL_SERVICE_ID_BLUETOOTH,
  916. HAL_OP_DUT_MODE_SEND,
  917. sizeof(struct hal_cmd_dut_mode_send), -1,
  918. HAL_SERVICE_ID_BLUETOOTH);
  919. test_datasize_valid("BT LE Test+", HAL_SERVICE_ID_BLUETOOTH,
  920. HAL_OP_LE_TEST_MODE,
  921. sizeof(struct hal_cmd_le_test_mode), 1,
  922. HAL_SERVICE_ID_BLUETOOTH);
  923. test_datasize_valid("BT LE Test-", HAL_SERVICE_ID_BLUETOOTH,
  924. HAL_OP_LE_TEST_MODE,
  925. sizeof(struct hal_cmd_le_test_mode), -1,
  926. HAL_SERVICE_ID_BLUETOOTH);
  927. /* check for valid data size for SOCK */
  928. test_datasize_valid("SOCKET Listen+", HAL_SERVICE_ID_SOCKET,
  929. HAL_OP_SOCKET_LISTEN,
  930. sizeof(struct hal_cmd_socket_listen), 1,
  931. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_SOCKET);
  932. test_datasize_valid("SOCKET Listen-", HAL_SERVICE_ID_SOCKET,
  933. HAL_OP_SOCKET_LISTEN,
  934. sizeof(struct hal_cmd_socket_listen), -1,
  935. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_SOCKET);
  936. test_datasize_valid("SOCKET Connect+", HAL_SERVICE_ID_SOCKET,
  937. HAL_OP_SOCKET_CONNECT,
  938. sizeof(struct hal_cmd_socket_connect), 1,
  939. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_SOCKET);
  940. test_datasize_valid("SOCKET Connect-", HAL_SERVICE_ID_SOCKET,
  941. HAL_OP_SOCKET_CONNECT,
  942. sizeof(struct hal_cmd_socket_connect), -1,
  943. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_SOCKET);
  944. /* check for valid data size for HID Host */
  945. test_datasize_valid("HIDHOST Connect+", HAL_SERVICE_ID_HIDHOST,
  946. HAL_OP_HIDHOST_CONNECT,
  947. sizeof(struct hal_cmd_hidhost_connect), 1,
  948. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  949. test_datasize_valid("HIDHOST Connect-", HAL_SERVICE_ID_HIDHOST,
  950. HAL_OP_HIDHOST_CONNECT,
  951. sizeof(struct hal_cmd_hidhost_connect), -1,
  952. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  953. test_datasize_valid("HIDHOST Disconnect+", HAL_SERVICE_ID_HIDHOST,
  954. HAL_OP_HIDHOST_DISCONNECT,
  955. sizeof(struct hal_cmd_hidhost_disconnect), 1,
  956. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  957. test_datasize_valid("HIDHOST Disconnect-", HAL_SERVICE_ID_HIDHOST,
  958. HAL_OP_HIDHOST_DISCONNECT,
  959. sizeof(struct hal_cmd_hidhost_disconnect), -1,
  960. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  961. test_datasize_valid("HIDHOST Virt. Unplug+", HAL_SERVICE_ID_HIDHOST,
  962. HAL_OP_HIDHOST_VIRTUAL_UNPLUG,
  963. sizeof(struct hal_cmd_hidhost_virtual_unplug), 1,
  964. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  965. test_datasize_valid("HIDHOST Virt. Unplug-", HAL_SERVICE_ID_HIDHOST,
  966. HAL_OP_HIDHOST_VIRTUAL_UNPLUG,
  967. sizeof(struct hal_cmd_hidhost_virtual_unplug), -1,
  968. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  969. test_datasize_valid("HIDHOST Set Info+", HAL_SERVICE_ID_HIDHOST,
  970. HAL_OP_HIDHOST_SET_INFO,
  971. sizeof(struct hal_cmd_hidhost_set_info), 1,
  972. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  973. test_datasize_valid("HIDHOST Set Info-", HAL_SERVICE_ID_HIDHOST,
  974. HAL_OP_HIDHOST_SET_INFO,
  975. sizeof(struct hal_cmd_hidhost_set_info), -1,
  976. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  977. test_generic("Data size HIDHOST Set Info Vardata+",
  978. ipc_send_tc, setup, teardown,
  979. &hidhost_set_info_data_overs,
  980. (sizeof(struct ipc_hdr) +
  981. sizeof(struct hal_cmd_hidhost_set_info) +
  982. sizeof(set_info_data)),
  983. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  984. test_generic("Data size HIDHOST Set Info Vardata-",
  985. ipc_send_tc, setup, teardown,
  986. &hidhost_set_info_data_unders,
  987. (sizeof(struct ipc_hdr) +
  988. sizeof(struct hal_cmd_hidhost_set_info) +
  989. sizeof(set_info_data)),
  990. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  991. test_datasize_valid("HIDHOST Get Protocol+", HAL_SERVICE_ID_HIDHOST,
  992. HAL_OP_HIDHOST_GET_PROTOCOL,
  993. sizeof(struct hal_cmd_hidhost_get_protocol), 1,
  994. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  995. test_datasize_valid("HIDHOST Get Protocol-", HAL_SERVICE_ID_HIDHOST,
  996. HAL_OP_HIDHOST_GET_PROTOCOL,
  997. sizeof(struct hal_cmd_hidhost_get_protocol), -1,
  998. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  999. test_datasize_valid("HIDHOST Set Protocol+", HAL_SERVICE_ID_HIDHOST,
  1000. HAL_OP_HIDHOST_SET_PROTOCOL,
  1001. sizeof(struct hal_cmd_hidhost_set_protocol), 1,
  1002. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1003. test_datasize_valid("HIDHOST Set Protocol-", HAL_SERVICE_ID_HIDHOST,
  1004. HAL_OP_HIDHOST_SET_PROTOCOL,
  1005. sizeof(struct hal_cmd_hidhost_set_protocol), -1,
  1006. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1007. test_datasize_valid("HIDHOST Get Report+", HAL_SERVICE_ID_HIDHOST,
  1008. HAL_OP_HIDHOST_GET_REPORT,
  1009. sizeof(struct hal_cmd_hidhost_get_report), 1,
  1010. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1011. test_datasize_valid("HIDHOST Get Report-", HAL_SERVICE_ID_HIDHOST,
  1012. HAL_OP_HIDHOST_GET_REPORT,
  1013. sizeof(struct hal_cmd_hidhost_get_report), -1,
  1014. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1015. test_datasize_valid("HIDHOST Set Report+", HAL_SERVICE_ID_HIDHOST,
  1016. HAL_OP_HIDHOST_SET_REPORT,
  1017. sizeof(struct hal_cmd_hidhost_set_report), 1,
  1018. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1019. test_datasize_valid("HIDHOST Set Report-", HAL_SERVICE_ID_HIDHOST,
  1020. HAL_OP_HIDHOST_SET_REPORT,
  1021. sizeof(struct hal_cmd_hidhost_set_report), -1,
  1022. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1023. test_generic("Data size HIDHOST Set Report Vardata+",
  1024. ipc_send_tc, setup, teardown,
  1025. &hidhost_set_report_data_overs,
  1026. (sizeof(struct ipc_hdr) +
  1027. sizeof(struct hal_cmd_hidhost_set_report) +
  1028. sizeof(set_rep_data)),
  1029. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1030. test_generic("Data size HIDHOST Set Report Vardata-",
  1031. ipc_send_tc, setup, teardown,
  1032. &hidhost_set_report_data_unders,
  1033. (sizeof(struct ipc_hdr) +
  1034. sizeof(struct hal_cmd_hidhost_set_report) +
  1035. sizeof(set_rep_data)),
  1036. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1037. test_datasize_valid("HIDHOST Send Data+", HAL_SERVICE_ID_HIDHOST,
  1038. HAL_OP_HIDHOST_SEND_DATA,
  1039. sizeof(struct hal_cmd_hidhost_send_data), 1,
  1040. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1041. test_datasize_valid("HIDHOST Send Data-", HAL_SERVICE_ID_HIDHOST,
  1042. HAL_OP_HIDHOST_SEND_DATA,
  1043. sizeof(struct hal_cmd_hidhost_send_data), -1,
  1044. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1045. test_generic("Data size HIDHOST Send Vardata+",
  1046. ipc_send_tc, setup, teardown,
  1047. &hidhost_send_data_overs,
  1048. (sizeof(struct ipc_hdr) +
  1049. sizeof(struct hal_cmd_hidhost_send_data) +
  1050. sizeof(send_data_data)),
  1051. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1052. test_generic("Data size HIDHOST Send Vardata-",
  1053. ipc_send_tc, setup, teardown,
  1054. &hidhost_send_data_unders,
  1055. (sizeof(struct ipc_hdr) +
  1056. sizeof(struct hal_cmd_hidhost_send_data) +
  1057. sizeof(send_data_data)),
  1058. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_HIDHOST);
  1059. /* check for valid data size for PAN */
  1060. test_datasize_valid("PAN Enable+", HAL_SERVICE_ID_PAN,
  1061. HAL_OP_PAN_ENABLE,
  1062. sizeof(struct hal_cmd_pan_enable), 1,
  1063. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_PAN);
  1064. test_datasize_valid("PAN Enable-", HAL_SERVICE_ID_PAN,
  1065. HAL_OP_PAN_ENABLE,
  1066. sizeof(struct hal_cmd_pan_enable), -1,
  1067. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_PAN);
  1068. test_datasize_valid("PAN Get Role+", HAL_SERVICE_ID_PAN,
  1069. HAL_OP_PAN_GET_ROLE,
  1070. 0, 1,
  1071. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_PAN);
  1072. test_datasize_valid("PAN Connect+", HAL_SERVICE_ID_PAN,
  1073. HAL_OP_PAN_CONNECT,
  1074. sizeof(struct hal_cmd_pan_connect), 1,
  1075. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_PAN);
  1076. test_datasize_valid("PAN Connect-", HAL_SERVICE_ID_PAN,
  1077. HAL_OP_PAN_CONNECT,
  1078. sizeof(struct hal_cmd_pan_connect), -1,
  1079. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_PAN);
  1080. test_datasize_valid("PAN Disconnect+", HAL_SERVICE_ID_PAN,
  1081. HAL_OP_PAN_DISCONNECT,
  1082. sizeof(struct hal_cmd_pan_disconnect), 1,
  1083. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_PAN);
  1084. test_datasize_valid("PAN Disconnect-", HAL_SERVICE_ID_PAN,
  1085. HAL_OP_PAN_DISCONNECT,
  1086. sizeof(struct hal_cmd_pan_disconnect), -1,
  1087. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_PAN);
  1088. /* check for valid data size for A2DP */
  1089. test_datasize_valid("A2DP Connect+", HAL_SERVICE_ID_A2DP,
  1090. HAL_OP_A2DP_CONNECT,
  1091. sizeof(struct hal_cmd_a2dp_connect), 1,
  1092. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_A2DP);
  1093. test_datasize_valid("A2DP Connect-", HAL_SERVICE_ID_A2DP,
  1094. HAL_OP_A2DP_CONNECT,
  1095. sizeof(struct hal_cmd_a2dp_connect), -1,
  1096. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_A2DP);
  1097. test_datasize_valid("A2DP Disconnect+", HAL_SERVICE_ID_A2DP,
  1098. HAL_OP_A2DP_DISCONNECT,
  1099. sizeof(struct hal_cmd_a2dp_disconnect), 1,
  1100. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_A2DP);
  1101. test_datasize_valid("A2DP Disconnect-", HAL_SERVICE_ID_A2DP,
  1102. HAL_OP_A2DP_DISCONNECT,
  1103. sizeof(struct hal_cmd_a2dp_disconnect), -1,
  1104. HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_A2DP);
  1105. /* Check for valid data size for Handsfree Client */
  1106. test_datasize_valid("HF_CLIENT Connect+",
  1107. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1108. HAL_OP_HF_CLIENT_CONNECT,
  1109. sizeof(struct hal_cmd_hf_client_connect), 1,
  1110. HAL_SERVICE_ID_BLUETOOTH,
  1111. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1112. test_datasize_valid("HF_CLIENT Connect-",
  1113. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1114. HAL_OP_HF_CLIENT_CONNECT,
  1115. sizeof(struct hal_cmd_hf_client_connect), -1,
  1116. HAL_SERVICE_ID_BLUETOOTH,
  1117. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1118. test_datasize_valid("HF_CLIENT Disconnect+",
  1119. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1120. HAL_OP_HF_CLIENT_DISCONNECT,
  1121. sizeof(struct hal_cmd_hf_client_disconnect), 1,
  1122. HAL_SERVICE_ID_BLUETOOTH,
  1123. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1124. test_datasize_valid("HF_CLIENT Disconnect-",
  1125. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1126. HAL_OP_HF_CLIENT_DISCONNECT,
  1127. sizeof(struct hal_cmd_hf_client_disconnect), -1,
  1128. HAL_SERVICE_ID_BLUETOOTH,
  1129. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1130. test_datasize_valid("HF_CLIENT Connect Audio+",
  1131. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1132. HAL_OP_HF_CLIENT_CONNECT_AUDIO,
  1133. sizeof(struct hal_cmd_hf_client_connect_audio), 1,
  1134. HAL_SERVICE_ID_BLUETOOTH,
  1135. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1136. test_datasize_valid("HF_CLIENT Connect Audio-",
  1137. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1138. HAL_OP_HF_CLIENT_CONNECT_AUDIO,
  1139. sizeof(struct hal_cmd_hf_client_connect_audio), -1,
  1140. HAL_SERVICE_ID_BLUETOOTH,
  1141. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1142. test_datasize_valid("HF_CLIENT Disconnect Audio+",
  1143. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1144. HAL_OP_HF_CLIENT_DISCONNECT_AUDIO,
  1145. sizeof(struct hal_cmd_hf_client_disconnect_audio), 1,
  1146. HAL_SERVICE_ID_BLUETOOTH,
  1147. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1148. test_datasize_valid("HF_CLIENT Disconnect Audio-",
  1149. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1150. HAL_OP_HF_CLIENT_DISCONNECT_AUDIO,
  1151. sizeof(struct hal_cmd_hf_client_disconnect_audio), -1,
  1152. HAL_SERVICE_ID_BLUETOOTH,
  1153. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1154. test_datasize_valid("HF_CLIENT Start VR+",
  1155. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1156. HAL_OP_HF_CLIENT_START_VR,
  1157. 0, 1,
  1158. HAL_SERVICE_ID_BLUETOOTH,
  1159. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1160. test_datasize_valid("HF_CLIENT Start VR-",
  1161. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1162. HAL_OP_HF_CLIENT_START_VR,
  1163. 0, -1,
  1164. HAL_SERVICE_ID_BLUETOOTH,
  1165. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1166. test_datasize_valid("HF_CLIENT Stop VR+",
  1167. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1168. HAL_OP_HF_CLIENT_STOP_VR,
  1169. 0, 1,
  1170. HAL_SERVICE_ID_BLUETOOTH,
  1171. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1172. test_datasize_valid("HF_CLIENT Stop VR-",
  1173. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1174. HAL_OP_HF_CLIENT_STOP_VR,
  1175. 0, -1,
  1176. HAL_SERVICE_ID_BLUETOOTH,
  1177. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1178. test_datasize_valid("HF_CLIENT Vol Contr.+",
  1179. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1180. HAL_OP_HF_CLIENT_VOLUME_CONTROL,
  1181. sizeof(struct hal_cmd_hf_client_volume_control), 1,
  1182. HAL_SERVICE_ID_BLUETOOTH,
  1183. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1184. test_datasize_valid("HF_CLIENT Vol Contr.-",
  1185. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1186. HAL_OP_HF_CLIENT_VOLUME_CONTROL,
  1187. sizeof(struct hal_cmd_hf_client_volume_control), -1,
  1188. HAL_SERVICE_ID_BLUETOOTH,
  1189. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1190. test_generic("Data size HF_CLIENT Dial Vardata+",
  1191. ipc_send_tc, setup, teardown,
  1192. &hfp_dial_overs,
  1193. (sizeof(struct ipc_hdr) +
  1194. sizeof(struct hal_cmd_hf_client_dial) +
  1195. sizeof(hfp_number)),
  1196. HAL_SERVICE_ID_BLUETOOTH,
  1197. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1198. test_generic("Data size HF_CLIENT Dial Vardata-",
  1199. ipc_send_tc, setup, teardown,
  1200. &hfp_dial_unders,
  1201. (sizeof(struct ipc_hdr) +
  1202. sizeof(struct hal_cmd_hf_client_dial) +
  1203. sizeof(hfp_number)),
  1204. HAL_SERVICE_ID_BLUETOOTH,
  1205. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1206. test_datasize_valid("HF_CLIENT Dial Memory+",
  1207. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1208. HAL_OP_HF_CLIENT_DIAL_MEMORY,
  1209. sizeof(struct hal_cmd_hf_client_dial_memory), 1,
  1210. HAL_SERVICE_ID_BLUETOOTH,
  1211. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1212. test_datasize_valid("HF_CLIENT Dial Memory-",
  1213. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1214. HAL_OP_HF_CLIENT_DIAL_MEMORY,
  1215. sizeof(struct hal_cmd_hf_client_dial_memory), -1,
  1216. HAL_SERVICE_ID_BLUETOOTH,
  1217. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1218. test_datasize_valid("HF_CLIENT Call Action+",
  1219. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1220. HAL_OP_HF_CLIENT_CALL_ACTION,
  1221. sizeof(struct hal_cmd_hf_client_call_action), 1,
  1222. HAL_SERVICE_ID_BLUETOOTH,
  1223. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1224. test_datasize_valid("HF_CLIENT Call Action-",
  1225. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1226. HAL_OP_HF_CLIENT_CALL_ACTION,
  1227. sizeof(struct hal_cmd_hf_client_call_action), -1,
  1228. HAL_SERVICE_ID_BLUETOOTH,
  1229. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1230. test_datasize_valid("HF_CLIENT Query Current Calls+",
  1231. HAL_SERVICE_ID_BLUETOOTH,
  1232. HAL_OP_HF_CLIENT_QUERY_CURRENT_CALLS,
  1233. 0, 1,
  1234. HAL_SERVICE_ID_BLUETOOTH,
  1235. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1236. test_datasize_valid("HF_CLIENT Query Current Calls-",
  1237. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1238. HAL_OP_HF_CLIENT_QUERY_CURRENT_CALLS,
  1239. 0, -1,
  1240. HAL_SERVICE_ID_BLUETOOTH,
  1241. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1242. test_datasize_valid("HF_CLIENT Query Operator Name+",
  1243. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1244. HAL_OP_HF_CLIENT_QUERY_OPERATOR_NAME,
  1245. 0, 1,
  1246. HAL_SERVICE_ID_BLUETOOTH,
  1247. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1248. test_datasize_valid("HF_CLIENT Query Operator Name-",
  1249. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1250. HAL_OP_HF_CLIENT_QUERY_OPERATOR_NAME,
  1251. 0, -1,
  1252. HAL_SERVICE_ID_BLUETOOTH,
  1253. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1254. test_datasize_valid("HF_CLIENT Retrieve Subscrb. Info+",
  1255. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1256. HAL_OP_HF_CLIENT_RETRIEVE_SUBSCR_INFO,
  1257. 0, 1,
  1258. HAL_SERVICE_ID_BLUETOOTH,
  1259. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1260. test_datasize_valid("HF_CLIENT Retrieve Subscrb. Info-",
  1261. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1262. HAL_OP_HF_CLIENT_RETRIEVE_SUBSCR_INFO,
  1263. 0, -1,
  1264. HAL_SERVICE_ID_BLUETOOTH,
  1265. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1266. test_datasize_valid("HF_CLIENT Send DTMF+",
  1267. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1268. HAL_OP_HF_CLIENT_SEND_DTMF,
  1269. sizeof(struct hal_cmd_hf_client_send_dtmf), 1,
  1270. HAL_SERVICE_ID_BLUETOOTH,
  1271. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1272. test_datasize_valid("HF_CLIENT Send DTMF-",
  1273. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1274. HAL_OP_HF_CLIENT_SEND_DTMF,
  1275. sizeof(struct hal_cmd_hf_client_send_dtmf), -1,
  1276. HAL_SERVICE_ID_BLUETOOTH,
  1277. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1278. test_datasize_valid("HF_CLIENT Get Last Voice Tag+",
  1279. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1280. HAL_OP_HF_CLIENT_GET_LAST_VOICE_TAG_NUM,
  1281. 0, 1,
  1282. HAL_SERVICE_ID_BLUETOOTH,
  1283. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1284. test_datasize_valid("HF_CLIENT Get Last Voice Tag-",
  1285. HAL_SERVICE_ID_HANDSFREE_CLIENT,
  1286. HAL_OP_HF_CLIENT_GET_LAST_VOICE_TAG_NUM,
  1287. 0, -1,
  1288. HAL_SERVICE_ID_BLUETOOTH,
  1289. HAL_SERVICE_ID_HANDSFREE_CLIENT);
  1290. /* check for valid data size for MAP CLIENT */
  1291. test_datasize_valid("MAP CLIENT Get instances+",
  1292. HAL_SERVICE_ID_MAP_CLIENT,
  1293. HAL_OP_MAP_CLIENT_GET_INSTANCES,
  1294. sizeof(struct hal_cmd_map_client_get_instances),
  1295. 1, HAL_SERVICE_ID_BLUETOOTH,
  1296. HAL_SERVICE_ID_MAP_CLIENT);
  1297. test_datasize_valid("MAP CLIENT Get instances-",
  1298. HAL_SERVICE_ID_MAP_CLIENT,
  1299. HAL_OP_MAP_CLIENT_GET_INSTANCES,
  1300. sizeof(struct hal_cmd_map_client_get_instances),
  1301. -1, HAL_SERVICE_ID_BLUETOOTH,
  1302. HAL_SERVICE_ID_MAP_CLIENT);
  1303. return tester_run();
  1304. }