Подсветка светодиодной вспышки
Регистрация привилегии
В этом примере мы научимся включать/выключать светодиодную вспышку для камеры
Создайте новый проект ‘LedFlashSample’. Щелкните мышкой по файлу tizen-manifest.xml, выберите пункт Privileges, выберите привилегию http://tizen.org/privilege/led из списка и нажмите кнопку OK.
В конфигурационном файле появится следующая строка.
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <manifest xmlns="http://tizen.org/ns/packages" api-version="2.3" package="org.example.ledfreshex" version="1.0.0"> <profile name="mobile"/> <ui-application appid="org.example.ledfreshex" exec="ledfreshex" multiple="false" nodisplay="false" taskmanage="true" type="capp"> <label>ledfreshex</label> <icon>ledfreshex.png</icon> </ui-application> <privileges> <privilege>http://tizen.org/privilege/led</privilege> </privileges> </manifest>
Запрос значения максимальной яркости светодиода
Откройте файл исходного кода и внесите изменения в начале файла.
#include "ledfreshsample.h" #include <device/led.h> typedef struct appdata { Evas_Object *win; Evas_Object *conform; Evas_Object *label; int max; } appdata_s;
device/led.h — это библиотека, управляющая светодиодом.
max — это переменная, ранящая значение максимальной яркости.
Добавьте код в конце функции create_base_gui().
Функция get_max_brightness запрашивает значение максимальной яркости подсветки светодиода. Создайте функцию выше create_base_gui() .
static void get_max_brightness(appdata_s *ad) { int error = device_flash_get_max_brightness(&ad->max); int val = 0; error = device_flash_get_brightness(&val); char buf[PATH_MAX]; sprintf(buf, "Max brightness : %d / %d", ad->max, val); elm_object_text_set(ad->label, buf); }
device_flash_get_max_brightness(int *) - это API, запрашивающий значение максимальной яркости подсветки светодиода.
device_flash_get_brightness(int *) - это API, запрашивающий текущее значение яркости подсветки светодиода.
Запустите пример
Включение/выключение светодиода
Мы реализуем возможность включения/выключения подсветки вспышки за счет добавления двух кнопок. Добавьте код выше функции create_base_gui().
static void my_box_pack(Evas_Object *box, Evas_Object *child, double h_weight, double v_weight, double h_align, double v_align) { /* create a frame we shall use as padding around the child widget */ Evas_Object *frame = elm_frame_add(box); /* use the medium padding style. there is "pad_small", "pad_medium", * "pad_large" and "pad_huge" available as styles in addition to the * "default" frame style */ elm_object_style_set(frame, "pad_medium"); /* set the input weight/aling on the frame insted of the child */ evas_object_size_hint_weight_set(frame, h_weight, v_weight); evas_object_size_hint_align_set(frame, h_align, v_align); { /* tell the child that is packed into the frame to be able to expand */ evas_object_size_hint_weight_set(child, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); /* fill the expanded area (above) as opposaed to center in it */ evas_object_size_hint_align_set(child, EVAS_HINT_FILL, EVAS_HINT_FILL); /* actually put the child in the frame and show it */ evas_object_show(child); elm_object_content_set(frame, child); } /* put the frame into the box instead of the child directly */ elm_box_pack_end(box, frame); /* show the frame */ evas_object_show(frame); } static Evas_Object * my_button_add(Evas_Object *parent, const char *text, Evas_Smart_Cb cb, void *cb_data) { Evas_Object *btn; btn = elm_button_add(parent); elm_object_text_set(btn, text); evas_object_smart_callback_add(btn, "clicked", cb, cb_data); return btn; }
Добавьте код, создающий контролы в функцию create_base_gui().
/* Conformant */ ad->conform = elm_conformant_add(ad->win); elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW); elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE); evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(ad->win, ad->conform); evas_object_show(ad->conform); Evas_Object *btn, *box; /* Container: standard table */ box = elm_box_add(ad->win); elm_box_homogeneous_set(box, EINA_TRUE); elm_box_horizontal_set(box, EINA_FALSE); evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_object_content_set(ad->conform, box); evas_object_show(box); { /* Label*/ ad->label = elm_label_add(ad->conform); my_box_pack(box, ad->label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND, 0.5, 0.5); /* Button-1 */ btn = my_button_add(box, "LED On", btn_led_on_cb, ad); my_box_pack(box, btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND, EVAS_HINT_FILL, EVAS_HINT_FILL); /* Button-2 */ btn = my_button_add(box, "LED Off", btn_led_off_cb, ad); my_box_pack(box, btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND, EVAS_HINT_FILL, EVAS_HINT_FILL); } /* Show window after base gui is set up */ evas_object_show(ad->win);
Создайте обработчики событий этих кнопок выше функции create_base_gui().
static void btn_led_on_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s *ad = data; device_flash_set_brightness(ad->max); device_led_play_custom(1000, 500, 0xFFFFFF00, LED_CUSTOM_DEFAULT); get_max_brightness(ad); } static void btn_led_off_cb(void *data, Evas_Object *obj, void *event_info) { device_led_stop_custom(); get_max_brightness(data);}
device_flash_set_brightness(int) - это API, определяющий яркость подсветки светодиода.
device_led_play_custom(on, off, color, int) - это API, включающий светодиод.
device_led_stop_custom(void) - это API, выключающий светодиод.
Запустите пример