Опубликован: 22.12.2015 | Уровень: для всех | Доступ: платный
Лекция 36:

Подсветка светодиодной вспышки

< Лекция 35 || Лекция 36 || Лекция 37 >

Регистрация привилегии

В этом примере мы научимся включать/выключать светодиодную вспышку для камеры

Создайте новый проект ‘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, выключающий светодиод.

Запустите пример


< Лекция 35 || Лекция 36 || Лекция 37 >
Тимур Имашев
Тимур Имашев
Россия, Кемерово, КемГИК
Александр Бураков
Александр Бураков
Россия, г.Тюмень, Тюменская область