Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
不穿格子衫的农民
TencentOS Tiny
提交
4080ef37
T
TencentOS Tiny
项目概览
不穿格子衫的农民
/
TencentOS Tiny
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TencentOS Tiny
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
4080ef37
编写于
10月 30, 2019
作者:
S
Supowang1989
提交者:
GitHub
10月 30, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #55 from thelittlehan/master
添加linux下mqtt运行demo
上级
e16bd900
2264a028
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
456 addition
and
17 deletion
+456
-17
arch/linux/posix/gcc/port.c
arch/linux/posix/gcc/port.c
+17
-17
arch/linux/posix/gcc/port.h
arch/linux/posix/gcc/port.h
+2
-0
board/Linux_Posix/mqtt_demo/CMakeLists.txt
board/Linux_Posix/mqtt_demo/CMakeLists.txt
+57
-0
board/Linux_Posix/mqtt_demo/inc/mqtt_config.h
board/Linux_Posix/mqtt_demo/inc/mqtt_config.h
+27
-0
board/Linux_Posix/mqtt_demo/inc/socket_wrapper.h
board/Linux_Posix/mqtt_demo/inc/socket_wrapper.h
+8
-0
board/Linux_Posix/mqtt_demo/inc/tos_config.h
board/Linux_Posix/mqtt_demo/inc/tos_config.h
+46
-0
board/Linux_Posix/mqtt_demo/readme.md
board/Linux_Posix/mqtt_demo/readme.md
+79
-0
board/Linux_Posix/mqtt_demo/src/main.c
board/Linux_Posix/mqtt_demo/src/main.c
+104
-0
board/Linux_Posix/mqtt_demo/src/socket_wrapper.c
board/Linux_Posix/mqtt_demo/src/socket_wrapper.c
+116
-0
未找到文件。
arch/linux/posix/gcc/port.c
浏览文件 @
4080ef37
...
...
@@ -59,7 +59,6 @@ extern k_task_t *k_next_task;
__PORT__
void
_handle_tick_signal
();
__PORT__
void
_handle_context_switch
();
__PORT__
void
_delay_ms
(
uint32_t
ms
);
__PORT__
void
_suspend_thread
(
pthread_t
thread_id
);
__PORT__
void
_resume_thread
(
pthread_t
thread_id
);
__PORT__
void
_wait_resume
();
...
...
@@ -70,6 +69,7 @@ __PORT__ void _suspend_task(k_task_t *task);
__PORT__
void
_resume_task
(
k_task_t
*
task
);
__PORT__
void
_install_signal
(
int
sig
,
void
(
*
func
)(
int
));
__PORT__
void
_filter_signal
(
sigset_t
*
sigset
);
__PORT__
uint64_t
_get_time_ms
(
void
);
typedef
struct
{
sigset_t
signal_mask
;
...
...
@@ -80,6 +80,8 @@ interrupt_manager _int_manager={
.
count
=
0
};
static
uint64_t
tick_ms
=
0
;
__PORT__
void
port_int_disable
(
void
)
{
sigset_t
signal_mask
,
*
manager_mask
=
NULL
;
...
...
@@ -132,7 +134,7 @@ __PORT__ void port_sched_start(void)
_resume_task
(
k_curr_task
);
while
(
1
){
_
delay_ms
(
1000
);
_
wait_resume
(
);
}
}
...
...
@@ -186,6 +188,14 @@ __PORT__ void port_systick_priority_set(uint32_t prio)
{
}
__PORT__
void
port_delay_ms
(
uint32_t
ms
)
{
uint64_t
start_time
=
_get_time_ms
();
do
{
usleep
(
100
);
}
while
((
_get_time_ms
()
-
start_time
)
<
ms
);
}
__PORT__
void
_filter_signal
(
sigset_t
*
sigset
)
{
sigdelset
(
sigset
,
SIGINT
);
...
...
@@ -195,18 +205,7 @@ __PORT__ void _filter_signal(sigset_t *sigset)
__PORT__
uint64_t
_get_time_ms
(
void
)
{
struct
timeval
timer
;
gettimeofday
(
&
timer
,
NULL
);
return
(
1000
*
timer
.
tv_sec
+
timer
.
tv_usec
/
1000
);
}
__PORT__
void
_delay_ms
(
uint32_t
ms
)
{
uint64_t
start_time
=
_get_time_ms
();
do
{
usleep
(
100
);
}
while
((
_get_time_ms
()
-
start_time
)
<
ms
);
return
(
tick_ms
);
}
__PORT__
void
_install_signal
(
int
sig
,
void
(
*
func
)(
int
))
...
...
@@ -225,10 +224,11 @@ __PORT__ void _install_signal(int sig,void (*func)(int))
__PORT__
void
_handle_tick_signal
()
{
tick_ms
++
;
if
(
tos_knl_is_running
())
{
tos_knl_irq_enter
();
tos_tick_handler
();
tos_knl_irq_leave
();
tos_knl_irq_enter
();
tos_tick_handler
();
tos_knl_irq_leave
();
}
}
...
...
arch/linux/posix/gcc/port.h
浏览文件 @
4080ef37
...
...
@@ -93,6 +93,8 @@ __PORT__ void port_systick_priority_set(uint32_t prio); //ok
__PORT__
pthread_t
port_create_thread
(
void
*
arg
);
__PORT__
void
port_delay_ms
(
uint32_t
ms
);
#if TOS_CFG_TICKLESS_EN > 0u
__PORT__
void
port_systick_resume
(
void
);
...
...
board/Linux_Posix/mqtt_demo/CMakeLists.txt
0 → 100644
浏览文件 @
4080ef37
cmake_minimum_required
(
VERSION 3.8
)
project
(
mqtt_demo
)
set
(
CMAKE_BUILD_TYPE
"Debug"
)
set
(
CMAKE_CXX_FLAGS_DEBUG
"$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb"
)
set
(
CMAKE_CXX_FLAGS_RELEASE
"$ENV{CXXFLAGS} -O3 -Wall"
)
set
(
TINY_ROOT ../../../
)
## kernel
include_directories
(
${
TINY_ROOT
}
/osal/cmsis_os
)
include_directories
(
${
TINY_ROOT
}
/kernel/core/include
)
include_directories
(
${
TINY_ROOT
}
/kernel/evtdrv/include
)
include_directories
(
${
TINY_ROOT
}
/kernel/hal/include
)
include_directories
(
${
TINY_ROOT
}
/kernel/pm/include
)
aux_source_directory
(
${
TINY_ROOT
}
/osal/cmsis_os CMSIS_SRCS
)
aux_source_directory
(
${
TINY_ROOT
}
/kernel/core CORE_SRCS
)
aux_source_directory
(
${
TINY_ROOT
}
/kernel/evtdrv EVTDRV_SRCS
)
aux_source_directory
(
${
TINY_ROOT
}
/kernel/pm PM_SRCS
)
set
(
KERNEL_SRCS
${
CMSIS_SRCS
}
${
EVTDRV_SRCS
}
${
PM_SRCS
}
${
CORE_SRCS
}
)
## net
include_directories
(
${
TINY_ROOT
}
/components/connectivity/Eclipse-Paho-MQTT/3rdparty/include
)
include_directories
(
${
TINY_ROOT
}
/components/connectivity/Eclipse-Paho-MQTT/wrapper/include
)
include_directories
(
${
TINY_ROOT
}
/net/sal_module_wrapper
)
aux_source_directory
(
${
TINY_ROOT
}
/components/connectivity/Eclipse-Paho-MQTT/3rdparty/src MQTT_3RD_SRCS
)
aux_source_directory
(
${
TINY_ROOT
}
/components/connectivity/Eclipse-Paho-MQTT/wrapper/src MQTT_SRCS
)
aux_source_directory
(
${
TINY_ROOT
}
/net/sal_module_wrapper SAL_SRCS
)
set
(
NET_SRCS
${
MQTT_3RD_SRCS
}
${
MQTT_SRCS
}
${
SAL_SRCS
}
)
## arch
set
(
ARCH_ROOT
${
TINY_ROOT
}
/arch/linux
)
include_directories
(
${
ARCH_ROOT
}
/common/include
)
include_directories
(
${
ARCH_ROOT
}
/posix/gcc
)
aux_source_directory
(
${
ARCH_ROOT
}
/common ARCH_COMMON_SRCS
)
aux_source_directory
(
${
ARCH_ROOT
}
/posix/gcc ARCH_POSIX_SRCS
)
set
(
ARCH_SRCS
${
ARCH_COMMON_SRCS
}
${
ARCH_POSIX_SRCS
}
)
set
(
TINY_SRCS
${
ARCH_SRCS
}
${
KERNEL_SRCS
}
${
NET_SRCS
}
)
## app
include_directories
(
./
)
include_directories
(
./inc
)
aux_source_directory
(
./src APP_SRCS
)
add_executable
(
mqtt_demo
${
APP_SRCS
}
${
TINY_SRCS
}
)
target_link_libraries
(
mqtt_demo pthread
)
\ No newline at end of file
board/Linux_Posix/mqtt_demo/inc/mqtt_config.h
0 → 100644
浏览文件 @
4080ef37
#ifndef TOS_MQTT_CONFIG_H
#define TOS_MQTT_CONFIG_H
#define MQTT_SERVER_IP "111.230.189.156"
#define MQTT_SERVER_PORT "1883"
#define MQTT_PRODUCT_ID "$product"
#define MQTT_DEV_NAME "$dev"
#define MQTT_CLIENT_ID "$product$dev"
#define MQTT_USR_NAME "$product$dev;21010406;12365;4294967295"
#define MQTT_PASSWORD "$sign;hmacsha1"
#define MQTT_SUBSCRIBE_TOPIC "$product/$dev/$sub"
#define MQTT_PUBLISH_TOPIC "$product/$dev/$pub"
#error please replace yourself server configuration
/**
* 1. run python tool
* ```
* cd tiny/tools/
* python3 mqtt_config_gen.py
* ```
* then input your server information
*
* 2. tool will generate `mqtt_config.h` file, copy to replace this file
*/
#endif
board/Linux_Posix/mqtt_demo/inc/socket_wrapper.h
0 → 100644
浏览文件 @
4080ef37
#ifndef _SOCKET_WRAPPER_
#define _SOCKET_WRAPPER_
#include "sal_module_wrapper.h"
sal_module_t
*
get_socket_module
(
void
);
#endif //_SOCKET_WRAPPER_
\ No newline at end of file
board/Linux_Posix/mqtt_demo/inc/tos_config.h
0 → 100644
浏览文件 @
4080ef37
#ifndef _TOS_CONFIG_H_
#define _TOS_CONFIG_H_
#include "stddef.h"
#define TOS_CFG_TASK_PRIO_MAX 10u // 配置TencentOS tiny默认支持的最大优先级数量
#define TOS_CFG_ROUND_ROBIN_EN 1u // 配置TencentOS tiny的内核是否开启时间片轮转
#define TOS_CFG_OBJECT_VERIFY 0u // 配置TencentOS tiny是否校验指针合法
#define TOS_CFG_EVENT_EN 1u // TencentOS tiny 事件模块功能宏
#define TOS_CFG_MMHEAP_EN 1u // 配置TencentOS tiny是否开启动态内存模块
#define TOS_CFG_MMHEAP_POOL_SIZE 0x100 // 配置TencentOS tiny动态内存池大小
#define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE 0x100 // 配置TencentOS tiny动态内存池大小
#define TOS_CFG_MUTEX_EN 1u // 配置TencentOS tiny是否开启互斥锁模块
#define TOS_CFG_QUEUE_EN 1u // 配置TencentOS tiny是否开启队列模块
#define TOS_CFG_TIMER_EN 1u // 配置TencentOS tiny是否开启软件定时器模块
#define TOS_CFG_SEM_EN 1u // 配置TencentOS tiny是否开启信号量模块
#define TOS_CFG_MMBLK_EN 1u
#if (TOS_CFG_QUEUE_EN > 0u)
#define TOS_CFG_MSG_EN 1u
#else
#define TOS_CFG_MSG_EN 0u
#endif
#define TOS_CFG_MSG_POOL_SIZE 10u // 配置TencentOS tiny消息队列大小
#define TOS_CFG_IDLE_TASK_STK_SIZE 256u // 配置TencentOS tiny空闲任务栈大小
#define TOS_CFG_CPU_TICK_PER_SECOND 1000u // 配置TencentOS tiny的tick频率
#define TOS_CFG_CPU_CLOCK 1000000u // 配置TencentOS tiny CPU频率
#define TOS_CFG_TIMER_AS_PROC 1u // 配置是否将TIMER配置成函数模式
#endif
\ No newline at end of file
board/Linux_Posix/mqtt_demo/readme.md
0 → 100644
浏览文件 @
4080ef37
# How to run the demo in linux
## step1
make sure your develop environment.
+
`cmake`
and version greater than 3.8.2
+
`gcc`
`gdb`
`make`
is installed
## step2
configure your server and add a transmit rule
reference
[
tencent cloud IoT guide?
](
../../../doc/8.TencentOS-tiny对接腾讯云IoTHub开发指南.md
)
additional thing, add a rule for send a message to the demo
1.
select filter topic is the ${demo device}/event and
SELECT
*
FROM ${demo device}/event
2.
select action type is Republish and topic is the ${demo device}/control
the page like this
____________________________________________
_
|规则引擎
|--------------------------------------------
|基本信息
|规则名称 loop
|规则描述 未填写
|--------------------------------------------
|筛选数据
|字段
*
|Topic ${demo device}/event
|条件
|当前SQL语句是:
|SELECT
*
${demo device}/event
|--------------------------------------------
|行为操作
|行为类型 数据转发到另一个Topic ( Republish )
|Topic ${demo device}/control
| ...
____________________________________________
_
## step3
generate
`mqtt_config.h`
file to replace
`./inc/mqtt_config.h`
cd
`tiny/tools/`
directory, run python script
```
bash
python3 mqtt_config_gen.py
```
then input your server configuration, generate
`mqtt_config.h`
file
copy to
`./inc/`
replace old file
## step4
make
`build`
directory and compile in
`build`
```
bash
mkdir
build
&&
cd
build
cmake ..
make
```
## step5
run program !!
```
bash
# in build directory
./mqtt_demo
```
## other
you can copy this demo to other path, but if you want do it,
you need modify
`CMakeLists.txt`
. find line
```
cmake
set
(
TINY_ROOT ../../../
)
```
and modify
`path-to-tinyos`
```
cmake
set
(
TINY_ROOT path-to-tinyos
)
```
board/Linux_Posix/mqtt_demo/src/main.c
0 → 100644
浏览文件 @
4080ef37
#include "cmsis_os.h"
#include "socket_wrapper.h"
#include "sal_module_wrapper.h"
#include "mqtt_wrapper.h"
#include "mqtt_config.h"
#include <stdio.h>
int
sock_id
=
0
;
//mqtt_publisher
#define MQTT_PUBLISHER_STK_SIZE 1024
void
mqtt_publisher
(
void
*
pdata
);
osThreadDef
(
mqtt_publisher
,
osPriorityNormal
,
1
,
MQTT_PUBLISHER_STK_SIZE
);
//mqtt_reciever
#define MQTT_RECIEVER_STK_SIZE 1024
void
mqtt_reciever
(
void
*
pdata
);
osThreadDef
(
mqtt_reciever
,
osPriorityNormal
,
1
,
MQTT_RECIEVER_STK_SIZE
);
void
mqtt_publisher
(
void
*
pdata
)
{
mqtt_con_opt_t
con_param
;
con_param
.
keep_alive_interval
=
2000
;
con_param
.
cleansession
=
1
;
con_param
.
username
=
MQTT_USR_NAME
;
con_param
.
password
=
MQTT_PASSWORD
;
con_param
.
client_id
=
MQTT_CLIENT_ID
;
mqtt_pub_opt_t
pub_param
;
pub_param
.
dup
=
0
;
pub_param
.
qos
=
0
;
pub_param
.
retained
=
0
;
pub_param
.
id
=
0
;
pub_param
.
payload
=
"hello tencent cloud"
;
pub_param
.
payload_len
=
20
;
pub_param
.
topic
=
MQTT_PUBLISH_TOPIC
;
mqtt_sub_opt_t
sub_param
;
sub_param
.
count
=
1
;
sub_param
.
dup
=
0
;
sub_param
.
id
=
0
;
sub_param
.
req_qos
=
0
;
sub_param
.
topic
=
MQTT_SUBSCRIBE_TOPIC
;
printf
(
"start connect
\n
"
);
tos_sal_module_register
(
get_socket_module
());
tos_sal_module_init
();
sock_id
=
tos_mqtt_connect
(
MQTT_SERVER_IP
,
MQTT_SERVER_PORT
,
&
con_param
);
if
(
sock_id
==
-
1
)
{
printf
(
"connect failed!!!
\n
"
);
return
-
1
;
//to exit thread
}
printf
(
"connect success
\n
"
);
if
(
tos_mqtt_subscribe
(
sock_id
,
&
sub_param
)
!=
0
)
{
printf
(
"subscribe failed!!!
\n
"
);
}
else
{
printf
(
"subscribe success
\n
"
);
}
osThreadCreate
(
osThread
(
mqtt_reciever
),
NULL
);
// start receive
for
(;;)
{
printf
(
"
\n
"
);
printf
(
"publish topic-->%s| data-->%s|
\n
"
,
pub_param
.
topic
,
pub_param
.
payload
);
if
(
tos_mqtt_publish
(
sock_id
,
&
pub_param
)
!=
0
)
{
printf
(
"publish failed!!!
\n
"
);
}
osDelay
(
2000
);
}
}
void
mqtt_reciever
(
void
*
pdata
)
{
uint8_t
read_data
[
100
];
int8_t
topic
[
30
];
uint32_t
read_len
;
for
(;;)
{
read_len
=
tos_mqtt_receive
(
topic
,
sizeof
(
topic
),
read_data
,
sizeof
(
read_data
));
if
(
read_len
>=
0
)
{
printf
(
"receive topic-->%s| data-->%s|
\n
"
,
topic
,
read_data
);
}
osDelay
(
100
);
}
}
int
main
(
void
)
{
osKernelInitialize
();
//TOS Tiny kernel initialize
osThreadCreate
(
osThread
(
mqtt_publisher
),
NULL
);
// start connect and publish
osKernelStart
();
//Start TOS Tiny
while
(
1
)
{
}
}
board/Linux_Posix/mqtt_demo/src/socket_wrapper.c
0 → 100644
浏览文件 @
4080ef37
#include "socket_wrapper.h"
#include "cmsis_os.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <signal.h>
#include <fcntl.h>
static
osMutexId
socket_send_lock
,
socket_recv_lock
;
osMutexDef
(
socket_send_lock
);
osMutexDef
(
socket_recv_lock
);
int
socket_init
(
void
)
{
socket_send_lock
=
osMutexCreate
(
osMutex
(
socket_send_lock
));
socket_recv_lock
=
osMutexCreate
(
osMutex
(
socket_recv_lock
));
return
((
socket_recv_lock
!=
NULL
)
&&
(
socket_send_lock
!=
NULL
));
}
int
socket_connect
(
const
char
*
ip
,
const
char
*
port
,
sal_proto_t
proto
)
{
struct
sockaddr_in
addr
=
{
.
sin_family
=
AF_INET
,
.
sin_port
=
htons
(
atoi
(
port
))};
int
socket_proto
=
0
;
inet_pton
(
AF_INET
,
ip
,
&
addr
.
sin_addr
);
if
(
TOS_SAL_PROTO_TCP
==
proto
)
{
socket_proto
=
IPPROTO_TCP
;
}
else
if
(
TOS_SAL_PROTO_UDP
==
proto
)
{
socket_proto
=
IPPROTO_UDP
;
}
else
{
return
-
1
;
}
int
socket_id
=
socket
(
AF_INET
,
SOCK_STREAM
,
IPPROTO_TCP
);
connect
(
socket_id
,
&
addr
,
sizeof
(
addr
));
return
socket_id
;
}
int
socket_send
(
int
sock
,
const
void
*
buf
,
size_t
len
)
{
ssize_t
send_len
=
0
,
state
;
if
(
sock
<
0
)
return
-
1
;
osMutexWait
(
socket_send_lock
,
TOS_TIME_FOREVER
);
do
{
state
=
send
(
sock
,
(
buf
+
send_len
),
(
len
-
send_len
),
MSG_DONTWAIT
);
if
(
state
>
0
)
{
send_len
+=
state
;
}
if
(
send_len
!=
len
)
{
osDelay
(
5
);
}
}
while
(
len
!=
send_len
);
osMutexRelease
(
socket_send_lock
);
return
send_len
;
}
int
socket_recv
(
int
sock
,
void
*
buf
,
size_t
len
)
{
ssize_t
recv_len
=
0
,
state
;
if
(
sock
<
0
)
return
-
1
;
osMutexWait
(
socket_recv_lock
,
TOS_TIME_FOREVER
);
do
{
state
=
recv
(
sock
,
(
buf
+
recv_len
),
(
len
-
recv_len
),
MSG_DONTWAIT
);
if
(
state
>
0
)
{
recv_len
+=
state
;
}
if
(
recv_len
!=
len
)
{
osDelay
(
5
);
}
}
while
(
len
!=
recv_len
);
osMutexRelease
(
socket_recv_lock
);
return
recv_len
;
}
int
socket_close
(
int
sock
)
{
close
(
sock
);
}
static
sal_module_t
linux_sal
=
{
.
init
=
socket_init
,
.
connect
=
socket_connect
,
.
send
=
socket_send
,
.
recv
=
socket_recv
,
.
close
=
socket_close
,
// .sendto = NULL,
// .recv_timeout = NULL,
// .recvfrom = NULL,
// .recvfrom_timeout = NULL,
// .parse_domain = NULL,
};
sal_module_t
*
get_socket_module
(
void
)
{
return
(
&
linux_sal
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录