summaryrefslogtreecommitdiff
path: root/utils/nwztools/plattools/nwz_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils/nwztools/plattools/nwz_lib.c')
-rw-r--r--utils/nwztools/plattools/nwz_lib.c284
1 files changed, 269 insertions, 15 deletions
diff --git a/utils/nwztools/plattools/nwz_lib.c b/utils/nwztools/plattools/nwz_lib.c
index b654855bb8..4ea1edee19 100644
--- a/utils/nwztools/plattools/nwz_lib.c
+++ b/utils/nwztools/plattools/nwz_lib.c
@@ -69,9 +69,29 @@ void nwz_lcdmsgf(bool clear, int x, int y, const char *format, ...)
69 nwz_lcdmsg(clear, x, y, buffer); 69 nwz_lcdmsg(clear, x, y, buffer);
70} 70}
71 71
72int nwz_input_open(const char *requested_name)
73{
74 /* try all /dev/input/eventX, there can't a lot of them */
75 for(int index = 0; index < 8; index++)
76 {
77 char buffer[32];
78 sprintf(buffer, "/dev/input/event%d", index);
79 int fd = open(buffer, O_RDWR);
80 if(fd < 0)
81 continue; /* try next one */
82 /* query name */
83 char name[256];
84 if(ioctl(fd, EVIOCGNAME(sizeof(name)), name) >= 0 &&
85 strcmp(name, requested_name) == 0)
86 return fd;
87 close(fd);
88 }
89 return -1;
90}
91
72int nwz_key_open(void) 92int nwz_key_open(void)
73{ 93{
74 return open(NWZ_KEY_DEV, O_RDONLY); 94 return nwz_input_open(NWZ_KEY_NAME);
75} 95}
76 96
77void nwz_key_close(int fd) 97void nwz_key_close(int fd)
@@ -89,20 +109,7 @@ int nwz_key_get_hold_status(int fd)
89 109
90int nwz_key_wait_event(int fd, long tmo_us) 110int nwz_key_wait_event(int fd, long tmo_us)
91{ 111{
92 fd_set rfds; 112 return nwz_wait_fds(&fd, 1, tmo_us);
93 struct timeval tv;
94 struct timeval *tv_ptr = NULL;
95 /* watch the input device */
96 FD_ZERO(&rfds);
97 FD_SET(fd, &rfds);
98 /* setup timeout */
99 if(tmo_us >= 0)
100 {
101 tv.tv_sec = 0;
102 tv.tv_usec = tmo_us;
103 tv_ptr = &tv;
104 }
105 return select(fd + 1, &rfds, NULL, NULL, tv_ptr);
106} 113}
107 114
108int nwz_key_read_event(int fd, struct input_event *evt) 115int nwz_key_read_event(int fd, struct input_event *evt)
@@ -219,3 +226,250 @@ int nwz_adc_get_val(int fd, int ch)
219 else 226 else
220 return val; 227 return val;
221} 228}
229
230int nwz_ts_open(void)
231{
232 return nwz_input_open(NWZ_TS_NAME);
233}
234
235void nwz_ts_close(int fd)
236{
237 close(fd);
238}
239
240int nwz_ts_state_init(int fd, struct nwz_ts_state_t *state)
241{
242 memset(state, 0, sizeof(struct nwz_ts_state_t));
243 struct input_absinfo info;
244 if(ioctl(fd, EVIOCGABS(ABS_X), &info) < 0)
245 return -1;
246 state->max_x = info.maximum;
247 if(ioctl(fd, EVIOCGABS(ABS_Y), &info) < 0)
248 return -1;
249 state->max_y = info.maximum;
250 if(ioctl(fd, EVIOCGABS(ABS_PRESSURE), &info) < 0)
251 return -1;
252 state->max_pressure = info.maximum;
253 if(ioctl(fd, EVIOCGABS(ABS_TOOL_WIDTH), &info) < 0)
254 return -1;
255 state->max_tool_width = info.maximum;
256 return 1;
257}
258
259int nwz_ts_state_update(struct nwz_ts_state_t *state, struct input_event *evt)
260{
261 switch(evt->type)
262 {
263 case EV_SYN:
264 return 1;
265 case EV_REL:
266 if(evt->code == REL_RX)
267 state->flick_x = evt->value;
268 else if(evt->code == REL_RY)
269 state->flick_y = evt->value;
270 else
271 return -1;
272 state->flick = true;
273 break;
274 case EV_ABS:
275 if(evt->code == ABS_X)
276 state->x = evt->value;
277 else if(evt->code == ABS_Y)
278 state->y = evt->value;
279 else if(evt->code == ABS_PRESSURE)
280 state->pressure = evt->value;
281 else if(evt->code == ABS_TOOL_WIDTH)
282 state->tool_width = evt->value;
283 else
284 return -1;
285 break;
286 case EV_KEY:
287 if(evt->code == BTN_TOUCH)
288 state->touch = evt->value;
289 else
290 return -1;
291 break;
292 default:
293 return -1;
294 }
295 return 0;
296}
297
298int nwz_ts_state_post_syn(struct nwz_ts_state_t *state)
299{
300 state->flick = false;
301 return 1;
302}
303
304int nwz_ts_read_events(int fd, struct input_event *evts, int nr_evts)
305{
306 int ret = read(fd, evts, nr_evts * sizeof(struct input_event));
307 if(ret < 0)
308 return -1;
309 return ret / sizeof(struct input_event);
310}
311
312long nwz_wait_fds(int *fds, int nr_fds, long tmo_us)
313{
314 fd_set rfds;
315 struct timeval tv;
316 struct timeval *tv_ptr = NULL;
317 /* watch the input device */
318 FD_ZERO(&rfds);
319 int max_fd = 0;
320 for(int i = 0; i < nr_fds; i++)
321 {
322 FD_SET(fds[i], &rfds);
323 if(fds[i] > max_fd)
324 max_fd = fds[i];
325 }
326 /* setup timeout */
327 if(tmo_us >= 0)
328 {
329 tv.tv_sec = 0;
330 tv.tv_usec = tmo_us;
331 tv_ptr = &tv;
332 }
333 int ret = select(max_fd + 1, &rfds, NULL, NULL, tv_ptr);
334 if(ret <= 0)
335 return ret;
336 long bitmap = 0;
337 for(int i = 0; i < nr_fds; i++)
338 if(FD_ISSET(fds[i], &rfds))
339 bitmap |= 1 << i;
340 return bitmap;
341}
342
343int nwz_power_open(void)
344{
345 return open(NWZ_POWER_DEV, O_RDWR);
346}
347
348void nwz_power_close(int fd)
349{
350 close(fd);
351}
352
353int nwz_power_get_status(int fd)
354{
355 int status;
356 if(ioctl(fd, NWZ_POWER_GET_STATUS, &status) < 0)
357 return -1;
358 return status;
359}
360
361static int nwz_power_adval_to_mv(int adval, int ad_base)
362{
363 if(adval == -1)
364 return -1;
365 /* the AD base corresponds to the millivolt value if adval was 255 */
366 return (adval * ad_base) / 255;
367}
368
369int nwz_power_get_vbus_adval(int fd)
370{
371 int status;
372 if(ioctl(fd, NWZ_POWER_GET_VBUS_ADVAL, &status) < 0)
373 return -1;
374 return status;
375}
376
377int nwz_power_get_vbus_voltage(int fd)
378{
379 return nwz_power_adval_to_mv(nwz_power_get_vbus_adval(fd), NWZ_POWER_AD_BASE_VBUS);
380}
381
382int nwz_power_get_vbus_limit(int fd)
383{
384 int status;
385 if(ioctl(fd, NWZ_POWER_GET_VBUS_LIMIT, &status) < 0)
386 return -1;
387 return status;
388}
389
390int nwz_power_get_charge_switch(int fd)
391{
392 int status;
393 if(ioctl(fd, NWZ_POWER_GET_CHARGE_SWITCH, &status) < 0)
394 return -1;
395 return status;
396}
397
398int nwz_power_get_charge_current(int fd)
399{
400 int status;
401 if(ioctl(fd, NWZ_POWER_GET_CHARGE_CURRENT, &status) < 0)
402 return -1;
403 return status;
404}
405
406int nwz_power_get_battery_gauge(int fd)
407{
408 int status;
409 if(ioctl(fd, NWZ_POWER_GET_BAT_GAUGE, &status) < 0)
410 return -1;
411 return status;
412}
413
414int nwz_power_get_battery_adval(int fd)
415{
416 int status;
417 if(ioctl(fd, NWZ_POWER_GET_BAT_ADVAL, &status) < 0)
418 return -1;
419 return status;
420}
421
422int nwz_power_get_battery_voltage(int fd)
423{
424 return nwz_power_adval_to_mv(nwz_power_get_battery_adval(fd), NWZ_POWER_AD_BASE_VBAT);
425}
426
427int nwz_power_get_vbat_adval(int fd)
428{
429 int status;
430 if(ioctl(fd, NWZ_POWER_GET_VBAT_ADVAL, &status) < 0)
431 return -1;
432 return status;
433}
434
435int nwz_power_get_vbat_voltage(int fd)
436{
437 return nwz_power_adval_to_mv(nwz_power_get_vbat_adval(fd), NWZ_POWER_AD_BASE_VBAT);
438}
439
440int nwz_power_get_sample_count(int fd)
441{
442 int status;
443 if(ioctl(fd, NWZ_POWER_GET_SAMPLE_COUNT, &status) < 0)
444 return -1;
445 return status;
446}
447
448int nwz_power_get_vsys_adval(int fd)
449{
450 int status;
451 if(ioctl(fd, NWZ_POWER_GET_VSYS_ADVAL, &status) < 0)
452 return -1;
453 return status;
454}
455
456int nwz_power_get_vsys_voltage(int fd)
457{
458 return nwz_power_adval_to_mv(nwz_power_get_vsys_adval(fd), NWZ_POWER_AD_BASE_VSYS);
459}
460
461int nwz_power_get_acc_charge_mode(int fd)
462{
463 int status;
464 if(ioctl(fd, NWZ_POWER_GET_ACCESSARY_CHARGE_MODE, &status) < 0)
465 return -1;
466 return status;
467}
468
469int nwz_power_is_fully_charged(int fd)
470{
471 int status;
472 if(ioctl(fd, NWZ_POWER_IS_FULLY_CHARGED, &status) < 0)
473 return -1;
474 return status;
475}