common
common
midea_data_center.h
/*
* Copyright (c) 2021 Midea Co., Ltd. All Rights Reserved.
*
* @author 霍长裕
* @email huocy@midea.com
* @date 2021-12-18
*/
#include "midea_data_center.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <pthread.h>
#define MIDEA_SIT 1
/// 1、once待测
pthread_once_t once = PTHREAD_ONCE_INIT;
MS_DATA_CENTER *mss_share_instance(void)
{
//pthread_mutex_lock(&mute);
if (_ms_data != NULL)
{
//pthread_mutex_unlock(&mute);
//printf("***** NO NULL %p*****\n", _ms_data);
return _ms_data;
}
else
{
_ms_data = (MS_DATA_CENTER *)malloc(sizeof(MS_DATA_CENTER));
_ms_data->ms_config= calloc(1, sizeof(MSS_CONFIG));
_ms_data->login_info= calloc(1, sizeof(MSS_LOGIN_INFO));
memcpy(_ms_data->ms_config->app_id, "900", 3);
char *app_key = MIDEA_SIT ? "143320d6c73144d083baf9f5b1a7acc9" : "143320d6c73144d083baf9f5b1a7acc9";
memcpy(_ms_data->ms_config->app_key, app_key, strlen(app_key));
_ms_data->ms_config->enable_log = 1;
char *server_host = MIDEA_SIT ? "https://mp-sit.smartmidea.net/mas/v5/app/proxy?alias=" : "https://mp-sit.smartmidea.net/mas/v5/app/proxy?alias=";
memcpy(_ms_data->ms_config->server_host, server_host, strlen(server_host));
char *http_sign_secret = MIDEA_SIT ? "sit_secret123@muc" : "sit_secret123@muc@muc";
memcpy(_ms_data->ms_config->http_sign_secret, http_sign_secret, strlen(http_sign_secret));
char *http_sign_key = MIDEA_SIT ? "SIT_4VjZdg19laDoIrut" : "SIT_4VjZdg19laDoIrut";
memcpy(_ms_data->ms_config->http_sign_key, http_sign_key, strlen(http_sign_key));
assert(_ms_data != NULL);
return _ms_data;
}
}
int mss_data_center_get_access_token()
{
// if(_ms_data->token_refresh_callback == NULL){
// return NULL;
// }
// return ms_data->token_refresh_callback();
}
midea_data_center.h
/*
* Copyright (c) 2021 Midea Co., Ltd. All Rights Reserved.
*
* @author 霍长裕
* @email huocy@midea.com
* @data 2021-12-18
*/
#ifndef ms_data_center_h
#define ms_data_center_h
#include <stdio.h>
#include "midea_data_types.h"
typedef struct ms_data
{
///初始化数据
struct mss_config *ms_config;
///登录成功数据
struct mss_login_info *login_info;
void *token_refresh_callback;
} MS_DATA_CENTER;
static MS_DATA_CENTER *_ms_data = NULL;
MS_DATA_CENTER *mss_share_instance(void);
/// @brief refresh token
/// @return 0 succes
int mss_data_center_get_access_token();
#endif /* ms_data_center_h */
midea_data_type.h
/*
* Copyright (c) 2021 Midea Co., Ltd. All Rights Reserved.
*
* @author 霍长裕
* @email huocy@midea.com
* @data 2021-12-28 12:02
*/
#ifndef MS_DATA_TYPES_H
#define MS_DATA_TYPES_H
#include <stdlib.h>
#include <stdbool.h>
typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef signed short int16_t;
typedef unsigned short uint16_t;
#undef int32_t
typedef signed int int32_t;
#undef uint32_t
typedef unsigned int uint32_t;
#define TRUE 1
#define FALSE 0
///主程序端登录成功设置的结构体
typedef struct mss_login_info{
///AT
char access_token[33];
///加密使用的datakey
uint8_t data_key[65];
//data key size
size_t data_key_size;
//加密使用的偏移量IV
uint8_t data_iv[40];
//data iv size
size_t data_iv_size;
} MSS_LOGIN_INFO;
typedef struct mss_config{
///国内appid
char app_id[5];
///国内appkey
char app_key[33];
///国际clientid
char client_id[10];
///国际secretKey
char client_secret[33];
///是否能打印日志
int enable_log;
///服务器HTTP请求URL
char server_host[100];
//MSmartSDK的httpSignKey
char http_sign_secret[36];
//MSmartSDK的https网络请求加密方式
char http_sign_key[30];
} MSS_CONFIG;
typedef struct midea_retry_curl_failed_list{
char url_path[50];
char host[30];
char request_json[200];
char *response_json;
} midea_retry_curl_failed_list_t;
//文件存储信息
typedef struct midea_system_file_data
{
uint8_t brightness_auto_adjust;
uint8_t brightness;
uint16_t screen_protect_time;
uint16_t screen_lock_time;
uint8_t ntp_state;
char access_token[30];
char uid[37];//c4a uid。如果uid不为null, 则表示是会员
char user_id[37];//用户ID
char nickName[16];
char expiredDate[50];
char sex[3];
char mobile[20];
char name[8];
char file[8];
}midea_system_file_data_t;
#endif
midea_utils.c
/*
* Copyright (c) 2021 Midea Co., Ltd. All Rights Reserved.
*
* @author 霍长裕
* @email huocy@midea.com
* @data 2021-12-28 12:02
*/
#include "midea_utils.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "midea_data_types.h"
#include "midea_data_security.h"
int midea_str_count_char(char *str, char c)
{
int count = 0;
int len = strlen(str);
for (size_t i = 0; i < len; i++)
{
if (str[i] == c)
{
count++;
}
}
return count;
}
int midea_str_random(char **out)
{
time_t t;
srand((unsigned)time(&t));
int r = rand();
char *tmp = calloc(25, sizeof(char));
sprintf(tmp, "%ld%d", t, r);
tmp[24] = '\0';
*out = tmp;
return 0;
}
int midea_bytes_to_lc_hex_string(uint8_t src[], size_t src_len, char **out)
{
int len = src_len;
char *tmp = calloc(2 * len + 1, sizeof(char));
if (tmp == NULL)
{
return -1;
}
for (size_t i = 0; i < len; i++)
{
int num = sprintf(tmp + i * 2, "%02x", src[i]);
if (num < 0)
{
return -1;
}
}
*out = tmp;
return 0;
}
int midea_hex_string_to_bytes(char src[], uint8_t **out, size_t *out_size)
{
int src_length = strlen(src);
int out_length = src_length / 2;
uint8_t *tmp = calloc(out_length, sizeof(uint8_t));
uint8_t result = 0;
int index = 0;
for (int i = 0; i < src_length; i++)
{
/*将16进制转换成10进制*/
if (src[i] >= 'a' && src[i] <= 'z')
{
result = result * 16 + src[i] - 'a' + 10;
}
else if (src[i] >= 'A' && src[i] <= 'Z')
{
result = result * 16 + src[i] - 'A' + 10;
}
else
{
result = result * 16 + src[i] - '0';
}
/*每两位处理一次*/
if (i % 2 != 0)
{
tmp[index] = result;
result = 0;
index++;
}
}
*out = tmp;
*out_size = out_length;
return 0;
}
int midea_str_substring(char *str, int begin_index, int end_index, char **out)
{
int sublen = end_index - begin_index;
if (sublen <= 0)
{
return -1;
}
int len = strlen(str);
if (begin_index >= len)
{
return -1;
}
if (end_index > len)
{
return -1;
}
char *tmp = calloc(sublen + 1, sizeof(char));
for (size_t i = begin_index; i < end_index; i++)
{
tmp[i - begin_index] = str[i];
}
*out = tmp;
return 0;
}
int midea_str_md5_random(char **out)
{
char *random;
midea_str_random(&random);
mss_md5_encrypt_to_lc_hex(random, strlen(random), out);
free(random);
return 0;
}
int midea_str_time_stamp(char **out){
time_t seconds;
time(&seconds);
struct tm *TM = gmtime(&seconds);
char *tmp = calloc(15, sizeof(char));
sprintf(tmp, "%d%d%d%d%d%d", TM->tm_year + 1900, TM->tm_mon + 1, TM->tm_mday, TM->tm_hour, TM->tm_min, TM->tm_sec);
*out = tmp;
return 0;
}
midea_utils.h
/*
* Copyright (c) 2021 Midea Co., Ltd. All Rights Reserved.
*
* @author 霍长裕
* @email huocy@midea.com
* @data 2021-12-28 12:02
*/
#ifndef midea_utils_h
#define midea_utils_h
#include <stddef.h>
#include "midea_data_types.h"
int midea_str_count_char(char *str, char c);
int midea_str_random(char **out);
int midea_bytes_to_lc_hex_string(uint8_t src[], size_t src_len, char **out);
int midea_str_md5_random(char **out);
/**
* @brief 将16进制字符串转字节数组,使用完out后需要释放内存.
*
* @param src 源子节数组
* @param out 转换后的数据的指针
* @param out_size 转换后的数据的长度
* @return int 0:成功,其他失败
*/
int midea_hex_string_to_bytes(char src[], uint8_t **out,size_t *out_size);
/**
* @brief 截取子字符串,需要释放内存.
* 返回一个子字符串。
* 子字符串从beginIndex开始,到 endIndex - 1结束。
* 所以子字符串长度为: endIndex-beginIndex
* Examples:
* char *out;
* str_substring("hamburger",4, 8, &out) returns "urge"
* str_substring("smiles",1, 5, &out) returns "mile"
*
* @param str
* @param begin_index
* @param end_index
* @param out 子字符串指针,使用完后需要释放
* @return int 0:成功,其他失败
*/
int midea_str_substring(char *str, int begin_index, int end_index ,char **out);
/**
* @brief 生成时间戳,使用完后需要释放。
* 格式为:yyyyMMddHHmmss
* @param out
* @return int
*/
int midea_str_time_stamp(char **out);
#endif /* midea_utils.h */
浙公网安备 33010602011771号