Dwujęzyczna aplikacja dla BBMagic BUTTON


Cały poniżej prezentowany projekt dostępny jest w spakowanym pliku ‚bbmagic_button_sketch.tar.gz’, który można pobrać z działu Download.

Jak to działa?

Nasza testowa aplikacja dla Raspberry Pi po odebraniu danych sprawdzi jaka funkcja BBMagic BUTTON została wywołana: pojedyncze kliknięcie, podwójne kliknięcie czy może przytrzymanie. A następnie:
BBMagic BUTTON app running

Jeśli jest to pierwsza aplikacja dla BBMagic, którą widzisz proponuję najpierw zobaczyć:
Piszemy program dla BBMagic FLOOD lub Piszemy program w C dla Raspberry Pi i BBMagic MAGNETO

Pliki składowe aplikacji

Nasza dwujęzyczna aplikacja składa się z następujących plików:

  • bbmagic_lib_1.2.a to biblioteka obsługująca moduły BBMagic przez interfejs Bluetooth Low Energy – dla Raspberry Pi zero W i Raspberry Pi 3, które posiadają chipset bluetooth.
  • bbmagic_lib.h to plik nagłówkowy biblioteki bbmagic_lib zawierający definicje potrzebnych stałych
  • libbluetooth.a to biblioteka z pakietu libbluetooth-dev Debiana zawierającego pliki deweloperskie używane z biblioteką BlueZ. Powinieneś ja mieć już na swojej Malinie, ale gdybyś nie miał to dla ułatwienia zawieramy ją w naszym projekcie.
  • bbmagic_button_sketch_pl.c to plik aplikacji w języku polskim. Jego zawartość jest identyczna jak pliku ‚bbmagic_button_sketch_eng.c’, ale flaga kompilacji w jężyku polskim jest zdefiniowana ‚#define LANG_PL’
  • bbmagic_button_sketch_eng.c to plik aplikacji w języku angielskim. Jego zawartość jest identyczna jak pliku ‚bbmagic_button_sketch_pl.c’, ale flaga kompilacji ‚#define LANG_PL’ NIE jest zdefiniowana.
  • Makefile to plik z instrukcjami dla programu make kontrolującego przebieg kompilacji. Kompilowane są obie wersje angielska i polska, a pliki wykonywalne mają nazwy odpowiednio: ‚bbmagic_button_sketch_eng’ i ‚bbmagic_button_sketch_pl’

Budowa aplikacji

Jak zwykle zaczynamy od sprawdzenia wersji biblioteki bbmagic_lib oraz otwarcia komunikacji BBMagic bluetooth.
BBMagic BUTTON app code
Następnie sprawdzamy czy nadeszły dane od modułu BBMagic, a jeśli tak (data_length > 0) to sprawdzamy jakie urządzenie BBMagic nadesłało wiadomość.
BBMagic BUTTON app code
Jeśli jest to moduł BBMAGIC_M_BUTTON to sprawdzamy czy odebrana wiadomość nie jest kopią wiadomości już odebranej.

Aby zwiększyć pewność transmisji BBMegic BUTTON wysyła kilkukrotnie tę samą wiadomość.
Kopię wiadomości rozpoznajemy po czterech bajtach podpisu: bbm_buf[BBM_BUTTON_SIGN_0], bbm_buf[BBM_BUTTON_SIGN_1], bbm_buf[BBM_BUTTON_SIGN_2], bbm_buf[BBM_BUTTON_SIGN_3]. Każda nowa wiadomość ma inny niż poprzednia podpis, a podpis złożony z samych zer nie występuje.
Funkcję odrzucająca kopie wiadomości (check_duplicate_msg(unsigned char* bbm_buf, unsigned char *last_sig)) opisano poniżej.

Jeśli otrzymaliśmy nową wiadomość to wyświetlamy powitanie ‚WITAJ, Tu BBMagic BUTTON’ i adres urządzenia, a następnie aktualną godzinę systemową.
BBMagic BUTTON app code
Dalej sprawdzamy która funkcja BBMagic BUTTON została wywołana i wypisujemy stosowny komunikat.
BBMagic BUTTON app code
Jeśli nadesłana wiadomość nie pochodzi od modułu BBMagic BUTTON to wypisujemy adres i typ modułu. Czekamy 100 mikrosekund i powtarzamy pętlę sprawdzającą nadejście wiadomości BBMagic.
BBMagic BUTTON app code
Pozostała jeszcze do objaśnienia funkcja odrzucająca duplikaty wiadomości. Przyjmuje wskaźniki do bufora z wiadomością BBMagic (*bbm_buf) oraz bufora pamiętającego podpis ostatnio odebranej wiadomości (*last_sig). Jeśli podpisy są identyczne oznacza to, że mamy do czynienia z kopią i funkcja zwraca 1, jeśli w buforze *bbm_buf znajduje się nowa wiadomość funkcja zwraca zero.
BBMagic BUTTON app code
I to wszystko !!

Cały powyżej prezentowany projekt dostępny jest w spakowanym pliku ‚bbmagic_button_sketch.tar.gz’, który można pobrać z działu Download.
Tagi , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *