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 */
posted on 2024-11-21 15:11  AtlasLapetos  阅读(8)  评论(0)    收藏  举报