ver0.9
This commit is contained in:
parent
c25bc65280
commit
3c2c089e35
32 changed files with 9621 additions and 9352 deletions
File diff suppressed because it is too large
Load diff
3052
bthome_phy6222/bin/BOOT_BTH01_v09.hex
Normal file
3052
bthome_phy6222/bin/BOOT_BTH01_v09.hex
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
3184
bthome_phy6222/bin/BOOT_TH05_v09.hex
Normal file
3184
bthome_phy6222/bin/BOOT_TH05_v09.hex
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
3049
bthome_phy6222/bin/BOOT_THB2_v09.hex
Normal file
3049
bthome_phy6222/bin/BOOT_THB2_v09.hex
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
BIN
bthome_phy6222/bin/BTH01_v09.bin
Normal file
BIN
bthome_phy6222/bin/BTH01_v09.bin
Normal file
Binary file not shown.
Binary file not shown.
BIN
bthome_phy6222/bin/TH05_v09.bin
Normal file
BIN
bthome_phy6222/bin/TH05_v09.bin
Normal file
Binary file not shown.
Binary file not shown.
BIN
bthome_phy6222/bin/THB2_v09.bin
Normal file
BIN
bthome_phy6222/bin/THB2_v09.bin
Normal file
Binary file not shown.
|
|
@ -1,5 +1,5 @@
|
|||
@set PATH=D:\MCU\GNU_Tools_ARM_Embedded\13.2.rel1\bin;%PATH%
|
||||
@set SWVER=_v08
|
||||
@set SWVER=_v09
|
||||
@del /Q "build\THB2%SWVER%.hex"
|
||||
@del /Q "build\THB2%SWVER%.bin"
|
||||
@mkdir .\bin
|
||||
|
|
@ -13,6 +13,12 @@
|
|||
@make -s -j PROJECT_NAME=BTH01%SWVER% POJECT_DEF="-DDEVICE=DEVICE_BTH01"
|
||||
@if not exist "build\BTH01%SWVER%.hex" goto :error
|
||||
@copy "build\BTH01%SWVER%.bin" .\bin
|
||||
@del /Q "build\TH05%SWVER%.hex"
|
||||
@del /Q "build\TH05%SWVER%.bin"
|
||||
@make -s clean
|
||||
@make -s -j PROJECT_NAME=TH05%SWVER% POJECT_DEF="-DDEVICE=DEVICE_TH05"
|
||||
@if not exist "build\TH05%SWVER%.hex" goto :error
|
||||
@copy "build\TH05%SWVER%.bin" .\bin
|
||||
@del /Q "build\BOOT_THB2%SWVER%.hex"
|
||||
@make -s clean
|
||||
@make -s -j PROJECT_NAME=BOOT_THB2%SWVER% BOOT_OTA=1 POJECT_DEF="-DDEVICE=DEVICE_THB2"
|
||||
|
|
@ -23,13 +29,6 @@
|
|||
@make -s -j PROJECT_NAME=BOOT_BTH01%SWVER% BOOT_OTA=1 POJECT_DEF="-DDEVICE=DEVICE_BTH01"
|
||||
@if not exist "build\BOOT_BTH01%SWVER%.hex" goto :error
|
||||
@copy "build\BOOT_BTH01%SWVER%.hex" .\bin
|
||||
@del /Q "build\TH05%SWVER%.hex"
|
||||
@del /Q "build\TH05%SWVER%.bin"
|
||||
@mkdir .\bin
|
||||
@make -s clean
|
||||
@make -s -j PROJECT_NAME=TH05%SWVER% POJECT_DEF="-DDEVICE=DEVICE_TH05"
|
||||
@if not exist "build\TH05%SWVER%.hex" goto :error
|
||||
@copy "build\TH05%SWVER%.bin" .\bin
|
||||
@del /Q "build\BOOT_TH05%SWVER%.hex"
|
||||
@make -s clean
|
||||
@make -s -j PROJECT_NAME=BOOT_TH05%SWVER% BOOT_OTA=1 POJECT_DEF="-DDEVICE=DEVICE_TH05"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
#include "config.h"
|
||||
#include "adc.h"
|
||||
#include "battery.h"
|
||||
#include "bleperipheral.h"
|
||||
#include "thb2_main.h"
|
||||
#include "pwrmgr.h"
|
||||
#include "jump_function.h"
|
||||
#include "sensor.h"
|
||||
|
|
|
|||
|
|
@ -96,8 +96,8 @@ static uint32_t ota_test_crc(void) {
|
|||
unsigned char * faddr = (unsigned char *)(ota.program_offset + 4);
|
||||
int len = ota.pkt_total-2;
|
||||
uint8_t buf[16];
|
||||
osal_memcpy(&buf[0], &ota.fw_value, 4);
|
||||
osal_memcpy(&buf[4], faddr, 12);
|
||||
memcpy(&buf[0], &ota.fw_value, 4);
|
||||
memcpy(&buf[4], faddr, 12);
|
||||
faddr += 12;
|
||||
crc = get_crc32_16bytes(crc, buf);
|
||||
while(len > 0) {
|
||||
|
|
@ -252,7 +252,7 @@ int ota_parser(unsigned char *pout, unsigned char *pmsg, unsigned int msg_size)
|
|||
if (err_flg != OTA_SUCCESS) {
|
||||
ota.err_flag = err_flg;
|
||||
// send/Notify?
|
||||
osal_memcpy(pout, &ota, 20);
|
||||
memcpy(pout, &ota, 20);
|
||||
return 20;
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -289,7 +289,7 @@ static uint32_t start_app(void) {
|
|||
//&& info_seg.waddr < 0x11000000
|
||||
//&& info_seg.waddr > 0x11020000
|
||||
&& info_seg.size < (128*1024)) { // < 128k
|
||||
osal_memcpy((void *)info_seg.waddr, (void *)info_seg.faddr, info_seg.size);
|
||||
memcpy((void *)info_seg.waddr, (void *)info_seg.faddr, info_seg.size);
|
||||
}
|
||||
info_app.seg_count--;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,8 +56,6 @@ typedef struct _ota_par_t {
|
|||
uint32_t erase_addr;
|
||||
} ota_par_t;
|
||||
|
||||
#define OTA_MODE_SELECT_REG (AP_AON->RTCCC2) // [0x4000f034] == 0x55 -> OTA
|
||||
|
||||
extern ota_par_t ota;
|
||||
|
||||
int ota_parser(unsigned char *pout, unsigned char *pmsg, unsigned int msg_size);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
#include "gapbondmgr.h"
|
||||
#include "flash.h"
|
||||
#include "flash_eep.h"
|
||||
#include "bleperipheral.h"
|
||||
#include "thb2_main.h"
|
||||
#include "sbp_profile.h"
|
||||
#include "sensor.h"
|
||||
#include "cmd_parser.h"
|
||||
|
|
@ -50,41 +50,41 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
obuf[0] = cmd;
|
||||
obuf[1] = 0; // no err
|
||||
if (cmd == CMD_ID_DEVID) { // Get DEV_ID
|
||||
osal_memcpy(obuf, &dev_id, sizeof(dev_id));
|
||||
memcpy(obuf, &dev_id, sizeof(dev_id));
|
||||
olen = sizeof(dev_id);
|
||||
} else if (cmd == CMD_ID_CFG) { // Get/Set device config
|
||||
if (--len > sizeof(cfg))
|
||||
len = sizeof(cfg);
|
||||
if (len) {
|
||||
osal_memcpy(&cfg, &ibuf[1], len);
|
||||
memcpy(&cfg, &ibuf[1], len);
|
||||
test_config();
|
||||
flash_write_cfg(&cfg, EEP_ID_CFG, sizeof(cfg));
|
||||
}
|
||||
osal_memcpy(&obuf[1], &cfg, sizeof(cfg));
|
||||
memcpy(&obuf[1], &cfg, sizeof(cfg));
|
||||
olen = sizeof(cfg) + 1;
|
||||
} else if (cmd == CMD_ID_CFG_DEF) { // Set default device config
|
||||
osal_memcpy(&cfg, &def_cfg, sizeof(cfg));
|
||||
memcpy(&cfg, &def_cfg, sizeof(cfg));
|
||||
test_config();
|
||||
flash_write_cfg(&cfg, EEP_ID_CFG, sizeof(cfg));
|
||||
osal_memcpy(&obuf[1], &cfg, sizeof(cfg));
|
||||
memcpy(&obuf[1], &cfg, sizeof(cfg));
|
||||
olen = sizeof(cfg) + 1;
|
||||
#if (DEV_SERVICES & SERVICE_THS)
|
||||
} else if (cmd == CMD_ID_CFS) { // Get/Set sensor config
|
||||
if (--len > sizeof(thsensor_cfg.coef))
|
||||
len = sizeof(thsensor_cfg.coef);
|
||||
if (len) {
|
||||
osal_memcpy(&thsensor_cfg.coef, &ibuf[1], len);
|
||||
memcpy(&thsensor_cfg.coef, &ibuf[1], len);
|
||||
flash_write_cfg(&thsensor_cfg.coef, EEP_ID_CFS, sizeof(thsensor_cfg.coef));
|
||||
}
|
||||
osal_memcpy(&obuf[1], &thsensor_cfg, thsensor_cfg_send_size);
|
||||
memcpy(&obuf[1], &thsensor_cfg, thsensor_cfg_send_size);
|
||||
olen = thsensor_cfg_send_size + 1;
|
||||
} else if (cmd == CMD_ID_CFS_DEF) { // Get/Set default sensor config
|
||||
osal_memset(&thsensor_cfg, 0, thsensor_cfg_send_size);
|
||||
memset(&thsensor_cfg, 0, thsensor_cfg_send_size);
|
||||
init_sensor();
|
||||
osal_memcpy(&obuf[1], &thsensor_cfg, thsensor_cfg_send_size);
|
||||
memcpy(&obuf[1], &thsensor_cfg, thsensor_cfg_send_size);
|
||||
olen = thsensor_cfg_send_size + 1;
|
||||
} else if (cmd == CMD_ID_SEN_ID) {
|
||||
osal_memcpy(&obuf[1], (uint8_t *)&thsensor_cfg.mid, 5);
|
||||
memcpy(&obuf[1], (uint8_t *)&thsensor_cfg.mid, 5);
|
||||
olen = 1 + 5;
|
||||
#endif
|
||||
#if (DEV_SERVICES & SERVICE_HISTORY)
|
||||
|
|
@ -106,13 +106,11 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
}
|
||||
#endif
|
||||
} else if (cmd == CMD_ID_SERIAL) {
|
||||
osal_memcpy(&obuf[1], devInfoSerialNumber, sizeof(devInfoSerialNumber)-1);
|
||||
memcpy(&obuf[1], devInfoSerialNumber, sizeof(devInfoSerialNumber)-1);
|
||||
olen = 1 + sizeof(devInfoSerialNumber)-1;
|
||||
} else if (cmd == CMD_ID_FLASH_ID) {
|
||||
osal_memcpy(&obuf[1], (uint8_t *)&phy_flash.IdentificationID, 8);
|
||||
memcpy(&obuf[1], (uint8_t *)&phy_flash.IdentificationID, 8);
|
||||
olen = 1 + 8;
|
||||
// } else if (cmd == CMD_ID_DNAME) {
|
||||
// } else if (cmd == CMD_ID_DEV_MAC) {
|
||||
} else if (cmd == CMD_ID_MTU) {
|
||||
if (ibuf[1] <= MTU_SIZE)
|
||||
ATT_UpdateMtuSize(gapRole_ConnectionHandle, ibuf[1]);
|
||||
|
|
@ -120,20 +118,24 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
obuf[1] = 0xff;
|
||||
olen = 2;
|
||||
} else if (cmd == CMD_ID_REBOOT) {
|
||||
GAPRole_TerminateConnection();
|
||||
if(len >= 2) {
|
||||
write_reg(OTA_MODE_SELECT_REG, ibuf[1]);
|
||||
}
|
||||
hal_system_soft_reset();
|
||||
wrk.reboot = ibuf[1];
|
||||
obuf[1] = ibuf[1];
|
||||
} else
|
||||
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;
|
||||
#if (DEV_SERVICES & SERVICE_SCREEN)
|
||||
} else if (cmd == CMD_ID_LCD_DUMP) { // Get/set lcd buf
|
||||
if (--len > sizeof(display_buff))
|
||||
len = sizeof(display_buff);
|
||||
if (len) {
|
||||
osal_memcpy(display_buff, &ibuf[1], len);
|
||||
memcpy(display_buff, &ibuf[1], len);
|
||||
update_lcd();
|
||||
}
|
||||
osal_memcpy(&obuf[1], display_buff, sizeof(display_buff));
|
||||
memcpy(&obuf[1], display_buff, sizeof(display_buff));
|
||||
olen = 1 + sizeof(display_buff);
|
||||
#endif
|
||||
} else if (cmd == CMD_ID_UTC_TIME) { // Get/set utc time
|
||||
|
|
@ -146,7 +148,7 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
//clkt.utc_time_add = 0;
|
||||
}
|
||||
tmp = get_utc_time_sec();
|
||||
osal_memcpy(&obuf[1], &tmp, 4);
|
||||
memcpy(&obuf[1], &tmp, 4);
|
||||
#if (DEV_SERVICES & SERVICE_TIME_ADJUST)
|
||||
memcpy(&obuf[4 + 1], &clkt.utc_set_time_sec, sizeof(clkt.utc_set_time_sec));
|
||||
olen = 4 + sizeof(clkt.utc_set_time_sec) + 1;
|
||||
|
|
@ -162,8 +164,27 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
memcpy(&send_buf[1], &clkt.delta_time, sizeof(clkt.delta_time));
|
||||
olen = sizeof(clkt.delta_time) + 1;
|
||||
#endif
|
||||
} else if (cmd == CMD_ID_DEV_MAC) {
|
||||
if (len > MAC_LEN) {
|
||||
if(memcmp(ownPublicAddr, &ibuf[1], MAC_LEN)) {
|
||||
memcpy(ownPublicAddr, &ibuf[1], MAC_LEN);
|
||||
flash_write_cfg(ownPublicAddr, EEP_ID_MAC, MAC_LEN);
|
||||
wrk.reboot |= 1;
|
||||
}
|
||||
}
|
||||
memcpy(&obuf[1], ownPublicAddr, MAC_LEN);
|
||||
olen = MAC_LEN + 1;
|
||||
} else if (cmd == CMD_ID_DNAME) {
|
||||
if (len > 1 && len < B_MAX_ADV_LEN - 2) {
|
||||
len--;
|
||||
memcpy(&gapRole_ScanRspData[2], &ibuf[1], len);
|
||||
flash_write_cfg(&gapRole_ScanRspData[2], EEP_ID_DVN, len);
|
||||
set_dev_name();
|
||||
}
|
||||
olen = gapRole_ScanRspData[0];
|
||||
memcpy(&obuf[1], &gapRole_ScanRspData[2], olen - 1);
|
||||
|
||||
//---------- Debug commands (unsupported in different versions!):
|
||||
//---------- Debug commands (unsupported in different versions!):
|
||||
|
||||
} else if (cmd == CMD_ID_EEP_RW && len > 2) {
|
||||
obuf[1] = ibuf[1];
|
||||
|
|
@ -182,11 +203,11 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
uint8_t *p = (uint8_t *)tmp;
|
||||
if(len > 5) {
|
||||
len -= 5;
|
||||
osal_memcpy(p, &ibuf[5], len);
|
||||
memcpy(p, &ibuf[5], len);
|
||||
} else
|
||||
len = SEND_DATA_SIZE;
|
||||
osal_memcpy(obuf, ibuf, 5);
|
||||
osal_memcpy(&obuf[5], p, len);
|
||||
memcpy(obuf, ibuf, 5);
|
||||
memcpy(&obuf[5], p, len);
|
||||
olen = len + 1 + 4;
|
||||
} else if (cmd == CMD_ID_REG_RW && len > 4) { // Read/Write 32 bits register (aligned)
|
||||
volatile uint32_t *p = (volatile uint32_t *)tmp;
|
||||
|
|
@ -198,8 +219,8 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
olen = 2;
|
||||
}
|
||||
tmp = *p;
|
||||
osal_memcpy(obuf, ibuf, 5);
|
||||
osal_memcpy(&obuf[5], &tmp, 4);
|
||||
memcpy(obuf, ibuf, 5);
|
||||
memcpy(&obuf[5], &tmp, 4);
|
||||
olen = 1 + 4 + 4;
|
||||
} else {
|
||||
obuf[1] = 0xff; // Error cmd
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
#include "gapbondmgr.h"
|
||||
#include "pwrmgr.h"
|
||||
#include "gpio.h"
|
||||
#include "bleperipheral.h"
|
||||
#include "thb2_main.h"
|
||||
#include "ll.h"
|
||||
#include "ll_hw_drv.h"
|
||||
#include "ll_def.h"
|
||||
|
|
@ -42,17 +42,18 @@
|
|||
extern gapPeriConnectParams_t periConnParameters;
|
||||
|
||||
clock_time_t clkt;
|
||||
|
||||
cfg_t cfg;
|
||||
work_parm_t wrk;
|
||||
adv_work_t adv_wrk;
|
||||
|
||||
const cfg_t def_cfg = {
|
||||
.flg = 0,
|
||||
.flg = 1,
|
||||
.rf_tx_power = RF_PHY_TX_POWER_0DBM,
|
||||
.advertising_interval = 80, // 80 * 62.5 = 5000 ms
|
||||
.measure_interval = 2, // 5 * 2 = 10 sec
|
||||
.batt_interval = 60, // 60 sec
|
||||
.connect_latency = 29, // 30*30 = 900 ms
|
||||
.averaging_measurements = 2 // 180*10 = 1800 sec, 30 min
|
||||
.averaging_measurements = 180 // 180*10 = 1800 sec, 30 min
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -85,8 +86,8 @@ uint32_t get_utc_time_sec(void) {
|
|||
clkt.utc_time_tik = new_time_tik;
|
||||
clkt.utc_time_sec += clkt.utc_time_add >> 15; // div 32768
|
||||
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; // сохранить
|
||||
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
|
||||
|
|
@ -117,13 +118,14 @@ void test_config(void) {
|
|||
|
||||
void load_eep_config(void) {
|
||||
if(!flash_supported_eep_ver(0, APP_VERSION)) {
|
||||
osal_memcpy(&cfg, &def_cfg, sizeof(cfg));
|
||||
memcpy(&cfg, &def_cfg, sizeof(cfg));
|
||||
memset(&thsensor_cfg.coef, 0, sizeof(thsensor_cfg.coef));
|
||||
} else {
|
||||
if (flash_read_cfg(&cfg, EEP_ID_CFG, sizeof(cfg)) != sizeof(cfg))
|
||||
osal_memcpy(&cfg, &def_cfg, sizeof(cfg));
|
||||
memcpy(&cfg, &def_cfg, sizeof(cfg));
|
||||
#if (DEV_SERVICES & SERVICE_THS)
|
||||
if(flash_read_cfg(&thsensor_cfg.coef, EEP_ID_CFS, sizeof(thsensor_cfg.coef)) != sizeof(thsensor_cfg.coef)) {
|
||||
osal_memset(&thsensor_cfg.coef, 0, sizeof(thsensor_cfg.coef));
|
||||
memset(&thsensor_cfg.coef, 0, sizeof(thsensor_cfg.coef));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
// #include "bus_dev.h"
|
||||
|
||||
#ifndef APP_VERSION
|
||||
#define APP_VERSION 0x08 // BCD
|
||||
#define APP_VERSION 0x09 // BCD
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
#define DEVICE_TH05 21
|
||||
|
||||
#ifndef DEVICE
|
||||
#define DEVICE DEVICE_THB2
|
||||
#define DEVICE DEVICE_TH05
|
||||
#endif
|
||||
|
||||
// supported services by the device (bits)
|
||||
|
|
@ -59,12 +59,12 @@
|
|||
#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
|
||||
#define OTA_TYPE_APP SERVICE_OTA_EXT // переключение из APP на OTA + boot прошивку, пока не реализовано
|
||||
#define OTA_TYPE_NONE 0 // нет OTA, только переключение из APP на boot прошивку
|
||||
#define OTA_TYPE_BOOT SERVICE_OTA // вариант для прошивки boot + OTA
|
||||
#define OTA_TYPE_APP SERVICE_OTA_EXT // не реализовано
|
||||
|
||||
#ifndef OTA_TYPE
|
||||
#define OTA_TYPE OTA_TYPE_BOOT
|
||||
#define OTA_TYPE OTA_TYPE_NONE
|
||||
#endif
|
||||
|
||||
#define DEF_SOFTWARE_REVISION {'V', '0'+ (APP_VERSION >> 4), '.' , '0'+ (APP_VERSION & 0x0F), 0}
|
||||
|
|
@ -137,6 +137,7 @@
|
|||
| SERVICE_SCREEN \
|
||||
| SERVICE_THS \
|
||||
| SERVICE_KEY \
|
||||
| SERVICE_HISTORY \
|
||||
)
|
||||
#else
|
||||
#define DEV_SERVICES (OTA_TYPE \
|
||||
|
|
@ -196,10 +197,13 @@ typedef struct _cfg_t {
|
|||
uint8_t reserved2;
|
||||
|
||||
}cfg_t;
|
||||
|
||||
extern cfg_t cfg;
|
||||
extern const cfg_t def_cfg;
|
||||
|
||||
#define FLG_MEAS_NOTIFY 1 // включить Notify измерений
|
||||
#define FLG_SHOW_TIME 2 // включить показ часов на LCD
|
||||
|
||||
|
||||
typedef struct _adv_work_t {
|
||||
uint32_t measure_interval_ms;
|
||||
uint32_t measure_batt_tik;
|
||||
|
|
@ -207,9 +211,21 @@ typedef struct _adv_work_t {
|
|||
uint8_t adv_con_count;
|
||||
uint8_t adv_batt;
|
||||
} adv_work_t;
|
||||
|
||||
extern adv_work_t adv_wrk;
|
||||
|
||||
#define OTA_MODE_SELECT_REG 0x4000f034
|
||||
//#define OTA_MODE_SELECT_REG (AP_AON->RTCCC2) // [0x4000f034] == 0x55 -> OTA
|
||||
#define BOOT_FLG_OTA 0x55
|
||||
|
||||
typedef struct _work_parm_t {
|
||||
#if (DEV_SERVICES & SERVICE_SCREEN)
|
||||
uint8_t lcd_count;
|
||||
#endif
|
||||
uint8_t reboot; // reboot on disconnect
|
||||
uint8_t boot_flg;
|
||||
} work_parm_t;
|
||||
extern work_parm_t wrk;
|
||||
|
||||
// uint32_t rtc_get_counter(void); // tik 32768
|
||||
#if 1
|
||||
#define clock_time_rtc() rtc_get_counter()
|
||||
|
|
|
|||
|
|
@ -347,7 +347,7 @@ bStatus_t DevInfo_SetParameter( uint8 param, uint8 len, void* value )
|
|||
{
|
||||
#if SYSTEM_ID_ENABLE
|
||||
case DEVINFO_SYSTEM_ID:
|
||||
osal_memcpy(devInfoSystemId, value, len);
|
||||
memcpy(devInfoSystemId, value, len);
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
|
@ -380,55 +380,55 @@ bStatus_t DevInfo_GetParameter( uint8 param, void* value )
|
|||
{
|
||||
#if SYSTEM_ID_ENABLE
|
||||
case DEVINFO_SYSTEM_ID:
|
||||
osal_memcpy(value, devInfoSystemId, sizeof(devInfoSystemId));
|
||||
memcpy(value, devInfoSystemId, sizeof(devInfoSystemId));
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if MODEL_NUMBER_STR_ENABLE
|
||||
case DEVINFO_MODEL_NUMBER:
|
||||
osal_memcpy(value, devInfoModelNumber, sizeof(devInfoModelNumber));
|
||||
memcpy(value, devInfoModelNumber, sizeof(devInfoModelNumber));
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if SERIAL_NUMBER_STR_ENABLE
|
||||
case DEVINFO_SERIAL_NUMBER:
|
||||
osal_memcpy(value, devInfoSerialNumber, sizeof(devInfoSerialNumber));
|
||||
memcpy(value, devInfoSerialNumber, sizeof(devInfoSerialNumber));
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if FIRMWARE_REVISION_ENABLE
|
||||
case DEVINFO_FIRMWARE_REV:
|
||||
osal_memcpy(value, devInfoFirmwareRev, sizeof(devInfoFirmwareRev));
|
||||
memcpy(value, devInfoFirmwareRev, sizeof(devInfoFirmwareRev));
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if HARDWARE_REVISION_ENABLE
|
||||
case DEVINFO_HARDWARE_REV:
|
||||
osal_memcpy(value, devInfoHardwareRev, sizeof(devInfoHardwareRev));
|
||||
memcpy(value, devInfoHardwareRev, sizeof(devInfoHardwareRev));
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if SOFTWARE_REVISION_ENABLE
|
||||
case DEVINFO_SOFTWARE_REV:
|
||||
osal_memcpy(value, devInfoSoftwareRev, sizeof(devInfoSoftwareRev));
|
||||
memcpy(value, devInfoSoftwareRev, sizeof(devInfoSoftwareRev));
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if MANUFACTURE_NAME_STR_ENABLE
|
||||
case DEVINFO_MANUFACTURER_NAME:
|
||||
osal_memcpy(value, devInfoMfrName, sizeof(devInfoMfrName));
|
||||
memcpy(value, devInfoMfrName, sizeof(devInfoMfrName));
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if IEEE_DATA_ENABLE
|
||||
case DEVINFO_11073_CERT_DATA:
|
||||
osal_memcpy(value, devInfo11073Cert, sizeof(devInfo11073Cert));
|
||||
memcpy(value, devInfo11073Cert, sizeof(devInfo11073Cert));
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if PNP_ID_ENABLE
|
||||
case DEVINFO_PNP_ID:
|
||||
osal_memcpy(value, devInfoPnpId, sizeof(devInfoPnpId));
|
||||
memcpy(value, devInfoPnpId, sizeof(devInfoPnpId));
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
|
@ -472,7 +472,7 @@ static uint8 devInfo_ReadAttrCB( uint16 connHandle, gattAttribute_t* pAttr,
|
|||
// determine read length
|
||||
*pLen = MIN(maxLen, (sizeof(devInfoSystemId) - offset));
|
||||
// copy data
|
||||
osal_memcpy(pValue, &devInfoSystemId[offset], *pLen);
|
||||
memcpy(pValue, &devInfoSystemId[offset], *pLen);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -486,7 +486,7 @@ static uint8 devInfo_ReadAttrCB( uint16 connHandle, gattAttribute_t* pAttr,
|
|||
// determine read length (exclude null terminating character)
|
||||
*pLen = MIN(maxLen, ((sizeof(devInfoModelNumber) - 1) - offset));
|
||||
// copy data
|
||||
osal_memcpy(pValue, &devInfoModelNumber[offset], *pLen);
|
||||
memcpy(pValue, &devInfoModelNumber[offset], *pLen);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -500,7 +500,7 @@ static uint8 devInfo_ReadAttrCB( uint16 connHandle, gattAttribute_t* pAttr,
|
|||
// determine read length (exclude null terminating character)
|
||||
*pLen = MIN(maxLen, ((sizeof(devInfoSerialNumber) - 1) - offset));
|
||||
// copy data
|
||||
osal_memcpy(pValue, &devInfoSerialNumber[offset], *pLen);
|
||||
memcpy(pValue, &devInfoSerialNumber[offset], *pLen);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -514,7 +514,7 @@ static uint8 devInfo_ReadAttrCB( uint16 connHandle, gattAttribute_t* pAttr,
|
|||
// determine read length (exclude null terminating character)
|
||||
*pLen = MIN(maxLen, ((sizeof(devInfoFirmwareRev) - 1) - offset));
|
||||
// copy data
|
||||
osal_memcpy(pValue, &devInfoFirmwareRev[offset], *pLen);
|
||||
memcpy(pValue, &devInfoFirmwareRev[offset], *pLen);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -528,7 +528,7 @@ static uint8 devInfo_ReadAttrCB( uint16 connHandle, gattAttribute_t* pAttr,
|
|||
// determine read length (exclude null terminating character)
|
||||
*pLen = MIN(maxLen, ((sizeof(devInfoHardwareRev) - 1) - offset));
|
||||
// copy data
|
||||
osal_memcpy(pValue, &devInfoHardwareRev[offset], *pLen);
|
||||
memcpy(pValue, &devInfoHardwareRev[offset], *pLen);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -542,7 +542,7 @@ static uint8 devInfo_ReadAttrCB( uint16 connHandle, gattAttribute_t* pAttr,
|
|||
// determine read length (exclude null terminating character)
|
||||
*pLen = MIN(maxLen, ((sizeof(devInfoSoftwareRev) - 1) - offset));
|
||||
// copy data
|
||||
osal_memcpy(pValue, &devInfoSoftwareRev[offset], *pLen);
|
||||
memcpy(pValue, &devInfoSoftwareRev[offset], *pLen);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -556,7 +556,7 @@ static uint8 devInfo_ReadAttrCB( uint16 connHandle, gattAttribute_t* pAttr,
|
|||
// determine read length (exclude null terminating character)
|
||||
*pLen = MIN(maxLen, ((sizeof(devInfoMfrName) - 1) - offset));
|
||||
// copy data
|
||||
osal_memcpy(pValue, &devInfoMfrName[offset], *pLen);
|
||||
memcpy(pValue, &devInfoMfrName[offset], *pLen);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -570,7 +570,7 @@ static uint8 devInfo_ReadAttrCB( uint16 connHandle, gattAttribute_t* pAttr,
|
|||
// determine read length
|
||||
*pLen = MIN(maxLen, (sizeof(devInfo11073Cert) - offset));
|
||||
// copy data
|
||||
osal_memcpy(pValue, &devInfo11073Cert[offset], *pLen);
|
||||
memcpy(pValue, &devInfo11073Cert[offset], *pLen);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -584,7 +584,7 @@ static uint8 devInfo_ReadAttrCB( uint16 connHandle, gattAttribute_t* pAttr,
|
|||
// determine read length
|
||||
*pLen = MIN(maxLen, (sizeof(devInfoPnpId) - offset));
|
||||
// copy data
|
||||
osal_memcpy(pValue, &devInfoPnpId[offset], *pLen);
|
||||
memcpy(pValue, &devInfoPnpId[offset], *pLen);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ extern "C" {
|
|||
//#define EEP_ID_RPC (0x0DF5) // EEP ID reed switch pulse counter
|
||||
//#define EEP_ID_PCD (0xC0DE) // EEP ID pincode
|
||||
//#define EEP_ID_CMF (0x0FCC) // EEP ID comfort data
|
||||
//#define EEP_ID_DVN (0xDEAE) // EEP ID device name
|
||||
#define EEP_ID_DVN (0xDEAE) // EEP ID device name
|
||||
#define EEP_ID_TIM (0x0ADA) // EEP ID time adjust
|
||||
//#define EEP_ID_KEY (0xBC0D) // EEP ID bkey
|
||||
#define EEP_ID_VER (0x5555) // EEP ID blk: unsigned int = minimum supported version
|
||||
|
|
|
|||
|
|
@ -231,14 +231,10 @@ void chow_measure(void) {
|
|||
update_lcd();
|
||||
}
|
||||
|
||||
struct {
|
||||
// uint32_t chow_tik;
|
||||
uint8_t count;
|
||||
} lcd;
|
||||
|
||||
/* flg != 0 -> chow_measure */
|
||||
void chow_lcd(int flg) {
|
||||
if(cfg.flg & 1) {
|
||||
if(lcd.count++ & 1)
|
||||
if(cfg.flg & FLG_SHOW_TIME) {
|
||||
if(wrk.lcd_count++ & 1)
|
||||
chow_clock();
|
||||
else
|
||||
chow_measure();
|
||||
|
|
|
|||
|
|
@ -316,19 +316,20 @@ int main(void) {
|
|||
|
||||
#if 0 // defined ( __GNUC__ ) // -> *.ld
|
||||
extern const uint32_t *const jump_table_base[];
|
||||
osal_memcpy((void*) 0x1fff0000, (void*) jump_table_base, 1024);
|
||||
memcpy((void*) 0x1fff0000, (void*) jump_table_base, 1024);
|
||||
#endif
|
||||
|
||||
wrk.boot_flg = (uint8_t)read_reg(OTA_MODE_SELECT_REG);
|
||||
write_reg(OTA_MODE_SELECT_REG, 0);
|
||||
#if defined(OTA_TYPE) && OTA_TYPE == OTA_TYPE_BOOT
|
||||
if (read_reg(OTA_MODE_SELECT_REG) != 0x55
|
||||
if (wrk.boot_flg != BOOT_FLG_OTA
|
||||
#if (DEV_SERVICES & SERVICE_KEY)
|
||||
&& hal_gpio_read(GPIO_KEY)
|
||||
&& hal_gpio_read(GPIO_KEY)
|
||||
#endif
|
||||
) {
|
||||
spif_config(SYS_CLK_DLL_64M, 1, XFRD_FCMD_READ_DUAL, 0, 0);
|
||||
AP_PCR->CACHE_BYPASS = 1; // just bypass cache
|
||||
startup_app();
|
||||
}// else write_reg(OTA_MODE_SELECT_REG, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
watchdog_config(WDG_2S);
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
/**************************************************************************************************
|
||||
INCLUDES
|
||||
**************************************************************************************************/
|
||||
#include "config.h"
|
||||
#if (APP_CFG == 0)
|
||||
#include "OSAL.h"
|
||||
#include "OSAL_Tasks.h"
|
||||
|
|
@ -39,7 +40,7 @@
|
|||
#include "thb2_peripheral.h"
|
||||
|
||||
/* Application */
|
||||
#include "bleperipheral.h"
|
||||
#include "thb2_main.h"
|
||||
#include "halperipheral.h"
|
||||
|
||||
/*********************************************************************
|
||||
|
|
@ -104,7 +105,7 @@ void osalInitTasks( void )
|
|||
{
|
||||
uint8 taskID = 0;
|
||||
tasksEvents = (uint16*)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
|
||||
osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));
|
||||
memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));
|
||||
/* LL Task */
|
||||
LL_Init( taskID++ );
|
||||
/* HCI Task */
|
||||
|
|
|
|||
|
|
@ -20,13 +20,14 @@
|
|||
#include "gapbondmgr.h"
|
||||
//#include "log.h"
|
||||
#include "thb2_peripheral.h"
|
||||
#include "bleperipheral.h"
|
||||
#include "thb2_main.h"
|
||||
#include "sbp_profile.h"
|
||||
#include "cmd_parser.h"
|
||||
#include "ble_ota.h"
|
||||
#include "logger.h"
|
||||
#include "hci.h"
|
||||
#include "lcd_th05.h"
|
||||
#include "sensor.h"
|
||||
|
||||
/*********************************************************************
|
||||
* MACROS
|
||||
|
|
@ -311,13 +312,13 @@ static bStatus_t simpleProfile_ReadAttrCB( uint16_t connHandle, gattAttribute_t
|
|||
#if OTA_TYPE
|
||||
case SIMPLEPROFILE_CHAR1_UUID:
|
||||
*pLen = 20;
|
||||
osal_memcpy( pValue, &ota, *pLen );
|
||||
memcpy( pValue, &ota, *pLen );
|
||||
LOG("Read_UUID1:\n");
|
||||
break;
|
||||
#endif
|
||||
case SIMPLEPROFILE_CHAR2_UUID:
|
||||
*pLen = sizeof(dev_id);
|
||||
osal_memcpy( pValue, &dev_id, *pLen);
|
||||
memcpy( pValue, &dev_id, *pLen);
|
||||
LOG("Read_UUID2:\n");
|
||||
break;
|
||||
default:
|
||||
|
|
@ -377,7 +378,7 @@ static bStatus_t simpleProfile_ReadAttrCB( uint16_t connHandle, gattAttribute_t
|
|||
|
||||
//Write the value
|
||||
if ( status == SUCCESS) {
|
||||
osal_memcpy( pAttr->pValue, pValue, len );
|
||||
memcpy( pAttr->pValue, pValue, len );
|
||||
ota_in_len = len;
|
||||
LOG("OTA receive data = 0x ");
|
||||
LOG_DUMP_BYTE(pAttr->pValue, len);
|
||||
|
|
@ -397,7 +398,7 @@ static bStatus_t simpleProfile_ReadAttrCB( uint16_t connHandle, gattAttribute_t
|
|||
status = ATT_ERR_ATTR_NOT_LONG;
|
||||
// Write the value
|
||||
if ( status == SUCCESS ) {
|
||||
osal_memcpy(pAttr->pValue, pValue, len );
|
||||
memcpy(pAttr->pValue, pValue, len );
|
||||
cmd_in_len = len;
|
||||
LOG("CMD receive data = 0x ");
|
||||
LOG_DUMP_BYTE(pAttr->pValue, len);
|
||||
|
|
@ -465,6 +466,30 @@ void new_ota_data(void) {
|
|||
}
|
||||
#endif
|
||||
|
||||
static void measureNotifyCB( linkDBItem_t* pLinkItem )
|
||||
{
|
||||
if ( pLinkItem->stateFlags & LINK_CONNECTED )
|
||||
{
|
||||
uint16 value = GATTServApp_ReadCharCfg( pLinkItem->connectionHandle,
|
||||
simpleProfileChar2Config );
|
||||
|
||||
if ( value & GATT_CLIENT_CFG_NOTIFY )
|
||||
{
|
||||
attHandleValueNoti_t noti;
|
||||
noti.handle = simpleProfileAttrTbl[CDM_DATA_ATTR_IDX].handle;;
|
||||
noti.len = send_len_measured_data + 1;
|
||||
noti.value[0] = CMD_ID_MEASURE;
|
||||
memcpy(¬i.value[1], &measured_data, send_len_measured_data);
|
||||
GATT_Notification( pLinkItem->connectionHandle, ¬i, FALSE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void measure_notify(void) {
|
||||
// Execute linkDB callback to send notification
|
||||
linkDB_PerformFunc( measureNotifyCB );
|
||||
}
|
||||
|
||||
#if (DEV_SERVICES & SERVICE_HISTORY)
|
||||
void wrk_notify(void) {
|
||||
gattServerInfo_t* pServer;
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ extern bStatus_t SimpleProfile_AddService( uint32_t services );
|
|||
void new_cmd_data(void);
|
||||
void new_ota_data(void);
|
||||
void wrk_notify(void);
|
||||
void measure_notify(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
|
|
@ -140,6 +140,7 @@ typedef struct _measured_data_t {
|
|||
uint16_t battery_mv; // mV
|
||||
uint8_t battery; // 0..100 %
|
||||
} measured_data_t;
|
||||
#define send_len_measured_data 9
|
||||
|
||||
extern measured_data_t measured_data;
|
||||
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ int read_sensor_ahtxx(void) {
|
|||
measured_data.humi = 0;
|
||||
else if (measured_data.humi > 9999)
|
||||
measured_data.humi = 9999;
|
||||
measured_data.count++;
|
||||
return 0;
|
||||
}
|
||||
deinit_i2c();
|
||||
|
|
@ -154,7 +155,7 @@ __ATTR_SECTION_XIP__ void init_sensor(void) {
|
|||
thsensor_cfg.i2c_addr = 0;
|
||||
}
|
||||
if(thsensor_cfg.coef.temp_k == 0 && ptabinit) {
|
||||
osal_memcpy(&thsensor_cfg.coef, ptabinit, sizeof(thsensor_cfg.coef));
|
||||
memcpy(&thsensor_cfg.coef, ptabinit, sizeof(thsensor_cfg.coef));
|
||||
}
|
||||
deinit_i2c();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
#include "gapbondmgr.h"
|
||||
#include "pwrmgr.h"
|
||||
#include "gpio.h"
|
||||
#include "bleperipheral.h"
|
||||
#include "thb2_main.h"
|
||||
#include "ll.h"
|
||||
#include "ll_hw_drv.h"
|
||||
#include "ll_def.h"
|
||||
|
|
@ -89,9 +89,7 @@ perStatsByChan_t g_perStatsByChanTest;
|
|||
* LOCAL VARIABLES
|
||||
*/
|
||||
|
||||
adv_work_t adv_wrk;
|
||||
|
||||
uint8 simpleBLEPeripheral_TaskID; // Task ID for internal task/event processing
|
||||
uint8_t simpleBLEPeripheral_TaskID; // Task ID for internal task/event processing
|
||||
|
||||
static gaprole_States_t gapProfileState = GAPROLE_INIT;
|
||||
|
||||
|
|
@ -100,8 +98,8 @@ static gaprole_States_t gapProfileState = GAPROLE_INIT;
|
|||
*/
|
||||
static void simpleBLEPeripheral_ProcessOSALMsg( osal_event_hdr_t *pMsg );
|
||||
static void peripheralStateNotificationCB( gaprole_States_t newState );
|
||||
//static void simpleProfileChangeCB( uint8 paramID );
|
||||
static void peripheralStateReadRssiCB( int8 rssi );
|
||||
//static void simpleProfileChangeCB( uint8_t paramID );
|
||||
static void peripheralStateReadRssiCB( int8_t rssi );
|
||||
|
||||
const char* hex_ascii = { "0123456789ABCDEF" };
|
||||
uint8_t * str_bin2hex(uint8_t *d, uint8_t *s, int len) {
|
||||
|
|
@ -113,35 +111,49 @@ uint8_t * str_bin2hex(uint8_t *d, uint8_t *s, int len) {
|
|||
}
|
||||
|
||||
// GAP - SCAN RSP data (max size = 31 bytes)
|
||||
static void set_def_name(uint8_t * mac)
|
||||
void set_def_name(void)
|
||||
{
|
||||
uint8 * p = gapRole_ScanRspData;
|
||||
uint8_t * pmac = ownPublicAddr;
|
||||
uint8_t * p = gapRole_ScanRspData;
|
||||
gapRole_ScanRspDataLen = sizeof(DEF_MODEL_NUMBER_STR) + 8;
|
||||
*p++ = sizeof(DEF_MODEL_NUMBER_STR) + 7;
|
||||
*p++ = GAP_ADTYPE_LOCAL_NAME_COMPLETE;
|
||||
osal_memcpy(p, devInfoModelNumber, sizeof(DEF_MODEL_NUMBER_STR)-1);
|
||||
memcpy(p, devInfoModelNumber, sizeof(DEF_MODEL_NUMBER_STR)-1);
|
||||
p += sizeof(DEF_MODEL_NUMBER_STR) - 1;
|
||||
*p++ = '-';
|
||||
p = str_bin2hex(p, mac+2, 1);
|
||||
p = str_bin2hex(p, mac+1, 1);
|
||||
str_bin2hex(p, mac, 1);
|
||||
p = str_bin2hex(p, pmac+2, 1);
|
||||
p = str_bin2hex(p, pmac+1, 1);
|
||||
str_bin2hex(p, pmac, 1);
|
||||
flash_write_cfg(NULL, EEP_ID_DVN, 0);
|
||||
}
|
||||
|
||||
void set_dev_name(void)
|
||||
{
|
||||
uint8_t * p = gapRole_ScanRspData;
|
||||
int len = flash_read_cfg(&p[2], EEP_ID_DVN, B_MAX_ADV_LEN - 2);
|
||||
if(len > 0) {
|
||||
*p++ = (uint8_t)len + 1;
|
||||
*p++ = GAP_ADTYPE_LOCAL_NAME_COMPLETE;
|
||||
} else
|
||||
set_def_name();
|
||||
}
|
||||
|
||||
static void set_mac(void)
|
||||
{
|
||||
extern uint8 ownPublicAddr[LL_DEVICE_ADDR_LEN];
|
||||
if (read_chip_mAddr(ownPublicAddr) != CHIP_ID_VALID) {
|
||||
if(flash_read_cfg(ownPublicAddr, EEP_ID_MAC, LL_DEVICE_ADDR_LEN) != LL_DEVICE_ADDR_LEN) {
|
||||
//extern uint8_t ownPublicAddr[LL_DEVICE_ADDR_LEN];
|
||||
if(flash_read_cfg(ownPublicAddr, EEP_ID_MAC, MAC_LEN) != MAC_LEN) {
|
||||
if (read_chip_mAddr(ownPublicAddr) != CHIP_ID_VALID) {
|
||||
LL_Rand(ownPublicAddr,3);
|
||||
// Tuya mac[0:3]
|
||||
ownPublicAddr[3] = 0x8d;
|
||||
ownPublicAddr[4] = 0x1f;
|
||||
ownPublicAddr[5] = 0x38;
|
||||
flash_write_cfg(ownPublicAddr, EEP_ID_MAC, LL_DEVICE_ADDR_LEN);
|
||||
}
|
||||
flash_write_cfg(ownPublicAddr, EEP_ID_MAC, MAC_LEN);
|
||||
}
|
||||
set_def_name(ownPublicAddr);
|
||||
// TODO: pGlobal_config[MAC_ADDRESS_LOC]
|
||||
pGlobal_config[MAC_ADDRESS_LOC] = (uint32_t)ownPublicAddr;
|
||||
// device name
|
||||
set_dev_name();
|
||||
}
|
||||
|
||||
static void set_serial_number(void)
|
||||
|
|
@ -164,11 +176,11 @@ static void set_serial_number(void)
|
|||
}
|
||||
|
||||
extern gapPeriConnectParams_t periConnParameters;
|
||||
extern uint16 gapParameters[];
|
||||
static void set_adv_interval(uint16 advInt);
|
||||
extern uint16_t gapParameters[];
|
||||
static void set_adv_interval(uint16_t advInt);
|
||||
|
||||
// Set new advertising interval
|
||||
static void set_new_adv_interval(uint16 advInt)
|
||||
static void set_new_adv_interval(uint16_t advInt)
|
||||
{
|
||||
set_adv_interval(advInt);
|
||||
GAP_EndDiscoverable( gapRole_TaskID );
|
||||
|
|
@ -177,7 +189,7 @@ static void set_new_adv_interval(uint16 advInt)
|
|||
osal_set_event( gapRole_TaskID, START_ADVERTISING_EVT );
|
||||
}
|
||||
// Set advertising interval
|
||||
static void set_adv_interval(uint16 advInt)
|
||||
static void set_adv_interval(uint16_t advInt)
|
||||
{
|
||||
#ifdef __GCC
|
||||
gapParameters[TGAP_LIM_DISC_ADV_INT_MIN] = advInt;
|
||||
|
|
@ -196,9 +208,9 @@ static void set_adv_interval(uint16 advInt)
|
|||
|
||||
static void adv_measure(void) {
|
||||
if(gapRole_AdvEnabled) {
|
||||
uint32_t tmp = get_utc_time_sec();
|
||||
if(tmp - adv_wrk.measure_batt_tik >= cfg.batt_interval) {
|
||||
adv_wrk.measure_batt_tik = tmp;
|
||||
get_utc_time_sec(); // счет UTC timestamp
|
||||
if(clkt.utc_time_tik - adv_wrk.measure_batt_tik >= ((uint32_t)cfg.batt_interval << 15)) {
|
||||
adv_wrk.measure_batt_tik = clkt.utc_time_tik;
|
||||
batt_start_measure();
|
||||
#if ((DEV_SERVICES & SERVICE_THS) == 0)
|
||||
adv_wrk.adv_batt = 1;
|
||||
|
|
@ -249,6 +261,11 @@ static void adv_measure(void) {
|
|||
#endif // (DEV_SERVICES & SERVICE_THS)
|
||||
if(adv_wrk.adv_con_count) {
|
||||
if(--adv_wrk.adv_con_count == 0) {
|
||||
#if defined(OTA_TYPE) && OTA_TYPE == OTA_TYPE_BOOT
|
||||
if (wrk.boot_flg == BOOT_FLG_OTA) {
|
||||
hal_system_soft_reset();
|
||||
}
|
||||
#endif
|
||||
set_new_adv_interval(cfg.advertising_interval * 100);
|
||||
}
|
||||
}
|
||||
|
|
@ -320,7 +337,7 @@ static void init_app_gpio(void)
|
|||
* GAPROLE ADVERTISING
|
||||
*/
|
||||
void gatrole_advert_enable(bool enable) {
|
||||
uint8 oldAdvEnabled = gapRole_AdvEnabled;
|
||||
uint8_t oldAdvEnabled = gapRole_AdvEnabled;
|
||||
gapRole_AdvEnabled = enable;
|
||||
|
||||
if ( (oldAdvEnabled) && (gapRole_AdvEnabled == FALSE) )
|
||||
|
|
@ -380,7 +397,7 @@ static gapBondCBs_t simpleBLEPeripheral_BondMgrCBs =
|
|||
*
|
||||
* @return none
|
||||
*/
|
||||
void SimpleBLEPeripheral_Init( uint8 task_id )
|
||||
void SimpleBLEPeripheral_Init( uint8_t task_id )
|
||||
{
|
||||
simpleBLEPeripheral_TaskID = task_id;
|
||||
|
||||
|
|
@ -429,10 +446,9 @@ void SimpleBLEPeripheral_Init( uint8 task_id )
|
|||
|
||||
// Set advertising interval
|
||||
#if defined(OTA_TYPE) && OTA_TYPE == OTA_TYPE_BOOT
|
||||
if (read_reg(OTA_MODE_SELECT_REG) == 0x55) {
|
||||
write_reg(OTA_MODE_SELECT_REG, 0);
|
||||
if (wrk.boot_flg == BOOT_FLG_OTA) {
|
||||
adv_wrk.adv_con_count = 60000/DEF_OTA_ADV_INERVAL_MS; // 60 sec
|
||||
set_new_adv_interval(DEF_CON_ADV_INERVAL); // actual time = advInt * 625us
|
||||
set_adv_interval(DEF_CON_ADV_INERVAL); // actual time = advInt * 625us
|
||||
} else
|
||||
#endif
|
||||
set_adv_interval(DEF_ADV_INERVAL); // actual time = advInt * 625us
|
||||
|
|
@ -441,16 +457,16 @@ void SimpleBLEPeripheral_Init( uint8 task_id )
|
|||
#if (DEF_GAPBOND_MGR_ENABLE==1)
|
||||
// Setup the GAP Bond Manager, add 2017-11-15
|
||||
{
|
||||
uint32 passkey = DEFAULT_PASSCODE;
|
||||
uint8 pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;
|
||||
uint8 mitm = TRUE;
|
||||
uint8 ioCap = GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT;
|
||||
uint8 bonding = TRUE;
|
||||
GAPBondMgr_SetParameter( GAPBOND_DEFAULT_PASSCODE, sizeof ( uint32 ), &passkey );
|
||||
GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE, sizeof ( uint8 ), &pairMode );
|
||||
GAPBondMgr_SetParameter( GAPBOND_MITM_PROTECTION, sizeof ( uint8 ), &mitm );
|
||||
GAPBondMgr_SetParameter( GAPBOND_IO_CAPABILITIES, sizeof ( uint8 ), &ioCap );
|
||||
GAPBondMgr_SetParameter( GAPBOND_BONDING_ENABLED, sizeof ( uint8 ), &bonding );
|
||||
uint32_t passkey = DEFAULT_PASSCODE;
|
||||
uint8_t pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;
|
||||
uint8_t mitm = TRUE;
|
||||
uint8_t ioCap = GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT;
|
||||
uint8_t bonding = TRUE;
|
||||
GAPBondMgr_SetParameter( GAPBOND_DEFAULT_PASSCODE, sizeof ( uint32_t ), &passkey );
|
||||
GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE, sizeof ( uint8_t ), &pairMode );
|
||||
GAPBondMgr_SetParameter( GAPBOND_MITM_PROTECTION, sizeof ( uint8_t ), &mitm );
|
||||
GAPBondMgr_SetParameter( GAPBOND_IO_CAPABILITIES, sizeof ( uint8_t ), &ioCap );
|
||||
GAPBondMgr_SetParameter( GAPBOND_BONDING_ENABLED, sizeof ( uint8_t ), &bonding );
|
||||
}
|
||||
#endif
|
||||
// Initialize GATT attributes
|
||||
|
|
@ -465,7 +481,7 @@ void SimpleBLEPeripheral_Init( uint8 task_id )
|
|||
|
||||
#if (1)
|
||||
#if 0 // CODED PHY not work?
|
||||
deviceFeatureSet.featureSet[1] |= (uint8)(
|
||||
deviceFeatureSet.featureSet[1] |= (uint8_t)(
|
||||
LL_FEATURE_2M_PHY
|
||||
| LL_FEATURE_CODED_PHY
|
||||
| LL_FEATURE_CSA2);
|
||||
|
|
@ -514,7 +530,7 @@ void SimpleBLEPeripheral_Init( uint8 task_id )
|
|||
*
|
||||
* @return events not processed
|
||||
*/
|
||||
uint16 BLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )
|
||||
uint16_t BLEPeripheral_ProcessEvent( uint8_t task_id, uint16_t events )
|
||||
{
|
||||
VOID task_id; // OSAL required parameter that isn't used in this function
|
||||
if ( events & ADV_BROADCAST_EVT) {
|
||||
|
|
@ -525,7 +541,7 @@ uint16 BLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )
|
|||
}
|
||||
|
||||
if ( events & SYS_EVENT_MSG ) {
|
||||
uint8 *pMsg;
|
||||
uint8_t *pMsg;
|
||||
|
||||
if ( (pMsg = osal_msg_receive( simpleBLEPeripheral_TaskID )) != NULL )
|
||||
{
|
||||
|
|
@ -548,10 +564,10 @@ uint16 BLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )
|
|||
}
|
||||
if( events & TIMER_BATT_EVT) {
|
||||
LOG("TIMER_EVT\n");
|
||||
get_utc_time_sec(); // счет UTC timestamp
|
||||
#if (DEV_SERVICES & SERVICE_THS)
|
||||
uint32_t tmp = get_utc_time_sec();
|
||||
if(tmp - adv_wrk.measure_batt_tik >= cfg.batt_interval) {
|
||||
adv_wrk.measure_batt_tik = tmp;
|
||||
if(clkt.utc_time_tik - adv_wrk.measure_batt_tik >= ((uint32_t)cfg.batt_interval << 15)) {
|
||||
adv_wrk.measure_batt_tik = clkt.utc_time_tik;
|
||||
batt_start_measure();
|
||||
}
|
||||
read_sensor();
|
||||
|
|
@ -565,8 +581,9 @@ uint16 BLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )
|
|||
#endif
|
||||
// TH Notify
|
||||
TH_NotifyLevel();
|
||||
#else
|
||||
get_utc_time_sec();
|
||||
if(cfg.flg & FLG_MEAS_NOTIFY)
|
||||
measure_notify();
|
||||
#else // no SERVICE_THS
|
||||
batt_start_measure();
|
||||
#endif // (DEV_SERVICES & SERVICE_THS)
|
||||
// return unprocessed events
|
||||
|
|
@ -578,6 +595,8 @@ uint16 BLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )
|
|||
if(!gapRole_AdvEnabled) {
|
||||
BattNotifyLevel();
|
||||
#if ((DEV_SERVICES & SERVICE_THS)==0)
|
||||
if(cfg.flg & FLG_MEAS_NOTIFY)
|
||||
measure_notify();
|
||||
#if (DEV_SERVICES & SERVICE_SCREEN)
|
||||
chow_measure();
|
||||
#endif
|
||||
|
|
@ -662,7 +681,7 @@ static void simpleBLEPeripheral_ProcessOSALMsg( osal_event_hdr_t *pMsg )
|
|||
*
|
||||
* @return none
|
||||
*/
|
||||
static void peripheralStateReadRssiCB( int8 rssi )
|
||||
static void peripheralStateReadRssiCB( int8_t rssi )
|
||||
{
|
||||
(void)rssi;
|
||||
}
|
||||
|
|
@ -726,6 +745,10 @@ static void peripheralStateReadRssiCB( int8 rssi )
|
|||
show_ble_symbol(0);
|
||||
update_lcd();
|
||||
#endif
|
||||
if(wrk.reboot) {
|
||||
write_reg(OTA_MODE_SELECT_REG, wrk.reboot);
|
||||
hal_system_soft_reset();
|
||||
}
|
||||
break;
|
||||
|
||||
case GAPROLE_WAITING_AFTER_TIMEOUT:
|
||||
|
|
|
|||
|
|
@ -1,16 +1,15 @@
|
|||
/**************************************************************************************************
|
||||
Filename: bleperipheral.h
|
||||
Revised:
|
||||
Revision:
|
||||
Filename: thb2_main.h
|
||||
Revised:
|
||||
Revision:
|
||||
|
||||
Description: This file contains the Simple BLE Peripheral sample application
|
||||
definitions and prototypes.
|
||||
|
||||
|
||||
**************************************************************************************************/
|
||||
|
||||
#ifndef SIMPLEBLEPERIPHERAL_H
|
||||
#define SIMPLEBLEPERIPHERAL_H
|
||||
#ifndef _THB2_MAIN_H_
|
||||
#define _THB2_MAIN_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
|
|
@ -37,7 +36,7 @@ extern "C"
|
|||
|
||||
#define DEVINFO_SYSTEM_ID_LEN 8
|
||||
#define DEVINFO_SYSTEM_ID 0
|
||||
|
||||
|
||||
#define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_GENERAL
|
||||
|
||||
// Whether to enable automatic parameter update request when a connection is formed
|
||||
|
|
@ -57,28 +56,30 @@ extern "C"
|
|||
/*********************************************************************
|
||||
* MACROS
|
||||
*/
|
||||
#define MAC_DATA_LEN 6
|
||||
// #define MAC_DATA_LEN 6
|
||||
|
||||
extern uint8 simpleBLEPeripheral_TaskID;
|
||||
/*********************************************************************
|
||||
* FUNCTIONS
|
||||
*/
|
||||
|
||||
/*
|
||||
* Task Initialization for the BLE Application
|
||||
*/
|
||||
extern void SimpleBLEPeripheral_Init( uint8 task_id );
|
||||
|
||||
/*
|
||||
* Task Event Processor for the BLE Application
|
||||
*/
|
||||
extern uint16 BLEPeripheral_ProcessEvent( uint8 task_id, uint16 events );
|
||||
|
||||
/*********************************************************************
|
||||
*********************************************************************/
|
||||
|
||||
#define MAC_LEN 6
|
||||
extern uint8 ownPublicAddr[MAC_LEN];
|
||||
extern uint8_t simpleBLEPeripheral_TaskID; // Task ID for internal task/event processing
|
||||
|
||||
void SimpleBLEPeripheral_Init( uint8_t task_id );
|
||||
|
||||
uint16_t BLEPeripheral_ProcessEvent( uint8_t task_id, uint16_t events );
|
||||
|
||||
void set_def_name(void);
|
||||
|
||||
void set_dev_name(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* SIMPLEBLEPERIPHERAL_H */
|
||||
#endif /* _THB2_MAIN_H_ */
|
||||
|
|
@ -197,7 +197,7 @@ bStatus_t GAPRole_SetParameter( uint16 param, uint8 len, void* pValue )
|
|||
case GAPROLE_IRK:
|
||||
if ( len == KEYLEN )
|
||||
{
|
||||
VOID osal_memcpy( gapRole_IRK, pValue, KEYLEN ) ;
|
||||
VOID memcpy( gapRole_IRK, pValue, KEYLEN ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -209,7 +209,7 @@ bStatus_t GAPRole_SetParameter( uint16 param, uint8 len, void* pValue )
|
|||
case GAPROLE_SRK:
|
||||
if ( len == KEYLEN )
|
||||
{
|
||||
VOID osal_memcpy( gapRole_SRK, pValue, KEYLEN ) ;
|
||||
VOID memcpy( gapRole_SRK, pValue, KEYLEN ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -280,7 +280,7 @@ bStatus_t GAPRole_SetParameter( uint16 param, uint8 len, void* pValue )
|
|||
if ( len <= B_MAX_ADV_LEN )
|
||||
{
|
||||
VOID osal_memset( gapRole_AdvertData, 0, B_MAX_ADV_LEN );
|
||||
VOID osal_memcpy( gapRole_AdvertData, pValue, len );
|
||||
VOID memcpy( gapRole_AdvertData, pValue, len );
|
||||
gapRole_AdvertDataLen = len;
|
||||
// Update the advertising data
|
||||
ret = GAP_UpdateAdvertisingData( gapRole_TaskID,
|
||||
|
|
@ -297,7 +297,7 @@ bStatus_t GAPRole_SetParameter( uint16 param, uint8 len, void* pValue )
|
|||
if ( len <= B_MAX_ADV_LEN )
|
||||
{
|
||||
VOID osal_memset( gapRole_ScanRspData, 0, B_MAX_ADV_LEN );
|
||||
VOID osal_memcpy( gapRole_ScanRspData, pValue, len );
|
||||
VOID memcpy( gapRole_ScanRspData, pValue, len );
|
||||
gapRole_ScanRspDataLen = len;
|
||||
// Update the Response Data
|
||||
ret = GAP_UpdateAdvertisingData( gapRole_TaskID,
|
||||
|
|
@ -337,7 +337,7 @@ bStatus_t GAPRole_SetParameter( uint16 param, uint8 len, void* pValue )
|
|||
case GAPROLE_ADV_DIRECT_ADDR:
|
||||
if ( len == B_ADDR_LEN )
|
||||
{
|
||||
VOID osal_memcpy( gapRole_AdvDirectAddr, pValue, B_ADDR_LEN ) ;
|
||||
VOID memcpy( gapRole_AdvDirectAddr, pValue, B_ADDR_LEN ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -527,11 +527,11 @@ bStatus_t GAPRole_GetParameter( uint16 param, void* pValue )
|
|||
break;
|
||||
|
||||
case GAPROLE_IRK:
|
||||
VOID osal_memcpy( pValue, gapRole_IRK, KEYLEN ) ;
|
||||
VOID memcpy( pValue, gapRole_IRK, KEYLEN ) ;
|
||||
break;
|
||||
|
||||
case GAPROLE_SRK:
|
||||
VOID osal_memcpy( pValue, gapRole_SRK, KEYLEN ) ;
|
||||
VOID memcpy( pValue, gapRole_SRK, KEYLEN ) ;
|
||||
break;
|
||||
|
||||
case GAPROLE_SIGNCOUNTER:
|
||||
|
|
@ -539,7 +539,7 @@ bStatus_t GAPRole_GetParameter( uint16 param, void* pValue )
|
|||
break;
|
||||
|
||||
case GAPROLE_BD_ADDR:
|
||||
VOID osal_memcpy( pValue, gapRole_bdAddr, B_ADDR_LEN ) ;
|
||||
VOID memcpy( pValue, gapRole_bdAddr, B_ADDR_LEN ) ;
|
||||
break;
|
||||
|
||||
case GAPROLE_ADVERT_ENABLED:
|
||||
|
|
@ -551,11 +551,11 @@ bStatus_t GAPRole_GetParameter( uint16 param, void* pValue )
|
|||
break;
|
||||
|
||||
case GAPROLE_ADVERT_DATA:
|
||||
VOID osal_memcpy( pValue, gapRole_AdvertData, gapRole_AdvertDataLen );
|
||||
VOID memcpy( pValue, gapRole_AdvertData, gapRole_AdvertDataLen );
|
||||
break;
|
||||
|
||||
case GAPROLE_SCAN_RSP_DATA:
|
||||
VOID osal_memcpy( pValue, gapRole_ScanRspData, gapRole_ScanRspDataLen ) ;
|
||||
VOID memcpy( pValue, gapRole_ScanRspData, gapRole_ScanRspDataLen ) ;
|
||||
break;
|
||||
|
||||
case GAPROLE_ADV_EVENT_TYPE:
|
||||
|
|
@ -567,7 +567,7 @@ bStatus_t GAPRole_GetParameter( uint16 param, void* pValue )
|
|||
break;
|
||||
|
||||
case GAPROLE_ADV_DIRECT_ADDR:
|
||||
VOID osal_memcpy( pValue, gapRole_AdvDirectAddr, B_ADDR_LEN ) ;
|
||||
VOID memcpy( pValue, gapRole_AdvDirectAddr, B_ADDR_LEN ) ;
|
||||
break;
|
||||
|
||||
case GAPROLE_ADV_CHANNEL_MAP:
|
||||
|
|
@ -607,7 +607,7 @@ bStatus_t GAPRole_GetParameter( uint16 param, void* pValue )
|
|||
break;
|
||||
|
||||
case GAPROLE_CONN_BD_ADDR:
|
||||
VOID osal_memcpy( pValue, gapRole_ConnectedDevAddr, B_ADDR_LEN ) ;
|
||||
VOID memcpy( pValue, gapRole_ConnectedDevAddr, B_ADDR_LEN ) ;
|
||||
break;
|
||||
|
||||
case GAPROLE_CONN_INTERVAL:
|
||||
|
|
@ -803,7 +803,7 @@ uint16 GAPRole_ProcessEvent( uint8 task_id, uint16 events )
|
|||
{
|
||||
params.eventType = gapRole_AdvEventType;
|
||||
params.initiatorAddrType = gapRole_AdvDirectType;
|
||||
VOID osal_memcpy( params.initiatorAddr, gapRole_AdvDirectAddr, B_ADDR_LEN );
|
||||
VOID memcpy( params.initiatorAddr, gapRole_AdvDirectAddr, B_ADDR_LEN );
|
||||
}
|
||||
|
||||
params.channelMap = gapRole_AdvChanMap;
|
||||
|
|
@ -1039,7 +1039,7 @@ static void gapRole_ProcessGAPMsg( gapEventHdr_t* pMsg )
|
|||
// VOID osal_snv_write( BLE_NVID_IRK, KEYLEN, gapRole_IRK );
|
||||
// VOID osal_snv_write( BLE_NVID_CSRK, KEYLEN, gapRole_SRK );
|
||||
// Save off the information
|
||||
VOID osal_memcpy( gapRole_bdAddr, pPkt->devAddr, B_ADDR_LEN );
|
||||
VOID memcpy( gapRole_bdAddr, pPkt->devAddr, B_ADDR_LEN );
|
||||
gapRole_state = GAPROLE_STARTED;
|
||||
|
||||
// Update the advertising data
|
||||
|
|
@ -1159,7 +1159,7 @@ static void gapRole_ProcessGAPMsg( gapEventHdr_t* pMsg )
|
|||
|
||||
if ( pPkt->hdr.status == SUCCESS )
|
||||
{
|
||||
VOID osal_memcpy( gapRole_ConnectedDevAddr, pPkt->devAddr, B_ADDR_LEN );
|
||||
VOID memcpy( gapRole_ConnectedDevAddr, pPkt->devAddr, B_ADDR_LEN );
|
||||
gapRole_ConnectionHandle = pPkt->connectionHandle;
|
||||
gapRole_ConnectionInterval = pPkt->connInterval;
|
||||
gapRole_ConnectionLatency = pPkt->connLatency;
|
||||
|
|
@ -1707,7 +1707,7 @@ bStatus_t GAPRole_extAdv_SetParameter(uint8 adv_handler, uint16 param, uint16 le
|
|||
if (len <= GAP_MAX_EXT_ADV_DATA_LENGTH)
|
||||
{
|
||||
VOID osal_memset(para->advData, 0, GAP_MAX_EXT_ADV_DATA_LENGTH);
|
||||
VOID osal_memcpy(para->advData, pValue, len);
|
||||
VOID memcpy(para->advData, pValue, len);
|
||||
para->advDataLen = len;
|
||||
}
|
||||
else
|
||||
|
|
@ -1721,7 +1721,7 @@ bStatus_t GAPRole_extAdv_SetParameter(uint8 adv_handler, uint16 param, uint16 le
|
|||
if (len <= GAP_MAX_EXT_ADV_DATA_LENGTH)
|
||||
{
|
||||
VOID osal_memset(para->scanRspData, 0, GAP_MAX_EXT_ADV_DATA_LENGTH);
|
||||
VOID osal_memcpy(para->scanRspData, pValue, len);
|
||||
VOID memcpy(para->scanRspData, pValue, len);
|
||||
para->scanRspLen = len;
|
||||
}
|
||||
else
|
||||
|
|
@ -1759,7 +1759,7 @@ bStatus_t GAPRole_extAdv_SetParameter(uint8 adv_handler, uint16 param, uint16 le
|
|||
|
||||
case GAP_PEER_ADDR:
|
||||
if (len == 6)
|
||||
osal_memcpy(para->peerAddress,pValue,6);
|
||||
memcpy(para->peerAddress,pValue,6);
|
||||
else
|
||||
ret = bleInvalidRange;
|
||||
|
||||
|
|
@ -1775,7 +1775,7 @@ bStatus_t GAPRole_extAdv_SetParameter(uint8 adv_handler, uint16 param, uint16 le
|
|||
|
||||
case GAP_OWN_RANDOM_ADDR:
|
||||
if (len == 6)
|
||||
osal_memcpy(&(gapRole_ExtAdv_RandomAddr[adv_handler][0]),pValue,6);
|
||||
memcpy(&(gapRole_ExtAdv_RandomAddr[adv_handler][0]),pValue,6);
|
||||
else
|
||||
ret = bleInvalidRange;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<html class="phy6222Class"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>PHY62x2 BTHome v0.4</title>
|
||||
<title>PHY62x2 BTHome v0.5</title>
|
||||
<style type="text/css">
|
||||
/* basic sytles */
|
||||
|
||||
|
|
@ -321,7 +321,9 @@ var devnm = {};
|
|||
|
||||
|
||||
var startTime = 0,
|
||||
isConnected = false;
|
||||
isConnected = false,
|
||||
flg_memo_act = false
|
||||
flg_memo_cnt = 0;
|
||||
|
||||
var ota = {
|
||||
fwArray: null,
|
||||
|
|
@ -580,8 +582,18 @@ function onDisconnected() {
|
|||
}
|
||||
|
||||
function startDFU() {
|
||||
addLog("Старт программирования...");
|
||||
updateBegin();
|
||||
if(otaCharacteristic != null && ota.ind.version == 1 && (devsrs.services & 1) == 1) {
|
||||
addLog("Старт программирования...");
|
||||
updateBegin();
|
||||
} else {
|
||||
addLog("Переключение на BootLoader...");
|
||||
if(cmdCharacteristic != null) {
|
||||
cmdCharacteristic.writeValue(new Uint8Array([0x72,0x55])).then(_ => {
|
||||
console.log('Send reboot to bootloader - ok');
|
||||
reconnect();
|
||||
}).catch(error => { addLog(error); });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function addLog(logTXT) {
|
||||
|
|
@ -1017,6 +1029,7 @@ function customBlkParse(value) {
|
|||
devsrs.services = value.getUint32(8, true);
|
||||
addLog("Dev info # hw: "+hex(devsrs.hw_version,4)+", sw: "+hex(devsrs.sw_version,4)+", services: "+hex(devsrs.services,8)+", sd: "+hex(devsrs.dev_spec_data, 4));
|
||||
} else if(blkId == 0x35){
|
||||
if(flg_memo_act) {
|
||||
if(len >= 12) {
|
||||
let cnt = value.getUint16(1, true);
|
||||
let tc = value.getUint32(3, true);
|
||||
|
|
@ -1024,29 +1037,37 @@ function customBlkParse(value) {
|
|||
let hm = value.getUint16(9, true) / 100.0;
|
||||
let vb = value.getUint16(11, true);
|
||||
let dt = new Date(tc*1000);
|
||||
console.log(((dt.toISOString().slice(0, -1)).replace('T',' ')).replace('.000','')+' # Батарея: '+vb+' мВ , Температура: '+tm+'°C, Влажность: '+hm+'%, Счетчик: '+cnt);
|
||||
addLog(((dt.toISOString().slice(0, -1)).replace('T',' ')).replace('.000','')+' # Батарея: '+vb+' мВ , Температура: '+tm+'°C, Влажность: '+hm+'%, Счетчик: '+cnt);
|
||||
flg_memo_cnt = cnt;
|
||||
} else if(len == 3) {
|
||||
let flg = value.getUint16(1, true);
|
||||
console.log('Последний блок: '+flg);
|
||||
console.log('Memo End: '+flg);
|
||||
if(flg_memo_cnt == 0)
|
||||
addLog('Пока нет истории!');
|
||||
flg_memo_act = false;
|
||||
} else if(len == 2) {
|
||||
addLog('Нет сервиса записи истории!');
|
||||
} else
|
||||
flg_memo_act = false;
|
||||
} else {
|
||||
console.log('blk: ' + dump8(value, value.byteLength));
|
||||
} else if(blkId == 0x33 && len >= 8) {
|
||||
let vbat = value.getUint16(1, true);
|
||||
flg_memo_act = false;
|
||||
}
|
||||
}
|
||||
} else if(blkId == 0x33 && len > 9) {
|
||||
let count = value.getUint16(1, true);
|
||||
let temp = value.getInt16(3, true) / 100.0;
|
||||
let humi = value.getInt16(5, true) / 100.0;
|
||||
let count = value.getUint16(7, true);
|
||||
let vbat = value.getUint16(7, true);
|
||||
let pbat = value.getUint8(9);
|
||||
let flg = 0;
|
||||
let rds_count = 0;
|
||||
if(len > 8) {
|
||||
let s = 'Vbat: '+vbat+' мВ '+pbat+'%, Температура: '+temp.toFixed(2)+'°C, Влажность: '+humi.toFixed(2)+'%, ID: '+count;
|
||||
if(len > 12) {
|
||||
flg = value.getUint8(9);
|
||||
if(len > 12)
|
||||
rds_count = value.getUint32(10, true);
|
||||
rds_count = value.getUint32(10, true);
|
||||
s += ', счетчик срабатываний: '+ rds_count+', флаги: 0x'+hex(flg,2)+':r'+(flg&1)+'/t'+((flg>>1)&1);
|
||||
}
|
||||
let s = 'Vbat: '+vbat+' мВ, Температура: '+temp.toFixed(2)+'°C, Влажность: '+humi.toFixed(2)+'%, ID: '+count+', счетчик срабатываний: '+ rds_count+', флаги: 0x'+hex(flg,2)+':r'+(flg&1)+'/t'+((flg>>1)&1);
|
||||
//$("tempHumiData").innerHTML = s;
|
||||
//TODO: $("tempHumiData").innerHTML = s;
|
||||
addLog(s);
|
||||
} else if((blkId == 0x25 || blkId == 0x26) && (len > 12)) {
|
||||
// CMD_ID_CFS Get/Set sensor config
|
||||
|
|
@ -1077,6 +1098,8 @@ function customBlkParse(value) {
|
|||
} else if((blkId == 0x55 || blkId == 0x56) && (len > 12)) {
|
||||
// CMD_ID_CFG Get/Set device config
|
||||
devcfg.flg = value.getUint32(1, true);
|
||||
// bit0 - measure notify enable
|
||||
// bit1 - lcd chow time enable
|
||||
devcfg.rf_tx_power = value.getUint8(5);
|
||||
devcfg.advertising_interval = value.getUint8(6);
|
||||
devcfg.connect_latency = value.getUint8(7);
|
||||
|
|
@ -1182,12 +1205,29 @@ function customBlkParse(value) {
|
|||
devnm.name = new TextDecoder("utf-8").decode(value.buffer.slice(1));
|
||||
//if($("dev_name"))
|
||||
// $("dev_name").value = dnm.name;
|
||||
addLog("Имя устройства: ["+devnm.name+"]");
|
||||
addLog("Имя устройства: '"+devnm.name+"'");
|
||||
} else if(blkId == 0x10 && len >= 7) {
|
||||
let mac = new Uint8Array(6);
|
||||
mac[0] = value.getUint8(6);
|
||||
mac[1] = value.getUint8(5);
|
||||
mac[2] = value.getUint8(4);
|
||||
mac[3] = value.getUint8(3);
|
||||
mac[4] = value.getUint8(2);
|
||||
mac[5] = value.getUint8(1);
|
||||
addLog("MAC устройства: "+ bytesToHex(mac));
|
||||
} else {
|
||||
console.log('blk: ' + dump8(value, value.byteLength));
|
||||
addLog('Ответ на команду (' + hex(blkId,2) + '): ' + bytesToHex(value.buffer.slice(1)));
|
||||
}
|
||||
}
|
||||
function getMemo(num) {
|
||||
if(cmdCharacteristic != null) {
|
||||
//addLog("getSensCfg...");
|
||||
flg_memo_act = true;
|
||||
flg_memo_cnt = 0;
|
||||
cmdCharacteristic.writeValue(new Uint8Array([0x35, num&0xff, (num>>8)&0xff])).catch(error => { console.log(error); addLog("getMemo() error!"); });
|
||||
}
|
||||
}
|
||||
|
||||
function SetDevTime() {
|
||||
let time = Date.now()/1000;
|
||||
|
|
@ -1205,8 +1245,10 @@ function SetDevTime() {
|
|||
}
|
||||
|
||||
function GetDevTime() {
|
||||
// addLog("Получить ремя от утройства...");
|
||||
cmdCharacteristic.writeValue(new Uint8Array([0x23])).then(_ => { console.log('Send GetDevTime ok'); });
|
||||
if(cmdCharacteristic != null) {
|
||||
// addLog("Получить ремя от утройства...");
|
||||
cmdCharacteristic.writeValue(new Uint8Array([0x23])).then(_ => { console.log('Send GetDevTime ok'); });
|
||||
}
|
||||
}
|
||||
|
||||
function getDevCfg() {
|
||||
|
|
@ -1423,7 +1465,7 @@ window.onload = function() {
|
|||
</script>
|
||||
<h2>PHY62x2-BTHome <a href="https://github.com/pvvx/THB2"><small>ⓘ</small></a></h2>
|
||||
<label for="inpNamePrefix">Префикс названия устройств(а)</label><br>
|
||||
<input type="text" id="inpNamePrefix" value="" placeholder="THB, BT, TH">
|
||||
<input type="text" id="inpNamePrefix" value="" placeholder="THB, BT">
|
||||
<hr>
|
||||
<label id="lblStatus">Состояние: не подключено</label>
|
||||
<br><br><hr>
|
||||
|
|
@ -1555,6 +1597,7 @@ window.onload = function() {
|
|||
<button type="button" id="btnSendData" onclick="sendData()" disabled="true">Записать</button><hr>
|
||||
<button type="button" id="btnSendCommand" onclick="sendCommand()" disabled="true">Команда</button>
|
||||
<input type="text" id="inpCmdData" value="55" size="40" maxlength="40"><hr>
|
||||
<button type="button" id="btnGetMemo" onclick="getMemo(50)" title="Последние 50 замеров">Тест чтения истории</button>
|
||||
</div>
|
||||
<hr>
|
||||
<button type="button" onclick="clearLog()">Очистить лог</button><br>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue