添加appendInfo函数
更新getLoc函数
This commit is contained in:
parent
5e48663d0b
commit
3d9fb6a6bc
@ -265,7 +265,7 @@ static int getAndCheckLoc(uint8_t *dout, size_t pairCnt)
|
||||
size_t cnt = getLoc(loc,pairCnt);
|
||||
while (!cnt)
|
||||
{
|
||||
static i=0;
|
||||
static uint8_t i=0;
|
||||
LOG_W("位置信息还未准备好。");
|
||||
rt_thread_mdelay(4000);//状态数据默认3s更新一次
|
||||
cnt = getLoc(loc,pairCnt);
|
||||
|
@ -10,6 +10,7 @@
|
||||
#define LOG_LVL LOG_LVL_INFO
|
||||
#include <ulog.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <cJSON.h>
|
||||
#include <usrcfg.h>
|
||||
|
||||
@ -50,14 +51,12 @@ typedef struct
|
||||
// char *ele; // 高度
|
||||
}TT;
|
||||
|
||||
TT tmp={.sim="-",.xh="-",.jh="-",.jd="-",.wd="-",.ele="-"};
|
||||
//memset(&tmp,0x00,sizeof(TT));
|
||||
TT tmp={.sim="-",.xh="-",.rw="-",.jh="-",.jd="-",.wd="-",.ele="-"};
|
||||
TT *TTinfo=&tmp;
|
||||
static rt_tick_t bootstamp=0;
|
||||
#define RST_LEN 100//存储info的数组的长度
|
||||
static uint8_t rstInfo[RST_LEN];//存储info的数组
|
||||
|
||||
//rt_memset(TTinfo,0,sizeof(TT));
|
||||
//TT *TTinfo=RT_NULL;
|
||||
//TTinfo = rt_malloc(sizeof(TT));
|
||||
/**
|
||||
* @description: 将TT结构体转换为数组
|
||||
* @param {TT} *TTinfo TT结构体
|
||||
@ -68,7 +67,7 @@ rt_uint8_t info2HEX(TT *TTinfo, rt_uint8_t *buffer)
|
||||
{
|
||||
// 功能:将tt数据转换为9字节HEX数据并返回,存在data
|
||||
// 第1节为高3位分别为sim、rw和jh,其余位为xh,xh值若大于31则为31(31=b0001 1111)
|
||||
// 第2-5字节为经度。114.410050= 0xF2 0xD1 0xE4 0x42
|
||||
// 第2-5字节为经度。114.410050= 0xF2 0xD1 0xE4 0x42//根据系统大小端的不同可能是反序
|
||||
// 第6-9字节为纬度。30.426840= 0x2B 0x6A 0xF3 0x41
|
||||
// 第10字节为高度,只保留整数。-31.5= 0x0A
|
||||
rt_uint8_t tmp = (atoi(TTinfo->sim) << 7) + (atoi(TTinfo->rw) << 6) + (atoi(TTinfo->jh) << 5)
|
||||
@ -95,7 +94,47 @@ rt_uint8_t info2HEX(TT *TTinfo, rt_uint8_t *buffer)
|
||||
return offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将新采集到的数据压入结果数组中。采用固定长度的队列方式压入,空间不足时自动弹出最旧的数据
|
||||
*
|
||||
* @param rst 存储采集结果的数组
|
||||
* @param cnt 数组长度
|
||||
* @param din 新采集的数据
|
||||
* @param len 数据长度
|
||||
* @return size_t 0-正常,-1异常
|
||||
*/
|
||||
int appendInfo(uint8_t *rst, size_t cnt, uint8_t *din, size_t len )
|
||||
{
|
||||
if (cnt < len)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint8_t tmp[cnt];
|
||||
memcpy(tmp, rst + len, cnt - len);
|
||||
memcpy(rst, tmp, cnt - len);
|
||||
|
||||
memcpy(rst + cnt - len, din, len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前经纬度信息
|
||||
* @param dout 存储结果的数组
|
||||
* @param cnt 获取几组位置数据
|
||||
* @return 数组长度。0表示位置数据未准备好。
|
||||
*/
|
||||
int getLoc(uint8_t * dout, size_t cnt)
|
||||
{
|
||||
// LOG_D("待实现获取位置函数,此处以0xCD代替");
|
||||
// uint8_t tmp[200];
|
||||
// memset(tmp,0xCD,200);
|
||||
if (rstInfo[RST_LEN-1] == 0x3f) {
|
||||
return 0;
|
||||
}
|
||||
memcpy(dout,rstInfo+RST_LEN-cnt*10,cnt*10);//从后开始取
|
||||
return cnt*10;//1+4+4+1
|
||||
}
|
||||
|
||||
static int minTTPeriCnt=5;
|
||||
static int minTTsinal=3;
|
||||
@ -296,35 +335,10 @@ void getTTinfo_thread_entry(void* parameter)
|
||||
cfg = (CFG*) parameter;
|
||||
// TT TTinfo;
|
||||
|
||||
rt_uint8_t var = 0, isize = 0, i = 0;
|
||||
isize = sizeof(infoH) / sizeof(infoH[0]);
|
||||
rt_kprintf("\n%10s%s\n", " ", "↓---------getTT START.--------↓");
|
||||
rt_kprintf("%5s%5s%5s%5s%15s%15s%10s\n", "SIM", "xh", "rw", "jh", "N", "E", "ele");
|
||||
for (i = 0; i < cfg->cnt; ++i) //按指定次数轮询
|
||||
for (uint8_t i = 0; i < cfg->cnt; ++i) //按指定次数轮询
|
||||
{
|
||||
// for (var = 0; var < isize; var++) //轮询每个参数
|
||||
// {
|
||||
// static char *url = RT_NULL;
|
||||
// url = web_strdup(*(infoH + var));
|
||||
// if (url == RT_NULL)
|
||||
// {
|
||||
// LOG_E("no memory for create getTT url buffer.\n");
|
||||
//// return -RT_ENOMEM;
|
||||
// }
|
||||
// if (webclient_get_data(url) != RT_EOK)
|
||||
// {
|
||||
// strcpy(TTinfo->sim,"-");
|
||||
// strcpy(TTinfo->xh,"-");
|
||||
// strcpy(TTinfo->jh,"-");
|
||||
// strcpy(TTinfo->jd,"-");
|
||||
// strcpy(TTinfo->wd,"-");
|
||||
// strcpy(TTinfo->ele,"-");
|
||||
// break;
|
||||
// }
|
||||
// web_free(url);
|
||||
// rt_thread_mdelay(100);
|
||||
// }
|
||||
// rulecheck();
|
||||
rt_kprintf("%5s%5s%5s%5s%15s%15s%10s\n", TTinfo->sim, TTinfo->xh, TTinfo->rw, TTinfo->jh, TTinfo->jd,
|
||||
TTinfo->wd, TTinfo->ele);
|
||||
if (i != cfg->cnt - 1) //最后一次采集不延时
|
||||
@ -410,6 +424,11 @@ void repGetTT_thread_entry(void* parameter)
|
||||
}
|
||||
web_free(url);
|
||||
// rt_thread_mdelay(100);
|
||||
|
||||
//trans© new info to arrBuf
|
||||
uint8_t buffer[10];
|
||||
int len = info2HEX(TTinfo, buffer);
|
||||
appendInfo(rstInfo, RST_LEN, buffer, len);
|
||||
}
|
||||
rulecheck();
|
||||
rt_thread_mdelay(3 * 1000);//间隔3s更新一次数据
|
||||
@ -421,6 +440,7 @@ void repGetTT_thread_entry(void* parameter)
|
||||
*/
|
||||
void repGetTT(void)
|
||||
{
|
||||
memset(rstInfo,0x3f,RST_LEN);//初始化
|
||||
/* 创建 serial 线程 */
|
||||
rt_thread_t thread = rt_thread_create("repGetTT", repGetTT_thread_entry, RT_NULL, 1024 * 3, 27, 10);
|
||||
/* 创建成功则启动线程 */
|
||||
|
Loading…
Reference in New Issue
Block a user