Часть 4: Котики умею не только мяукать
Далее мы работаем с коммитом 1233c05f2ce201af2538e82ae7bf4f05f2201f15 изменения тут:
https://github.com/neochapay/ofono-example-plugin/commit/1233c05f2ce201af2538e82ae7bf4f05f2201f15 Чтобы получить значение передаваемое через dbus нам чуть надо будет изменить функцию example_meow - теперь она выглядит так:
Код C:static DBusMessage *example_meow(DBusConnection *conn, DBusMessage *msg, void *data) {
const char *talk; //переменная в которую мы сохраним то, что говорит котик
//
// Присваиваем сообщению содержимое
// msg - сообщение которое которое нам присылает dbus
// NULL - это callback это потом
// DBUS_TYPE_STRING - тип сообщения, тут строка
// talk - куда писать
// DBUS_TYPE_INVALID - всё остальное неправильно
dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &talk, DBUS_TYPE_INVALID);
// говорим в консоль
ofono_info("Some cat say %s !", talk);
return dbus_message_new_method_return(msg);
}
Теперь, при вызове
dbus-send --system --print-reply --dest=org.ofono /Example org.nemomobile.ofono.Example.SayMeow string:"mrrrr"
Котик помурчит Вам в логе ofono!
И это прекрасно! Но, что если котиков много и надо узнать какой из них говорит? Добро пожаловать в следующую часть, где мы будем парсить несколько аргументов!
Часть пять: много котиков!
Далее работаем с коммитом 8c9311876030b10f4684685b94b4e7a04e60ab5b изменения тут:
https://github.com/neochapay/ofono-example-plugin/commit/8c9311876030b10f4684685b94b4e7a04e60ab5b Сперва наперво, стоит изменить метод, и сказать ему, что у нас 2 параметра. Теперь example_dbus_methods выглядит так:
Код C:static const GDBusMethodTable example_dbus_methods[] = {
{ GDBUS_METHOD("SayMeow", GDBUS_ARGS({"name", "s"}, {"talk", "s"}), NULL, example_meow) },
{ }
};
Теперь появились 2 аргумента - name и talk оба они помечены как s - значит оба они string - строка.
Теперь изменим функцию example_meow чтобы она знала не только что говорит котик, но и какой из котиков. Теперь она выглядит так:
Код C:static DBusMessage *example_meow(DBusConnection *conn, DBusMessage *msg, void *data) {
const char *name; //имя котика
const char *talk; //что он говорит
//присваиваем значения - оба DBUS_TYPE_STRING заметьте, что сперва идёт тип, потом переменная, в которую записываем значения.
dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &name,
DBUS_TYPE_STRING, &talk,
DBUS_TYPE_INVALID);
//Выводим сообщение и радуемся жизни!
ofono_info("Cat %s say %s !", name, talk);
return dbus_message_new_method_return(msg);
}
Вот мы и научились создавать кастомный интерфейс ofono через плагин и работать с ним, а что дальше делать - это надо изучать API ofono, а это совсем другая история. Эта статья не претендует на полное HowTo, но может служить стартом, для разработки кастомных интерфейсов работы с телефонией и не только на низком уровне dbus.
Всем спасибо. Надеюсь, что статья будет полезной.
Ну и где доказательства про 18 запусков у маска в 2018 году? Или ты предпочтешь и тут...