当前位置: 首页 > news >正文

【C++风云录】五款 C++ 库的探索与应用:物联网、嵌入式与数据处理

提升你的C++技能:五个关键库的使用与指南

前言

在今天的数字化世界里,C++ 作为一种强大且快速的编程语言,在各类复杂系统和应用的开发中扮演着重要角色。然而,单凭语言本身的能力,我们往往无法实现所有的功能需求,这时候就需要借助各种 C++ 库来进一步扩展语言的能力。本文将探讨和介绍五个 C++ 库:Mongoose OS、Arduino Core for ESP32、Boost C++ Libraries、Qt 和 POCO C++ Libraries,这些库在物联网、嵌入式开发、数据处理等众多领域都有广泛应用。

欢迎订阅专栏:C++风云录

文章目录

  • 提升你的C++技能:五个关键库的使用与指南
  • 前言
    • 1. Mongoose OS
      • 1.1 简介
        • 1.1.1 主要特性
        • 1.1.2 应用领域
      • 1.2 安装与配置
        • 1.2.1 安装要求
        • 1.2.2 安装步骤
      • 1.3 开发与使用
        • 1.3.1 API 概述
        • 1.3.2 示例代码
      • 1.4 认知社区和学习资源
    • 2. Arduino Core for ESP32
      • 2.1 简介
        • 2.1.1 主要特性
        • 2.1.2 应用领域
      • 2.2 安装与配置
        • 2.2.1 安装要求
        • 2.2.2 安装步骤
      • 2.3 开发与使用
        • 2.3.1 API 概述
        • 2.3.2 示例代码
      • 2.4 认知社区和学习资源
    • 3. Boost C++ Libraries
      • 3.1 简介
        • 3.1.1 主要特性
        • 3.1.2 应用领域
      • 3.2 安装与配置
        • 3.2.1 安装要求
        • 3.2.2 安装步骤
      • 3.3 开发与使用
        • 3.3.1 API 概述
        • 3.3.2 示例代码
      • 3.4 认知社区和学习资源
    • 4. Qt
      • 4.1 简介
        • 4.1.1 主要特性
        • 4.1.2 应用领域
      • 4.2 安装与配置
        • 4.2.1 安装要求
        • 4.2.2 安装步骤
      • 4.3 开发与使用
        • 4.3.1 API 概述
        • 4.3.2 示例代码
      • 4.4 认知社区和学习资源
    • 5. POCO C++ Libraries
      • 5.1 简介
        • 5.1.1 主要特性
        • 5.1.2 应用领域
      • 5.2 安装与配置
        • 5.2.1 安装要求
        • 5.2.2 安装步骤
      • 5.3 开发与使用
        • 5.3.1 API 概述
        • 5.3.2 示例代码
      • 5.4 认知社区和学习资源
  • 总结

1. Mongoose OS

Mongoose OS 是一个开源的物联网(IoT)操作系统。它旨在在微控制器上快速、安全地构建商业固件。Mongoose OS 支持C/C++和JavaScript,是专门为物联网和低功耗微控制器设计的。

1.1 简介

1.1.1 主要特性
  • 用C/C++或JavaScript进行编程
  • 支持ESP32, ESP8266, STM32, TI CC3200等多种微控制器
  • 云集成(AWS IoT, Google IoT Core, Azure IoT Hub等)
  • OTA(空中升级)
  • 网络安全(SSL/TLS)
1.1.2 应用领域

Mongoose OS 广泛应用于各种物联网应用,包括智能家居,农业自动化,工业互联网等。

1.2 安装与配置

1.2.1 安装要求
  • 带有网络连接的计算机
  • 用于安装 Mongoose OS 的微控制器
1.2.2 安装步骤
// 安装 Mongoose OS
mos install mongoose-os

1.3 开发与使用

1.3.1 API 概述

Mongoose OS 提供了丰富的API,包括 GPIO, SPI, I2C, ADC, PWM, WIFI, HTTP, MQTT 等。

1.3.2 示例代码

