Attribute.c 5.1 KB
#include "JZsdkLib.h"
#include <sys/time.h> // 对于 settimeofday 可能需要这个头文件
#include <time.h>  

#include "Attribute.h"

static T_JZsdkAttributeGpsTime g_GpsTime = 0;
static T_JZsdkAttributeGpsDate g_GpsDate = 0;
static T_JZsdkAttributeGpsPosition g_GpsPositino = {0};

// static int GpsYear = 0;
// static int GpsMonth = 0;
// static int GpsDay = 0;
// static int GpsHour = 0;
// static int GpsMinute = 0;
// static int GpsSecond = 0;

T_JZsdkReturnCode Attribute_Init()
{

    int year = 0;
    int month = 0;
    int day = 0;
    int hour = 0;
    int minute = 0;
    int second = 0;

    Attribute_GetTime_ByI(&year, &month, &day, &hour, &minute, &second);

    JZSDK_LOG_INFO("%d-%d-%d %d:%d:%d", year, month, day, hour, minute, second);

    JZSDK_LOG_INFO("Attribute_Init_Complete");

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

// 函数:获取GPS时间
// 返回值:T_JZsdkAttributeGpsTime类型的GPS时间
T_JZsdkAttributeGpsTime Attribute_GetGpsTime()
{
    // 返回全局变量g_GpsTime的值
    return g_GpsTime;
}

// 设置GPS时间
T_JZsdkReturnCode Attribute_SetGpsTime(T_JZsdkAttributeGpsTime GpsTime)
{
    // 将传入的参数GpsTime赋值给全局变量g_GpsTime
    g_GpsTime = GpsTime;
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/********************************
 * 
 *   获取gps的坐标值
 * 
 * **************************/
T_JZsdkAttributeGpsPosition Attribute_GetGpsPosition()
{
    // 返回全局变量g_GpsPositino的值
    return g_GpsPositino;
}

/********************************
 * 
 *   设置gps的坐标值
 * 
 * **************************/
T_JZsdkReturnCode Attribute_SetGpsPosition(T_JZsdkAttributeGpsPosition GpsPosition)
{
    // 将传入的参数GpsPosition赋值给全局变量g_GpsPositino
    g_GpsPositino = GpsPosition;
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/***********************
 * 
 *  设置gps的日期
 * 
 * 
 * *******************/
T_JZsdkReturnCode Attribute_SetGpsDate(T_JZsdkAttributeGpsDate GpsDate)
{
    // 将传入的参数GpsDate赋值给全局变量g_GpsDate
    g_GpsDate = GpsDate;
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/***********************
 * 
 *  获取gps的日期
 * 
 * 
 * *******************/
T_JZsdkAttributeGpsDate Attribute_GetGpsDate()
{
    // 返回全局变量g_GpsDate的值
    return g_GpsDate;
}

// 函数定义
void decimal_to_dms(float decimal_degrees, char* dms_string, char direction) 
{
    int degrees = (int)decimal_degrees;
    float decimal_minutes = fabs(decimal_degrees - degrees) * 60;
    int minutes = (int)decimal_minutes;
    float seconds = (decimal_minutes - minutes) * 60;
 
    // 格式化DMS字符串,保留两位小数
    snprintf(dms_string, 50, "%d°%d'%.0f\"%c", abs(degrees), minutes, seconds, direction);
}

/************************
 * 
 *  获取gps显示的xyz值
 * 
 * 
 * ****************************/
T_JZsdkReturnCode Attribute_GetGpsXYZ_ByStr(unsigned char *latitude, unsigned char *longitude, float *z)
{
    float x = g_GpsPositino.x/10000000.0;
    float y = g_GpsPositino.y/10000000.0;
    *z = g_GpsPositino.z/10000000.0;

    char dmsX[50];
    char dmsY[50];

    memset(dmsX, 0, sizeof(dmsX));
    memset(dmsY, 0, sizeof(dmsY));
 
    // 调用函数将经度转换为DMS格式,并传入正确的方向字符
    decimal_to_dms(x, dmsX, (g_GpsPositino.x >= 0) ? 'E' : 'W');
    // 调用函数将纬度转换为DMS格式,并传入正确的方向字符
    decimal_to_dms(y, dmsY, (g_GpsPositino.y >= 0) ? 'N' : 'S');
 
    // // 打印结果
    // printf("%d  %f 经度: %s\n",g_GpsPositino.x, x , dmsX);
    // printf("%d  %f 纬度: %s\n",g_GpsPositino.y, y , dmsY);

    memcpy(latitude, dmsX, strlen(dmsX));
    memcpy(longitude, dmsY, strlen(dmsY));

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}




/************************
 * 
 *  获取gps显示的度分秒值
 * 
 * 
 * ****************************/
T_JZsdkReturnCode Attribute_GetGpsXYZ_ByF(float *x, float *y, float *z)
{
    *x = g_GpsPositino.x/10000000.0;
    *y = g_GpsPositino.y/10000000.0;
    *z = g_GpsPositino.z/10000000.0;

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/************************
 * 
 *  获取显示的时间
 * 
 * 
 * ***********************/
T_JZsdkReturnCode Attribute_GetTime_ByI(int *year, int *month, int *day, int *hour, int *minute, int *second)
{
    // 转换为time_t(注意:这里假设TimeStamp是以秒为单位的Unix时间戳)  
    // 如果TimeStamp是以毫秒为单位的,你需要将其除以1000  
    time_t time_t_TimeStamp = (time_t)g_GpsTime; // 注意:这里可能会有截断,如果TimeStamp非常大  
  
    // 使用localtime将time_t转换为tm结构体  
    struct tm *tm_info = localtime(&time_t_TimeStamp);  
    if (tm_info == NULL) 
    {  
        JZSDK_LOG_ERROR("时间转化失败");
        return  JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
    }  

    *year = tm_info->tm_year + 1900; 
    *month = tm_info->tm_mon + 1;    
    *day = tm_info->tm_mday;

    *hour = tm_info->tm_hour;
    *minute = tm_info->tm_min;
    *second = tm_info->tm_sec;

    //JZSDK_LOG_INFO("获得年份: %d, 月份: %d, 日期: %d, 小时:%d, 分:%d 秒:%d", *year, *month, *day, *hour, *minute, *second);
}