CHƢƠNG 1 CÔNG NGHỆ TRUYỀN HÌNH DI ĐỘNG
3.4. Khả năng liên kết với phần mềm nhúng đầu cuối
Trong phạm vi nghiên cứu, luận văn chỉ tập trung vào hệ điều hành Symbian đƣợc sử dụng rộng rãi nhất trên các máy của Nokia, Samsung,…Với hệ điều hành Symbian, nó có khả năng kết nối vẫn đƣợc sử dụng theo cùng một cách mà không
quan tâm đến kênh truyền thông. Vì thế, điều cốt yếu là hiểu đƣợc chức năng kết nối Symbian OS để phát triển bất cứ một ứng dụng nào kết nối với kênh truyền thông. Hơn nữa, một vài vấn đề phải đƣợc ghi nhớ bất cứ khi nào những ứng dụng của Symbian đƣợc phát triển. Một trong những vấn đề quan trọng nhất đó là việc sử dụng những đối tƣợng kích hoạt.
Các ứng dụng của Symbian phù hợp với các đối tƣợng kích hoạt hơn là đa luồng. Khái niệm đối tƣợng kích hoạt đƣợc phát triển riêng biệt cho hệ thống điều hành Symbian. Nó cho phép thực hiện một vài đòi hỏi không đồng bộ tại cùng thời điểm và trong cùng luồng cũng có thể nó đƣợc xác định nhƣ một nền tảng liên kết.
Trong Symbian, luồng là đơn vị thực hiện, tất cả các đối tƣợng kích hoạt và bộ lập thời biểu tích cực trong cùng luồng. Bộ lập thời biểu tích cực là một vòng chờ trong luồng đơn, nó sẽ phát hiện sự hoàn thành của các sự kiện không đồng bộ và định vị đối tƣợng kích hoạt có liên quan để vận hành chúng.
Các kết nối trong Symbian phù hợp để sử dụng các đối tƣợng kích hoạt và đó là lý do tại sao chúng quan trọng cho việc nghiên cứu này. Thủ tục bắt đầu bất kỳ một kết nối nào trong Symbian đƣợc mô tả dƣới đây [11]:
Thiết lập một server socket
Việc cài đặt sẽ tạo ra một kênh truyền thông. Lệnh đƣợc sử dụng là :
Rsocketserv::Connect().
Tạo kết nối tới Socket Server
Phần đính kèm sẽ bắt đầu một điểm truy cập Internet. Điểm truy cập Internet có thể là bất kỳ một loại nào, nhƣ: CPRS, EDGE, W-CDMA/UMTS, LAN không dây, Ethernet hoặc truyền dữ liệu IP. Bộ mô phỏng sử dụng điểm truy cập Ethernet Internet, trong khi truyền dữ liệu IP đƣợc sử dụng cho truyền đại chúng. Lệnh đƣợc sử dụng là: Rconnection::Open(RsocketSev, aSocketServer).
Bắt đầu sự kết nối dựa trên những ƣu tiên kết nối
Những ƣu tiên kết nối cho điểm truỵ cập Internet IDs đƣợc xác định trong tệp commsDB của ứng dụng. IDs của các điểm truy cập Internet là các số nguyên.
Những sự ƣu tiên này sẽ đƣợc sử dụng khi một sự kết nối bắt đầu. Lệnh đƣợc sử dụng là: Rconnection:: Start (TconnPref& aPref, Trequest Status & aStatus).
Mở luồng socket và gắn nó tới 1 kết nối có sẵn
Sau khi sự kết nối đƣợc bắt đầu, bƣớc tiếp theo là tạo ra một ổ cắm và gắn nó với một kết nối đã đƣợc bắt đầu. Lệnh đƣợc sử dụng là
RSocket::Open(RSocketServ& aServer, TUint addrFamily, TUint sockType, TUint protocol, RConnection anRConnection).
Những thông số có sẵn xác định phiên socket máy chủ, mà không cần biết Ipv4 hoặc Ipv6 có đƣợc sử dụng cho địa chỉ, loại socket là TCP hay UDP, giao thức và sự kết nối tới socket hay không.
Sử dụng cơ chế ổ cắm
Sử dụng ổ cắm để gửi và nhận dữ liệu. Trong các ngôn ngữ của Symbian, “write” đƣợc sử dụng để gửi dữ liệu, và “read” để nhận dữ liệu. Để gửi dữ liệu, lệnh đƣợc sử dụng là: Rsocket::Write(TDesc8 &aDesc, TRequestStatus &aStatus).
Bộ miêu tả đƣợc sử dụng nhƣ là thông số đầu tiên là dữ liệu mà sẽ đƣợc gửi nhờ kênh truyền thông. Thông số thứ hai đề cập đến trạng thái. Trạng thái sẽ đƣợc yêu cầu ngay khi dữ liệu bắt đầu đƣợc gửi và sẽ hoàn tất đến tận khi tất cả dữ liệu đƣợc gửi. Trong trƣờng hợp nhận dữ liệu, cách tiếp cận không khác nhiều. Lệnh đƣợc sử dụng để nhận dữ liệu là: Rsocket::Read(TDesc8 &aDesc, TRequestStatus &aStatus).
Trong trƣờng hợp này, bộ phận miêu tả là dữ liệu mà sẽ đƣợc nhận, bất cứ khi nào dữ liệu đƣợc nhận thì trạng thái sẽ đƣợc khởi sự. Quá trình nhận dữ liệu không nhất thiết là một quá trình liên tục. Nghĩa là dữ liệu sẽ không đƣợc nhận liên tục. Quá trình này mất nhiều thời gian.
Điều này đƣợc phát triển trong Symbian nhờ việc việc tạo ra một đối tƣợng kích hoạt mà sẽ điều khiển dữ liệu bất cứ khi nào đƣợc nhận. một cách để thực hiện các chức năng nhận với một đối tƣợng kích hoạt đƣợc cho sau:
CActive{...
RSocket::Read(desc, iStatus)
SetActive();
RunL(){...
Process the descriptor RSocket::Read() SetActive();
DoCancel()
Trong ví dụ này, một đối tƣợng kích hoạt đƣợc tạo. Đối tƣợng kích hoạt thực hiện chức năng StartReading ()- bắt đầu đọc, và trong chức năng này, nó đƣa ra chức năng Rsocket::Read (), nó đƣợc sử dụng để nhận dữ liệu từ ổ cắm. Chức năng StartReading () kích hoạt đối tƣợng kích hoạt nhờ việc sử dụng hàm SetActive (). Khi dữ liệu đƣợc nhận, hàm RunL () đƣợc khởi hành.. Hàm RunL là một hàm đặc biệt mà phải đƣợc thực hiện trong đối tƣợng kích hoạt. RunL () đƣợc gọi bởi bộ lập thời biểu tích cực khi nó phát hiện ra rằng một yêu cầu của đối tƣợng kích hoạt đƣợc thực hiện. Hàm này sẽ xử lý dữ liệu đƣợc nhận và gọi Rsocket::Read () một cách lặp lại trong đối tƣợng kích hoạt để nhận dữ liệu. Sự lặp lại này sẽ tiếp tục đến khi đối tƣợng kích hoạt bị xoá bỏ nhờ hàm DoCancel (), hoặc một lỗi xuất hiện.
Đóng kết nối
Cuối cùng việc đóng kết nối đƣợc thực hiện nhờ việc đóng socket, các kết nối, và máy chủ socket. Lệnh đƣợc sử dụng là: RSocket::Close() RConnection: :Close () RSocketServ: :Close ().