以下是一个使用 Mongoose OS 控制 LED 闪烁的简单示例:

#include "mgos.h"void loop(void) {// LED pin is specified in the mos.yml fileint led_pin = mgos_sys_config_get_board_led1_pin();if (led_pin < 0) {LOG(LL_ERROR, ("Invalid LED GPIO pin"));return;}// Set up GPIO pin for outputmgos_gpio_setup_output(led_pin, true);while (1) {// Toggle LEDmgos_gpio_toggle(led_pin);// Sleep for 1 secondmgos_msleep(1000);}
}enum mgos_app_init_result mgos_app_init(void) {mgos_set_timer(0, true, loop, NULL);return MGOS_APP_INIT_SUCCESS;
}

1.4 认知社区和学习资源

Mongoose OS 有一个活跃的开发者社区,你可以在官方论坛上提问并寻求帮助。此外,官方文档也是一个很好的学习资源。

2. Arduino Core for ESP32

Arduino Core for ESP32 是一个 Arduino 兼容的硬件 I/O 核心库,专门用于 ESP32 微控制器。ESP32 是一款具有 Wi-Fi 和蓝牙功能的低成本、低功耗的系统级芯片。

2.1 简介

2.1.1 主要特性
  • 完全支持 ESP32 微控制器
  • 兼容 Arduino 标准库
  • 支持 Wi-Fi 和蓝牙
  • 提供丰富的硬件驱动和中间件
2.1.2 应用领域

Arduino Core for ESP32 主要用于物联网和嵌入式的应用开发,例如智能家居、无线传感器网络和可穿戴设备等。

2.2 安装与配置

2.2.1 安装要求
  • 安装 Arduino IDE
  • ESP32 微控制器
2.2.2 安装步骤

在 Arduino IDE 的 “偏好设置” 中添加 ESP32 开发板的 URL,然后在 “开发板管理器” 中安装 ESP32。

2.3 开发与使用

2.3.1 API 概述

Arduino Core for ESP32 提供了丰富的 API,包括 GPIO, SPI, I2C, ADC 等。

2.3.2 示例代码

下面的示例代码展示了如何使用 Arduino Core for ESP32 控制 LED 灯的亮灭。

#define LED_BUILTIN 2void setup() {pinMode(LED_BUILTIN, OUTPUT); 
}void loop() {digitalWrite(LED_BUILTIN, HIGH); delay(1000);digitalWrite(LED_BUILTIN, LOW);delay(1000);
}

2.4 认知社区和学习资源

Arduino Core for ESP32 的 GitHub 仓库提供了丰富的文档和示例代码,你可以在这里查看。此外,ESP32 的官方论坛也是一个很好的学习和交流的平台。

3. Boost C++ Libraries

Boost C++ Libraries 是一套功能强大且高效的 C++ 库。这些库扩展了 C++ 的功能,包括线性代数,伪随机数生成,多线程,图像处理,正则表达式,单位测试等。

3.1 简介

3.1.1 主要特性
  • 涵盖多个领域的丰富库
  • 高性能并且用户友好
  • 大多数库可移植在多个平台和编译器上
3.1.2 应用领域

Boost C++ Libraries 广泛应用于大数据处理,游戏开发,机器学习,科学计算,图像处理等领域。

3.2 安装与配置

3.2.1 安装要求
  • 支持 C++ 的编译环境
  • 对应操作系统的 Boost 库安装包
3.2.2 安装步骤

简化起见,可通过包管理器进行安装。如在 Ubuntu 系统下,可以通过以下命令安装:

sudo apt-get install libboost-all-dev

3.3 开发与使用

3.3.1 API 概述

Boost 提供了丰富的 API 和库,如线性代数,多线程,图像处理,正则表达式,网络编程等。

3.3.2 示例代码

以下是使用 Boost 库中的 boost::filesystem 进行文件操作的简单示例:

#include <boost/filesystem.hpp>
#include <iostream>namespace fs = boost::filesystem;int main() {fs::path p("/home/user/test.txt"); if (fs::exists(p)) {std::cout << p << " found.\n";} else {std::cout << p << " not found.\n";}return 0;
}

