2025-04-03 15:29:20 +08:00
|
|
|
|
/*
|
|
|
|
|
|
*********************************************************************************************************
|
|
|
|
|
|
* IAR Development Kits
|
|
|
|
|
|
* on the
|
|
|
|
|
|
*
|
|
|
|
|
|
* M451
|
|
|
|
|
|
*
|
|
|
|
|
|
* Filename : uart_dtu.c
|
|
|
|
|
|
* Version : V1.00
|
|
|
|
|
|
* Programmer(s) : Qian Xianghong
|
|
|
|
|
|
*********************************************************************************************************
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#include "includes.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "drv_dtu.h"
|
|
|
|
|
|
#include "drv_gps.h"
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD>(<28><><EFBFBD>ٷ<EFBFBD><D9B7>ͣ<EFBFBD>
|
|
|
|
|
|
#define INITIAL_TRAN_COUNT 6
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
#define abs(x) ((x) < 0 ? -(x) : (x))
|
|
|
|
|
|
|
|
|
|
|
|
// GPS<50>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>ݵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2010
|
|
|
|
|
|
#define GPS_BASE_YEAR 2010
|
|
|
|
|
|
|
|
|
|
|
|
// Boot-loader<65><72>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
|
|
|
|
|
|
#define LDROM_BASE 0x100000ul // 1M
|
|
|
|
|
|
|
|
|
|
|
|
// GPRS<52><53><EFBFBD>ڽ<EFBFBD><DABD>յ<EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
#define DTU_TASKM_DATA_COUNT 200
|
|
|
|
|
|
loopbuff_t DTU_TaskM;
|
|
|
|
|
|
uint8_t DTU_TaskM_Data[sizeof(uint8_t) * (DTU_TASKM_DATA_COUNT + 1)] = {0};
|
|
|
|
|
|
|
|
|
|
|
|
// ά<><CEAC>ƽ̨<C6BD><CCA8><EFBFBD>Ӽ<EFBFBD>ʱ
|
|
|
|
|
|
volatile uint32_t DTU_ldmsTime = 0;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݵIJɼ<C4B2>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
volatile uint32_t DTU_dataTime = 0;
|
|
|
|
|
|
// <20><><EFBFBD>ͳɹ<CDB3>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
volatile uint32_t DTU_succTime = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚϴ<CFB4><F3A3ACB2><EFBFBD><EFBFBD><EFBFBD>stack<63><6B><EFBFBD><EFBFBD>
|
|
|
|
|
|
char DTU_gpsData[2][DTU_GPSDATA_SIZE] = {0}; // <20><>չ<EFBFBD>ڴ<EFBFBD>
|
|
|
|
|
|
char DTU_recvBuff[DTU_RECVBUFF_SIZE] = {0}; // <20><>չ<EFBFBD>ڴ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
// һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С
|
|
|
|
|
|
#define UPGRADE_DATA_LEN 1024
|
|
|
|
|
|
|
|
|
|
|
|
// DTU_Task<73><6B><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
#define TASK_SENDBUFF_SIZE 400
|
|
|
|
|
|
uint8_t Task_sendBuff[TASK_SENDBUFF_SIZE] = {0}; // <20><>չ<EFBFBD>ڴ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
#define TASK_RECVBUFF_SIZE (UPGRADE_DATA_LEN + 32)
|
|
|
|
|
|
uint8_t Task_recvBuff[TASK_RECVBUFF_SIZE] = {0}; // <20><>չ<EFBFBD>ڴ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ֪ͨ<D6AA><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
volatile uint8_t DTU_semGPS = 0;
|
|
|
|
|
|
volatile uint8_t DTU_semGPRS = 0;
|
|
|
|
|
|
volatile uint8_t DTU_semSync = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ڷ<EFBFBD><DAB7>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16_t mark;
|
|
|
|
|
|
unsigned ver : 7;
|
|
|
|
|
|
unsigned trans : 1;
|
|
|
|
|
|
unsigned reserved: 8;
|
|
|
|
|
|
uint16_t len;
|
|
|
|
|
|
union
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16_t cmd;
|
|
|
|
|
|
struct
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t err;
|
|
|
|
|
|
uint8_t cmd_L;
|
|
|
|
|
|
};
|
|
|
|
|
|
};
|
|
|
|
|
|
} bluetooth_recv_t;
|
|
|
|
|
|
|
|
|
|
|
|
typedef bluetooth_recv_t bluetooth_send_t;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned staEPress3 : 2;
|
|
|
|
|
|
unsigned staETempr1 : 2;
|
|
|
|
|
|
unsigned staETempr2 : 2;
|
|
|
|
|
|
unsigned staETempr3 : 2;
|
|
|
|
|
|
|
|
|
|
|
|
unsigned staDiff : 2;
|
|
|
|
|
|
unsigned staPress : 2;
|
|
|
|
|
|
unsigned staEPress1 : 2;
|
|
|
|
|
|
unsigned staEPress2 : 2;
|
|
|
|
|
|
|
|
|
|
|
|
} bluetooth_sensor_t;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned maskStamp : 1;
|
|
|
|
|
|
unsigned maskEPress1 : 1;
|
|
|
|
|
|
unsigned maskEPress2 : 1;
|
|
|
|
|
|
unsigned maskEPress3 : 1;
|
|
|
|
|
|
unsigned : 1;
|
|
|
|
|
|
unsigned maskLowPower : 1;
|
|
|
|
|
|
unsigned maskAbnormal : 1;
|
|
|
|
|
|
unsigned maskCharging : 1;
|
|
|
|
|
|
|
|
|
|
|
|
unsigned maskRssi : 1;
|
|
|
|
|
|
unsigned maskGPS : 1;
|
|
|
|
|
|
unsigned maskETempr1 : 1;
|
|
|
|
|
|
unsigned maskETempr2 : 1;
|
|
|
|
|
|
unsigned maskETempr3 : 1;
|
|
|
|
|
|
unsigned maskBattery : 1;
|
|
|
|
|
|
unsigned maskFlow : 1;
|
|
|
|
|
|
unsigned maskLeak : 1;
|
|
|
|
|
|
} bluetooth_mask_t;
|
|
|
|
|
|
|
|
|
|
|
|
typedef union
|
|
|
|
|
|
{
|
|
|
|
|
|
struct
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned sec : 6;
|
|
|
|
|
|
unsigned min : 6;
|
|
|
|
|
|
unsigned hour_L : 4;
|
|
|
|
|
|
unsigned hour_H : 1;
|
|
|
|
|
|
unsigned day : 5;
|
|
|
|
|
|
unsigned mon : 4;
|
|
|
|
|
|
unsigned year : 6;
|
|
|
|
|
|
};
|
|
|
|
|
|
uint32_t tm;
|
|
|
|
|
|
} bluetooth_timestamp_t;
|
|
|
|
|
|
|
|
|
|
|
|
typedef union
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned long long ll;
|
|
|
|
|
|
struct
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned long l;
|
|
|
|
|
|
unsigned long h;
|
|
|
|
|
|
};
|
|
|
|
|
|
} longlong_mask_t;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
|
{
|
|
|
|
|
|
union
|
|
|
|
|
|
{
|
|
|
|
|
|
struct
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned sateCount : 5; // gps<70>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
unsigned posState : 1; // gps<70><73>λ״̬ <09><>0-GPSδ<53><CEB4>λ<EFBFBD><CEBB>1-GPS<50>Ѷ<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
unsigned carState : 1; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> <09><>0-<2D><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
unsigned carEvent : 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3>¼<EFBFBD><C2BC><EFBFBD>0-<2D><><EFBFBD><EFBFBD>״̬δ<CCAC>ı䣬1-<2D><><EFBFBD><EFBFBD>״̬<D7B4>Ѹı䣩
|
|
|
|
|
|
};
|
|
|
|
|
|
uint8_t state;
|
|
|
|
|
|
};
|
|
|
|
|
|
bluetooth_timestamp_t time; // ʱ<><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
|
int32_t latitude;
|
|
|
|
|
|
int32_t longitude;
|
|
|
|
|
|
uint16_t speed;
|
|
|
|
|
|
} gps_data_t;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct // size = 158
|
|
|
|
|
|
{
|
|
|
|
|
|
uint32_t sample_time; // <20>ɼ<EFBFBD>ʱ<EFBFBD>䣺<EFBFBD><E4A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
data_dtu_t dtuData; // size = 36
|
|
|
|
|
|
data_sample_t sampleData; // size = 118
|
|
|
|
|
|
} gprs_data_t;
|
|
|
|
|
|
|
|
|
|
|
|
// ˫<><CBAB>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD>ݽṹ
|
|
|
|
|
|
typedef struct // size = 120
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16_t serverVer; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE>
|
|
|
|
|
|
uint8_t type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint32_t diameter; // <20>ھ<EFBFBD>
|
|
|
|
|
|
uint32_t len; // Բ<><D4B2><EFBFBD>峤<EFBFBD><E5B3A4>
|
|
|
|
|
|
uint32_t lenExtra; // ֱ<>߷<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint32_t reserved_1[3];
|
|
|
|
|
|
uint8_t source; // ҺԴ
|
|
|
|
|
|
uint32_t density; // <20><>ҺԴ<D2BA>ı<EFBFBD><C4B1>أ<EFBFBD>kg/m3)
|
|
|
|
|
|
uint16_t fullPct; // <20><>Һλ<D2BA>ٷֱ<D9B7>
|
|
|
|
|
|
uint16_t priPct; // <20>ؼ<EFBFBD>Һλ<D2BA>ٷֱ<D9B7>
|
|
|
|
|
|
uint16_t orderPct; // <20><><EFBFBD><EFBFBD>Һλ<D2BA>ٷֱ<D9B7>
|
|
|
|
|
|
uint16_t emptyPct; // <20><>Һλ<D2BA>ٷֱ<D9B7>
|
|
|
|
|
|
uint32_t planMount; // ÿ<>ռƻ<D5BC><C6BB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint32_t predictMount; // ÿ<><C3BF>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint16_t warnVolt; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>: 10mV
|
|
|
|
|
|
uint16_t warnVoltH; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>: 10mV
|
|
|
|
|
|
uint16_t warnPress; // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>: KPa
|
|
|
|
|
|
uint16_t warnPressH; // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>: KPa
|
|
|
|
|
|
uint32_t intervalTrans; // <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint32_t intervalSample; // <20><><EFBFBD>ݲɼ<DDB2><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint32_t intervalGPSTrans; // λ<><CEBB><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint32_t intervalGPS; // λ<>òɼ<C3B2><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
union
|
|
|
|
|
|
{
|
|
|
|
|
|
struct
|
|
|
|
|
|
{
|
|
|
|
|
|
char gpsServer[20]; // Զ<><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (ֻ<>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
|
int16_t gpsPort; // Զ<><D4B6><EFBFBD>˿<EFBFBD> (ֻ<>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
|
char pwd1[6]; // <20><><EFBFBD><EFBFBD><DEB2><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
struct
|
|
|
|
|
|
{
|
|
|
|
|
|
char gprsServer[26]; // praxair<69><72><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|
|
|
|
|
int16_t gprsPort; // praxair: <20><EFBFBD><DEB8><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
};
|
|
|
|
|
|
uint32_t options; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
union
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t reserved_2[12];
|
|
|
|
|
|
struct
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16_t floorLevel; // praxair: Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint16_t span; // praxair: Һ<><D2BA><EFBFBD>仯<EFBFBD><E4BBAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint16_t spanPeriod; // praxair: Һ<><D2BA><EFBFBD>仯<EFBFBD><E4BBAF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
unsigned floorLevelAssigned : 1; // praxair: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>floorLevel<65>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|
|
|
|
|
unsigned spanAssigned : 1; // praxair: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>span<61>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|
|
|
|
|
unsigned spanPeriodAssigned : 1; // praxair: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>spanPeriod<6F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|
|
|
|
|
unsigned intervalTransAssigned : 1; // praxair: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>intervalTrans<6E>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|
|
|
|
|
unsigned gprsServerAssigned : 1; // praxair: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|
|
|
|
|
unsigned gprsPortAssigned : 1; // praxair: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|
|
|
|
|
unsigned : 2;
|
|
|
|
|
|
};
|
|
|
|
|
|
};
|
|
|
|
|
|
uint32_t ts; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
|
} param_data_t;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FRAM<41>У<EFBFBD><D0A3>ɶϵ<C9B6><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
typedef struct
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16_t check; // <20><>־<EFBFBD><D6BE><EFBFBD>̶<EFBFBD>Ϊ0x55AA
|
|
|
|
|
|
uint32_t ver; // <20>̼<EFBFBD><CCBC>汾
|
|
|
|
|
|
int32_t fileSize; // <20>̼<EFBFBD><CCBC><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|
|
|
|
|
uint16_t fileCrc; // <20>̼<EFBFBD><CCBC>ܵ<EFBFBD>crc
|
|
|
|
|
|
int32_t offset; // <20><><EFBFBD>ι̼<CEB9>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|
|
|
|
|
int32_t len; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|
|
|
|
|
uint16_t crc; // <20><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>crc
|
|
|
|
|
|
} upgrade_info_t;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>¼
|
|
|
|
|
|
typedef struct
|
|
|
|
|
|
{
|
|
|
|
|
|
uint32_t ver; // <20>̼<EFBFBD><CCBC>汾
|
|
|
|
|
|
int32_t fileSize; // <20>̼<EFBFBD><CCBC><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|
|
|
|
|
uint16_t fileCrc; // <20>̼<EFBFBD><CCBC>ܵ<EFBFBD>crc
|
|
|
|
|
|
int32_t offset; // <20><><EFBFBD>ι̼<CEB9>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|
|
|
|
|
int32_t len; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|
|
|
|
|
uint8_t data[UPGRADE_DATA_LEN]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint16_t crc; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>crc
|
|
|
|
|
|
} upgrade_frame_t;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ
|
|
|
|
|
|
typedef struct // size=12
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned short check; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־, 0x55AA<41><41>ʾ<EFBFBD><CABE>Ч
|
|
|
|
|
|
unsigned upgrade_request : 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
unsigned upgrade_result : 3; // <20><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܱ<EFBFBD>־<EFBFBD><D6BE>0-<2D>ɹ<EFBFBD><C9B9><EFBFBD>1-ʧ<>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ౣ<EFBFBD><E0B1A3>
|
|
|
|
|
|
unsigned encrypt_flag : 2; // <20><><EFBFBD>ܱ<EFBFBD>־<EFBFBD><D6BE> 0-<2D><EFBFBD><DEBC>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ౣ<EFBFBD><E0B1A3>
|
|
|
|
|
|
unsigned compress_flag : 2; // ѹ<><D1B9><EFBFBD><EFBFBD>־<EFBFBD><D6BE> 0-<2D><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>1-<2D><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ౣ<EFBFBD><E0B1A3>
|
|
|
|
|
|
unsigned rerseved1 : 8; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0xFF
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long upgrade_length; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
unsigned rerseved2 : 8; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0xFF
|
|
|
|
|
|
unsigned rerseved3 : 8; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0xFF
|
|
|
|
|
|
unsigned short crc; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>crcУ<63><D0A3>
|
|
|
|
|
|
} TUpgradeHeader;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>¼
|
|
|
|
|
|
typedef struct // size=76
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned short check; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־, 0x55AA<41><41>ʾ<EFBFBD><CABE>Ч
|
|
|
|
|
|
uint8_t PSN[6]; // <20><>ȡ<EFBFBD><C8A1>Կ<EFBFBD><D4BF><EFBFBD>õ<EFBFBD>PSN<53><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PSN<53>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD>ȡ<EFBFBD><C8A1>
|
|
|
|
|
|
char product[12]; // <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
|
|
|
|
|
|
char device[21]; // Ĭ<><C4AC>ΪcPSN
|
|
|
|
|
|
char secret[33]; // <20>豸<EFBFBD><E8B1B8>Կ
|
|
|
|
|
|
unsigned short crc; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>crcУ<63><D0A3>
|
|
|
|
|
|
} TAliyunSecret;
|
|
|
|
|
|
|
|
|
|
|
|
#define ALIYUN_SECRET_SIZE (66)
|
|
|
|
|
|
|
|
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ
|
|
|
|
|
|
TAliyunSecret aliyunSecret = {0};
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
|
|
|
|
|
upgrade_info_t upInfo = {0};
|
|
|
|
|
|
|
|
|
|
|
|
// GPSѭ<53><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
|
|
|
|
|
loopbuff_t gpsBuff = {0};
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>GPRS<52><53>¼<EFBFBD><C2BC>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
loopbuff_t gprsBuff = {0};
|
|
|
|
|
|
loopbuff_t bd_gprsBuff = {0};
|
|
|
|
|
|
// GPRS<52><53>¼<EFBFBD><C2BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
|
|
|
|
|
gprs_data_t gprsRWBuf;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief ?????,?????????
|
|
|
|
|
|
*/
|
|
|
|
|
|
struct reportInf_t {
|
|
|
|
|
|
uint32_t lastTime; //!< ?????????
|
|
|
|
|
|
uint32_t nextTime; //!< ??????????
|
|
|
|
|
|
uint32_t redoTime; //!< ????????????
|
|
|
|
|
|
uint8_t redoNum; //!< ????????????
|
|
|
|
|
|
uint8_t fiRedo; //!< ????,??????????????,(??)????????
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief reportInf:????,????????
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƿ<EFBFBD>GPS<50><53>λ
|
|
|
|
|
|
volatile uint8_t GPS_Locate = 1;
|
|
|
|
|
|
volatile uint8_t GPS_Located = 0;
|
|
|
|
|
|
volatile uint32_t GPS_waitTick = 0;
|
|
|
|
|
|
volatile uint8_t GPS_Waiting = 0;
|
|
|
|
|
|
// GPS<50><53>λ<EFBFBD><CEBB>ʱ
|
|
|
|
|
|
const uint8_t DTU_tmrLocate = 90;
|
|
|
|
|
|
|
|
|
|
|
|
// GPS<50><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
volatile uint32_t GPS_tranTick = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݵ<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
bluetooth_timestamp_t GPS_LastTime = {0};
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>GPRS<52><53><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint8_t GPRS_Send_Task = 0;
|
|
|
|
|
|
uint32_t GPRS_Send_Time = 0;
|
|
|
|
|
|
// <20>Ƿ<C7B7>GPRS<52><53><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint8_t GPRS_Save_Task = 0;
|
|
|
|
|
|
uint32_t GPRS_Save_Time = 0;
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////
|
|
|
|
|
|
uint32_t Fre[5] = {498000000, 499000000, 509770000, 868000000, 915000000};
|
|
|
|
|
|
uint8_t RXbuffer[60];
|
|
|
|
|
|
#define TASK_SENDBUFF_SIZE 400
|
|
|
|
|
|
//uint8_t Task_sendBuff[TASK_SENDBUFF_SIZE] = {0}; // <20><>չ<EFBFBD>ڴ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t TXbuffer[10] = {0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA};
|
|
|
|
|
|
|
|
|
|
|
|
tSX127xError set_lora_freq(int freq)
|
|
|
|
|
|
{
|
|
|
|
|
|
G_LoRaConfig.LoRa_Freq = Fre[freq]; //????470MHz
|
|
|
|
|
|
G_LoRaConfig.BandWidth = BW500KHZ; //BW = 125KHz BW125KHZ
|
|
|
|
|
|
G_LoRaConfig.SpreadingFactor = SF12; //SF = 9
|
|
|
|
|
|
G_LoRaConfig.CodingRate = CR_4_5; //CR = 4/6
|
|
|
|
|
|
G_LoRaConfig.PowerCfig = 15; //19<31><39>1dBm
|
|
|
|
|
|
G_LoRaConfig.MaxPowerOn = true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
|
|
|
|
|
|
G_LoRaConfig.CRCON = true; //CRCУ<43>鿪<EFBFBD><E9BFAA><EFBFBD>
|
|
|
|
|
|
G_LoRaConfig.ExplicitHeaderOn = true; //Header<65><72><EFBFBD><EFBFBD>
|
|
|
|
|
|
G_LoRaConfig.PayloadLength = 42; //<2F><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
return SX127X_Lora_init(G_LoRaConfig.LoRa_Freq);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//-->add
|
|
|
|
|
|
#define LORA_COMMU_IDLE_STATE 0
|
|
|
|
|
|
#define LORA_COMMU_START_STATE 1
|
|
|
|
|
|
#define LORA_COMMU_SEND_STATE 2
|
|
|
|
|
|
#define LORA_COMMU_REC_STATE 3
|
|
|
|
|
|
#define LORA_COMMU_FAIL_STATE 4
|
|
|
|
|
|
#define LORA_COMMU_SUCC_STATE 5
|
|
|
|
|
|
uint16_t g_lora_commu_state=LORA_COMMU_IDLE_STATE;
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////
|
|
|
|
|
|
uint8_t pack_lora_send_data(gprs_data_t *pGprs, uint32_t totalSeconds)
|
|
|
|
|
|
{
|
|
|
|
|
|
int i=0;
|
|
|
|
|
|
uint16_t val = 0;
|
|
|
|
|
|
Task_sendBuff[i++]=0x01;
|
2025-04-14 08:14:36 +08:00
|
|
|
|
Int2ByteS(Task_sendBuff, i, /*htons*/(dcBuff.sampleData.diff));
|
|
|
|
|
|
|
2025-04-03 15:29:20 +08:00
|
|
|
|
i +=2 ;
|
2025-04-14 08:14:36 +08:00
|
|
|
|
|
|
|
|
|
|
Int2ByteS(Task_sendBuff, i, /*htons*/(dcBuff.dtuData.batVoltage));
|
2025-04-03 15:29:20 +08:00
|
|
|
|
i += 2;
|
|
|
|
|
|
// <20>汾<EFBFBD><E6B1BE>
|
|
|
|
|
|
Task_sendBuff[i++] = dcBuff.powerInfo.hardVer.minor;
|
|
|
|
|
|
Task_sendBuff[i++] = dcBuff.powerInfo.softVer.minor;
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-04-14 08:14:36 +08:00
|
|
|
|
Int2ByteS(Task_sendBuff, i, /*htons*/(dcBuff.configData.intervalSample));
|
2025-04-03 15:29:20 +08:00
|
|
|
|
i += 2;
|
2025-04-14 08:14:36 +08:00
|
|
|
|
Int2ByteL(Task_sendBuff, i, /*htonl*/(dcBuff.configData.intervalTrans));
|
2025-04-03 15:29:20 +08:00
|
|
|
|
i += 4;
|
|
|
|
|
|
|
2025-04-14 08:14:36 +08:00
|
|
|
|
Int2ByteS(Task_sendBuff, i, /*htons*/(dcBuff.configBottle.fullPct)); //<2F><>apex<65><78>Ҫ<EFBFBD><D2AA>Ϊѹǿ
|
2025-04-03 15:29:20 +08:00
|
|
|
|
i += 2;
|
|
|
|
|
|
|
2025-04-14 08:14:36 +08:00
|
|
|
|
Int2ByteS(Task_sendBuff, i, /*htons*/(dcBuff.configBottle.emptyPct));
|
2025-04-03 15:29:20 +08:00
|
|
|
|
i += 2;
|
|
|
|
|
|
|
|
|
|
|
|
// // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// Int2ByteS(Task_sendBuff, i, htons(dcBuff.configBottle.warnPressH));
|
|
|
|
|
|
// i += 2;
|
|
|
|
|
|
// // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// Int2ByteS(Task_sendBuff, i, htons(dcBuff.configBottle.warnPress));
|
|
|
|
|
|
// i += 2;
|
|
|
|
|
|
// // <20>¶ȱ<C2B6><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// Int2ByteS(Task_sendBuff, i, htons(dcBuff.configBottle.warnTemprH));
|
|
|
|
|
|
// i += 2;
|
|
|
|
|
|
// // <20>¶ȱ<C2B6><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
// Int2ByteS(Task_sendBuff, i, htons(dcBuff.configBottle.warnTempr));
|
|
|
|
|
|
// i += 2;
|
|
|
|
|
|
|
|
|
|
|
|
return i;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t parse_load(uint8_t *buf)
|
|
|
|
|
|
{
|
|
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
|
|
typedef struct
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t type;
|
|
|
|
|
|
uint32_t flag;
|
|
|
|
|
|
uint16_t intervalSample; // <20><><EFBFBD>ݲɼ<DDB2><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint32_t intervalTrans; // <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint16_t fullPct;
|
|
|
|
|
|
uint16_t emptyPct;
|
|
|
|
|
|
// uint16_t warnPressH;
|
|
|
|
|
|
// uint16_t warnPress;
|
|
|
|
|
|
// int16_t warnTemprH;
|
|
|
|
|
|
// int16_t warnTempr;
|
|
|
|
|
|
} parse_data_t;
|
|
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
|
|
|
|
|
|
parse_data_t *buf2;
|
|
|
|
|
|
buf2 = (parse_data_t*) buf;
|
|
|
|
|
|
if(buf2->flag == 0) return 0;
|
|
|
|
|
|
|
|
|
|
|
|
dcBuff.configData.intervalSample=buf2->intervalSample;
|
|
|
|
|
|
dcBuff.configData.intervalTrans=buf2->intervalTrans;
|
|
|
|
|
|
|
|
|
|
|
|
dcBuff.configBottle.fullPct=buf2->fullPct;
|
|
|
|
|
|
dcBuff.configBottle.emptyPct=buf2->emptyPct;
|
|
|
|
|
|
|
|
|
|
|
|
//dcBuff.configBottle.warnPressH=buf2->warnPressH;
|
|
|
|
|
|
//dcBuff.configBottle.warnPress=buf2->warnPress;
|
|
|
|
|
|
|
|
|
|
|
|
//dcBuff.configBottle.warnTemprH=buf2->warnTemprH;
|
|
|
|
|
|
//dcBuff.configBottle.warnTempr=buf2->warnTempr;
|
|
|
|
|
|
dcBuff.configBottle.updateFlag = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>־
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
Config_SaveConfig();
|
|
|
|
|
|
|
|
|
|
|
|
// uint8_t ret = 0;
|
|
|
|
|
|
// S_RTC_TIME_DATA_T sRTC;
|
|
|
|
|
|
//
|
|
|
|
|
|
// if(strncmp(message, "$GPGGA", 6) == 0 || strncmp(message, "$GNGGA", 6) == 0)
|
|
|
|
|
|
// {
|
|
|
|
|
|
//// printf("\n%s\n", message);
|
|
|
|
|
|
// *bufIdx = 1 - *bufIdx;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else if(strncmp(message, "$GPRMC", 6) == 0 || strncmp(message, "$GNRMC", 6) == 0)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// printf("\n%s\n", message);
|
|
|
|
|
|
|
|
|
|
|
|
// // <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
|
|
|
|
|
|
// RTC_GetDateAndTime(&sRTC);
|
|
|
|
|
|
// // <20><>¼GPS<50>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
// DTU_gpsTime = Calc_SecondsFromYear(INITIAL_YEAR, sRTC.u32Year, sRTC.u32Month, sRTC.u32Day,
|
|
|
|
|
|
// sRTC.u32Hour, sRTC.u32Minute, sRTC.u32Second);
|
|
|
|
|
|
|
|
|
|
|
|
// parse_gga(DTU_gpsData[1 - *bufIdx], sample);
|
|
|
|
|
|
// ret = parse_rmc(message, sample);
|
|
|
|
|
|
// if(!ret)
|
|
|
|
|
|
// sample->posState = 0;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static uint8_t first_send=1;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壺<EFBFBD><E5A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD>GPS<50><53><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ǿ<EFBFBD>ȵ<EFBFBD>
|
|
|
|
|
|
void DTU_Task(void *p_arg)
|
|
|
|
|
|
{
|
|
|
|
|
|
bluetooth_send_t *pSend = (bluetooth_send_t *) Task_sendBuff;
|
|
|
|
|
|
bluetooth_send_t *pRecv = (bluetooth_send_t *) Task_recvBuff;
|
|
|
|
|
|
uint16_t i, j, k;
|
|
|
|
|
|
uint8_t gpsCount, gpsDone;
|
|
|
|
|
|
uint16_t gpsInterval;
|
|
|
|
|
|
uint32_t totalSeconds;
|
|
|
|
|
|
uint32_t relativeTime;
|
|
|
|
|
|
S_RTC_TIME_DATA_T sRTC;
|
|
|
|
|
|
gprs_data_t *pGprs;
|
|
|
|
|
|
uint8_t try_count;
|
|
|
|
|
|
uint16_t recvLen;
|
|
|
|
|
|
uint8_t upgrade;
|
|
|
|
|
|
uint8_t ackUpgrade;
|
|
|
|
|
|
uint8_t downloadParam;
|
|
|
|
|
|
uint8_t ackParam;
|
|
|
|
|
|
uint8_t downloadConfig;
|
|
|
|
|
|
uint8_t ackConfig;
|
|
|
|
|
|
uint8_t reset = 0;
|
|
|
|
|
|
param_data_t *pParam;
|
|
|
|
|
|
TUpgradeHeader upHeader;
|
|
|
|
|
|
upgrade_frame_t *pFrame;
|
|
|
|
|
|
gps_data_t gps;
|
|
|
|
|
|
uint16_t nextPtr;
|
|
|
|
|
|
uint8_t write_count;
|
|
|
|
|
|
uint8_t rf_fail_count = 0;
|
|
|
|
|
|
uint8_t semSync, semGPRS, semGPS;
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t tick;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
memset(&dcBuff.dtuData, 0, sizeof(dcBuff.dtuData));
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
GPS_tranTick = GetDelayTick(dcBuff.configData.intervalGPSTrans * 1000);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
DTU_semSync = 1;
|
|
|
|
|
|
DTU_semGPRS = 1;
|
|
|
|
|
|
DTU_semGPS = 1;
|
|
|
|
|
|
|
|
|
|
|
|
while(1)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
|
|
|
|
|
|
RTC_GetDateAndTime(&sRTC);
|
|
|
|
|
|
printf("\n%04d-%02d-%02d %02d:%02d:%02d\n", sRTC.u32Year, sRTC.u32Month, sRTC.u32Day,
|
|
|
|
|
|
sRTC.u32Hour, sRTC.u32Minute, sRTC.u32Second);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>gps<70><73>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
totalSeconds = Calc_SecondsFromYear(INITIAL_YEAR, sRTC.u32Year, sRTC.u32Month, sRTC.u32Day,
|
|
|
|
|
|
sRTC.u32Hour, sRTC.u32Minute, sRTC.u32Second);
|
|
|
|
|
|
// <20>տ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>е<EFBFBD>ʱ<EFBFBD><EFBFBD><F2A3ACBB>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨<EFBFBD><E4A3A8><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>ʼ<EFBFBD><CABC>ʱ<EFBFBD>䣩
|
|
|
|
|
|
if(totalSeconds < 10)
|
|
|
|
|
|
totalSeconds = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD>
|
|
|
|
|
|
semSync = DTU_semSync;
|
|
|
|
|
|
DTU_semSync = 0;
|
|
|
|
|
|
semGPRS = DTU_semGPRS;
|
|
|
|
|
|
DTU_semGPRS = 0;
|
|
|
|
|
|
semGPS = DTU_semGPS;
|
|
|
|
|
|
DTU_semGPS = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printf("\n\n\n------semGPRS=%d-------semSync=%d------\n\n\n",semGPRS,semSync);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(semGPRS || semSync)
|
|
|
|
|
|
{
|
|
|
|
|
|
GPRS_Send_Task = 0;
|
|
|
|
|
|
printf("\n*** dcBuff.sampleData.warnning = %d ***\n", dcBuff.sampleData.warnning);
|
|
|
|
|
|
if(dcBuff.sampleData.warnning||first_send)
|
|
|
|
|
|
{
|
|
|
|
|
|
GPRS_Send_Task = 1;
|
|
|
|
|
|
dcBuff.sampleData.warnning = 0;
|
|
|
|
|
|
first_send=0;
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>Сֵ
|
|
|
|
|
|
if(totalSeconds + 3 >= GPRS_Send_Time + (dcBuff.configData.intervalTrans > 300 ? 300 : dcBuff.configData.intervalTrans))
|
|
|
|
|
|
{
|
|
|
|
|
|
GPRS_Send_Task = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(((SYS_RSTSTS & 0x13) && !(SYS_RSTSTS & 0x04) && // <20>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>λ, <20>ǿ<EFBFBD><C7BF>Ź<EFBFBD><C5B9><EFBFBD>λ
|
|
|
|
|
|
totalSeconds < INITIAL_TRAN_COUNT * (dcBuff.configData.intervalSample > 300 ? 300 : dcBuff.configData.intervalSample))
|
|
|
|
|
|
|| totalSeconds + 3 >= GPRS_Send_Time + dcBuff.configData.intervalTrans )
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>Сֵ
|
|
|
|
|
|
if(totalSeconds + 3 >= GPRS_Send_Time + (dcBuff.configData.intervalTrans > 300 ? 300 : dcBuff.configData.intervalTrans))
|
|
|
|
|
|
GPRS_Send_Task = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(Wakeup_GetWorkMode() == WORK_MODE_NORMAL && GPRS_Send_Task)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
if(set_lora_freq(0) != NORMAL) //
|
|
|
|
|
|
{
|
|
|
|
|
|
printf("\nlora init err\n");
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD>
|
|
|
|
|
|
GPRS_semSampled = 0;
|
|
|
|
|
|
// <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
Sample_Notify();
|
|
|
|
|
|
tick = GetDelayTick(3000);
|
|
|
|
|
|
while(!GPRS_semSampled && !IsTickOut(tick))
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
i = pack_lora_send_data(pGprs, totalSeconds);
|
|
|
|
|
|
try_count = 3;
|
|
|
|
|
|
while(try_count--)
|
|
|
|
|
|
{
|
|
|
|
|
|
j = rf_app_send_data(i, Task_sendBuff);
|
|
|
|
|
|
osDelay(5000);
|
|
|
|
|
|
if(g_lora_commu_state==LORA_COMMU_SUCC_STATE)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><>¼<EFBFBD><C2BC><EFBFBD>ͳɹ<CDB3><C9B9><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
RTC_GetDateAndTime(&sRTC);
|
|
|
|
|
|
DTU_succTime = Calc_SecondsFromYear(INITIAL_YEAR, sRTC.u32Year, sRTC.u32Month, sRTC.u32Day,
|
|
|
|
|
|
sRTC.u32Hour, sRTC.u32Minute, sRTC.u32Second);
|
|
|
|
|
|
|
|
|
|
|
|
printf("\ncommu success\n");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
printf("\ncommu fail\n");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
GPRS_Send_Time = totalSeconds;
|
|
|
|
|
|
|
|
|
|
|
|
osDelay(1000);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
printf("\nlora to SleepMode\n");
|
|
|
|
|
|
SX127X_SleepMode();
|
|
|
|
|
|
// DIO0_DisableInterrupt();
|
|
|
|
|
|
// printf("\nlora spi deinit\n");
|
|
|
|
|
|
Lora_spi_di_deinit();
|
|
|
|
|
|
osDelay(2000);
|
|
|
|
|
|
printf("\nlora to powerdown\n");
|
|
|
|
|
|
Wakeup_Powerdown();
|
|
|
|
|
|
|
|
|
|
|
|
//continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|