clean code, fix read rtc (TEST_RTC_DELTA)

This commit is contained in:
pvvx 2024-02-09 14:19:16 +03:00
parent 6a28fd36e1
commit a2f532f3a9
22 changed files with 16755 additions and 16734 deletions

View file

@ -34,7 +34,8 @@ SRCS = $(addprefix $(SRC_PATH)/, $(SRC_PRJ))
DEFINES = -D__GCC
DEFINES += $(POJECT_DEF)
DEFINES += -DDEBUG_INFO=0
#DEFINES += -DMTU_SIZE=247
DEFINES += -DMTU_SIZE=247
DEFINES += -DTEST_RTC_DELTA=1
DEFINES += -DCFG_SLEEP_MODE=PWR_MODE_SLEEP
DEFINES += -DADV_NCONN_CFG=0x01
DEFINES += -DADV_CONN_CFG=0x02

View file

@ -561,7 +561,7 @@ static void hal_gpio_sleep_handler(void)
static void hal_gpio_wakeup_handler(void)
{
int i;
NVIC_SetPriority(GPIO_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority(GPIO_IRQn, IRQ_PRIO_APP); //IRQ_PRIO_HAL);
NVIC_EnableIRQ(GPIO_IRQn);
#ifdef XOSC_PIN_ALLOW
@ -699,7 +699,7 @@ int hal_gpio_init(void)
//disable all wakeup pin
AP_WAKEUP->io_wu_mask_31_0 = 0;
AP_WAKEUP->io_wu_mask_34_32 = 0;
NVIC_SetPriority(GPIO_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority(GPIO_IRQn, IRQ_PRIO_APP); // IRQ_PRIO_HAL);
NVIC_EnableIRQ(GPIO_IRQn);
#if(CFG_SLEEP_MODE == PWR_MODE_SLEEP)
hal_pwrmgr_register(MOD_GPIO, hal_gpio_sleep_handler, hal_gpio_wakeup_handler);

View file

@ -281,22 +281,6 @@ void clk_change_mod_restore(void)
}
#if(CFG_SLEEP_MODE == PWR_MODE_SLEEP)
void peripheral_interrupt_restore_default(void)
{
NVIC_SetPriority((IRQn_Type)KSCAN_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)WDT_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)UART0_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)UART1_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)I2C0_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)I2C1_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)SPI0_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)SPI1_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)GPIO_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)DMAC_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)TIM5_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)TIM6_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)ADCC_IRQn, IRQ_PRIO_HAL);
}
int __attribute__((used)) hal_pwrmgr_wakeup_process(void)
{
@ -324,11 +308,11 @@ int __attribute__((used)) hal_pwrmgr_wakeup_process(void)
NVIC_SetPriority((IRQn_Type)I2C1_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)SPI0_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)SPI1_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)GPIO_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)GPIO_IRQn, IRQ_PRIO_APP);
NVIC_SetPriority((IRQn_Type)DMAC_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)TIM5_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)TIM6_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)ADCC_IRQn, IRQ_PRIO_HAL);
NVIC_SetPriority((IRQn_Type)ADCC_IRQn, IRQ_PRIO_APP);
for(i = 0; i< s_pwrmgr_cfg.moudle_num; i++)

View file

