fix clock, lcd

This commit is contained in:
pvvx 2024-01-29 11:36:35 +03:00
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

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

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

File diff suppressed because it is too large Load diff

Binary file not shown.

BIN
bin/BTH01_v08.bin Normal file

Binary file not shown.

Binary file not shown.

BIN
bin/TH05_v08.bin Normal file

Binary file not shown.

Binary file not shown.

BIN
bin/THB2_v08.bin Normal file

Binary file not shown.

View file

@ -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

View file

@ -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

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

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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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

View file

@ -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

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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

View file

@ -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_ */

View file

@ -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();

View file

@ -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);

View file

@ -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))

View file

@ -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

View file

@ -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 );

View file

@ -1,5 +1,5 @@
/**
@headerfile: th_peripheral.h
@headerfile: thb2_peripheral.h
$Date:
$Revision:

View file

@ -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

View file

@ -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

View file

@ -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