FM radio được phát triển trên hệ điều hành android, do đó các thành phần và kiến trúc phân tầng cũng dựa trên hệ điều hành này. Android là tổ hợp các phần mềm cho thiết bị di động bao gồm hệ điều hành, middleware và các ứng dụng cơ bản. Android SDK (Software Development Kit) cung cấp các công cụ và các giao diện lập trình cần thiết (API) cho việc phát triển ứng dụng trên nền tảng Android sử dụng ngôn ngữ Java.
Các tính năng
Application framework: Cho phép tái sử dụng và thay thế các thành phần
của hệ thống.
Dalvik virtual machine: Tối ưu cho các thiết bị mobile.
Integrated browser: Dựa trên phần mềm mã nguồn mở WebKit.
Optimized graphics: Cung cấp các thư viện đồ họa 2D có thể tùy chỉnh hình ảnh linh hoạt, đồ họa 3G dựa trên OpenGL ES 2.0 (phụ thuộc phần cứng hệ thống).
SQLite: Cơ sở dữ liệu.
Media support: Hỗ trợ các định dạng âm thanh, hình ảnh và video
(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
GSM Telephony: phụ thuộc phần cứng hệ thống.
Bluetooth, EDGE, 3G, WiFi: Phụ thuộc phần cứng hệ thống.
Camera, GPS, la bàn, cảm biến gia tốc: Phụ thuộc phần cứng hệ
thống.
HVTH: NGUYỄN TIẾN THIỆN 24
Môi trường phát triển đa dạng: Bao gồm thiết bị mô phỏng, công cụ gỡ
lỗi, giám sát bộ nhớ, đánh giá hiệu năng, gói phần mềm hộ trợ Eclipse IDE. Hệ thống FM radio được xây dựng trên nền tảng android nên kiến trúc phân tầng sẽ dựa trên kiến trúc của hệ điều hành Android.
Hình 2.1 Kiến trúc của hệ thống FM trong nền tảng hdh Android[6] 2.2.2 Cấu trúc và chức năng của các tầng
Từ sơ đồ khối ta có thể thấy rõ vị trí và mối liên kết của các tầng. Cũng như kiến trúc cơ bản của hệ điều hành android sơ đồ khối của hệ thống RDS sẽ có cấu trúc và các thành phần như trong Hình 2.1.
Lớp ứng dụng (Application)
Ứng dụng FM RDS App được xây dựng trên nền tảng hệ điều hành Android 5.0.1. Ứng dụng được phát triển bằng ngôn ngữ lập trình Java. Nhiệm vụ trên tầng Application là xử lý về giao diện và tương tác với người dùng.
Các chức năng chính của ứng dụng:
HVTH: NGUYỄN TIẾN THIỆN 25
LỚP KTVT-2014B
LUẬN VĂN TỐT NGHIỆP ĐHBKHN
Thu sóng FM dải tần 86 – 110 MHz
Lấy và hiển thị thông tin RDS : PS , RT
Lưu danh sách các kênh yêu thích
Tùy chọn được các kênh theo mong muốn và dò đến kênh có chất lượng tốt tiếp theo.
Lớp nền ứng dụng (Application FW)
Tầng nền ứng dụng tạo ra các phương thức giao tiếp với tầng Middleware. Thông qua các đối tượng được tạo ra từ tầng này, tầng Application có thể dễ dàng kết nối với các tầng ở dưới.
Hình 2.2 Giao tiếp giữa tầng App với tầng dưới.
Từ Hình 2.2 ta có thế thấy các chỉ thị lệnh từ trên tầng Application (Java) sẽ được truyền xuống native code thông qua JNI. Các dữ liệu từ tầng dưới được gửi lên tầng trên thông qua phương thức data callback. Tầng này có nhiệm vụ làm cầu nỗi giữa tầng Application với các service của FM. JNI sẽ được trình bày chi tiết ở Chương 4.
HVTH: NGUYỄN TIẾN THIỆN 26
LỚP KTVT-2014B
Lớp trung gian của FM ( FM Middleware )
Hình 2.3. Các khối của tầng MiddleWare
Đối tượng IFMRDS được tạo ra để nhận các command lệnh từ trên tầng App rồi send xuống tấng dưới (Tầng HAL : Hardware Abstract layer ) như command yêu cầu turn On/Off app, yêu cầu tìm kiếm kênh, yêu cầu thông tin hiển thị của RDS. Một đối tượng khác được tạo ra để luôn lắng nghe và nhận dữ liệu callback từ tầng dưới là IMRDSEvenlistenner. Các mã lệnh và dữ liệu truyền nhận được thực hiện qua cơ chế của Binder IPC.
HVTH: NGUYỄN TIẾN THIỆN 27
LỚP KTVT-2014B
LUẬN VĂN TỐT NGHIỆP ĐHBKHN
Tầng HAL và Kernel
Hình 2.4 Kiến trúc tổng quát của tầng HAL.
Các lệnh từ trên tầng ứng dụng (Application ) sẽ được truyền truyền xuống tầng HAL thông qua các interface (giao diện điều khiển) của Java APIs. Các interface này cho phép tầng App có thể giao tiếp được với V4L2 thông qua tầng JNI.
FM driver được phát triển bằng cách sử dụng kiến trúc FM V4L2. Kiến trúc này hỗ trợ các phương thức: tune, seek, mute …
Giao diện V4L2 được cài đặt cho FM driver dựa trên kiến trúc của Qualcom chip set. Vì vậy nó được mở rộng để hỗ trợ các tính năng mà phiên bản hiện tại của V4L2 không hỗ trợ như: initialization and power up.
Các FM Host đã cung cấp FM java api giúp ta có thể dễ dàng điều khiển FM driver.
Những interface này cho phép tầng Application giao tiếp với FM driver thông qua lớp JNI. Lớp JIN sẽ chuyển đổi java apis để gọi thư viện native C. Thư viện C
HVTH: NGUYỄN TIẾN THIỆN 28
LỚP KTVT-2014B
này sẽ giao tiếp lần lượt với các interface của FM driver. (Read, write via ioctl function).
2.2.3 Cấu trúc của module RDS trong hệ thống.
Module RDS có các thành phần nằm dải ở hết các tầng. Chúng có các nhiệm vụ và chức năng riêng trong toàn bộ sơ đồ khối.
Hình 2.5 Sơ đồ kiến trúc tổng quan của module RDS .
Tầng UI: Tầng này có nhiệm vụ xây dựng các thành phần giao diện tương tác với người dùng. Ngôn ngữ lập trình được sử dụng là java.
Tầng Middleware: Tầng này bao gồm các native code, các service chạy ngầm để lắng nghe sự kiện từ tầng kernel gửi lên và các interface giúp điều khiển Fmdriver.
HVTH: NGUYỄN TIẾN THIỆN 29
LỚP KTVT-2014B
LUẬN VĂN TỐT NGHIỆP ĐHBKHN
Khi có một request lấy thông tin hiển thị RDS từ trên UI. Các mã lệnh này sẽ được truyền xuống tầng native thông qua phương thức JNI. Và tiếp tục được truyền xuống dưới kernel thông qua các câu lệnh của systemcall.
Dữ liệu đẩy từ tầng kernel qua bộ RDS parser và được chọn lọc hiển thị trên giao diện người dùng.
Tầng kernel: Bao gồm tầng HAL và driver của chip qualcomm. Khối giã mã RDS và thu phát FM được thực thi tại tầng này.
2.3 XÂY DỰNG SƠ ĐỒ HOẠT ĐỘNG CỦA RDS.
Ở 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