Compare commits

..

2 Commits

3 changed files with 361 additions and 329 deletions

View File

@ -268,13 +268,14 @@ int battery_get_percent(){
return batt_percent; return batt_percent;
} }
//AT+BAT_CALIBRTATION //AT+BAT_CALIBRTATION
int battery_calibration(){ int battery_calibration(int calibration_value){
bk_err_t ret = prvStartBatteryAdcOneTime(); bk_err_t ret = prvStartBatteryAdcOneTime();
if (ret == BK_OK) if (ret == BK_OK)
{ {
bk_printf("BAT_CALIBRTATION calibration_value: %d \r\n", calibration_value);
ret = 1; ret = 1;
bat_offset = 3980-vol; bat_offset = calibration_value-vol;
bk_config_write("bat_offset", (void *)&bat_offset, 4); bk_config_write("bat_offset", (void *)&bat_offset, 4);
bk_config_sync_flash_safely(); bk_config_sync_flash_safely();

View File

@ -25,7 +25,7 @@ void init_bat_timer();
void poweron_voice(); void poweron_voice();
void poweroff_voice(); void poweroff_voice();
int battery_calibration(); int battery_calibration(int calibration_value);
/** /**
* *
*/ */

View File

@ -20,7 +20,7 @@
#include "wifi_boarding_internal.h" #include "wifi_boarding_internal.h"
#include "wifi_boarding_utils.h" #include "wifi_boarding_utils.h"
//helloyifa // helloyifa
#include "bk_genie_smart_config.h" #include "bk_genie_smart_config.h"
#include "../iot/iot_sleep_helper.h" #include "../iot/iot_sleep_helper.h"
#include "../iot/iot_lamp.h" #include "../iot/iot_lamp.h"
@ -38,69 +38,79 @@ static bk_gatt_if_t s_gatts_if = 0;
#define SYNC_CMD_TIMEOUT_MS 4000 #define SYNC_CMD_TIMEOUT_MS 4000
#define ADV_HANDLE 0 #define ADV_HANDLE 0
#define BK_GATT_ATTR_TYPE(iuuid) \
#define BK_GATT_ATTR_TYPE(iuuid) {.len = BK_UUID_LEN_16, .uuid = {.uuid16 = iuuid}} { \
#define BK_GATT_ATTR_CONTENT(iuuid) {.len = BK_UUID_LEN_16, .uuid = {.uuid16 = iuuid}} .len = BK_UUID_LEN_16, .uuid = {.uuid16 = iuuid } \
}
#define BK_GATT_ATTR_CONTENT(iuuid) \
{ \
.len = BK_UUID_LEN_16, .uuid = {.uuid16 = iuuid } \
}
#define BK_GATT_ATTR_VALUE(ilen, ivalue) {.attr_max_len = ilen, .attr_len = ilen, .attr_value = ivalue} #define BK_GATT_ATTR_VALUE(ilen, ivalue) {.attr_max_len = ilen, .attr_len = ilen, .attr_value = ivalue}
#define BK_GATT_ATTR_TYPE_128(iuuid) {.len = BK_UUID_LEN_128, .uuid = {.uuid128 = {iuuid[0], iuuid[1], iuuid[2], iuuid[3], iuuid[4], \ #define BK_GATT_ATTR_TYPE_128(iuuid) \
iuuid[5], iuuid[6], iuuid[7], iuuid[8], iuuid[9], iuuid[10], iuuid[11], iuuid[12], iuuid[13], iuuid[14], iuuid[15]}}} { \
.len = BK_UUID_LEN_128, .uuid = {.uuid128 = {iuuid[0], iuuid[1], iuuid[2], iuuid[3], iuuid[4], \
iuuid[5], iuuid[6], iuuid[7], iuuid[8], iuuid[9], iuuid[10], iuuid[11], iuuid[12], iuuid[13], iuuid[14], iuuid[15]} } \
}
#define BK_GATT_ATTR_CONTENT_128(iuuid) {.len = BK_UUID_LEN_128, .uuid = {.uuid128 = {iuuid[0], iuuid[1], iuuid[2], iuuid[3], iuuid[4], \ #define BK_GATT_ATTR_CONTENT_128(iuuid) \
iuuid[5], iuuid[6], iuuid[7], iuuid[8], iuuid[9], iuuid[10], iuuid[11], iuuid[12], iuuid[13], iuuid[14], iuuid[15]}}} { \
.len = BK_UUID_LEN_128, .uuid = {.uuid128 = {iuuid[0], iuuid[1], iuuid[2], iuuid[3], iuuid[4], \
iuuid[5], iuuid[6], iuuid[7], iuuid[8], iuuid[9], iuuid[10], iuuid[11], iuuid[12], iuuid[13], iuuid[14], iuuid[15]} } \
}
#define BK_GATT_PRIMARY_SERVICE_DECL(iuuid) \ #define BK_GATT_PRIMARY_SERVICE_DECL(iuuid) \
.att_desc =\ .att_desc = \
{\ { \
.attr_type = BK_GATT_ATTR_TYPE(BK_GATT_UUID_PRI_SERVICE),\ .attr_type = BK_GATT_ATTR_TYPE(BK_GATT_UUID_PRI_SERVICE), \
.attr_content = BK_GATT_ATTR_CONTENT(iuuid),\ .attr_content = BK_GATT_ATTR_CONTENT(iuuid), \
} }
#define BK_GATT_PRIMARY_SERVICE_DECL_128(iuuid) \ #define BK_GATT_PRIMARY_SERVICE_DECL_128(iuuid) \
.att_desc =\ .att_desc = \
{\ { \
.attr_type = BK_GATT_ATTR_TYPE(BK_GATT_UUID_PRI_SERVICE),\ .attr_type = BK_GATT_ATTR_TYPE(BK_GATT_UUID_PRI_SERVICE), \
.attr_content = BK_GATT_ATTR_CONTENT_128(iuuid)\ .attr_content = BK_GATT_ATTR_CONTENT_128(iuuid)}
}
#define BK_GATT_CHAR_DECL(iuuid, ilen, ivalue, iprop, iperm, irsp) \ #define BK_GATT_CHAR_DECL(iuuid, ilen, ivalue, iprop, iperm, irsp) \
.att_desc = \ .att_desc = \
{\ { \
.attr_type = BK_GATT_ATTR_TYPE(BK_GATT_UUID_CHAR_DECLARE),\ .attr_type = BK_GATT_ATTR_TYPE(BK_GATT_UUID_CHAR_DECLARE), \
.attr_content = BK_GATT_ATTR_CONTENT(iuuid),\ .attr_content = BK_GATT_ATTR_CONTENT(iuuid), \
.value = BK_GATT_ATTR_VALUE(ilen, ivalue),\ .value = BK_GATT_ATTR_VALUE(ilen, ivalue), \
.prop = iprop,\ .prop = iprop, \
.perm = iperm,\ .perm = iperm, \
},\ }, \
.attr_control = {.auto_rsp = irsp} .attr_control = {.auto_rsp = irsp}
#define BK_GATT_CHAR_DECL_128(iuuid, ilen, ivalue, iprop, iperm, irsp) \ #define BK_GATT_CHAR_DECL_128(iuuid, ilen, ivalue, iprop, iperm, irsp) \
.att_desc = \ .att_desc = \
{\ { \
.attr_type = BK_GATT_ATTR_TYPE(BK_GATT_UUID_CHAR_DECLARE),\ .attr_type = BK_GATT_ATTR_TYPE(BK_GATT_UUID_CHAR_DECLARE), \
.attr_content = BK_GATT_ATTR_CONTENT_128(iuuid),\ .attr_content = BK_GATT_ATTR_CONTENT_128(iuuid), \
.value = BK_GATT_ATTR_VALUE(ilen, ivalue),\ .value = BK_GATT_ATTR_VALUE(ilen, ivalue), \
.prop = iprop,\ .prop = iprop, \
.perm = iperm,\ .perm = iperm, \
},\ }, \
.attr_control = {.auto_rsp = irsp} .attr_control = {.auto_rsp = irsp}
#define BK_GATT_CHAR_DESC_DECL(iuuid, ilen, ivalue, iperm, irsp) \ #define BK_GATT_CHAR_DESC_DECL(iuuid, ilen, ivalue, iperm, irsp) \
.att_desc = \ .att_desc = \
{\ { \
.attr_type = BK_GATT_ATTR_TYPE(iuuid),\ .attr_type = BK_GATT_ATTR_TYPE(iuuid), \
.value = BK_GATT_ATTR_VALUE(ilen, ivalue),\ .value = BK_GATT_ATTR_VALUE(ilen, ivalue), \
.perm = iperm,\ .perm = iperm, \
},\ }, \
.attr_control = {.auto_rsp = irsp} .attr_control = {.auto_rsp = irsp}
#define BK_GATT_CHAR_DESC_DECL_128(iuuid, ilen, ivalue, iperm, irsp) \ #define BK_GATT_CHAR_DESC_DECL_128(iuuid, ilen, ivalue, iperm, irsp) \
.att_desc = \ .att_desc = \
{\ { \
.attr_type = BK_GATT_ATTR_TYPE_128(iuuid),\ .attr_type = BK_GATT_ATTR_TYPE_128(iuuid), \
.value = BK_GATT_ATTR_VALUE(ilen, ivalue),\ .value = BK_GATT_ATTR_VALUE(ilen, ivalue), \
.perm = iperm,\ .perm = iperm, \
},\ }, \
.attr_control = {.auto_rsp = irsp} .attr_control = {.auto_rsp = irsp}
#define INVALID_ATTR_HANDLE 0 #define INVALID_ATTR_HANDLE 0
@ -111,9 +121,8 @@ static uint8_t s_password[64];
static uint8_t s_cmd[64]; static uint8_t s_cmd[64];
static uint16_t s_conn_ind = ~0; static uint16_t s_conn_ind = ~0;
static const bk_gatts_attr_db_t s_gatts_attr_db_service_boarding[] = static const bk_gatts_attr_db_t s_gatts_attr_db_service_boarding[] =
{ {
{ {
BK_GATT_PRIMARY_SERVICE_DECL(0xfa00), BK_GATT_PRIMARY_SERVICE_DECL(0xfa00),
}, },
@ -132,7 +141,7 @@ static const bk_gatts_attr_db_t s_gatts_attr_db_service_boarding[] =
BK_GATT_RSP_BY_APP), BK_GATT_RSP_BY_APP),
}, },
//operation // operation
{ {
BK_GATT_CHAR_DECL(0xea02, BK_GATT_CHAR_DECL(0xea02,
0, NULL, 0, NULL,
@ -141,7 +150,7 @@ static const bk_gatts_attr_db_t s_gatts_attr_db_service_boarding[] =
BK_GATT_RSP_BY_APP), BK_GATT_RSP_BY_APP),
}, },
//ssid // ssid
{ {
BK_GATT_CHAR_DECL(0xea05, BK_GATT_CHAR_DECL(0xea05,
sizeof(s_password), (uint8_t *)s_password, sizeof(s_password), (uint8_t *)s_password,
@ -150,7 +159,7 @@ static const bk_gatts_attr_db_t s_gatts_attr_db_service_boarding[] =
BK_GATT_AUTO_RSP), BK_GATT_AUTO_RSP),
}, },
//password // password
{ {
BK_GATT_CHAR_DECL(0xea06, BK_GATT_CHAR_DECL(0xea06,
sizeof(s_ssid), (uint8_t *)s_ssid, sizeof(s_ssid), (uint8_t *)s_ssid,
@ -158,8 +167,8 @@ static const bk_gatts_attr_db_t s_gatts_attr_db_service_boarding[] =
BK_GATT_PERM_READ | BK_GATT_PERM_WRITE, BK_GATT_PERM_READ | BK_GATT_PERM_WRITE,
BK_GATT_AUTO_RSP), BK_GATT_AUTO_RSP),
}, },
//helloyifa // helloyifa
//cmd // cmd
{ {
BK_GATT_CHAR_DECL(0xea03, BK_GATT_CHAR_DECL(0xea03,
sizeof(s_cmd), (uint8_t *)s_cmd, sizeof(s_cmd), (uint8_t *)s_cmd,
@ -176,66 +185,71 @@ static uint16_t s_char_desc_attr_handle = INVALID_ATTR_HANDLE;
static uint16_t s_char_operation_char_handle = INVALID_ATTR_HANDLE; static uint16_t s_char_operation_char_handle = INVALID_ATTR_HANDLE;
static uint16_t s_char_ssid_char_handle = INVALID_ATTR_HANDLE; static uint16_t s_char_ssid_char_handle = INVALID_ATTR_HANDLE;
static uint16_t s_char_password_char_handle = INVALID_ATTR_HANDLE; static uint16_t s_char_password_char_handle = INVALID_ATTR_HANDLE;
//helloyfia // helloyfia
static uint16_t s_char_cmd_char_handle = INVALID_ATTR_HANDLE; static uint16_t s_char_cmd_char_handle = INVALID_ATTR_HANDLE;
static uint16_t *const s_boarding_attr_handle_list[sizeof(s_gatts_attr_db_service_boarding) / sizeof(s_gatts_attr_db_service_boarding[0])] = static uint16_t *const s_boarding_attr_handle_list[sizeof(s_gatts_attr_db_service_boarding) / sizeof(s_gatts_attr_db_service_boarding[0])] =
{ {
&s_service_attr_handle, &s_service_attr_handle,
&s_char_attr_handle, &s_char_attr_handle,
&s_char_desc_attr_handle, &s_char_desc_attr_handle,
&s_char_operation_char_handle, &s_char_operation_char_handle,
&s_char_ssid_char_handle, &s_char_ssid_char_handle,
&s_char_password_char_handle, &s_char_password_char_handle,
//helloyifa // helloyifa
&s_char_cmd_char_handle, &s_char_cmd_char_handle,
}; };
static boarding_state m_state = BOARDING_STATE_IDLE; static boarding_state m_state = BOARDING_STATE_IDLE;
int ble_notify_boarding_state(boarding_state state){ int ble_notify_boarding_state(boarding_state state)
if(m_state == state){ {
if (m_state == state)
{
return 0; return 0;
} }
//在没有配置wifi情况下不发送状态AP_NOFOUND PASSWORD_ERROR // 在没有配置wifi情况下不发送状态AP_NOFOUND PASSWORD_ERROR
if(state== BOARDING_STATE_AP_NOFOUND && m_state != BOARDING_STATE_SETWIFI){ if (state == BOARDING_STATE_AP_NOFOUND && m_state != BOARDING_STATE_SETWIFI)
{
return 0; return 0;
} }
if(state== BOARDING_STATE_PASSWORD_ERROR && m_state != BOARDING_STATE_SETWIFI){ if (state == BOARDING_STATE_PASSWORD_ERROR && m_state != BOARDING_STATE_SETWIFI)
{
return 0; return 0;
} }
m_state = state; m_state = state;
uint8_t str_respone [32] = {0}; uint8_t str_respone[32] = {0};
memset(str_respone,0,sizeof(str_respone)); memset(str_respone, 0, sizeof(str_respone));
switch (state) switch (state)
{ {
case BOARDING_STATE_IDLE: case BOARDING_STATE_IDLE:
strcat((char*)&str_respone,"AT+STATE=0"); strcat((char *)&str_respone, "AT+STATE=0");
break; break;
case BOARDING_STATE_SCAN: case BOARDING_STATE_SCAN:
strcat((char*)&str_respone,"AT+STATE=1"); strcat((char *)&str_respone, "AT+STATE=1");
break; break;
case BOARDING_STATE_SETWIFI: case BOARDING_STATE_SETWIFI:
strcat((char*)&str_respone,"AT+STATE=2"); strcat((char *)&str_respone, "AT+STATE=2");
break; break;
case BOARDING_STATE_DONE: case BOARDING_STATE_DONE:
strcat((char*)&str_respone,"AT+STATE=3"); strcat((char *)&str_respone, "AT+STATE=3");
break; break;
case BOARDING_STATE_PASSWORD_ERROR: case BOARDING_STATE_PASSWORD_ERROR:
strcat((char*)&str_respone,"AT+STATE=6"); strcat((char *)&str_respone, "AT+STATE=6");
break; break;
case BOARDING_STATE_AP_NOFOUND: case BOARDING_STATE_AP_NOFOUND:
strcat((char*)&str_respone,"AT+STATE=7"); strcat((char *)&str_respone, "AT+STATE=7");
break; break;
default: default:
break; break;
} }
if(strlen((char*)&str_respone) > 0){ if (strlen((char *)&str_respone) > 0)
os_printf("notify:%s\r\n",str_respone); {
os_printf("notify:%s\r\n", str_respone);
wifi_boarding_notify(str_respone, strlen((char*)&str_respone)); wifi_boarding_notify(str_respone, strlen((char *)&str_respone));
//uint8_t con_idx = s_conn_ind; // uint8_t con_idx = s_conn_ind;
//bk_ble_send_noti_value(con_idx, strlen((char*)&str_respone), str_respone, PRF_TASK_ID_BOARDING, BOARDING_IDX_CHAR_VALUE); // bk_ble_send_noti_value(con_idx, strlen((char*)&str_respone), str_respone, PRF_TASK_ID_BOARDING, BOARDING_IDX_CHAR_VALUE);
} }
return 0; return 0;
} }
@ -458,53 +472,57 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
wboard_logi("password: %s", s_ble_boarding_info->password_value); wboard_logi("password: %s", s_ble_boarding_info->password_value);
} }
// <20>ص<EFBFBD>
//<2F>ص<EFBFBD>
if (s_ble_boarding_info && s_ble_boarding_info->set_wifi_cb) if (s_ble_boarding_info && s_ble_boarding_info->set_wifi_cb)
{ {
//helloyifa // helloyifa
be_set_smart_config_running(); be_set_smart_config_running();
s_ble_boarding_info->set_wifi_cb(s_ble_boarding_info->ssid_value,s_ble_boarding_info->ssid_length,s_ble_boarding_info->password_value,s_ble_boarding_info->password_length); s_ble_boarding_info->set_wifi_cb(s_ble_boarding_info->ssid_value, s_ble_boarding_info->ssid_length, s_ble_boarding_info->password_value, s_ble_boarding_info->password_length);
} }
} }
//helloyifa // helloyifa
else if (s_char_cmd_char_handle == param->handle) else if (s_char_cmd_char_handle == param->handle)
{ {
bk_ble_gatts_get_attr_value(param->handle, &buff_size, &tmp_buff); bk_ble_gatts_get_attr_value(param->handle, &buff_size, &tmp_buff);
if(param->len ==0 || param->value == NULL) return ret; if (param->len == 0 || param->value == NULL)
uint8_t recv [param->len+1]; return ret;
os_memset(recv,0,sizeof(recv)); uint8_t recv[param->len + 1];
os_memset(recv, 0, sizeof(recv));
os_memcpy((uint8_t *)recv, param->value, param->len); os_memcpy((uint8_t *)recv, param->value, param->len);
wboard_loge("recv: %s", recv); wboard_loge("recv: %s", recv);
char* ptr; char *ptr;
if (NULL != (ptr = strstr((char *)recv, "AT+SSID"))){ if (NULL != (ptr = strstr((char *)recv, "AT+SSID")))
{
wboard_loge("start scan wifi!!"); wboard_loge("start scan wifi!!");
//<EFBFBD>ص<EFBFBD> // <EFBFBD>ص<EFBFBD>
if (s_ble_boarding_info && s_ble_boarding_info->scan_wifi_cb) if (s_ble_boarding_info && s_ble_boarding_info->scan_wifi_cb)
{ {
s_ble_boarding_info->scan_wifi_cb(); s_ble_boarding_info->scan_wifi_cb();
} }
} }
if (NULL != (ptr = strstr((char *)recv, "AT+SCAN"))){ if (NULL != (ptr = strstr((char *)recv, "AT+SCAN")))
{
wboard_loge("start scan wifi!!"); wboard_loge("start scan wifi!!");
//<EFBFBD>ص<EFBFBD> // <EFBFBD>ص<EFBFBD>
if (s_ble_boarding_info && s_ble_boarding_info->scan_wifi_cb) if (s_ble_boarding_info && s_ble_boarding_info->scan_wifi_cb)
{ {
s_ble_boarding_info->scan_wifi_cb(); s_ble_boarding_info->scan_wifi_cb();
} }
} }
if (NULL != (ptr = strstr((char *)recv, "AT+WIFI"))){ if (NULL != (ptr = strstr((char *)recv, "AT+WIFI")))
{
wboard_loge("recv wifi info!!"); wboard_loge("recv wifi info!!");
char m_ssid[64] = {0}; char m_ssid[64] = {0};
char m_pwd [64] = {0}; char m_pwd[64] = {0};
memset(m_ssid,0,sizeof(m_ssid)); memset(m_ssid, 0, sizeof(m_ssid));
memset(m_pwd,0,sizeof(m_pwd)); memset(m_pwd, 0, sizeof(m_pwd));
sscanf((char *)recv,"AT+WIFI=%[^,],%[^,]", m_ssid,m_pwd); sscanf((char *)recv, "AT+WIFI=%[^,],%[^,]", m_ssid, m_pwd);
wboard_loge("%s %s ",m_ssid,m_pwd); wboard_loge("%s %s ", m_ssid, m_pwd);
//<2F><><EFBFBD><EFBFBD>SSID // <20><><EFBFBD><EFBFBD>SSID
if(strlen(m_ssid) > 0){ if (strlen(m_ssid) > 0)
{
if (s_ble_boarding_info->ssid_value) if (s_ble_boarding_info->ssid_value)
{ {
os_free(s_ble_boarding_info->ssid_value); os_free(s_ble_boarding_info->ssid_value);
@ -512,10 +530,10 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
s_ble_boarding_info->ssid_length = 0; s_ble_boarding_info->ssid_length = 0;
} }
s_ble_boarding_info->ssid_length =strlen(m_ssid); s_ble_boarding_info->ssid_length = strlen(m_ssid);
s_ble_boarding_info->ssid_value = os_malloc(strlen(m_ssid)+1); s_ble_boarding_info->ssid_value = os_malloc(strlen(m_ssid) + 1);
os_memset(s_ble_boarding_info->ssid_value, 0, strlen(m_ssid)+1); os_memset(s_ble_boarding_info->ssid_value, 0, strlen(m_ssid) + 1);
os_memcpy((uint8_t *)s_ble_boarding_info->ssid_value, m_ssid, strlen(m_ssid)); os_memcpy((uint8_t *)s_ble_boarding_info->ssid_value, m_ssid, strlen(m_ssid));
wboard_loge("ssid: %s", s_ble_boarding_info->ssid_value); wboard_loge("ssid: %s", s_ble_boarding_info->ssid_value);
} }
@ -527,10 +545,13 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
s_ble_boarding_info->password_length = 0; s_ble_boarding_info->password_length = 0;
} }
if(strlen(m_pwd) > 0){ if (strlen(m_pwd) > 0)
s_ble_boarding_info->password_length = 0 ; {
s_ble_boarding_info->password_length = 0;
s_ble_boarding_info->password_value = ""; s_ble_boarding_info->password_value = "";
}else{ }
else
{
s_ble_boarding_info->password_length = strlen(m_pwd); s_ble_boarding_info->password_length = strlen(m_pwd);
s_ble_boarding_info->password_value = os_malloc(strlen(m_pwd) + 1); s_ble_boarding_info->password_value = os_malloc(strlen(m_pwd) + 1);
@ -539,17 +560,16 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
wboard_loge("password: %s", s_ble_boarding_info->password_value); wboard_loge("password: %s", s_ble_boarding_info->password_value);
} }
//<EFBFBD>ص<EFBFBD> // <EFBFBD>ص<EFBFBD>
if (s_ble_boarding_info && s_ble_boarding_info->set_wifi_cb) if (s_ble_boarding_info && s_ble_boarding_info->set_wifi_cb)
{ {
//(char* ssid, int ssid_len ,char* password,int password_len); //(char* ssid, int ssid_len ,char* password,int password_len);
//helloyifa // helloyifa
be_set_smart_config_running(); be_set_smart_config_running();
wboard_loge("^^^be_set_smart_config_running!!"); wboard_loge("^^^be_set_smart_config_running!!");
s_ble_boarding_info->set_wifi_cb(m_ssid,strlen(m_ssid),m_pwd,strlen(m_pwd)); s_ble_boarding_info->set_wifi_cb(m_ssid, strlen(m_ssid), m_pwd, strlen(m_pwd));
} }
} }
/** /**
* 7. * 7.
@ -580,7 +600,6 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
sprintf((char *)str_respone, "%s", "AT+VOLUME=OK"); sprintf((char *)str_respone, "%s", "AT+VOLUME=OK");
wifi_boarding_notify(str_respone, strlen((char *)&str_respone)); wifi_boarding_notify(str_respone, strlen((char *)&str_respone));
} }
} }
/** /**
* *
@ -631,9 +650,12 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
else else
{ {
int open = atoi(enable); int open = atoi(enable);
if(open){ if (open)
{
ws2812_open(); ws2812_open();
}else{ }
else
{
ws2812_close(); ws2812_close();
} }
sprintf((char *)str_respone, "%s", "AT+BRIGHT_EN=OK"); sprintf((char *)str_respone, "%s", "AT+BRIGHT_EN=OK");
@ -661,9 +683,12 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
else else
{ {
int open = atoi(enable); int open = atoi(enable);
if(open){ if (open)
{
sleep_helper_open(); sleep_helper_open();
}else{ }
else
{
sleep_helper_close(); sleep_helper_close();
} }
sprintf((char *)str_respone, "%s", "AT+SLEEP_EN=OK"); sprintf((char *)str_respone, "%s", "AT+SLEEP_EN=OK");
@ -690,7 +715,8 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
else else
{ {
int v = atoi(mode); int v = atoi(mode);
switch(v){ switch (v)
{
case 1: case 1:
sleep_helper_set_mode(SLEEP_MODE_1); sleep_helper_set_mode(SLEEP_MODE_1);
break; break;
@ -706,7 +732,8 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
wifi_boarding_notify(str_respone, strlen((char *)&str_respone)); wifi_boarding_notify(str_respone, strlen((char *)&str_respone));
} }
else if(NULL != (ptr = strstr((char *)recv, "AT+RESET"))){ else if (NULL != (ptr = strstr((char *)recv, "AT+RESET")))
{
extern int demo_erase_network_auto_reconnect_info(); extern int demo_erase_network_auto_reconnect_info();
demo_erase_network_auto_reconnect_info(); demo_erase_network_auto_reconnect_info();
} }
@ -737,7 +764,6 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
sprintf((char *)str_respone, "%s", "AT+SLEEP_TIMEOUT=OK"); sprintf((char *)str_respone, "%s", "AT+SLEEP_TIMEOUT=OK");
wifi_boarding_notify(str_respone, strlen((char *)&str_respone)); wifi_boarding_notify(str_respone, strlen((char *)&str_respone));
} }
} }
else if (NULL != (ptr = strstr((char *)recv, "AT+BRIGHT_TIMEOUT="))) else if (NULL != (ptr = strstr((char *)recv, "AT+BRIGHT_TIMEOUT=")))
{ {
@ -760,7 +786,6 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
sprintf((char *)str_respone, "%s", "AT+BRIGHT_TIMEOUT=OK"); sprintf((char *)str_respone, "%s", "AT+BRIGHT_TIMEOUT=OK");
wifi_boarding_notify(str_respone, strlen((char *)&str_respone)); wifi_boarding_notify(str_respone, strlen((char *)&str_respone));
} }
} }
/* /*
*11. *11.
@ -800,7 +825,6 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
sprintf((char *)str_respone, "AT+VERSION=%s", APPLICATION_VERSION); sprintf((char *)str_respone, "AT+VERSION=%s", APPLICATION_VERSION);
wifi_boarding_notify(str_respone, strlen((char *)&str_respone)); wifi_boarding_notify(str_respone, strlen((char *)&str_respone));
} }
else if (NULL != (ptr = strstr((char *)recv, "AT+SETAIURL"))) else if (NULL != (ptr = strstr((char *)recv, "AT+SETAIURL")))
@ -817,13 +841,12 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
} }
else else
{ {
wboard_loge("AI_URL:%s",ota_url); wboard_loge("AI_URL:%s", ota_url);
//int v = atoi(level); // int v = atoi(level);
//sleep_helper_set_level(v); // sleep_helper_set_level(v);
sprintf((char *)str_respone, "%s", "AT+SETAIURL=OK"); sprintf((char *)str_respone, "%s", "AT+SETAIURL=OK");
} }
wifi_boarding_notify(str_respone, strlen((char *)&str_respone)); wifi_boarding_notify(str_respone, strlen((char *)&str_respone));
} }
/** /**
* APP * APP
@ -834,8 +857,6 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
ws2812_led_start_ota(); ws2812_led_start_ota();
rtos_delay_milliseconds(10000); rtos_delay_milliseconds(10000);
ws2812_led_stop_ota(); ws2812_led_stop_ota();
} }
/** /**
* APP * APP
@ -844,20 +865,34 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
{ {
wboard_loge("AT+BAT_CALIBRTATION!!"); wboard_loge("AT+BAT_CALIBRTATION!!");
int ret = battery_calibration(); int value = 0;
char *eq_pos = strchr(ptr, '='); // 查找等号位置
if (eq_pos != NULL)
{
// 从等号后解析整数
if (sscanf(eq_pos + 1, "%d", &value) == 1)
{
wboard_loge("AT+BAT_CALIBRTATION: %d", value);
int ret = battery_calibration(value);
bk_printf("AT+BAT_CALIBRTATION ret: %d\r\n", ret); bk_printf("AT+BAT_CALIBRTATION ret: %d\r\n", ret);
uint8_t str_respone[32] = {0}; uint8_t str_respone[32] = {0};
memset(str_respone, 0, sizeof(str_respone)); memset(str_respone, 0, sizeof(str_respone));
if(ret == 1){ if (ret == 1)
{
sprintf((char *)str_respone, "%s", "AT+BAT_CALIBRTATION=OK"); sprintf((char *)str_respone, "%s", "AT+BAT_CALIBRTATION=OK");
}else{ }
else
{
sprintf((char *)str_respone, "%s", "AT+BAT_CALIBRTATION=FAIL"); sprintf((char *)str_respone, "%s", "AT+BAT_CALIBRTATION=FAIL");
} }
wifi_boarding_notify(str_respone, strlen((char *)&str_respone)); wifi_boarding_notify(str_respone, strlen((char *)&str_respone));
} }
}
}
/** /**
* 12. * 12.
: AT+STATE= : AT+STATE=
@ -885,10 +920,11 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
os_printf("get sta link status fail!\n"); os_printf("get sta link status fail!\n");
} }
int connect_state = 0; int connect_state = 0;
if(link_status.state == WIFI_LINKSTATE_STA_GOT_IP){ if (link_status.state == WIFI_LINKSTATE_STA_GOT_IP)
{
connect_state = 1; connect_state = 1;
} }
os_printf("link_status.state:%d\n",link_status.state); os_printf("link_status.state:%d\n", link_status.state);
int device_volme = speaker_volume_get_current(); int device_volme = speaker_volume_get_current();
int device_bright = lamp_get_bright(); int device_bright = lamp_get_bright();
int sleep_mode = sleep_helper_get_mode(); int sleep_mode = sleep_helper_get_mode();
@ -897,7 +933,7 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
int battery_p = battery_get_percent(); int battery_p = battery_get_percent();
int bright_close_timeout = ws2812_get_work_timeout(); int bright_close_timeout = ws2812_get_work_timeout();
int bright_open = ws2812_is_bright(); int bright_open = ws2812_is_bright();
sprintf((char *)str_respone, "AT+STATE=%d,%d,%d,%d,%d,%d,%d,%d,%d", connect_state,device_volme,device_bright,sleep_mode,sleep_level,sleep_work_time,battery_p,bright_close_timeout,bright_open); sprintf((char *)str_respone, "AT+STATE=%d,%d,%d,%d,%d,%d,%d,%d,%d", connect_state, device_volme, device_bright, sleep_mode, sleep_level, sleep_work_time, battery_p, bright_close_timeout, bright_open);
wifi_boarding_notify(str_respone, strlen((char *)&str_respone)); wifi_boarding_notify(str_respone, strlen((char *)&str_respone));
} }
@ -934,14 +970,17 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
{ {
wboard_loge("OTA-->%s", ota_url); wboard_loge("OTA-->%s", ota_url);
wboard_loge("OTA--len >%d", strlen(ota_url)); wboard_loge("OTA--len >%d", strlen(ota_url));
//ws2812_led_start_ota(); // ws2812_led_start_ota();
//lamp_http_ota_start(ota_url); // lamp_http_ota_start(ota_url);
//电量低于25 不允许执行OTA // 电量低于25 不允许执行OTA
int battery = battery_get_percent(); int battery = battery_get_percent();
if(battery > 25){ if (battery > 25)
//iot_lamp_check_ota(); {
// iot_lamp_check_ota();
lamp_http_ota_start(ota_url); lamp_http_ota_start(ota_url);
}else{ }
else
{
app_event_send_msg(APP_EVT_LOW_VOLTAGE, 0); app_event_send_msg(APP_EVT_LOW_VOLTAGE, 0);
} }
free(ota_url); free(ota_url);
@ -955,22 +994,24 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
{ {
uint8_t str_respone[32] = {0}; uint8_t str_respone[32] = {0};
memset(str_respone, 0, sizeof(str_respone)); memset(str_respone, 0, sizeof(str_respone));
//电量低于25 不允许执行OTA // 电量低于25 不允许执行OTA
int battery = battery_get_percent(); int battery = battery_get_percent();
if(battery > 25){ if (battery > 25)
{
sprintf((char *)str_respone, "%s", "AT+CHECKOTA=1"); sprintf((char *)str_respone, "%s", "AT+CHECKOTA=1");
iot_lamp_check_ota(); iot_lamp_check_ota();
}else{ }
else
{
app_event_send_msg(APP_EVT_LOW_VOLTAGE, 0); app_event_send_msg(APP_EVT_LOW_VOLTAGE, 0);
sprintf((char *)str_respone, "%s", "AT+CHECKOTA=2"); sprintf((char *)str_respone, "%s", "AT+CHECKOTA=2");
} }
wifi_boarding_notify(str_respone, strlen((char *)&str_respone)); wifi_boarding_notify(str_respone, strlen((char *)&str_respone));
//wifi_boarding_notify(param->value,param->len); // wifi_boarding_notify(param->value,param->len);
} }
//wifi_boarding_notify(param->value,param->len); // wifi_boarding_notify(param->value,param->len);
} }
else else
{ {
wboard_loge("invalid write handle %d", param->handle); wboard_loge("invalid write handle %d", param->handle);
@ -1043,8 +1084,6 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
wifi_boarding_notify(test_data, sizeof(test_data)); wifi_boarding_notify(test_data, sizeof(test_data));
#endif #endif
} }
} }
break; break;
@ -1115,14 +1154,13 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
param->remote_bda[2], param->remote_bda[2],
param->remote_bda[1], param->remote_bda[1],
param->remote_bda[0], param->remote_bda[0],
param->conn_id param->conn_id);
);
s_conn_ind = ~0; s_conn_ind = ~0;
//helloyifa // helloyifa
//wifi_boarding_adv_stop(); // wifi_boarding_adv_stop();
//wifi_boarding_adv_start(); // wifi_boarding_adv_start();
const bk_ble_gap_ext_adv_t ext_adv = const bk_ble_gap_ext_adv_t ext_adv =
{ {
@ -1150,7 +1188,6 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga
return ret; return ret;
} }
static void dm_ble_gap_common_cb(bk_ble_gap_cb_event_t event, bk_ble_gap_cb_param_t *param) static void dm_ble_gap_common_cb(bk_ble_gap_cb_event_t event, bk_ble_gap_cb_param_t *param)
{ {
wboard_logd("event %d", event); wboard_logd("event %d", event);
@ -1170,8 +1207,7 @@ static void dm_ble_gap_common_cb(bk_ble_gap_cb_event_t event, bk_ble_gap_cb_para
evt->remote_bda[0], evt->remote_bda[0],
evt->status, evt->status,
evt->link_role, evt->link_role,
evt->hci_handle evt->hci_handle);
);
} }
break; break;
@ -1189,9 +1225,7 @@ static void dm_ble_gap_common_cb(bk_ble_gap_cb_event_t event, bk_ble_gap_cb_para
evt->remote_bda_type, evt->remote_bda_type,
evt->status, evt->status,
evt->reason, evt->reason,
evt->hci_handle evt->hci_handle);
);
} }
break; break;
@ -1206,7 +1240,7 @@ static void dm_ble_gap_common_cb(bk_ble_gap_cb_event_t event, bk_ble_gap_cb_para
if (s_ble_sema != NULL) if (s_ble_sema != NULL)
{ {
rtos_set_semaphore( &s_ble_sema ); rtos_set_semaphore(&s_ble_sema);
} }
} }
break; break;
@ -1296,7 +1330,6 @@ static void dm_ble_gap_common_cb(bk_ble_gap_cb_event_t event, bk_ble_gap_cb_para
default: default:
break; break;
} }
} }
int wifi_boarding_init(ble_boarding_info_t *info) int wifi_boarding_init(ble_boarding_info_t *info)
@ -1305,7 +1338,7 @@ int wifi_boarding_init(ble_boarding_info_t *info)
s_ble_boarding_info = info; s_ble_boarding_info = info;
if(!s_ble_sema) if (!s_ble_sema)
{ {
ret = rtos_init_semaphore(&s_ble_sema, 1); ret = rtos_init_semaphore(&s_ble_sema, 1);
@ -1414,8 +1447,8 @@ int wifi_boarding_deinit()
void dm_ble_gap_get_identity_addr(uint8_t *addr) void dm_ble_gap_get_identity_addr(uint8_t *addr)
{ {
// //
//uint8_t base_mac[BK_MAC_ADDR_LEN] = {0}; // uint8_t base_mac[BK_MAC_ADDR_LEN] = {0};
//bk_get_mac(base_mac, MAC_TYPE_BASE); // bk_get_mac(base_mac, MAC_TYPE_BASE);
// //
uint8_t *identity_addr = addr; uint8_t *identity_addr = addr;
bk_get_mac((uint8_t *)identity_addr, MAC_TYPE_BASE); bk_get_mac((uint8_t *)identity_addr, MAC_TYPE_BASE);
@ -1438,11 +1471,11 @@ int wifi_boarding_adv_start(void)
dm_ble_gap_get_identity_addr(identity_addr); dm_ble_gap_get_identity_addr(identity_addr);
os_memcpy(current_addr, identity_addr, sizeof(identity_addr)); os_memcpy(current_addr, identity_addr, sizeof(identity_addr));
wboard_loge("BT MAC %02x %02x %02x %02x %02x %02x ", current_addr[0],current_addr[1],current_addr[2],current_addr[3],current_addr[4],current_addr[5]); wboard_loge("BT MAC %02x %02x %02x %02x %02x %02x ", current_addr[0], current_addr[1], current_addr[2], current_addr[3], current_addr[4], current_addr[5]);
//current_addr[5] |= 0xc0; // current_addr[5] |= 0xc0;
//current_addr[0]++; // current_addr[0]++;
snprintf((char *)(adv_name), sizeof(adv_name) - 1, "iR58_%02X%02X",current_addr[1], current_addr[0]); snprintf((char *)(adv_name), sizeof(adv_name) - 1, "iR58_%02X%02X", current_addr[1], current_addr[0]);
wboard_logi("adv name %s", adv_name); wboard_logi("adv name %s", adv_name);
@ -1465,7 +1498,7 @@ int wifi_boarding_adv_start(void)
.secondary_phy = BK_BLE_GAP_PHY_1M, .secondary_phy = BK_BLE_GAP_PHY_1M,
.sid = 0, .sid = 0,
.scan_req_notif = 0, .scan_req_notif = 0,
.own_addr_type = BLE_ADDR_TYPE_RANDOM,//BLE_ADDR_TYPE_PUBLIC, .own_addr_type = BLE_ADDR_TYPE_RANDOM, // BLE_ADDR_TYPE_PUBLIC,
}; };
ret = bk_ble_gap_set_adv_params(ADV_HANDLE, &adv_param); ret = bk_ble_gap_set_adv_params(ADV_HANDLE, &adv_param);
@ -1617,14 +1650,13 @@ int wifi_boarding_adv_start(void)
error: error:
return 0; return 0;
} }
int wifi_boarding_adv_stop(void) int wifi_boarding_adv_stop(void)
{ {
int32_t ret = 0; int32_t ret = 0;
if(bk_bluetooth_get_status() != BK_BLUETOOTH_STATUS_ENABLED) if (bk_bluetooth_get_status() != BK_BLUETOOTH_STATUS_ENABLED)
{ {
wboard_loge("bluetooth not init !!!"); wboard_loge("bluetooth not init !!!");
return BK_FAIL; return BK_FAIL;
@ -1664,4 +1696,3 @@ int wifi_boarding_notify(uint8_t *data, uint16_t length)
return BK_OK; return BK_OK;
} }
} }