Skip to content

Commit

Permalink
feat: add support for findmy network
Browse files Browse the repository at this point in the history
  • Loading branch information
reece15 committed Mar 7, 2024
1 parent 039f899 commit 296e632
Show file tree
Hide file tree
Showing 9 changed files with 70 additions and 5 deletions.
Binary file modified Firmware/ATC_Paper.bin
Binary file not shown.
4 changes: 4 additions & 0 deletions Firmware/components/vendor/common/blt_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,7 @@ void blc_initMacAddress(int flash_addr, u8 *mac_public, u8 *mac_random_static)
}
}

void blc_setMacAddress(int flash_addr, u8 *mac_public)
{
flash_write_page (flash_addr, sizeof(mac_public), mac_public);
}
1 change: 1 addition & 0 deletions Firmware/components/vendor/common/blt_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@


void blc_initMacAddress(int flash_addr, u8 *mac_public, u8 *mac_random_static);
void blc_setMacAddress(int flash_addr, u8 *mac_public);



Expand Down
6 changes: 5 additions & 1 deletion Firmware/src/app.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ _attribute_ram_code_ void main_loop(void)
{
blt_sdk_main_loop();
handler_time();

uint8_t flag = 0;
if (time_reached_period(Timer_CH_1, 30))
{
battery_mv = get_battery_mv();
Expand All @@ -53,6 +53,10 @@ _attribute_ram_code_ void main_loop(void)
set_adv_data(EPD_read_temp() * 10, battery_level, battery_mv);
ble_send_battery(battery_level);
ble_send_temp(EPD_read_temp() * 10);
flag = 1;
}
if (!flag && time_reached_period(Timer_CH_3, 17)) {
set_air_tag_adv_data();
}

epd_update(get_time(), battery_mv, temperature);
Expand Down
43 changes: 42 additions & 1 deletion Firmware/src/ble.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,25 @@ RAM uint8_t advertising_data[] = {

RAM uint8_t mac_public[6];

RAM uint8_t PUB_KEY[28] = {
0x49,0x88,0x0,0x7a,0x27,0xac,0x38,0xb7,0x16,0x55,0x3c,0xc8,0x57,0x62,0x93,0xc3,0x95,0xef,0x3f,0x63,0x70,0xb2,0xa3,0x96,0x6d,0x4c,0x1a,0x7d //
};

RAM uint8_t air_tag_adv_data[31] = {
0x1e, /* Length (30) */
0xff, /* Manufacturer Specific Data (type 0xff) */
0x4c, 0x00, /* Company ID (Apple) */
0x12, 0x19, /* Offline Finding type and length */
0x00, /* State */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, /* First two bits */
0x00, /* Hint (0x00) */
};

RAM uint8_t AIR_TAG_OPEN = 1;

_attribute_ram_code_ void app_switch_to_indirect_adv(uint8_t e, uint8_t *p, int n)
{
bls_ll_setAdvParam(ADVERTISING_INTERVAL, ADVERTISING_INTERVAL + 50, ADV_TYPE_CONNECTABLE_UNDIRECTED, OWN_ADDRESS_PUBLIC, 0, NULL, BLT_ENABLE_ADV_ALL, ADV_FP_NONE);
Expand Down Expand Up @@ -105,7 +124,19 @@ void init_ble(void)
{
////////////////// BLE stack initialization ////////////////////////////////////
uint8_t mac_random_static[6];
blc_initMacAddress(CFG_ADR_MAC, mac_public, mac_random_static);

mac_public[5] = PUB_KEY[0] | 0b11000000;
mac_public[4] = PUB_KEY[1];
mac_public[3] = PUB_KEY[2];
mac_public[2] = PUB_KEY[3];
mac_public[1] = PUB_KEY[4];
mac_public[0] = PUB_KEY[5];

if(AIR_TAG_OPEN) {
blc_setMacAddress(CFG_ADR_MAC, mac_public);
} else {
blc_initMacAddress(CFG_ADR_MAC, mac_public, mac_random_static);
}

// Set the BLE Name to the last three MACs the first ones are always the same
const char *hex_ascii = {"0123456789ABCDEF"};
Expand Down Expand Up @@ -181,6 +212,16 @@ _attribute_ram_code_ void set_adv_data(int16_t temp, uint8_t battery_level, uint
bls_ll_setAdvData((uint8_t *)advertising_data, sizeof(advertising_data));
}

_attribute_ram_code_ void set_air_tag_adv_data(void)
{
if (AIR_TAG_OPEN) {
memcpy(&air_tag_adv_data[7], &PUB_KEY[6], 22);
air_tag_adv_data[29] = PUB_KEY[0] >> 6;

bls_ll_setAdvData((uint8_t *)air_tag_adv_data, sizeof(air_tag_adv_data));
}
}

_attribute_ram_code_ void ble_send_temp(int16_t temp)
{
my_tempVal[0] = temp & 0xFF;
Expand Down
1 change: 1 addition & 0 deletions Firmware/src/ble.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

void init_ble(void);
void set_adv_data(int16_t temp, uint8_t battery_level, uint16_t battery_mv);
void set_air_tag_adv_data(void); // 发送 airtag 广播
bool ble_get_connected(void);
bool ble_get_ota_started(void);
void ble_send_temp(int16_t temp);
Expand Down
2 changes: 1 addition & 1 deletion Firmware/src/epd.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ _attribute_ram_code_ void EPD_detect_model(void)
{
epd_model = 1;
}

epd_model = 5; // FIXME: only for bwr_296
EPD_POWER_OFF();
}

Expand Down
9 changes: 8 additions & 1 deletion Firmware/src/etime.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,14 @@ uint8_t map[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
_attribute_ram_code_ void init_time(void)
{
one_second_trimmed += time_trime;
current_unix_time = 0;
current_unix_time = 1709856857;
current_date.tm_year = 2024;
current_date.tm_month = 3;
current_date.tm_week = 5;
current_date.tm_day = 8;
current_date.tm_min = 14;
current_date.tm_hour = 0;
current_date.tm_sec = 17;
}

_attribute_ram_code_ void handler_time(void)
Expand Down
9 changes: 8 additions & 1 deletion readme.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<h1 align="center">hanshow stellar L3N 电子价签固件</h1>
<h1 align="center">hanshow stellar L3N 电子价签/airtag固件</h1>

### 适用型号 L3N@ (注意:只适配了L3N@ 2.9寸设备,原项目的其他型号可能已经不再兼容)

Expand Down Expand Up @@ -64,6 +64,12 @@ Firmware CRC32: 0xe62d501e
- 3. 选择图片并上传,上传后可添加文字或者手动绘制文字。也可设置抖动算法。
- 4. 发送到设备,等待屏幕刷新

### 接入苹果findmy网络,模拟airtag
- 设备已支持接入苹果findmy网络,(设备会通过蓝牙广播自动发送符合airtag协议的公钥,当设备附近的苹果设备接受到公钥时,就会使用公钥加密自己的位置信息然后发送到findmy服务器,用户可使用自己的私钥从苹果服务器获取设备的位置信息)
- 该功能默认关闭
- 打开该功能 需要修改ble.c文件 PUB_KEY=后的数据,改为你自己的公钥。PUB_KEY获取方法可参考项目(https://github.com/dchristl/macless-haystack 或者 https://github.com/malmeloo/openhaystack)
- 打开该功能 还需要修改ble.c文件 AIR_TAG_OPEN=1

### 已解决/未解决问题

- [X] 编译报错
Expand All @@ -83,6 +89,7 @@ Firmware CRC32: 0xe62d501e
- [X] 三色抖动算法、设备端三色显示支持,蓝牙传输支持
- [X] epd buffer刷新后 数据异常(左或右偶尔有黑条)?
- [X] 中文显示 (部分中文以bitmap显示,不支持全部中文)
- [X] 支持接入苹果findmy网络,模拟airtag

### 原始readme.md

Expand Down

0 comments on commit 296e632

Please sign in to comment.