Biblioteka C tworząca aplikacje mobilne dla małych mikrokontrolerów


Moduł BBMobile to most pomiędzy mikrokontrolerem i aplikacją mobilną. Tworzenie i obsługa interfejsów użytkownika na ekranie smartfona i tableta staje się bardzo proste przy użyciu dedykowanego kawałka kodu.

Biblioteka składa się z dwóch plików:

  • bbmobile_uartXX.c – konfiguruje port komunikacyjny UART w kontrolerze i obsługuje sprzętową warstwę komunikacji. (XX to kolejny numer wersji biblioteki)
  • bbmobile_libXX.c – implementuje funkcje tworzące i zarządzające aplikacją poprzez moduł BBMobile. (XX to kolejny numer wersji biblioteki)

Plik bbmobile_uartXX.c zawarty jest w pliku bbmobile_libXX.c poprzez: #include „bbmobile_uartXX.c”

Biblioteka bbmobile_lib04

Ma rozmiar mniejszy niż 4500 bajtów i oryginalnie przygotowana została dla kontrolerów AVR ze sprzętowym portem USART.

Pobierz pliki źródłowe: bbmobile_lib04.zip

Biblioteka zawiera następując funckje:

inline uint8_t bbmobile_check_ble_conn(void)
Sprawdza czy połączenie BLE jest zestawione. Zwraca '1′ jeśli tak i '0′ jeśli nie.

inline uint8_t bbmobile_is_data(void)
Sprawdza czy nadeszły nowe dane od modułu BBMobile. Zwraca '1′ jeśli tak i '0′ jeśli brak nowych danych. Dane znajdują się w buforze 'bbm_buf' o rozmiarze 'BBM_BUF_SIZE'.

uint8_t bbmobile_send_json(const char *j)
Wysyła z pamięci flash do aplikacji BBMobile strukturę JSON budującą interfejs użytkownika na ekranie smartfona. Zwraca:

  • 0 – jeśli dane zostały przesłanie poprawnie i otrzymano od aplikacji potwierdzenie: '$ok'.
  • 2 – jeśli przesłana struktura JSON zawiera błąd składni – otrzymano od aplikacji komunikat: '$nok'.
  • 4 – jeśli nie otrzymano od aplikacji żadnego komunikatu – wystąpił timeout.
  • 6 – połączenie BLE nie jest otwarte – nie mozna przesłać danych JSON.

void bbmobile_wait_ms(uint16_t ms)
Funkcja zatrzymuje program na określony czas. Korzysta z funkcji '_delay_ms(ms)' z biblioteki 'util/delay.h'.

void bbmobile_send_dec_2app(uint16_t u16number, uint8_t w)
Przesyła do aplikacji wartość zmiennej szesnastobitowej bez znaku w formacie dziesiętnym.

void bbmobile_send_sigdec_2app(int16_t s16number, uint8_t w)
Przesyła do aplikacji wartość zmiennej szesnastobitowej ze znakiem w formacie dziesiętnym.

void bbmobile_send_hex_2app(uint8_t b)
Przesyła do aplikacji wartość zmiennej ośmiobitowej bez znaku w formacie szesnastkowym.

void bbmobile_send_2app(flash_string)
Przesyła do aplikacji ciąg znaków z pamięci flash nie oczekując na potwierdzenie ich otrzymania. Funkcja nie zwraca żadnej wartości.

uint8_t bbmobile_send_2app_ack(flash_string)
Przesyła do aplikacji ciąg znaków z pamięci flash oczekując na potwierdzenie ich otrzymania. Funkcja zwraca:

  • 0 – jeśli dane zostały przesłanie poprawnie i otrzymano od aplikacji potwierdzenie: '$ok'.
  • 2 – jeśli przesłana struktura JSON zawiera błąd składni – otrzymano od aplikacji komunikat: '$nok'.
  • 4 – jeśli nie otrzymano od aplikacji żadnego komunikatu – wystąpił timeout.
  • 6 – połączenie BLE nie jest otwarte – nie mozna przesłać danych JSON.

uint8_t bbmobile_send_2chip_ack(flash_string)
Wysyła do modułu BBMobile komendę trybu bezpołączeniowego oczekując na potwierdzenie jej wykonania. Funkcja zwraca:

  • 0 – jeśli komenda została przesłana i moduł BBMobile potwierdził jej wykonanie.
  • 2 – jeśli przesłana komenda jest niepoprawna – otrzymano odpowiedź: '>ERR'.
  • 4 – jeśli nie otrzymano od modułu żadnej odpowiedzi – wystąpił timeout.
  • 6 – jeśli połączenie BLE jest otwarte i nie można wykonać komendy trybu bezpołączeniowego.

uint8_t cmp_flash_ram_bytes(flash, ram, cnt)
Porównuje 'cnt' bajtów w pamięci flash z danymi w pamięci RAM. Zwraca '1′ jeśli dane są identyczne i '1′ jeśli dane są różne.

Adaptacja biblioteki dla innego kontrolera

Aby skorzystać z biblioteki bbmobile_lib04 na konkretnym mikrokontrolerze należy w pliku bbmobile_uart04.c uaktualnić definicje:

  • #define F_CPU 1000000UL – zdefiniować częstotliwość zegara zastosowanego kontrolera.
  • #define UART_DATA_REG UDR0 – zdefiniować rejestr danych portu UART.
  • #define BBM_BUF_SIZE 64 – ewentualnie dostosować wielkość bufora danych UART. Musi on pomieścić w całości najdłuższy komunikat jaki spodziewamy się otrzymać od stworzonego interfejsu.

oraz dostosować dwie funkcje:

  • bbmobile_uart_init(uint16_t ubrr_reg) – należy dostosować inicjalizację portu UART zastosowanego kontrolera tak, aby działał z prędkością transmisji 9600bps, bez bitu parzystości i z jednym bitem stopu.
  • bbmobile_uart_tx_wait_free(void) – ten kod musi zatrzymać program do momentu, aż możliwe będzie wysłanie kolejnego bajtu UARTem.
Tagi , , , .Dodaj do zakładek Link.

Komentarze są wyłączone.