Attribute.c
5.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#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);
}