3.4 认知社区和学习资源

Boost C++ Libraries 的官方网站提供了丰富的文档和教程。此外,StackOverflow上也有大量的问题和讨论,可以为你解决问题提供帮助。

4. Qt

Qt 是一款跨平台的 C++ 应用开发框架,广泛应用于桌面应用程序、嵌入式系统、移动设备等领域。Qt 提供了一套完整的开发工具,包括 GUI 编程、网络编程、数据库操作等。

4.1 简介

4.1.1 主要特性
  • 跨平台兼容性
  • 创新的 GUI 设计
  • 数据库操作
  • 多线程支持
  • 网络编程
4.1.2 应用领域

Qt 主要应用于桌面应用程序、移动应用程序和嵌入式系统的开发。

4.2 安装与配置

4.2.1 安装要求
  • 支持 C++ 的开发环境
  • Qt 安装包
4.2.2 安装步骤

可以直接从 Qt 的官方网站下载对应操作系统的安装包进行安装。

4.3 开发与使用

4.3.1 API 概述

Qt 提供了丰富的 API 和库,可以用于 GUI 编程、网络编程、数据库操作等。

4.3.2 示例代码

以下是一个使用 Qt 创建一个简单窗口的示例代码:

#include <QApplication>
#include <QLabel>int main(int argc, char *argv[])
{QApplication app(argc, argv);QLabel label("Hello, Qt!");label.show();return app.exec();
}

4.4 认知社区和学习资源

Qt 的官方论坛是一个很好的学习和交流的平台。此外,Qt 的官方文档也是一个很好的学习资源,提供了大量的教程和 API 说明。

5. POCO C++ Libraries

POCO C++ Libraries 是一个用于构建网络和基于互联网应用的 C++ 类库集合,它极具移植性,可以在许多平台上编译和运行。

5.1 简介

5.1.1 主要特性
  • 具有良好的数据抽象
  • 提供了一种简单的、一致的和直观的 API
  • 支持网络编程、文件系统操作、线程管理等
5.1.2 应用领域

POCO C++ Libraries 被广泛应用于构建服务器应用、网络协议、云服务、文件系统操作等领域。

5.2 安装与配置

5.2.1 安装要求
  • 支持 C++ 的编译环境
  • POCO C++ Libraries 安装包
5.2.2 安装步骤

可以直接从 POCO 的Github 仓库下载源代码,然后编译并安装。

5.3 开发与使用

5.3.1 API 概述

POCO 提供了丰富的 API 和库,包括网络编程、文件系统操作、线程管理等。

5.3.2 示例代码

以下是一个使用 POCO 库进行 HTTP 请求的简单示例:

#include <Poco/Net/HTTPClientSession.h>
#include <Poco/Net/HTTPRequest.h>
#include <Poco/Net/HTTPResponse.h>
#include <Poco/StreamCopier.h>
#include <iostream>int main()
{Poco::Net::HTTPClientSession session("www.example.com");Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, "/");session.sendRequest(request);Poco::Net::HTTPResponse response;std::istream& rs = session.receiveResponse(response);Poco::StreamCopier::copyStream(rs, std::cout);return 0;
}

5.4 认知社区和学习资源

POCO C++ Libraries 的官方网站提供了详细的文档和教程,是学习 POCO 的好资源。此外,POCO 的Github 仓库也有许多示例代码。

总结

无论你是在开发物联网设备,构建复杂的桌面应用,还是进行高性能的数据处理,本文介绍的这五个 C++ 库都将是你的有力工具。他们强大的功能,丰富的 API 和活跃的开发者社区,都能够帮助你更高效地开发出性能优良的应用。

相关文章:

【C++风云录】五款 C++ 库的探索与应用:物联网、嵌入式与数据处理

提升你的C技能&#xff1a;五个关键库的使用与指南 前言 在今天的数字化世界里&#xff0c;C 作为一种强大且快速的编程语言&#xff0c;在各类复杂系统和应用的开发中扮演着重要角色。然而&#xff0c;单凭语言本身的能力&#xff0c;我们往往无法实现所有的功能需求&#x…...

Qt_30道常见面试题及答案

1. 简述 Qt 是什么&#xff1f; 答&#xff1a;Qt 是一个跨平台的应用程序开发框架&#xff0c;它提供了一系列的工具和库&#xff0c;用于开发图形用户界面&#xff08;GUI&#xff09;应用程序。 2. Qt 有哪些主要模块&#xff1f; 答&#xff1a;Qt 的主要模块包括 Qt Co…...

【vue】v-model 双向数据绑定

:value&#xff1a;单向数据绑定v-model&#xff1a;双向数据绑定 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…...

C#创建磁性窗体的方法:创建特殊窗体

目录 一、磁性窗体 二、磁性窗体的实现方法 (1)无标题窗体的移动 (2)Left属性 (3)Top属性 二、设计一个磁性窗体的实例 &#xff08;1&#xff09;资源管理器Resources.Designer.cs设计 &#xff08;2&#xff09;公共类Frm_Play.cs &#xff08;3&#xff09;主窗体 …...

Gateway 基本配置指南:构建高效的网络接入网关

简介&#xff1a; Gateway 是一个常用的网络接入网关&#xff0c;它可以帮助组织实现安全、可靠和高性能的网络连接。本文将介绍 Gateway 的基本配置&#xff0c;帮助读者了解如何正确配置和部署一个高效的 Gateway 网关。 1.网络拓扑规划&#xff1a; 在配置 Gateway 前&#…...

自定义类型: 结构体 (详解)

本文索引 一. 结构体类型的声明1. 结构体的声明和初始化2. 结构体的特殊声明3. 结构体的自引用 二. 结构体内存对齐1. 对齐规则2. 为啥存在对齐?3. 修改默认对齐值 三. 结构体传参四. 结构体实现位段1. 什么是位段?2. 位段的内存分配3. 位段的应用4. 位段的注意事项 ​ 前言:…...

设计模式(23):访问者模式

定义 表示一个作用于某对象结构中的各元素的操作&#xff0c;它使我们可以在不改变元素的类的前提下定义作用与这些元素的新操作。 模式动机 对于存储在一个集合中的对象&#xff0c;他们可能具有不同的类型(即使有一个公共的接口)&#xff0c;对于该集合中的对象&#xff0…...

【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 拷贝构造函数 概念 拷贝构造函数的特性及用法 赋值运算符重载 运算符重载 赋值运算符重载 结语 前言 本篇主要内容&#xff1a;类的6个默认成员函数中的拷贝构造函数…...

掀起区块链开发狂潮!Scaffold-eth带你一键打造震撼DApp

文章目录 前言一、Scaffold-eth是什么&#xff1f;二、安装和配置1.准备工作2.安装3.配置开发环境 三、进阶使用1.放入自己的合约2.部署运行 总结 前言 前面的文章传送&#x1f6aa;&#xff1a;hardhat入门 与 hardhat进阶 在之前的文章中&#xff0c;我们已经探讨了使用Har…...

【Qt 学习笔记】Qt常用控件 | 按钮类控件Check Box的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件Check Box的使用及说明 文章编号&#xff1a;…...

android gradle 配置远程仓库

