更新eth相关配置
添加 getinfo.c 添加依赖包 cJSON-latest webclient-v2.2.0 322.54 KB/32.36 KB/67636
This commit is contained in:
parent
a7102ab2dc
commit
07b64425cd
268
applications/getinfo.c
Normal file
268
applications/getinfo.c
Normal file
@ -0,0 +1,268 @@
|
||||
#include <rtthread.h>
|
||||
//#include <../packages/webclient-v2.2.0/inc/webclient.h>
|
||||
#include <webclient.h>
|
||||
|
||||
#define LOG_TAG "getinfo"
|
||||
#define LOG_LVL LOG_LVL_DBG
|
||||
#include <ulog.h>
|
||||
|
||||
//#define HTTP_GET_URL "http://www.rt-thread.com/service/rt-thread.txt"
|
||||
#ifndef TT_IP
|
||||
#define TT_IP "http://192.168.0.232:4005"
|
||||
#endif
|
||||
#define TT_SIM TT_IP "/action/webGetSIMState"//SIM
|
||||
#define TT_XH TT_IP "/action/webGetTDSignal"//信号值
|
||||
#define TT_RW TT_IP "/action/webGetTdState"//入网
|
||||
#define TT_JH TT_IP "/action/webGetPSState"//激活
|
||||
#define TT_DW TT_IP "/action/webGetBDGPS"//定位
|
||||
//http://192.168.0.232:4005/action/webGetSIMState webGetBDGPS
|
||||
#include <cJSON.h>
|
||||
#include <finsh.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h> //用于strtod函数
|
||||
#include <string.h>
|
||||
|
||||
char *infoH[] = { TT_SIM, TT_XH, TT_RW, TT_JH, TT_DW};
|
||||
typedef struct
|
||||
{
|
||||
rt_uint8_t cnt;
|
||||
rt_uint8_t s;
|
||||
} CFG;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
rt_uint8_t sim; // SIM
|
||||
rt_uint8_t xh; // 信号值
|
||||
rt_uint8_t rw; // 入网
|
||||
rt_uint8_t jh; // 激活
|
||||
char *jd; // 经度
|
||||
char *wd; // 纬度
|
||||
char *ele; // 高度
|
||||
} TT;
|
||||
static TT tmp;
|
||||
static TT *TTinfo=&tmp;
|
||||
/**
|
||||
* @description: 将TT结构体转换为数组
|
||||
* @param {TT} *TTinfo TT结构体
|
||||
* @param {rt_uint8_t} *buffer 存储转换结果
|
||||
* @return {*} buffer大小
|
||||
*/
|
||||
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
|
||||
// 第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)
|
||||
+ (atoi(TTinfo->xh) > 31 ? 31 : atoi(TTinfo->xh)); // 位操作
|
||||
|
||||
char *jd_c = &TTinfo->jd[2]; // 从第二位开始取,去除非数字字符
|
||||
char *wd_c = &TTinfo->wd[2];
|
||||
float jd_f = strtod(jd_c, NULL); // 字符转浮点
|
||||
float wd_f = strtod(wd_c, NULL);
|
||||
rt_int8_t ele_f = atoi(TTinfo->ele);
|
||||
|
||||
// printf("jd--%f\nwd--%f\nele-- %d \n", jd_f, wd_f, ele_f);
|
||||
|
||||
rt_uint8_t offset = 0;
|
||||
memcpy(buffer + offset, &tmp, 1);
|
||||
offset += 1;
|
||||
memcpy(buffer + offset, &jd_f, sizeof(float));
|
||||
offset += sizeof(float);
|
||||
memcpy(buffer + offset, &wd_f, sizeof(float));
|
||||
offset += sizeof(float);
|
||||
memcpy(buffer + offset, &ele_f, sizeof(rt_int8_t));
|
||||
offset += sizeof(rt_int8_t);
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
|
||||
//TT TTinfo;
|
||||
//TTinfo = (TT*)malloc(sizeof(TT));
|
||||
|
||||
//TTinfo = &tmp;
|
||||
/* 数据解析 */
|
||||
static void tt_parse(rt_uint8_t *data)
|
||||
{
|
||||
extern TT *TTinfo;
|
||||
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);
|
||||
if (!root)
|
||||
{
|
||||
rt_kprintf("No memory for cJSON root!\n");
|
||||
return;
|
||||
}
|
||||
object = cJSON_GetObjectItem(root, "data");
|
||||
|
||||
item = cJSON_GetObjectItem(object, "tdsignal");
|
||||
if (item)
|
||||
{
|
||||
TTinfo->xh = atoi(item->valuestring);
|
||||
// tmp.xh = item->valuestring;
|
||||
// strcpy(TTinfo->xh,item->valuestring);
|
||||
// rt_kprintf("\nxh:%s ", item->valuestring);
|
||||
// rt_kprintf("\nxh:%s ", TTinfo->xh);
|
||||
cJSON_Delete(root);
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
item = cJSON_GetObjectItem(object, "tdnetregstate");
|
||||
if (item)
|
||||
{
|
||||
TTinfo->rw = atoi(item->valuestring);
|
||||
// rt_kprintf("\nrw:%s ", TTinfo.rw);
|
||||
cJSON_Delete(root);
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
item = cJSON_GetObjectItem(object, "tdpsstate");
|
||||
if (item)
|
||||
{
|
||||
TTinfo->jh = atoi(item->valuestring);
|
||||
// rt_kprintf("\njh:%s ", TTinfo.jh);
|
||||
cJSON_Delete(root);
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
item = cJSON_GetObjectItem(object, "latitude");
|
||||
if (item)
|
||||
{
|
||||
TTinfo->wd = item->valuestring;
|
||||
|
||||
item = cJSON_GetObjectItem(object, "longitude");
|
||||
TTinfo->jd = item->valuestring;
|
||||
|
||||
item = cJSON_GetObjectItem(object, "elevation");
|
||||
TTinfo->ele = item->valuestring;
|
||||
// rt_kprintf("%5s%5s%5s%5s%15s%15s%10s\n", TTinfo->sim, TTinfo->xh, TTinfo->rw,
|
||||
// TTinfo->jh, TTinfo->jd, TTinfo->wd,TTinfo->ele);
|
||||
|
||||
cJSON_Delete(root);
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
item = cJSON_GetObjectItem(object, "tdsimstate");
|
||||
if (item)
|
||||
{
|
||||
TTinfo->sim = atoi(item->valuestring);
|
||||
// tmp.sim = item->valuestring;
|
||||
// strcpy(TTinfo.sim,item->valuestring)
|
||||
// rt_kprintf("\nSIM:%s \n", TTinfo->sim);
|
||||
cJSON_Delete(root);
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
if (root != RT_NULL)
|
||||
cJSON_Delete(root);
|
||||
}
|
||||
|
||||
/* HTTP client download data by GET request */
|
||||
static int webclient_get_data(const char *url)
|
||||
{
|
||||
unsigned char *buffer = RT_NULL;
|
||||
size_t length = 0;
|
||||
|
||||
if (webclient_request(url, RT_NULL, RT_NULL, 0, (void **) &buffer, &length) < 0)
|
||||
{
|
||||
LOG_E("TT server is not ready.");
|
||||
return -RT_ERROR;
|
||||
}
|
||||
|
||||
// LOG_D("webclient GET request response data :");
|
||||
// LOG_D("%s", buffer);
|
||||
|
||||
tt_parse(buffer);
|
||||
if (buffer)
|
||||
{
|
||||
web_free(buffer);
|
||||
}
|
||||
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
void getTTinfo_thread_entry(void* parameter)
|
||||
{
|
||||
|
||||
CFG* cfg = RT_NULL;
|
||||
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 (var = 0; var < isize; var++)//轮询每个参数
|
||||
{
|
||||
char *url = RT_NULL;
|
||||
url = web_strdup(*(infoH + var));
|
||||
if (url == RT_NULL)
|
||||
{
|
||||
rt_kprintf("no memory for create getTT url buffer.\n");
|
||||
return -RT_ENOMEM;
|
||||
}
|
||||
webclient_get_data(url);
|
||||
web_free(url);
|
||||
}
|
||||
// rt_kprintf("%5d++%5d --%5d\n",TTinfo->xh,tmp.xh,TTinfo->sim);
|
||||
// rt_kprintf("%5d%5d%5d%5d%15s%15s%10s\n", TTinfo.sim, TTinfo.xh, TTinfo.rw, TTinfo.jh, TTinfo.jd, 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)//最后一次采集不延时
|
||||
{
|
||||
rt_thread_mdelay(cfg->s * 1000);
|
||||
}
|
||||
}
|
||||
rt_kprintf("%10s%s\n", " ", "↑---------getTT DONE.---------↑");
|
||||
}
|
||||
|
||||
void getTT(int argc, char **argv)
|
||||
{
|
||||
// size_t cnt = 0, s=3;//次数、间隔
|
||||
static CFG cfg;
|
||||
memset(&cfg, 0, sizeof(CFG));
|
||||
if (argc == 1)
|
||||
{
|
||||
cfg.cnt = 1;
|
||||
cfg.s = 3;
|
||||
}
|
||||
else if (argc == 2)
|
||||
{
|
||||
cfg.cnt = atoi(argv[1]);
|
||||
cfg.s = 3;
|
||||
}
|
||||
else if (argc == 3)
|
||||
{
|
||||
cfg.cnt = atoi(argv[1]);
|
||||
cfg.s = atoi(argv[2]);
|
||||
}
|
||||
|
||||
// LOG_D("cnt-%d",cfg.cnt);
|
||||
// LOG_D("s-%d",cfg.s);
|
||||
|
||||
/* 创建 serial 线程 */
|
||||
rt_thread_t thread = rt_thread_create("getTT", getTTinfo_thread_entry, (void *) &cfg, 1024 * 3, 25, 10);
|
||||
/* 创建成功则启动线程 */
|
||||
if (thread != RT_NULL)
|
||||
{
|
||||
rt_thread_startup(thread);
|
||||
// rt_kprintf("done");
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_E("thread 'getTT' create failure.");
|
||||
return RT_ERROR;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* 导出到自动初始化 */
|
||||
MSH_CMD_EXPORT(getTT, 获取天通信息,支持参数。 "getTT 3 1" means try 3 times with 1 second interval.);
|
||||
//MSH_CMD_EXPORT_ALIAS(webclient_get_data, gTTinfo, GET info of TT server.);
|
@ -78,5 +78,6 @@ static int iwdg_sample(int argc, char *argv[])
|
||||
return ret;
|
||||
}
|
||||
/* 导出到 msh 命令列表中 */
|
||||
MSH_CMD_EXPORT(iwdg_sample, iwdg sample);
|
||||
//MSH_CMD_EXPORT(iwdg_sample, iwdg sample);
|
||||
/* 导出到自动初始化 */
|
||||
INIT_DEVICE_EXPORT(iwdg_sample);
|
||||
|
@ -81,7 +81,7 @@ int led_sample(int argc, char *argv[])
|
||||
return ret;
|
||||
}
|
||||
/* 导出到 msh 命令列表中 */
|
||||
MSH_CMD_EXPORT(led_sample, led sample);
|
||||
//MSH_CMD_EXPORT(led_sample, led sample);
|
||||
/* 导出到自动初始化 */
|
||||
//INIT_COMPONENT_EXPORT(led_sample);
|
||||
|
||||
|
@ -36,7 +36,7 @@ int main(void)
|
||||
rt_pin_mode(LED_HEART, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(ETH_RESET_PIN, PIN_MODE_OUTPUT);
|
||||
|
||||
rt_pin_write(ETH_RESET_PIN, PIN_LOW);//关闭ETH
|
||||
// rt_pin_write(ETH_RESET_PIN, PIN_LOW);//关闭ETH
|
||||
|
||||
|
||||
while (1)
|
||||
|
18
rtconfig.h
18
rtconfig.h
@ -71,7 +71,7 @@
|
||||
#define FINSH_THREAD_PRIORITY 20
|
||||
#define FINSH_THREAD_STACK_SIZE 4096
|
||||
#define FINSH_USING_HISTORY
|
||||
#define FINSH_HISTORY_LINES 5
|
||||
#define FINSH_HISTORY_LINES 10
|
||||
#define FINSH_USING_SYMTAB
|
||||
#define FINSH_CMD_SIZE 80
|
||||
#define MSH_USING_BUILT_IN_COMMANDS
|
||||
@ -141,10 +141,17 @@
|
||||
|
||||
/* Network */
|
||||
|
||||
#define RT_USING_NETDEV
|
||||
#define NETDEV_USING_IFCONFIG
|
||||
#define NETDEV_USING_PING
|
||||
#define NETDEV_IPV4 1
|
||||
#define NETDEV_IPV6 0
|
||||
#define RT_USING_LWIP
|
||||
#define RT_USING_LWIP212
|
||||
#define RT_USING_LWIP_VER_NUM 0x20102
|
||||
#define RT_LWIP_MEM_ALIGNMENT 4
|
||||
#define RT_LWIP_ICMP
|
||||
#define RT_LWIP_DNS
|
||||
|
||||
/* Static IPv4 Address */
|
||||
|
||||
@ -152,7 +159,9 @@
|
||||
#define RT_LWIP_GWADDR "192.168.0.1"
|
||||
#define RT_LWIP_MSKADDR "255.255.255.0"
|
||||
/* end of Static IPv4 Address */
|
||||
#define RT_LWIP_UDP
|
||||
#define RT_LWIP_TCP
|
||||
#define RT_LWIP_RAW
|
||||
#define RT_MEMP_NUM_NETCONN 4
|
||||
#define RT_LWIP_PBUF_NUM 4
|
||||
#define RT_LWIP_RAW_PCB_NUM 4
|
||||
@ -175,6 +184,7 @@
|
||||
#define LWIP_SO_RCVBUF 1
|
||||
#define LWIP_SO_LINGER 0
|
||||
#define LWIP_NETIF_LOOPBACK 0
|
||||
#define RT_LWIP_USING_PING
|
||||
/* end of Network */
|
||||
|
||||
/* Utilities */
|
||||
@ -203,6 +213,10 @@
|
||||
|
||||
/* IoT - internet of things */
|
||||
|
||||
#define PKG_USING_WEBCLIENT
|
||||
#define WEBCLIENT_NOT_USE_TLS
|
||||
#define PKG_USING_WEBCLIENT_V220
|
||||
#define PKG_WEBCLIENT_VER_NUM 0x20200
|
||||
|
||||
/* Wi-Fi */
|
||||
|
||||
@ -228,6 +242,8 @@
|
||||
|
||||
/* JSON: JavaScript Object Notation, a lightweight data-interchange format */
|
||||
|
||||
#define PKG_USING_CJSON
|
||||
#define PKG_USING_CJSON_LATEST_VERSION
|
||||
/* end of JSON: JavaScript Object Notation, a lightweight data-interchange format */
|
||||
|
||||
/* XML: Extensible Markup Language */
|
||||
|
Loading…
Reference in New Issue
Block a user