MỤC LỤC
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
LỜI CẢM ƠN1
MỤC LỤC2
KÍ HIỆU VÀ VIẾT TẮT5
TÓM TẮT – ABSTRACT – TỪ KHÓA6
CHƯƠNG I – TỔNG QUAN7
1.1ỨNG DỤNG GIAO TIẾP GIỮA HAI ĐIỆN THOẠI SỬ DỤNG MẠNG WIFI8
1.2ỨNG DỤNG KARAOKE TRÊN ĐIỆN THOẠI DI ĐỘNG10
CHƯƠNG II – CƠ SỞ LÝ THUYẾT12
2.1NỀN TẢNG SYMBIAN S60 3rd. 12
2.1.1Tổng quan về hệ điều hành Symbian. 12
2.1.2Đôi nét về sự phát triển của hệ điều hành Symbian S60 3rd. 15
2.1.3Cơ chế bảo mật và quản lí ứng dụng trên Symbian S60. 18
2.2NGÔN NGỮ LẬP TRÌNH PYTHON DÀNH CHO S60 v2.0.0. 21
2.2.1Giới thiệu chung về Python. 21
2.2.2Giới thiệu sơ lược về PyS60. 21
2.2.3Thông tin và dịch vụ của hệ điều hành. 22
2.2.4Đồ họa và giao diện người dùng. 22
2.2.5Âm thanh và các dịch vụ giao tiếp. 23
2.3DỮ LIỆU ĐA PHƯƠNG TIỆN25
2.3.1Dữ liệu video mp4 trên thiết bị S60 3rd. 25
2.3.2Kỹ thuật âm thanh Audio FullDuplex trên thiết bị S60 3rd. 29
2.4BỘ PHÁT TRIỂN PHẦM MỀM SDK S60 3rd for SYMBIAN OS. 31
2.4.1Giới thiệu về SDK S60 3rd FP1. 31
2.4.2Thiết bị mô phỏng S60 3rd FP1 của SDK33
2.4.3Thư viện hàm API của bộ SDK S60 3rd. 35
2.5TỔNG QUAN VỀ WIRELESS LAN (WLAN). 35
2.5.1Lịch sử ra đời35
2.5.2Các mô hình mạng WLAN36
2.5.3Các thành phần trong mạng WLAN38
2.5.4Ưu điểm và nhược điểm của mạng Wifi38
2.6TỔNG QUAN VỀ LẬP TRÌNH MẠNG (NETWORK PROGRAMMING). 39
2.6.1Mô hình tham khảo OSI39
2.6.2Mạng TCP/IP. 41
2.6.3Tìm hiểu về Socket42
2.6.4Chế độ giao tiếp. 42
CHƯƠNG III - XÂY DỰNG ỨNG DỤNG44
PHẦN THỨ NHẤT - ỨNG DỤNG KARAOKE PRO v1.0. 44
3.1CÁC THIẾT BỊ ĐÃ SỬ DỤNG TRONG LUẬN VĂN44
3.1.1Yêu cầu phần cứng. 44
3.1.2Cấu hình thiết bị44
3.2PHÂN TÍCH YÊU CẦU PHẦN MỀM VÀ HƯỚNG GIẢI QUYẾT45
3.2.1Yêu cầu phần mềm45
3.2.2Hướng giải quyết46
3.3MÔ HÌNH HÓA ỨNG DỤNG47
3.4LẬP TRÌNH ỨNG DỤNG48
3.4.1Module tìm kiếm file mp4 và duyệt file. 48
3.4.2Module Audio Full Duplex. 48
3.4.3Đóng gói cài đặt ứng dụng. 53
3.5MÔ TẢ ỨNG DỤNG54
3.6KẾT QUẢ ĐẠT ĐƯỢC55
3.7NHỮNG VẤN ĐỀ PHÁT SINH VÀ CHƯA GIẢI QUYẾT TRONG ĐỀ TÀI55
3.7.1Vấn đề phát sinh. 55
3.7.2Vấn đề chưa giải quyết được. 56
3.7.3Hướng giải quyết bằng kỹ thuật phần cứng. 58
3.8HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI58
3.8.1Tích hợp Module Audio Fullduplex vào phần mềm58
3.8.2Xây dựng ứng dụng Karaoke Pro dựa trên ngôn ngữ Symbian C++58
3.8.3Module Audio Fullduplex với khả năng chạy ngầm59
3.8.4Tích hợp nhạc không lời (nhạc beat) và xử lý lời bài hát (lyric). 59
3.8.5Tính năng download nhạc, ghi âm, chấm điểm tượng trưng.59
PHẦN THỨ HAI - ỨNG DỤNG WIFI CONNECTOR v1.0. 60
3.9PHÂN TÍCH PHẦN MỀM VÀ HƯỚNG GIẢI QUYẾT60
3.9.1Phân tích phần mềm60
3.9.2Hướng giải quyết61
3.10MÔ HÌNH HÓA ỨNG DỤNG62
3.11LẬP TRÌNH ỨNG DỤNG63
3.11.1Module khởi tạo kết nối “create connection”. 63
3.11.2Module kết nối “connect”. 65
3.11.3Module “Chat”. 66
3.12MÔ TẢ ỨNG DỤNG67
3.13KẾT QUẢ ĐẠT ĐƯỢC75
3.14HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI75
TÀI LIỆU THAM KHẢO76
CHƯƠNG I – TỔNG QUAN
Chắc hẳn trong chúng ta hiện nay, ai ai cũng đang sở hữu một chiếc điện thoại di động dù đó có thể là một chiếc điện thoại động có tính năng cao cấp hay những chiếc điện thoại di động phổ thông để duy trì sự liên lạc của mình với xã hội.
Chắc chắn một điều rằng trong mỗi chúng ta chưa bao giờ khai thác hết tính năng của một chiếc điện thoại di động mặc dù nhà sản xuất đã tích hợp rất nhiều tính năng hữu ích cho người dùng của họ phục vụ cho các mục đích khác nhau ứng với đối tượng người dùng khác nhau như các tính năng: giải trí, văn phòng, doanh nghiệp, đồ họa, chơi game, .
Cho dù bạn sỡ hữu một chiếc điện thoại được hỗ trợ bởi một nền tảng vượt bậc, tập hợp những tính năng cao cấp nhất, hiện đại nhất nhưng bạn chỉ sử dụng nó để thực hiện việc gọi và nhắn tin thôi, thì lúc đó chính bạn đang làm lãng phí đi sức mạnh công nghệ đang tập trung ở chiếc điện thoại của mình. Chính vì thế thế giới lập trình đã xuất hiện thêm một lĩnh vực mới hơn đó là Lập trình trên thiết bị di động – Mobile Phone Programming với mục đích cho ra đời những sản phẩm phần mềm nhằm khai thác các tính năng và sức mạnh được tích hợp trong chiếc điện thoại của mình.
Không thua kém mấy so với lập trình trên PC, lập trình trên thiết bị di động đã và đang phát triển vượt bậc với sự tham gia đông đảo của các lập trình viên chuyên nghiệp và không chuyên nghiệp. Đa phần các sản phẩm của lập trình di động đều cung cấp miễn phí cho người sử dụng, một phần nhỏ là thu phí sử dụng.
Được sự hỗ trợ từ các hãng điện thoại lớn trên thế giới như Nokia, Apple, Samsung, HTC, Sony, BlackBerry việc lập trình di động càng trở nên dễ dàng hơn. Với những kho ứng dụng khổng lồ của các nhà sản xuất điện thoại như : Ovi Store của Nokia, Applications Store của Apple, Android Market Apps của Google, người sử dụng điện thoại càng dễ tiếp cận hơn với các sản phẩm phần mềm di động. Tạo nên một cơn sốt trong thời gian qua, khi mà các thiết bị di động trung cấp và cao cấp của các hãng điện thoại không ngừng được tung ra thị trường với mức giá ngày càng hợp lí với người sử dụng.
Trong số các hệ điều hành chạy trên thiết bị di động thì nền tảng hệ điều hành Symbian của nhà sản xuất điện thoại lớn nhất thế giới Nokia là chiếm số lượng người dùng nhiều nhất trên toàn thế giới. Với sự thông dụng và phổ biến của hệ điều hành này, đề tài này xin giới thiệu với các bạn cách thức để tạo ra một ứng dụng chạy trên nền tảng Symbian S60 nổi tiếng của Nokia. Kèm theo đó là giới thiệu hai phần mềm hoàn chỉnh nhằm góp phần nào đó khai thác sức mạnh thiết bị của bạn. Đó là.
72 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2690 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Lập trình trên thiết bị di động – Mobile Phone Programming, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
rao đổi thông tin giữa các máy tính. Một dữ liệu cần gửi đi sẽ được tầng trình bày chuyển sang định dạng dữ liệu trung gian trước khi truyền đi trên mạng. Ngược lại khi nhận dữ liệu từ mạng tầng trình bày sẽ chuyển sang định dạng riêng của nó.
Tầng 7 – Tầng ứng dụng (Application Layer)
Đây là tầng trên cùng cung cấp các ứng dụng truy xuất đến các dịch vụ mạng. Nó bao gồm các ứng dụng của người dùng, ví dụ như Web Browser (Internet Explorer, Mozilla Firefox, Google Chrome, Opera,…) hay các chương trình server cung cấp các dịch vụ mạng như (Internet Information Service IIS, Apache, …), các Mail Server (Send Mail MDaemon). Người dùng mạng giao tiếp trực tiếp với tầng này.
Về nguyên tắc, tầng n của một hệ thống chỉ giao tiếp và trao đổi thông tin với tầng n của hệ thống khác. Mỗi tầng sẽ có đơn vị truyền dữ liệu riêng:
Tầng vật lí: bit.
Tầng liên kết dữ liệu: frame.
Tầng mạng: packet.
Tầng vận chuyển: segment.
Trong thực tế, dữ liệu được gửi đi từ tầng trên xuống tầng xuống tầng dưới cho đến tầng thấp nhất của máy tính gửi. Ở đó, dữ liệu sẽ được truyền đi trên đường truyền vật lí. Mỗi khi dữ liệu được truyền xuống tầng phía dưới thì nó được “gói” lại trong đơn vị dữ liệu của tầng dưới. Tại bên nhận dữ liệu sẽ được truyền ngược lên các tầng cao dần, mỗi lần qua một tầng đơn vị dữ liệu tương ứng sẽ được “tháo” ra.
Hình 33: So sánh sự giống nhau và khác nhau của OSI và TCP/IP
Mạng TCP/IP
Đây là kiến trúc của mạng Internet, chỉ gồm 5 tầng như hình vẽ dưới đây:
Người ta còn gọi mô hình này là mô hình OSI đơn giản.
Các giao thức trên mỗi tầng được quy định như sau:
Tầng 3 sử dụng giao thức IP.
Tầng 4 có thể sử dụng giao thức TCP chế độ có nối kết hoặc UDP chế độ không nối kết.
Tầng 5 là tầng của ứng dụng, mỗi loại ứng dụng phải định nghĩa một giao thức riêng để các thành phần trao đổi thông tin qua lại với nhau. Một số ứng dụng đã trở thành chuẩn của mạng Internet như:
Ứng dụng Web: sử dụng giao thức HTTP (HyperText Transfer Protocol) để tải các trang Web từ các Web Server về các Web Browser.
Ứng dụng thư điện tử: sử dụng giao thức SMTP để chuyển tiếp mail gửi đi đến mail Server của người nhận và dùng giao thức POP3 (Post Office Protocol Version 3) hoặc IMAP (Internet Message Access Protocol) để nhận mail về cho người đọc.
Ứng dụng truyền tải tập tin: sử dụng giao thức FTP (File Transfer Protocol) để tải các tập tin từ các FTP Server ở xa về máy người dùng hay ngược lại.
Thông thường các tầng 1,2,3 và 4 được phát triển bởi các nhà sản xuất hệ điều hành, nhà sản xuất các phần cứng mạng. Chúng đảm nhận nhiệm vụ truyền tải thông tin cho các quá trình trên tầng ứng dụng. Chúng cài đặt cơ chế giao tiếp liên quá trình để các quá trình trên tầng ứng dụng có thể truy xuất đến dịch vụ truyền tải thông tin do chúng cung cấp. Trong khi đó tầng 5 là tầng mà các nhà sản xuất phần mềm khai thác để tạo ra các ứng dụng giải quyết các vấn đề khác nhau trong cuộc sống. Nó được xem như là tầng xử lí thông tin.
Tìm hiểu về Socket
Hình 34: Cơ chế hoạt động của Socket
Dưới góc độ người lập trình, socket là một giao diện lập trình ứng dụng (APIs), nó được giới thiệu lần đầu tiên trong ấn bản UNIX – BSD 4.2, dưới dạng các hàm hệ thống theo cú pháp ngôn ngữ C (socket(), bind(), connect(), send(), receive(), read(), write(), …) Ngày nay, socket được hỗ trợ trong hầu hết các ngôn ngữ lập trình khác nhau như : Java, C++, Python, Visual Basic,…
Socket cho phép thiết lập kênh giao tiếp ảo, mà hai đầu kênh được đánh dấu bởi hai cổng. Thông qua các cổng này một quá trình có thể trao đổi thông tin, gửi và nhận dữ liệu với các quá trình khác.
Có hai kiểu socket:
Socket kiểu AF_UNIX chỉ cho phép giao tiếp giữa các quá trình trong cùng một máy tính.
Socket kiểu AF_INET cho phép giao tiếp những quá trình trên những máy tính khác nhau trên mạng TCP/IP.
Để có thể thực hiện giao tiếp với nhau, một trong hai quá trình phải công bố số hiệu cổng của socket mà mình sử dụng. Mỗi cổng giao tiếp thể hiện một địa chỉ xác định trong hệ thống. Khi quá trình được gán số hiệu cổng, nó có thể nhận dữ liệu gửi đến cổng này từ quá trình khác. Quá trình còn lại cũng được yêu cầu tạo ra socket.
Ngoài số hiệu cổng, hai bên giao tiếp còn phải biết được địa chỉ IP của nhau. Địa chỉ IP giúp nhận biết hai máy tính khác nhau trên mạng TCP/IP trong khi số hiệu cổng dùng để phân biệt các quá trình khác nhau trên cùng một máy tính.
Chế độ giao tiếp
Tầng vận chuyển giúp chuyển tiếp các thông điệp giữa các chương trình ứng dụng với nhau. Nó có thể hoạt động theo hai chế độ:Giao tiếp có nối kết, sử dụng giao thức TCP (Transmission Control Protocol)
Hoặc giao tiếp không có kết nối UDP (User Datagram Protocol).
So sánh sự khác biệt giữa hai cơ chế.
TCP có tồn tại kênh giao tiếp ảo giữa hai quá trình còn UDP thì không.
TCP gửi dữ liệu có kèm theo cơ chế đảm bảo, có kiểm tra lỗi truyền lại gói tin lỗi hay mất, đảm bảo thứ tự đến của các gói tin,… còn UDP thì không.
Hình 35: Sự khác nhau của TCP và UDP
TCP truyền dữ liệu chính xác, và tốc độ truyền chậm, còn UDP truyền thông chính xác nhưng tốc độ truyền nhanh.
Thích hợp cho các ứng dụng cần độ chính xác cao: truyền file, thông tin điều khiển, UDP thích hợp cho các ứng dụng cần tốc độ cao, truyền âm thanh hoặc hình ảnh…
Cả hai giao thức đều phân dữ liệu ra thành các gói tin. Tuy nhiên, TCP có thêm vào gói tin này thành phần Header (tiêu đề) cho phép truyền lại các gói tin nếu như chúng bị thất lạc và tập hợp các gói tin lại với nhau đúng theo thứ tự. UDP không cung cấp các tính năng này, nếu một gói tin bị thất lạc hoặc bị lỗi nó sẽ không được truyền lại và thứ tự đích đến của gói tin cũng không được đảm bảo. Bù lại, về tốc độ, UDP sẽ truyền nhanh xấp xỉ 3 lần so với TCP. Vì thế việc lựa chọn chế độ giao tiếp nào là tùy vào mục đích của ứng dụng, người lập trình sẽ lựa chọn chế độ giao tiếp thích hợp.
Lập trình mạng là phần kiến thức lý thuyết cuối cùng trong Luận văn tốt nghiệp này. Sau khi đã nghiên cứu tất cả sáu mảng kiến thức. Phần tiếp theo của đề tài chúng tôi sẽ giới thiệu cách thức xây dựng cũng như mô tả thông tin chi tiết về hai ứng dụng : Karaoke Pro v1.0 và Wifi Connector v1.0.
CHƯƠNG III - XÂY DỰNG ỨNG DỤNG
PHẦN THỨ NHẤT - ỨNG DỤNG KARAOKE PRO v1.0
CÁC THIẾT BỊ ĐÃ SỬ DỤNG TRONG LUẬN VĂN
Yêu cầu phần cứng
Để xây dựng phần mềm trong Luận Văn, chúng ta cần các thiết bị sau:
Một điện thoại di động Nokia, sử dụng nền tảng Symbian S60 3rd. (Thiết bị mô phỏng được sử dụng trong Luận Văn này là Nokia N81 và Nokia N95 8GB).
Một vài thông số kỹ thuật của thiết bị:
Developer Platform: S60 3rd Edition, Feature Pack 1.
Operation System: Symbian OS v9.2.
Screen Resolution: 240 x 320 pixel.
Local Connectivity: Bluetooth 2.0 +EDR, Micro USB, Mini Stereo Plug 3.5mm, Nokia microUSB Cable CA-101, USB 2.0.
WLAN Support: 802.11b/g, WPA, WPA2 (AES/TKIP).
Video Playback Formats: 3GPP formats (H.263), H.264/AVC, MPEG-4, RealVideo 7,8,9/10.
Graphic Formats: BMP, EXIF, GIF87a, GIF89a, JPEG, JPEG 2000, PNG, WBMP.
Audio Features: Audio Recorder AMR, Audio Streaming.
Audio Formats: AAC, AMR-NB, AMR-WB, eAAC+, M4A, MIDI Tones (poly 64), Mobile XMF, MP3, MP4, RealAudio 7, 8, 10, SP-MIDI, True tones, WAV, WMA.
Một thẻ nhớ dung lượng từ 1 GB – 2 GB.
Một dây cáp hoặc một kết nối Bluetooth kết nối từ điện thoại di động đến máy tính.
Một máy tính sử dụng hệ điều Window hoặc Mac Os X, hoặc Linux.
Cấu hình thiết bị
Cấu hình máy tính sử dụng Windows
Tải các tập tin cần thiết tại trang Web:
PythonForS60 2.0.0 Setup.zip: chứa file cài đặt PythonForS60_2.0.0_Setup.exe dùng để cài đặt Python trên Windows
Python_2.0.0_SDK_3rdEdFP2.zip: chứa SDK hỗ trợ cho việc lập trình Python.
Python 2.5.4: chứa PyS60 Application Packager dùng để đóng gói các file code có định dạng *.py thành các file cài đặt trên thiết bị di động có định dạng *.SIS, tải về tại địa chỉ:
Phần mềm soạn thảo code trong Luận Văn này sử dụng là Eclipse. Sau khi cài đặt Eclipse, ta cập nhật thêm module dùng để hỗ trợ cho việc viết code Python đó là module Pydev.
Cập nhật như sau: (yêu cầu phải có kết nối Internet).
Từ Eclipse chọn Help – Eclipse Marketplace. Chọn thẻ Search nhập vào Pydev. Sau khi tìm kiếm ta sẽ có kết quả là Pydev - Python IDE for Eclipse chọn module này và cài đặt.Với module này ta có thể soạn thảo code Python rất dễ dàng.
Ngoài các phần mềm trên, chúng ta cần thêm một phần mềm khác nữa đó là Nokia PC Suit version 7.1 trở lên. Tải về tại địa chỉ www.nokia.com/A4144903/ với phần mềm này sẽ cho phép chúng ta kết nối máy tính và điện thoại di động một cách dễ dàng, quản lí ứng dụng, cài đặt ứng dụng cho điện thoại, …
Cấu hình cho điện thoại di động
Để cấu hình cho điện thoại di động chúng ta cài đặt các file sau:
Sau khi đã cài đặt Python cho Window, ta chọn đường dẫn:
Start – All Program – PythonForS60 2.0.0 – Pys60 Dependencies , chọn và cài đặt các file sau lên điện thoại, cài đặt bằng tính năng Install Application của Nokia PC Suit.
Python_2.0.0.sis: đây là PyS60 runtime.
PythonScriptShell_2.0.0_3_2.sis: đây là Python Interactive Shell.
Pips.sis: đây là 2 thư viện hàm hỗ trợ của Python.
Sau khi cài đặt thành công Python cho điện thoại. Sẽ sẽ thấy biểu tượng Python 2.0.0 trong thư mục Application của điện thoại. Thực hiện chạy các đoạn Script như hình hướng dẫn bên dưới. Các đoạn Script này sẽ nằm tại thư mục E:\data\python với E:\ là thẻ nhớ của điện thoại hoặc tại thư mục C:\data\python với C:\ là bộ nhớ của điện thoại. Tùy thuộc vào quá trình cài đặt Python 2.0.0 mà ta sẽ có thư mục chứa Script Python khác nhau.
Hình 36: PyS60 sau khi đã cài đặt trên điện thoại
PHÂN TÍCH YÊU CẦU PHẦN MỀM VÀ HƯỚNG GIẢI QUYẾT
Yêu cầu phần mềm
Nhằm đảm bảo khả năng linh hoạt dễ sử dụng cho người dùng Karaoke Pro v1.0 phải có nhưng yêu cầu sau đây:
Giao diện phải thật sự đơn giản, thao tác nhanh.
Đảm bảo tính hiệu quả, thực hiện đúng chức năng đã phân tích như đã đề cập đến trong phần tổng quan bao gồm các tính năng cơ bản sau:
Hiển thị lời bát hát cho người sử dụng.
Phải tận dụng được các tính năng hỗ trợ của phần cứng để thực hiện chức năng chính của phần mềm (hát karaoke). Microphone của điện thoại có tác dụng thu giọng hát của người sử dụng giống như tính năng của một micro rời bên ngoài. Loa của điện thoại, và âm thanh được xuất ra từ cổng Audio Output 3,5 mm phải đảm bảo phát lại chính xác và không có độ trễ âm thanh được thu nhận từ microphone.
Dữ liệu được sử dụng cho phần mềm phải đảm bảo được các yêu cầu sau:
Được sự hỗ trợ tốt từ phía thiết bị.
Âm thanh và hình ảnh phải đạt chất lượng tốt.
Dễ dàng tìm kiếm và dễ dàng chuyển đổi sang đúng định dạng thiết bị hỗ trợ.
Dung lượng nhẹ, không cần nhiều không gian của thiết bị lưu trữ trên thiết bị.
Đóng gói cài đặt và phân phối.
Cài đặt dễ dàng thuận tiện.
Dung lượng file cài đặt nhỏ và dễ dàng chia sẻ thông qua các phương tiện kết nối như: Cable, Bluetooth, Internet, …
Hướng giải quyết
Về mặt lập trình
Ngôn ngữ lựa chọn : PyS60 (Python For S60).
Ưu điểm: cấu trúc ngữ pháp đơn giản, trong sáng thích hợp cho việc lập trình trong nhóm, dễ tham khảo và phát triển sau này. Đơn giản hóa việc lập trình, số lượng code ít hơn rất nhiều so với một số ngôn ngữ khác cùng loại nhưng vẫn đảm bảo đúng các tính năng hoạt động tốt, được sự hỗ trỡ tốt của các diễn đàn lập trình ứng dụng mobile như Wiki Nokia Forum, Python.org, …, dung lượng phần mềm sau khi hoàn thành nhỏ, dễ dàng thực hiện đóng gói cài đặt và phân phối.
Khuyết điểm: chưa có nhiều các thư viện hàm lập trình ở mức thấp nhằm hỗ trợ cho việc lập trình sử dụng các tài nguyên phần cứng của thiết bị ở mức nâng cao. Tài liệu hướng dẫn đa phần là tiếng Anh nên có thể gây khó khăn cho một số lập trình viên trong việc tiếp cận và sử dụng.
Môi trường phát triển phần mềm: IDE Eclipse
Ưu điểm: phầm mềm miễn phí, ứng dụng rộng rãi trong nhiều lĩnh vực lập trình hỗ trợ lập trình trên nhiều ngôn ngữ khác nhau trong đó có lập trình với PyS60.
Khuyết điểm: khả năng bắt lỗi của plug-in PyDev (Python Development) còn khá hạn chế, chưa thể debug lỗi do chỉ kết nối được với SDK chưa kết nối được với thiết bị thật. Chưa thể lập trình trực quan PyS60 trên Eclipse.
Về thiết bị mô phỏng
Lựa chọn dòng điện thoại Nokia N_Series(gồm N81 2GB và N95 8GB)
Ưu điểm: giá cả hợp lý, dễ sử dụng.
Về nguồn dữ liệu cho phần mềm.
Các trang Web cung cấp dữ liệu đa phương tiện cho phần mềm:
www.youtube.com
www.mp3.zing.vn
Các phần mềm, và các thiết bị kết nối khác.
Phần mềm:
Nokia PC Suit (kết nối máy tính và thiết bị di động).
PyS60 Application Package (dùng đóng gói file cài đặt cho thiết bị S60).
Total Video Converter (chuyển đổi định dạng video cho thiết bị di động).
MakeSis (giao diện Command line, tạo file SIS cho thư viện hàm Audio Full Duplex).
Easy Symbian Suit (tạo logo, icon cho ứng dụng).
Thiết bị:
USB Cable Nokia, microphone, 4.1 Sound System.
Về kiến trúc phần mềm
Chia phần mềm thành 3 thành phần chính:
Module tìm kiếm và duyệt file mp4: thực hiện việc duyệt file mp4 trên thiết bị, đồng thời thực hiện gọi chương trình Real Player để play file mp4 do người dùng chọn.
Module Audio Full Duplex: thực hiện tính năng ghi âm full duplex.
Giao diện chương trình.
MÔ HÌNH HÓA ỨNG DỤNG
Hoạt động của phần mềm Karaoke Pro cũng tương đối đơn giản, chủ yếu tập trung vào sự hoạt động của hai module chính là tìm kiếm file mp4 và Audio Full Duplex. Mô hình dưới đây mô tả hoạt động của phần mềm này.
.
Hình 37: Hoạt động của Karaoke Pro
Người dùng chạy chương trình, khi đó hai module chính sẽ được khởi tạo, với module Audio Full Duplex, module này sẽ tiếp nhận và xử lý âm thanh nhận về từ phía microphone, sau khi sử lý xong nó sẽ xuất âm thanh ra loa của thiết bị.
Đồng thời module find mp4 thực hiện chức năng duyệt và tìm kiếm các file video karaoke mp4 trên thiết bị, cho phép người dùng lựa chọn bài hát và thực hiện play chúng bằng trình phát video Real Player, khi play, âm thanh được xuất đồng thời ra loa.Kết quả âm thanh cuối cùng nhận được là giọng nói của người dùng và tiếng nhạc. Với hai âm thanh này chúng ta có thể xuất chúng thông qua jack audio 3.5mm và kết nối đến thiết bị âm thanh mở rộng nếu có.
LẬP TRÌNH ỨNG DỤNG
Module tìm kiếm file mp4 và duyệt file
Đây là một trong 2 module chính của chương trình Kakaoke, nó có thể được xem như một trình quản lí file mini với tính năng chính là duyệt qua toàn bộ các thư mục trên đĩa và trên thẻ nhớ của điện thoại. và lọc bỏ các file không phù hợp chỉ hiển thị file mp4, file đúng định dạng mà chương trình sử dụng.
Sau khi tìm kiếm và duyệt đến file mp4, chương trình sẽ xử lý như sau: sử dụng hàm Content_handler() của thư viện hàm appuifw trong ngôn ngữ PyS60 và gọi chương trình Real Player trên hệ thống để play file được chọn này. Sau khi file được play bằng Real Player thì mọi điều khiển lúc này sẽ được tạm thời chuyển sang cho phần mềm này. Khi ta thoát ứng dụng Real Player lúc đó chúng ta sẽ trở về màn hình chính của phần mềm.
Dưới đây là một phần code của module tìm kiếm và chọn file này.
Hình 38: Code minh họa
Module Audio Full Duplex
(phiên bản mới nhất VoIPAudioServicesAPI)
Để xây dựng module audio Full Duplex, việc đầu tiên chúng ta cần thực hiện là download bộ thư viện hàm APIs Audio Full Duplex tại trang:
Sau khi download về, giải nén ta sẽ được các thư mục sau đây:
Data: chứa các tập tin sau
fullduplexex.rss (định nghĩa các tài nguyên, tạo menu cho module), fullduplexex_caption.rss (định vị file chú thích cho module), fullduplexex_reg.rss (chứa thông tin đăng kí module)
Sis: chứa các tập tin sau
fullduplexex_2nd_ed.pkg, fullduplexex_2nd_ed.sis (file cài đặt module lên thiết bị S60 2nd), fullduplexex_3rd_ed.pkg (đinh nghĩa các thông tin quan trọng về module như: ngôn ngữ, UID của module có dạng 0x101ff1e0, nhà cung cấp module, các hệ điều hành hỗ trợ,… )
group: chứa các tập tin sau
fullduplexex_3rd_ed.mmp (định vị các tài nguyên, định vị mã nguồn, định vị thư viện hàm, định nghĩa khả năng truy cập dữ liệu người dùng, khả năng sử dụng phần cứng của moudle), fullduplexex.mmp (tương tự như fullduplex_3rd_ed)
src: chứa các tập tin sau (mã nguồn của thư viện hàm)
ao.cpp, fullduplexexengine.cpp, fullduplexexenginebase.cpp, fullduplexexapp.cpp, fullduplexexappui.cpp, fullduplexexcontainer.cpp, fullduplexexdocument.cpp, inputstreamthread.cpp
inc: chứa các tập tin sau (mã nguồn của thư viện hàm)
ao.h, filelogger.h, fullduplexexengine.h, fullduplexexenginebase.h, fullduplexexapp.h, fullduplexexappui.h, fullduplexexcontainer.h, fullduplexexdocument.h, inputstreamthread.h, shareddata.h.
Tiếp theo, để có thể cài đặt module này cho thiết bị, chúng ta cần phải tổng hợp và biên dịch các file trên thành file có định *.SIS, và file này được đặt trong thư mục sis, trong thư mục sis sau khi download chúng ta nhận được 3 file trong đó có một file fullduplex_2nd_ed.sis file này được biên dịch từ file fullduplexex_2nd_ed.pkg, tuy nhiên file này chỉ có thể cài được trên các máy chạy hệ điều hành Symbian S60 2nd mà không thể cài đặt được trên các máy chạy Symbian S60 3rd, vì thế công việc tiếp theo của chúng ta là cần phải biên dịch file fullduplexex_3rd_ed.pkg thành file fullduplexex_3rd_ed.sis bằng cách sử dụng công cụ makesis của bộ SDK S60 for 3rd. Công cụ này dạng console và được chứa trong thư mục “C:\ .. ...\S60_3rd_FP1_3\Epoc32\tools” .
Và sau đây là các bước biên dịch module Audio Full Duplex.
Bước 1:
Chạy Command Promt với quyền Administrator
Chuyển đến thư mục …\FullDuplexEx\group (FullDuplexEx là thư mục sau khi chúng ta giải nén bộ thư viện hàm.) :
cd d:\audio\FullDuplexEx\group
Tiếp theo ta đánh lệnh : bldmake bldfiles
abld build gcce urel
Bên dưới là hình minh họa sau khi thực hiện 3 lệnh trên:
Hình 39: Bước 1 của MakeSis Audio FullDuplex
Bước 2: Mở file fullduplexex_3rd_ed.pkg bằng Notepad sau đó chúng ta sửa lại đường dẫn của các file fullduplexex.exe, fullduplexex.rsc, fullduplexex_reg.rsc sao cho đường dẫn này phù hợp với địa chỉ chúng trên máy của chúng ta, (3 file này được tạo ra sau khi chúng ta đã thực hiện thành công Bước 1). Minh họa như sau:
Hình 40: Bước 2 của MakeSis Audio FullDuplex
File fullduplexex_3rd_ed.pkg chưa được sửa:
File fullduplexex_3rd_ed.pkg sau khi đã được sửa:
Hình 41: Bước 2 của MakeSis AudioFullDuplex (tt)
Chuyển đến thư mục \FullDuplexEx\sis : cd d:\audio\FullDuplexEx\sis
Đánh tiếp lệnh: makesis fullduplexex_3rd_ed.pkg
Hình 42: Bước 2 của MakeSis AudioFullDuplex (tt)
Thư mục D:\audio\FullDuplexEx\sis chứa file fullduplexex_3rd_ed.pkg và file fullduplexex_3rd_ed.sis sau khi đã thực hiện xong lệnh maksis của Bước 2.
Hình 43: Bước 2 của MakeSis AudioFullDuplex (tt)
Bước 3: sau khi đã tạo thành công file fullduplexex_3rd_ed.sis, chúng ta bắt buộc phải chứng thực (Signing) nó lúc đó mới có thể cài đặt lên thiết bị Symbian S60 một cách hợp lệ. Cách chứng thực đã được đề cập đến tại phần 2.1.3 Cơ chế bảo mật và quản lí ứng dụng trên Symbian S60.
Sau khi đã chứng thực fullduplexex_3rd_ed.sis ta sẽ được một file mới opda.cn_AudioFullDuplex_fullduplexex_3rd_ed.sisx và chúng ta sẽ dùng file này để cài đặt lên thiết bị di động S60.
Hình 44: Bước 3 MakeSis Audio FullDuplex
Hình 45: Chương trình đóng gói file cài đặt SIS
Đóng gói cài đặt ứng dụng
Trên hệ điều hành Symbian S60 file cài đặt có phần mở rộng là *.SIS hoặc *.SISX với PyS60 việc đóng gói file cài đặt tương đối đơn giản. Chúng ta sẽ cần sử dụng thêm một công cụ nữa có tên là PyS60 Application Packager ứng dụng này được cài đặt trên máy tính sử dụng hệ điều hành Window.
Việc đóng gói cài đặt ứng dụng sẽ thực hiện công việc chủ yếu sau. Chúng ta sẽ chuyển đổi file mã python có phần mở rộng là *.py thành file *.SIS.
Application source: đường dẫn đến tập tin Karaoke Pro.py
Application title: Karaoke Pro. Tên của ứng dụng, tên này sẽ được hiển thị sau khi chúng ta cài đặt ứng dụng trên điện thoại.
Version: phiên bản của phần mềm.
Additional options:
--icon=c:\\Karaoke_icon.svg, tùy chọn thuộc tính thêm vào, với lệnh -- icon sẽ thêm thuộc tính icon cho phần mềm. Lưu ý, icon được sử dụng cho hệ điều hành Symbian ở định dạng *.svg, để chuyển đổi ảnh thành định dạng *.svg chúng ta sẽ sử dụng công cụ chuyển đổi ảnh trực tuyến tại địa chỉ sau:
Profile : tùy chọn này sẽ quyết định môi trường chạy ứng dụng của chúng ta bao gồm 2 lựa chọn S60UI và Console. S60UI cung cấp môi trường đồ họa S60/Avkon UI, Console giao diện dòng lệnh dựa trên OpenC STDIO.
Package As: thuộc tính này xác định phương thức đóng gói ứng dụng. Bytecode, đóng gói nhanh hơn, nhưng source code không được hiển thị trong tracebacks. Sourcecode, đóng gói chậm hơn nhưng source code ứng dụng sẽ được hiển thị tring tracebacks. Bytecode sẽ được chọn mặc định
1.4x compatibility mode: nếu thuộc tính này được chọn ứng dụng sẽ ưu tiên sử dụng thư viện hàm của PyS60, ngược lại nếu thuộc tính này không được chọn ứng dụng sẽ ưu tiên sử dụng thư viện hàm của Python Core.
Ứng dụng sau khi được đóng gói thành file *.SIS sẽ có thể cài đặt trên các điện thoại Symbian OS. Nếu việc cài đặt gặp một số thông báo lỗi như: “Certificate Expired” hoặc “Certificate Error. Contact Application Supplier”. Xem lại phần 2.1.3 Cơ chế bảo mật và quản lí ứng dụng trên hệ điều Symbian S60.
MÔ TẢ ỨNG DỤNG
Sau khi cài đặt chương trình từ giao diện chính,chúng ta chọn Options -> Sing file *.mp4 để có thể chọn được bài hát mình muốn hát. Chương trình chỉ sẽ hiển thị file với định dạng mp4.
Hình 46: Giao diện chính của chương trình
Duyệt chọn bài hát
Hình 47: Duyệt tìm bài hát mp4
Chọn bài hát cần play. Sau khi chọn bài hát sẽ được mở và giao diện của chương trình như hình bên dưới.
Hình 48: Chọn bài hát
Lúc này quyền kiểm soát tạm thời thuộc về chương trình Real Player, sau khi chúng ta thoát Real Player, chương trình Karaoke Pro sẽ tiếp tục thực thi.
KẾT QUẢ ĐẠT ĐƯỢC
Vận dụng kiến thức đã nghiên cứu, xây dựng hoàn thành một ứng dụng độc lập chạy trên nền tảng Symbian S60 sử dụng ngôn ngữ cấp cao Python.
Tìm hiểu kiến trúc, mô hình và phương thức quản lí ứng dụng của hệ điều hành Symbian S60. Ngôn ngữ Python, các bộ SDK.
Đăng kí thành công và chứng thực các phầm mềm trước khi cài đặt lên thiết bị thật S60.
Các tính năng đạt được của Phần mềm Karaoke Pro.
Hoàn thiện trong việc đóng gói cài đặt.
Giao diện người dùng đơn giản dễ thao tác.
Play file video karaoke định dạng mp4 với khả năng hiển thị lời bài hát tích hợp sẵn.
Thuật toán tìm kiếm duyệt file video mp4 trên Symbian.
Tìm hiểu công nghệ âm thanh FullDuplex trên thiết bị Symbian S60. Tích hợp các thư viện hàm của Nokia, và xây dựng một module mô phỏng cho phép thực hiện công nghệ âm thanh FullDuplex trên thiết bị mô phỏng Nokia N81.
NHỮNG VẤN ĐỀ PHÁT SINH VÀ CHƯA GIẢI QUYẾT TRONG ĐỀ TÀI
Vấn đề phát sinh
Trên thiết bị Nokia Symbian S60, công nghệ âm thanh được mô phỏng như sau:
Hình 49: Minh họa hoạt động âm thanh trên thiết bị S60
Trình tự thực hiện như sau:
Thông thường để thiết bị có thể phát ra âm thanh, chúng ta sẽ sử dụng trình phát nhạc Music Player để play bài hát đó, bài hát được lưu trên thẻ nhớ hoặc bộ nhớ trong của điện thoại dưới định dạng mp3, wav hoặc arm.
Trong trường hợp thực hiện thao tác ghi âm (Audio Record) tiến trình như sau: âm thanh từ người sử dụng, hoặc từ môi trường bên ngoài được microphone trên điện thoại thu nhận lại với tần số (Sampling rate) và tốc độ(Bitrate) lấy mẫu nhất định tùy thuộc vào chất lượng file đầu ra. Sau khi thu nhận hệ điều hành sẽ lưu file âm thanh này lại với các định dạng như wav và arm, trong đó wav là phổ biến nhất vì có chất lượng âm thanh tốt hơn. Và khi đã lưu âm thanh thành file trên thẻ nhớ hoặc bộ nhớ máy, chúng ta có thể play chúng với trình phát nhạc.
Với trường hợp ghi âm, chúng ta không thể thực hiện được tính năng play trực tiếp âm thanh được nhận vào từ microphone (kỹ thuật âm thanh này gọi là audio fullduplex). Mà cần phải ghi chúng lên thiết bị sau đó mới có thể sử dụng hoặc play chúng.
Với ứng dụng Karaoke đòi hỏi thiết bị phải giải quyết được tình trạng trên tức là có thể play trực tiếp âm thanh nhận vào từ microphone qua speaker. Để giải quyết tình trạng này, chúng ta có thể sử dụng bộ thư viện hàm Audio FullDuplex do Nokia cung cấp. Hiện tại phien bản mới nhât của thư viện hàm này tên là Audio VoIP.
Vấn đề chưa giải quyết được
Sau khi giải quyết được kỹ thuật âm thanh fullduplex. Một vấn đề khác liên quan đến công nghệ trên thiết bị Symbian đã làm cho phần mềm Karaoke Pro không đạt được tính năng hoàn thiện nhất. Đó là chưa tích hợp được phần mềm Karaoke Pro và Module Audio FullDuplex.
Hình 50: Chưa thể tích hợp Karaoke Pro v1.0 và Audio FullDuplex
Nguyên nhân sẽ được minh họa như sau:
Tại mỗi thời điểm, chỉ có một tiến trình được sử dụng Speaker.
Hình 51: Sơ đồ lưu chuyển âm thanh
Hình 52: Sơ đồ lưu chuyển âm thanh
Hình trên minh họa trình phát nhạc đang play video karaoke và đang sử dụng speaker. Trong lúc đó ta không thể thực hiện được khả năng ghi âm fullduplex.
Hình bên trên minh họa ngược lại, chúng ta đang ghi âm fullduplex, và không thể thực hiện play video karaoke thông qua Music Player.
Chúng ta không thể thực hiện đồng thời 2 tiến trình cùng sử dụng Speaker.
Hình 53: Hai tiến trình không cùng lúc sử dụng được Speaker
Hướng giải quyết bằng kỹ thuật phần cứng
Tuy nhiên chúng ta hoàn toàn có thể hoàn thiện tính năng này nhờ vào sự can thiệp của phần cứng, minh họa giải pháp như sau:
Hình 54: Giải quyết bằng phần cứng
Ở trường hợp này, thiết bị phần cứng được sử dụng riêng biệt là Microphone, chúng ta cần thêm một microphone rời để phục vụ cho việc nhận giọng hát từ phía người dùng và truyền nó ra hệ thống âm thanh lớn hơn bên ngoài. Với cách giải quyết này, chúng ta hoàn toàn có thể thực hiện được việc karaoke với sự hỗ trợ của thiết bị di động.
HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI
Do trong thời gian ngắn nên mặc dù đã hoàn thành được đề tài, nhưng đề tài vẫn còn một vài khuyết điểm cần sửa chữa cũng như cần bổ sung thêm nhiều tính năng mới. Như thế phần mềm Karaoke Pro mới có thể trở thành một phần mềm hoàn thiện và đáp ứng đầy đủ yêu cầu của người sử dụng. Cụ thể những tính năng sau cần sửa chữa và cập nhật.
Tích hợp Module Audio Fullduplex vào phần mềm
Do phần mềm Karaoke Pro được xây dựng bằng ngôn ngữ PyS60 dựa trên ngôn ngữ Python, trong khi đó module Audio Fullduplex lại được xây dựng bằng ngôn ngữ Symbian C++ dựa trên ngôn ngữ C++, nên việc tích hợp toàn bộ code của module Audio Fullduplex vào code của Karaoke Pro là khó thực hiện. Và tốn rất nhiều thời gian và công sức do ngôn ngữ PyS60 chưa có bộ thư viện hàm nào hỗ trợ cho Audio Fullduplex trên thiết bị di động. Nên giải pháp được đưa ra là xây dựng một bộ thư viện hàm hỗ trợ Audio Fullduplex cho ngôn ngữ PyS60.
Xây dựng ứng dụng Karaoke Pro dựa trên ngôn ngữ Symbian C++
Với giải pháp này tuy có tốn nhiều thời gian nhưng tính khả thi là rất cao do module Audio Fullduplex được xây dựng trên nền Symbian C++, việc còn lại là ta chỉ xây dựng lại phần mềm Karaoke Pro. Và sau đó tích hợp chúng lại với nhau, hoặc ta có thể sử dụng những hàm quan trọng trong module Audio fullduplex, không nhất thiết phải sử dụng toàn bộ module này. Tuy nhiên việc xây dựng một ứng dụng trên nền Symbian C++ là không đơn giản và đòi hỏi khá nhiều thời gian nghiên cứu của người lập trình.
Module Audio Fullduplex với khả năng chạy ngầm
Giải pháp này ta sẽ xây dựng module Audio Fullduplex thành một module có khả năng chạy ngầm (Background running) trên nền Symbian S60, khi module có khả năng chạy ngầm ta sẽ dễ dàng kết hợp với phần mềm Karaoke Pro để nó có thể hỗ trợ tính năng audio fullduplex cho Karaoke Pro. Như thế sẽ đáp ứng được yêu cầu của một phần mềm Karaoke, tuy nhiên, việc phải kết hợp module chạy ngầm sẽ làm gia tăng khả năng xử lý của CPU và RAM của thiết bị di động.
Việc áp dụng giải pháp nào trong thời gian sắp tới là tùy thuộc vào tính khả thi và thời gian thực hiện của mỗi giải pháp.
Một vài tính năng khác cần được bổ sung cho phần mềm Karaoke Pro.
Tích hợp nhạc không lời (nhạc beat) và xử lý lời bài hát (lyric)
Khả năng này nhằm làm gia tăng số lượng bài hát cho phép người dùng có nhiều sự lựa chọn hơn. Khi đó phần mềm sẽ có thêm tính năng play nhạc beat và hiển thị lời bài hát trên màn hình điện thoại. Tính năng này được dùng ở một số sản phẩm phần mềm cùng loại trên các thiết bị của các nhà sản xuất khác như Apple, Samsung, HTC, … khi sử dụng tính năng này người dùng sẽ tải 2 loại file: file thứ nhất là file nhạc beat, file thứ hai là file lời bài hát. Chương trình sẽ sử dụng 2 file này và tổng hợp chúng lại sao cho tốc độ hiển thị lời bài hát trên màn hình sẽ hợp với âm thanh nhạc beat.
Tính năng download nhạc, ghi âm, chấm điểm tượng trưng.
Download nhạc: cho phép người dùng download các bài hát từ các trang Web thông qua khả năng kết nối Internet bằng WiFi của các thiết bị S60.
Ghi âm: người sử dụng có thể ghi âm trong lúc mình đang thực hiện hát, và người dùng sẽ có thể nghe lại những gì mình đã hát.
Chấm điểm tượng trưng: sau khi kết thúc một bài hát, chương trình sẽ trả về một số điểm tượng trưng cho người dùng nhằm cỗ vũ cho người dùng ở lần hát tiếp theo.
PHẦN THỨ HAI - ỨNG DỤNG WIFI CONNECTOR v1.0
PHÂN TÍCH PHẦN MỀM VÀ HƯỚNG GIẢI QUYẾT
Phân tích phần mềm
Khởi tạo kết nối và kiến trúc sử dụng:
Wifi Connector sử dụng kiến trúc Client – Server, trong đó Server sẽ là phía khởi tạo kết nối, và thông báo cho Client (người mà Server muốn kết nối đến) bằng một tin nhắn SMS. Khi đó tùy theo nhu cầu mà Client sẽ chạy ứng dụng để kết nối tới Server. Tuy sử dụng kiến trúc Client – Server nhưng ứng dụng này cũng cung cấp cho người dùng khả năng lựa chọn (khởi tạo kết nối hoặc kết nối đến, chúng ta có thể là Server hoặc là Client tùy vào việc chủ động hay không chủ động tạo kết nối.).
Do đây là một ứng dụng tương tác nên mọi thao tác diễn ra trong lúc kết nối cần phải được hai bên thông báo cho nhau.
Về tính năng: Ứng dụng này cung cấp các tính năng cơ bản sau cho người sử dụng:
Đàm thoại thông qua mạng Wifi.
Với tính năng này,người dùng có thể thực hiện trò chuyện với nhau, tương tự như tính năng VoIP trên máy tính, nhưng ở đây chúng ta không cần một kết nối internet. Hai người dùng sử dụng điện thoại, kết nối với nhau thông qua Access Point tạo thành một mạng WLAN. Tiếng nói sẽ được truyền tới đích thông qua mạng WLAN.
Việc kết nối thông qua mạng WLAN cũng sẽ một phần ảnh hưởng đến chất lượng đàm thoại, cụ thể sẽ có độ trễ xảy ra. Việc cần thiết cần thực hiện là làm sao giảm độ trễ đàm thoại xuống mức thấp nhất.
Chat đơn giản giữa hai điện thoại.
Có lẽ chúng ta đã không xa lạ gì với thuật ngữ “Chat”, nó đã xuất hiện cũng đã khá lâu tại Việt Nam ta, và Yahoo có lẽ là chương trình chat mà chúng ta thường hay sử dụng nhiều nhất. Tại thời điểm hiện tại Yahoo có mặt trên PC và cả điện thoại di động, nó tạo điều kiện thuận lợi cho người dùng có thể trò chuyện với bạn của mình thông qua internet. Ngoài ra hiện nay có một số chương trình cho phép chat trên điện thoại di động như Ola, ViTalk, YoYo (sản phẩm của công ty SUNNET ITC Solution),.. Tuy nhiên để sử dụng các ứng trên chúng ta cần một kết nối GPRS và phải chịu một mức phí nhất định tùy nhà cung cấp dịch vụ.
Với Wifi Connector tuy không phải là một phần mềm chat chuyên nghiệp nhưng với tính năng chat này, sau khi kết nối thành công với bạn của mình bạn vẫn sẽ có thể chat với bạn của mình với một giao diện thật đơn giản. Nhưng hoàn toàn miễn phí, chúng ta chỉ cần một kết nối wifi.
Do Wifi Connector thực hiện một kết nối cục bộ trong WLAN nên thông tin chat được truyền đi rất nhanh, nó sẽ được truyền đi tức thì tới đích, sẽ không có tình trạng ngẽn mạng xảy ra. Chúng ta sẽ phân tích kỹ hơn tính năng chat này ở phần xây dựng module chat.
Chia sẻ dữ liệu hai điện thoại với nhau.
Khả năng này là thật sự cần thiết khi chúng ta kết nối với nhau, chúng ta có thể chia sẻ hình ảnh, âm thanh, video, văn bản cho bạn của mình sau khi chúng ta đã kết nối thành công.
Đối với thao tác chia sẻ này mọi việc sẽ dễ dàng hơn nhiều so với chia sẽ dữ liệu từ một máy tính tới một điện thoại hoặc từ một điện thoại với một điện thoại thông qua kết nối Bluetooth. Giao diện thực thi sẽ đơn giản hơn. Khả năng thực thi của tính năng này cũng thực sự ấn tượng, việc gửi một file âm thanh có dung lượng 3MB chỉ mất khoảng 5 giây.
Về giao diện phần mềm:
Wifi Connector cung cấp giao diện ở dạng menu (Option) lúc bạn khởi động chương trình, và giao diện popup-menu (menu chỉ xuất hiện khi có một sự hiện nhất định) vì thế ứng dụng sẽ đơn giản hơn rất nhiều, mọi thao tác sẽ được diễn ra đồng bộ từ hai phía người kết nối. Tùy theo hành động của phía bên kia mà bạn sẽ có những menu hành động tương ứng.
Về khả năng cài đặt:
Sản phẩm hoàn thành của Wifi Connector được đóng gói ở dạng tập tin *.SIS, chúng ta có thể cài đặt trực tiếp bằng tập tin cài đặt lưu trên thoại hoặc cài đặt thông qua máy tính và sử dụng chương trình Nokia PC Suite.
Khả năng xử lí lỗi:
Do bản chất của mạng wifi không ổn định, tình trạng sóng phụ thuộc thuộc khá nhiều vào môi trường xung quanh nên phần mềm có thể sẽ khó hoạt động ở môi trường có sóng wifi yếu. Do bộ nhớ xử lý của điện thoại S60 rất hạn chế nên đối với trường hợp này, ứng dụng cần phải có những cơ chế xử lí kịp thời tránh tình trạng thiết bị phần cứng (chip wifi trên điện thoại) có thể ảnh hưởng làm cho cả máy và ứng dụng bị treo.
Hướng giải quyết
Định danh điện thoại trong mạng Wifi
Để khởi tạo được kết nối, việc chúng ta cần làm đầu tiên là làm sao có được địa chỉ của hai bên kết nối.
Khi kết nối đến một WLAN, điện thoại S60 sẽ được cung cấp một địa chỉ IP, địa chỉ này tương tự như trên máy tính của chúng ta. Bên khởi tạo kết nối sẽ cần phải thông báo cho bên kết nối đến biết địa chỉ IP của mình bằng việc sẽ gửi địa chỉ IP này thông qua SMS đến số điện thoại của bên kết nối đến.
Khởi tạo kết nối:
Để khởi tạo kết nối giữa hai điện thoại Symbian S60, yếu tố đầu tiên chúng ta cần thiết nhất đó là xung quanh chúng ta phải có sóng wifi hoạt động ở tình trạng tốt (do chip wifi trên điện thoại có hiệu suất hoạt động thấp hơn trên máy tính của chúng ta khá nhiều.). Giả sử trường hợp rằng, Người A cần kết nối với Người B, lúc này A sẽ là người chủ động tạo kết nối, lúc đó A sẽ chạy chương trình Wifi Connector và thực hiện lệnh Create new connection (chi tiết lệnh này sẽ phân tích ở phần tiếp theo) từ Option menu.
Tiếp theo A sẽ lựa chọn các Access Point trong danh sách Access Point. Để có danh sách này chúng ta phải thực hiện thao tác Defined Access Point (sẽ hướng dẫn cụ thể hơn ở phần Phụ Lục hướng dẫn sử dụng). Lệnh này nhằm mục đích kết nối người A đến WLAN của Access Point mà người này chọn, đưa người A vào tình trạng sẵn sàng chấp nhận kết nối.
Sau khi khởi tạo kết nối và kết nối thành công đến Access Point lúc này chương trình sẽ cho phép Người A lựa chọn người B từ danh bạ, khi đó chương trình sẽ gửi một tin nhắn SMS vào số điện thoại của người B, khi người B nhận được tin nhắn có cấu trúc quy định theo mẫu. Khi người B có nhu cầu kết nối người B sẽ chạy chương trình Wifi Connector và thực hiện lệnh Connect to từ Option menu. (Lưu ý rằng: người A và người B sẽ phải ở trong cùng một mạng WLAN và phải kết nối vào cùng một Access Point). Khi B kết nối thành công tới A, hai bên sẽ nhận được thông báo tương ứng và khi đó việc chọn thao tác hành động tiếp theo sẽ thuộc về người A (người chủ động kết nối).
Về tính năng:
Cả ba tính năng là : đàm thoại, chat và chia sẻ dữ liệu được giải quyết bằng phương pháp lập trình Socket mà chúng tôi đã giới thiệu ở phần Cơ sở lý thuyết. Riêng đối với tính năng đàm thoại việc kết hợp kỹ thuật lập trình thời gian thực là thật sự cần thiết cần thiết.
Chế độ kết nối sử dụng cho ba tính năng này được dùng ở dạng TCP. Cơ chế định danh được sử dụng là IP.
MÔ HÌNH HÓA ỨNG DỤNG
Hình 55: Mô hình hoạt động Wifi Connector
Phần này chúng tôi sẽ giới thiệu các mô hình minh họa cho sự hoạt động của ứng dụng bao gồm phần tổng quát và các tính năng riêng lẻ.
Hình 56: Lưu đồ hàm khởi tạo kết nối
Đây là lưu đồ minh họa các tho tác chính cho Mobile A (Người chủ động khởi tạo kết nối). Mobile A sử dụng hàm create new connection để tạo kết nối.
Hình 57: Lưu đồ hàm kết nối
Minh họa cho Mobile B (người kết nối đến Mobile A) sau khi đã nhận được tin nhắn thông báo việc cần kết nối của Mobile A. Mobile B sử dụng hàm connect to để kết nối đến địa chỉ IP trong tin nhắn mà A đã gửi.
Lưu ý: các hàm trong các lưu đồ trên chỉ mang tính chất minh họa. Sẽ khác so với phần code.
LẬP TRÌNH ỨNG DỤNG
Module khởi tạo kết nối “create connection”
Hình 58: Lưu đồ chi tiết module “create connection”
Module này được sử dụng cho bên chủ động tạo kết nối, sau khi khởi tạo kết nối thành công bên khởi tạo sẽ đóng vai trò là Server và sẽ thực hiện đợi Client kết nối đến. Sau đây chúng tôi sẽ trình bày chi tiết kỹ thuật của toàn bộ module create connection. Dưới đây là lưu đồ giải thuật của module này.
Để chạy module này, chúng ta sẽ chọn Option -- Create new connection từ giao diện chính của chương trình Wifi Connector.
Khi module được gọi từ option menu nó sẽ thực hiện gọi hàm select_access_point () để liệt kê tất cả các AP (access point) trong danh sách access point của điện thoại, và sẽ tự động kết nối đến AP mà chúng ta chọn. Nếu kết nối thành công đến AP, chúng ta sẽ nhận được một địa chỉ IP, địa chỉ này là địa chỉ của điện thoại chúng ta trong WLAN của AP.
Lưu ý: Để thêm một AP vào danh sách này chúng ta thực hiện như sau:
Từ menu chính của điện thoại chọn Tools – Connectivity – WLAN wizard. Tại đây chúng ta sẽ được WLAN wizard liệt kê các AP trong phạm vi. Ta chọn AP cần thêm sau đó chọn Options – Define access point.
Sau khi kết nối thành công đến AP, tiếp theo chúng ta sẽ chọn người mình muốn kết nối từ danh bạ điện thoại, bằng cách nhập tên người đó vào một Input text, chúng ta sẽ tìm được tên và số điện thoại của người này bằng hàm get_name_number (). Nếu không tìm được hoặc xảy ra lỗi chúng ta sẽ tìm một người khác để kết nối hoặc có thể dừng chương trình lại tại đây. Kết quả của hàm get_name_number() là một tuple (cặp) gồm hai giá trị là first name và number phone của người được chúng ta chọn.
Lưu ý: người mà chúng ta chọn để kết nối, phải đang ở trong cùng môi trường wifi với chúng ta. Do đây là một kết nối cục bộ.
Với số điện thoại đã tìm được, module sẽ gọi tiếp hàm send_ip(), hàm này sẽ thực hiện gửi một tin nhắn SMS chứa địa chỉ IP của điện thoại chúng ta đến số điện thoại của người mà chúng ta muốn kết nối cấu trúc hàm như sau: send_ip( ip,number_phone). Nội dung của tin nhắn như sau: request_conn@@xxx.yyy.zzz.kkk. Ví dụ như: request_conn@@192.168.1.19 Nếu việc gửi IP không thành công (do mạng GSM bị lỗi hoặc số dư trong tài khoản không đủ để thực hiện, chúng ta sẽ nhận được thong báo tương ứng) chúng ta có thể thử gửi lại hoặc dừng chương trình.
Một khi đã gửi xong tin nhắn chứa IP của mình cho người cần kết nối. Tiếp theo module sẽ tạo socket kết nối và chọn kiểu kết nối là TCP hoặc UDP. Khi đã tạo xong socket chúng ta sẽ tiếp tục gọi bind socket với IP của mình và một cổng (port) được chỉ định trước. Hàm thực hiện như sau:
PORT = 54321
s = btsocket.socket(btsocket.AF_INET,btsocket.SOCK_STREAM)
s.bind((str(ip),PORT))
Ở đây chúng ta đặt port là 54321, chọn loại socket là Internet và chế độ kết nối là TCP.
Nếu việc tạo và bind socket không thành công, do một vài nguyên nhân như sóng wifi bị chập chờn, thiết bị mất kết nối với AP, … chúng ta sẽ phải thực hiện module create connection lại từ đầu hoặc có thể thoát chương trình.
Nếu mọi việc diễn ra bình thường, việc tạo và bind socket thành công, module sẽ thực hiện tiếp lệnh: listen () và accept (). Hai lệnh này sẽ cho phép socket lắng nghe và chấp nhận yêu cầu kết nối từ phía client (người mà chúng ta đã gửi địa chỉ IP).
Khi Client kết nối đến, chúng ta sẽ nhận được thông báo và tiến hành nhận thông tin trả lời từ phía client bằng hàm recv (). Nếu client gửi qua một thông tin là “accept”. Thì lúc này chúng ta biết là Client đã kết nối thành công và sẵn sàng thao tác với chúng ta. Khi đó một Popup_menu sẽ xuất hiện và cho chúng ta lựa chọn tính năng cần kết nối với client bao gồm : Talk, chat, share data. Popup_menu xuất hiện bằng hàm choose_action (). Một khi đã chọn xong tính năng muốn kết nối, module sẽ thực hiện tiếp hàm waiting_reply (), hàm này sẽ tiếp tục đợi thông tin phản hồi từ phía client. Tùy theo thông tin phản hồi mà chúng ta sẽ có những hành động tương ứng. Hàm choose_action() và waiting_reply() sẽ được thực hiện cho đến khi nào kết nối bị kết thúc
Ngược lại nếu client gửi qua một thông tin khác “accept”, khi đó client không sẵn sàng kết nối để trao đổi thông tin, module sẽ gọi hàm ngắt kết nối close().
Lưu ý: các hàm trong lưu đồ trên chỉ mang tính chất minh họa. Sẽ khác so với phần code.
Module kết nối “connect”
Hình 59: Lưu đồ chi tiết module “connect”
Sau khi nhận được tin nhắn yêu cầu kết nối từ phía server, trong trường hợp này chúng ta đóng vai trò là Client. Khi muốn kết nối theo yêu cầu của server, chúng ta khởi chạy chương trình và chọn lệnh Connect to từ Option menu của chương trình Wifi Connector.
Khi thực hiện lệnh này, chương trình sẽ gọi đến module connect (), sau đó, việc đầu tiên module này thực hiện là tìm địa chỉ IP của Server, địa chỉ này sẽ nằm trong tin nhắn mà Server gửi cho chúng ta, việc tìm địa chỉ này được thực hiện bằng hàm find_ip().
Hàm find_ip() sẽ truy cập vào hộp thư đến Messaging – Inbox và nó sẽ tìm kiếm trong 5 tin nhắn đầu tiên, nếu tin nhắn nào có dạng: request_conn@@xxx.yyy.zzz.kkk, thì nó sẽ lấy phần địa chỉ phía sau @@ và hiểu rằng đây là địa chỉ IP của server gửi cho mình. Trong trường hợp không tìm thấy địa chỉ IP thì chúng ta sẽ được thông báo là yêu cầu server gửi lại địa chỉ IP hoặc chúng ta có thể dừng chương trình tại đây.
Một khi đã có được địa chỉ IP, tiếp theo module sẽ thực hiện tạo socket kết nối bằng cách gọi hai hàm sau:
PORT = 54321
client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client_socket.connect((str(IP_address),PORT))
Hàm trên sẽ khai báo một socket loại internet và chế độ kết nối là TCP.
Chúng ta cũng cần phải khai báo PORT để có thể thực hiện việc kết nối bằng hàm connect(IP_address,PORT),
Nếu như việc tạo socket và thực hiện kết nối không thành công, chúng ta sẽ thực hiện kết nối lại hoặc chúng ta có thể kết thúc chương trình.
Trong trường hợp kết nối thành công đến server, module sẽ thực hiện tiếp hàm waiting_action(), hàm này cho chúng ta quyết định hai hành động sau. Một là chấp nhận kết nối và kết thúc thoát chương trình.
Khi chúng ta chọn chấp nhận kết nối bằng cách chọn lệnh waiting action… từ popup_menu khi đó, lệnh này sẽ đưa chương trình vào trạng thái sẵn sàng và chờ đợi thao tác từ phía Server, tùy theo server chọn thao tác gì, chúng ta sẽ được thông báo và có quyền chấp nhận hoặc không chấp nhận hành động của server. Nếu chấp nhận chúng ta và server sẽ cùng thực thi chung một tính năng, có thể là Talk, chat, hoặc share data. Và khi đó tính năng sẽ kết thúc khi nào có một trong hai bên yêu cầu chấm dứt thao tác.
Hình 60: Lưu đồ chi tiết module “chat”
Module “Chat”
Sau khi đã kết nối thành công giữa server và client, việc tiếp theo là server sẽ chọn thao tác muốn thực hiện với client. Module chat này sẽ cho phép server và client chat văn bản với nhau, ở dạng văn bản ngắn. Khi khởi chạy hàm chat tùy theo đối tượng tham số truyền vào mà hàm sẽ thực hiện những tính năng khác nhau.
Hàm chat có cấu trúc như sau: chat (client, server ), với client và server là socket của server hoặc của client. Khi server gọi hàm chat khi đó truyền tham số hàm này như sau: chat( None, server) và socket của server sẽ được hoạt động trong hàm chat này.
Khởi chạy xong hàm chat, lúc này bên server sẽ được hiển thị một hộp thoại nhập vào văn bản, sau khi nhập xong một chuỗi nếu chuỗi này khác chuỗi rỗng thì hàm sẽ gọi hàm send() để gửi tin nhắn này cho client. Tiếp theo đó, nó sẽ đợi nhận trả lời từ phía client bằng hàm recv().
Khi dữ liệu nhận được là một chuỗi “@yes”, lúc này có nghĩa là client đã nghỉ thực hiện chat với server, đến đây hàm chat sẽ ngưng thực hiện stop chat(). Ngược lại nếu dữ liệu nhận được là một chuỗi khác “@yes” thì hàm chat sẽ hiển thị thông điệp trả lời của client bằng present message(). Sau khi hiển thị xong, server sẽ thực hiện tiếp trả lời thông điệp vừa rồi bằng hàm input message ().
Tại đây, khi server không muốn tiếp tục chat nữa, lúc đó server sẽ chọn cancel trên hộp thoại nhập văn bản, khi đó hàm chat sẽ gửi một thông điệp kết thúc chat cho client. Hàm chat kết thúc tại đây.
Nếu đối tượng gọi hàm chat là socket của client, truyền tham số hàm như sau: chat( client, None), hàm chat sẽ thực hiện khác một chút.
Việc đầu tiên nó làm là sẽ chạy hàm recv message() để nhận thông điệp từ server. Khi nhận được một thông điệp là một chuỗi khác “@yes” nó sẽ hiển thị thông điệp này lên bằng hàm present message(), hiển thị xong, nó sẽ cho phép client nhập thông điệp trả lời, khi thông điệp này khác rỗng, thông điệp sẽ được gửi đi bằng send message (), đồng thời sẽ hiển thị một thông báo yêu cầu đợi thông tin phản hồi từ server và hàm chat tiếp tục quay về đợi nhận kết quả bằng hàm recv message().
Khi client muốn dừng chat với server, khi đó client sẽ chọn cancel trên hộp thoại nhập văn bản, việc này đồng nghĩa với việc hàm chat sẽ gửi một thông điệp thông báo dừng chat cho server. Thực hiện xong, hàm chat gọi hàm waiting action() để đợi tiếp thao tác khác từ server hoặc là thoát chương trình. Hàm chat kết thúc tại đây.
Lưu ý: các hàm trong lưu đồ trên chỉ mang tính chất minh họa. Sẽ khác so với phần code.
MÔ TẢ ỨNG DỤNG
Ở phần này chúng tôi sẽ minh họa các tính năng cũng như cung cấp hình ảnh giao diện của ứng dụng.
Chúng tôi sẽ minh họa các thao tác tương ứng theo dạng Server – Client.
Khi Server khởi tạo xong kết nối, tin nhắn yêu cầu kết nối được gửi cho client, khi đó client mới chạy ứng dụng và kết nối đến địa chỉ IP trong tin nhắn nhận được.
Thiết bị mô phỏng:
Server : N95 8 GB (S60 3rd, Symbian OS v9.2).
Client : N81 2 GB (S60 3rd Symbian OS v9.2).
Hình ảnh Server
Hình ảnh Client
Giao diện chương trình
Nhận được tin nhắn kết nối
Server khởi tạo kết nối
Giao diện chạy chương trình
Chọn Access Point
Chọn hàm kết nối
Kết nối với AP thành công
Tìm được IP trong tin nhắn
Tìm người muốn kết nối
Chọn AP kết nối
Hiển thị tên trong danh sách
Kết nối thành công với AP, chọn đợi thao tác hoặc thoát
Tìm số điện thoại
Chuẩn bị sẵn sàng đợi thao tác từ bên server
Gửi IP thành công
Server yêu cầu được chat
Đợi Client kết nối
Chấp nhận chat và nhận được thông điệp đầu tiên từ Server
Client đã kết nối đến
Nhập thông điệp trả lời
Client đã sẵn sàng đợi thao tác, chọn thử tính năng chat.
Thông điệp đã gửi đang đợi Server trả lời
Thông báo Client đồng ý chat
Nhận tiếp thông điệp từ Server
Nhập thông điệp và gửi đi
Không muốn trả lời và kết thúc chat bằng cách chọn cancel trên hộp thoại nhập
Gửi thành công đợi nhận trả lời
Đưa về trạng thái đợi thao tác khác từ server hoặc thoát
Client đã trả lời lại
Tiếp tục nhập nội dung chat
Client đã ngưng chat
Đợi Client tiếp tục thao tác khác
Client đã thoát chương trình kết nối được đóng lại
KẾT QUẢ ĐẠT ĐƯỢC
Sau khi tổng kết lại quá trình thực hiện xây dựng và kiểm thử ứng dụng Wifi Connector, dưới đây là những kết quả mà chúng tôi đã đạt được:
Về mặt lý thuyết.
Nghiên cứu kiến thức về kiến trúc và phương thức hoạt động của mạng wifi.
Nguyên tắc và phương pháp định danh một điện thoại trong mạng wifi.
Kỹ thuật lập trình mạng trên thiết bị di động sử dụng TCP/IP.
Về ứng dụng
Hoàn thành ứng dụng Wifi Connector v1.0 dưới dạng tập tin cài đặt hoàn chỉnh.
Cung cấp các tính năng giao tiếp cơ bản giữa hai điện thoại S60 thông qua mạng wifi :
Chat
Talk
Share data
Đã triển khai và kiểm thử ứng dụng trên nhiều thiết bị thật khác nhau, nhiều môi trường hoạt đông khác nhau.
HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI
Mỗi ứng dụng viết ra dù lớn hay nhỏ, dù đơn giản hay phức tạp cũng không thể tránh khỏi những sai sót nhất định. Và ứng dụng của chúng tôi cũng thế, có thể Wifi Connector v1.0 còn nhiều sai sót, còn nhiều tính năng tiện ích khác mà với kiến thức hạn hẹp của mình, chúng tôi chưa thể bổ sung vào ứng dụng được.
Nhưng trong thời gian tới, chúng tôi sẽ tập trung nghiên cứu nhiều hơn và phát triển ứng dụng này nhiều hơn, thay đổi nhiều hơn để một ngày nào đó Wifi Connector ở những phiên bản tiếp theo sẽ có thể trở thành một công cụ đắc lực cho việc giao tiếp nội bộ thông qua mạng WLAN, nhằm làm giảm đi một phần chi phí liên lạc giữa các thành viên trong công ty, cơ quan, trường học, …
Cụ thể, chúng tôi sẽ tập trung nâng cấp và phát triển những tính năng sau đây ở những phiên bản tiếp theo.
Tăng hiệu quả trong việc định danh và kết nối bằng cách gán IP tĩnh, từ đó xây dựng một Contact List (danh sách liên lạc) riêng biệt so với danh bạ của điện thoại.
Nâng cao chất lượng đàm thoại âm thanh.
Phát triển tính năng đàm thoại video.
Nâng cao tính năng chat với nhiều thành phần hấp dẫn hơn, như avatar, icon cảm xúc,…
Cải thiện giao diện phần mềm, gần gũi và thân thiện hơn.
Nghiên cứu phát triển ứng dụng có thể hoạt động ở nhiều nền tảng khác nhau, không chỉ riêng cho Symbian S60.
Với những tính năng sẽ được nâng cấp và phát triển, nhóm nghiên cứu chúng tôi hi vọng trong một thời gian không xa, ứng dụng Wifi Connector sẽ trở nên phổ biến hơn trong những người dùng dòng điện thoại Symbian S60 nói riêng và dòng điện thoại thông minh nói chung.
TÀI LIỆU THAM KHẢO
[1] Jürgen Scheible , Ville Tuulos, Mobile Python (Rapid Prototyping of Applications on the Mobile Platform ), John Wiley & Sons Ltd, 2007.
[2] Pankaj Nathani , Bogdan Galiceanu, Python On Symbian (Mobile app development made easy), Nokia and Symbian Foundation, 2010.
[3] Nokia Corporation, S60 Module Reference Release 2.0.0 Final, Nokia Corporation, 09 Feb 2010.
[4] Frank H.P. Fitzek, Frank Reichert, Mobile Phone Programming and its Application to Wireless Networking, Springer, 2007.
[5] Adi Rome, Mark Wilcox, Multimedia on Symbian OS Inside the Convergence Device, John Wiley & Sons Ltd, 2008.
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]
Các file đính kèm theo tài liệu này:
- Lập trình trên thiết bị di động – Mobile Phone Programming.docx