@ -252,7 +252,13 @@ void config_RTC0(uint32 time)
{
// *((volatile uint32_t *)(0xe000e100)) |= INT_BIT_RTC; // remove, we don't use RTC interrupt
// comparator configuration
#if TEST_RTC_DELTA
do
sleep_tick = *(volatile uint32_t*) 0x4000f028; // read current RTC counter
while(sleep_tick != *(volatile uint32_t*) 0x4000f028);
#else
sleep_tick = *(volatile uint32_t*) 0x4000f028; // read current RTC counter
#endif
//align to rtc clock edge
WaitRTCCount(1);
g_TIM2_IRQ_to_Sleep_DeltTick = (g_TIM2_IRQ_TIM3_CurrCount>(AP_TIM3->CurrentCount))

View file

@ -5586,7 +5586,13 @@ void config_RTC1(uint32 time)
//update for cal ll next time after wakeup
ll_remain_time = read_LL_remainder_time();
// comparator configuration
#if TEST_RTC_DELTA
do
sleep_tick = *(volatile uint32_t*) 0x4000f028; // read current RTC counter
while(sleep_tick != *(volatile uint32_t*) 0x4000f028);
#else
sleep_tick = *(volatile uint32_t*) 0x4000f028; // read current RTC counter
#endif
g_TIM2_IRQ_to_Sleep_DeltTick = (g_TIM2_IRQ_TIM3_CurrCount>(AP_TIM3->CurrentCount))
? (g_TIM2_IRQ_TIM3_CurrCount-(AP_TIM3->CurrentCount)): 0;
AP_AON->RTCCC0 = sleep_tick + time; //set RTC comparatr0 value
@ -7672,7 +7678,7 @@ void init_config(void)
if(g_clk32K_config == CLK_32K_XTAL)
pGlobal_config[LL_SWITCH] &= 0xffffffee;
else
pGlobal_config[LL_SWITCH] |= RC32_TRACKINK_ALLOW | LL_RC32K_SEL;
pGlobal_config[LL_SWITCH] |= LL_RC32K_SEL | RC32_TRACKINK_ALLOW; // TODO: RTC 32000 Hz or 32768 Hz ?
// sleep delay
pGlobal_config[MIN_TIME_TO_STABLE_32KHZ_XOSC] = 10; // 10ms, temporary set

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -138,8 +138,7 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
obuf[1] = wrk.reboot;
olen = 2;
} else if (cmd == CMD_ID_MEASURE) {
memcpy(&obuf[1], &measured_data, send_len_measured_data);
olen = 1 + send_len_measured_data;
olen = make_measure_msg(obuf);
#if (DEV_SERVICES & SERVICE_SCREEN)
} else if (cmd == CMD_ID_LCD_DUMP) { // Get/set lcd buf
if (--len > sizeof(display_buff))

View file

@ -190,7 +190,7 @@
//#define LED_OFF 0
#define DEF_MODEL_NUMBER_STR "TH05"
#define DEF_HARDWARE_REVISION "0001"
#define DEF_HARDWARE_REVISION "0014"
#define DEF_MANUFACTURE_NAME_STR "Tuya"
#else
@ -259,7 +259,12 @@ extern work_parm_t wrk;
#if 1
#define clock_time_rtc() rtc_get_counter()
#else
inline uint32 clock_time_rtc(void) { return AP_AON->RTCCNT; } // (*(volatile unsigned int*)0x4000f028); }// & 0xffffff; // max 512 sec
inline uint32 clock_time_rtc(void) {
uint32_t tick;
do
tick = *(volatile uint32_t*) 0x4000f028; // read current RTC counter (AP_AON->RTCCNT)
while(tick != *(volatile uint32_t*) 0x4000f028;) // AP_AON->RTCCNT
return tick; } // (*(volatile unsigned int*)0x4000f028); }// & 0xffffff; // max 512 sec
#endif
// uint32_t get_delta_time_rtc(uint32_t start_time_rtc);

View file

@ -466,6 +466,24 @@ void new_ota_data(void) {
}
#endif
uint16_t make_measure_msg(uint8_t *pbuf) {
pbuf[0] = CMD_ID_MEASURE;
memcpy(&pbuf[1], &measured_data, send_len_measured_data);
pbuf[send_len_measured_data + 1] = clkt.utc_time_sec & 0xff;
pbuf[send_len_measured_data + 2] = (clkt.utc_time_sec >> 8) & 0xff;
pbuf[send_len_measured_data + 3] = (clkt.utc_time_sec >> 16) & 0xff;
pbuf[send_len_measured_data + 4] = (clkt.utc_time_sec >> 24) & 0xff;
#if (DEV_SERVICES & SERVICE_RDS)
pbuf[send_len_measured_data + 5] = adv_wrk.rds_count & 0xff;
pbuf[send_len_measured_data + 6] = (adv_wrk.rds_count >> 8) & 0xff;
pbuf[send_len_measured_data + 7] = (adv_wrk.rds_count >> 16) & 0xff;
pbuf[send_len_measured_data + 8] = (adv_wrk.rds_count >> 24) & 0xff;
return send_len_measured_data + 1 + 4 + 4;
#else
return send_len_measured_data + 1 + 4;
#endif
}
static void measureNotifyCB( linkDBItem_t* pLinkItem )
{
if ( pLinkItem->stateFlags & LINK_CONNECTED )
@ -477,23 +495,7 @@ static void measureNotifyCB( linkDBItem_t* pLinkItem )
{
attHandleValueNoti_t noti;
noti.handle = simpleProfileAttrTbl[CDM_DATA_ATTR_IDX].handle;;
#if (DEV_SERVICES & SERVICE_RDS)
noti.len = send_len_measured_data + 1 + 4 + 4;
#else
noti.len = send_len_measured_data + 1 + 4;
#endif
noti.value[0] = CMD_ID_MEASURE;
memcpy(&noti.value[1], &measured_data, send_len_measured_data);
noti.value[send_len_measured_data + 1] = clkt.utc_time_sec & 0xff;
noti.value[send_len_measured_data + 2] = (clkt.utc_time_sec >> 8) & 0xff;
noti.value[send_len_measured_data + 3] = (clkt.utc_time_sec >> 16) & 0xff;
noti.value[send_len_measured_data + 4] = (clkt.utc_time_sec >> 24) & 0xff;
#if (DEV_SERVICES & SERVICE_RDS)
noti.value[send_len_measured_data + 5] = adv_wrk.rds_count & 0xff;
noti.value[send_len_measured_data + 6] = (adv_wrk.rds_count >> 8) & 0xff;
noti.value[send_len_measured_data + 7] = (adv_wrk.rds_count >> 16) & 0xff;
noti.value[send_len_measured_data + 8] = (adv_wrk.rds_count >> 24) & 0xff;
#endif
noti.len = make_measure_msg(noti.value);
GATT_Notification( pLinkItem->connectionHandle, &noti, FALSE );
}
}

View file

@ -80,6 +80,7 @@ void new_cmd_data(void);
void new_ota_data(void);
void wrk_notify(void);
void measure_notify(void);
uint16_t make_measure_msg(uint8_t *pbuf);
#ifdef __cplusplus
}

