v2.0 beta4
This commit is contained in:
parent
a818721a61
commit
75504b6693
31 changed files with 7802 additions and 7712 deletions
|
|
@ -89,7 +89,7 @@ uint8_t adv_set_data(void * pd) {
|
|||
p->v_id = BtHomeID_voltage;
|
||||
p->battery_mv = measured_data.battery_mv; // x mV
|
||||
#if (DEV_SERVICES & SERVICE_BUTTON)
|
||||
p->u_id = BtHomeID_button;
|
||||
p->u_id = BtHomeID_button; // or BtHomeID_opened ?
|
||||
p->button = measured_data.button;
|
||||
p->c_id = BtHomeID_count32;
|
||||
p->counter = adv_wrk.rds_count;
|
||||
|
|
@ -111,7 +111,7 @@ uint8_t adv_set_event(void * ped) {
|
|||
#elif (DEV_SERVICES & SERVICE_BUTTON)
|
||||
uint8_t adv_set_event(void * ped) {
|
||||
padv_bthome_event1_t p = (padv_bthome_event1_t)ped;
|
||||
p->b_id = BtHomeID_button;
|
||||
p->b_id = BtHomeID_button; // or BtHomeID_opened ?
|
||||
p->button = measured_data.button;
|
||||
p->c_id = BtHomeID_count32;
|
||||
p->counter = adv_wrk.rds_count;
|
||||
|
|
|
|||
|
|
@ -208,16 +208,56 @@ int cmd_parser(uint8_t * obuf, uint8_t * ibuf, uint32_t len) {
|
|||
#endif
|
||||
#if (DEV_SERVICES & SERVICE_FINDMY)
|
||||
} else if (cmd == CMD_ID_FDMKEY) { // Get/set findmy key
|
||||
if (len == sizeof(findmy_key) + 1) {
|
||||
if(memcmp(findmy_key, &ibuf[1], sizeof(findmy_key))) {
|
||||
memcpy(findmy_key, &ibuf[1], sizeof(findmy_key));
|
||||
flash_write_cfg(findmy_key, EEP_ID_FDK, sizeof(findmy_key));
|
||||
if (len == sizeof(findmy_key)/2 + 2) {
|
||||
if(ibuf[1] == 3) {
|
||||
memcpy(findmy_key_new, &ibuf[2], SIZE_FINDMY_KEY/2);
|
||||
memcpy(&obuf[2], findmy_key_new, SIZE_FINDMY_KEY/2);
|
||||
obuf[1] = 3;
|
||||
olen = SIZE_FINDMY_KEY/2 + 2;
|
||||
} else if(ibuf[1] == 4) {
|
||||
memcpy(&findmy_key_new[SIZE_FINDMY_KEY/2], &ibuf[2], SIZE_FINDMY_KEY/2);
|
||||
memcpy(&obuf[2], &findmy_key_new[SIZE_FINDMY_KEY/2], SIZE_FINDMY_KEY/2);
|
||||
if(memcmp(findmy_key, findmy_key_new, SIZE_FINDMY_KEY)) {
|
||||
memcpy(findmy_key, findmy_key_new, SIZE_FINDMY_KEY);
|
||||
flash_write_cfg(findmy_key, EEP_ID_FDK, sizeof(findmy_key));
|
||||
findmy_key_new[0] |= 0xC0;
|
||||
swap_mac(findmy_key_new, findmy_key_new);
|
||||
if(memcmp(ownPublicAddr, findmy_key_new, MAC_LEN)) {
|
||||
memcpy(ownPublicAddr, findmy_key_new, MAC_LEN);
|
||||
flash_write_cfg(ownPublicAddr, EEP_ID_MAC, MAC_LEN);
|
||||
wrk.reboot |= 1;
|
||||
}
|
||||
}
|
||||
obuf[1] = 4;
|
||||
olen = SIZE_FINDMY_KEY/2 + 2;
|
||||
} else {
|
||||
obuf[1] = 0xff;
|
||||
olen = 2;
|
||||
}
|
||||
}
|
||||
if (flash_read_cfg(findmy_key, EEP_ID_FDK, sizeof(findmy_key)) == sizeof(findmy_key)) {
|
||||
memcpy(&obuf[1], findmy_key, sizeof(findmy_key));
|
||||
olen = sizeof(findmy_key) + 1;
|
||||
} else { // No findmy key in EEP!
|
||||
} else if (len == 2) {
|
||||
if(ibuf[1] == 1) {
|
||||
if (flash_read_cfg(findmy_key, EEP_ID_FDK, sizeof(findmy_key)) == sizeof(findmy_key)) {
|
||||
memcpy(&obuf[2], findmy_key, SIZE_FINDMY_KEY/2);
|
||||
obuf[1] = 1;
|
||||
olen = SIZE_FINDMY_KEY/2 + 2;
|
||||
} else { // No findmy key in EEP!
|
||||
obuf[1] = 0xfe;
|
||||
olen = 2;
|
||||
}
|
||||
} else if(ibuf[1] == 2) {
|
||||
if (flash_read_cfg(findmy_key, EEP_ID_FDK, sizeof(findmy_key)) == sizeof(findmy_key)) {
|
||||
memcpy(&obuf[2], &findmy_key[SIZE_FINDMY_KEY/2], SIZE_FINDMY_KEY/2);
|
||||
obuf[1] = 2;
|
||||
olen = SIZE_FINDMY_KEY/2 + 2;
|
||||
} else { // No findmy key in EEP!
|
||||
obuf[1] = 0xfe;
|
||||
olen = 2;
|
||||
}
|
||||
} else {
|
||||
obuf[1] = 0xff;
|
||||
olen = 2;
|
||||
}
|
||||
} else {
|
||||
obuf[1] = 0xff;
|
||||
olen = 2;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,31 +9,53 @@
|
|||
#include "config.h"
|
||||
|
||||
#if (DEV_SERVICES & SERVICE_FINDMY)
|
||||
#include "findmy_beacon.h"
|
||||
#include "sensors.h"
|
||||
|
||||
uint8_t findmy_key[22];
|
||||
uint8_t findmy_key[SIZE_FINDMY_KEY];
|
||||
uint8_t findmy_key_new[SIZE_FINDMY_KEY];
|
||||
|
||||
typedef struct __attribute__((packed)) _adv_bthome_noencrypt_t {
|
||||
uint8_t head[7];
|
||||
uint8_t head[6];
|
||||
uint8_t state;
|
||||
/* State:
|
||||
Bits 0—1: Reserved.
|
||||
Bit 2: Maintained
|
||||
Bits 3—4: Reserved
|
||||
Bits 5: 0b1
|
||||
Bits 6—7: Battery state:
|
||||
0 = Full
|
||||
1 = Medium
|
||||
2 = Low
|
||||
3 = Critically low
|
||||
*/
|
||||
uint8_t key[22];
|
||||
uint8_t end[2];
|
||||
uint8_t key0_bit67;
|
||||
uint8_t end;
|
||||
} adv_findmy_t, * padv_findmy_t;
|
||||
|
||||
static uint8 findmy_head[] = {
|
||||
0x1e, /* Length (30) */
|
||||
0xff, /* Manufacturer Specific Data (type 0xff) */
|
||||
0x4c, 0x00, /* Company ID (Apple) */
|
||||
0x12, 0x19, /* Offline Finding type and length */
|
||||
0x00 /* State */
|
||||
0x12, 0x19 /* Offline Finding type and length */
|
||||
};
|
||||
|
||||
|
||||
|
||||
uint8_t findmy_beacon(void * padbuf) {
|
||||
padv_findmy_t p = (padv_findmy_t)padbuf;
|
||||
memcpy(p->head, findmy_head, sizeof(findmy_head));
|
||||
memcpy(p->key, findmy_key, sizeof(findmy_key));
|
||||
p->end[0] = 0;
|
||||
p->end[1] = 0;
|
||||
memcpy(p->key, &findmy_key[6], sizeof(p->key));
|
||||
p->key0_bit67 = findmy_key[0] >> 6;
|
||||
if(measured_data.battery > 80)
|
||||
p->state = 0 << 6; // Full
|
||||
else if(measured_data.battery > 60)
|
||||
p->state = 1 << 6; // Medium
|
||||
else if(measured_data.battery > 25)
|
||||
p->state = 2 << 6; // Low
|
||||
else
|
||||
p->state = 3 << 6; // Critically low
|
||||
p->end = 0;
|
||||
return sizeof(adv_findmy_t);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,11 @@
|
|||
#ifndef SOURCE_FINDMY_BEACON_H_
|
||||
#define SOURCE_FINDMY_BEACON_H_
|
||||
|
||||
extern uint8_t findmy_key[22];
|
||||
#define SIZE_FINDMY_KEY 28
|
||||
|
||||
extern uint8_t findmy_key[SIZE_FINDMY_KEY];
|
||||
extern uint8_t findmy_key_new[SIZE_FINDMY_KEY];
|
||||
|
||||
uint8_t findmy_beacon(void * padbuf);
|
||||
|
||||
#endif /* SOURCE_FINDMY_BEACON_H_ */
|
||||
|
|
|
|||
|
|
@ -144,6 +144,18 @@ void set_dev_name(void)
|
|||
GGS_SetParameter( GGS_DEVICE_NAME_ATT, p[0] - 1, (void *)&p[2] ); // GAP_DEVICE_NAME_LEN, attDeviceName );
|
||||
}
|
||||
|
||||
void swap_mac(uint8_t * d, uint8_t * s)
|
||||
{
|
||||
uint8_t buf[6];
|
||||
buf[0] = s[5];
|
||||
buf[1] = s[4];
|
||||
buf[2] = s[3];
|
||||
buf[3] = s[2];
|
||||
buf[4] = s[1];
|
||||
buf[5] = s[0];
|
||||
memcpy(d, buf, 6);
|
||||
}
|
||||
|
||||
static void set_mac(void)
|
||||
{
|
||||
//extern uint8_t ownPublicAddr[LL_DEVICE_ADDR_LEN];
|
||||
|
|
@ -153,17 +165,10 @@ static void set_mac(void)
|
|||
// Tuya mac[0:3]
|
||||
ownPublicAddr[3] = 0x8d;
|
||||
ownPublicAddr[4] = 0x1f;
|
||||
#if (DEV_SERVICES & SERVICE_FINDMY)
|
||||
ownPublicAddr[5] = 0xf8; // random mac
|
||||
#else
|
||||
ownPublicAddr[5] = 0x38;
|
||||
#endif
|
||||
}
|
||||
flash_write_cfg(ownPublicAddr, EEP_ID_MAC, MAC_LEN);
|
||||
}
|
||||
#if (DEV_SERVICES & SERVICE_FINDMY)
|
||||
ownPublicAddr[5] |= 0xc0; // random mac
|
||||
#endif
|
||||
pGlobal_config[MAC_ADDRESS_LOC] = (uint32_t)ownPublicAddr;
|
||||
// device name
|
||||
set_dev_name();
|
||||
|
|
|
|||
|
|
@ -91,6 +91,8 @@ void SimpleBLEPeripheral_Init( uint8_t task_id );
|
|||
|
||||
uint16_t BLEPeripheral_ProcessEvent( uint8_t task_id, uint16_t events );
|
||||
|
||||
void swap_mac(uint8_t * d, uint8_t * s);
|
||||
|
||||
void set_def_name(void);
|
||||
|
||||
void set_dev_name(void);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue