Add mijia support
This commit is contained in:
parent
b8320cc85a
commit
3424d125bf
|
@ -25,6 +25,7 @@
|
||||||
#include "skins_res.h"
|
#include "skins_res.h"
|
||||||
#include "server_addr.h"
|
#include "server_addr.h"
|
||||||
#include "boardlink_iot.h"
|
#include "boardlink_iot.h"
|
||||||
|
#include "mijia_iot.h"
|
||||||
|
|
||||||
static MOD_INFO_TABLE g_ModInfo;
|
static MOD_INFO_TABLE g_ModInfo;
|
||||||
static uv_timer_t g_tmTest;
|
static uv_timer_t g_tmTest;
|
||||||
|
@ -1919,14 +1920,17 @@ int main(int argc, char **argv)
|
||||||
uv_loop_t* pLoop = GetDBusDefaultLoop();
|
uv_loop_t* pLoop = GetDBusDefaultLoop();
|
||||||
int modIdx = -1;
|
int modIdx = -1;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
char base64code[] = {0xCE, 0xDE, 0xCF, 0xDF, 0x57, 0x69, 0x46, 0x69, 0xC4, 0xC4, 0xBC,
|
||||||
|
0xD2, 0xC7, 0xBF, 0xB0, 0xA1, 0xC0, 0xB6, 0xCF, 0xE8};
|
||||||
|
|
||||||
|
#if 0
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
|
|
||||||
memset(&tm, 0, sizeof(struct tm));
|
memset(&tm, 0, sizeof(struct tm));
|
||||||
strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm);
|
strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm);
|
||||||
strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &tm);
|
strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &tm);
|
||||||
puts(buf);
|
puts(buf);
|
||||||
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
i = GetServerModeFromCC(PUBLISH_MODE, &ret);
|
i = GetServerModeFromCC(PUBLISH_MODE, &ret);
|
||||||
|
|
||||||
|
@ -2001,7 +2005,20 @@ int main(int argc, char **argv)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_EX(LOG_Debug, "Base64:[%s]\n", EvpBase64Encode(base64code));
|
||||||
|
|
||||||
SetHBLAutoExit(TRUE);
|
SetHBLAutoExit(TRUE);
|
||||||
|
|
||||||
|
if(modIdx == 20)
|
||||||
|
{
|
||||||
|
#ifndef PLATFORM_CPU
|
||||||
|
if(MijiaIoT_Init("11672758", "DH5Z7KOWWsqdwW5J") == 0)
|
||||||
|
{
|
||||||
|
MijiaIoT_ServerStart();
|
||||||
|
MijiaIoT_UnBindDevice();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
//SysPointMarkInit(NULL, -1, -1);
|
//SysPointMarkInit(NULL, -1, -1);
|
||||||
|
|
||||||
//test_task_new(__uvThreadSysPointUpload, NULL);
|
//test_task_new(__uvThreadSysPointUpload, NULL);
|
||||||
|
|
|
@ -0,0 +1,199 @@
|
||||||
|
#ifndef PLATFORM_CPU
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#if defined(PLATFORM_R16) || defined(PLATFORM_R311)
|
||||||
|
#include "log.h"
|
||||||
|
#include "libuv_dbus.h"
|
||||||
|
#include "mijia_iot.h"
|
||||||
|
#else
|
||||||
|
#include <uvdbus/log.h>
|
||||||
|
#include <uvdbus/libuv_dbus.h>
|
||||||
|
#include <uvdbus/mijia_iot.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GET_DID_CMD ("cat /mnt/UDISK/miio/device.conf | grep did= | cut -d \"=\" -f2")
|
||||||
|
#define GET_KEY_CMD ("cat /mnt/UDISK/miio/device.conf | grep key= | cut -d \"=\" -f2")
|
||||||
|
#define GET_MAC_CMD ("cat /mnt/UDISK/miio/device.conf | grep mac= | cut -d \"=\" -f2")
|
||||||
|
#define GET_WLAN_MAC_CMD ("ifconfig wlan0 | grep HWaddr | awk \'{print $5}\'")
|
||||||
|
|
||||||
|
#define MIJIA_CFG_FILE ("/mnt/UDISK/miio/device.conf")
|
||||||
|
#define MIJIA_BIND_FILE ("/mnt/UDISK/miio/device.token")
|
||||||
|
#define MIJIA_SVR_FILE "/usr/bin/miio_client"
|
||||||
|
|
||||||
|
#define MIJIA_CFG_FMT "# did must be a unsigned int\n"\
|
||||||
|
"# key must be a string\n" \
|
||||||
|
"#\n" \
|
||||||
|
"did=%s\n" \
|
||||||
|
"key=%s\n" \
|
||||||
|
"vendor=163\n" \
|
||||||
|
"mac=%s\n" \
|
||||||
|
"# model max len 23\n" \
|
||||||
|
"model=163.wifispeaker.a1\n"
|
||||||
|
|
||||||
|
static int __mijia_InitCfgFile(const char* pDid, const char* pKey, char* pMacAddr)
|
||||||
|
{
|
||||||
|
char* pCfgContent = NULL;
|
||||||
|
FILE* pFile = NULL;
|
||||||
|
|
||||||
|
if(pKey == NULL || strlen(pKey) == 0)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "Error Input pKey params: %s\n", SAFE_STRING_VALUE(pKey));
|
||||||
|
return -ERR_INPUT_PARAMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pDid == NULL || strlen(pDid) == 0)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "Error Input pDid params: %s\n", SAFE_STRING_VALUE(pDid));
|
||||||
|
return -ERR_INPUT_PARAMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
pFile = fopen(MIJIA_CFG_FILE, "w+");
|
||||||
|
|
||||||
|
if(pFile == NULL)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "Create File %s Error\n", MIJIA_CFG_FILE);
|
||||||
|
return -ERR_CREATE_CFG_FILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
pCfgContent = malloc(1024);
|
||||||
|
|
||||||
|
if(pCfgContent == NULL)
|
||||||
|
{
|
||||||
|
fclose(pFile);
|
||||||
|
LOG_EX(LOG_Error, "Malloc Error\n");
|
||||||
|
return -ERR_MALLOC_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(pCfgContent, MIJIA_CFG_FMT, pDid, pKey, pMacAddr);
|
||||||
|
fwrite(pCfgContent, 1, strlen(pCfgContent), pFile);
|
||||||
|
|
||||||
|
LOG_EX(LOG_Debug, "Create Mijia Configure File:\n%s\n", pCfgContent);
|
||||||
|
|
||||||
|
fclose(pFile);
|
||||||
|
free(pCfgContent);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int MijiaIoT_Init(const char* pDid, const char* pKey)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
char* pMacAddr = NULL;
|
||||||
|
char* pCfgDid = NULL;
|
||||||
|
char* pCfgKey = NULL;
|
||||||
|
|
||||||
|
ret = GetShellExecResult(GET_WLAN_MAC_CMD, &pMacAddr);
|
||||||
|
|
||||||
|
if(ret != 0 || pMacAddr == NULL)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "Run Cmd [%s] Error: %d\n", GET_WLAN_MAC_CMD, ret);
|
||||||
|
return -ERR_READ_FILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strlen(pMacAddr) == 0)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "Get Mac Error: %s\n", pMacAddr);
|
||||||
|
free(pMacAddr);
|
||||||
|
return -ERR_NO_ITEMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!IsFileExists(MIJIA_CFG_FILE))
|
||||||
|
{
|
||||||
|
__mijia_InitCfgFile(pDid, pKey, pMacAddr);
|
||||||
|
free(pMacAddr);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = GetShellExecResult(GET_DID_CMD, &pCfgDid);
|
||||||
|
|
||||||
|
if(ret != 0 || pCfgDid == NULL)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "Run Cmd [%s] Error: %d\n", GET_DID_CMD, ret);
|
||||||
|
return -ERR_READ_FILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = GetShellExecResult(GET_KEY_CMD, &pCfgKey);
|
||||||
|
|
||||||
|
if(ret != 0 || pCfgKey == NULL)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "Run Cmd [%s] Error: %d\n", GET_KEY_CMD, ret);
|
||||||
|
return -ERR_READ_FILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_EX(LOG_Debug, "Mijia Configure:\n\tDid = %s\n\tKey = %s\n\tMac = %s\n",
|
||||||
|
pCfgDid, pCfgKey, pMacAddr);
|
||||||
|
|
||||||
|
|
||||||
|
free(pMacAddr);
|
||||||
|
free(pCfgDid);
|
||||||
|
free(pCfgKey);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int MijiaIoT_ServerStart(void)
|
||||||
|
{
|
||||||
|
const char* pSvrCmd = "/etc/init.d/mijia_services start";
|
||||||
|
|
||||||
|
if(IsFileExists(MIJIA_SVR_FILE))
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Debug, "Run Mijia Server:[%s]\n", pSvrCmd);
|
||||||
|
system(pSvrCmd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "Can't Find Mijia Server: %s\n", MIJIA_SVR_FILE);
|
||||||
|
return -ERR_FILE_NOT_EXISTS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int MijiaIoT_ServerStop(void)
|
||||||
|
{
|
||||||
|
const char* pSvrCmd = "/etc/init.d/mijia_services stop";
|
||||||
|
|
||||||
|
if(IsFileExists(MIJIA_SVR_FILE))
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Debug, "Run Mijia Server:[%s]\n", pSvrCmd);
|
||||||
|
system(pSvrCmd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "Can't Find Mijia Server: %s\n", MIJIA_SVR_FILE);
|
||||||
|
return -ERR_FILE_NOT_EXISTS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int MijiaIoT_ServerReStart(void)
|
||||||
|
{
|
||||||
|
const char* pSvrCmd = "/etc/init.d/mijia_services restart";
|
||||||
|
|
||||||
|
if(IsFileExists(MIJIA_SVR_FILE))
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Debug, "Run Mijia Server:[%s]\n", pSvrCmd);
|
||||||
|
system(pSvrCmd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "Can't Find Mijia Server: %s\n", MIJIA_SVR_FILE);
|
||||||
|
return -ERR_FILE_NOT_EXISTS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int MijiaIoT_UnBindDevice(void)
|
||||||
|
{
|
||||||
|
if(IsFileExists(MIJIA_BIND_FILE))
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Debug, "Remove Device Bind\n");
|
||||||
|
unlink(MIJIA_BIND_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -354,7 +354,7 @@ static int __skinCreateCfgFile(const char* pCfgFilePath)
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
static sqlite3* pSqlFileDB = NULL;
|
static sqlite3* pSqlFileDB = NULL;
|
||||||
UT_string *pSqlCmd = NULL;
|
UT_string *pSqlCmd = NULL;
|
||||||
#if 0
|
|
||||||
rc = sqlite3_open(":memory:", &g_pMemDb);
|
rc = sqlite3_open(":memory:", &g_pMemDb);
|
||||||
|
|
||||||
if(rc != SQLITE_OK)
|
if(rc != SQLITE_OK)
|
||||||
|
@ -377,7 +377,7 @@ static int __skinCreateCfgFile(const char* pCfgFilePath)
|
||||||
utstring_free(pSqlCmd);
|
utstring_free(pSqlCmd);
|
||||||
return -ERR_SQLITE3_CREATE_TABLE;
|
return -ERR_SQLITE3_CREATE_TABLE;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
rc = sqlite3_open_v2(pCfgFilePath, &pSqlFileDB, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
|
rc = sqlite3_open_v2(pCfgFilePath, &pSqlFileDB, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
|
||||||
|
|
||||||
if(rc != SQLITE_OK)
|
if(rc != SQLITE_OK)
|
||||||
|
@ -388,8 +388,6 @@ static int __skinCreateCfgFile(const char* pCfgFilePath)
|
||||||
return -ERR_OPEN_SQLITE3_DB;
|
return -ERR_OPEN_SQLITE3_DB;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_EX(LOG_Debug, "Create Database: %s\n", pCfgFilePath);
|
|
||||||
#if 0
|
|
||||||
utstring_renew(pSqlCmd);
|
utstring_renew(pSqlCmd);
|
||||||
utstring_printf(pSqlCmd, CREATE_SKIN_TBL_SQL""CREATE_RES_TBL_SQL, "", "");
|
utstring_printf(pSqlCmd, CREATE_SKIN_TBL_SQL""CREATE_RES_TBL_SQL, "", "");
|
||||||
|
|
||||||
|
@ -404,37 +402,7 @@ static int __skinCreateCfgFile(const char* pCfgFilePath)
|
||||||
utstring_free(pSqlCmd);
|
utstring_free(pSqlCmd);
|
||||||
return -ERR_SQLITE3_CREATE_TABLE;
|
return -ERR_SQLITE3_CREATE_TABLE;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
utstring_renew(pSqlCmd);
|
|
||||||
utstring_printf(pSqlCmd, CREATE_SKIN_TBL_SQL, "");
|
|
||||||
|
|
||||||
rc = sqlite3_exec(pSqlFileDB, utstring_body(pSqlCmd), NULL, 0, &pErrMsg);
|
|
||||||
|
|
||||||
if(rc != SQLITE_OK)
|
|
||||||
{
|
|
||||||
LOG_EX(LOG_Error, "Create Tbl \n[%s]\n Error(%d): %s\n", utstring_body(pSqlCmd), rc, pErrMsg);
|
|
||||||
sqlite3_free(pErrMsg);
|
|
||||||
unlink(pCfgFilePath);
|
|
||||||
sqlite3_close(g_pMemDb);
|
|
||||||
utstring_free(pSqlCmd);
|
|
||||||
return -ERR_SQLITE3_CREATE_TABLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
utstring_renew(pSqlCmd);
|
|
||||||
utstring_printf(pSqlCmd, CREATE_RES_TBL_SQL, "");
|
|
||||||
|
|
||||||
rc = sqlite3_exec(pSqlFileDB, utstring_body(pSqlCmd), NULL, 0, &pErrMsg);
|
|
||||||
|
|
||||||
if(rc != SQLITE_OK)
|
|
||||||
{
|
|
||||||
LOG_EX(LOG_Error, "Create Tbl \n[%s]\n Error: %s\n", utstring_body(pSqlCmd), pErrMsg);
|
|
||||||
sqlite3_free(pErrMsg);
|
|
||||||
unlink(pCfgFilePath);
|
|
||||||
sqlite3_close(g_pMemDb);
|
|
||||||
utstring_free(pSqlCmd);
|
|
||||||
return -ERR_SQLITE3_CREATE_TABLE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
utstring_renew(pSqlCmd);
|
utstring_renew(pSqlCmd);
|
||||||
utstring_printf(pSqlCmd, UPGRADE_TBL_SQL_CMD, "");
|
utstring_printf(pSqlCmd, UPGRADE_TBL_SQL_CMD, "");
|
||||||
rc = sqlite3_exec(pSqlFileDB, utstring_body(pSqlCmd), NULL, 0, &pErrMsg);
|
rc = sqlite3_exec(pSqlFileDB, utstring_body(pSqlCmd), NULL, 0, &pErrMsg);
|
||||||
|
|
|
@ -15,6 +15,20 @@
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "libuv_dbus.h"
|
#include "libuv_dbus.h"
|
||||||
|
|
||||||
|
int IsFileExists(const char* pPath)
|
||||||
|
{
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
|
if (stat(pPath, &st) != 0)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int CopyFile(const char *pSrc, const char *pDest)
|
int CopyFile(const char *pSrc, const char *pDest)
|
||||||
{
|
{
|
||||||
int fdSrc, fdDest;
|
int fdSrc, fdDest;
|
||||||
|
|
|
@ -224,6 +224,7 @@ char* CfgGetStringValue(const char* pTags, char* pDefValue);
|
||||||
double CfgGetFloatValue(const char* pTags, double defValue);
|
double CfgGetFloatValue(const char* pTags, double defValue);
|
||||||
int CfgGetBoolValue(const char* pTags, int defValue);
|
int CfgGetBoolValue(const char* pTags, int defValue);
|
||||||
void SetHBLAutoExit(int flag);
|
void SetHBLAutoExit(int flag);
|
||||||
|
int IsFileExists(const char* pPath);
|
||||||
|
|
||||||
extern char *strptime(const char *s, const char *format, struct tm *tm);
|
extern char *strptime(const char *s, const char *format, struct tm *tm);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef MIJIA_IOT_H
|
||||||
|
#define MIJIA_IOT_H
|
||||||
|
|
||||||
|
|
||||||
|
int MijiaIoT_Init(const char* pDid, const char* pKey);
|
||||||
|
int MijiaIoT_ServerStart(void);
|
||||||
|
int MijiaIoT_ServerReStart(void);
|
||||||
|
int MijiaIoT_ServerStop(void);
|
||||||
|
int MijiaIoT_UnBindDevice(void);
|
||||||
|
#endif
|
Loading…
Reference in New Issue