Lập trình ứng dụng định vị

Một phần của tài liệu Định vị thiết bị di động bằng công nghệ Bluetooth (Trang 36)

Hình 4.3 – Cửa sổ ứng dụng định vị

Sau khi đã cài đặt và thiết lập cho Microsoft VS 6 C++, ta sẽ bắt đầu xây dựng ứng dụng để thu thập chỉ số RSSI từ thiết bị Bluetooth.

Các hoạt động dò tìm thiết bị (inquiry) của ứng dụng nằm trong lớp CBtIf. Do vậy ta cần khai báo:

Sau đó thêm vào các thƣ viện và header để giúp liên kết các thành phần trong chƣơng trình.

#include "btwlib.h" //Widcomm Stack #pragma comment(lib, "version.lib") #pragma comment(lib, "Ws2_32.lib")

Đầu tiên, khi bắt đầu quá trình inquiry, ứng dụng sẽ gọi hàm virtual void StartInquiry(). Hàm này đƣợc thừa kế từ CBtIf và bắt đầu việc giả lập thiết bị trong tiến trình riêng của nó. Khi một thiết bị Bluetooth đƣợc dò thấy trong vùng lân cận, lớp cơ sở sẽ gọi một hàm ảo để thông báo về việc này:

virtual void OnDeviceResponded(BD_ADDR bda, DEV_CLASS devClass, BD_NAME bdName, BOOL bConnected);

Tham số đầu tiên là một mảng có 6 byte chứa địa chỉ của thiết bị. Tham số thứ hai là một mảng 3 byte chứa lớp của thiết bị. Tham số thứ ba là tên thiết bị đƣợc mã hóa nhƣ là một chuỗi ANSI (không phải là UNICODE) và cuối cùng là một giá trị Boolean chỉ ra thiết bị đã đƣợc kết nối hay chƣa.

Sau khi đã tìm thấy thiết bị ta gọi hàm

BOOL GetConnectionStats (BD_ADDR bd_Addr, tBT_CONN_STATS *p_conn_stats)

Để lấy thông tin kết nối. Trong đó tham số thứ nhất là địa chỉ thiết bị, tham số thứ hai là con trỏ tới cấu trúc tBT_CONN_STATS chứa giá trị RSSI.

Ta lƣu các giá trị này vào một file text để xây dựng một cơ sở dữ liệu giá trị RSSI.

FILE * f;

f = fopen("output.txt", "a+");

fprintf(f,"%i\n",p_conn_stats.Rssi); fclose(f);

Khi tất cả các thiết bị đã đƣợc tìm thấy, lớp cơ sở CBtIf sẽ gọi một hàm ảo khác để thông báo về ứng dụng :

virtual void OnInquiryComplete(BOOL bSuccess, short nResponses);

Thông số đầu tiên thông báo nếu tiến trình dò (inquiry) đã thành công và thông số thứ hai thông báo số lƣợng thiết bị tìm thấy.

Để kết thúc quá trình giả lập thiết bị tại thời điểm bất kỳ ta có thể gọi hàm void StopInquiry(). Hàm này rất có ích khi muốn reset lại lúc thiết bị không còn hoạt động đúng do nguyên nhân nào đó. [5].

Một phần của tài liệu Định vị thiết bị di động bằng công nghệ Bluetooth (Trang 36)