Commit b024dd73 authored by 陈伟灿's avatar 陈伟灿

Merge branch 'cwc' into 'master'

【修改内容】增加OTA功能

See merge request chenweican/k-sdk!106
parents c58f1bab de6c0fc8
1.1.0
\ No newline at end of file
#!/bin/sh
nanomsg_File="/home/kk/lib/libnanomsg.so.5"
ev_File="/home/kk/lib/libev.so.4"
sqlite_File="/home/kk/lib/libsqlite3.so.0"
run_Dir="/usr/kk"
tsl_Dir="${run_Dir}/tsl"
dev_cfg_Dir="${run_Dir}/dev_config_table"
cd /sbin/
insmod /sbin/ssd1306-revision.ko
/sbin/oled >/dev/null 2>&1 &
sleep 1
if [ ! -d "$run_Dir" ]; then
mkdir ${run_Dir}
fi
if [ ! -d "$tsl_Dir" ]; then
cp -rf /home/kk/tsl ${run_Dir}/
fi
if [ ! -d "$dev_cfg_Dir" ]; then
cp -rf /home/kk/dev_config_table ${run_Dir}
sleep 1
fi
export LD_LIBRARY_PATH=/home/kk/lib
cd /home/kk/lib
if [ ! -f "$nanomsg_File" ]; then
ln -sf /home/kk/lib/libnanomsg.so /lib/libnanomsg.so.5
fi
if [ ! -f "$ev_File" ]; then
ln -sf /home/kk/lib/libev.so /lib/libev.so.4
fi
if [ ! -f "$sqlite_File" ]; then
ln -sf /home/kk/lib/libsqlite3.so /lib/libsqlite3.so.0
fi
CCU_ID=`cat /etc/dropbear/accessory/hj/hj_ccuid`
/sbin/logread -f -r 120.55.149.201 514 -p /var/run/logread.cloud_log.pid -u -h $CCU_ID >/dev/null 2>&1 &
/sbin/logread -f -e "ccu_err_info" -F /etc/dropbear/accessory/hj/err.log -p /var/run/logread.err_log.pid -S 512 >/dev/null 2>&1 &
sleep 1
export LD_LIBRARY_PATH=/home/kk/lib
cd ${run_Dir}
/home/kk/kk_midware >/dev/null 2>&1 &
sleep 1
/home/kk/kcloud >/dev/null 2>&1 &
/home/kk/Z3GatewayHost -f x -p /dev/ttyS0 >/dev/null 2>&1 &
/home/kk/process_check.sh >/dev/null 2>&1 &
cd /sbin
/sbin/logd-check.sh >/dev/null 2>&1 &
sleep 1
ntpd -n -q -d -p stdtime.gov.hk &
exit 0
\ No newline at end of file
......@@ -14,12 +14,13 @@
#define CONNECT_TIMEOUT 3
#define IPSTR "172.25.240.194"
#define PORT 8092
#define GET_KEY_CMD "/usr/sbin/fw_printenv key -n"
typedef enum {
RETURN_FAIL = -1,
RETURN_SUCCESS = 0,
} kk_kcloud_error_code_t;
#define KK_DEVICESECRET_PATH "/data/kk/kk_deviceSecret.txt"
#define KK_TOKEN_PATH "/data/kk/kk_token.txt"
#endif
......@@ -287,6 +287,7 @@ int _kk_sendto_cloud(cJSON *root)
}
#endif
char* out=cJSON_Print(pData);
KK_MQTT_SendMsg(topic,(const char*)out);
free(out);
}
......
......@@ -66,19 +66,28 @@ static int mqtt_start(void)
while(1)
{
usleep(100000L);
count++;
if(count>50)
{
count = 0;
//INFO_PRINT("i am send now\n");
//KK_MQTT_SendMsg(TOPIC,"hello my world",2);
if(kk_get_cloud_status() == 0){
//printf("------------------------------>count:%d\n",count);
count++;
if(count>500)
{
count = 0;
WARNING_PRINT("---------------------------------->CONNECT FAIL!!!\n");
break;
//INFO_PRINT("i am send now\n");
//KK_MQTT_SendMsg(TOPIC,"hello my world",2);
}
}else{
if(count > 0){
count = 0;
}
}
//INFO_PRINT(" %s \n",testStr);
}
INFO_PRINT("MQTTAsync_destroy\n");
MQTTAsync_destroy(&mqttClient);
return rc;
return -1;
}
int kk_start_ccu_register(void);
......@@ -90,11 +99,15 @@ int main(int argc, char* argv[])
/*set the callback to get the device date to cloud*/
KK_Ccuid_init();
kk_ipc_init(IPC_APP2MID,(ipc_cb*)KK_Data_FromDev,NULL,NULL);
kk_info_report_start();
//kk_info_report_start();
again:
rc = kk_start_ccu_register();
if(rc == 0){
rc = mqtt_start();
if(rc < 0){
sleep(2);
goto again;
}
}else{
sleep(2);
goto again;
......
......@@ -21,41 +21,61 @@
#define BUFSIZE 1024
#define PRODUCTSECRET "123456"
int kk_execel_cmd(char * cmd,char * buf,int buf_len,int* ret_len)
{
if(cmd == NULL || buf == NULL || buf_len == 0)
{
INFO_PRINT("arg error\n");
return -1;
}
memset(buf,0,buf_len);
FILE *fp = NULL;
fp = popen(cmd,"r");
while(fgets(buf,buf_len,fp)!=NULL){
INFO_PRINT("%s return %s",cmd,buf);
}
pclose (fp);
*ret_len = strlen(buf);
return 0;
}
int kk_parse_deviceSecret(char *info){
FILE *fp;
if(info == NULL){
return -1;
}
cJSON* infoObj = cJSON_Parse(info);
if(infoObj == NULL){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1;
}
FILE *fp;
if(info == NULL){
return -1;
}
cJSON* infoObj = cJSON_Parse(info);
if(infoObj == NULL){
INFO_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1;
}
//cJSON *data = cJSON_GetObjectItem(infoObj,"data");
//if(data == NULL)
//{
//return -1;
//}
cJSON *deviceSecret = cJSON_GetObjectItem(infoObj,"deviceSecret");
if(deviceSecret == NULL) return -1;
fp = fopen("/usr/kk/kk_deviceSecret.txt", "w+");
if(fp != NULL){
fwrite(deviceSecret->valuestring,strlen(deviceSecret->valuestring),1,fp);
fclose(fp);
}
return 0;
if(deviceSecret == NULL) return -1;
fp = fopen(KK_DEVICESECRET_PATH, "w+");
if(fp != NULL){
fwrite(deviceSecret->valuestring,strlen(deviceSecret->valuestring),1,fp);
fclose(fp);
}
return 0;
}
int kk_parse_token(char *info){
FILE *fp;
if(info == NULL){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1;
}
cJSON* infoObj = cJSON_Parse(info);
if(infoObj == NULL){
return -1;
}
FILE *fp;
if(info == NULL){
INFO_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1;
}
cJSON* infoObj = cJSON_Parse(info);
if(infoObj == NULL){
return -1;
}
cJSON *data = cJSON_GetObjectItem(infoObj,"data");
if(data == NULL)
{
......@@ -63,7 +83,7 @@ int kk_parse_token(char *info){
}
cJSON *jwt = cJSON_GetObjectItem(data,"jwt");
if(jwt == NULL) return -1;
fp = fopen("/usr/kk/kk_token.txt", "w+");
fp = fopen(KK_TOKEN_PATH, "w+");
if(fp != NULL){
fwrite(jwt->valuestring,strlen(jwt->valuestring),1,fp);
fclose(fp);
......@@ -87,14 +107,14 @@ char *kk_dictionary_order(char *deviceCode, char *productCode,char *randomId)
memcpy(&str[0],deviceCode,strlen(deviceCode));
memcpy(&str[1],productCode,strlen(productCode));
memcpy(&str[2],randomId,strlen(randomId));
for (i=0;i<3;i++)
{
for (l=0;l<16;l++)
{
INFO_PRINT("%c",str[i][l]);
}
INFO_PRINT("\n");
}
//for (i=0;i<3;i++)
//{
//for (l=0;l<16;l++)
//{
//INFO_PRINT("%c",str[i][l]);
//}
//INFO_PRINT("\n");
//}
//排序
INFO_PRINT("after order:\n");
int j,k;
......@@ -108,8 +128,8 @@ char *kk_dictionary_order(char *deviceCode, char *productCode,char *randomId)
strcpy(str[k],temp);
}
}
for(i=0;i<3;i++)//输出
INFO_PRINT("%s\n",str[i]);
//for(i=0;i<3;i++)//输出
//INFO_PRINT("%s\n",str[i]);
len = strlen(deviceCode) + strlen(productCode) + strlen(randomId) + 1;
signSource = malloc(len);
if (signSource == NULL) {
......@@ -238,7 +258,7 @@ static char * kk_create_get_jwt_info()
cJSON_AddStringToObject(root, "deviceCode", ccuid);
cJSON_AddStringToObject(root, "productCode",KK_CCU_PRODUCTID);
cJSON_AddStringToObject(root, "clientId",g_clientId);
fp = fopen("/usr/kk/kk_deviceSecret.txt", "r");
fp = fopen(KK_DEVICESECRET_PATH, "r");
if(fp != NULL){
fread(deviceSecret,1,sizeof(deviceSecret),fp);
fclose(fp);
......
......@@ -14,8 +14,8 @@ const char KK_URI_SYS_PREFIX_SERVICE[] = "biz/newkk/%s/%s/thing/service/+";
const char KK_URI_SYS_PREFIX_TOPO_CHANGE[] = "biz/newkk/%s/%s/thing/topo/change";
const char KK_URI_SYS_PREFIX_EX[] = "biz/newkk/%s/%s";
const char KK_URI_OTA_PREFIX[] = "ota/device/%s/%s/upgrade";
const char KK_URI_OTA_PROCESS[] = "/ota/device/progress/%s/%s";
const char KK_URI_OTA_INFORM[] = "/ota/device/inform/%s/%s";
const char KK_URI_OTA_PROCESS[] = "ota/device/%s/%s/progress";
const char KK_URI_OTA_REPLY[] = "ota/device/%s/%s/upgrade_reply";
static int s_gw_status = DEVICE_OFFLINE;
int kk_set_gw_status(int status)
......@@ -89,10 +89,10 @@ static int _kk_ccu_topic_subscribe(char productCode[PRODUCT_CODE_LEN],char devic
return -1;
}
//memset(url, 0, url_len);
//snprintf(url, url_len, KK_URI_OTA_PREFIX, productCode,deviceCode);
//INFO_PRINT("ota [%s][%d] URL:%s\n",__FUNCTION__,__LINE__,url);
//res = KK_MQTT_SubTopic(url);
memset(url, 0, url_len);
snprintf(url, url_len, KK_URI_OTA_PREFIX, productCode,deviceCode);
INFO_PRINT("ota URL:%s\n",url);
res = KK_MQTT_SubTopic(url);
memset(url, 0, url_len);
snprintf(url, url_len, KK_URI_SYS_PREFIX_SERVICE, productCode,deviceCode);
......@@ -107,6 +107,11 @@ static int _kk_ccu_topic_subscribe(char productCode[PRODUCT_CODE_LEN],char devic
return res;
}
static int s_ccu_topic_sub = 0;
void KK_reset_sub_flag(void)
{
if(s_ccu_topic_sub)
s_ccu_topic_sub = 0;
}
int KK_CCU_TOPIC_Subscribe(void)
{
char productCode[PRODUCT_CODE_LEN] = {0};
......@@ -147,24 +152,41 @@ static int _kk_utils_topic(_IN_ const char *name, _IN_ char *product_code,
return 0;
}
static int _kk_utils_topic_ota(_IN_ char* str, _OU_ char **topic)
static int _kk_utils_topic_ota_process(_IN_ char* product_code,_IN_ char* device_code, _OU_ char **topic)
{
int service_name_len = 0;
if (str == NULL ||topic == NULL || *topic != NULL) {
if (product_code == NULL || device_code == NULL ||
topic == NULL || *topic != NULL) {
return -1;
}
service_name_len = strlen(str)+1;
service_name_len = strlen(KK_URI_OTA_PROCESS) + strlen(product_code) + strlen(device_code) +1;
*topic = malloc(service_name_len);
if (*topic == NULL) {
return -1;
}
memset(*topic, 0, service_name_len);
memcpy(*topic,str,service_name_len);
snprintf(*topic, service_name_len, KK_URI_OTA_PROCESS, product_code, device_code);
return 0;
}
static int _kk_utils_topic_upgrade_reply(_IN_ char* product_code,_IN_ char* device_code, _OU_ char **topic)
{
int service_name_len = 0;
if (product_code == NULL || device_code == NULL ||
topic == NULL || *topic != NULL) {
return -1;
}
service_name_len = strlen(KK_URI_OTA_REPLY) + strlen(product_code) + strlen(device_code) +1;
*topic = malloc(service_name_len);
if (*topic == NULL) {
return -1;
}
memset(*topic, 0, service_name_len);
snprintf(*topic, service_name_len, KK_URI_OTA_REPLY, product_code, device_code);
return 0;
}
int KK_Subdev_UnSubscribe_By_DeviceCode(const char *deviceCode,const char *productCode )
{
char *topic = NULL;
......@@ -247,8 +269,11 @@ char* KK_Make_Topic(cJSON *info,cJSON *data)
kk_set_gw_status(DEVICE_ONLINE);
}
}
if(strstr(type->valuestring,"/ota/device/inform") ||strstr(type->valuestring,"/ota/device/progress")){
_kk_utils_topic_ota(type->valuestring,&topic);
if(strstr(type->valuestring,"/thing/event/otaProgress/post")){
_kk_utils_topic_ota_process(product_code->valuestring,device_code->valuestring,&topic);
}
else if(strstr(type->valuestring,"/ota/device/upgrade_reply") != NULL){
_kk_utils_topic_upgrade_reply(product_code->valuestring,device_code->valuestring,&topic);
}
else{
_kk_utils_topic(type->valuestring,product_code->valuestring,device_code->valuestring,&topic);
......
......@@ -22,6 +22,8 @@ static void connlost(void *context, char *cause)
{
ERROR_PRINT("PARAM ERROR\n");
s_mqttStop = 1;
s_cloudStatus = DEVICE_OFFLINE;
KK_Send_CloudState(s_cloudStatus);
return;
}
MQTTAsync client = (MQTTAsync)context;
......@@ -85,7 +87,7 @@ void onSend(void* context, MQTTAsync_successData* response)
INFO_PRINT("Message with token value %d delivery confirmed\n", response->token);
}
extern void KK_reset_sub_flag(void);
void onConnectFailure(void* context, MQTTAsync_failureData* response)
{
s_mqttStop = 1;
......@@ -94,7 +96,7 @@ void onConnectFailure(void* context, MQTTAsync_failureData* response)
ERROR_PRINT("PARAM ERROR\n");
return;
}
KK_reset_sub_flag();
WARNING_PRINT("Connect failed, rc %d\n", response ? response->code : 0);
}
......@@ -135,6 +137,8 @@ static void onConnectBuild(void *context, char *cause)
//{
//ERROR_PRINT("KK_MQTT_SubTopic ERROR rc = %d\n",rc);
//}
s_cloudStatus = DEVICE_ONLINE;
KK_Send_CloudState(s_cloudStatus);
}
static void onDisConnected(void *context, MQTTProperties* properties,enum MQTTReasonCodes reasonCode)
{
......@@ -200,11 +204,11 @@ MQTTAsync KK_MQTT_Connect(void)
char mac[16]={0};
char token[512] = {0};
char usrname[128] = {0};
fp = fopen("/usr/kk/kk_token.txt", "r");
if(fp != NULL){
fread(token,1,sizeof(token),fp);
fclose(fp);
}
fp = fopen(KK_TOKEN_PATH, "r");
if(fp != NULL){
fread(token,1,sizeof(token),fp);
fclose(fp);
}
HAL_Get_mac(mac);
char ccuid[32] = {0};
KK_Get_ccuid(ccuid);
......@@ -264,7 +268,8 @@ int KK_MQTT_SendMsg(char *topicName,const char *payload)
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
int rc;
cJSON_Minify(payload);
INFO_PRINT("mqtt send payload :%s.\n",payload);
opts.onSuccess = onOptSuccess;
opts.onFailure = onOptFail;
opts.context = (void*)OPT_SEND;
......@@ -274,8 +279,6 @@ int KK_MQTT_SendMsg(char *topicName,const char *payload)
pubmsg.qos = QOS;
pubmsg.retained = 0;
//cJSON_Minify(payload);
INFO_PRINT("mqtt send payload :%s.\n",payload);
if(s_cloudStatus == DEVICE_OFFLINE){
ERROR_PRINT("Failed to start sendMessage, s_cloudStatus == DEVICE_OFFLINE\n");
return -1;
......
......@@ -3,5 +3,7 @@
#define KK_CCU_VERSION "1.1.0"
#define KK_VERSION_FILE_PATH "/app/ccuApps/VERSION"
#endif
......@@ -30,6 +30,8 @@
#include "kk_product.h"
#include "ccu_ver.h"
#include "com_api.h"
#include "kk_log.h"
char g_product_type[PRODUCT_TYPE_LEN]={0};
char g_product_code[PRODUCT_CODE_LEN]={0};
......@@ -163,12 +165,12 @@ time_t HAL_GetTime_s(char *outStr)
return t;
}
long long HAL_GetTime_ms(char *outStr)
long long HAL_GetTime_ms()
{
struct timeval tv;
gettimeofday(&tv, NULL);
sprintf(outStr,"%ld",tv.tv_sec * 1000 + tv.tv_usec / 1000);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
struct timeval begin;
gettimeofday(&begin,NULL);
long long nowTime = (long long)begin.tv_sec * 1000 + (long long)begin.tv_usec / 1000;
return nowTime;
}
......@@ -297,16 +299,6 @@ int HAL_GetDevice_Code(_OU_ char *dev_code)
dev_code[strlen(KK_CCU_ID)] = '\0';
return strlen(KK_CCU_ID);
}
int HAL_GetVersion(_OU_ char *version)
{
strncpy(version, KK_CCU_VERSION, strlen(KK_CCU_VERSION));
version[strlen(KK_CCU_VERSION)] = '\0';
return strlen(KK_CCU_VERSION);
}
/*
* This need to be same with app version as in uOTA module (ota_version.h)
......
LIBSO_TARGET := libkk_hal.so
\ No newline at end of file
LIBSO_TARGET := libkk_hal.so
CFLAGS += -I$(TOP_DIR)/common/api
\ No newline at end of file
......@@ -19,7 +19,7 @@ void HAL_SleepMs(_IN_ uint32_t ms);
uint32_t HAL_Get_IP(char ip_str[NETWORK_ADDR_LEN], const char *ifname);
time_t HAL_GetTime(void);
time_t HAL_GetTime_s(char *outStr);
long long HAL_GetTime_ms(char *outStr);
long long HAL_GetTime_ms();
int HAL_Snprintf(_IN_ char *str, const int len, const char *fmt, ...);
int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, va_list ap);
void *HAL_MutexCreate(void);
......
......@@ -28,16 +28,24 @@
#define MAC_ADDR_LEN (17+1)
#define SN_ADDR_LEN (32+1)
#define PRODUCT_TPYE "kk"
#define CCU_LAN "eth1"
#define KK_CCU_ID "CCU_77771"
#define KK_CCU_ID "CCU_77770"
#define KK_CCU_PRODUCTID "ccu_n12"
#define KK_GW_PRODUCTID "gateway_2"
#define KK_CCU_RANDOM "0000000000"
#define KK_CCU_NAME "NEW_CCU"
#define KK_DEVICE_MAP_FILE_PATH "/usr/kk/map/device_%s.json"
#define GET_CCUID_CMD "/usr/sbin/fw_printenv uuid -n"
#define KK_DEVICE_MAP_FILE_PATH "/data/kk/map/device_%s.json"
#define GET_CCUID_CMD "fw_printenv uuid -n"
#define GET_KEY_CMD "fw_printenv key -n"
#define KK_DB_FILE "/data/kk/kk_database.db"
#define TSL_SUBDEVICE_PATH_FILE "/data/kk/tsl/product_%s.json"
#define TSL_GATEWAY_PATH_FILE "/data/kk/tsl/gateway_%s.json"
#define TSL_CCU_PATH_FILE "/data/kk/tsl/ccu_%s.json"
#define TSL_SCENE_PATH_FILE "/data/kk/tsl/ccu_%s_scene.json"
#define OTA_IMG_PATH "/data/OTA/"
#define OTA_IMG_FILE "/data/OTA/app_squashfs.img"
#define OTA_IMG_FILE_MD5 "/data/OTA/app_squashfs.img.md5"
enum {
DEVICE_OFFLINE = 0,
DEVICE_ONLINE,
......
......@@ -6,9 +6,9 @@
#include "cJSON.h"
#include "kk_dm_api.h"
#include "kk_dm_msg.h"
#include <curl/curl.h>
#include "com_api.h"
#include "kk_log.h"
static dm_ota_ctx_t g_dm_ota_ctx;
......@@ -168,20 +168,190 @@ int dm_ota_get_ota_handle(void **handle)
return SUCCESS_RETURN;
}
enum{
OTA_STATE_DOWNLOAD_ING = 1,
OTA_STATE_DOWNLOAD_FAIL,
OTA_STATE_DOWNLOAD_OK,
OTA_STATE_FIRMWARE_TRANSFER,
OTA_STATE_FIRMWARE_OK,
OTA_STATE_UPGRADE_OK,
OTA_STATE_UPGRADE_FAIL,
};
static char *s_url = NULL;
int kk_publishProgress(int process,int state)
{
char productCode[PRODUCT_CODE_LEN] = {0};
char ccuID[PRODUCT_CODE_LEN] = {0};
char msgId[MSG_MAX_LEN] = {0};
HAL_GetProduct_Code(productCode);
HAL_Get_ccuid(ccuID);
iotx_report_id(msgId);
cJSON *info = cJSON_CreateObject();
cJSON_AddStringToObject(info, MSG_TYPE_STR, "/thing/event/otaProgress/post");
cJSON_AddStringToObject(info, MSG_DEVICE_CODE_STR, ccuID);
cJSON_AddStringToObject(info, MSG_PRODUCT_CODE_STR, productCode);
char *infff=cJSON_Print(info);
cJSON *payload = cJSON_CreateObject();
cJSON_AddStringToObject(payload, "desc", "success");
cJSON_AddStringToObject(payload, "version", "1.0");
cJSON_AddStringToObject(payload, "code", "0");
cJSON_AddStringToObject(payload, "msgId", msgId);
cJSON_AddStringToObject(payload, "identifier", "otaProgress");
cJSON_AddStringToObject(payload, "method", "thing.event.otaProgress.post");
cJSON *params = cJSON_CreateObject();
cJSON_AddStringToObject(params, "productId", productCode);
cJSON_AddNumberToObject(params, "state", state);
cJSON_AddNumberToObject(params, "process", process);
cJSON_AddItemToObject(payload, "params", params);
char *payload11=cJSON_Print(payload);
kk_sendData2app(infff,payload11,0);
free(payload11);
free(infff);
cJSON_Delete(payload);
cJSON_Delete(info);
return 0;
}
size_t receive_data(void *buffer, size_t size, size_t nmemb, FILE *file){
size_t r_size = fwrite(buffer, size, nmemb, file);;
return r_size;
}
int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
{
#if 1
char processBuf[12] = {0};
//printf("progress_callback clientp:%s,dltotal:%g,dlnow:%g,ultotal:%g,ulnow:%g\n",clientp,dltotal,dlnow,ultotal,ulnow);
if(dlnow > 0){
int process = (int)dlnow*100.0/dltotal;
if(process % 10 == 0){
//sprintf(processBuf,"%d",process);
INFO_PRINT("progress_callback ,process:%d\n",process);
kk_publishProgress(process,OTA_STATE_DOWNLOAD_ING);
//lua_event_notify((char*)"ota_process",(char*)"process", processBuf);
}
}
#endif
return 0;
}
void dm_ota_start(char *url)
{
int res = 0;
char *progress_data = "* ";
CURL* curl = curl_easy_init();
if (NULL == curl){
return ;
}
FILE *file = fopen(OTA_IMG_FILE,"w");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, receive_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)file);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION , progress_callback);
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, progress_data);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 3000);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 180);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); //支持服务器跳转
curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L); // enable TCP keep-alive for this transfer
curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L); // keep-alive idle time to 120 seconds
curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L); // interval time between keep-alive probes: 60 seconds
res = curl_easy_perform(curl);
if(res != CURLE_OK){
kk_publishProgress(0,OTA_STATE_DOWNLOAD_FAIL);
INFO_PRINT("curl_easy_perform error,res:%d\n",res);
}
curl_easy_cleanup(curl);
fclose(file);
}
void dm_ota_start_MD5(char *url)
{
int res = 0;
char *md5_url = malloc(strlen(url)+10);
if(md5_url == NULL){
return;
}
memset(md5_url,0x0,strlen(url)+10);
sprintf(md5_url,"%s.md5",url);
CURL* curl = curl_easy_init();
if (NULL == curl){
free(md5_url);
return ;
}
printf("--------->url md5:%s\n",md5_url);
FILE *file = fopen(OTA_IMG_FILE_MD5,"w");
curl_easy_setopt(curl, CURLOPT_URL, md5_url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, receive_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)file);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
//curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION , progress_callback);
//curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, progress_data);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 3000);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 180);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); //支持服务器跳转
curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L); // enable TCP keep-alive for this transfer
curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L); // keep-alive idle time to 120 seconds
curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L); // interval time between keep-alive probes: 60 seconds
res = curl_easy_perform(curl);
if(res != CURLE_OK){
INFO_PRINT("curl_easy_perform error,res:%d\n",res);
kk_publishProgress(0,OTA_STATE_DOWNLOAD_FAIL);
}
curl_easy_cleanup(curl);
fclose(file);
free(md5_url);
}
void dm_ota_handle(void *data){
printf("dm_ota_handle ================== [%s]\n",(char*)data);
cJSON *json,*info_root,*info;
cJSON *typeJson;
cJSON *json,*url,*info;
cJSON *params;
cJSON *payload;
cJSON *product_type,*device_code;
json=cJSON_Parse(data);
if (json == NULL) {
printf("Error before: [%s]\n","cJSON_Parse");
return;
}
printf("------------------------------5\n");
payload = cJSON_GetObjectItem(json, MSG_PAYLOAD_STR);
if(payload != NULL){
params = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(params == NULL){
return;
}
printf("------------------------------2\n");
url = cJSON_GetObjectItem(params, "url");
if(url == NULL){
return;
}
INFO_PRINT("OTA URL :%s\n",url->valuestring);
if(s_url != NULL){
free(s_url);
s_url = NULL;
}
s_url = malloc(strlen(url->valuestring)+10);
if(s_url == NULL){
return;
}
memset(s_url,0x0,strlen(url->valuestring)+10);
strcpy(s_url,url->valuestring);
dm_ota_start(s_url);
dm_ota_start_MD5(s_url);
system("sync");
kk_publishProgress(100,OTA_STATE_DOWNLOAD_OK);
char CMD[128] = {0};
sprintf(CMD,"/app/ccuApps/upgrade %s %s",OTA_IMG_FILE,OTA_IMG_FILE_MD5);
INFO_PRINT("------------------------->CMD:%s\n",CMD);
system(CMD);
sleep(1);
kk_publishProgress(100,OTA_STATE_UPGRADE_OK);
sleep(2);
system("reboot -f");
}
#if 0
info_root = cJSON_GetObjectItem(json, MSG_INFO_STR);
info = cJSON_Parse(info_root->valuestring);
typeJson = cJSON_GetObjectItem(info, MSG_TYPE_STR);
......@@ -202,8 +372,9 @@ void dm_ota_handle(void *data){
}else {
printf("invaild ota type: [%d]\n", atoi(typeJson->valuestring));
}
#endif
cJSON_Delete(json);
cJSON_Delete(info);
//cJSON_Delete(info);
}
int dm_ota_check(void* payload, int len, iotx_ota_topic_types_t type){
......@@ -230,6 +401,7 @@ int dm_ota_yield(int timeout_ms)
if (dm_queue_msg_next3(&data) == SUCCESS_RETURN) {
//dm_queue_msg_t *msg = (dm_queue_msg_t *)data;
printf("dm_ota_yield call \n");
printf("------------------------------4\n");
dm_ota_handle(data);
free(data);
......
......@@ -355,10 +355,11 @@ void kk_dm_ota_report_version(_IN_ int devid, char *version){
}
void kk_dm_ota_send(void *data, int len){
dm_queue_msg_insert3(data);
//dm_queue_msg_insert3(data);
if (data != NULL){
void* buf = malloc(len);
memcpy(buf, data, len);
printf("------------------------------1\n");
int res = dm_queue_msg_insert3((void *)buf);
if (res != SUCCESS_RETURN) {
free(buf);
......
......@@ -472,13 +472,11 @@ int dm_mgr_check_heartbeat_timeout(time_t timestamp)
if(search_node->devid == KK_DM_DEVICE_CCU_DEVICEID){
continue;
}
#if 0
printf("[%s][%d]search_node->productCode:%s\n",__FUNCTION__,__LINE__,search_node->productCode);
printf("[%s][%d]search_node->hb_timeout:%d\n",__FUNCTION__,__LINE__,search_node->hb_timeout);
printf("[%s][%d]search_node->isOffline:%d\n",__FUNCTION__,__LINE__,search_node->isOffline);
printf("[%s][%d]search_node->timestamp:%d\n",__FUNCTION__,__LINE__,search_node->timestamp);
printf("[%s][%d]timestamp:%d\n",__FUNCTION__,__LINE__,timestamp);
#endif
//printf("[%s][%d]search_node->productCode:%s\n",__FUNCTION__,__LINE__,search_node->productCode);
//printf("[%s][%d]search_node->hb_timeout:%d\n",__FUNCTION__,__LINE__,search_node->hb_timeout);
//printf("[%s][%d]search_node->isOffline:%d\n",__FUNCTION__,__LINE__,search_node->isOffline);
//printf("[%s][%d]search_node->timestamp:%d\n",__FUNCTION__,__LINE__,search_node->timestamp);
//printf("[%s][%d]timestamp:%d\n",__FUNCTION__,__LINE__,timestamp);
if((timestamp - search_node->timestamp) >= search_node->hb_timeout){
if(search_node->isOffline != KK_DEV_OFFLINE){
dm_mgr_set_dev_onoffline(search_node,1);
......@@ -685,9 +683,9 @@ int iotx_report_id(char *msgId)
if(msgId == NULL){
return INVALID_PARAMETER;
}
char timerStr[16] = {0};
HAL_GetTime_ms(timerStr);
sprintf(msgId,"6c0645c4-f6d6-46b2-b11e-%s",timerStr);
//char timerStr[16] = {0};
//HAL_GetTime_ms();
sprintf(msgId,"6c0645c4-f6d6-46b2-b11e-%lld",HAL_GetTime_ms());
return SUCCESS_RETURN;
}
......
......@@ -48,7 +48,7 @@ const char DM_MSG_INFO[] DM_READ_ONLY;
#define KK_ONLINE_TOPIC_REPLY "/thing/status/online_reply"
#define KK_THING_SERVICE_PROPERTY_SET "/thing/service/property/set"
#define KK_THING_SERVICE_PROPERTY_GET "/thing/service/property/get"
#define KK_THING_OTA_DEVICE_UPGRADE "/ota/device/upgrade"
#define KK_THING_OTA_DEVICE_UPGRADE "/thing/service/upgrade"
#define KK_THING_CLOUDSTATE_MSG "/thing/ccu/cloudstate_reply"
#define KK_THING_TOPO_ADD_MSG "/thing/topo/add"
#define KK_THING_TOPO_BATCH_ADD_MSG "/thing/topo/batch_add"
......@@ -94,6 +94,7 @@ const char DM_MSG_INFO[] DM_READ_ONLY;
#define KK_THING_SERVICE_BINDSCENE "/thing/service/bindScene"
#define KK_THING_SERVICE_UNBINDSBUTTTON "/thing/service/unbindButton"
#define KK_THING_SERVICE_ACTIVEBUTTON "/thing/service/activeButton"
#define KK_THING_SERVICE_GETCCUVERSION "/thing/service/getCCUVersion"
void kk_sendData2app(void *info, void *payload,int isAsync);
int dm_msg_thing_sub_register(_IN_ char productCode[DEVICE_CODE_MAXLEN], _IN_ char deviceCode[DEVICE_CODE_MAXLEN],
......
......@@ -356,7 +356,7 @@ int dm_queue_msg_insert3(void *data)
INIT_LIST_HEAD(&node->linked_list);
ctx->msg_list3.size++;
list_add_tail(&node->linked_list, &ctx->msg_list3.message_list);
printf("------------------------------2\n");
_dm_queue_unlock3();
return SUCCESS_RETURN;
}
......@@ -383,7 +383,7 @@ int dm_queue_msg_next3(void **data)
*data = node->data;
free(node);
printf("------------------------------3\n");
_dm_queue_unlock3();
return SUCCESS_RETURN;
}
......
......@@ -925,6 +925,105 @@ static int kk_service_getGuardSensors_handle(cJSON *param,cJSON *msgId)
return res;
}
/************************************************************
*功能描述:获取主机版本信息
*输入参数:params:云端下发数据,包含场景Id等
msgId:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static int kk_service_getCCUVersion_handle(cJSON *param,cJSON *msgId)
{
int res = 0;
int i = 0,num = 0;
SensorType_t *pList = NULL;
char version[VERSION_MAXLEN] = {0};
if(param == NULL || msgId == NULL){
return INVALID_PARAMETER;
}
cJSON *deviceCode = cJSON_GetObjectItem(param, MSG_DEVICE_CODE_STR);
if(deviceCode == NULL){
return FAIL_RETURN;
}
cJSON *productCode = cJSON_GetObjectItem(param, MSG_PRODUCT_CODE_STR);
if(productCode == NULL){
return FAIL_RETURN;
}
cJSON *info = cJSON_CreateObject();
cJSON_AddStringToObject(info, MSG_TYPE_STR, "/thing/service/getCCUVersion_reply");
cJSON_AddStringToObject(info, MSG_DEVICE_CODE_STR, deviceCode->valuestring);
cJSON_AddStringToObject(info, MSG_PRODUCT_CODE_STR, productCode->valuestring);
char *infff=cJSON_Print(info);
cJSON *payload = cJSON_CreateObject();
cJSON_AddStringToObject(payload, "desc", "success");
cJSON_AddStringToObject(payload, "version", "1.0");
cJSON_AddStringToObject(payload, "code", "0");
cJSON_AddStringToObject(payload, "msgId", msgId->valuestring);
cJSON *Item = cJSON_CreateObject();
HAL_GetVersion(version);
cJSON_AddStringToObject(Item, "currentDbVersion", "1.0");
cJSON_AddStringToObject(Item, "downloadedVersion", version);
cJSON_AddStringToObject(Item, "currentVersion", version);
cJSON_AddStringToObject(Item, "firmwareVersion", version);
cJSON_AddItemToObject(payload, "params", Item);
char *payload11=cJSON_Print(payload);
kk_sendData2app(infff,payload11,0);
free(payload11);
free(infff);
cJSON_Delete(payload);
cJSON_Delete(info);
return res;
}
/************************************************************
*功能描述:获取主机版本信息
*输入参数:params:云端下发数据,包含场景Id等
msgId:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static int kk_service_upgrade_reply(cJSON *param,cJSON *msgId)
{
int res = 0;
int i = 0,num = 0;
SensorType_t *pList = NULL;
char version[VERSION_MAXLEN] = {0};
if(param == NULL || msgId == NULL){
return INVALID_PARAMETER;
}
cJSON *deviceCode = cJSON_GetObjectItem(param, MSG_DEVICE_CODE_STR);
if(deviceCode == NULL){
return FAIL_RETURN;
}
cJSON *productCode = cJSON_GetObjectItem(param, MSG_PRODUCT_CODE_STR);
if(productCode == NULL){
return FAIL_RETURN;
}
cJSON *info = cJSON_CreateObject();
cJSON_AddStringToObject(info, MSG_TYPE_STR, "/ota/device/upgrade_reply");
cJSON_AddStringToObject(info, MSG_DEVICE_CODE_STR, deviceCode->valuestring);
cJSON_AddStringToObject(info, MSG_PRODUCT_CODE_STR, productCode->valuestring);
char *infff=cJSON_Print(info);
cJSON *payload = cJSON_CreateObject();
cJSON_AddStringToObject(payload, "desc", "success");
cJSON_AddStringToObject(payload, "version", "1.0");
cJSON_AddStringToObject(payload, "code", "0");
cJSON_AddStringToObject(payload, "msgId", msgId->valuestring);
cJSON *Item = cJSON_CreateObject();
cJSON_AddItemToObject(payload, "params", Item);
char *payload11=cJSON_Print(payload);
kk_sendData2app(infff,payload11,0);
free(payload11);
free(infff);
cJSON_Delete(payload);
cJSON_Delete(info);
return res;
}
/************************************************************
*功能描述:情景面板绑定处理
*输入参数:params:云端下发数据
msgId:消息Id
......@@ -1114,7 +1213,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
s_CloudStatusRecv = 1;
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *state = cJSON_GetObjectItem(paramStr, MSG_IOTClOUDSTATE_STR);
s_CloudStatus = atoi(state->valuestring);
dm_mgr_dev_node_t *node = NULL;
dm_mgr_search_dev_by_devid(KK_DM_DEVICE_CCU_DEVICEID,&node);
......@@ -1132,16 +1231,26 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
HAL_Get_ccuid(ccuid);
kk_property_db_update(ccuid);
if(s_CloudStatus){
if(s_CloudStatus != atoi(state->valuestring) && atoi(state->valuestring) == 1){
node->isOffline = KK_DEV_ONLINE;
dm_mgr_upstream_thing_sub_register(KK_DM_DEVICE_CCU_DEVICEID);
iotx_dm_dev_online(KK_DM_DEVICE_CCU_DEVICEID);//first online,report the online status
usleep(200000);
dm_msg_ccu_property_post(node);
kk_load_subDevice();
}
}else if (strstr(typeJson->valuestring,KK_THING_OTA_DEVICE_UPGRADE)){
s_CloudStatus = atoi(state->valuestring);
}else if (strcmp(typeJson->valuestring,"/upgrade") == 0){
INFO_PRINT("ota upgrade... \n");
char tmp[256] = {0};
snprintf(tmp, sizeof(tmp), "rm -rf %s", OTA_IMG_PATH);
system(tmp);
memset(tmp, 0x00, sizeof(tmp));
snprintf(tmp, sizeof(tmp), "mkdir -p %s", OTA_IMG_PATH);
system(tmp);
kk_dm_ota_send(data, strlen(data)+1);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_upgrade_reply(info_root,msgId);
}else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_REBOOT) == 0){
INFO_PRINT(" reboot called!!!\n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
......@@ -1271,6 +1380,11 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
kk_scene_execute_quickpanel(btnId,deviceCode->valuestring);
}
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_GETCCUVERSION) == 0){
INFO_PRINT("GET CCU VERISON \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_getCCUVersion_handle(info_root,msgId);
}
else{
INFO_PRINT("Error msgtype!!! \n");
}
......
......@@ -107,7 +107,7 @@ static int kk_subDev_db_Init(void)
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
static int _kk_load_subDevice(void)
int kk_load_subDevice(void)
{
const char *searchCmd = "select * from SubDeviceInfo;";
sqlite3_stmt *stmt;
......@@ -177,7 +177,7 @@ int kk_subDb_init(void)
ERROR_PRINT("[%s][%d]kk_wlist_db_Init FAIL!!!\n",__FUNCTION__,__LINE__);
}
_kk_load_subDevice();
//_kk_load_subDevice();
return SUCCESS_RETURN;
}
/************************************************************
......
......@@ -23,6 +23,7 @@ int kk_subDev_check_scene_support(const char *deviceCode);
int kk_subDev_set_action_by_productType(const char *productType,const char *sceneId,const char *propertyName,const char *propertyValue,const char *type);
int kk_subDev_update_offline(int isOffline,const char *deviceCode);
int kk_subDev_getSensors_reply(SensorType_t*list);
int kk_load_subDevice(void);
enum{
DB_SUB_IDX = 0,
DB_SUB_ONLINE,
......
......@@ -11,7 +11,7 @@ CFLAGS += -I$(TOP_DIR)/common/sqlite
CFLAGS += -I$(TOP_DIR)/src/tsl/tsl_handle
LDFLAGS += -lapi_com -liot_cjson -lkk_tsl
LDFLAGS += -lm -lkk_hal
LDFLAGS += -lsqlite -ldl
LDFLAGS += -lsqlite -ldl -lcurl
ifeq ($(CONFIG_MODEL),x86)
LDFLAGS += -L$(TOP_DIR)/common/nanomsg -lnanomsg_ubuntu -lanl
......
......@@ -38,6 +38,7 @@
#include "kk_history_db.h"
#include "kk_scene_handle.h"
#include "dm_ota.h"
#include "ccu_ver.h"
int g_timezone = 8;
char * g_filerToPlatTable[] =
{
......@@ -65,6 +66,31 @@ char * g_filerToPlatTable[] =
(char *){KK_THING_SERVICE_ACTIVEBUTTON},
};
static char s_ccuid[DEVICE_CODE_LEN] = {0};
static char s_Version[VERSION_MAXLEN] = {0};
static void HAL_Ccuid_version(void)
{
FILE *fp;
if(!(fp = fopen(KK_VERSION_FILE_PATH,"r")))
{
ERROR_PRINT("can't open the file tslPath:%s\n",KK_VERSION_FILE_PATH);
return ;
}
fread(s_Version, 1, VERSION_MAXLEN, fp);
if(strlen(s_Version) == 0){
strncpy(s_Version, KK_CCU_VERSION, strlen(KK_CCU_VERSION));
}
INFO_PRINT("HAL_Ccuid_version version:%s!!!\n",s_Version);
fclose(fp);
return;
}
int HAL_GetVersion(_OU_ char *version)
{
strncpy(version, s_Version, strlen(s_Version));
version[strlen(s_Version)] = '\0';
return strlen(s_Version);
}
int HAL_Get_ccuid(_OU_ char *device_code)
{
strncpy(device_code, s_ccuid, strlen(s_ccuid));
......@@ -626,10 +652,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
if(jsonPay == NULL) goto error;
proCode = cJSON_GetObjectItem(jsonPay, MSG_PRODUCT_CODE_STR);
devCode = cJSON_GetObjectItem(jsonPay, MSG_DEVICE_CODE_STR);
//mac = cJSON_GetObjectItem(jsonPay, "mac");
mac = cJSON_GetObjectItem(jsonPay, MSG_DEVICE_CODE_STR);
mac = cJSON_GetObjectItem(jsonPay, "mac");
if (proCode == NULL || devCode == NULL || mac == NULL){
ERROR_PRINT("productCode, deviceCode mac params are error\n");
goto error;
......@@ -1150,7 +1173,7 @@ void *ccu_property_monitor(void *args)
return NULL;
}
sqlite3 *g_kk_pDb;
#define KK_DB_FILE "/usr/kk/kk_database.db"
/************************************************************
*功能描述:主机数据库句柄创建
......@@ -1186,6 +1209,7 @@ int main(const int argc, const char **argv)
open("midware",LOG_PID,LOG_USER);
memset(mid_ctx, 0, sizeof(mid_ctx_t));
HAL_Ccuid_version();
HAL_Ccuid_init();
kk_sqlite_init();
kk_tsl_api_init();
......
......@@ -6,11 +6,6 @@
#include "kk_log.h"
#include "kk_tsl_parse.h"
#define TSL_SUBDEVICE_PATH_FILE "/usr/kk/tsl/product_%s.json"
#define TSL_GATEWAY_PATH_FILE "/usr/kk/tsl/gateway_%s.json"
#define TSL_CCU_PATH_FILE "/usr/kk/tsl/ccu_%s.json"
#define TSL_SCENE_PATH_FILE "/usr/kk/tsl/ccu_%s_scene.json"
char* kk_load_json(const char *productCode,int type)
{
FILE *fp;
......
This diff is collapsed.
#!/bin/sh
nanomsg_File="/app/ccuApps/lib/libnanomsg.so.5"
ev_File="/app/ccuApps/lib/libev.so.4"
sqlite_File="/app/ccuApps/lib/libsqlite3.so.0"
run_Dir="/data/kk"
tsl_Dir="${run_Dir}/tsl"
#dev_cfg_Dir="${run_Dir}/dev_config_table"
#cd /sbin/
#insmod /sbin/ssd1306-revision.ko
#/sbin/oled >/dev/null 2>&1 &
#sleep 1
if [ ! -d "$run_Dir" ]; then
mkdir ${run_Dir}
fi
if [ ! -d "$tsl_Dir" ]; then
cp -rf /app/ccuApps/tsl ${run_Dir}/
fi
cd /app/ccuApps/lib
if [ ! -f "$nanomsg_File" ]; then
ln -sf /app/ccuApps/lib/libnanomsg.so /lib/libnanomsg.so.5
fi
if [ ! -f "$ev_File" ]; then
ln -sf /app/ccuApps/lib/libev.so /lib/libev.so.4
fi
if [ ! -f "$sqlite_File" ]; then
ln -sf /app/ccuApps/lib/libsqlite3.so /lib/libsqlite3.so.0
fi
export LD_LIBRARY_PATH=/app/ccuApps/lib
/app/ccuApps/bin/kk_midware &
sleep 3
/app/ccuApps/bin/kk_cloud &
sleep 1
#/home/kk/process_check.sh >/dev/null 2>&1 &
/app/ccuApps/bin/smarthome_z3gw_nx5 -r1 -l3 --device-def=/app/ccuApps/kk_device_def.json --db=/data/kk/kk_z3gw.db --uart=/dev/ttyS1&
sleep 1
ntpd -n -q -d -p stdtime.gov.hk &
exit 0
\ No newline at end of file
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
nanomsg_File="/home/kk/lib/libnanomsg.so.5"
ev_File="/home/kk/lib/libev.so.4"
cd /sbin/
insmod /sbin/ssd1306-revision.ko
/sbin/oled >/dev/null 2>&1 &
sleep 1
export LD_LIBRARY_PATH=/home/kk/lib
cd /home/kk/lib
if [ ! -f "$nanomsg_File" ]; then
ln libnanomsg.so libnanomsg.so.5
fi
if [ ! -f "$ev_File" ]; then
ln libev.so libev.so.4
fi
CCU_ID=`cat /etc/dropbear/accessory/hj/hj_ccuid`
/sbin/logread -f -r 120.55.149.201 514 -p /var/run/logread.cloud_log.pid -u -h $CCU_ID >/dev/null 2>&1 &
/sbin/logread -f -e "ccu_err_info" -F /etc/dropbear/accessory/hj/err.log -p /var/run/logread.err_log.pid -S 512 >/dev/null 2>&1 &
sleep 1
/home/kk/run.sh >/dev/null 2>&1 &
sleep 10
/home/kk/process_check.sh >/dev/null 2>&1 &
cd /sbin
/sbin/logd-check.sh >/dev/null 2>&1 &
sleep 1
ntpd -n -q -d -p stdtime.gov.hk &
exit 0
......@@ -208,15 +208,20 @@ package:
cp -rf $(TOP_DIR)/output/release/bin/* $(TOP_DIR)/$(releaseDir)/bin
cp -rf $(TOP_DIR)/process_check.sh $(TOP_DIR)/$(releaseDir)/
cp -rf $(TOP_DIR)/onboot.sh $(TOP_DIR)/$(releaseDir)/
cp -rf $(TOP_DIR)/VERSION $(TOP_DIR)/$(releaseDir)/
#cp -rf $(TOP_DIR)/platform/zigbee/app/builder/Z3GatewayHost/ZB/dev_config_table $(TOP_DIR)/$(releaseDir)/
#cp -rf $(TOP_DIR)/platform/zigbee/app/builder/Z3GatewayHost/ZB/dev_map_table.json $(TOP_DIR)/$(releaseDir)/dev_config_table/
ifeq ($(CONFIG_MODEL),ubuntu)
cp -rf $(TOP_DIR)/common/nanomsg/libnanomsg_ubuntu.so $(TOP_DIR)/$(releaseDir)/lib/libnanomsg.so.5
cp -rf $(TOP_DIR)/common/ev/libev_ubuntu.so $(TOP_DIR)/$(releaseDir)/lib
else ifeq ($(CONFIG_MODEL),nx5)
cp -rf $(TOP_DIR)/common/nanomsg/libnanomsg_nx5.so $(TOP_DIR)/$(releaseDir)/lib
cp -rf $(TOP_DIR)/common/ev/libev_nx5.so $(TOP_DIR)/$(releaseDir)/lib
cp -rf $(TOP_DIR)/common/sqlite/libsqlite3.so $(TOP_DIR)/$(releaseDir)/lib
cp -rf $(TOP_DIR)/common/nanomsg/libnanomsg_nx5.so $(TOP_DIR)/$(releaseDir)/lib/libnanomsg.so
cp -rf $(TOP_DIR)/common/ev/libev_nx5.so $(TOP_DIR)/$(releaseDir)/lib/libev.so
cp -rf $(TOP_DIR)/common/sqlite/libsqlite3_nx5.so $(TOP_DIR)/$(releaseDir)/lib/libsqlite3.so
cp -rf $(TOP_DIR)/nx5_soc_gw/smarthome_z3gw_nx5 $(TOP_DIR)/$(releaseDir)/bin/
cp -rf $(TOP_DIR)/nx5_soc_gw/kk_device_def.json $(TOP_DIR)/$(releaseDir)/
cp -rf $(TOP_DIR)/upgrade $(TOP_DIR)/$(releaseDir)/
else
cp -rf $(TOP_DIR)/common/nanomsg/libnanomsg.so $(TOP_DIR)/$(releaseDir)/lib
cp -rf $(TOP_DIR)/common/ev/libev.so $(TOP_DIR)/$(releaseDir)/lib
......
{
"schema": "https://iot-ap.ikonke.com/model/product_3034.json",
"productType": "airConditioning",
"version": "1.0",
"profile": {
"heartbeat": "3000",
"productCode": "3034",
......@@ -16,7 +17,7 @@
"method": "thing.service.property.set",
"inputData": [
{
"identifier": "TargetTemperature",
"identifier": "Temperature",
"name": "目标温度",
"dataType": {
"type": "double",
......@@ -46,10 +47,10 @@
"dataType": {
"type": "enum",
"specs": {
"1": "自动",
"2": "高档",
"0": "自动",
"4": "高档",
"3": "中档",
"4": "低档"
"2": "低档"
}
}
},
......@@ -103,7 +104,7 @@
"method": "thing.service.property.get",
"inputData": [
"ChildLockState",
"TargetTemperature",
"Temperature",
"CurrentTemperature",
"PowerSwitch",
"WindSpeed",
......@@ -112,7 +113,7 @@
],
"outputData": [
{
"identifier": "TargetTemperature",
"identifier": "Temperature",
"name": "目标温度",
"dataType": {
"type": "double",
......@@ -156,10 +157,10 @@
"dataType": {
"type": "enum",
"specs": {
"1": "自动",
"2": "高档",
"0": "自动",
"4": "高档",
"3": "中档",
"4": "低档"
"2": "低档"
}
}
},
......@@ -219,7 +220,7 @@
}
},
{
"identifier": "TargetTemperature",
"identifier": "Temperature",
"name": "目标温度",
"accessMode": "rw",
"required": true,
......@@ -258,10 +259,10 @@
"dataType": {
"type": "enum",
"specs": {
"1": "自动",
"2": "高档",
"0": "自动",
"4": "高档",
"3": "中档",
"4": "低档"
"2": "低档"
}
}
},
......@@ -320,7 +321,7 @@
"method": "thing.event.property.post",
"outputData": [
{
"identifier": "TargetTemperature",
"identifier": "Temperature",
"name": "目标温度",
"dataType": {
"type": "double",
......@@ -364,10 +365,10 @@
"dataType": {
"type": "enum",
"specs": {
"1": "自动",
"2": "高档",
"0": "自动",
"4": "高档",
"3": "中档",
"4": "低档"
"2": "低档"
}
}
},
......
erase_cmd="mtd_debug erase /dev/mtd6 0x0 0x01000000"
TARGET_FILE="/data/upgrade.sh"
upgrade_cmd="nandwrite -a /dev/mtd6 /data/OTA/app_squashfs.img"
check_md5="md5sum -c $2"
cd /data/OTA
while true
do
if [[ -f $1 ]] && [[ -f $2 ]];
then
check_result=$(eval $check_md5)
echo "$check_result"
result=$(echo $check_result | grep "OK")
if [[ "$result" != "" ]]
then
tar -zxf $1 -C /data/OTA/
rm $TARGET_FILE -f
echo "echo 'now eval upgrade cmd by upgrade.sh'" >> $TARGET_FILE
echo "mtd_debug erase /dev/mtd6 0x0 0x01000000" >> $TARGET_FILE
echo "nandwrite -a /dev/mtd6 /data/OTA/app_squashfs.img" >> $TARGET_FILE
echo "rm -rf /data/OTA" >> $TARGET_FILE
echo "reboot -f" >> $TARGET_FILE
echo "now eval upgrade cmd"
chmod 777 $TARGET_FILE
sync
eval $erase_cmd
eval $upgrade_cmd
rm -rf /data/OTA
fi
else
echo "check load fail"
fi
echo "where is error ?"
exit 0
done
[global]
strict init = true
buffer min = 1024
buffer max = 2MB
rotate lock file = /tmp/zlog.lock
default format = "%d.%us %-6V (%c:%F:%L) - %m%n"
file perms = 600
[levels]
TRACE = 10
CRIT = 130, LOG_CRIT
[formats]
simple = "%m%n"
normal = "%d %-6V (%f:%L) %m%n"
[rules]
*.INFO >stdout; normal
*.* "/home/kk/share/%c.log", 1MB*2; normal
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment