添加流程文件
添加主逻辑函数 待完善ttgetinfo 文件
This commit is contained in:
parent
8cb31be86b
commit
9b76e1fbe8
98
applications/_main.c
Normal file
98
applications/_main.c
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2021, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2023-06-01 murmur the first version
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
|
||||||
|
#define LOG_TAG "main_scha"
|
||||||
|
#define LOG_LVL LOG_LVL_DBG
|
||||||
|
#include <ulog.h>
|
||||||
|
#include <board.h>
|
||||||
|
#include <ttmsg/ttmsg.h>
|
||||||
|
#include <cfg.h>
|
||||||
|
|
||||||
|
struct rt_event sw_check;//软件条件
|
||||||
|
struct rt_event hw_check;//硬件条件
|
||||||
|
#define FILE_IS_OK 1
|
||||||
|
#define TIMER_IS_OUT 1<<1
|
||||||
|
#define TT_IS_OK 1<<2
|
||||||
|
|
||||||
|
static maxWaitTime = 4;
|
||||||
|
static maxRetryCnt = 3;
|
||||||
|
|
||||||
|
static init()
|
||||||
|
{
|
||||||
|
/* 事 件 控 制 块 */
|
||||||
|
|
||||||
|
rt_err_t result = rt_event_init(&sw_check, "SHcheck", RT_IPC_FLAG_FIFO);
|
||||||
|
if (result != RT_EOK)
|
||||||
|
{
|
||||||
|
LOG_E("init event failed.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新各参数
|
||||||
|
*/
|
||||||
|
static void updatecfg()
|
||||||
|
{
|
||||||
|
maxWaitTime = get_cfg("maxWaitTime");
|
||||||
|
maxRetryCnt = get_cfg("maxRetryCnt");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监控TT状态。需求条件1:TT连续5个周期为激活状态且信号强度不低于5。
|
||||||
|
*/
|
||||||
|
void checkTT()
|
||||||
|
{
|
||||||
|
//上电
|
||||||
|
pwTT_thread_entry("1");
|
||||||
|
// rt_thread_create(name, entry, parameter, stack_size, priority, tick)
|
||||||
|
getTT();
|
||||||
|
// getTTinfo_thread_entry()
|
||||||
|
}
|
||||||
|
|
||||||
|
void try()
|
||||||
|
{
|
||||||
|
static rt_err_t rst = RT_ERROR;
|
||||||
|
updatecfg();
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
int e;
|
||||||
|
rst = rt_event_recv(&sw_check, FILE_IS_OK | TIMER_IS_OUT, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
|
||||||
|
RT_WAITING_FOREVER, &e);
|
||||||
|
if (rst == RT_EOK)
|
||||||
|
{
|
||||||
|
//上电
|
||||||
|
pwTT_thread_entry("1");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t var = 0; var < maxRetryCnt; ++var)
|
||||||
|
{
|
||||||
|
rst = rt_event_recv(&sw_check, TT_IS_OK, RT_EVENT_FLAG_CLEAR, rt_tick_from_millisecond(maxWaitTime * 1000),
|
||||||
|
&e);
|
||||||
|
if (rst == RT_ETIMEOUT)
|
||||||
|
{
|
||||||
|
pwTT_thread_entry("0");
|
||||||
|
rt_thread_mdelay(1000);
|
||||||
|
pwTT_thread_entry("1");
|
||||||
|
}
|
||||||
|
else if (rst == RT_EOK)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_E("Unknown error.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -69,26 +69,30 @@ int set_cfg(const char *k, const char*v)
|
|||||||
|
|
||||||
int get_cfg(const char *k)
|
int get_cfg(const char *k)
|
||||||
{
|
{
|
||||||
char buf[16];
|
// char buf[MAX_KEY_LEN];
|
||||||
int rst = ini_gets("config",k,"000000",buf,16,LJW_CFG_FILE_NAME);
|
// int rst = ini_gets("config",k,"000000",buf,MAX_KEY_LEN,LJW_CFG_FILE_NAME);
|
||||||
if(strcmp(buf, "000000") == 0) {
|
// if(strcmp(buf, "000000") == 0) {
|
||||||
// 采用默认值
|
// // 采用默认值
|
||||||
|
int rst = ini_getl("config", k, -1, LJW_CFG_FILE_NAME);
|
||||||
|
if (rst == -1) {
|
||||||
LOG_W("no such KEY:%s",k);
|
LOG_W("no such KEY:%s",k);
|
||||||
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LOG_I("%s = %s",k,buf);
|
// LOG_I("%s = %s",k,buf);
|
||||||
|
LOG_I("%s = %d",k,rst);
|
||||||
}
|
}
|
||||||
return rst;
|
return rst;
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_cfg_all(void)
|
void get_cfg_all(void)
|
||||||
{
|
{
|
||||||
char buf[16];
|
char buf[MAX_KEY_LEN];
|
||||||
char kstr[16];
|
char kstr[MAX_KEY_LEN];
|
||||||
|
|
||||||
LOG_I("%23s","---CONFIG---");
|
LOG_I("%23s","---CONFIG---");
|
||||||
for (size_t k = 0; ini_getkey("config", k, kstr, 16, LJW_CFG_FILE_NAME) > 0; k++) {
|
for (size_t k = 0; ini_getkey("config", k, kstr, MAX_KEY_LEN, LJW_CFG_FILE_NAME) > 0; k++) {
|
||||||
int rst = ini_gets("config",kstr,"000000",buf,16,LJW_CFG_FILE_NAME);
|
int rst = ini_gets("config",kstr,"000000",buf,MAX_KEY_LEN,LJW_CFG_FILE_NAME);
|
||||||
LOG_I("%16s = %s",kstr,buf);
|
LOG_I("%16s = %s",kstr,buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,11 +116,11 @@ void cfg(int argc, char ** argv)
|
|||||||
|
|
||||||
static void get_sta_all(void)
|
static void get_sta_all(void)
|
||||||
{
|
{
|
||||||
char buf[16];
|
char buf[MAX_KEY_LEN];
|
||||||
char kstr[16];
|
char kstr[MAX_KEY_LEN];
|
||||||
LOG_I("%23s","---STATS---");
|
LOG_I("%23s","---STATS---");
|
||||||
for (size_t k = 0; ini_getkey("stats", k, kstr, 16, LJW_CFG_FILE_NAME) > 0; k++) {
|
for (size_t k = 0; ini_getkey("stats", k, kstr, MAX_KEY_LEN, LJW_CFG_FILE_NAME) > 0; k++) {
|
||||||
int rst = ini_gets("stats",kstr,"000000",buf,16,LJW_CFG_FILE_NAME);
|
int rst = ini_gets("stats",kstr,"000000",buf,MAX_KEY_LEN,LJW_CFG_FILE_NAME);
|
||||||
LOG_I("%16s = %s",kstr,buf);
|
LOG_I("%16s = %s",kstr,buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -205,5 +209,68 @@ static void clear_sta(void)
|
|||||||
MSH_CMD_EXPORT_ALIAS(clear_sta,clsSta, 重置系统统计数据)
|
MSH_CMD_EXPORT_ALIAS(clear_sta,clsSta, 重置系统统计数据)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加文件到待发列表,指定待发包
|
||||||
|
* @param f
|
||||||
|
* @param v
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int setFileToSend(const char *f, int v)
|
||||||
|
{
|
||||||
|
int rst = ini_putl(SECTION_TO_SEND, f, v, LJW_CFG_FILE_NAME);
|
||||||
|
if (!rst) {
|
||||||
|
LOG_E("add file to send error.");
|
||||||
|
}
|
||||||
|
return rst;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 获取待发送文件列表
|
||||||
|
* @param kstr 文件名
|
||||||
|
* @param v 对应包,默认为0即全发
|
||||||
|
* @return 文件个数
|
||||||
|
*/
|
||||||
|
int getFilesToSend(char (*kstr)[MAX_KEY_LEN], int *v)
|
||||||
|
{
|
||||||
|
// char buf[MAX_KEY_LEN];
|
||||||
|
// char kstr[MAX_KEY_LEN];
|
||||||
|
size_t len=0;
|
||||||
|
for (size_t k = 0; ini_getkey(SECTION_TO_SEND, k, kstr[len], MAX_KEY_LEN, LJW_CFG_FILE_NAME) > 0; k++) {
|
||||||
|
v[len] = ini_getl(SECTION_TO_SEND, kstr[len], -1, LJW_CFG_FILE_NAME);
|
||||||
|
len +=1;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 清空待发送文件记录
|
||||||
|
*/
|
||||||
|
int clearFileToSend(const char *k)
|
||||||
|
{
|
||||||
|
int rst = ini_puts(SECTION_TO_SEND, k, NULL, LJW_CFG_FILE_NAME);
|
||||||
|
if (!rst) {
|
||||||
|
LOG_E("clear file to send error.");
|
||||||
|
}
|
||||||
|
return rst;
|
||||||
|
}
|
||||||
|
|
||||||
|
void gf()
|
||||||
|
{
|
||||||
|
int v[MAX_KEY_LEN];
|
||||||
|
char kstr[10][MAX_KEY_LEN];
|
||||||
|
size_t cnt = getFilesToSend(kstr, v);
|
||||||
|
for (size_t var = 0; var < cnt; ++var) {
|
||||||
|
LOG_I("%s -- %d",kstr[var],v[var]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void add(int argc, char **argv)
|
||||||
|
{
|
||||||
|
setFileToSend(argv[1],atoi(argv[2]));
|
||||||
|
gf();
|
||||||
|
clearFileToSend(argv[1]);
|
||||||
|
gf();
|
||||||
|
}
|
||||||
|
|
||||||
|
MSH_CMD_EXPORT(gf, 查看待发送文件列表)
|
||||||
|
MSH_CMD_EXPORT_ALIAS(add, cf,查看待发送文件列表)
|
||||||
|
|
||||||
//set_if()
|
//set_if()
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,6 +22,16 @@ typedef struct
|
|||||||
#define COMPRESSTYPE 1<<3
|
#define COMPRESSTYPE 1<<3
|
||||||
#define ENCRYTTYPE 1<<4
|
#define ENCRYTTYPE 1<<4
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_KEY_LEN 30
|
||||||
|
#define SECTION_TO_SEND "tosend"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int get_cfg(const char *k);
|
int get_cfg(const char *k);
|
||||||
int set_cfg(const char *k, const char*v);
|
int set_cfg(const char *k, const char*v);
|
||||||
int add_val(const char *k);
|
int add_val(const char *k);
|
||||||
|
|
||||||
|
int setFileToSend(const char *f, int v);
|
||||||
|
int getFilesToSend(char (*kstr)[MAX_KEY_LEN], int *v);
|
||||||
|
int clearFileToSend(const char *k);
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
//#include <../packages/webclient-v2.2.0/inc/webclient.h>
|
//#include <../packages/webclient-v2.2.0/inc/webclient.h>
|
||||||
#include <webclient.h>
|
#include <webclient.h>
|
||||||
@ -16,12 +20,13 @@
|
|||||||
#define TT_JH TT_IP "/action/webGetPSState"//激活
|
#define TT_JH TT_IP "/action/webGetPSState"//激活
|
||||||
#define TT_DW TT_IP "/action/webGetBDGPS"//定位
|
#define TT_DW TT_IP "/action/webGetBDGPS"//定位
|
||||||
//http://192.168.0.232:4005/action/webGetSIMState webGetBDGPS
|
//http://192.168.0.232:4005/action/webGetSIMState webGetBDGPS
|
||||||
|
#define MAX_LEN 15
|
||||||
#include <cJSON.h>
|
#include <cJSON.h>
|
||||||
#include <finsh.h>
|
#include <finsh.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
//#include <stdio.h>
|
||||||
#include <stdlib.h> //用于strtod函数
|
//#include <stdlib.h> //用于strtod函数
|
||||||
#include <string.h>
|
//#include <string.h>
|
||||||
|
|
||||||
char *infoH[] = { TT_SIM, TT_XH, TT_RW, TT_JH, TT_DW};
|
char *infoH[] = { TT_SIM, TT_XH, TT_RW, TT_JH, TT_DW};
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -32,7 +37,7 @@ typedef struct
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
rt_uint8_t sim; // SIM
|
char sim[MAX_LEN]; // SIM
|
||||||
rt_uint8_t xh; // 信号值
|
rt_uint8_t xh; // 信号值
|
||||||
rt_uint8_t rw; // 入网
|
rt_uint8_t rw; // 入网
|
||||||
rt_uint8_t jh; // 激活
|
rt_uint8_t jh; // 激活
|
||||||
@ -40,8 +45,12 @@ typedef struct
|
|||||||
char *wd; // 纬度
|
char *wd; // 纬度
|
||||||
char *ele; // 高度
|
char *ele; // 高度
|
||||||
} TT;
|
} TT;
|
||||||
|
|
||||||
static TT tmp;
|
static TT tmp;
|
||||||
static TT *TTinfo=&tmp;
|
static TT *TTinfo=&tmp;
|
||||||
|
|
||||||
|
//rt_memset(&tmp,0,sizeof(TT));
|
||||||
|
//TTinfo = rt_malloc(sizeof(TT));
|
||||||
/**
|
/**
|
||||||
* @description: 将TT结构体转换为数组
|
* @description: 将TT结构体转换为数组
|
||||||
* @param {TT} *TTinfo TT结构体
|
* @param {TT} *TTinfo TT结构体
|
||||||
@ -89,8 +98,6 @@ static void tt_parse(rt_uint8_t *data)
|
|||||||
{
|
{
|
||||||
extern TT *TTinfo;
|
extern TT *TTinfo;
|
||||||
cJSON *root = RT_NULL, *object = RT_NULL, *item = RT_NULL;
|
cJSON *root = RT_NULL, *object = RT_NULL, *item = RT_NULL;
|
||||||
// rt_kprintf("%5s%5s%5s%5s%15s%15s%10s\n", TTinfo->sim, TTinfo->xh, TTinfo->rw,
|
|
||||||
// TTinfo->jh, TTinfo->jd, TTinfo->wd,TTinfo->ele);
|
|
||||||
|
|
||||||
root = cJSON_Parse((const char *) data);
|
root = cJSON_Parse((const char *) data);
|
||||||
if (!root)
|
if (!root)
|
||||||
@ -151,9 +158,9 @@ static void tt_parse(rt_uint8_t *data)
|
|||||||
item = cJSON_GetObjectItem(object, "tdsimstate");
|
item = cJSON_GetObjectItem(object, "tdsimstate");
|
||||||
if (item)
|
if (item)
|
||||||
{
|
{
|
||||||
TTinfo->sim = atoi(item->valuestring);
|
// TTinfo->sim = atoi(item->valuestring);
|
||||||
// tmp.sim = item->valuestring;
|
// tmp.sim = item->valuestring;
|
||||||
// strcpy(TTinfo.sim,item->valuestring)
|
strcpy(TTinfo->sim,item->valuestring);
|
||||||
// rt_kprintf("\nSIM:%s \n", TTinfo->sim);
|
// rt_kprintf("\nSIM:%s \n", TTinfo->sim);
|
||||||
cJSON_Delete(root);
|
cJSON_Delete(root);
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
@ -166,7 +173,7 @@ static void tt_parse(rt_uint8_t *data)
|
|||||||
/* HTTP client download data by GET request */
|
/* HTTP client download data by GET request */
|
||||||
static int webclient_get_data(const char *url)
|
static int webclient_get_data(const char *url)
|
||||||
{
|
{
|
||||||
unsigned char *buffer = RT_NULL;
|
static unsigned char *buffer = RT_NULL;
|
||||||
size_t length = 0;
|
size_t length = 0;
|
||||||
|
|
||||||
if (webclient_request(url, RT_NULL, RT_NULL, 0, (void **) &buffer, &length) < 0)
|
if (webclient_request(url, RT_NULL, RT_NULL, 0, (void **) &buffer, &length) < 0)
|
||||||
@ -202,7 +209,7 @@ void getTTinfo_thread_entry(void* parameter)
|
|||||||
{
|
{
|
||||||
for (var = 0; var < isize; var++) //轮询每个参数
|
for (var = 0; var < isize; var++) //轮询每个参数
|
||||||
{
|
{
|
||||||
char *url = RT_NULL;
|
static char *url = RT_NULL;
|
||||||
url = web_strdup(*(infoH + var));
|
url = web_strdup(*(infoH + var));
|
||||||
if (url == RT_NULL)
|
if (url == RT_NULL)
|
||||||
{
|
{
|
||||||
@ -216,10 +223,8 @@ void getTTinfo_thread_entry(void* parameter)
|
|||||||
web_free(url);
|
web_free(url);
|
||||||
rt_thread_mdelay(100);
|
rt_thread_mdelay(100);
|
||||||
}
|
}
|
||||||
// rt_kprintf("%5d++%5d --%5d\n",TTinfo->xh,tmp.xh,TTinfo->sim);
|
rt_kprintf("%5s%5d%5d%5d%15s%15s%10s\n", TTinfo->sim, TTinfo->xh, TTinfo->rw, TTinfo->jh, TTinfo->jd,
|
||||||
// rt_kprintf("%5d%5d%5d%5d%15s%15s%10s\n", TTinfo.sim, TTinfo.xh, TTinfo.rw, TTinfo.jh, TTinfo.jd, TTinfo.wd,TTinfo.ele);
|
TTinfo->wd, TTinfo->ele);
|
||||||
rt_kprintf("%5d%5d%5d%5d%15s%15s%10s\n", TTinfo->sim, TTinfo->xh, TTinfo->rw,
|
|
||||||
TTinfo->jh, TTinfo->jd, TTinfo->wd,TTinfo->ele);
|
|
||||||
if (i != cfg->cnt - 1) //最后一次采集不延时
|
if (i != cfg->cnt - 1) //最后一次采集不延时
|
||||||
{
|
{
|
||||||
rt_thread_mdelay(cfg->s * 1000);
|
rt_thread_mdelay(cfg->s * 1000);
|
||||||
|
174
applications/idle.c
Normal file
174
applications/idle.c
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2021, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2023-06-01 murmur the first version
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
|
||||||
|
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
|
* Change Logs:
|
||||||
|
|
||||||
|
* Date Author Notes
|
||||||
|
|
||||||
|
* 2018-08-24 yangjie the first version
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
* 程序清单:空闲任务钩子例程
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
|
* 这个例程创建一个线程,通过延时进入空闲任务钩子,用于打印进入空闲钩子的次数
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
#include <rthw.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define THREAD_PRIORITY 20
|
||||||
|
|
||||||
|
#define THREAD_STACK_SIZE 1024
|
||||||
|
|
||||||
|
#define THREAD_TIMESLICE 5
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 指向线程控制块的指针 */
|
||||||
|
|
||||||
|
static rt_thread_t tid = RT_NULL;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 空闲函数钩子函数执行次数 */
|
||||||
|
|
||||||
|
volatile static int hook_times = 0;
|
||||||
|
int t=0;
|
||||||
|
extern rt_device_t wdg_dev; /* 看门狗设备句柄 */
|
||||||
|
|
||||||
|
/* 空闲任务钩子函数 */
|
||||||
|
|
||||||
|
static void idle_hook()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
// if (0 == (hook_times % 10000))
|
||||||
|
//
|
||||||
|
// {
|
||||||
|
//
|
||||||
|
// rt_kprintf("enter idle hook %d times.\n", hook_times);
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
rt_thread_mdelay(1000);
|
||||||
|
rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_GET_TIMEOUT, &t);
|
||||||
|
rt_kprintf("---%d\n", t);
|
||||||
|
|
||||||
|
// rt_enter_critical();
|
||||||
|
//
|
||||||
|
// hook_times++;
|
||||||
|
//
|
||||||
|
// rt_exit_critical();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 线程入口 */
|
||||||
|
|
||||||
|
static void thread_entry(void *parameter)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
int i = 5;
|
||||||
|
|
||||||
|
// while (1)
|
||||||
|
//
|
||||||
|
// {
|
||||||
|
|
||||||
|
// rt_kprintf("enter thread1.\n");
|
||||||
|
//
|
||||||
|
// rt_enter_critical();
|
||||||
|
//
|
||||||
|
// hook_times = 0;
|
||||||
|
//
|
||||||
|
// rt_exit_critical();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 休眠500ms */
|
||||||
|
|
||||||
|
// rt_kprintf("thread1 delay 50 OS Tick.\n", hook_times);
|
||||||
|
//
|
||||||
|
// rt_thread_mdelay(500);
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
// rt_kprintf("delete idle hook.\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 删除空闲钩子函数 */
|
||||||
|
|
||||||
|
// rt_thread_idle_delhook(idle_hook);
|
||||||
|
|
||||||
|
// rt_kprintf("thread1 finish.\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int idle_hook_sample(void)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
/* 设置空闲线程钩子 */
|
||||||
|
|
||||||
|
rt_thread_idle_sethook(idle_hook);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 创建线程 */
|
||||||
|
|
||||||
|
tid = rt_thread_create("thread1",
|
||||||
|
|
||||||
|
thread_entry, RT_NULL,
|
||||||
|
|
||||||
|
THREAD_STACK_SIZE,
|
||||||
|
|
||||||
|
THREAD_PRIORITY, THREAD_TIMESLICE);
|
||||||
|
|
||||||
|
if (tid != RT_NULL)
|
||||||
|
|
||||||
|
rt_thread_startup(tid);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
|
||||||
|
MSH_CMD_EXPORT(idle_hook_sample, idle hook sample);
|
||||||
|
|
@ -21,12 +21,12 @@
|
|||||||
|
|
||||||
#define IWDG_DEVICE_NAME "wdt" /* 看门狗设备名称 */
|
#define IWDG_DEVICE_NAME "wdt" /* 看门狗设备名称 */
|
||||||
|
|
||||||
static rt_device_t wdg_dev; /* 看门狗设备句柄 */
|
rt_device_t wdg_dev; /* 看门狗设备句柄 */
|
||||||
|
|
||||||
static void idle_hook(void)
|
static void idle_hook(void)
|
||||||
{
|
{
|
||||||
/* 在空闲线程的回调函数里喂狗 */
|
/* 在空闲线程的回调函数里喂狗 */
|
||||||
rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
|
// rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
|
||||||
// rt_thread_mdelay(500);
|
// rt_thread_mdelay(500);
|
||||||
// rt_kprintf("feed the dog!\n ");
|
// rt_kprintf("feed the dog!\n ");
|
||||||
}
|
}
|
||||||
@ -74,7 +74,7 @@ static int iwdg_sample(int argc, char *argv[])
|
|||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
/* 设置空闲线程回调函数 */
|
/* 设置空闲线程回调函数 */
|
||||||
rt_thread_idle_sethook(idle_hook);
|
// rt_thread_idle_sethook(idle_hook);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
143
applications/timer.c
Normal file
143
applications/timer.c
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2021, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2023-06-01 murmur the first version
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
|
||||||
|
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
|
* Change Logs:
|
||||||
|
|
||||||
|
* Date Author Notes
|
||||||
|
|
||||||
|
* 2018-08-24 yangjie the first version
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
* 程序清单:定时器例程
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
|
* 这个例程会创建两个动态定时器,一个是单次定时,一个是周期性定时
|
||||||
|
|
||||||
|
* 并让周期定时器运行一段时间后停止运行
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 定时器的控制块 */
|
||||||
|
|
||||||
|
static rt_timer_t timer1;
|
||||||
|
|
||||||
|
static rt_timer_t timer2;
|
||||||
|
|
||||||
|
static int cnt = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 定时器1超时函数 */
|
||||||
|
|
||||||
|
static void timeout1(void *parameter)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
rt_kprintf("periodic timer is timeout %d\n", cnt);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 运行第10次,停止周期定时器 */
|
||||||
|
|
||||||
|
if (cnt++ >= 9)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
rt_timer_stop(timer1);
|
||||||
|
|
||||||
|
rt_kprintf("periodic timer was stopped! \n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 定时器2超时函数 */
|
||||||
|
|
||||||
|
static void timeout2(void *parameter)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
rt_kprintf("one shot timer is timeout\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int timer_sample(void)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
/* 创建定时器1 周期定时器 */
|
||||||
|
|
||||||
|
timer1 = rt_timer_create("timer1", timeout1,
|
||||||
|
|
||||||
|
RT_NULL, 10,
|
||||||
|
|
||||||
|
RT_TIMER_FLAG_PERIODIC);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 启动定时器1 */
|
||||||
|
|
||||||
|
if (timer1 != RT_NULL)
|
||||||
|
|
||||||
|
rt_timer_start(timer1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 创建定时器2 单次定时器 */
|
||||||
|
|
||||||
|
timer2 = rt_timer_create("timer2", timeout2,
|
||||||
|
|
||||||
|
RT_NULL, 30,
|
||||||
|
|
||||||
|
RT_TIMER_FLAG_ONE_SHOT);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 启动定时器2 */
|
||||||
|
|
||||||
|
if (timer2 != RT_NULL)
|
||||||
|
|
||||||
|
rt_timer_start(timer2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* 导出到 msh 命令列表中 */
|
||||||
|
|
||||||
|
MSH_CMD_EXPORT(timer_sample, timer sample);
|
||||||
|
|
@ -502,7 +502,10 @@ static int pmsg(int argc, char **argv)
|
|||||||
|
|
||||||
MSH_CMD_EXPORT(pmsg, 打包文件。);
|
MSH_CMD_EXPORT(pmsg, 打包文件。);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 天通上电
|
||||||
|
* @param parameter
|
||||||
|
*/
|
||||||
void pwTT_thread_entry(void *parameter)
|
void pwTT_thread_entry(void *parameter)
|
||||||
{
|
{
|
||||||
// LOG_I("--%s--",parameter);
|
// LOG_I("--%s--",parameter);
|
||||||
|
@ -100,4 +100,6 @@ rt_uint8_t pack_File(const char *fin, rt_uint8_t flag, const rt_uint8_t (*dout)[
|
|||||||
//rt_uint8_t packMsgs(MSG *cfg, rt_uint8_t *din, size_t len, rt_uint8_t w, rt_uint8_t (*dout)[500], rt_uint8_t *arrlen);
|
//rt_uint8_t packMsgs(MSG *cfg, rt_uint8_t *din, size_t len, rt_uint8_t w, rt_uint8_t (*dout)[500], rt_uint8_t *arrlen);
|
||||||
|
|
||||||
|
|
||||||
|
void pwTT_thread_entry(void *parameter);
|
||||||
|
|
||||||
#endif /* APPLICATIONS_TTMSG_TTMSG_H_ */
|
#endif /* APPLICATIONS_TTMSG_TTMSG_H_ */
|
||||||
|
@ -52,15 +52,17 @@ static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
struct rx_msg msg;
|
||||||
|
extern struct rt_event update_cfg;
|
||||||
|
//static char rx_buffer[RT_SERIAL_RB_BUFSZ + 1];
|
||||||
static void serial_thread_entry(void *parameter)
|
static void serial_thread_entry(void *parameter)
|
||||||
{
|
{
|
||||||
struct rx_msg msg;
|
// struct rx_msg msg;
|
||||||
rt_err_t result;
|
rt_err_t result;
|
||||||
rt_uint32_t rx_length;
|
rt_uint32_t rx_length;
|
||||||
static char rx_buffer[RT_SERIAL_RB_BUFSZ + 1];
|
static char rx_buffer[RT_SERIAL_RB_BUFSZ + 1];
|
||||||
// extern struct rt_messagequeue update_cfg;
|
// extern struct rt_messagequeue update_cfg;
|
||||||
extern struct rt_event update_cfg;
|
// extern struct rt_event update_cfg;
|
||||||
// CFG_MSG cfg;
|
// CFG_MSG cfg;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
@ -74,12 +76,12 @@ static void serial_thread_entry(void *parameter)
|
|||||||
// LOG_I("updatecfg:%10s -->%s", cfg.key, cfg.value);
|
// LOG_I("updatecfg:%10s -->%s", cfg.key, cfg.value);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
rt_uint32_t e;
|
// rt_uint32_t e;
|
||||||
rt_err_t result = rt_event_recv(&update_cfg, CFGCHANGEED|MAXSIZEPERFILE, RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, &e);
|
// rt_err_t result = rt_event_recv(&update_cfg, CFGCHANGEED|MAXSIZEPERFILE, RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, &e);
|
||||||
if (result == RT_EOK)
|
// if (result == RT_EOK)
|
||||||
{
|
// {
|
||||||
LOG_I("updatecfg");
|
// LOG_I("updatecfg");
|
||||||
}
|
// }
|
||||||
result = rt_mq_recv(&rx_mq, &msg, sizeof(msg), RT_WAITING_FOREVER);
|
result = rt_mq_recv(&rx_mq, &msg, sizeof(msg), RT_WAITING_FOREVER);
|
||||||
if (result == RT_EOK)
|
if (result == RT_EOK)
|
||||||
{
|
{
|
||||||
@ -106,7 +108,11 @@ static void serial_thread_entry(void *parameter)
|
|||||||
/* 打印数据 */
|
/* 打印数据 */
|
||||||
rt_kprintf("%s\n",rx_buffer);
|
rt_kprintf("%s\n",rx_buffer);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
LOG_D("no data reced.");
|
||||||
|
}
|
||||||
rt_thread_mdelay(100);
|
rt_thread_mdelay(100);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,7 +155,7 @@ static int uart_dma_sample(int argc, char *argv[])
|
|||||||
rt_device_write(serial, 0, str, (sizeof(str) - 1));
|
rt_device_write(serial, 0, str, (sizeof(str) - 1));
|
||||||
|
|
||||||
/* 创建 serial 线程 */
|
/* 创建 serial 线程 */
|
||||||
rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024*1, 25+1, 10);
|
rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024*10, 25+1, 10);
|
||||||
/* 创建成功则启动线程 */
|
/* 创建成功则启动线程 */
|
||||||
if (thread != RT_NULL)
|
if (thread != RT_NULL)
|
||||||
{
|
{
|
||||||
|
9
applications/流程.md
Normal file
9
applications/流程.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
# main
|
||||||
|
1,等待事件,flag为 待发数据大小累计超minSizeToSend的设置值
|
||||||
|
或 sendInterval设置值到达
|
||||||
|
2,满足后上电
|
||||||
|
3,等待事件,flag为 TT连续5个周期为激活状态且信号强度不低于5
|
||||||
|
4,读入待发文件
|
||||||
|
5,发送
|
||||||
|
# ttcheck
|
@ -77,14 +77,17 @@ fcfg为配置项,长1字节,为**数据类型**、**压缩方式**、**加
|
|||||||
DATA_MODE=(1<<7),
|
DATA_MODE=(1<<7),
|
||||||
```
|
```
|
||||||
# 发送:
|
# 发送:
|
||||||
与天通设备进行通信,将打包后数据依次送出。
|
与TT设备进行通信,将打包后数据依次送出。
|
||||||
## 发送逻辑
|
## 发送逻辑
|
||||||
|
先依次检查发送条件,满足条件后开始发送,发送完毕后关闭TT设备
|
||||||
|
## 发送条件
|
||||||
### 软件条件
|
### 软件条件
|
||||||
待发数据大小累计超minSizeToSend的设置值
|
需求条件1:待发数据大小累计超minSizeToSend的设置值
|
||||||
sendInterval设置值到达
|
需求条件2:sendInterval设置值到达
|
||||||
|
以上任意条件满足则进入硬件条件检查
|
||||||
### 硬件条件
|
### 硬件条件
|
||||||
TT连续5个周期为激活状态且信号强度不低于5
|
需求条件1:TT连续5个周期为激活状态且信号强度不低于5。
|
||||||
|
软件条件满足后TT上电,MaxWaitTime内不达标则断电重启并重试MaxRetryCnt,如仍不成功则等待下次发送
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#define RT_HOOK_USING_FUNC_PTR
|
#define RT_HOOK_USING_FUNC_PTR
|
||||||
#define RT_USING_IDLE_HOOK
|
#define RT_USING_IDLE_HOOK
|
||||||
#define RT_IDLE_HOOK_LIST_SIZE 4
|
#define RT_IDLE_HOOK_LIST_SIZE 4
|
||||||
#define IDLE_THREAD_STACK_SIZE 256*2
|
#define IDLE_THREAD_STACK_SIZE 256*4
|
||||||
#define RT_USING_TIMER_SOFT
|
#define RT_USING_TIMER_SOFT
|
||||||
#define RT_TIMER_THREAD_PRIO 4
|
#define RT_TIMER_THREAD_PRIO 4
|
||||||
#define RT_TIMER_THREAD_STACK_SIZE 512
|
#define RT_TIMER_THREAD_STACK_SIZE 512
|
||||||
|
Loading…
Reference in New Issue
Block a user