update stm32wl project
This commit is contained in:
@@ -50,9 +50,11 @@ extern "C" {
|
||||
|
||||
extern UART_HandleTypeDef huart1;
|
||||
extern UART_HandleTypeDef huart2;
|
||||
extern UART_HandleTypeDef hlpuart1;
|
||||
|
||||
void MX_USART1_UART_Init(void);
|
||||
void MX_USART2_UART_Init(void);
|
||||
void MX_LPUART1_UART_Init(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@@ -30,6 +30,7 @@ void board_init(void)
|
||||
HAL_Init();
|
||||
SystemClock_Config();
|
||||
MX_USART1_UART_Init();
|
||||
//MX_LPUART1_UART_Init();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -25,8 +25,10 @@
|
||||
/* External variables --------------------------------------------------------*/
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
|
||||
uint8_t msg;
|
||||
uint8_t pm2d5_byte_data;
|
||||
uint8_t data;
|
||||
|
||||
UART_HandleTypeDef hlpuart1;
|
||||
UART_HandleTypeDef huart1;
|
||||
UART_HandleTypeDef huart2;
|
||||
|
||||
@@ -35,6 +37,27 @@ UART_HandleTypeDef huart2;
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Functions Definition ------------------------------------------------------*/
|
||||
void MX_LPUART1_UART_Init(void)
|
||||
{
|
||||
|
||||
hlpuart1.Instance = LPUART1;
|
||||
hlpuart1.Init.BaudRate = 115200;
|
||||
hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
|
||||
hlpuart1.Init.StopBits = UART_STOPBITS_1;
|
||||
hlpuart1.Init.Parity = UART_PARITY_NONE;
|
||||
hlpuart1.Init.Mode = UART_MODE_TX_RX;
|
||||
hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
if (HAL_UART_Init(&hlpuart1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
HAL_UART_Receive_IT(&hlpuart1, &data, 1);
|
||||
/* USER CODE BEGIN LPUART1_Init 2 */
|
||||
/* USER CODE END LPUART1_Init 2 */
|
||||
|
||||
}
|
||||
|
||||
void MX_USART1_UART_Init(void)
|
||||
{
|
||||
@@ -71,15 +94,36 @@ void MX_USART2_UART_Init(void)
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
HAL_UART_Receive_IT(&huart2, &msg, 1);
|
||||
HAL_UART_Receive_IT(&huart2, &pm2d5_byte_data, 1);
|
||||
}
|
||||
|
||||
void HAL_UART_MspInit(UART_HandleTypeDef *uartHandle)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||
|
||||
if(uartHandle->Instance==USART2)
|
||||
if(uartHandle->Instance==LPUART1)
|
||||
{
|
||||
__HAL_RCC_LPUART1_CLK_ENABLE();
|
||||
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||
/**LPUART1 GPIO Configuration
|
||||
PC0 ------> LPUART1_RX
|
||||
PC1 ------> LPUART1_TX
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
|
||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||
|
||||
/* LPUART1 interrupt Init */
|
||||
HAL_NVIC_SetPriority(LPUART1_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(LPUART1_IRQn);
|
||||
/* USER CODE BEGIN LPUART1_MspInit 1 */
|
||||
|
||||
/* USER CODE END LPUART1_MspInit 1 */
|
||||
}
|
||||
else if(uartHandle->Instance==USART2)
|
||||
{
|
||||
/* USER CODE BEGIN USART2_MspInit 0 */
|
||||
|
||||
|
@@ -16,7 +16,7 @@
|
||||
<TargetCommonOption>
|
||||
<Device>STM32WLE5JCIx</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32WLxx_DFP.1.0.2.OEM</PackID>
|
||||
<PackID>Keil.STM32WLxx_DFP.1.0.7</PackID>
|
||||
<PackURL>http://www.keil.com/pack</PackURL>
|
||||
<Cpu>IRAM(0x20000000,0x10000) IROM(0x08000000,0x40000) CPUTYPE("Cortex-M4") CLOCK(12000000) ELITTLE</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
|
@@ -1,30 +1,194 @@
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "timer.h"
|
||||
#include "app_system.h"
|
||||
#include "app_lorawan.h"
|
||||
#include "stm32_lpm.h"
|
||||
|
||||
#include "adc_if.h"
|
||||
#include "lorawan_version.h"
|
||||
|
||||
#include <tos_k.h>
|
||||
#include "sensor_parser.h"
|
||||
#include "pm2d5_parser.h"
|
||||
#include "tos_k.h"
|
||||
#include "esp8266_tencent_firmware.h"
|
||||
#include "tencent_firmware_module_wrapper.h"
|
||||
#include "math.h"
|
||||
|
||||
//#define USE_WIFI
|
||||
|
||||
#define APP_TX_DUTYCYCLE 30000 //ms
|
||||
#define LORAWAN_DOWNLINK_PORT 2
|
||||
#define LORAWAN_UPLINK_PORT 10
|
||||
|
||||
#define WIFI_SSID "TencentOS"
|
||||
#define WIFI_PASSWD "tencentostiny"
|
||||
#define PRODUCT_ID "ZLC54JVTAH"
|
||||
#define DEVICE_NAME "node_20DEBC0A0000"
|
||||
#define DEVICE_KEY "QXiswx4I1T+bZyHOrHvaqg=="
|
||||
|
||||
|
||||
#define REPORT_DATA_TEMPLATE "{\"method\":\"report\",\"clientToken\":\"%s\"," \
|
||||
"\"params\":{\"a\":%d," \
|
||||
"\"b\":%d," \
|
||||
"\"c\":%d," \
|
||||
"\"d\":%d," \
|
||||
"\"e\":%d," \
|
||||
"\"f\":%d," \
|
||||
"\"g\":%d," \
|
||||
"\"h\":%d," \
|
||||
"\"i\":%d," \
|
||||
"\"j\":%d," \
|
||||
"\"k\":%d," \
|
||||
"\"l\":%d," \
|
||||
"\"v\":%d," \
|
||||
"\"ec\":%d" \
|
||||
"}}"
|
||||
|
||||
void default_message_handler(mqtt_message_t* msg)
|
||||
{
|
||||
printf("callback:\r\n");
|
||||
printf("---------------------------------------------------------\r\n");
|
||||
printf("\ttopic:%s\r\n", msg->topic);
|
||||
printf("\tpayload:%s\r\n", msg->payload);
|
||||
printf("---------------------------------------------------------\r\n");
|
||||
}
|
||||
|
||||
char payload[1024] = {0};
|
||||
static char report_topic_name[TOPIC_NAME_MAX_SIZE] = {0};
|
||||
static char report_reply_topic_name[TOPIC_NAME_MAX_SIZE] = {0};
|
||||
|
||||
k_mail_q_t mail_q;
|
||||
#define DATA_CNT 26
|
||||
uint8_t mail_buf[DATA_CNT];
|
||||
pm2d5_data_u pm2d5_value;
|
||||
uint8_t pm2d5_value_pool[3 * sizeof(pm2d5_data_u)];
|
||||
|
||||
void generate_client_token(char* buffer, size_t size)
|
||||
{
|
||||
long client_token_value;
|
||||
|
||||
memset(buffer, 0, size);
|
||||
client_token_value = ((long)tos_systick_get()) % (long)(pow(10, size));
|
||||
snprintf(buffer, size, "%ld", client_token_value);
|
||||
}
|
||||
|
||||
typedef struct device_data_st {
|
||||
uint8_t data[DATA_CNT];
|
||||
} __PACKED__ dev_data_t;
|
||||
void mqtt_demo_task(void)
|
||||
{
|
||||
int ret = 0;
|
||||
int size = 0;
|
||||
int i = 0;
|
||||
char *product_id = PRODUCT_ID;
|
||||
char *device_name = DEVICE_NAME;
|
||||
char *key = DEVICE_KEY;
|
||||
|
||||
device_info_t dev_info;
|
||||
memset(&dev_info, 0, sizeof(device_info_t));
|
||||
char str[16];
|
||||
size_t mail_size;
|
||||
uint8_t report_error_count = 0;
|
||||
char client_token[10];
|
||||
|
||||
/**
|
||||
* Please Choose your AT Port first, default is HAL_UART_2(USART2)
|
||||
*/
|
||||
ret = esp8266_tencent_firmware_sal_init(HAL_UART_PORT_0);
|
||||
|
||||
if (ret < 0) {
|
||||
printf("esp8266 tencent firmware sal init fail, ret is %d\r\n", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
if ( esp8266_tencent_firmware_join_ap(WIFI_SSID, WIFI_PASSWD) == 0) {
|
||||
printf("module WIFI connect success\n");
|
||||
break;
|
||||
}
|
||||
printf("module WIFI connect fail\n");
|
||||
tos_sleep_ms(2000);
|
||||
}
|
||||
|
||||
strncpy(dev_info.product_id, product_id, PRODUCT_ID_MAX_SIZE);
|
||||
strncpy(dev_info.device_name, device_name, DEVICE_NAME_MAX_SIZE);
|
||||
strncpy(dev_info.device_serc, key, DEVICE_SERC_MAX_SIZE);
|
||||
tos_tf_module_info_set(&dev_info, TLS_MODE_PSK);
|
||||
mqtt_param_t init_params = DEFAULT_MQTT_PARAMS;
|
||||
while (1) {
|
||||
if (tos_tf_module_mqtt_conn(init_params) == 0) {
|
||||
printf("module mqtt connect success\n");
|
||||
break;
|
||||
}
|
||||
printf("module mqtt connect fail\n");
|
||||
tos_sleep_ms(5000);
|
||||
}
|
||||
|
||||
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>topic */
|
||||
size = snprintf(report_reply_topic_name, TOPIC_NAME_MAX_SIZE, "$thing/down/property/%s/%s", product_id, device_name);
|
||||
|
||||
if (size < 0 || size > sizeof(report_reply_topic_name) - 1) {
|
||||
printf("sub topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(report_reply_topic_name));
|
||||
}
|
||||
if (tos_tf_module_mqtt_sub(report_reply_topic_name, QOS0, default_message_handler) != 0) {
|
||||
printf("module mqtt sub fail\n");
|
||||
} else {
|
||||
printf("module mqtt sub success\n");
|
||||
}
|
||||
|
||||
memset(report_topic_name, 0, sizeof(report_topic_name));
|
||||
size = snprintf(report_topic_name, TOPIC_NAME_MAX_SIZE, "$thing/up/property/%s/%s", product_id, device_name);
|
||||
|
||||
if (size < 0 || size > sizeof(report_topic_name) - 1) {
|
||||
printf("pub topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(report_topic_name));
|
||||
}
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
tos_mail_q_create(&mail_q, pm2d5_value_pool, 3, sizeof(pm2d5_data_u));
|
||||
|
||||
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
||||
|
||||
if (pm2d5_parser_init() == -1) {
|
||||
printf("pm2d5 parser init fail\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
/* ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> */
|
||||
HAL_NVIC_EnableIRQ(USART2_IRQn);
|
||||
tos_mail_q_pend(&mail_q, (uint8_t*)&pm2d5_value, &mail_size, TOS_TIME_FOREVER);
|
||||
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
||||
|
||||
//<2F>յ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1>Ϣ
|
||||
printf("\r\n\r\n\r\n");
|
||||
for (i = 0; i < 13; i++) {
|
||||
printf("data[%d]:%d ug/m3\r\n", i+1, pm2d5_value.data[i]);
|
||||
}
|
||||
|
||||
|
||||
/* <20>ϱ<EFBFBD>ֵ */
|
||||
generate_client_token(client_token, sizeof(client_token));
|
||||
memset(payload, 0, 1024);
|
||||
snprintf(payload, 1024, REPORT_DATA_TEMPLATE, client_token,
|
||||
pm2d5_value.pm2d5_data.data1, pm2d5_value.pm2d5_data.data2,
|
||||
pm2d5_value.pm2d5_data.data3, pm2d5_value.pm2d5_data.data4,
|
||||
pm2d5_value.pm2d5_data.data5, pm2d5_value.pm2d5_data.data6,
|
||||
pm2d5_value.pm2d5_data.data7, pm2d5_value.pm2d5_data.data8,
|
||||
pm2d5_value.pm2d5_data.data9, pm2d5_value.pm2d5_data.data10,
|
||||
pm2d5_value.pm2d5_data.data11, pm2d5_value.pm2d5_data.data12,
|
||||
2, pm2d5_value.pm2d5_data.err_code);
|
||||
|
||||
if (tos_tf_module_mqtt_publ(report_topic_name, QOS0, payload) != 0) {
|
||||
report_error_count++;
|
||||
printf("module mqtt publ fail, count: %d\n", report_error_count);
|
||||
sprintf(str, "# report fail");
|
||||
} else {
|
||||
report_error_count = 0;
|
||||
printf("module mqtt publ success\n");
|
||||
sprintf(str, "# report ok");
|
||||
}
|
||||
|
||||
if (report_error_count >= 6) {
|
||||
HAL_NVIC_SystemReset();
|
||||
}
|
||||
|
||||
tos_sleep_ms(5000);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* user main_callback function declare , you need to implement them
|
||||
@@ -110,10 +274,6 @@ void MX_LoRaWAN_Init(void)
|
||||
printf("lorawan init ok.\r\n");
|
||||
}
|
||||
|
||||
uint8_t pool[DATA_CNT];
|
||||
#define CMD_LEN_MAX 50
|
||||
char cmd_buf[CMD_LEN_MAX];
|
||||
dev_data_t dev_data;
|
||||
|
||||
uint16_t report_period = 10;
|
||||
|
||||
@@ -143,13 +303,25 @@ void recv_callback(uint8_t *data, uint8_t len)
|
||||
|
||||
void application_entry(void *arg)
|
||||
{
|
||||
|
||||
#ifdef USE_WIFI
|
||||
mqtt_demo_task();
|
||||
while (1) {
|
||||
printf("This is a mqtt demo!\r\n");
|
||||
tos_task_delay(1000);
|
||||
}
|
||||
#else
|
||||
int i = 0;
|
||||
int ret = 0;
|
||||
int send_failed_count = 0;
|
||||
size_t mail_size;
|
||||
tos_mail_q_create(&mail_q, pm2d5_value_pool, 3, sizeof(pm2d5_data_u));
|
||||
|
||||
tos_mail_q_create(&mail_q, pool, DATA_CNT, sizeof(uint8_t));
|
||||
tos_shell_init(cmd_buf, sizeof(cmd_buf), uart_output);
|
||||
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
||||
|
||||
if (pm2d5_parser_init() == -1) {
|
||||
printf("pm2d5 parser init fail\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
//create task to process loramac
|
||||
tos_sem_create_max(&lora_mac_process_sem, 0, 1);
|
||||
@@ -164,17 +336,21 @@ void application_entry(void *arg)
|
||||
|
||||
//report pm2.5 data
|
||||
while (1) {
|
||||
size_t mail_size;
|
||||
|
||||
tos_mail_q_pend(&mail_q, &dev_data.data, &mail_size, TOS_TIME_FOREVER);
|
||||
HAL_NVIC_EnableIRQ(USART2_IRQn);
|
||||
tos_mail_q_pend(&mail_q, (uint8_t*)&pm2d5_value, &mail_size, TOS_TIME_FOREVER);
|
||||
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
||||
//<2F>յ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1>Ϣ
|
||||
printf("\r\n\r\n\r\n");
|
||||
for (i = 0; i < 13; i++) {
|
||||
printf("data[%d]:%d ug/m3\r\n", i+1, pm2d5_value.data[i]);
|
||||
}
|
||||
|
||||
/*fill the data*/
|
||||
i = 0;
|
||||
app_data.port = LORAWAN_UPLINK_PORT;
|
||||
|
||||
for (i = 0; i < mail_size; i++) {
|
||||
app_data.buff[i] = dev_data.data[i];
|
||||
printf("[%d] %x\n", i, dev_data.data[i]);
|
||||
app_data.buff[i] = pm2d5_value.data[i];
|
||||
}
|
||||
printf("\n\n");
|
||||
app_data.size = i;
|
||||
@@ -209,6 +385,7 @@ void application_entry(void *arg)
|
||||
}
|
||||
|
||||
//Lora_start_send();
|
||||
#endif
|
||||
}
|
||||
|
||||
void Lora_start_send(void)
|
||||
|
@@ -0,0 +1,193 @@
|
||||
#include "tos_k.h"
|
||||
#include "esp8266_tencent_firmware.h"
|
||||
#include "tencent_firmware_module_wrapper.h"
|
||||
#include "pm2d5_parser.h"
|
||||
#include "math.h"
|
||||
|
||||
#define WIFI_SSID "Tencent-GuestWiFi"
|
||||
#define WIFI_PASSWD ""
|
||||
#define PRODUCT_ID "ZLC54JVTAH"
|
||||
#define DEVICE_NAME "node_20DEBC0A0000"
|
||||
#define DEVICE_KEY "QXiswx4I1T+bZyHOrHvaqg=="
|
||||
|
||||
|
||||
#define REPORT_DATA_TEMPLATE "{\"method\":\"report\",\"clientToken\":\"%s\"," \
|
||||
"\"params\":{\"a\":%d," \
|
||||
"\"b\":%d," \
|
||||
"\"c\":%d," \
|
||||
"\"d\":%d," \
|
||||
"\"e\":%d," \
|
||||
"\"f\":%d," \
|
||||
"\"g\":%d," \
|
||||
"\"h\":%d," \
|
||||
"\"i\":%d," \
|
||||
"\"j\":%d," \
|
||||
"\"k\":%d," \
|
||||
"\"l\":%d," \
|
||||
"\"v\":%d," \
|
||||
"\"ec\":%d" \
|
||||
"}}"
|
||||
|
||||
void default_message_handler(mqtt_message_t* msg)
|
||||
{
|
||||
printf("callback:\r\n");
|
||||
printf("---------------------------------------------------------\r\n");
|
||||
printf("\ttopic:%s\r\n", msg->topic);
|
||||
printf("\tpayload:%s\r\n", msg->payload);
|
||||
printf("---------------------------------------------------------\r\n");
|
||||
}
|
||||
|
||||
char payload[1024] = {0};
|
||||
static char report_topic_name[TOPIC_NAME_MAX_SIZE] = {0};
|
||||
static char report_reply_topic_name[TOPIC_NAME_MAX_SIZE] = {0};
|
||||
|
||||
k_mail_q_t mail_q;
|
||||
pm2d5_data_u pm2d5_value;
|
||||
uint8_t pm2d5_value_pool[3 * sizeof(pm2d5_data_u)];
|
||||
|
||||
void generate_client_token(char* buffer, size_t size)
|
||||
{
|
||||
long client_token_value;
|
||||
|
||||
memset(buffer, 0, size);
|
||||
client_token_value = ((long)tos_systick_get()) % (long)(pow(10, size));
|
||||
snprintf(buffer, size, "%ld", client_token_value);
|
||||
}
|
||||
|
||||
void mqtt_demo_task(void)
|
||||
{
|
||||
int ret = 0;
|
||||
int size = 0;
|
||||
int i = 0;
|
||||
char *product_id = PRODUCT_ID;
|
||||
char *device_name = DEVICE_NAME;
|
||||
char *key = DEVICE_KEY;
|
||||
|
||||
device_info_t dev_info;
|
||||
memset(&dev_info, 0, sizeof(device_info_t));
|
||||
char str[16];
|
||||
size_t mail_size;
|
||||
uint8_t report_error_count = 0;
|
||||
char client_token[10];
|
||||
|
||||
/**
|
||||
* Please Choose your AT Port first, default is HAL_UART_2(USART2)
|
||||
*/
|
||||
ret = esp8266_tencent_firmware_sal_init(HAL_UART_PORT_2);
|
||||
|
||||
if (ret < 0) {
|
||||
printf("esp8266 tencent firmware sal init fail, ret is %d\r\n", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
if ( esp8266_tencent_firmware_join_ap(WIFI_SSID, WIFI_PASSWD) == 0) {
|
||||
printf("module WIFI connect success\n");
|
||||
break;
|
||||
}
|
||||
printf("module WIFI connect fail\n");
|
||||
tos_sleep_ms(2000);
|
||||
}
|
||||
|
||||
strncpy(dev_info.product_id, product_id, PRODUCT_ID_MAX_SIZE);
|
||||
strncpy(dev_info.device_name, device_name, DEVICE_NAME_MAX_SIZE);
|
||||
strncpy(dev_info.device_serc, key, DEVICE_SERC_MAX_SIZE);
|
||||
tos_tf_module_info_set(&dev_info, TLS_MODE_PSK);
|
||||
mqtt_param_t init_params = DEFAULT_MQTT_PARAMS;
|
||||
while (1) {
|
||||
if (tos_tf_module_mqtt_conn(init_params) == 0) {
|
||||
printf("module mqtt connect success\n");
|
||||
break;
|
||||
}
|
||||
printf("module mqtt connect fail\n");
|
||||
tos_sleep_ms(5000);
|
||||
}
|
||||
|
||||
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>topic */
|
||||
size = snprintf(report_reply_topic_name, TOPIC_NAME_MAX_SIZE, "$thing/down/property/%s/%s", product_id, device_name);
|
||||
|
||||
if (size < 0 || size > sizeof(report_reply_topic_name) - 1) {
|
||||
printf("sub topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(report_reply_topic_name));
|
||||
}
|
||||
if (tos_tf_module_mqtt_sub(report_reply_topic_name, QOS0, default_message_handler) != 0) {
|
||||
printf("module mqtt sub fail\n");
|
||||
} else {
|
||||
printf("module mqtt sub success\n");
|
||||
}
|
||||
|
||||
memset(report_topic_name, 0, sizeof(report_topic_name));
|
||||
size = snprintf(report_topic_name, TOPIC_NAME_MAX_SIZE, "$thing/up/property/%s/%s", product_id, device_name);
|
||||
|
||||
if (size < 0 || size > sizeof(report_topic_name) - 1) {
|
||||
printf("pub topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(report_topic_name));
|
||||
}
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
tos_mail_q_create(&mail_q, pm2d5_value_pool, 3, sizeof(pm2d5_data_u));
|
||||
|
||||
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
||||
|
||||
if (pm2d5_parser_init() == -1) {
|
||||
printf("pm2d5 parser init fail\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
/* ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> */
|
||||
HAL_NVIC_EnableIRQ(USART2_IRQn);
|
||||
tos_mail_q_pend(&mail_q, (uint8_t*)&pm2d5_value, &mail_size, TOS_TIME_FOREVER);
|
||||
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
||||
|
||||
//<2F>յ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1>Ϣ
|
||||
printf("\r\n\r\n\r\n");
|
||||
for (i = 0; i < 13; i++) {
|
||||
printf("data[%d]:%d ug/m3\r\n", i+1, pm2d5_value.data[i]);
|
||||
}
|
||||
|
||||
/* <20><>ʾPM2.5<EFBFBD><EFBFBD>ֵ */
|
||||
sprintf(str, "PM2.5:%4d ug/m3", pm2d5_value.pm2d5_data.data2);
|
||||
OLED_ShowString(0,0,(uint8_t*)str,16);
|
||||
|
||||
/* <20>ϱ<EFBFBD>ֵ */
|
||||
generate_client_token(client_token, sizeof(client_token));
|
||||
memset(payload, 0, 1024);
|
||||
snprintf(payload, 1024, REPORT_DATA_TEMPLATE, client_token,
|
||||
pm2d5_value.pm2d5_data.data1, pm2d5_value.pm2d5_data.data2,
|
||||
pm2d5_value.pm2d5_data.data3, pm2d5_value.pm2d5_data.data4,
|
||||
pm2d5_value.pm2d5_data.data5, pm2d5_value.pm2d5_data.data6,
|
||||
pm2d5_value.pm2d5_data.data7, pm2d5_value.pm2d5_data.data8,
|
||||
pm2d5_value.pm2d5_data.data9, pm2d5_value.pm2d5_data.data10,
|
||||
pm2d5_value.pm2d5_data.data11, pm2d5_value.pm2d5_data.data12,
|
||||
2, pm2d5_value.pm2d5_data.err_code);
|
||||
|
||||
if (tos_tf_module_mqtt_publ(report_topic_name, QOS0, payload) != 0) {
|
||||
report_error_count++;
|
||||
printf("module mqtt publ fail, count: %d\n", report_error_count);
|
||||
sprintf(str, "# report fail");
|
||||
} else {
|
||||
report_error_count = 0;
|
||||
printf("module mqtt publ success\n");
|
||||
sprintf(str, "# report ok");
|
||||
}
|
||||
|
||||
if (report_error_count >= 6) {
|
||||
HAL_NVIC_SystemReset();
|
||||
}
|
||||
|
||||
tos_sleep_ms(5000);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void application_entry(void *arg)
|
||||
{
|
||||
char *str = "TencentOS-Tiny";
|
||||
|
||||
/* <20><>ʼ<EFBFBD><CABC>OLED */
|
||||
|
||||
mqtt_demo_task();
|
||||
while (1) {
|
||||
printf("This is a mqtt demo!\r\n");
|
||||
tos_task_delay(1000);
|
||||
}
|
||||
}
|
@@ -0,0 +1,231 @@
|
||||
/*----------------------------------------------------------------------------
|
||||
* Tencent is pleased to support the open source community by making TencentOS
|
||||
* available.
|
||||
*
|
||||
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||||
* If you have downloaded a copy of the TencentOS binary from Tencent, please
|
||||
* note that the TencentOS binary is licensed under the BSD 3-Clause License.
|
||||
*
|
||||
* If you have downloaded a copy of the TencentOS source code from Tencent,
|
||||
* please note that TencentOS source code is licensed under the BSD 3-Clause
|
||||
* License, except for the third-party components listed below which are
|
||||
* subject to different license terms. Your integration of TencentOS into your
|
||||
* own projects may require compliance with the BSD 3-Clause License, as well
|
||||
* as the other licenses applicable to the third-party components included
|
||||
* within TencentOS.
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include "pm2d5_parser.h"
|
||||
|
||||
static pm2d5_parser_ctrl_t pm2d5_parser_ctrl;
|
||||
|
||||
static k_stack_t pm2d5_parser_task_stack[PM2D5_PARSER_TASK_STACK_SIZE];
|
||||
|
||||
static uint8_t pm2d5_parser_buffer[PM2D5_PARSER_BUFFER_SIZE];
|
||||
|
||||
/**
|
||||
* @brief PM2D5<44><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ϱ<EFBFBD>32<33>ֽڣ<D6BD>ͷ<EFBFBD><CDB7>0x42<34><32>0x4d<34>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>28<32>ֽ<EFBFBD>
|
||||
*/
|
||||
typedef struct pm2d5_raw_data_st {
|
||||
|
||||
uint8_t data1_h;
|
||||
uint8_t data1_l;
|
||||
|
||||
uint8_t data2_h;
|
||||
uint8_t data2_l;
|
||||
|
||||
uint8_t data3_h;
|
||||
uint8_t data3_l;
|
||||
|
||||
uint8_t data4_h;
|
||||
uint8_t data4_l;
|
||||
|
||||
uint8_t data5_h;
|
||||
uint8_t data5_l;
|
||||
|
||||
uint8_t data6_h;
|
||||
uint8_t data6_l;
|
||||
|
||||
uint8_t data7_h;
|
||||
uint8_t data7_l;
|
||||
|
||||
uint8_t data8_h;
|
||||
uint8_t data8_l;
|
||||
|
||||
uint8_t data9_h;
|
||||
uint8_t data9_l;
|
||||
|
||||
uint8_t data10_h;
|
||||
uint8_t data10_l;
|
||||
|
||||
uint8_t data11_h;
|
||||
uint8_t data11_l;
|
||||
|
||||
uint8_t data12_h;
|
||||
uint8_t data12_l;
|
||||
|
||||
uint8_t data13_h; //<2F>汾<EFBFBD><E6B1BE>
|
||||
uint8_t data13_l; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
uint8_t chk_sum_h; //<2F><>У<EFBFBD><D0A3><EFBFBD><EFBFBD>8λ
|
||||
uint8_t chk_sum_l; //<2F><>У<EFBFBD><D0A3><EFBFBD><EFBFBD>8λ
|
||||
} pm2d5_raw_data_t;
|
||||
|
||||
typedef union pm2d5_raw_data_un {
|
||||
uint8_t data[30];
|
||||
pm2d5_raw_data_t pm2d5_raw_data;
|
||||
}pm2d5_raw_data_u;
|
||||
|
||||
/**
|
||||
* @brief <20><>PM2D5<44><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @retval none
|
||||
* @note <20><>Ҫ<EFBFBD>û<EFBFBD><C3BB>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
void pm2d5_parser_input_byte(uint8_t data)
|
||||
{
|
||||
if (tos_chr_fifo_push(&pm2d5_parser_ctrl.parser_rx_fifo, data) == K_ERR_NONE) {
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳɹ<DDB3><C9B9><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
tos_sem_post(&pm2d5_parser_ctrl.parser_rx_sem);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief PM2D5<44><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>chr fifo<66><6F>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param none
|
||||
* @retval <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>-1
|
||||
*/
|
||||
static int pm2d5_parser_getchar(void)
|
||||
{
|
||||
uint8_t chr;
|
||||
k_err_t err;
|
||||
|
||||
/* <20><><EFBFBD>õȴ<C3B5><C8B4>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD>Ϊ<EFBFBD>ձ<EFBFBD>ʾchr fifo<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
if (tos_sem_pend(&pm2d5_parser_ctrl.parser_rx_sem, TOS_TIME_FOREVER) != K_ERR_NONE) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* <20><>chr fifo<66><6F>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
err = tos_chr_fifo_pop(&pm2d5_parser_ctrl.parser_rx_fifo, &chr);
|
||||
|
||||
return err == K_ERR_NONE ? chr : -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief PM2D5<44><35>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param void
|
||||
* @retval <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD>-1
|
||||
*/
|
||||
static int pm2d5_parser_read_raw_data(pm2d5_raw_data_u *pm2d5_raw_data, pm2d5_data_u *pm2d5_data)
|
||||
{
|
||||
int i;
|
||||
uint8_t len_h,len_l;
|
||||
uint16_t len;
|
||||
uint16_t check_sum;
|
||||
uint16_t check_sum_cal = 0x42 + 0x4d;
|
||||
|
||||
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD> */
|
||||
len_h = pm2d5_parser_getchar();
|
||||
len_l = pm2d5_parser_getchar();
|
||||
len = (len_h << 8) | len_l;
|
||||
|
||||
if ( len != 0x001C) {
|
||||
//<2F>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
|
||||
for (i = 0; i < len; i++) {
|
||||
pm2d5_parser_getchar();
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD> */
|
||||
for (i = 0; i < len; i++) {
|
||||
pm2d5_raw_data->data[i] = pm2d5_parser_getchar();
|
||||
}
|
||||
|
||||
/* <20><>У<EFBFBD><D0A3> */
|
||||
//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
|
||||
check_sum_cal = check_sum_cal + len_h + len_l;
|
||||
for (i = 0; i < len -2; i++) {
|
||||
check_sum_cal += pm2d5_raw_data->data[i];
|
||||
}
|
||||
//Э<><D0AD><EFBFBD>и<EFBFBD><D0B8><EFBFBD><EFBFBD>ĺ<EFBFBD>У<EFBFBD><D0A3>ֵ
|
||||
check_sum = (pm2d5_raw_data->pm2d5_raw_data.chk_sum_h << 8) + pm2d5_raw_data->pm2d5_raw_data.chk_sum_l;
|
||||
if (check_sum_cal != check_sum) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* <20>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ */
|
||||
for (i = 0; i < sizeof(pm2d5_data_t); i++) {
|
||||
pm2d5_data->data[i] = (pm2d5_raw_data->data[i*2] << 8) | pm2d5_raw_data->data[i*2 + 1];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern k_mail_q_t mail_q;
|
||||
pm2d5_raw_data_u pm2d5_raw_data;
|
||||
pm2d5_data_u pm2d5_data;
|
||||
|
||||
/**
|
||||
* @brief PM2D5<44><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
static void pm2d5_parser_task_entry(void *arg)
|
||||
{
|
||||
int chr, last_chr = 0;
|
||||
|
||||
while (1) {
|
||||
|
||||
chr = pm2d5_parser_getchar();
|
||||
if (chr < 0) {
|
||||
printf("parser task get char fail!\r\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (chr == 0x4d && last_chr == 0x42) {
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ */
|
||||
if (0 == pm2d5_parser_read_raw_data(&pm2d5_raw_data, &pm2d5_data)) {
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>䷢<EFBFBD><E4B7A2> */
|
||||
tos_mail_q_post(&mail_q, &pm2d5_data, sizeof(pm2d5_data_t));
|
||||
}
|
||||
}
|
||||
|
||||
last_chr = chr;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><>ʼ<EFBFBD><CABC>PM2D5<44><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param none
|
||||
* @retval ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD>κ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD>-1
|
||||
*/
|
||||
int pm2d5_parser_init(void)
|
||||
{
|
||||
k_err_t ret;
|
||||
|
||||
memset((pm2d5_parser_ctrl_t*)&pm2d5_parser_ctrl, 0, sizeof(pm2d5_parser_ctrl));
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD> chr fifo */
|
||||
ret = tos_chr_fifo_create(&pm2d5_parser_ctrl.parser_rx_fifo, pm2d5_parser_buffer, sizeof(pm2d5_parser_buffer));
|
||||
if (ret != K_ERR_NONE) {
|
||||
printf("pm2d5 parser chr fifo create fail, ret = %d\r\n", ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD> */
|
||||
ret = tos_sem_create(&pm2d5_parser_ctrl.parser_rx_sem, 0);
|
||||
if (ret != K_ERR_NONE) {
|
||||
printf("pm2d5 parser_rx_sem create fail, ret = %d\r\n", ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> */
|
||||
ret = tos_task_create(&pm2d5_parser_ctrl.parser_task, "pm2d5_parser_task",
|
||||
pm2d5_parser_task_entry, NULL, PM2D5_PARSER_TASK_PRIO,
|
||||
pm2d5_parser_task_stack,PM2D5_PARSER_TASK_STACK_SIZE,0);
|
||||
if (ret != K_ERR_NONE) {
|
||||
printf("pm2d5 parser task create fail, ret = %d\r\n", ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@@ -0,0 +1,67 @@
|
||||
/*----------------------------------------------------------------------------
|
||||
* Tencent is pleased to support the open source community by making TencentOS
|
||||
* available.
|
||||
*
|
||||
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||||
* If you have downloaded a copy of the TencentOS binary from Tencent, please
|
||||
* note that the TencentOS binary is licensed under the BSD 3-Clause License.
|
||||
*
|
||||
* If you have downloaded a copy of the TencentOS source code from Tencent,
|
||||
* please note that TencentOS source code is licensed under the BSD 3-Clause
|
||||
* License, except for the third-party components listed below which are
|
||||
* subject to different license terms. Your integration of TencentOS into your
|
||||
* own projects may require compliance with the BSD 3-Clause License, as well
|
||||
* as the other licenses applicable to the third-party components included
|
||||
* within TencentOS.
|
||||
*---------------------------------------------------------------------------*/
|
||||
#ifndef _PM2D5_PARSER_H_
|
||||
#define _PM2D5_PARSER_H_
|
||||
|
||||
#include "tos_k.h"
|
||||
|
||||
/* pm2d5 parser config */
|
||||
#define PM2D5_PARSER_TASK_STACK_SIZE 512
|
||||
#define PM2D5_PARSER_TASK_PRIO 5
|
||||
#define PM2D5_PARSER_BUFFER_SIZE 64
|
||||
|
||||
/* PM2.5 数据解析器控制块 */
|
||||
typedef struct pm2d5_parser_control_st {
|
||||
k_task_t parser_task; //解析器任务控制块
|
||||
|
||||
k_sem_t parser_rx_sem; //表示解析器从串口接收到数据
|
||||
k_chr_fifo_t parser_rx_fifo; //存放解析器接收到的数据
|
||||
} pm2d5_parser_ctrl_t;
|
||||
|
||||
/**
|
||||
* @brief 解析出的PM2D5数据值
|
||||
* @note 可以作为邮件发送给其他任务进行进一步处理
|
||||
*/
|
||||
typedef struct pm2d5_data_st {
|
||||
uint16_t data1;
|
||||
uint16_t data2;
|
||||
uint16_t data3;
|
||||
uint16_t data4;
|
||||
uint16_t data5;
|
||||
uint16_t data6;
|
||||
uint16_t data7;
|
||||
uint16_t data8;
|
||||
uint16_t data9;
|
||||
uint16_t data10;
|
||||
uint16_t data11;
|
||||
uint16_t data12;
|
||||
uint8_t version;
|
||||
uint8_t err_code;
|
||||
}pm2d5_data_t;
|
||||
|
||||
typedef union pm2d5_data_un {
|
||||
uint16_t data[13];
|
||||
pm2d5_data_t pm2d5_data;
|
||||
} pm2d5_data_u;
|
||||
|
||||
void pm2d5_parser_input_byte(uint8_t byte);
|
||||
|
||||
int pm2d5_send_read_cmd(void);
|
||||
|
||||
int pm2d5_parser_init(void);
|
||||
|
||||
#endif /* _PM2D5_PARSER_H_ */
|
@@ -1,337 +0,0 @@
|
||||
/*----------------------------------------------------------------------------
|
||||
* Tencent is pleased to support the open source community by making TencentOS
|
||||
* available.
|
||||
*
|
||||
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||||
* If you have downloaded a copy of the TencentOS binary from Tencent, please
|
||||
* note that the TencentOS binary is licensed under the BSD 3-Clause License.
|
||||
*
|
||||
* If you have downloaded a copy of the TencentOS source code from Tencent,
|
||||
* please note that TencentOS source code is licensed under the BSD 3-Clause
|
||||
* License, except for the third-party components listed below which are
|
||||
* subject to different license terms. Your integration of TencentOS into your
|
||||
* own projects may require compliance with the BSD 3-Clause License, as well
|
||||
* as the other licenses applicable to the third-party components included
|
||||
* within TencentOS.
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "sensor_parser.h"
|
||||
|
||||
__STATIC__ shell_ctl_t shell_ctl;
|
||||
|
||||
__STATIC__ k_stack_t shell_parser_task_stack[SHELL_PARSER_TASK_STACK_SIZE];
|
||||
|
||||
__STATIC__ int shell_getchar(void)
|
||||
{
|
||||
uint8_t chr;
|
||||
k_err_t err;
|
||||
|
||||
if (tos_sem_pend(&SHELL_CTL->shell_rx_sem, TOS_TIME_FOREVER) != K_ERR_NONE) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
err = tos_chr_fifo_pop(&SHELL_CTL->shell_rx_fifo, &chr);
|
||||
|
||||
return err == K_ERR_NONE ? chr : -1;
|
||||
}
|
||||
|
||||
typedef struct sensor_frame_st {
|
||||
uint16_t len;
|
||||
uint16_t data1;
|
||||
uint16_t data2;
|
||||
uint16_t data3;
|
||||
uint16_t data4;
|
||||
uint16_t data5;
|
||||
uint16_t data6;
|
||||
uint16_t data7;
|
||||
uint16_t data8;
|
||||
uint16_t data9;
|
||||
uint16_t data10;
|
||||
uint16_t data11;
|
||||
uint16_t data12;
|
||||
uint16_t data13;
|
||||
uint16_t chk_sum;
|
||||
|
||||
uint8_t len_h;
|
||||
uint8_t len_l;
|
||||
|
||||
uint8_t data1_h;
|
||||
uint8_t data1_l;
|
||||
|
||||
uint8_t data2_h;
|
||||
uint8_t data2_l;
|
||||
|
||||
uint8_t data3_h;
|
||||
uint8_t data3_l;
|
||||
|
||||
uint8_t data4_h;
|
||||
uint8_t data4_l;
|
||||
|
||||
uint8_t data5_h;
|
||||
uint8_t data5_l;
|
||||
|
||||
uint8_t data6_h;
|
||||
uint8_t data6_l;
|
||||
|
||||
uint8_t data7_h;
|
||||
uint8_t data7_l;
|
||||
|
||||
uint8_t data8_h;
|
||||
uint8_t data8_l;
|
||||
|
||||
uint8_t data9_h;
|
||||
uint8_t data9_l;
|
||||
|
||||
uint8_t data10_h;
|
||||
uint8_t data10_l;
|
||||
|
||||
uint8_t data11_h;
|
||||
uint8_t data11_l;
|
||||
|
||||
uint8_t data12_h;
|
||||
uint8_t data12_l;
|
||||
|
||||
uint8_t data13_h;
|
||||
uint8_t data13_l;
|
||||
|
||||
uint8_t chk_sum_h;
|
||||
uint8_t chk_sum_l;
|
||||
} __PACKED__ sensor_frame_t;
|
||||
|
||||
extern k_mail_q_t mail_q;
|
||||
|
||||
k_tick_t last_report = 0;
|
||||
|
||||
int read_frame(sensor_frame_t *frame)
|
||||
{
|
||||
frame->len_h = shell_getchar();
|
||||
frame->len_l = shell_getchar();
|
||||
|
||||
frame->data1_h = shell_getchar();
|
||||
frame->data1_l = shell_getchar();
|
||||
|
||||
frame->data2_h = shell_getchar();
|
||||
frame->data2_l = shell_getchar();
|
||||
|
||||
frame->data3_h = shell_getchar();
|
||||
frame->data3_l = shell_getchar();
|
||||
|
||||
frame->data4_h = shell_getchar();
|
||||
frame->data4_l = shell_getchar();
|
||||
|
||||
frame->data5_h = shell_getchar();
|
||||
frame->data5_l = shell_getchar();
|
||||
|
||||
frame->data6_h = shell_getchar();
|
||||
frame->data6_l = shell_getchar();
|
||||
|
||||
frame->data7_h = shell_getchar();
|
||||
frame->data7_l = shell_getchar();
|
||||
|
||||
frame->data8_h = shell_getchar();
|
||||
frame->data8_l = shell_getchar();
|
||||
|
||||
frame->data9_h = shell_getchar();
|
||||
frame->data9_l = shell_getchar();
|
||||
|
||||
frame->data10_h = shell_getchar();
|
||||
frame->data10_l = shell_getchar();
|
||||
|
||||
frame->data11_h = shell_getchar();
|
||||
frame->data11_l = shell_getchar();
|
||||
|
||||
frame->data12_h = shell_getchar();
|
||||
frame->data12_l = shell_getchar();
|
||||
|
||||
frame->data13_h = shell_getchar();
|
||||
frame->data13_l = shell_getchar();
|
||||
|
||||
frame->chk_sum_h = shell_getchar();
|
||||
frame->chk_sum_l = shell_getchar();
|
||||
|
||||
|
||||
frame->len = (frame->len_h << 8) | frame->len_l;
|
||||
frame->data1 = (frame->data1_h << 8) | frame->data1_l;
|
||||
frame->data2 = (frame->data2_h << 8) | frame->data2_l;
|
||||
frame->data3 = (frame->data3_h << 8) | frame->data3_l;
|
||||
frame->data4 = (frame->data4_h << 8) | frame->data4_l;
|
||||
frame->data5 = (frame->data5_h << 8) | frame->data5_l;
|
||||
frame->data6 = (frame->data6_h << 8) | frame->data6_l;
|
||||
frame->data7 = (frame->data7_h << 8) | frame->data7_l;
|
||||
frame->data8 = (frame->data8_h << 8) | frame->data8_l;
|
||||
frame->data9 = (frame->data9_h << 8) | frame->data9_l;
|
||||
frame->data10 = (frame->data10_h << 8) | frame->data10_l;
|
||||
frame->data11 = (frame->data11_h << 8) | frame->data11_l;
|
||||
frame->data12 = (frame->data12_h << 8) | frame->data12_l;
|
||||
frame->data13 = (frame->data13_h << 8) | frame->data13_l;
|
||||
frame->chk_sum = (frame->chk_sum_h << 8) | frame->chk_sum_l;
|
||||
|
||||
|
||||
uint16_t chsum;
|
||||
chsum = frame->len_h +
|
||||
frame->len_l +
|
||||
frame->data1_h +
|
||||
frame->data1_l +
|
||||
frame->data2_h +
|
||||
frame->data2_l +
|
||||
frame->data3_h +
|
||||
frame->data3_l +
|
||||
frame->data4_h +
|
||||
frame->data4_l +
|
||||
frame->data5_h +
|
||||
frame->data5_l +
|
||||
frame->data6_h +
|
||||
frame->data6_l +
|
||||
frame->data7_h +
|
||||
frame->data7_l +
|
||||
frame->data8_h +
|
||||
frame->data8_l +
|
||||
frame->data9_h +
|
||||
frame->data9_l +
|
||||
frame->data10_h +
|
||||
frame->data10_l +
|
||||
frame->data11_h +
|
||||
frame->data11_l +
|
||||
frame->data12_h +
|
||||
frame->data12_l +
|
||||
frame->data13_h +
|
||||
frame->data13_l;
|
||||
|
||||
if (chsum + 0x42 + 0x4d != frame->chk_sum) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
k_tick_t now = tos_systick_get();
|
||||
if (last_report == 0 || now - last_report >= 15000) {
|
||||
last_report = now;
|
||||
|
||||
printf("data1: %d\n", frame->data1);
|
||||
printf("data2: %d\n", frame->data2);
|
||||
printf("data3: %d\n", frame->data3);
|
||||
printf("data4: %d\n", frame->data4);
|
||||
printf("data5: %d\n", frame->data5);
|
||||
printf("data6: %d\n", frame->data6);
|
||||
printf("data7: %d\n", frame->data7);
|
||||
printf("data8: %d\n", frame->data8);
|
||||
printf("data9: %d\n", frame->data9);
|
||||
printf("data10: %d\n", frame->data10);
|
||||
printf("data11: %d\n", frame->data11);
|
||||
printf("data12: %d\n", frame->data12);
|
||||
printf("data13: %d\n", frame->data13);
|
||||
printf("\n\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
sensor_frame_t frame;
|
||||
|
||||
__STATIC__ int shell_readline(void)
|
||||
{
|
||||
int chr, last_chr = 0;
|
||||
char *buf = SHELL_CTL->cmd_buffer;
|
||||
|
||||
while (K_TRUE) {
|
||||
if (buf - SHELL_CTL->cmd_buffer >= (SHELL_CTL->cmd_buffer_size - 1)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
chr = shell_getchar();
|
||||
if (chr < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (chr == 0x4d && last_chr == 0x42) {
|
||||
if (read_frame(&frame) == 0) {
|
||||
tos_mail_q_post(&mail_q, &frame.data1_h, 13 * 2);
|
||||
}
|
||||
}
|
||||
|
||||
*buf++ = chr;
|
||||
last_chr = chr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
__STATIC__ void shell_parser(void *arg)
|
||||
{
|
||||
while (K_TRUE) {
|
||||
shell_readline();
|
||||
}
|
||||
}
|
||||
|
||||
__API__ int tos_shell_init(char *cmd_buf, int cmd_buf_size, shell_output_t output)
|
||||
{
|
||||
void *buffer = K_NULL;
|
||||
|
||||
TOS_PTR_SANITY_CHECK_RC(cmd_buf, -1);
|
||||
TOS_PTR_SANITY_CHECK_RC(output, -1);
|
||||
|
||||
memset(SHELL_CTL, 0, sizeof(shell_ctl_t));
|
||||
|
||||
SHELL_CTL->cmd_buffer = cmd_buf;
|
||||
SHELL_CTL->cmd_buffer_size = cmd_buf_size;
|
||||
SHELL_CTL->output = output;
|
||||
|
||||
buffer = tos_mmheap_alloc(cmd_buf_size * 2);
|
||||
if (!buffer) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
SHELL_CTL->shell_rx_fifo_buffer = (uint8_t *)buffer;
|
||||
tos_chr_fifo_create(&SHELL_CTL->shell_rx_fifo, buffer, cmd_buf_size * 2);
|
||||
|
||||
if (tos_sem_create(&SHELL_CTL->shell_rx_sem, (k_sem_cnt_t)0u) != K_ERR_NONE) {
|
||||
goto errout0;
|
||||
}
|
||||
|
||||
if (tos_task_create(&SHELL_CTL->parser, "shell_parser", shell_parser,
|
||||
K_NULL, SHELL_PARSER_TASK_PRIO, shell_parser_task_stack,
|
||||
SHELL_PARSER_TASK_STACK_SIZE, 0) != K_ERR_NONE) {
|
||||
goto errout1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
errout1:
|
||||
tos_sem_destroy(&SHELL_CTL->shell_rx_sem);
|
||||
|
||||
errout0:
|
||||
tos_mmheap_free(SHELL_CTL->shell_rx_fifo_buffer);
|
||||
SHELL_CTL->shell_rx_fifo_buffer = K_NULL;
|
||||
tos_chr_fifo_destroy(&SHELL_CTL->shell_rx_fifo);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
__API__ void tos_shell_deinit(void)
|
||||
{
|
||||
tos_task_destroy(&SHELL_CTL->parser);
|
||||
tos_sem_destroy(&SHELL_CTL->shell_rx_sem);
|
||||
|
||||
tos_mmheap_free(SHELL_CTL->shell_rx_fifo_buffer);
|
||||
SHELL_CTL->shell_rx_fifo_buffer = K_NULL;
|
||||
tos_chr_fifo_destroy(&SHELL_CTL->shell_rx_fifo);
|
||||
}
|
||||
|
||||
__API__ void tos_shell_printf(const char *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
static char buffer[SHELL_OUTPUT_MAX];
|
||||
|
||||
va_start(args, format);
|
||||
vsnprintf(buffer, sizeof(buffer), format, args);
|
||||
va_end(args);
|
||||
|
||||
(SHELL_CTL->output)(buffer);
|
||||
}
|
||||
|
||||
__API__ void tos_shell_input_byte(uint8_t data)
|
||||
{
|
||||
if (tos_chr_fifo_push(&SHELL_CTL->shell_rx_fifo, data) == K_ERR_NONE) {
|
||||
tos_sem_post(&SHELL_CTL->shell_rx_sem);
|
||||
}
|
||||
}
|
||||
|
@@ -1,54 +0,0 @@
|
||||
/*----------------------------------------------------------------------------
|
||||
* Tencent is pleased to support the open source community by making TencentOS
|
||||
* available.
|
||||
*
|
||||
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||||
* If you have downloaded a copy of the TencentOS binary from Tencent, please
|
||||
* note that the TencentOS binary is licensed under the BSD 3-Clause License.
|
||||
*
|
||||
* If you have downloaded a copy of the TencentOS source code from Tencent,
|
||||
* please note that TencentOS source code is licensed under the BSD 3-Clause
|
||||
* License, except for the third-party components listed below which are
|
||||
* subject to different license terms. Your integration of TencentOS into your
|
||||
* own projects may require compliance with the BSD 3-Clause License, as well
|
||||
* as the other licenses applicable to the third-party components included
|
||||
* within TencentOS.
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef _TOS_SHELL_H_
|
||||
#define _TOS_SHELL_H_
|
||||
|
||||
#include "tos_k.h"
|
||||
|
||||
#define SHELL_CMD_ARGV_MAX 16
|
||||
#define SHELL_OUTPUT_MAX 256
|
||||
#define SHELL_PARSER_TASK_STACK_SIZE 1024
|
||||
#define SHELL_PARSER_TASK_PRIO 5
|
||||
|
||||
typedef void (*shell_output_t)(const char *str);
|
||||
|
||||
typedef struct shell_control_st {
|
||||
k_task_t parser;
|
||||
|
||||
shell_output_t output;
|
||||
|
||||
char *cmd_buffer;
|
||||
int cmd_buffer_size;
|
||||
|
||||
k_sem_t shell_rx_sem;
|
||||
k_chr_fifo_t shell_rx_fifo;
|
||||
uint8_t *shell_rx_fifo_buffer;
|
||||
} shell_ctl_t;
|
||||
|
||||
#define SHELL_CTL ((shell_ctl_t *)(&shell_ctl))
|
||||
|
||||
__API__ int tos_shell_init(char *cmd_buf, int cmd_buf_size, shell_output_t output);
|
||||
|
||||
__API__ void tos_shell_deinit(void);
|
||||
|
||||
__API__ void tos_shell_printf(const char *format, ...);
|
||||
|
||||
__API__ void tos_shell_input_byte(uint8_t data);
|
||||
|
||||
#endif /* _TOS_SHELL_H_ */
|
||||
|
@@ -25,7 +25,8 @@
|
||||
#include "main.h"
|
||||
#include "stm32wlxx_it.h"
|
||||
#include "tos_k.h"
|
||||
#include "sensor_parser.h"
|
||||
#include "pm2d5_parser.h"
|
||||
#include "tos_at.h"
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
/* USER CODE END Includes */
|
||||
@@ -63,6 +64,7 @@
|
||||
/* External variables --------------------------------------------------------*/
|
||||
extern UART_HandleTypeDef huart1;
|
||||
extern UART_HandleTypeDef huart2;
|
||||
extern UART_HandleTypeDef hlpuart1;
|
||||
extern SUBGHZ_HandleTypeDef hsubghz;
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
@@ -209,7 +211,18 @@ void SysTick_Handler(void)
|
||||
/* For the available peripheral interrupt handler names, */
|
||||
/* please refer to the startup file (startup_stm32wlxx.s). */
|
||||
/******************************************************************************/
|
||||
void LPUART1_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN LPUART1_IRQn 0 */
|
||||
|
||||
/* USER CODE END LPUART1_IRQn 0 */
|
||||
tos_knl_irq_enter();
|
||||
HAL_UART_IRQHandler(&hlpuart1);
|
||||
tos_knl_irq_leave();
|
||||
/* USER CODE BEGIN LPUART1_IRQn 1 */
|
||||
|
||||
/* USER CODE END LPUART1_IRQn 1 */
|
||||
}
|
||||
void USART1_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN USART1_IRQn 0 */
|
||||
@@ -242,13 +255,16 @@ void Radio_IRQHandler(void)
|
||||
/* USER CODE BEGIN 1 */
|
||||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
extern uint8_t msg;
|
||||
|
||||
extern uint8_t pm2d5_byte_data;
|
||||
extern uint8_t data;
|
||||
if(huart ->Instance == USART2)
|
||||
{
|
||||
tos_shell_input_byte(msg);
|
||||
HAL_UART_Receive_IT(&huart2, (uint8_t*)&msg, 1);
|
||||
|
||||
HAL_UART_Receive_IT(&huart2, (uint8_t*)&pm2d5_byte_data, 1);
|
||||
pm2d5_parser_input_byte(pm2d5_byte_data);
|
||||
}
|
||||
else if (huart->Instance == LPUART1) {
|
||||
HAL_UART_Receive_IT(&hlpuart1, &data, 1);
|
||||
tos_at_uart_input_byte(data);
|
||||
}
|
||||
}
|
||||
/* USER CODE END 1 */
|
||||
|
@@ -152,9 +152,25 @@
|
||||
<Bp>
|
||||
<Number>0</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>153</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134218060</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>.\startup_stm32wle5xx.s</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\TencentOS_Tiny\startup_stm32wle5xx.s\153</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>1</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>122</LineNumber>
|
||||
<EnabledFlag>0</EnabledFlag>
|
||||
<Address>134244104</Address>
|
||||
<Address>134279228</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
@@ -165,38 +181,6 @@
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\TencentOS_Tiny\../../../../kernel/core/tos_task.c\122</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>1</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>105</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134218200</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_s.S</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\TencentOS_Tiny\../../../../arch/arm/arm-v7m/cortex-m4/armcc/port_s.S\105</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>2</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>97</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134218196</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_s.S</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\TencentOS_Tiny\../../../../arch/arm/arm-v7m/cortex-m4/armcc/port_s.S\97</Expression>
|
||||
</Bp>
|
||||
</Breakpoint>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
@@ -283,6 +267,18 @@
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\BSP\Src\main.c</PathWithFileName>
|
||||
<FilenameWithoutPath>main.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\BSP\Src\adc.c</PathWithFileName>
|
||||
<FilenameWithoutPath>adc.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -290,7 +286,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -302,7 +298,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileNumber>5</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -314,7 +310,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>5</FileNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -326,7 +322,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileNumber>7</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -338,7 +334,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>7</FileNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -350,7 +346,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -362,7 +358,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -374,7 +370,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -386,7 +382,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -398,7 +394,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -410,7 +406,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -430,7 +426,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -442,7 +438,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -454,7 +450,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -466,7 +462,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -478,7 +474,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -490,7 +486,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -502,7 +498,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -514,7 +510,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -526,7 +522,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -538,7 +534,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -550,7 +546,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -562,7 +558,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -574,7 +570,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileNumber>27</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -586,7 +582,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>27</FileNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -598,7 +594,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileNumber>29</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -610,7 +606,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>29</FileNumber>
|
||||
<FileNumber>30</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -622,7 +618,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>30</FileNumber>
|
||||
<FileNumber>31</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -634,7 +630,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>31</FileNumber>
|
||||
<FileNumber>32</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -646,7 +642,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>32</FileNumber>
|
||||
<FileNumber>33</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -658,7 +654,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>33</FileNumber>
|
||||
<FileNumber>34</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -670,7 +666,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>34</FileNumber>
|
||||
<FileNumber>35</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -690,7 +686,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>35</FileNumber>
|
||||
<FileNumber>36</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -710,7 +706,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>36</FileNumber>
|
||||
<FileNumber>37</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -722,7 +718,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>37</FileNumber>
|
||||
<FileNumber>38</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -734,7 +730,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>38</FileNumber>
|
||||
<FileNumber>39</FileNumber>
|
||||
<FileType>2</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -754,7 +750,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>39</FileNumber>
|
||||
<FileNumber>40</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -766,7 +762,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>40</FileNumber>
|
||||
<FileNumber>41</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -778,7 +774,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>41</FileNumber>
|
||||
<FileNumber>42</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -790,7 +786,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>42</FileNumber>
|
||||
<FileNumber>43</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -802,7 +798,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>43</FileNumber>
|
||||
<FileNumber>44</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -814,7 +810,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>44</FileNumber>
|
||||
<FileNumber>45</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -826,7 +822,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>45</FileNumber>
|
||||
<FileNumber>46</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -838,7 +834,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>46</FileNumber>
|
||||
<FileNumber>47</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -850,7 +846,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>47</FileNumber>
|
||||
<FileNumber>48</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -862,7 +858,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>48</FileNumber>
|
||||
<FileNumber>49</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -874,7 +870,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>49</FileNumber>
|
||||
<FileNumber>50</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -886,7 +882,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>50</FileNumber>
|
||||
<FileNumber>51</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -898,7 +894,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>51</FileNumber>
|
||||
<FileNumber>52</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -910,7 +906,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>52</FileNumber>
|
||||
<FileNumber>53</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -922,7 +918,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>53</FileNumber>
|
||||
<FileNumber>54</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -934,7 +930,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>54</FileNumber>
|
||||
<FileNumber>55</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -946,7 +942,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>55</FileNumber>
|
||||
<FileNumber>56</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -958,7 +954,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>56</FileNumber>
|
||||
<FileNumber>57</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -970,7 +966,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>57</FileNumber>
|
||||
<FileNumber>58</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -982,7 +978,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>58</FileNumber>
|
||||
<FileNumber>59</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -994,7 +990,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>59</FileNumber>
|
||||
<FileNumber>60</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1006,7 +1002,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>60</FileNumber>
|
||||
<FileNumber>61</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1018,7 +1014,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>61</FileNumber>
|
||||
<FileNumber>62</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1030,7 +1026,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>62</FileNumber>
|
||||
<FileNumber>63</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1042,7 +1038,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>63</FileNumber>
|
||||
<FileNumber>64</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1054,7 +1050,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>64</FileNumber>
|
||||
<FileNumber>65</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1066,7 +1062,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>65</FileNumber>
|
||||
<FileNumber>66</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1078,7 +1074,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>66</FileNumber>
|
||||
<FileNumber>67</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1098,7 +1094,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>67</FileNumber>
|
||||
<FileNumber>68</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@@ -1116,18 +1112,6 @@
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>8</GroupNumber>
|
||||
<FileNumber>68</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\BSP\Src\main.c</PathWithFileName>
|
||||
<FilenameWithoutPath>main.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>8</GroupNumber>
|
||||
<FileNumber>69</FileNumber>
|
||||
@@ -1212,7 +1196,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>Hardware</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -1223,8 +1207,8 @@
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\App\sensor_parser.c</PathWithFileName>
|
||||
<FilenameWithoutPath>sensor_parser.c</FilenameWithoutPath>
|
||||
<PathWithFileName>.\App\pm2d5_parser.c</PathWithFileName>
|
||||
<FilenameWithoutPath>pm2d5_parser.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
@@ -1662,6 +1646,78 @@
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>at</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>17</GroupNumber>
|
||||
<FileNumber>108</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\net\at\src\tos_at.c</PathWithFileName>
|
||||
<FilenameWithoutPath>tos_at.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>17</GroupNumber>
|
||||
<FileNumber>109</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\net\tencent_firmware_module_wrapper\tencent_firmware_module_wrapper.c</PathWithFileName>
|
||||
<FilenameWithoutPath>tencent_firmware_module_wrapper.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>hal</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>18</GroupNumber>
|
||||
<FileNumber>110</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\platform\hal\st\stm32wl\src\tos_hal_uart.c</PathWithFileName>
|
||||
<FilenameWithoutPath>tos_hal_uart.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>devices</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>19</GroupNumber>
|
||||
<FileNumber>111</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\devices\esp8266_tencent_firmware\esp8266_tencent_firmware.c</PathWithFileName>
|
||||
<FilenameWithoutPath>esp8266_tencent_firmware.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>::CMSIS</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
|
@@ -10,13 +10,13 @@
|
||||
<TargetName>TencentOS_Tiny</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pCCUsed>6100001::V6.10.1::.\ARMCLANG</pCCUsed>
|
||||
<pCCUsed>6140000::V6.14::ARMCLANG</pCCUsed>
|
||||
<uAC6>1</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STM32WLE5JCIx</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32WLxx_DFP.1.0.2.OEM</PackID>
|
||||
<PackID>Keil.STM32WLxx_DFP.1.0.7</PackID>
|
||||
<PackURL>http://www.keil.com/pack</PackURL>
|
||||
<Cpu>IRAM(0x20000000,0x10000) IROM(0x08000000,0x40000) CPUTYPE("Cortex-M4") CLOCK(12000000) ELITTLE</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
@@ -185,6 +185,7 @@
|
||||
<uocXRam>0</uocXRam>
|
||||
<RvdsVP>0</RvdsVP>
|
||||
<RvdsMve>0</RvdsMve>
|
||||
<RvdsCdeCp>0</RvdsCdeCp>
|
||||
<hadIRAM2>0</hadIRAM2>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<StupSel>8</StupSel>
|
||||
@@ -338,7 +339,7 @@
|
||||
<MiscControls></MiscControls>
|
||||
<Define>USE_HAL_DRIVER,STM32WLE5xx,CORE_CM4</Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath>..\..\..\..\platform\vendor_bsp\st\STM32WLxx_HAL_Driver\Inc;..\..\..\..\platform\vendor_bsp\st\STM32WLxx_HAL_Driver\Inc\Legacy;..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32WLxx\Include;..\..\..\..\platform\vendor_bsp\st\CMSIS\Include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\kernel\core\include;..\..\..\..\kernel\pm\include;..\..\..\..\osal\cmsis_os;..\..\TOS_CONFIG;..\..\BSP\Middlewares\LoRaWAN\Conf;..\..\BSP\Middlewares\LoRaWAN\Crypto;..\..\BSP\Middlewares\LoRaWAN\Mac;..\..\BSP\Middlewares\LoRaWAN\Patterns\Basic;..\..\BSP\Middlewares\LoRaWAN\Utilities;..\..\BSP\Middlewares\SubGHz_Phy;..\..\BSP\Middlewares\SubGHz_Phy\stm32_radio_driver;..\..\BSP\Inc;.\App;.\Target;..\..\BSP\Utilities\lpm\tiny_lpm;..\..\BSP\Utilities\misc</IncludePath>
|
||||
<IncludePath>..\..\..\..\platform\vendor_bsp\st\STM32WLxx_HAL_Driver\Inc;..\..\..\..\platform\vendor_bsp\st\STM32WLxx_HAL_Driver\Inc\Legacy;..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32WLxx\Include;..\..\..\..\platform\vendor_bsp\st\CMSIS\Include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\kernel\core\include;..\..\..\..\kernel\pm\include;..\..\..\..\kernel\hal\include;..\..\..\..\osal\cmsis_os;..\..\TOS_CONFIG;..\..\BSP\Middlewares\LoRaWAN\Conf;..\..\BSP\Middlewares\LoRaWAN\Crypto;..\..\BSP\Middlewares\LoRaWAN\Mac;..\..\BSP\Middlewares\LoRaWAN\Patterns\Basic;..\..\BSP\Middlewares\LoRaWAN\Utilities;..\..\BSP\Middlewares\SubGHz_Phy;..\..\BSP\Middlewares\SubGHz_Phy\stm32_radio_driver;..\..\BSP\Inc;.\App;.\Target;..\..\BSP\Utilities\lpm\tiny_lpm;..\..\BSP\Utilities\misc;..\..\..\..\net\at\include;..\..\..\..\net\tencent_firmware_module_wrapper;..\..\..\..\devices\esp8266_tencent_firmware</IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
<Aads>
|
||||
@@ -351,7 +352,7 @@
|
||||
<NoWarn>0</NoWarn>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<useXO>0</useXO>
|
||||
<uClangAs>0</uClangAs>
|
||||
<ClangAsOpt>4</ClangAsOpt>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
@@ -392,6 +393,11 @@
|
||||
<Group>
|
||||
<GroupName>Application/User</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>main.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\main.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>adc.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
@@ -752,11 +758,6 @@
|
||||
<Group>
|
||||
<GroupName>TOS-CONFIG</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>main.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\main.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_config.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
@@ -798,9 +799,9 @@
|
||||
<GroupName>Hardware</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>sensor_parser.c</FileName>
|
||||
<FileName>pm2d5_parser.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\App\sensor_parser.c</FilePath>
|
||||
<FilePath>.\App\pm2d5_parser.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
@@ -994,6 +995,41 @@
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>at</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>tos_at.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\net\at\src\tos_at.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tencent_firmware_module_wrapper.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\net\tencent_firmware_module_wrapper\tencent_firmware_module_wrapper.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>hal</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>tos_hal_uart.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\hal\st\stm32wl\src\tos_hal_uart.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>devices</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>esp8266_tencent_firmware.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\devices\esp8266_tencent_firmware\esp8266_tencent_firmware.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>::CMSIS</GroupName>
|
||||
</Group>
|
||||
@@ -1014,4 +1050,19 @@
|
||||
<files/>
|
||||
</RTE>
|
||||
|
||||
<LayerInfo>
|
||||
<Layers>
|
||||
<Layer>
|
||||
<LayName><Project Info></LayName>
|
||||
<LayDesc></LayDesc>
|
||||
<LayUrl></LayUrl>
|
||||
<LayKeys></LayKeys>
|
||||
<LayCat></LayCat>
|
||||
<LayLic></LayLic>
|
||||
<LayTarg>0</LayTarg>
|
||||
<LayPrjMark>1</LayPrjMark>
|
||||
</Layer>
|
||||
</Layers>
|
||||
</LayerInfo>
|
||||
|
||||
</Project>
|
||||
|
Reference in New Issue
Block a user