summaryrefslogtreecommitdiffstats
path: root/app/state.c
blob: 0c232604af18ec8a566439aa4d7fa388a554d9f7 (plain)
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
#include "project.h"

uint32_t up_time, down_time,usb_up_time,usb_down_time;
int locked;




void
state_show (void)
{
#ifndef SLIM
  char buf[17];
  uint32_t t;
  int d, h, m, s;

  t = up_time ? up_time : down_time;

  d = t / 86400;
  t -= d * 86400;
  h = t / 3600;
  t -= h * 3600;
  m = t / 60;
  t -= m * 60;
  s = t;


  snprintf (buf, sizeof (buf), "%4s%3d %02d:%02d:%02d",
            up_time ? "up" : "down", d, h, m, s);

  //lcd_write (buf, 0, 0);

  lcd_write (have_key ? " Key  " : "No Key", 0, 1);

  lcd_write (locked ? " Locked " : "UnLocked", 8, 1);
#endif

}


void
state_tick (void)
{

  if (host_has_power)
    {
      down_time = 0;
      up_time++;
    }
  else
    {
      down_time++;
      up_time = 0;
      locked = 0;
    }

  if ((down_time > POWER_RETENTION_TIME) && have_key)
    {
      key_wipe ();
    }


  if (usb_running)
    {
      usb_down_time = 0;
      usb_up_time++;
    }
  else
    {
      usb_down_time++;
      usb_up_time = 0;
      locked = 0;
    }

  if ((usb_down_time > USB_RETENTION_TIME) && have_key)
    {
      key_wipe ();
    }


  state_show ();
}


void
state_init (void)
{
  down_time = 0;
  up_time = 0;
  locked = 0;
}