2 #include <usb_accessory.h>
3 #include <Elementary.h>
7 #define LOG_TAG "USB_ACC_TEST"
9 #define ACC_LOG(fmt, args...) SLOGD(fmt, ##args)
19 usb_accessory_h usbAcc;
21 Evas_Object *win = NULL;
22 Evas_Object *bg = NULL;
23 Evas_Object *btn1 = NULL;
24 Evas_Object *btn2 = NULL;
25 Evas_Object *btn3 = NULL;
26 Evas_Object *btn4 = NULL;
27 Evas_Object *popup = NULL;
29 static void unload_popup();
31 static void _block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
33 ACC_LOG("ENTER: _block_clicked_cb()");
35 ACC_LOG("EXIT: _block_clicked_cb()");
38 static void _timeout_cb(void *data, Evas_Object *obj, void *event_info)
40 ACC_LOG("ENTER: _timeout_cb()");
42 ACC_LOG("EXIT: _timeout_cb()");
45 static void unload_popup()
47 ACC_LOG("ENTER: unload_popup()");
48 evas_object_smart_callback_del(popup, "block,clicked", _block_clicked_cb);
49 evas_object_smart_callback_del(popup, "timeout", _timeout_cb);
51 evas_object_del(popup);
54 ACC_LOG("EXIT: unload_popup()");
57 static void launch_popup(char *str)
59 ACC_LOG("ENTER: launch_popup(char *str)");
62 evas_object_del(popup);
65 popup = elm_popup_add(win);
66 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
67 elm_object_text_set(popup, str);
68 evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
69 elm_popup_timeout_set(popup, 3.0);
70 evas_object_smart_callback_add(popup, "timeout", _timeout_cb, NULL);
71 evas_object_show(popup);
72 ACC_LOG("EXIT: launch_popup(char *str)");
75 void connect_acc_cb(void *data)
77 ACC_LOG("ENTER: connect_acc_cb()");
78 ACC_LOG("EXIT: connect_acc_cb()");
81 void disconnect_acc_cb(void *data)
83 ACC_LOG("ENTER: disconnect_acc_cb()");
84 int ret = usb_accessory_connection_unset_cb();
86 ACC_LOG("FAIL: usb_accessory_connection_unset_cb()");
88 ret = usb_accessory_destroy(usbAcc);
90 ACC_LOG("FAIL: usb_accessory_destroy(&usbAcc)");
93 ACC_LOG("EXIT: disconnect_acc_cb()");
96 void connection_cb_func(usb_accessory_h accessory, bool isConnected, void *data)
98 ACC_LOG("ENTER: connection_cb_func()");
99 if (isConnected == true) {
100 connect_acc_cb(accessory);
102 disconnect_acc_cb(accessory);
104 ACC_LOG("EXIT: connection_cb_func()");
107 static void send_request(unsigned char input[], int len)
109 ACC_LOG("ENTER: send_request()");
113 unsigned char output[3];
115 ret = usb_accessory_open(usbAcc, &fp);
117 ACC_LOG("FAIL: usb_accessory_open(usbAcc, fp)");
121 disconnect_acc_cb(usbAcc);
125 ACC_LOG("Before fwrite(), len: %d", len);
127 ret = fwrite(input, len, 1, fp);
129 ACC_LOG("FAIL: fwrite()");
133 ACC_LOG("After fwrite()");
135 ret = fread(output, sizeof(output), 1, fp);
137 ACC_LOG("FAIL: fread()");
141 ACC_LOG("OUTPUT: %d, %d, %d", output[0], output[1], output[2]);
142 snprintf(str, sizeof(str), "Input: Type %d<br>Output: %d, %d, %d",
143 input[1], output[0], output[1], output[2]);
148 ACC_LOG("FAIL: fclose()");
152 ACC_LOG("EXIT: send_request()");
155 static void on_click_1(void *data, Evas_Object *obj, void *event_info)
157 ACC_LOG("ENTER: on_click_1()");
158 unsigned char input[3];
164 send_request(input, sizeof(input));
165 ACC_LOG("EXIT: on_click_1()");
168 static void on_click_2(void *data, Evas_Object *obj, void *event_info)
170 ACC_LOG("ENTER: on_click_2()");
171 unsigned char input[3];
177 send_request(input, sizeof(input));
178 ACC_LOG("EXIT: on_click_2()");
181 static void on_click_3(void *data, Evas_Object *obj, void *event_info)
183 ACC_LOG("ENTER: on_click_3()");
184 unsigned char input[3];
190 send_request(input, sizeof(input));
191 ACC_LOG("EXIT: on_click_3()");
194 static void on_click_4(void *data, Evas_Object *obj, void *event_info)
196 ACC_LOG("ENTER: on_click_4()");
197 disconnect_acc_cb(usbAcc);
198 ACC_LOG("EXIT: on_click_4()");
201 static void register_btn_cb(usb_accessory_h accessory, bool isGranted)
203 ACC_LOG("ENTER: register_btn_cb()");
205 disconnect_acc_cb(usbAcc);
208 evas_object_smart_callback_add(btn1, "clicked", on_click_1, NULL);
209 evas_object_smart_callback_add(btn2, "clicked", on_click_2, NULL);
210 evas_object_smart_callback_add(btn3, "clicked", on_click_3, NULL);
211 evas_object_smart_callback_add(btn4, "clicked", on_click_4, NULL);
212 ACC_LOG("EXIT: register_btn_cb()\n");
215 bool foreach_cb(usb_accessory_h handle, void *data)
217 ACC_LOG("ENTER: foreach_cb()");
226 ret = usb_accessory_get_manufacturer(handle, &manufacturer);
228 ACC_LOG("FAIL: usb_accessory_get_manufacturer()");
229 goto out_manufacturer;
232 ret = usb_accessory_get_model(handle, &model);
234 ACC_LOG("FAIL: usb_accessory_get_model()");
238 ret = usb_accessory_get_version(handle, &version);
240 ACC_LOG("FAIL: usb_accessory_get_version()");
244 ACC_LOG("Manufacturer(%s), model(%s), version(%s)", manufacturer, model, version);
246 if (!strncmp(manufacturer, "Tizen", strlen("Tizen"))
247 && !strncmp(model, "DemoKit", strlen("DemoKit"))
248 && !strncmp(version, "1.0", strlen("1.0"))) {
249 ret = usb_accessory_clone(handle, &usbAcc);
250 if (ret == USB_ERROR_NONE) {
254 ACC_LOG("EXIT: foreach_cb()");
266 ACC_LOG("EXIT: foreach_cb()");
270 int main(int argc, char **argv)
272 ACC_LOG("ENTER: MAIN()");
278 ret = usb_accessory_set_connection_changed_cb(connection_cb_func, usbAcc);
280 ACC_LOG("FAIL: usb_accessory_set_connection_changed_cb()");
284 /* Check whether or not accessory is connected */
285 ret = usb_accessory_is_connected(NULL, &connected);
287 ACC_LOG("FAIL: usb_accessory_is_connected(NULL, &connected)");
291 ACC_LOG("Accessory is not connected");
292 disconnect_acc_cb(NULL);
296 /* Retrieve an accessory which is one of the accessories connected and matches to this app */
297 ret = usb_accessory_foreach_attached(foreach_cb, &usbAcc);
299 ACC_LOG("FAIL: usb_accessory_foreach_attached(foreach_cb, usbAcc)");
300 disconnect_acc_cb(NULL);
304 ACC_LOG("Accessory is NULL");
305 disconnect_acc_cb(NULL);
309 /* Check whether or not this app has permission to open the accessory */
310 ret = usb_accessory_has_permission(usbAcc, &perm);
312 ACC_LOG("FAIL: usb_accessory_has_permission(usbAcc)");
316 elm_init(argc, argv);
317 win = elm_win_add(NULL, "Accessory", ELM_WIN_BASIC);
318 elm_win_title_set(win, "Usb Accessory Test");
319 elm_win_autodel_set(win, EINA_TRUE);
320 elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
321 evas_object_resize(win, 240, 60);
322 evas_object_show(win);
324 bg = elm_bg_add(win);
325 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
326 elm_win_resize_object_add(win, bg);
327 evas_object_show(bg);
329 btn1 = elm_button_add(win);
330 elm_object_text_set(btn1, "Type 1");
331 evas_object_resize(btn1, 300, 200);
332 evas_object_move(btn1, 100, 200);
333 evas_object_show(btn1);
335 btn2 = elm_button_add(win);
336 elm_object_text_set(btn2, "Type 2");
337 evas_object_resize(btn2, 300, 200);
338 evas_object_move(btn2, 100,450);
339 evas_object_show(btn2);
341 btn3 = elm_button_add(win);
342 elm_object_text_set(btn3, "Type 3");
343 evas_object_resize(btn3, 300, 200);
344 evas_object_move(btn3, 100, 700);
345 evas_object_show(btn3);
347 btn4 = elm_button_add(win);
348 elm_object_text_set(btn4, "Exit");
349 evas_object_resize(btn4, 300, 200);
350 evas_object_move(btn4, 100, 950);
351 evas_object_show(btn4);
354 register_btn_cb(usbAcc, true);
356 ret = usb_accessory_request_permission(usbAcc, register_btn_cb, NULL);
358 disconnect_acc_cb(NULL);