1 #include "sensor_static_calibrate.h"
2
3 #define DST_X 0
4 #define DST_Y 1
5 #define DST_Z 2
6 #define SRC_X 0
7 #define SRC_Y 0
8 #define SRC_Z 0
9 #define MAX_SRNSOR_NUM 10
10
11 typedef struct _dev_3axis_data_t
12 {
13 uint64_t timestamp;
14 int32_t data[3];
15 }dev_3axis_data_t;
16
17 typedef struct _dev_1axis_data_t
18 {
19 uint64_t timestamp;
20 int32_t data;
21 }dev_1axis_data_t;
22
23 typedef struct _sensor_1axis_para_t
24 {
25 int offset;
26 }sensor_1axis_para_t;
27
28 typedef struct _sensor_3axis_para_t
29 {
30 int remap_x_coeff;
31 int remap_y_coeff;
32 int remap_z_coeff;
33 int offset;
34 }sensor_3axis_para_t;
35
36 typedef struct _sensor_static_obj_t
37 {
38 int in_use;
39 sensor_tag_e tag;
40 int sensor_index;
41 int axis;
42 void* para;
43 }sensor_static_obj_t;
44
45 sensor_static_obj_t g_sensor_static_para[MAX_SRNSOR_NUM] = {0};
46
47
48 sensor_3axis_para_t default_3axis_para[] ={
49 1, 0, 0, 0,
50 0, 1, 0, 0,
51 0, 0, 1, 0,
52 };
53
54 sensor_1axis_para_t default_1axis_para ={0};
55
findindex(sensor_tag_e tag,int index)56 int findindex(sensor_tag_e tag ,int index)
57 {
58 }
59
sensor_static_calibrate_3axis_default(void * buf)60 void sensor_static_calibrate_3axis_default(void *buf)
61 {
62 dev_3axis_data_t* pdata=(dev_3axis_data_t*)buf;
63 dev_3axis_data_t datatmp;
64 memcpy(&datatmp,pdata,sizeof(dev_3axis_data_t));
65
66 pdata->data[DST_X] = datatmp.data[SRC_X]* default_3axis_para[DST_X].remap_x_coeff ;
67 pdata->data[DST_X] += datatmp.data[SRC_Y]* default_3axis_para[DST_X].remap_y_coeff;
68 pdata->data[DST_X] += datatmp.data[SRC_Z]* default_3axis_para[DST_X].remap_z_coeff;
69 pdata->data[DST_X] += default_3axis_para[DST_X].offset;
70
71 pdata->data[DST_Y] = datatmp.data[SRC_X]* default_3axis_para[DST_Y].remap_x_coeff;
72 pdata->data[DST_Y] += datatmp.data[SRC_Y]* default_3axis_para[DST_Y].remap_y_coeff;
73 pdata->data[DST_Y] += datatmp.data[SRC_Z]* default_3axis_para[DST_Y].remap_z_coeff;
74 pdata->data[DST_Y] += default_3axis_para[DST_Y].offset;
75
76 pdata->data[DST_Z] = datatmp.data[SRC_X]* default_3axis_para[DST_Z].remap_x_coeff ;
77 pdata->data[DST_Z] += datatmp.data[SRC_Y]* default_3axis_para[DST_Z].remap_y_coeff;
78 pdata->data[DST_Z] += datatmp.data[SRC_Z]* default_3axis_para[DST_Z].remap_z_coeff;
79 pdata->data[DST_Z] += default_3axis_para[DST_Z].offset;
80 }
81
82
sensor_static_calibrate_3axis(void * buf,void * para)83 void sensor_static_calibrate_3axis(void *buf,void* para)
84 {
85 dev_3axis_data_t* pdata=(dev_3axis_data_t*)buf;
86 dev_3axis_data_t datatmp;
87 sensor_3axis_para_t* ppara=(sensor_3axis_para_t*)para;
88 memcpy(&datatmp,pdata,sizeof(dev_3axis_data_t));
89
90 pdata->data[DST_X] = datatmp.data[SRC_X]* ppara->remap_x_coeff ;
91 pdata->data[DST_X] += datatmp.data[SRC_Y]* ppara->remap_y_coeff;
92 pdata->data[DST_X] += datatmp.data[SRC_Z]* ppara->remap_z_coeff;
93 pdata->data[DST_X] += ppara->offset;
94 ppara++;
95
96 pdata->data[DST_Y] = datatmp.data[SRC_X]* ppara->remap_x_coeff;
97 pdata->data[DST_Y] += datatmp.data[SRC_Y]* ppara->remap_y_coeff;
98 pdata->data[DST_Y] += datatmp.data[SRC_Z]* ppara->remap_z_coeff;
99 pdata->data[DST_Y] += ppara->offset;
100 ppara++;
101
102 pdata->data[DST_Z] = datatmp.data[SRC_X]* ppara->remap_x_coeff ;
103 pdata->data[DST_Z] += datatmp.data[SRC_Y]* ppara->remap_y_coeff;
104 pdata->data[DST_Z] += datatmp.data[SRC_Z]* ppara->remap_z_coeff;
105 pdata->data[DST_Z] += ppara->offset;
106 }
107
sensor_static_calibrate_1axis_default(void * buf)108 void sensor_static_calibrate_1axis_default(void *buf)
109 {
110 dev_1axis_data_t* pdata=(dev_1axis_data_t*)buf;
111 pdata->data += default_1axis_para.offset;
112 }
113
sensor_static_calibrate_1axis(void * buf,void * para)114 void sensor_static_calibrate_1axis(void *buf,void* para)
115 {
116 dev_1axis_data_t* pdata=(dev_1axis_data_t*)buf;
117 sensor_1axis_para_t* ppara=(sensor_1axis_para_t*)para;
118 pdata->data += ppara->offset;
119 }
120
sensor_static_calibrate_acc_default(int sensor_index,int axis,void * buf)121 ssize_t sensor_static_calibrate_acc_default(int sensor_index, int axis,void* buf)
122 {
123 if(axis == 3)
124 {
125 sensor_static_calibrate_3axis_default(buf);
126 }
127 else if(axis == 1)
128 {
129 sensor_static_calibrate_1axis_default(buf);
130 }
131 else
132 {
133 return -1;
134 }
135
136 return 0;
137 }
138
139
sensor_static_calibrate_acc(int axis,void * buf,void * para)140 ssize_t sensor_static_calibrate_acc(int axis, void *buf,void* para)
141 {
142 if(axis == 3)
143 {
144 sensor_static_calibrate_3axis(buf,para);
145 }
146 else if(axis == 1)
147 {
148 sensor_static_calibrate_1axis(buf,para);
149 }
150 else
151 {
152 return -1;
153 }
154
155 return 0;
156 }
157 /*
158 int sensor_static_calibrate(int axis, void *buf,void *para)
159 {
160 int ret =-1;
161 if(buf == NULL||para == NULL) return -1;
162 if(tag == TAG_DEV_ACC)
163 {
164 ret = sensor_static_calibrate_acc(axis,buf,para);
165 }
166 else
167 {
168 }
169 return ret;
170 }
171 */
find_empty_obj()172 int find_empty_obj()
173 {
174 for(int i = 0;i < MAX_SRNSOR_NUM; i++)
175 {
176 if(g_sensor_static_para[i].in_use==0)
177 return i;
178 }
179 return -1;
180 }
181
sensor_obj_init_para(sensor_tag_e tag,int sensor_index,int axis,void * para)182 int sensor_obj_init_para(sensor_tag_e tag,int sensor_index,int axis,void* para)
183 {
184 int index = find_empty_obj();
185 if(index < 0) return -1;
186 g_sensor_static_para[index].sensor_index = sensor_index;
187 g_sensor_static_para[index].tag = tag;
188 g_sensor_static_para[index].para = para;
189 g_sensor_static_para[index].axis = axis;
190 g_sensor_static_para[index].in_use = 1;
191 return 0;
192 }
193
find_sensor_index(sensor_tag_e tag,int sensor_index,int axis)194 int find_sensor_index(sensor_tag_e tag,int sensor_index,int axis)
195 {
196 for(int i = 0;i < MAX_SRNSOR_NUM; i++)
197 {
198 if(g_sensor_static_para[i].tag==tag
199 &&g_sensor_static_para[i].sensor_index==sensor_index
200 &&g_sensor_static_para[i].axis == axis
201 &&g_sensor_static_para[i].in_use == 1
202 &&g_sensor_static_para[i].para != NULL)
203 return i;
204 }
205 return -1;
206 }
207
sensor_calibrate_entry(sensor_tag_e tag,int sensor_index,int axis,void * buf)208 int sensor_calibrate_entry(sensor_tag_e tag,int sensor_index,int axis, void *buf)
209 {
210 int ret = 0;
211 if(buf == NULL) return -1;
212 int index = find_sensor_index(tag,sensor_index,axis);
213 if(index < 0) return -1;
214
215 if(tag == TAG_DEV_ACC)
216 {
217 ret = sensor_static_calibrate_acc(axis,buf,g_sensor_static_para[index].para);
218 }
219 else
220 {
221 return -1;
222 }
223 return ret;
224 }
225
sensor_calibrate_entry_default(sensor_tag_e tag,int sensor_index,int axis,void * buf)226 int sensor_calibrate_entry_default(sensor_tag_e tag,int sensor_index,int axis, void *buf)
227 {
228 int ret = 0;
229 if(buf == NULL) return -1;
230
231 if(tag == TAG_DEV_ACC)
232 {
233 ret = sensor_static_calibrate_acc_default(sensor_index,axis,buf);
234 }
235 else
236 {
237 return -1;
238 }
239 return ret;
240 }
241
242
243