View file

@ -1316,17 +1316,11 @@ function parseBlkCustom(value) {
let pbat = value.getUint8(9);
let flg = 0;
let rds_count = 0;
let delta = 0;
let s = 'Температура: ' + temp.toFixed(2) + '°C'
+ ', Влажность: ' + humi.toFixed(2) + '%'
+ ', Vbat: ' + vbat + ' мВ'
+ ', ID: ' + count;
if(len > 12) {
flg = value.getUint8(9);
rds_count = value.getUint32(10, true);
s += ', счетчик срабатываний: '+ rds_count
+ ', флаги: 0x' + hex(flg,2) + ':r' + (flg&1) + '/t' + ((flg>>1)&1);
}
console.log(s);
$('lblTemp').innerHTML = temp + ' °C';
$('lblHumi').innerHTML = humi + ' %RH';
$('lblBat').innerHTML = pbat + ' % (' + vbat / 1000 + ' V)';
@ -1334,29 +1328,27 @@ function parseBlkCustom(value) {
if(len > 10) {
flg = value.getUint8(10);
s += ", флаги: 0x" + hex(flg,2);
so = "In: " + (flg&1)
+ ", Out: " + ((flg&2)? 1:0)
+ ", Cmf: " + ((flg&4)? 1:0)
+ ", Te: " + ((flg&16)? 1:0)
+ ", He: " + ((flg&32)? 1:0);
}
if(len > 14) {
devTime.cur = value.getUint32(11,true);
//console.log('Device Time: 0x' + hex(devtime.cur, 8));
let dt = new Date(devTime.cur * 1000);
let sDateTime = (dt.toISOString().slice(0, -5)).replace('T',' ');
$('lblTime').innerHTML = sDateTime;
let time = Date.now() / 1000 - (new Date()).getTimezoneOffset() * 60;
let delta = devTime.cur - time;
console.log('Время на устройстве: ' + sDateTime + ', Уход: ' + Math.round(delta) + ' сек');
$('lbDeltaTime').innerHTML = 'Уход часов: ' + Math.round(delta) + ' сек';
if(len > 18) {
rds_count = value.getUint32(15,true);
s += ", rds: " + rds_count;
so += ", rds: " + rds_count;
if(len > 14) {
devTime.cur = value.getUint32(11,true);
//console.log('Device Time: 0x' + hex(devtime.cur, 8));
let dt = new Date(devTime.cur * 1000);
let sDateTime = (dt.toISOString().slice(0, -5)).replace('T',' ');
$('lblTime').innerHTML = sDateTime;
let time = Date.now() / 1000 - (new Date()).getTimezoneOffset() * 60;
let delta = devTime.cur - time;
console.log('Время на устройстве: ' + sDateTime + ', Уход: ' + Math.round(delta) + ' сек');
$('lbDeltaTime').innerHTML = 'Уход часов: ' + Math.round(delta) + ' сек';
if(len > 18) {
rds_count = value.getUint32(15,true);
s += ", rds: " + rds_count;
so += ", rds: " + rds_count;
}
}
// if(delta > 10 || delta < -10) setDevTime();
}
$('lblTrg').innerHTML = so;
console.log(s);
@ -1371,7 +1363,12 @@ function parseBlkCustom(value) {
}
}
);
if(len < 15) getDevTime();
if(len < 15) getDevTime();
if(delta > 10800 || delta < -10800) {
addLog("Авто установка часов устройства...");
setDevTime();
}
} else if((blkId == 0x25 || blkId == 0x26) && (len > 12)) {
// CMD_ID_CFS Get/Set sensor config
devSens.temp_k = value.getUint32(1, true);