• Thứ Tư, 29/11/2006 07:39 (GMT+7)

    Trình diễn không dây với ĐTDĐ

    Qua sóng Bluetooth, chiếc điện thoại di động có thể làm việc như thiết bị điều khiển từ xa, một trong những ứng dụng phổ biến và hữu dụng nhất là trình diễn PowerPoint.

    Qua sóng Bluetooth, chiếc điện thoại di động (ĐTDĐ) có thể làm việc như thiết bị điều khiển từ xa, một trong những ứng dụng phổ biến và hữu dụng nhất là trình diễn PowerPoint.

    1. Nguyên lý hoạt động

    ĐTDĐ gửi tín hiệu tới PC qua sóng Bluetooth, một ứng dụng đặc biệt trên PC sẽ tiếp nhận và xử lý tín hiệu, sau đó sẽ ánh xạ tín hiệu với một sự kiện phím nhấn trên bàn phím, gửi sự kiện này tới ứng dụng muốn điều khiển (cụ thể trong ví dụ này là PowerPoint). Ứng dụng khi nhận được sự kiện này sẽ thực hiện yêu cầu như khi chúng ta nhấn phím trực tiếp trên bàn phím.


                    Hình 1:
    Nguyên tắc hoạt động của ứng dụng điểu khiển từ xa

    Ở chế độ mặc định của nhà sản xuất, khi một phím trên ĐTDĐ được nhấn thì mã phím trả về sẽ được lưu tại bộ đệm. Để kết quả có thể chuyển tiếp tới ứng dụng (Hình 2) mà không thông qua bộ đệm, ta phải thay đổi thông số CMER (Mobile Equipment Event Reporting) trên ĐTDĐ bằng lệnh AT. Cú pháp của lệnh này như sau:

    AT+CMER=[[,[,[,[,]]]]]

    Trong đó chúng ta chỉ quan tâm đến 2 tham số . Giá trị và ý nghĩa của 2 tham số này được cho tại Bảng 1.

           Bảng 1: Tham số lệnh AT+CMER

     

     

    Tham số

       

    Giá trị

       

    Ý nghĩa

     
     

       

    0

       

    Lưu kết quả tại bộ đệm

     
         

    1,2,3

       

    Không lưu kết quả tại bộ đệm

     
     

       

    0

       

    Không phát sinh sự kiện khi phím được nhấn

     
         

    1,2

       

    Phát sinh sự kiện khi phím được nhấn

     

    Việc thay đổi tham số và theo dõi sự kiện phát sinh khi nhấn phím trên ĐTDĐ được minh họa trên cửa sổ Hyper Terminal được kết nối với điện thoại Siemens S65 qua cổng COM.

                                         Hình 3: Mã phím nhận được tại HyperTerminal

    2. Thiết lập kết nối

    Như vậy qua kết nối cổng COM tới ĐTDĐ, chúng ta đã nhận được sự kiện trả về khi một phím được nhấn. Vấn đề còn lại là chúng ta sẽ thay kết nối cổng COM bằng kết nối Bluetooth. Việc lập trình với Bluetooth đã được giới thiệu trong bài “OBEX và kỹ thuật lập trình cho cổng hồng ngoại, Bluetooth” (TGVT A tháng 7-2006, trang 136). Tuy nhiên để thuận tiện cho việc lập trình, tôi đã viết lớp thư viện Bluetooth trên nền .NET 2.0 cung cấp một số chức năng chính như trong Bảng 2.

     

    Bảng 2: Các lớp và hàm trong thư viện Bluetooth

     
     

    Bluetooth namespace

       

     Ghi chú

     
     

    BluetoothClient class

           
     

    + DiscoverDevices()

       

    Hàm tìm kiếm thiết bị Bluetooth

     
     

    BluetoothDeviceInfo class

           
     

    + DeviceID

       

    Định danh thiết bị Bluetooth

     
     

    + DeviceName

       

    Tên thiết bị Bluetooth

     
     

    BluetoothEndPoint class

           
     

    + OBEXObjectPushServiceClass_UUID

       

    Dịch vụ OBEX

     
     

    + SerialPortServiceClass_UUID

       

    Dịch vụ cổng nối tiếp

     


    Bằng việc sử dụng lớp thư viện Bluetooth này, việc kết nối tới thiết bị Bluetooth trở nên dễ dàng hơn với đoạn mã C# dưới đây:

    using System.Net;

    using System.Net.Sockets;

    using Bluetooth;

    void Form1_Load(object sender, EventArgs e)

    {

    const ulong AF_BTH = 32;

    const ulong BTHPROTO_RFCOMM = 0x0003;

    /* Tìm kiếm thiết bị Bluetooth */

    BluetoothClient bthClient = new BluetoothClient();

    bthDevices = bthClient.DiscoverDevices(3);

    /* Thiết lập EndPoint tới thiết bị Bluetooth */

    BluetoothEndPoint bthEndPoint = new BluetoothEndPoint(bthDevices[comboBox_BTHDevices.SelectedIndex].DeviceID, BluetoothEndPoint.SerialPortServiceClass_UUID);

    /* Khởi tạo socket */

    Socket m_socket = new Socket((AddressFamily)AF_BTH,SocketType.Stream, (ProtocolType)BTHPROTO_RFCOMM);

    /* Thiết lập kết nối không đồng bộ */

    AsyncCallback onconnect = new AsyncCallback(OnConnect);

    m_socket.BeginConnect(bthEndPoint, onconnect, m_socket);

    }

    /* Hàm xử lý kết nối */

    public void OnConnect(IAsyncResult ar)

    {

    Socket sock = (Socket)ar.AsyncState;

    /* Chấm dứt kết nối không đồng bộ */

    sock.EndConnect(ar);

    /* Khởi tạo hàm nhận dữ liệu khi đã kết nối thành công */

    if (sock.Connected)

    SetupRecieveCallback(sock);

    else

    MessageBox.Show(“Không kết nối được tới thiết bị”);

    }

    /* Hàm khởi tạo nhận dữ liệu */

    private byte[] recvBuf = new byte[1024];

    public void SetupRecieveCallback(Socket sock)

    {

    AsyncCallback recieveData = new AsyncCallback(OnRecievedData);

    sock.BeginReceive(recvBuf, 0, recvBuf.Length, SocketFlags.None, recieveData, sock);

    }

    /* Hàm xử lý dữ liệu nhận được */

    public void OnRecievedData(IAsyncResult ar)

    {

    Socket sock = (Socket)ar.AsyncState;

    int nBytesRec = sock.EndReceive(ar);

    if (nBytesRec > 0)

    {

    /* Xử lý dữ liệu nhận được từ bộ đềm recvBuf */

    ...

    SetupRecieveCallback(sock);

    }

    }

    Như vậy việc trao đổi dữ liệu giữa ĐTDĐ và ứng dụng sẽ được thực hiện thông qua kết nối vừa thiết lập ở trên.

    3. Nhận và xử lý dữ liệu từ ĐTDĐ

    Như ví dụ minh hoạ tại Hình 3, mỗi khi một phím nào đó trên ĐTDĐ được nhấn và thả, ứng dụng của chúng ta sẽ nhận được 2 sự kiện trả về tương ứng. Việc ánh xạ các sự kiện này với một phím nào đó trên bàn phím PC, rồi gửi mã của phím đó tới ứng dụng PowerPoint sẽ cho ta kết quả mong muốn.

    Ví dụ khi phím số “2” được nhấn trên ĐTDĐ ta sẽ ánh xạ nó với phím “RIGHT” trên bàn phím PC, điều này đồng nghĩa với việc thông báo cho ứng dụng PowerPoint chuyển sang slide kế tiếp. Việc này được thực hiện dễ dàng bằng cách sử dụng hàm SendKey.Send() trong .NET 2.0. Đoạn mã dưới đây sẽ hiện thức hóa ý tưởng này:

    /* Hàm xử lý dữ liệu nhận được */

    public void OnRecievedData(IAsyncResult ar)

    {

    Socket sock = (Socket)ar.AsyncState;

    int nBytesRec = sock.EndReceive(ar);

    if (nBytesRec > 0)

    {

    /* Xử lý dữ liệu nhận được từ bộ đệm recvBuf */

    string s = Encoding.ASCII.GetString(recvBuf, 0, nBytesRec);

    string key = s.Substring(8, 1);

    /* Gửi mã phím RIGHT tới ứng dụng đang active */

    /* khi nhấn phím “2”, “6”, “phải”, “lên” trên ĐTDĐ */

    if ((key == “2”) || (key == “6”) || (key == “>”) || (key == “^”))

    {

    SendKeys.Send(“{RIGHT}”);

    }

    /* Gửi mã phím LEFT tới ứng dụng đang active */

    /* khi nhấn phím “4”, “8”, “trái”, “xuống” trên ĐTDĐ */

    if ((key == “4”) || (key == “8”) || (key == “<”) || (key == “V”))

    {

    SendKeys.Send(“{LEFT}”);

    }

    SetupRecieveCallback(sock);

    }

    }

    Hình 4 dưới đây là chương trình điều khiển hoàn chỉnh. Bạn chỉ cần kết nối tới ĐTDĐ, bật chức năng Blue Present, chạy ứng dụng PowerPoint và hãy khám phá điều “kỳ diệu” từ chiếc ĐTDĐ của mình.

    Hình 4: Chương trình điều khiển

    4. Lời kết

    Chỉ với một chiếc điện thoại có khả năng kết nối Bluetooth, cùng với kỹ năng lập trình cơ bản, bạn hoàn toàn có thể biến chiếc ĐTDĐ của mình thành thiết bị điều khiển từ xa hữu ích. Hãy thử tưởng tượng khi bạn thuyết trình PowerPoint trong một buổi hội thảo hay trên giảng đường, bạn vừa có thể dạo quanh phòng vừa diễn thuyết. Điều này không chỉ giúp bạn thoát khỏi sự ràng buộc của chiếc máy tính mà còn góp phần nâng cao tính hấp dẫn của bài giảng.

    Tài liệu tham khảo: GSM 07.07, ver 5.0.0 - AT command set for GSM Mobile Equipment (ME).

    Tài liệu và chương trình demo có thể tải về tại website http://www.hitekgroup.net.

    Nguyễn Đức Thắng
    Email:
    thangnd@hitekgroup.net

    ID: A0611_123