MÔ HÌNH HOẠT ĐỘNG

Một phần của tài liệu (LUẬN văn THẠC sĩ) ứng dụng công nghệ hệ thống dữ liệu vô tuyến RDS trong truyền dẫn dữ liệu số qua hệ thống phát thanh FM tương tự (Trang 33)

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

Sơđồ tìm kiếm kênh

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.

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 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ợ 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…

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.

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 đó.

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ố.

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 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:

3.3.1 Sơ đồ tổng quan toàn hệ thống.

Từ góc nhìn tổng quan ta có thể thấy rõ các khối trong hệ thống, vị trí và mối liên hệ giữa chúng.

Các thông tin RDS được mã hóa và điều chế cùng với sóng FM trước khi truyền đi. Sở dĩ bản tin RDS có thể truyền liên tục và đồng thời cùng các bản tin phát thanh mà không ảnh hưởng đến việc phát sóng là vì thông tin RDS được truyền trên một sóng mang phụ 57KHz, các tín hiệu khác stereo nằm ở dải tần cao hơn dải tần nghe được (tai người nghe được trong dải tần từ 20Hz đến 20KHz) và kết quả là nó không ảnh hưởng đến tín hiệu mono bình thường.

3.3.2 Sơ đồ chức năng tương tác của phần mềm

3.4 Thiết kế chi tiết:

3.4.1 Mô hình giao tiếp của các tầng trong hệ thống FM

Hình 3.7 Mô hình giao tiếp của các module trong hệ thống[8]

FM application and FM driver giao tiếp với nhau thông qua tầng Java APIs. FM host đã phát hành một FM java apis để có thể điểu khiển được driver của FM. Các interface này cho phép tầng ứng dụng có thể giao tiếp với tầng FM kernel thông qua JNI. Tầng JNI sẽ chuyển đổi Java api để có thể gọi được thư viện C.

Thư viện C này sẽ lần lượt giao tiếp với V4L2 driver thông qua các interface của V4L2 như hình bên dưới.

Hình 3.8 Kết nối giữa tầng FM application và FM driver.[8]

Việc triển khai FM host trên android không tận dụng bất kì mã nguồn nào của các hệ điều hành khác. Thay vào đó Fm driver sử dụng kiến trúc FM V4L2. Các interface hiện có của FM V4L2 được triển khai cho FM driver và chúng có nhiệm vụ mở rộng các tính năng không được hỗ trợ trên bản hiện tại ví dụ như: khởi tạo và nâng hiệu năng của hệ thống...

Hình 3.9 Kiến trúc của FM V4L2 [8]

Kiến trúc cụ thể của FM host controller interface (FM HCI ) sẽ được mô tả chi tiết ở Hình 3.10 bên dưới.

Hình 3.10 Kiến trúc của FM host. [8]

Việc triển khai FM HCI bao gồm thành phần chính là aCPU và cCPU. Trong aCPU (FM Host) sẽ có các khối chính như hình vẽ trên.

FM HCI (Host controller interface) giao tiếp với FM command/events thông qua WCN-SS.

FM host driver được tích hợp vào V4L2 kernel driver.

FM middleware cung cấp các APIs cho tầng app có thể sử dụng các tính năng cơ bản của FM.

Khối thứ hai trong kiến trúc FM host là cCPU (FM controller).

Radio contron sẽ giao tiếp với phần cứng của radio và điều khiển hoạt động của nó.

RDS Filtering proc: RDS sẽ xử lý và lọc ra những khối dữ liệu RDS và gửi chúng cho máy chủ. Đồng thời nó cũng thực thi các chức năng để lọc ra những dữ liệu không mong muốn dựa trên bộ lọc được cung cấp bởi máy chủ.

FM HCI sẽ cung cấp một giao thức để định nghĩa các tập lệnh khác nhau và các sự kiện thay đổi giữa các FM host và FM controller để cho phép các máy chủ có thể cấu hình và điều khiển hoạt động của FM controller.

Hai khối aCPU và cCPU trong FM giao tiếp với nhau thông qua một physical Bus như UART, USB, SPI, SMD (share memory) hoặc SD.

3.4.2 Lưu đồ giải thuật lấy thông tin RDS thông qua hệ thống FM

Hình 3.12 Lưu đồ thuật toán bản tin hiển thị RDS

3.4.3 Phương thức và cơ chế truyền nhận bản tin RDS giữa các tầng

Trước khi đi tìm hiểu về phương thức và cơ chế chuyền nhận thông tin hiển thị RDS, ta sẽ tìm hiểu chi tiết cấu trúc định dạng các bản tin RDS.

Đầu tiên là cấu trúc khung dữ liệu.

Thành phần lớn nhất gọi là một ‘Group‘. Kích thước của nó gồm 104 bit. Mỗi group chia ra thành 4 block với kích thước thành phần là 26 bit.

Định dạng bản tin gồm các trường cơ bản sau:

Hình 3.14 Định dạng bản tin [1]

Pi code: programme Identification code 16 bit

Group type code: 4 bit group type code cho mỗi group

Group 0A B: / Turning và switching AF, PS infomation

Hình 3.16 Cấu trúc trường PS [1]  Group 1A/B: Progamme item number

Froup 2A/B: Radio text

TP: Traffic programme identificatin code 1 bit TPY: Programme type Code 5 bit

Checkword – Offset N: 10 bits

Các bản tin RDS được tách ra từ sóng FM giải mã và gửi lên tầng trên theo cơ chế handler data Call

Hình 3.18 Sơ đồ cơ chế truyền nhận bản tin RDS

Hình 3.19 Luồng gửi nhận bản tin RDS ở tầng kernel

Phươg thức handle_rt_event() được chạy trên một thread độc lập có nhiệm vụ cập nhật liên tục bản bản tin radio text. Dữ liệu rt nhận được sẽ được lưu vào trong bộ đệm raw_rds [ST_BUF_SIZE]. Dữ liệu rds thu được thông qua hàm RDSDataReceived() gửi lên tầng trên.

Hình 3.20 Luồng gửi nhận bản tin RDS tại tầng native Framework

Dữ liệu rds được gửi lên tầng application thông qua JNI.

Method CallbaclToJava () sẽ nhận dữ liệu đươc truyền hàm RDSReceive (). Tầng native app sẽ nhận được dữ liệu thông qua cơ chế Notify event.

Từ trên tầng Application sẽ ghi đè hàm onRDSReceive () để có thể thể nhận được bản tin RDS

3.5 ĐÁNH GIÁ KẾT QUẢ 3.5.1 Kết quả thử nghiệm 3.5.1 Kết quả thử nghiệm

Cài đặt chương trình

Bước 1: Sao chép bộ cài của phần mềm RDS.apk vào bộ nhớ điện thoại

Hình 3.23 Các bước cài đặt phần mềm

Bước 2: Kích đúp vào gói và chọn “Install„

Bước 3: Hoàn thành và biểu tượng sẽ sinh ra ngoài màn hình

Các bản tin được giải mã từ hệ thống FM

Sử dụng adb command để kiểm tra các bản tin thông báo từ dưới kernel. Bước 1: chạy lênh “adb start-server“ để khởi động adb.

Bước 2: Sử dụng cmd: adb logcat –vtime | find “RDS“ và adb shell cat | proc | kmsg để kiểm tra các thông báo từ tầng kernel gửi lên

Demo phần mềm

Giao diện chính của phần mềm.

Một phần của tài liệu (LUẬN văn THẠC sĩ) ứng dụng công nghệ hệ thống dữ liệu vô tuyến RDS trong truyền dẫn dữ liệu số qua hệ thống phát thanh FM tương tự (Trang 33)

Tải bản đầy đủ (PDF)

(63 trang)