summaryrefslogtreecommitdiff
path: root/src/components/policy/src/policy/include/policy/update_status_manager.h
blob: 43d40d0c198454cd8da8108d1c1985a168494685 (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
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
#ifndef SRC_COMPONENTS_POLICY_INCLUDE_POLICY_UPDATE_STATUS_MANAGER_H
#define SRC_COMPONENTS_POLICY_INCLUDE_POLICY_UPDATE_STATUS_MANAGER_H

#include "policy/update_status_manager_interface.h"
#include "policy/policy_types.h"
#include "utils/lock.h"
#include "utils/timer_thread.h"

namespace policy {

class PolicyListener;

class UpdateStatusManager : public UpdateStatusManagerInterface {
 public:
  /**
   * @brief Constructor
   */
  UpdateStatusManager();

  ~UpdateStatusManager();

  /**
   * @brief Sets listener pointer
   * @param listener Pointer to policy listener implementation
   */
  void set_listener(PolicyListener* listener);

  /**
   * @brief Update status hanlder for PTS sending out
   * @param update_timeout Timeout for waiting of incoming PTU
   */
  void OnUpdateSentOut(uint32_t update_timeout);

  /**
   * @brief Update status handler for PTU waiting timeout
   */
  void OnUpdateTimeoutOccurs();

  /**
   * @brief Update status handler for valid PTU receiving
   */
  void OnValidUpdateReceived();

  /**
   * @brief Update status handler for wrong PTU receiving
   */
  void OnWrongUpdateReceived();

  /**
   * @brief Update status handler for reset PT to default state
   * @param is_update_required Update necessity flag
   */
  void OnResetDefaultPT(bool is_update_required);

  /**
   * @brief Update status handler for restarting retry sequence
   */
  void OnResetRetrySequence();

  /**
   * @brief Update status handler on new application registering
   */
  void OnNewApplicationAdded();

  /**
   * @brief Update status handler for policy initialization
   * @param is_update_required Update necessity flag
   */
  void OnPolicyInit(bool is_update_required);

  /**
   * @brief Returns current policy update status
   * @return
   */
  PolicyTableStatus GetUpdateStatus();

private:
  /*
   * @brief Sets flag for update progress
   *
   * @param value
   */
  void set_exchange_in_progress(bool value);

  /*
   * @brief Sets flag for pending update
   *
   * @param value
   */
  void set_exchange_pending(bool value);

  /*
   * @brief Sets flag for update necessity
   *
   * @param value
   */
  void set_update_required(bool value);

  /**
   * @brief Check update status and notify HMI on changes
   */
  void CheckUpdateStatus();

private:
  PolicyListener* listener_;
  bool exchange_in_progress_;
  bool update_required_;
  bool exchange_pending_;
  sync_primitives::Lock exchange_in_progress_lock_;
  sync_primitives::Lock update_required_lock_;
  sync_primitives::Lock exchange_pending_lock_;
  /**
   * @brief Last status of policy table update
   */
  PolicyTableStatus last_update_status_;


  /**
   * @brief The Policy update response timer class
   */
  class UpdateResponseTimer : public timer::TimerThread<UpdateStatusManager> {
   public:
    UpdateResponseTimer(UpdateStatusManager* callee) :
        timer::TimerThread<UpdateStatusManager>(
          "Policy UpdResponse",
          callee,
          &UpdateStatusManager::OnUpdateTimeoutOccurs) {
    }
    ~UpdateResponseTimer();
  };
  UpdateResponseTimer update_response_timer_;
};

}

#endif // SRC_COMPONENTS_POLICY_INCLUDE_POLICY_UPDATE_STATUS_MANAGER_H