Кастомные интерфейсы в Офоно или как помяукать модемом - продолжение

Часть 4: Котики умею не только мяукать

Далее мы работаем с коммитом 1233c05f2ce201af2538e82ae7bf4f05f2201f15 изменения тут: https://github.com/neochapay/ofono-example-plugin/commit/1233c05f2ce201af2538e82ae7bf4f05f2201f15

Чтобы получить значение передаваемое через dbus нам чуть надо будет изменить функцию example_meow - теперь она выглядит так:
Код C:
  1. static DBusMessage *example_meow(DBusConnection *conn, DBusMessage *msg, void *data) {
  2. const char *talk; //переменная в которую мы сохраним то, что говорит котик
  3. //
  4. // Присваиваем сообщению содержимое
  5. // msg - сообщение которое которое нам присылает dbus
  6. // NULL - это callback это потом
  7. // DBUS_TYPE_STRING - тип сообщения, тут строка
  8. // talk - куда писать
  9. // DBUS_TYPE_INVALID - всё остальное неправильно
  10. dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &talk, DBUS_TYPE_INVALID);
  11. // говорим в консоль
  12. ofono_info("Some cat say %s !", talk);
  13. return dbus_message_new_method_return(msg);
  14. }

Теперь, при вызове
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:
  1. static const GDBusMethodTable example_dbus_methods[] = {
  2. { GDBUS_METHOD("SayMeow", GDBUS_ARGS({"name", "s"}, {"talk", "s"}), NULL, example_meow) },
  3. { }
  4. };
Теперь появились 2 аргумента - name и talk оба они помечены как s - значит оба они string - строка.
Теперь изменим функцию example_meow чтобы она знала не только что говорит котик, но и какой из котиков. Теперь она выглядит так:
Код C:
  1. static DBusMessage *example_meow(DBusConnection *conn, DBusMessage *msg, void *data) {
  2. const char *name; //имя котика
  3. const char *talk; //что он говорит
  4.  
  5. //присваиваем значения - оба DBUS_TYPE_STRING заметьте, что сперва идёт тип, потом переменная, в которую записываем значения.
  6. dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &name,
  7. DBUS_TYPE_STRING, &talk,
  8. DBUS_TYPE_INVALID);
  9. //Выводим сообщение и радуемся жизни!
  10. ofono_info("Cat %s say %s !", name, talk);
  11. return dbus_message_new_method_return(msg);
  12. }
Кастомные интерфейсы в Офоно или как помяукать модемом  - продолжение

Вот мы и научились создавать кастомный интерфейс ofono через плагин и работать с ним, а что дальше делать - это надо изучать API ofono, а это совсем другая история. Эта статья не претендует на полное HowTo, но может служить стартом, для разработки кастомных интерфейсов работы с телефонией и не только на низком уровне dbus.
Всем спасибо. Надеюсь, что статья будет полезной.
Кастомные интерфейсы в Офоно или как помяукать модемом  - продолжение
Комментарии (0)

Нет комментариев. Ваш будет первым!

Copyright 2016-2024 NeoChapay