This commit is contained in:
zogodo
2019-09-25 17:10:21 +08:00
parent 21a07a4d97
commit 3f2605cd78
8 changed files with 91 additions and 95 deletions

View File

@@ -13,7 +13,7 @@
char rtc_init = 0; //sntpУʱ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>־λ
char rtc_init = 0; //sntp校时成功标志位
uint32_t total_time = 0;
char strMac[16] = { 0 };
uint32_t power = 0;
@@ -31,7 +31,7 @@ void appRestoreDefault_callback(void * const user_config_data, uint32_t size)
UNUSED_PARAMETER(size);
mico_system_context_get()->micoSystemConfig.name[0] = 1; //<EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʹ<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mico_system_context_get()->micoSystemConfig.name[0] = 1; //在下次重启时使用默认名称
mico_system_context_get()->micoSystemConfig.name[1] = 0;
user_config_t* userConfigDefault = user_config_data;
@@ -47,7 +47,7 @@ void appRestoreDefault_callback(void * const user_config_data, uint32_t size)
{
userConfigDefault->plug[i].on = 1;
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>1-6
//插座名称 插口1-6
userConfigDefault->plug[i].name[0] = 0xe6;
userConfigDefault->plug[i].name[1] = 0x8f;
userConfigDefault->plug[i].name[2] = 0x92;
@@ -57,7 +57,7 @@ void appRestoreDefault_callback(void * const user_config_data, uint32_t size)
userConfigDefault->plug[i].name[6] = i + '1';
userConfigDefault->plug[i].name[7] = 0;
// sprintf(userConfigDefault->plug[i].name, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d", i);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// sprintf(userConfigDefault->plug[i].name, "插座%d", i);//编码异常
for (j = 0; j < PLUG_TIME_TASK_NUM; j++)
{
userConfigDefault->plug[i].task[j].hour = 0;
@@ -97,9 +97,9 @@ int application_start(void)
MicoGpioInitialize((mico_gpio_t) Button, INPUT_PULL_UP);
if (!MicoGpioInputGet(Button))
{ //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ť״̬
{ //开机时按钮状态
os_log("wifi_start_easylink");
wifi_status = WIFI_STATE_NOEASYLINK; //wifi_init<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>easylink
wifi_status = WIFI_STATE_NOEASYLINK; //wifi_init中启动easylink
}
MicoGpioInitialize((mico_gpio_t) Led, OUTPUT_PUSH_PULL);
@@ -120,7 +120,7 @@ int application_start(void)
if (sys_config->micoSystemConfig.name[0] == 1)
{
IPStatusTypedef para;
os_log("micoWlanGetIPStatus:%d", micoWlanGetIPStatus(&para, Station)); //mac<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0??!!!
os_log("micoWlanGetIPStatus:%d", micoWlanGetIPStatus(&para, Station)); //mac读出来全部是0??!!!
strcpy(strMac, para.mac);
os_log("result:%s",strMac);
os_log("result:%s",para.mac);
@@ -153,7 +153,7 @@ int application_start(void)
// }
// }
//sys_config = mico_system_context_init(sizeof(user_config_t)); //<EFBFBD><EFBFBD>ȡFlash<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//sys_config = mico_system_context_init(sizeof(user_config_t)); //获取Flash中的配置
ap_init();
wifi_init();
user_udp_init();
@@ -169,7 +169,7 @@ int application_start(void)
while (1)
{
main_num++;
//<EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//发送功率数据
if (power_last != power || main_num>4)
{
power_last = power;

View File

@@ -12,11 +12,11 @@
#define ZTC1_NAME "zTC1_%02X%02X"
#define USER_CONFIG_VERSION 2
#define SETTING_MQTT_STRING_LENGTH_MAX 32 //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4 <20>ֽڶ<D6BD><DAB6>
#define SETTING_MQTT_STRING_LENGTH_MAX 32 //必须 4 字节对齐。
#define PLUG_NAME_LENGTH 32
#define PLUG_NUM 6 //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PLUG_TIME_TASK_NUM 5 //ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD>鶨ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PLUG_NUM 6 //插座数量
#define PLUG_TIME_TASK_NUM 5 //每个插座最多5组定时任务
#define Led MICO_GPIO_5
#define Button MICO_GPIO_23
@@ -35,22 +35,22 @@
typedef struct
{
char hour; //Сʱ
char minute; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char repeat; //bit7:һ<EFBFBD><EFBFBD> bit6-0:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><>һ
char action; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char on; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char hour; //小时
char minute; //分钟
char repeat; //bit7:一次 bit6-0:周日-周一
char action; //动作
char on; //开关
} user_plug_task_config_t;
typedef struct
{
char name[PLUG_NAME_LENGTH];
char on; //<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char on; //记录当前开关
user_plug_task_config_t task[PLUG_TIME_TASK_NUM];
} user_plug_config_t;
//<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//用户保存参数结构体
typedef struct
{
char mqtt_ip[SETTING_MQTT_STRING_LENGTH_MAX]; //mqtt service ip

View File

@@ -22,7 +22,7 @@ bool json_plug_task_analysis(unsigned char x, unsigned char y, cJSON * pJsonRoot
void user_send(int udp_flag, char *s)
{
if (udp_flag || !user_mqtt_isconnect())
user_udp_send(s); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
user_udp_send(s); //发送数据
else
user_mqtt_send(s);
}
@@ -31,8 +31,8 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
{
unsigned char i;
bool update_user_config_flag = false; //<EFBFBD><EFBFBD>־λ,<2C><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool return_flag = true; //Ϊtrueʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>json<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>򲻷<EFBFBD><F2B2BBB7><EFBFBD>
bool update_user_config_flag = false; //标志位,记录最后是否需要更新储存的数据
bool return_flag = true; //true时返回json结果,否则不返回
cJSON * pJsonRoot = cJSON_Parse(pusrdata);
if (!pJsonRoot)
@@ -41,7 +41,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
return;
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>device report(MQTTͬ<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
//解析UDP命令device report(MQTT同样回复命令)
cJSON *p_cmd = cJSON_GetObjectItem(pJsonRoot, "cmd");
if (p_cmd && cJSON_IsString(p_cmd) && strcmp(p_cmd->valuestring, "device report") == 0)
{
@@ -57,17 +57,17 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
char *s = cJSON_Print(pRoot);
// os_log("pRoot: %s\r\n", s);
user_send(udp_flag, s); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
user_send(udp_flag, s); //发送数据
free((void *) s);
cJSON_Delete(pRoot);
// cJSON_Delete(p_cmd);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//以下为解析命令部分
cJSON *p_name = cJSON_GetObjectItem(pJsonRoot, "name");
cJSON *p_mac = cJSON_GetObjectItem(pJsonRoot, "mac");
//<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//开始正式处理所有命令
if ((p_name && cJSON_IsString(p_name) && strcmp(p_name->valuestring, sys_config->micoSystemConfig.name) == 0) //name
|| (p_mac && cJSON_IsString(p_mac) && strcmp(p_mac->valuestring, strMac) == 0) //mac
)
@@ -75,7 +75,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
cJSON *json_send = cJSON_CreateObject();
cJSON_AddStringToObject(json_send, "mac", strMac);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//解析重启命令
// cJSON *p_cmd = cJSON_GetObjectItem(pJsonRoot, "name");
if(p_cmd && cJSON_IsString(p_cmd) && strcmp(p_cmd->valuestring, "restart") == 0)
{
@@ -83,20 +83,20 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
mico_system_power_perform(mico_system_context_get(), eState_Software_Reset);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//解析版本
cJSON *p_version = cJSON_GetObjectItem(pJsonRoot, "version");
if (p_version)
{
os_log("version:%s",VERSION);
cJSON_AddStringToObject(json_send, "version", VERSION);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
//解析运行时间
cJSON *p_total_time = cJSON_GetObjectItem(pJsonRoot, "total_time");
if (p_total_time)
{
cJSON_AddNumberToObject(json_send, "total_time", total_time);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//解析功率
cJSON *p_power = cJSON_GetObjectItem(pJsonRoot, "power");
if (p_power)
{
@@ -109,11 +109,11 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
}
os_log("power:%d", (int)power);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>setting-----------------------------------------------------------------
//解析主机setting-----------------------------------------------------------------
cJSON *p_setting = cJSON_GetObjectItem(pJsonRoot, "setting");
if (p_setting)
{
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ota
//解析ota
cJSON *p_ota = cJSON_GetObjectItem(p_setting, "ota");
if (p_ota)
{
@@ -122,7 +122,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
}
cJSON *json_setting_send = cJSON_CreateObject();
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/deviceid
//设置设备名称/deviceid
cJSON *p_setting_name = cJSON_GetObjectItem(p_setting, "name");
if (p_setting_name && cJSON_IsString(p_setting_name))
{
@@ -130,7 +130,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
sprintf(sys_config->micoSystemConfig.name, p_setting_name->valuestring);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt ip
//设置mqtt ip
cJSON *p_mqtt_ip = cJSON_GetObjectItem(p_setting, "mqtt_uri");
if (p_mqtt_ip && cJSON_IsString(p_mqtt_ip))
{
@@ -138,7 +138,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
sprintf(user_config->mqtt_ip, p_mqtt_ip->valuestring);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt port
//设置mqtt port
cJSON *p_mqtt_port = cJSON_GetObjectItem(p_setting, "mqtt_port");
if (p_mqtt_port && cJSON_IsNumber(p_mqtt_port))
{
@@ -146,7 +146,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
user_config->mqtt_port = p_mqtt_port->valueint;
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt user
//设置mqtt user
cJSON *p_mqtt_user = cJSON_GetObjectItem(p_setting, "mqtt_user");
if (p_mqtt_user && cJSON_IsString(p_mqtt_user))
{
@@ -154,7 +154,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
sprintf(user_config->mqtt_user, p_mqtt_user->valuestring);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt password
//设置mqtt password
cJSON *p_mqtt_password = cJSON_GetObjectItem(p_setting, "mqtt_password");
if (p_mqtt_password && cJSON_IsString(p_mqtt_password))
{
@@ -162,25 +162,25 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
sprintf(user_config->mqtt_password, p_mqtt_password->valuestring);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ota
//开发返回数据
//返回设备ota
if (p_ota) cJSON_AddStringToObject(json_setting_send, "ota", p_ota->valuestring);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/deviceid
//返回设备名称/deviceid
if (p_setting_name) cJSON_AddStringToObject(json_setting_send, "name", sys_config->micoSystemConfig.name);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt ip
//返回mqtt ip
if (p_mqtt_ip) cJSON_AddStringToObject(json_setting_send, "mqtt_uri", user_config->mqtt_ip);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt port
//返回mqtt port
if (p_mqtt_port) cJSON_AddNumberToObject(json_setting_send, "mqtt_port", user_config->mqtt_port);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt user
//返回mqtt user
if (p_mqtt_user) cJSON_AddStringToObject(json_setting_send, "mqtt_user", user_config->mqtt_user);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt password
//返回mqtt password
if (p_mqtt_password) cJSON_AddStringToObject(json_setting_send, "mqtt_password", user_config->mqtt_password);
cJSON_AddItemToObject(json_send, "setting", json_setting_send);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>plug-----------------------------------------------------------------
//解析plug-----------------------------------------------------------------
for (i = 0; i < PLUG_NUM; i++)
{
if (json_plug_analysis(udp_flag, i, pJsonRoot, json_send))
@@ -193,7 +193,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
{
char *json_str = cJSON_Print(json_send);
// os_log("pRoot: %s\r\n", json_str);
user_send(udp_flag, json_str); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
user_send(udp_flag, json_str); //发送数据
free((void *) json_str);
}
cJSON_Delete(json_send);
@@ -210,9 +210,9 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
}
/*
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>json
*udp_flag:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>udp/mqtt<EFBFBD><EFBFBD>־λ,<2C>˴<EFBFBD><CBB4>޸IJ<DEB8><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ʱ,<2C><>Ҫʵʱ<CAB5><CAB1><EFBFBD>¸<EFBFBD>domoticz
*x:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*解析处理定时任务json
*udp_flag:发送udp/mqtt标志位,此处修改插座开关状态时,需要实时更新给domoticz
*x:插座编号
*/
bool json_plug_analysis(int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON * pJsonSend)
{
@@ -228,7 +228,7 @@ bool json_plug_analysis(int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON
cJSON *json_plug_send = cJSON_CreateObject();
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>plug on------------------------------------------------------
//解析plug on------------------------------------------------------
if (p_plug)
{
cJSON *p_plug_on = cJSON_GetObjectItem(p_plug, "on");
@@ -242,12 +242,12 @@ bool json_plug_analysis(int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON
user_mqtt_send_plug_state(x);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>plug<EFBFBD><EFBFBD>setting<EFBFBD><EFBFBD>Ŀ----------------------------------------------
//解析plugsetting项目----------------------------------------------
cJSON *p_plug_setting = cJSON_GetObjectItem(p_plug, "setting");
if (p_plug_setting)
{
cJSON *json_plug_setting_send = cJSON_CreateObject();
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>plug<EFBFBD><EFBFBD>setting<EFBFBD><EFBFBD>name----------------------------------------
//解析plugsettingname----------------------------------------
cJSON *p_plug_setting_name = cJSON_GetObjectItem(p_plug_setting, "name");
if (p_plug_setting_name)
{
@@ -260,7 +260,7 @@ bool json_plug_analysis(int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON
cJSON_AddStringToObject(json_plug_setting_send, "name", user_config->plug[x].name);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>plug<EFBFBD><EFBFBD>setting<EFBFBD><EFBFBD>task----------------------------------------
//解析plugsettingtask----------------------------------------
for (i = 0; i < PLUG_TIME_TASK_NUM; i++)
{
if (json_plug_task_analysis(x, i, p_plug_setting, json_plug_setting_send))
@@ -279,8 +279,8 @@ bool json_plug_analysis(int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON
}
/*
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>json
*x:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> y:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*解析处理定时任务json
*x:插座编号 y:任务编号
*/
bool json_plug_task_analysis(unsigned char x, unsigned char y, cJSON * pJsonRoot, cJSON * pJsonSend)
{

View File

@@ -56,9 +56,9 @@ void set_socket_status(char* socket_status)
}
/*user_relay_set
* <EFBFBD><EFBFBD><EFBFBD>ü̵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* i:<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-5
* on:<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0:<EFBFBD><EFBFBD> 1:<EFBFBD><EFBFBD>
* 设置继电器开关
* i:编号 0-5
* on:开关 0: 1:
*/
void user_relay_set(unsigned char i, unsigned char on)
{
@@ -86,8 +86,8 @@ void user_relay_set(unsigned char i, unsigned char on)
}
/*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м̵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* y: 0:ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1:ȫ<><C8AB><EFBFBD><EFBFBD>
* 设置所有继电器开关
* y: 0:全部关 1:全部开
*
*/
void user_relay_set_all(char y)
@@ -144,12 +144,12 @@ uint16_t key_time = 0;
static void key_timeout_handler(void* arg)
{
static char key_trigger, key_continue;
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//按键扫描程序
char tmp = ~(0xfe | MicoGpioInputGet(Button));
key_trigger = tmp & (tmp ^ key_continue);
key_continue = tmp;
// os_log("button scan:%02x %02x",key_trigger,key_continue);
if (key_trigger != 0) key_time = 0; //<EFBFBD>°<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,<2C><><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
if (key_trigger != 0) key_time = 0; //新按键按下时,重新开始按键计时
if (key_continue != 0)
{
//any button pressed
@@ -181,7 +181,7 @@ static void key_timeout_handler(void* arg)
{
//button released
if (key_time < BUTTON_LONG_PRESS_TIME)
{ //100ms*10=1s <EFBFBD><EFBFBD><EFBFBD><EFBFBD>1sΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ //100ms*10=1s 大于1s为长按
key_time = 0;
os_log("button short pressed:%d",key_time);
key_short_press();

View File

@@ -102,7 +102,7 @@ mico_timer_t timer_handle;
static char timer_status = 0;
void user_mqtt_timer_func(void *arg)
{
char* buf1 = malloc(1024); //idx为1位时长度为24
char* buf1 = malloc(1024); //idx涓?浣嶆椂闀垮害涓?4
LinkStatusTypeDef LinkStatus;
micoWlanGetLinkStatus(&LinkStatus);
@@ -302,8 +302,7 @@ void mqtt_client_thread(mico_thread_arg_t arg)
{
isconnect = false;
mico_rtos_thread_sleep(3);
if (MQTT_SERVER[0] < 0x20 || MQTT_SERVER[0] > 0x7f || MQTT_SERVER_PORT < 1) continue; //未配置mqtt服务器时不连接
if (MQTT_SERVER[0] < 0x20 || MQTT_SERVER[0] > 0x7f || MQTT_SERVER_PORT < 1) continue; //鏈厤缃甿qtt鏈嶅姟鍣ㄦ椂涓嶈繛鎺?
micoWlanGetLinkStatus(&LinkStatus);
if (LinkStatus.is_connected != 1)
{
@@ -344,7 +343,7 @@ void mqtt_client_thread(mico_thread_arg_t arg)
rc = MQTTSubscribe(&c, topic_set, QOS0, messageArrived);
require_noerr_string(rc, MQTT_reconnect, "ERROR: MQTT client subscribe err.");
mqtt_log("MQTT client subscribe success! recv_topic=[%s].", topic_set);
/*4.1 连接成功后先更新发送一次数据*/
/*4.1 杩炴帴鎴愬姛鍚庡厛鏇存柊鍙戦€佷竴娆℃暟鎹?/
isconnect = true;
mico_init_timer(&timer_handle, 150, user_mqtt_timer_func, &arg);
@@ -503,8 +502,7 @@ OSStatus user_mqtt_send(char *arg)
return user_mqtt_send_topic(topic_state, arg, 0);
}
//更新ha开关状态
OSStatus user_mqtt_send_plug_state(char plug_id)
//鏇存柊ha寮€鍏崇姸鎬?OSStatus user_mqtt_send_plug_state(char plug_id)
{
char *send_buf = NULL;
@@ -521,8 +519,7 @@ OSStatus user_mqtt_send_plug_state(char plug_id)
if (topic_buf) free(topic_buf);
}
//hass mqtt自动发现数据开关发送
void user_mqtt_hass_auto(char plug_id)
//hass mqtt鑷姩鍙戠幇鏁版嵁寮€鍏冲彂閫?void user_mqtt_hass_auto(char plug_id)
{
char *send_buf = NULL;
char *topic_buf = NULL;
@@ -569,8 +566,7 @@ void user_mqtt_hass_auto_name(char plug_id)
if (topic_buf)
free(topic_buf);
}
//hass mqtt自动发现数据功率发送
void user_mqtt_hass_auto_power(void)
//hass mqtt鑷姩鍙戠幇鏁版嵁鍔熺巼鍙戦€?void user_mqtt_hass_auto_power(void)
{
char *send_buf = NULL;
char *topic_buf = NULL;

View File

@@ -124,7 +124,7 @@ OSStatus user_rtc_init(void)
void rtc_thread(mico_thread_arg_t arg)
{
int i, j;
char task_flag[PLUG_NUM] = { -1, -1, -1, -1, -1, -1 }; //<EFBFBD><EFBFBD>¼ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char task_flag[PLUG_NUM] = { -1, -1, -1, -1, -1, -1 }; //记录每个插座哪个任务需要返回数据
OSStatus err = kUnknownErr;
LinkStatusTypeDef LinkStatus;
mico_rtc_time_t rtc_time;
@@ -133,7 +133,7 @@ void rtc_thread(mico_thread_arg_t arg)
mico_utc_time_t utc_time;
mico_utc_time_t utc_time_last = 0;
while (1)
{ //<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi<EFBFBD>ſ<EFBFBD>ʼ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ //上电后连接了wifi才开始走时否则等待连接
micoWlanGetLinkStatus(&LinkStatus);
if (LinkStatus.is_connected == 1)
{
@@ -170,7 +170,7 @@ void rtc_thread(mico_thread_arg_t arg)
rtc_time.month = currentTime->tm_mon + 1;
rtc_time.year = (currentTime->tm_year + 1900) % 100;
// MicoRtcSetTime(&rtc_time); //MicoRtc<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>ʱ!
// MicoRtcSetTime(&rtc_time); //MicoRtc不自动走时!
if (rtc_time.sec == 0)
os_log("time:20%02d/%02d/%02d %d %02d:%02d:%02d",rtc_time.year,rtc_time.month,rtc_time.date,rtc_time.weekday,rtc_time.hr,rtc_time.min,rtc_time.sec);
@@ -184,7 +184,7 @@ void rtc_thread(mico_thread_arg_t arg)
{
char repeat = user_config->plug[i].task[j].repeat;
if ( //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD>״̬: <20><>Ϊ0 ʱ<>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>趨ֵ, <20>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨ֵ
if ( //符合条件则改变继电器状态: 秒为0 时分符合设定值, 重复符合设定值
rtc_time.sec == 0 && rtc_time.min == user_config->plug[i].task[j].minute
&& rtc_time.hr == user_config->plug[i].task[j].hour
&& ((repeat == 0x00) || repeat & (1 << (rtc_time.weekday - 1)))
@@ -207,7 +207,7 @@ void rtc_thread(mico_thread_arg_t arg)
}
}
//<EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//更新储存数据 更新定时任务数据
if (update_user_config_flag == 1)
{
os_log("update_user_config_flag");
@@ -247,14 +247,14 @@ void rtc_thread(mico_thread_arg_t arg)
}
char *json_str = cJSON_Print(json_send);
user_send(false, json_str); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
user_send(false, json_str); //发送数据
free(json_str);
cJSON_Delete(json_send);
// os_log("cJSON_Delete");
}
//SNTP<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿСʱУ׼һ<D7BC><D2BB>
//SNTP服务 开机及每小时校准一次
if (rtc_init != 1 || (rtc_time.sec == 0 && rtc_time.min == 0))
{
micoWlanGetLinkStatus(&LinkStatus);

View File

@@ -42,7 +42,7 @@ void sntp_init(void)
{
struct in_addr ipp;ipp.s_addr=0xd248912c;
sntp_set_server_ip_address (0,ipp);
sntp_start_auto_time_sync (15000, sntp_time_call_back); //ÿСʱУ׼һ<EFBFBD><EFBFBD>
sntp_start_auto_time_sync (15000, sntp_time_call_back); //每小时校准一次
mico_rtc_time_t rtc_time;
MicoRtcGetTime(&rtc_time);

View File

@@ -38,7 +38,7 @@ void wifi_start_easylink()
user_led_set(1);
}
//easylink <EFBFBD><EFBFBD><EFBFBD>ɻص<EFBFBD>
//easylink 完成回调
void wifi_easylink_completed_handle(network_InitTypeDef_st *nwkpara, void * arg)
{
os_log("wifi_easylink_wps_completed_handle:");
@@ -51,7 +51,7 @@ void wifi_easylink_completed_handle(network_InitTypeDef_st *nwkpara, void * arg)
os_log("ssid:\"%s\",\"%s\"",nwkpara->wifi_ssid,nwkpara->wifi_key);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//保存wifi及密码
strcpy(sys_config->micoSystemConfig.ssid, nwkpara->wifi_ssid);
strcpy(sys_config->micoSystemConfig.user_key, nwkpara->wifi_key);
sys_config->micoSystemConfig.user_keyLength = strlen(nwkpara->wifi_key);
@@ -62,26 +62,26 @@ void wifi_easylink_completed_handle(network_InitTypeDef_st *nwkpara, void * arg)
micoWlanStopEasyLink();
}
//wifi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>ȡ<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ַ <20>ص<EFBFBD>
//wifi已连接获取到IP地址 回调
static void wifi_get_ip_callback(IPStatusTypedef *pnet, void * arg)
{
os_log("got IP:%s", pnet->ip);
wifi_status = WIFI_STATE_CONNECTED;
user_function_cmd_received(1,"{\"cmd\":\"device report\"}");
}
//wifi<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>ı<EFBFBD><EFBFBD>ص<EFBFBD>
//wifi连接状态改变回调
static void wifi_status_callback(WiFiEvent status, void *arg)
{
if (status == NOTIFY_STATION_UP) //wifi<EFBFBD><EFBFBD><EFBFBD>ӳɹ<EFBFBD>
if (status == NOTIFY_STATION_UP) //wifi连接成功
{
//wifi_status = WIFI_STATE_CONNECTED;
} else if (status == NOTIFY_STATION_DOWN) //wifi<EFBFBD>Ͽ<EFBFBD>
} else if (status == NOTIFY_STATION_DOWN) //wifi断开
{
wifi_status = WIFI_STATE_NOCONNECT;
if (!mico_rtos_is_timer_running(&wifi_led_timer)) mico_rtos_start_timer(&wifi_led_timer);
}
}
//100ms<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
//100ms定时器回调
static void wifi_led_timer_callback(void* arg)
{
static unsigned int num = 0;
@@ -124,7 +124,7 @@ static void wifi_led_timer_callback(void* arg)
void wifi_connect(char* wifi_ssid, char* wifi_key)
{
//wifi<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><EFBFBD>
//wifi配置初始化
network_InitTypeDef_st wNetConfig;
memset(&wNetConfig, 0, sizeof(network_InitTypeDef_st));
@@ -135,7 +135,7 @@ void wifi_connect(char* wifi_ssid, char* wifi_key)
wNetConfig.wifi_retry_interval = 6000;
micoWlanStart(&wNetConfig);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash
//保存wifi及密码到Flash
strcpy(sys_config->micoSystemConfig.ssid, wifi_ssid);
strcpy(sys_config->micoSystemConfig.user_key, wifi_key);
sys_config->micoSystemConfig.user_keyLength = strlen(wifi_key);
@@ -145,16 +145,16 @@ void wifi_connect(char* wifi_ssid, char* wifi_key)
void wifi_init(void)
{
//wifi״̬<EFBFBD><EFBFBD>led<EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
//wifi状态下led闪烁定时器初始化
mico_rtos_init_timer(&wifi_led_timer, 100, (void *) wifi_led_timer_callback, NULL);
//easylink <EFBFBD><EFBFBD><EFBFBD>ɻص<EFBFBD>
//easylink 完成回调
mico_system_notify_register(mico_notify_EASYLINK_WPS_COMPLETED, (void *) wifi_easylink_completed_handle, NULL);
//wifi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>ȡ<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ַ <20>ص<EFBFBD>
//wifi已连接获取到IP地址 回调
mico_system_notify_register(mico_notify_DHCP_COMPLETED, (void *) wifi_get_ip_callback, NULL);
//wifi<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>ı<EFBFBD><EFBFBD>ص<EFBFBD>
//wifi连接状态改变回调
mico_system_notify_register(mico_notify_WIFI_STATUS_CHANGED, (void*) wifi_status_callback, NULL);
//sntp_init();
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//启动定时器开始进行wifi连接
if (!mico_rtos_is_timer_running(&wifi_led_timer)) mico_rtos_start_timer(&wifi_led_timer);
IPStatusTypedef para;