fix clock, lcd
This commit is contained in:
parent
ceffb41989
commit
3ed6398154
46 changed files with 18496 additions and 18323 deletions
File diff suppressed because it is too large
Load diff
3027
bin/BOOT_BTH01_v08.hex
Normal file
3027
bin/BOOT_BTH01_v08.hex
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
3094
bin/BOOT_TH05_v08.hex
Normal file
3094
bin/BOOT_TH05_v08.hex
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
3024
bin/BOOT_THB2_v08.hex
Normal file
3024
bin/BOOT_THB2_v08.hex
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
BIN
bin/BTH01_v08.bin
Normal file
BIN
bin/BTH01_v08.bin
Normal file
Binary file not shown.
BIN
bin/TH05_v07.bin
BIN
bin/TH05_v07.bin
Binary file not shown.
BIN
bin/TH05_v08.bin
Normal file
BIN
bin/TH05_v08.bin
Normal file
Binary file not shown.
BIN
bin/THB2_v07.bin
BIN
bin/THB2_v07.bin
Binary file not shown.
BIN
bin/THB2_v08.bin
Normal file
BIN
bin/THB2_v08.bin
Normal file
Binary file not shown.
|
|
@ -82,6 +82,8 @@ CFLAGS += -fno-diagnostics-show-caret
|
|||
CFLAGS += -fdata-sections -ffunction-sections
|
||||
CFLAGS += -funsigned-char -funsigned-bitfields
|
||||
#CFLAGS += -fpack-struct
|
||||
#CFLAGS += -mno-unaligned-access
|
||||
#CFLAGS += -munaligned-access
|
||||
CFLAGS += -fms-extensions
|
||||
CFLAGS += -specs=nosys.specs
|
||||
CFLAGS += -Wl,--gc-sections
|
||||
|
|
|
|||
|
|
@ -316,6 +316,20 @@ int __attribute__((used)) hal_pwrmgr_wakeup_process(void)
|
|||
NVIC_SetPriority((IRQn_Type)TIM2_IRQn, IRQ_PRIO_HIGH); //OSAL_TICK
|
||||
NVIC_SetPriority((IRQn_Type)TIM4_IRQn, IRQ_PRIO_HIGH); //LL_EXA_ADV
|
||||
//peripheral_interrupt_restore_default();
|
||||
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);
|
||||
|
||||
|
||||
for(i = 0; i< s_pwrmgr_cfg.moudle_num; i++)
|
||||
{
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
3027
bthome_phy6222/bin/BOOT_BTH01_v08.hex
Normal file
3027
bthome_phy6222/bin/BOOT_BTH01_v08.hex
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
3094
bthome_phy6222/bin/BOOT_TH05_v08.hex
Normal file
3094
bthome_phy6222/bin/BOOT_TH05_v08.hex
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
3024
bthome_phy6222/bin/BOOT_THB2_v08.hex
Normal file
3024
bthome_phy6222/bin/BOOT_THB2_v08.hex
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
BIN
bthome_phy6222/bin/BTH01_v08.bin
Normal file
BIN
bthome_phy6222/bin/BTH01_v08.bin
Normal file
Binary file not shown.
Binary file not shown.
BIN
bthome_phy6222/bin/TH05_v08.bin
Normal file
BIN
bthome_phy6222/bin/TH05_v08.bin
Normal file
Binary file not shown.
Binary file not shown.
BIN
bthome_phy6222/bin/THB2_v08.bin
Normal file
BIN
bthome_phy6222/bin/THB2_v08.bin
Normal file
Binary file not shown.
|
|
@ -1,2 +1,2 @@
|
|||
python3 C:\Python310\Scripts\hexinfo.py .\bin\THB2_v07.hex
|
||||
python3 C:\Python310\Scripts\hexinfo.py .\bin\BOOT_THB2_v07.hex
|
||||
python3 C:\Python310\Scripts\hexinfo.py .\bin\THB2_v08.hex
|
||||
python3 C:\Python310\Scripts\hexinfo.py .\bin\BOOT_THB2_v08.hex
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
@set PATH=D:\MCU\GNU_Tools_ARM_Embedded\13.2.rel1\bin;%PATH%
|
||||
@set SWVER=_v07
|
||||
@set SWVER=_v08
|
||||
@del /Q "build\THB2%SWVER%.hex"
|
||||
@del /Q "build\THB2%SWVER%.bin"
|
||||
@mkdir .\bin
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ typedef struct _ota_par_t {
|
|||
uint32_t erase_addr;
|
||||
} ota_par_t;
|
||||
|
||||
#define OTA_MODE_SELECT_REG 0x4000f034 // == 0x55 -> OTA
|
||||
#define OTA_MODE_SELECT_REG (AP_AON->RTCCC2) // [0x4000f034] == 0x55 -> OTA
|
||||
|
||||
extern ota_par_t ota;
|
||||
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
int olen = 0;
|
||||
if (len) {
|
||||
uint8_t cmd = ibuf[0];
|
||||
uint32_t tmp = ibuf[1] | (ibuf[2]<<8) | (ibuf[3]<<16) | (ibuf[4]<<24);
|
||||
obuf[0] = cmd;
|
||||
obuf[1] = 0; // no err
|
||||
if (cmd == CMD_ID_DEVID) { // Get DEV_ID
|
||||
|
|
@ -95,11 +96,6 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
rd_memo.cur = ibuf[3] | (ibuf[4] << 8);
|
||||
else
|
||||
rd_memo.cur = 0;
|
||||
//gapRole_SlaveLatency = periConnParameters.latency = 0;
|
||||
//osal_set_event(gapRole_TaskID, START_CONN_UPDATE_EVT);
|
||||
} else {
|
||||
//gapRole_SlaveLatency = periConnParameters.latency = cfg.connect_latency;
|
||||
//osal_set_event(gapRole_TaskID, START_CONN_UPDATE_EVT);
|
||||
}
|
||||
wrk_notify();
|
||||
// osal_set_event(simpleBLEPeripheral_TaskID, WRK_NOTIFY_EVT);
|
||||
|
|
@ -141,27 +137,26 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
olen = 1 + sizeof(display_buff);
|
||||
#endif
|
||||
} else if (cmd == CMD_ID_UTC_TIME) { // Get/set utc time
|
||||
if (--len > sizeof(clkt.utc_time_sec))
|
||||
len = sizeof(clkt.utc_time_sec);
|
||||
if (len) {
|
||||
memcpy(&clkt.utc_time_sec, &ibuf[1], len);
|
||||
if (len > 4) {
|
||||
clkt.utc_time_sec = tmp;
|
||||
#if (DEV_SERVICES & SERVICE_TIME_ADJUST)
|
||||
clkt.utc_set_time_sec =clkt. utc_time_sec;
|
||||
@TODO
|
||||
#endif
|
||||
clkt.utc_time_tik = clock_time_rtc();
|
||||
//clkt.utc_time_add = 0;
|
||||
}
|
||||
get_utc_time_sec();
|
||||
osal_memcpy(&obuf[1], &clkt.utc_time_sec, sizeof(clkt.utc_time_sec));
|
||||
tmp = get_utc_time_sec();
|
||||
osal_memcpy(&obuf[1], &tmp, 4);
|
||||
#if (DEV_SERVICES & SERVICE_TIME_ADJUST)
|
||||
memcpy(&obuf[sizeof(clkt.utc_time_sec) + 1], &clkt.utc_set_time_sec, sizeof(clkt.utc_set_time_sec));
|
||||
olen = sizeof(clkt.utc_time_sec) + sizeof(clkt.utc_set_time_sec) + 1;
|
||||
memcpy(&obuf[4 + 1], &clkt.utc_set_time_sec, sizeof(clkt.utc_set_time_sec));
|
||||
olen = 4 + sizeof(clkt.utc_set_time_sec) + 1;
|
||||
#else
|
||||
olen = sizeof(clkt.utc_time_sec) + 1;
|
||||
olen = 4 + 1;
|
||||
#endif // SERVICE_TIME_ADJUST
|
||||
#if (DEV_SERVICES & SERVICE_TIME_ADJUST)
|
||||
} else if (cmd == CMD_ID_TADJUST) { // Get/set adjust time clock delta (in 1/16 us for 1 sec)
|
||||
if (len > 4) {
|
||||
memcpy(&clkt.delta_time, &ibuf[1], 4);
|
||||
clkt.delta_time = tmp;
|
||||
flash_write_cfg(&clkt.delta_time, EEP_ID_TIM, sizeof(&clkt.delta_time));
|
||||
}
|
||||
memcpy(&send_buf[1], &clkt.delta_time, sizeof(clkt.delta_time));
|
||||
|
|
@ -173,7 +168,7 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
} else if (cmd == CMD_ID_EEP_RW && len > 2) {
|
||||
obuf[1] = ibuf[1];
|
||||
obuf[2] = ibuf[2];
|
||||
uint16_t id = ibuf[1] | (ibuf[2] << 8);
|
||||
uint16_t id = (uint16_t)tmp;
|
||||
if(len > 3) {
|
||||
flash_write_cfg(&ibuf[3], id, len - 3);
|
||||
}
|
||||
|
|
@ -184,8 +179,7 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
} else
|
||||
olen = i + 3;
|
||||
} else if (cmd == CMD_ID_MEM_RW && len > 4) { // Read/Write memory
|
||||
uint8_t *p = (uint8_t *)
|
||||
((uint32_t)(ibuf[1] | (ibuf[2]<<8) | (ibuf[3]<<16) | (ibuf[4]<<24)));
|
||||
uint8_t *p = (uint8_t *)tmp;
|
||||
if(len > 5) {
|
||||
len -= 5;
|
||||
osal_memcpy(p, &ibuf[5], len);
|
||||
|
|
@ -194,10 +188,8 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
osal_memcpy(obuf, ibuf, 5);
|
||||
osal_memcpy(&obuf[5], p, len);
|
||||
olen = len + 1 + 4;
|
||||
} else if (cmd == CMD_ID_REG_RW && len > 4) { // Read/Write register
|
||||
volatile uint32_t *p = (volatile uint32_t *)
|
||||
((uint32_t)(ibuf[1] | (ibuf[2]<<8) | (ibuf[3]<<16) | (ibuf[4]<<24)));
|
||||
uint32_t tmp;
|
||||
} else if (cmd == CMD_ID_REG_RW && len > 4) { // Read/Write 32 bits register (aligned)
|
||||
volatile uint32_t *p = (volatile uint32_t *)tmp;
|
||||
if(len > 8) {
|
||||
tmp = ibuf[5] | (ibuf[6]<<8) | (ibuf[7]<<16) | (ibuf[8]<<24);
|
||||
*p = tmp;
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ typedef enum {
|
|||
CMD_ID_RDFB = 0xD4, // Read Flash Block
|
||||
CMD_ID_ERFB = 0xD5, // Erase Flash Sector
|
||||
CMD_ID_CHGB = 0xD7, // Change boot
|
||||
CMD_ID_REG_RW = 0xDA, // Read/Write Registers
|
||||
CMD_ID_REG_RW = 0xDA, // Read/Write 32 bits Registers (aligned)
|
||||
CMD_ID_MEM_RW = 0xDB, // Read/Write memory
|
||||
CMD_ID_EEP_RW = 0xDC, // Get/set EEP
|
||||
CMD_ID_LR_RESET = 0xDD, // Reset Long Range
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
#include "gapgattserver.h"
|
||||
#include "gattservapp.h"
|
||||
#include "devinfoservice.h"
|
||||
#include "ota_app_service.h"
|
||||
#include "thb2_peripheral.h"
|
||||
#include "gapbondmgr.h"
|
||||
#include "pwrmgr.h"
|
||||
|
|
@ -47,6 +46,7 @@ clock_time_t clkt;
|
|||
cfg_t cfg;
|
||||
|
||||
const cfg_t def_cfg = {
|
||||
.flg = 0,
|
||||
.rf_tx_power = RF_PHY_TX_POWER_0DBM,
|
||||
.advertising_interval = 80, // 80 * 62.5 = 5000 ms
|
||||
.measure_interval = 2, // 5 * 2 = 10 sec
|
||||
|
|
@ -63,15 +63,31 @@ uint32_t get_delta_time_rtc(uint32_t start_time_rtc) {
|
|||
return new_time_rtc - start_time_rtc;
|
||||
}
|
||||
*/
|
||||
void restore_utc_time_sec(void) {
|
||||
if(clkt.utc_set_time_sec == 0) {
|
||||
clkt.utc_time_add = AP_AON->SLEEP_R[2] + 10;
|
||||
clkt.utc_time_sec = AP_AON->SLEEP_R[3];
|
||||
//if(clkt.utc_time_sec < 1704067200ul) clkt.utc_time_sec = 1704067200ul;
|
||||
}
|
||||
clkt.utc_time_tik = clock_time_rtc() & 0xffffff;
|
||||
}
|
||||
|
||||
uint32_t get_utc_time_sec(void) {
|
||||
uint32_t new_time_tik = clock_time_rtc();
|
||||
if(new_time_tik < clkt.utc_time_tik)
|
||||
new_time_tik += 0x1000000; // + 512 sec
|
||||
clkt.utc_time_add += new_time_tik - clkt.utc_time_tik;
|
||||
// HAL_ENTER_CRITICAL_SECTION();
|
||||
uint32_t new_time_tik;
|
||||
do {
|
||||
new_time_tik = AP_AON->RTCCNT;
|
||||
} while(new_time_tik != AP_AON->RTCCNT);
|
||||
if(new_time_tik <= clkt.utc_time_tik)
|
||||
clkt.utc_time_add += new_time_tik - clkt.utc_time_tik;
|
||||
else
|
||||
clkt.utc_time_add += 0xffffffff - clkt.utc_time_tik + new_time_tik;
|
||||
clkt.utc_time_tik = new_time_tik;
|
||||
clkt.utc_time_sec += clkt.utc_time_add >> 15; // div 32768
|
||||
clkt.utc_time_add &= 32767;
|
||||
clkt.utc_time_add &= (1<<15) - 1;
|
||||
AP_AON->SLEEP_R[2] = clkt.utc_time_add; // сохранить
|
||||
AP_AON->SLEEP_R[3] = clkt.utc_time_sec; // сохранить
|
||||
// HAL_EXIT_CRITICAL_SECTION();
|
||||
#if (DEV_SERVICES & SERVICE_TIME_ADJUST)
|
||||
// TODO
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -10,9 +10,10 @@
|
|||
|
||||
#include <string.h>
|
||||
#include "types.h"
|
||||
// #include "bus_dev.h"
|
||||
|
||||
#ifndef APP_VERSION
|
||||
#define APP_VERSION 0x07 // BCD
|
||||
#define APP_VERSION 0x08 // BCD
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
@ -39,24 +40,24 @@
|
|||
#define DEVICE_TH05 21
|
||||
|
||||
#ifndef DEVICE
|
||||
#define DEVICE DEVICE_TH05
|
||||
#define DEVICE DEVICE_THB2
|
||||
#endif
|
||||
|
||||
// supported services by the device (bits)
|
||||
#define SERVICE_OTA 0x00001
|
||||
#define SERVICE_OTA_EXT 0x00002
|
||||
#define SERVICE_PINCODE 0x00004 // пока нет
|
||||
#define SERVICE_BINDKEY 0x00008 // пока нет
|
||||
#define SERVICE_HISTORY 0x00010 // пока нет
|
||||
#define SERVICE_SCREEN 0x00020 // пока нет
|
||||
#define SERVICE_LE_LR 0x00040 // пока нет
|
||||
#define SERVICE_THS 0x00080
|
||||
#define SERVICE_RDS 0x00100 // пока нет
|
||||
#define SERVICE_KEY 0x00200
|
||||
#define SERVICE_OUTS 0x00400 // пока нет
|
||||
#define SERVICE_INS 0x00800 // пока нет
|
||||
#define SERVICE_TIME_ADJUST 0x01000 // пока нет
|
||||
#define SERVICE_HARD_CLOCK 0x02000 // пока нет
|
||||
#define SERVICE_OTA 0x00000001
|
||||
#define SERVICE_OTA_EXT 0x00000002
|
||||
#define SERVICE_PINCODE 0x00000004 // пока нет
|
||||
#define SERVICE_BINDKEY 0x00000008 // пока нет
|
||||
#define SERVICE_HISTORY 0x00000010
|
||||
#define SERVICE_SCREEN 0x00000020
|
||||
#define SERVICE_LE_LR 0x00000040 // пока нет
|
||||
#define SERVICE_THS 0x00000080
|
||||
#define SERVICE_RDS 0x00000100 // пока нет
|
||||
#define SERVICE_KEY 0x00000200
|
||||
#define SERVICE_OUTS 0x00000400 // пока нет
|
||||
#define SERVICE_INS 0x00000800 // пока нет
|
||||
#define SERVICE_TIME_ADJUST 0x00001000 // пока нет
|
||||
#define SERVICE_HARD_CLOCK 0x00002000 // пока нет
|
||||
|
||||
#define OTA_TYPE_NONE 0 // нет OTA
|
||||
#define OTA_TYPE_BOOT (SERVICE_OTA | SERVICE_OTA_EXT) // вариант для прошивки boot + OTA
|
||||
|
|
@ -184,7 +185,7 @@
|
|||
typedef struct _cfg_t {
|
||||
uint32_t flg;
|
||||
|
||||
uint8_t rf_tx_power; //
|
||||
uint8_t rf_tx_power; // 0..0x3F
|
||||
uint8_t advertising_interval; // multiply by 62.5 for value in ms (1..160, 62.5 ms .. 10 sec)
|
||||
uint8_t connect_latency; // +1 x 0.03 sec ( = connection interval), Tmin = 1*30 = 30 ms, Tmax = 256 * 30 = 7680 ms
|
||||
uint8_t reserved1;
|
||||
|
|
@ -210,9 +211,11 @@ typedef struct _adv_work_t {
|
|||
extern adv_work_t adv_wrk;
|
||||
|
||||
// uint32_t rtc_get_counter(void); // tik 32768
|
||||
inline uint32 clock_time_rtc(void) {
|
||||
return (*(volatile unsigned int*)0x4000f028);// & 0xffffff; // max 512 sec
|
||||
}
|
||||
#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
|
||||
#endif
|
||||
// uint32_t get_delta_time_rtc(uint32_t start_time_rtc);
|
||||
|
||||
typedef struct _clock_time_t {
|
||||
|
|
@ -227,6 +230,7 @@ typedef struct _clock_time_t {
|
|||
extern clock_time_t clkt;
|
||||
|
||||
uint32_t get_utc_time_sec(void);
|
||||
void restore_utc_time_sec(void);
|
||||
|
||||
void test_config(void);
|
||||
void load_eep_config(void);
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@
|
|||
#include "i2c.h"
|
||||
#include "dev_i2c.h"
|
||||
|
||||
#define I2C_WAIT_ms 1
|
||||
#define I2C_WAIT_ms 3
|
||||
|
||||
void init_i2c(bool speed400khz) {
|
||||
void init_i2c(i2c_speed_e speed400khz) {
|
||||
hal_gpio_fmux_set(I2C_SCL, FMUX_IIC0_SCL);
|
||||
hal_gpio_fmux_set(I2C_SDA, FMUX_IIC0_SDA);
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,12 @@
|
|||
#ifndef _DEV_I2C_H_
|
||||
#define _DEV_I2C_H_
|
||||
|
||||
void init_i2c(bool speed400khz);
|
||||
typedef enum {
|
||||
I2C_100KHZ,
|
||||
I2C_400KHZ
|
||||
}i2c_speed_e;
|
||||
|
||||
void init_i2c(i2c_speed_e speed400khz);
|
||||
void deinit_i2c(void);
|
||||
int send_i2c_byte(uint8_t addr, uint8_t data);
|
||||
int send_i2c_wreg(uint8 addr, uint8 reg, uint16 data);
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
#include "dev_i2c.h"
|
||||
#include "sensor.h"
|
||||
#include "lcd_th05.h"
|
||||
#include "thb2_peripheral.h"
|
||||
|
||||
#define LCD_I2C_SPEED 100 // 100 or 400 kHz
|
||||
#define LCD_I2C_ADDR 0x3E
|
||||
|
|
@ -192,28 +193,63 @@ void show_small_number(int16_t number, bool percent) {
|
|||
}
|
||||
}
|
||||
|
||||
#if USE_CLOCK
|
||||
void show_clock(void) {
|
||||
uint32_t tmp = utc_time_sec / 60;
|
||||
void lcd_show_version(void) {
|
||||
show_big_number_x10(APP_VERSION);
|
||||
#if OTA_TYPE
|
||||
display_buff[0] = LCD_SYM_o;
|
||||
#endif
|
||||
update_lcd();
|
||||
}
|
||||
|
||||
void chow_clock(void) {
|
||||
uint32_t tmp = clkt.utc_time_sec / 60;
|
||||
uint32_t min = tmp % 60;
|
||||
uint32_t hrs = tmp / 60 % 24;
|
||||
display_buff[0] = display_numbers[min % 10];
|
||||
display_buff[1] = display_numbers[min / 10 % 10];
|
||||
display_buff[2] = 0;
|
||||
uint32_t hrs = (tmp / 60) % 24;
|
||||
display_buff[0] = 0;
|
||||
display_buff[1] = display_numbers[(hrs / 10) % 10];
|
||||
display_buff[2] = display_numbers[hrs % 10];
|
||||
display_buff[3] &= BIT(6); // bat
|
||||
display_buff[4] &= BIT(3); // connect
|
||||
display_buff[4] |= display_numbers[hrs % 10];
|
||||
display_buff[5] = display_numbers[hrs / 10 % 10];
|
||||
display_buff[4] |= display_numbers[(min / 10) % 10];
|
||||
display_buff[5] = display_numbers[min % 10];
|
||||
update_lcd();
|
||||
}
|
||||
#endif // USE_CLOCK
|
||||
|
||||
extern volatile uint32 osal_sys_tick;
|
||||
void chow_measure(void) {
|
||||
#if (DEV_SERVICES & SERVICE_THS)
|
||||
show_big_number_x10(measured_data.temp/10);
|
||||
show_small_number(measured_data.humi/100, true);
|
||||
show_battery_symbol(measured_data.battery < 20);
|
||||
show_temp_symbol(CLD_TSYMBOL_C);
|
||||
#else
|
||||
show_big_number_x10(measured_data.battery_mv/100);
|
||||
show_small_number((measured_data.battery > 99)? 99 : measured_data.battery, true);
|
||||
show_battery_symbol(1);
|
||||
#endif
|
||||
show_smiley(0);
|
||||
show_ble_symbol(gapRole_state == GAPROLE_CONNECTED);
|
||||
update_lcd();
|
||||
}
|
||||
|
||||
struct {
|
||||
// uint32_t chow_tik;
|
||||
uint8_t count;
|
||||
} lcd;
|
||||
|
||||
void chow_lcd(int flg) {
|
||||
if(cfg.flg & 1) {
|
||||
if(lcd.count++ & 1)
|
||||
chow_clock();
|
||||
else
|
||||
chow_measure();
|
||||
} else if(flg) {
|
||||
chow_measure();
|
||||
}
|
||||
}
|
||||
|
||||
static void send_to_lcd(uint8_t *pbuf, int len){
|
||||
init_i2c(0);
|
||||
if (send_i2c_buf(0x3E, pbuf, len))
|
||||
init_i2c(I2C_400KHZ);
|
||||
send_i2c_buf(LCD_I2C_ADDR, pbuf, len);
|
||||
deinit_i2c();
|
||||
}
|
||||
|
||||
|
|
@ -225,7 +261,7 @@ void update_lcd(void) {
|
|||
}
|
||||
|
||||
void init_lcd(void) {
|
||||
init_i2c(0);
|
||||
init_i2c(I2C_100KHZ);
|
||||
if(!send_i2c_buf(LCD_I2C_ADDR, (uint8_t *) lcd_init_cmd, sizeof(lcd_init_cmd))) // sleep: 15.5 uA
|
||||
lcd_i2c_addr = LCD_I2C_ADDR;
|
||||
else
|
||||
|
|
|
|||
|
|
@ -64,5 +64,10 @@ void show_battery_symbol(bool state);
|
|||
void show_ble_symbol(bool state);
|
||||
void show_smiley(uint8_t state);
|
||||
void show_temp_symbol(CLD_TEMP_SYMBOL symbol);
|
||||
//void chow_clock(void);
|
||||
//void chow_measure(void);
|
||||
|
||||
void chow_lcd(int flg);
|
||||
void lcd_show_version(void);
|
||||
|
||||
#endif /* _LCD_TH05_H_ */
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ static void memo_sec_close(uint32_t faddr) {
|
|||
uint32_t mfaddr = faddr;
|
||||
uint16_t flg = 0;
|
||||
mfaddr &= ~(FLASH_SECTOR_SIZE-1);
|
||||
_flash_write(mfaddr + _memo_head_size - sizeof(flg), sizeof(flg), &flg);
|
||||
_flash_write(mfaddr + _memo_head_size - 2, 2, &flg); // sizeof(flg), sizeof(flg), &flg);
|
||||
memo_sec_init(test_next_memo_sec_addr(mfaddr + FLASH_SECTOR_SIZE));
|
||||
}
|
||||
|
||||
|
|
@ -77,15 +77,25 @@ void memo_init_count(void) {
|
|||
}
|
||||
#endif
|
||||
|
||||
|
||||
static void restore_time(uint32_t time) {
|
||||
if(time && clkt.utc_time_sec == 0) {
|
||||
clkt.utc_time_sec = time;
|
||||
clkt.utc_time_add = 1024;
|
||||
clkt.utc_time_tik = clock_time_rtc();
|
||||
}
|
||||
}
|
||||
|
||||
void memo_init(void) {
|
||||
memo_head_t mhs;
|
||||
uint32_t tmp, fsec_end;
|
||||
uint32_t tmp, fsec_end, time = 0;
|
||||
uint32_t faddr = FLASH_ADDR_START_MEMO;
|
||||
memo.cnt_cur_sec = 0;
|
||||
while (faddr < FLASH_ADDR_END_MEMO) {
|
||||
_flash_read(faddr, _memo_head_size, &mhs);
|
||||
if (mhs.id != MEMO_SEC_ID) {
|
||||
memo_sec_init(faddr);
|
||||
restore_time(time);
|
||||
return;
|
||||
} else if (mhs.flg == 0xffff) {
|
||||
fsec_end = faddr + FLASH_SECTOR_SIZE;
|
||||
|
|
@ -94,18 +104,22 @@ void memo_init(void) {
|
|||
_flash_read(faddr, sizeof(tmp), &tmp);
|
||||
if (tmp == 0xffffffff) {
|
||||
memo.faddr = faddr;
|
||||
restore_time(time);
|
||||
return;
|
||||
}
|
||||
clkt.utc_time_sec = tmp + 5;
|
||||
if(time < tmp)
|
||||
time = tmp;
|
||||
memo.cnt_cur_sec++;
|
||||
faddr += _memo_blk_size;
|
||||
}
|
||||
memo_sec_close(fsec_end - FLASH_SECTOR_SIZE);
|
||||
restore_time(time);
|
||||
return;
|
||||
}
|
||||
faddr += FLASH_SECTOR_SIZE;
|
||||
}
|
||||
memo_sec_init(FLASH_ADDR_START_MEMO);
|
||||
restore_time(time);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -114,7 +128,7 @@ void clear_memo(void) {
|
|||
uint32_t faddr = FLASH_ADDR_START_MEMO + FLASH_SECTOR_SIZE;
|
||||
memo.cnt_cur_sec = 0;
|
||||
while (faddr < FLASH_ADDR_END_MEMO) {
|
||||
_flash_read(faddr, sizeof(tmp), &tmp);
|
||||
_flash_read(faddr, 4, &tmp); // sizeof(tmp), &tmp);
|
||||
if (tmp == MEMO_SEC_ID)
|
||||
_flash_erase_sector(faddr);
|
||||
faddr += FLASH_SECTOR_SIZE;
|
||||
|
|
@ -187,10 +201,7 @@ void write_memo(void) {
|
|||
mblk.vbat = (uint16_t)(summ_data.battery_mv/summ_data.count);
|
||||
memset(&summ_data, 0, sizeof(summ_data));
|
||||
}
|
||||
if (clkt.utc_time_sec == 0xffffffff)
|
||||
mblk.time = 0xfffffffe;
|
||||
else
|
||||
mblk.time = clkt.utc_time_sec;
|
||||
mblk.time = clkt.utc_time_sec;
|
||||
uint32_t faddr = memo.faddr;
|
||||
if (!faddr) {
|
||||
memo_init();
|
||||
|
|
|
|||
|
|
@ -354,6 +354,7 @@ int main(void) {
|
|||
hal_rfphy_init();
|
||||
hal_init();
|
||||
|
||||
restore_utc_time_sec();
|
||||
load_eep_config();
|
||||
|
||||
LOG("SDK Version ID %08x \n",SDK_VER_RELEASE_ID);
|
||||
|
|
|
|||
|
|
@ -367,7 +367,7 @@ static bStatus_t simpleProfile_ReadAttrCB( uint16_t connHandle, gattAttribute_t
|
|||
{
|
||||
#if OTA_TYPE
|
||||
case SIMPLEPROFILE_CHAR1_UUID:
|
||||
//Validate the value
|
||||
// Validate the value
|
||||
// Make sure it's not a blob oper
|
||||
if ( offset == 0 ) {
|
||||
if ( len > sizeof(ota_in_buffer))
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ int read_sensor_cht8xxx(void) {
|
|||
uint8_t reg_data[4];
|
||||
int32_t _r32;
|
||||
int16_t _r16;
|
||||
init_i2c(I2C_SPEED);
|
||||
init_i2c(I2C_100KHZ);
|
||||
if(thsensor_cfg.vid == CHT8305_VID) {
|
||||
_r32 = read_i2c_nabuf(thsensor_cfg.i2c_addr, reg_data, 4);
|
||||
} else {
|
||||
|
|
@ -71,7 +71,7 @@ int read_sensor_cht8xxx(void) {
|
|||
int read_sensor_ahtxx(void) {
|
||||
uint32_t _temp;
|
||||
uint8_t reg_data[8];
|
||||
init_i2c(I2C_SPEED);
|
||||
init_i2c(I2C_400KHZ);
|
||||
if(!read_i2c_nabuf(thsensor_cfg.i2c_addr, reg_data, 7)
|
||||
&& (reg_data[0] & 0x80) == 0) { // busy
|
||||
deinit_i2c();
|
||||
|
|
@ -118,7 +118,7 @@ void start_measure(void) {
|
|||
__ATTR_SECTION_XIP__ void init_sensor(void) {
|
||||
uint8_t *ptabinit = NULL;
|
||||
thsensor_cfg.read_sensor = NULL;
|
||||
init_i2c(I2C_SPEED);
|
||||
init_i2c(I2C_400KHZ);
|
||||
//send_i2c_byte(0,6);
|
||||
thsensor_cfg.i2c_addr = CHT83xx_I2C_ADDR;
|
||||
if(!read_i2c_bytes(thsensor_cfg.i2c_addr, CHT83xx_REG_MID, (uint8 *)&thsensor_cfg.mid, 2) // 0x5959
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
#include "bcomdef.h"
|
||||
#include "config.h"
|
||||
#include "rf_phy_driver.h"
|
||||
//#include "bus_dev.h"
|
||||
#include "global_config.h"
|
||||
#include "OSAL.h"
|
||||
#include "OSAL_PwrMgr.h"
|
||||
|
|
@ -21,7 +22,6 @@
|
|||
#include "gapgattserver.h"
|
||||
#include "gattservapp.h"
|
||||
#include "devinfoservice.h"
|
||||
#include "ota_app_service.h"
|
||||
#include "thb2_peripheral.h"
|
||||
#include "gapbondmgr.h"
|
||||
#include "pwrmgr.h"
|
||||
|
|
@ -41,6 +41,7 @@
|
|||
#include "sensor.h"
|
||||
#include "battery.h"
|
||||
#include "sbp_profile.h"
|
||||
#include "ble_ota.h"
|
||||
#include "lcd_th05.h"
|
||||
#include "logger.h"
|
||||
/*********************************************************************
|
||||
|
|
@ -102,25 +103,6 @@ static void peripheralStateNotificationCB( gaprole_States_t newState );
|
|||
//static void simpleProfileChangeCB( uint8 paramID );
|
||||
static void peripheralStateReadRssiCB( int8 rssi );
|
||||
|
||||
|
||||
#if (DEV_SERVICES & SERVICE_SCREEN)
|
||||
void chow_measure(void) {
|
||||
#if (DEV_SERVICES & SERVICE_THS)
|
||||
show_big_number_x10(measured_data.temp/10);
|
||||
show_small_number(measured_data.humi/100, true);
|
||||
show_battery_symbol(measured_data.battery < 20);
|
||||
show_temp_symbol(CLD_TSYMBOL_C);
|
||||
#else
|
||||
show_big_number_x10(measured_data.battery_mv/100);
|
||||
show_small_number((measured_data.battery > 99)? 99 : measured_data.battery, true);
|
||||
show_battery_symbol(1);
|
||||
#endif
|
||||
show_smiley(0);
|
||||
show_ble_symbol(gapRole_state == GAPROLE_CONNECTED);
|
||||
update_lcd();
|
||||
}
|
||||
#endif
|
||||
|
||||
const char* hex_ascii = { "0123456789ABCDEF" };
|
||||
uint8_t * str_bin2hex(uint8_t *d, uint8_t *s, int len) {
|
||||
while(len--) {
|
||||
|
|
@ -220,35 +202,50 @@ static void adv_measure(void) {
|
|||
batt_start_measure();
|
||||
#if ((DEV_SERVICES & SERVICE_THS) == 0)
|
||||
adv_wrk.adv_batt = 1;
|
||||
} else if(adv_wrk.adv_batt) {
|
||||
adv_wrk.adv_batt = 0;
|
||||
} else {
|
||||
if(adv_wrk.adv_batt) {
|
||||
adv_wrk.adv_batt = 0;
|
||||
#if (DEV_SERVICES & SERVICE_SCREEN)
|
||||
chow_measure();
|
||||
chow_lcd(1);
|
||||
#endif
|
||||
#if (DEV_SERVICES & SERVICE_HISTORY)
|
||||
if (cfg.averaging_measurements != 0)
|
||||
write_memo();
|
||||
if (cfg.averaging_measurements != 0)
|
||||
write_memo();
|
||||
#endif
|
||||
|
||||
LL_SetAdvData(bthome_data_beacon((void *) gapRole_AdvertData), gapRole_AdvertData);
|
||||
LL_SetAdvData(bthome_data_beacon((void *) gapRole_AdvertData), gapRole_AdvertData);
|
||||
#if (DEV_SERVICES & SERVICE_SCREEN)
|
||||
} else {
|
||||
chow_lcd(0);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#if (DEV_SERVICES & SERVICE_THS)
|
||||
if(adv_wrk.adv_count == (uint8_t)(cfg.measure_interval - 1)) {
|
||||
start_measure();
|
||||
} else if(adv_wrk.adv_count >= cfg.measure_interval) {
|
||||
adv_wrk.adv_count = 0;
|
||||
read_sensor();
|
||||
#if (DEV_SERVICES & SERVICE_SCREEN)
|
||||
chow_measure();
|
||||
chow_lcd(0);
|
||||
#endif
|
||||
} else {
|
||||
if(adv_wrk.adv_count >= cfg.measure_interval) {
|
||||
adv_wrk.adv_count = 0;
|
||||
read_sensor();
|
||||
#if (DEV_SERVICES & SERVICE_SCREEN)
|
||||
chow_lcd(1);
|
||||
#endif
|
||||
#if (DEV_SERVICES & SERVICE_HISTORY)
|
||||
if (cfg.averaging_measurements != 0)
|
||||
write_memo();
|
||||
if (cfg.averaging_measurements != 0)
|
||||
write_memo();
|
||||
#endif
|
||||
|
||||
LL_SetAdvData(bthome_data_beacon((void *) gapRole_AdvertData), gapRole_AdvertData);
|
||||
LL_SetAdvData(bthome_data_beacon((void *) gapRole_AdvertData), gapRole_AdvertData);
|
||||
#if (DEV_SERVICES & SERVICE_SCREEN)
|
||||
} else {
|
||||
chow_lcd(0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#endif // (DEV_SERVICES & SERVICE_THS)
|
||||
if(adv_wrk.adv_con_count) {
|
||||
if(--adv_wrk.adv_con_count == 0) {
|
||||
|
|
@ -560,7 +557,7 @@ uint16 BLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )
|
|||
read_sensor();
|
||||
start_measure();
|
||||
#if (DEV_SERVICES & SERVICE_SCREEN)
|
||||
chow_measure();
|
||||
chow_lcd(1);
|
||||
#endif
|
||||
#if (DEV_SERVICES & SERVICE_HISTORY)
|
||||
if (cfg.averaging_measurements != 0)
|
||||
|
|
@ -602,8 +599,7 @@ uint16 BLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )
|
|||
#endif
|
||||
//adv_wrk.adv_count = 0;
|
||||
#if (DEV_SERVICES & SERVICE_SCREEN)
|
||||
show_big_number_x10(APP_VERSION);
|
||||
update_lcd();
|
||||
lcd_show_version();
|
||||
#endif
|
||||
// return unprocessed events
|
||||
return ( events ^ SBP_START_DEVICE_EVT );
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
@headerfile: th_peripheral.h
|
||||
@headerfile: thb2_peripheral.h
|
||||
$Date:
|
||||
$Revision:
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
python3 rdwr_phy62x2.py -p COM11 -e -r wh BOOT_BTH01_v07.hex
|
||||
python3 rdwr_phy62x2.py -p COM11 -e -r wh BOOT_BTH01_v08.hex
|
||||
|
|
@ -1 +1 @@
|
|||
python3 rdwr_phy62x2.py -p COM11 -e -r wh BOOT_TH05_v07.hex
|
||||
python3 rdwr_phy62x2.py -p COM11 -e -r wh BOOT_TH05_v08.hex
|
||||
|
|
@ -1 +1 @@
|
|||
python3 rdwr_phy62x2.py -p COM11 -e -r wh BOOT_THB2_v07.hex
|
||||
python3 rdwr_phy62x2.py -p COM11 -e -r wh BOOT_THB2_v08.hex
|
||||
Loading…
Add table
Add a link
Reference in a new issue