Ở mục trước tác giả đã nêu rõ sơ đồ khối tổng quát và mối liên hệ giữa các tầng. Ở phần này tác giả sẽ tiếp tục đi sâu vào sơ đồ hoạt động chi tiết của ứng dụng.
2.3.1 Xây dựng biểu đồ hoạt động
Quá trình Turn on/off RDS app.
Hình 2.6 Sơ đồ turn On/Off phần mềm
Mô tả quá trình hoạt động: Người dùng khởi động phần mềm bằng cách kết
nối anten (kết nối tai nghe) và bật nút nguồn trên giao diện phần mềm. Nếu có kết
HVTH: NGUYỄN TIẾN THIỆN 30
LỚP KTVT-2014B
nối anten thì phiên sử dụng sẽ bắt đầu và giao diện sẽ được cập nhật để dùng các tính năng khác như tìm kiếm kênh, lưu kênh yêu thích, chuyển kênh ....
Quá trình tìm kiếm kênh
Hình 2.7. Sơ đồ quá trình tìm kiếm kênh
Mô tả quá trình hoạt động tìm kiếm kênh: Khi phần mềm đã được bật, quá trình tìm kiếm kênh sẽ được khởi chạy và trả về các kênh có tín hiệu tốt. Các mã lệnh tìm kiếm kênh sẽ được truyền xuống tầng service (FMRadioServive.java). Thông qua tầng native service (FMPlayerNative.java) các mã lệnh này sẽ được gửi xuống FM driver và hàm tìm kiếm sẽ được gọi (FMRadioController::SearchAll () ). Khi các kênh có tín hiệu tốt được dò thấy thì các kết quả tìm kiếm sẽ được gửi lên tầng ứng dụng thông qua tầng service. Việc tìm kiếm này sẽ được thực hiện trên
HVTH: NGUYỄN TIẾN THIỆN 31
LỚP KTVT-2014B
LUẬN VĂN TỐT NGHIỆP ĐHBKHN
một thread (luồng) độc lập. Việc tìm kiếm chỉ dừng khi có lệnh hủy tìm kiếm từ người dùng hoặc việc tìm kiềm kết thúc. Kết quả trả về là danh sách các kênh có tín hiệu tốt nếu có.
Thiết lập quá trình tune và xử lý thông tin RDS trong hệ thống
Hình 2.8 Sơ đồ Tune của hệ thống
Mô tả quá trình hoạt động: Kết quả trả về từ bước tìm kiếm kênh sẽ là
một danh sách các kênh phát sóng FM. Kênh có tín hiệu tốt nhất sẽ được lựa chọn để phát cho người dùng. Khi người dùng lựa chọn một kênh để thu sóng từ trên giao diện chính, các mã lệnh sẽ được truyền từ tầng ứng dụng xuống tầng dưới để turning các thông số kênh truyền. Nếu các bản tin RDS được phát cùng với sóng FM tại kênh đó thông tin về PS (Programme service), RT (Radio text) sẽ được hiển thị trên giao diện phần mềm.
HVTH: NGUYỄN TIẾN THIỆN 32
LỚP KTVT-2014B
2.4 MÔ HÌNH HOẠT ĐỘNG 2.4.1 Xây dựng biểu đồ tuần tự
Biểu đồ Turn On phần mềm
Hình 2.9 Biểu đồ tự turn on phần mềm
Biểu đồ Turn Off
HVTH: NGUYỄN TIẾN THIỆN 33
LỚP KTVT-2014B
LUẬN VĂN TỐT NGHIỆP ĐHBKHN
Hình 2.10 Biểu đồ Turn off phần mềm
HVTH: NGUYỄN TIẾN THIỆN 34
LỚP KTVT-2014B
Sơ đồ tìm kiếm kênh
Hình 2.11 Sơ đồ tìm kiếm kênh
HVTH: NGUYỄN TIẾN THIỆN 35
LỚP KTVT-2014B
LUẬN VĂN TỐT NGHIỆP ĐHBKHN
Sơ đồ dò kênh
Hình 2.12 Sơ đồ dò kênh
HVTH: NGUYỄN TIẾN THIỆN 36
LỚP KTVT-2014B
2.4.2 Xây dựng biểu đồ máy trạng thái
Hình 2.13 Sơ đồ máy trạng thái [6]
2.5 KẾT LUẬN CHƯƠNG
Từ việc nghiên cứu và xây dựng vị trí, mối quan hệ, chức năng của module RDS trong toàn hệ thống ta có thể thấy hệ thống RDS có thể sử dụng rất nhiều ứng dụng, chức năng vào các các mặt của khoa học kỹ thuật và đời sống. Từ cơ sở kiến thức trên chúng ta sẽ tiếp tục đi vào phần thiết kế chi tiết và triển khai thực tế ứng dụng RDS trong phát thanh sóng FM.
HVTH: NGUYỄN TIẾN THIỆN 37
LỚP KTVT-2014B
LUẬN VĂN TỐT NGHIỆP ĐHBKHN
CHƯƠNG 3: TRIỂN KHAI HỆ THỐNG THU RDS THỰC TẾ VÀ ĐÁNH GIÁ KẾT QUẢ
3.1 GIỚI THIỆU CHƯƠNG
Chương này sẽ được trình bày về các cơ sở để phát triển ứng dụng bao gồm các công cụ và ngôn ngữ lập trình. Đưa ra các mô hình thiết kế chi tiết của ứng dụng và thuật toán được triển khai trong khôn khổ luận văn của.
Các nội dung chi tiết như sau:
Nền tảng hệ điều hành và ngôn ngữ lập trình Sơ đồ chức năng tương tác của phần mềm Mô hình giao tiếp giữa các tầng
Phương thức và cơ chế truyền nhận bản tin hiển thị RDS Lưu đồ giải thuật lấy thông tin RDS
3.2 LỰA CHỌN PHẦN MỀM VÀ NGÔN NGỮ LẬP TRÌNH 3.2.1 Nền tảng hệ điều hành Android
Android được phát triển bởi tập đoàn Google, phiên bản đầu tiên ra mắt năm 2008. Được xây dựng trên một nền tảng mở và một bộ thư viện đa năng, mạnh mẽ với nguyên lý mở. Android đã nhanh chóng được cộng đồng lập trình viên hưởng ứng mạnh mẽ. Nền tảng android có nhiều tính năng nổi bật:
Android là một hệ điều hành nhân Linux, đảm bảo sự tương tác phần cứng, bộ nhớ, điều khiển các tiến trình tối ưu cho các thiết bị di động.
Bộ ứng dụng khung cho phép sử dụng lại và thay thế các thành phần riêng
lẻ.
Máy ảo Dalvik được tối ưu cho các thiết bị di động và chạy các ứng dụng lập trình java.
Các thư viện phát triển ứng dụng mã nguồn mở như SQLite, Webkit ,OpenGL và trình quản lý đa phương tiện.
Hỗ trợ các chuẩn đa phương tiện phổ biến trên nền GSM, Bluetooth, 3G và
wifi.
HVTH: NGUYỄN TIẾN THIỆN 38
LUẬN VĂN TỐT NGHIỆP ĐHBKHN
Hỗ trợ camera, GPS, ....
Bộ phát triển ứng dụng SDK đầy đủ gồm thiết bị giả lập, công cụ sửa lỗi, tích hợp với các IDE: eclipse, Android studio ...
Android cung cấp một tập hợp đầy đủ các phần mềm cho các thiết bị di động bao gồm hệ điều hành, khung ứng dụng, các ứng dụng cơ bản và đặc biệt là máy ảo Dalvik. Dalvik là máy ảo giúp các ứng dụng java chạy được trên các thiết bị động Android. Nó chạy các ứng dụng đã được chuyển đổi thành một file thực thi Dalvik (dex). Định dạng phù hợp cho các hệ thống mà thường bị hạn chế về bộ nhớ và tốc độ xử lý. Dalvik đã được thiết kế và viết bởi Dan Bornstein, người đã đặt tên cho nó sau khi đến thăm một ngôi làng đánh cá nhỏ có tên là Dalvik ở đảo Eyjafijour, nơi mà một số tổ tiên của ông sinh sống. Từ góc nhìn của một nhà phát triển, Dalvik trông giống như máy ảo Java (Java Virtual Machine) nhưng thực tế thì hoàn toàn khác. Khi nhà phát triển viết một ứng dụng dành cho Android, anh ta thực hiện các đoạn mã trong môi trường Java. Sau đó, nó sẽ được biên dịch sang các bytecode của Java, tuy nhiên để thực thi được ứng dụng này trên Android thì nhà phát triển phải thực thi một công cụ có tên là dex. Đây là công cụ dùng để chuyển đổi bytecode sang một dạng gọi là dex bytecode. "Dex" là từ viết tắt của "Dalvik executable" đóng vai trò như cơ chế ảo thực thi các ứng dụng Android. Dưới đây là kiến trúc phân tầng của hệ điều hành Android:
Android bao gồm 4 thành phần:
Hệ điều hành
Android dựa trên Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi như bảo mật(security), quản lý bộ nhớ(memory management), quản lý tiến trình (process management), Ngăn nhớ mạng (network stack), và mô hình điều khiển (driver model). Nhân Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng và phần còn lại của phần mềm stack. Trong android tầng hệ điều hành (Kernel) sẽ có nhiệm vụ giao tiếp với phần cứng và nhận nhiệm vụ điều khiển xử lý thông tin từ các tầng trên. Các driver quan trọng của android trên tầng này như: Camera deiver, wifi driver, Audio driver, IPC driver , Power management…
HVTH: NGUYỄN TIẾN THIỆN 39
LỚP KTVT-2014B
Hình 3.1 Kiến trúc của hệ điều hành Android
Thư viện và các giao diện lập trình ứng dụng
Android bao gồm một tập hợp các thư viện C/C++ được sử dụng bởi nhiều thành phần khác nhau trong hệ thống Android. Điều này được thể hiện thông qua nền tảng ứng dụng Android. Một số các thư viện cơ bản được liệt kê dưới đây:
System C library: Bộ thư viện C (libc) chuẩn cung cấp các phương thức
điều khiển cho các thiết bị nhúng linux.
Media Libraries – Bộ mã nguồn mở hỗ trợ việc phát và ghi âm với
nhiều định dạng như MPEG4, H.264, MP3, AAC, AMR, JPG, và PNG.
Surface Manager – Quản lý việc truy xuất vào hệ thống hiển thị
LibWebCore – Thư viện cho việc phát triển wen trên di động hoặc
thiết bị nhúng.
SGL – Thư viện đồ họa 2D.
3D libraries - Bộ thư viện dựa trên OpenGL ES 1.0 hỗ trợ về đồ họa
3D.
HVTH: NGUYỄN TIẾN THIỆN 40
FreeType – xử lý ảnh mức thấp như bitmap.
SQLite – Bộ cơ sở dự liệu dùng cho các ứng dụng di động.
Android Runtime
Android bao gồm một tập hợp các thư viện cơ bản mà cung cấp hầu hết các chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java. Tất cả các ứng dụng Android đều chạy trong tiến trình riêng. Máy ảo Dalvik đã được viết để cho một thiết bị có thể chạy nhiều máy ảo hiệu quả. Các VM Dalvik thực thi các tập tin thực thi Dalvik (dex). Định dạng được tối ưu hóa cho bộ nhớ tối thiểu. VM là dựa trên register-based, và chạy các lớp đã được biên dịch bởi một trình biên dịch Java để chuyển đổi thành các định dạng dex. Các VM Dalvik dựa vào nhân Linux cho các chức năng cơ bản như luồng và quản lý bộ nhớ thấp
Khung ứng dụng
Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấp cho các nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo. Nhà phát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập, các dịch vụ chạy nền, thiết lập hệ thống báo động, thêm các thông báo để các thanh trạng thái. Nhà phát triển có thể truy cập vào các API cùng một khuôn khổ được sử dụng bởi các ứng dụng lõi. Các kiến trúc ứng dụng được thiết kế để đơn giản hóa việc sử dụng lại các thành phần. Cơ chế này cho phép các thành phần tương tự sẽ được thay thế bởi người sử dụng.
Cơ bản tất cả các ứng dụng là một bộ các dịch vụ và các hệ thống, bao gồm:
Một tập hợp rất nhiều các View có khả năng kế thừa lẫn nhau dùng để thiết kế phần giao diện ứng dụng như: gridview, tableview, linearlayout,…
Một “Notifycation Manager” cho phép tất cả các ứng dụng hiển thị các custom alerts trong status bar.
Một “Content Provider” cho phép các ứng dụng có thể truy xuất dữ liệu từ các ứng dụng khác (chẳng hạn như Contacts) hoặc là chia sẻ dữ liệu giữa các ứng dụng đó.
HVTH: NGUYỄN TIẾN THIỆN 41
LỚP KTVT-2014B
LUẬN VĂN TỐT NGHIỆP ĐHBKHN
Một “Resource Manager” cung cấp truy xuất tới các tài nguyên không phải là mã nguồn, chẳng hạn như: localized strings, graphics, and layout files.
Activity Maanager được dùng để quản lý chu trình sống của ứng dụng và điều hướng các activity.
Ứng dụng
Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như: contacts, browser, camera, Phone,… Tất cả các ứng dụng chạy trên hệ điều hành Android đều được viết bằng Java.
Một tính năng nổi bật nữa phải nói đến là bộ thư viện Android SKD google cung cấp cho các lập trình viên được trang bị đầy đủ hầu hết các tính năng của một thiết bị thật để phát triển các ứng dụng của mình trên nền android. Tuy nhiên, một số đã bị giới hạn như là kết nối qua cổng USB, camera và video, nghe phone, nguồn điện giả lập và bluetooth... Android SDK và Plugin Eclipse được gọi là một Android Deverloper Tool (ADT).
3.2.2 Ngôn ngữ lập trình .
Do ứng được phát triển trên cả tầng application và tầng native nên ngôn ngữ lập trình được sử dụng là java và C++. Dưới đây là các ngôn ngữ lập trình được sử dụng để phát triển ứng dụng.
AIDL (Android Interface Define Language)
Các ứng dụng trên tầng Application được phát triển bằng Java. Khi hai tiến trình chạy trên các luồng khác nhau thì sẽ không thể truy cập lẫn nhau được.
Nếu muốn truy cập chéo nhau thì ta phải dùng ADIL. Cơ chế của ADIL là cho phép các tiến trình có thể giao tiếp với nhau thông qua các proxy. Các proxy hoạt động dựa trên cơ chế của binder IPC. Các đối tượng ảo là Stub và Proxy được tạo ra để thực hiện các lời gọi hàm và truyền đối số.
HVTH: NGUYỄN TIẾN THIỆN 42
LỚP KTVT-2014B
Hình3.2 Cơ chế Proxy trong AIDL
Tồn tại một interface để có thể gọi đến các Caller và callee trong mỗi tiến trình. Proxy và stub là một lớp được tạo ra bên trong các interface cho phép các tiến trình có thể giao tiếp chéo nhau thông qua chúng.
Hình 3.3 ADIL trong ứng dụng RDS
JNI (Java native interface)
HVTH: NGUYỄN TIẾN THIỆN 43
LỚP KTVT-2014B
LUẬN VĂN TỐT NGHIỆP ĐHBKHN
JNI là một nền tảng của Java, là một interface trung gian cho phép kết nối ứng dụng Java với các ứng dụng hoặc thư viện viết bằng ngôn ngữ C/C++.
Hình 3.4 Cơ chế hoạt động của JNI
3.3 Kiến trúc hệ thống: