前言
组件是模块化构建块,可以插入任意数量的信号处理应用程序中以执行特定且可重用的功能。组件完全由其接口、属性和功能定义。示例包括调谐、滤波和抽取宽带信号的组件以及执行 FM 解调的组件。某些组件不可避免地需要自定义实现,但大多数信号处理功能可以重用和共享。
组件可以在波形内互连在一起以创建完整的信号处理应用程序,也可以在 REDHAWK sandbox 中独立运行以在本地主机上执行琐碎的任务。下图描绘了波形中各分量的组成。
通过使用 REDHAWK 框架,基本处理元素可以封装为组件并由其他 REDHAWK 兼容系统重用。使用 REDHAWK IDE 和附带的代码生成器,可以自动生成许多用于控制和输入/输出的代码。下图描述了将任意处理算法封装到自动生成的 REDHAWK 组件包装器中。
一、REDHAWK 核心资产
REDHAWK 打包了由入门/示例组件、设备、波形和共享库组成的核心资产。
1、REDHAWK 基本组件
REDHAWK 基本组件是入门/示例 REDHAWK 组件的集合。这些组件提供简单的 DSP 功能,同时演示 REDHAWK 的许多功能和用例。
下表包含 REDHAWK 基本组件的名称和描述。
2、REDHAWK 基本设备
REDHAWK 基本设备是入门/示例 REDHAWK 设备的集合。下表包含 REDHAWK 基本设备的名称和描述。
3、REDHAWK 基本波形
REDHAWK 基本波形是入门/示例 REDHAWK 波形的集合。下表包含 REDHAWK 基本波形的名称和描述。
4、REDHAWK 共享库
REDHAWK 共享库是入门/示例共享库的集合。
下表包含通用 REDHAWK 共享库的名称和描述。
5、REDHAWK 设备依赖性
下表描述了 REDHAWK 设备使用的外部共享库。这些库是用 REDHAWK 打包和分发的,但不由 REDHAWK 管理。
二、创建组件项目
下面概述了组件的结构。
1、组件向导
在 REDHAWK IDE 中,REDHAWK 环境中新组件、设备或其他工件的开发包含在 Eclipse 项目中。每个特定于 REDHAWK 的工件都与一个向导相关联,该向导引导开发人员完成创建项目所需的步骤,该项目支持正常运行所需的最少部分。对于组件,默认项目设置允许开发人员选择 Python、C++ 和 Java 作为开发语言。要启动 IDE 并开始创建组件,请运行 eclipseIDE 安装目录中的二进制文件。然后,选择“文件”>“新建”>“REDHAWK 组件项目”。
2、组件描述符
REDHAWK 组件通过三个 XML 文件进行描述:软件包描述符 (SPD) 文件 ( .spd.xml)、属性文件 (PRF) 文件 ( .prf.xml) 和软件组件描述符 (SCD) 文件 ( .scd.xml)。SPD 的作用是描述与组件关联的所有文件:PRF 和 SCD 文件、所有二进制文件以及关联的数据文件。PRF 文件包含该组件支持的所有属性的描述。SCD 文件包含组件输入/输出的描述。
REDHAWK IDE 使用内部模型来维护组件设计的状态。该模型是上述三个 XML 文件以及项目特定信息(如开发语言)的 Java 表示。组件开发透视图的主屏幕包含多个选项卡。其中一些选项卡用于面板,一些选项卡用于 XML 文件。可用于组件设计的不同面板用于更改此模型;该模型会自动连续映射到三个 XML 文件。这种意识是对称的;就像面板中的更改会导致 XML 文件中的更改一样,XML 文件中的更改也会导致面板的自动更新。
3、端口
数据流入和流出组件是通过使用端口来完成的。端口被描述为提供(输入)或使用(输出)端口。这种命名约定通常被认为是违反直觉的,因此需要进行解释。端口是组件的 RPC 接口。因此,输入端口提供可由输出端口使用的功能。
REDHAWK 包含各种促进互操作性的标准化接口。这些接口是通过端口来实现的。当在 REDHAWK IDE 的组件生成向导中选择端口时,会自动生成实现这些接口的代码。
4、属性
属性提供了一种调整组件配置或设置的方法,同时还允许外部实体(例如程序、UI 或状态脚本)检查组件的状态。属性是组件配置的主要手段。
有四种类型的属性:simple、simple sequence、struct 和 struct sequence。属性 simple 具有特定基元类型的单个值(例如,short 或 float)。一个 simple sequence 是相同原始类型的值的数组。一个 struct 属性是包含一组命名和/或属性 struct 的结构。一个 struct sequence 是一组相同 struct 类型实例的数组。
属性还有一种表示使用该属性的角色的类型。种类可以是 property、allocation、 或 message。该 property 类型用于配置和状态。该 allocation 类型用于表达对设备提供的能力的要求。该 message 类型仅与属性一起使用 struct 以在 REDHAWK 内发送事件消息。
5、记录
组件,无论使用哪种语言来实现,都包含对记录器的访问。C++、Python 和 Java 中的日志记录使用log4j由 Apache Software Foundation 维护的强大日志框架。
6、为组件生成代码
创建组件项目并在 SPD 编辑器中输入组件的适当详细信息后,IDE 可以为该项目生成框架代码。要开始代码生成过程,请单击 SPD 编辑器概述面板右上角的 “生成所有实现”按钮。
三、创建并运行 Hello World 组件
1、创建一个新的 REDHAWK component Project
,将其起名为 HelloWorld
,并点击 Generate All Component Implementations
2、在该 HelloWorld.cpp 文件中,将以下包含添加到文件的开头:
#include <iostream>
3、在该 HelloWorld.cpp 文件中,将以下代码添加到方法中 serviceFunction():
std::cout<<"Hello world"<<std::endl;
4、编译项目
Project -> Build Project
5、打开一个终端,启动 Python 会话,并执行下面的命令:
from ossie.utils import sb hello_world = sb.launch("HelloWorld") sb.start()
可以看到,Python 会话一直在打印 “Hello World”,按 ctrl+D 退出