build.gradle buildscript { ext.kotlin_version "1.6.0" // 使用适合你项目的Kotlin版本 repositories { maven { url http://maven.aliyun.com/nexus/content/groups/public/ } maven { url http://maven.aliyun.com/nexus/content/repos…...

第十二章 OpenGL ES 基础-色温、色调、亮度、对比度、饱和度、高光

第十二章 OpenGL ES 基础-色温、色调、亮度、对比度、饱和度、高光 第一章 OpenGL ES 基础-屏幕、纹理、顶点坐标 第二章 OpenGL ES 基础-GLSL语法简单总结 第三章 OpenGL ES 基础-GLSL渲染纹理 第四章 OpenGL ES 基础-位移、缩放、旋转原理 第五章 OpenGL ES 基础-透视投影…...

力扣经典150题解析之二十八:盛最多水的容器

目录 力扣经典150题解析之二十八&#xff1a;盛最多水的容器1. 介绍2. 问题描述3. 示例4. 解题思路5. 算法实现6. 复杂度分析7. 测试与验证测试用例设计测试结果分析 8. 总结9. 参考文献感谢阅读 力扣经典150题解析之二十八&#xff1a;盛最多水的容器 1. 介绍 在这篇文章中&…...

Rockchip Android13 Vold(二):Framework层

目录 前言 1、接收VolumeInfo状态 2、通知VolumeInfo状态变化 3、创建StorageVolume...

Oracle数据库故障类别及日常运维规划策略

一、故障类别 1、语句故障 单个数据库操作失败&#xff08;select、insert、update或delete&#xff09;&#xff0c;如&#xff1a; 在表中输入无效的数据&#xff0c;解决方法&#xff1a;可与用户合作来验证并更正数据&#xff1b;执行操作&#xff0c;但权限不足&#x…...

电商技术揭秘九:搜索引擎中的SEO数据分析与效果评估

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台的个性…...

多线程传参以及线程的优缺点

进程是资源分配的基本单位 线程是调度的基本单位 笼统来说&#xff0c;线程有以下优点&#xff1a; 创建一个新线程的代价要比创建一个新进程小得多 与进程之间的切换相比&#xff0c;线程之间的切换需要操作系统做的工作要少很多 线程占用的资源要比进程少很多 能充分利用多…...

keil创建单片机工程

一、创建工程 打开Keil uVision4&#xff0c;依次选择 Project—>New uVision4 Project&#xff0c;选择工程保存路径及填写工程名称&#xff0c;如下图 然后点“保存”。在Select a CPU Data Base File中选择"STC MCU Database"&#xff0c;点 "OK"&am…...

QT 串口助手 学习制作记录

QT 串口助手qt 学习制作记录 参考教程&#xff1a;​​​​​​QT初体验&#xff1a;手把手带你写一个自己的串口助手_qt设计串口助手的流程图-CSDN博客 Qt之串口编程&#xff08;添加QSerialPort模块&#xff09;_如何安装 qt串口模块教程-CSDN博客 串口调试助手&#xff1…...

Github 2024-04-13 Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-04-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10CUE项目1Go项目1Tauri: 构建小型、快速和安全的桌面应用程序 创建周期:1673 天开发语言:Rust协议类型:Apache License 2.0Star数量…...

大模型日报|今日必读的10篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.谷歌推出新型 Transformer 架构&#xff1a;反馈注意力就是工作记忆 虽然 Transformer 给深度学习带来了革命性的变化&#xff0c;但二次注意复杂性阻碍了其处理无限长输入的能力。 谷歌研究团队提出了一种新型 T…...

深度学习 Lecture 8 决策树

一、决策树模型&#xff08;Decision Tree Model) 椭圆形代表决策节点&#xff08;decison nodes)&#xff0c;矩形节点代表叶节点&#xff08;leaf nodes)&#xff0c;方向上的值代表属性的值&#xff0c; 构建决策树的学习过程&#xff1a; 第一步&#xff1a;决定在根节点…...

打包 docker 容器镜像到另一台电脑

# 提交容器为镜像 <container_id> 容器id my_migration_image 镜像名称 docker commit <container_id> my_migration_image # 保存镜像为tar文件 docker save my_migration_image > my_migration_image.tar 在另一台电脑上导入上面的镜像&#xff0c;请…...

贪心算法--购买股票

给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获得的 最大 利润 。 示例 1&a…...

在Mac主机上连接Linux虚拟机

前言 最近醉心于研究Linux&#xff0c;于是在PD上安装了一个Debian Linux虚拟机&#xff0c;用来练练手。但是每次在mac和Linux之间切换很是麻烦&#xff0c;有没有一种方法&#xff0c;可以在mac终端直接连接我的虚拟机&#xff0c;这样在mac终端上就可以直接操控我的Linux虚…...

前端如何单独做虚拟奖金池?

公司业务需求要做一个虚拟奖金池&#xff0c;具体是需求是&#xff0c;不需要后端数据支持&#xff0c;但是又需要不同用户看到的奖金池数据每次变动都是一致的&#xff0c;并且要在给定的最小最大值中变动。 一开始看需求&#xff0c;因为需要所有登录/未登录&#xff0c;不同…...

前端md5校验文件

前端获取文件的md5值&#xff0c;与文件一同传到后端&#xff0c;后端同样对md5值进行校验。如果相同&#xff0c;则文件未被损坏&#xff08;其实这种方式优点类似于tcp、ip的差错校验&#xff0c;好像token也是这种方式&#xff09; 项目准备 前端并不可能手写一个算法来实…...

总结SQL相对常用的几个字符函数

目录 字符的截取 substr() trim()、ltrim()、rtrim() 字符串的拼接 ||、 字符的大小写转换 upper(column_name):大写 lower(column_name):小写 字符替换 replace() 搜索字符 instr(column_name, substring_to_find,start,n_appearence) charindex(substring_to_fi…...

云计算笔记

RAID的组合方式 RAID0&#xff1a;多个硬盘同时工作&#xff0c;可提供性能&#xff0c;无冗余机制 RAID1&#xff1a;数据保存多份&#xff0c;提供冗余机制&#xff0c;性能受到影响 RAID3&#xff1a;存在数据盘和单独校验盘&#xff0c;数据写入 至数据盘后需要运算且将…...

网络安全学习路线-超详细

零基础小白&#xff0c;到就业&#xff01;入门到入土的网安学习路线&#xff01; 在各大平台搜的网安学习路线都太粗略了。。。。看不下去了&#xff01; 建议的学习顺序&#xff1a; 一、网络安全学习普法&#xff08;心里有个数&#xff0c;要进去坐几年&#xff01;&#x…...

网站建设项目甘特图/最新新闻热点事件2022

回首忆惘然与我的其他答案完全相反&#xff0c;即使使用多字节字符&#xff0c;此后续功能也可能是安全的。// replace any non-ascii character with its hex code.function escape($value) { $return ; for($i 0; $i < strlen($value); $i) { $char $valu…...

培训网站建设情况/微信营销平台系统

/*********************************************** PCI设备查找程序 vendorId:设备厂商号&#xff1b; deviceId:设备号; index:索引号; *pBusNo:返回的总线号&#xff1b; *pDeviceNo;返回的设备号&#xff1b; *pFuncNo&#xff1a;返回的功能号&#xff1b; **************…...

阿拉善盟北京网站建设/seo推广小分享

摘要&#xff1a; 在这篇文章中&#xff0c;你将学会&#xff0c;如何利用百度地图API进行标注。如何使用API新增的打车费用接口。 ------------------------------------------------------------------------------------------------------- 哇&#xff0c;好久没有上来了。…...

哪些网站做推广/星链友店

Java中应用程序在非正常的情况下停止运行主要包含两种方式&#xff1a; Error 和 Exception &#xff0c;像我们熟知的 OutOfMemoryError 和 IndexOutOfBoundsException 等。在日常的开发过程中 Error 我们是不用处理的&#xff0c;一旦 Error 发生必然证明应用程序代码上出现了…...

诸城做网站的公司/公司网站设计方案

我是怎么把一个项目带崩的-----https://www.cnblogs.com/zer0Black/p/9463206.html转载于:https://www.cnblogs.com/czlovezmt/p/9466910.html...

建站的平台/seo服务外包客服

API技巧集&#xff08;一&#xff09; 一、拖动无标题窗体&#xff1a; 包含头文件&#xff1a; #include $#60;winuser.h$#62; 在窗体或组件的 OnMouseDown 事件中加入以下代码: if(Button mbLeft) { ReleaseCapture(); SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0…...