1 /* 2 * Copyright (c) 2015 - 2016, The Linux Foundation. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without modification, are permitted 5 * provided that the following conditions are met: 6 * * Redistributions of source code must retain the above copyright notice, this list of 7 * conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above copyright notice, this list of 9 * conditions and the following disclaimer in the documentation and/or other materials provided 10 * with the distribution. 11 * * Neither the name of The Linux Foundation nor the names of its contributors may be used to 12 * endorse or promote products derived from this software without specific prior written 13 * permission. 14 * 15 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 16 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 19 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 20 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 21 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 */ 24 25 #ifndef __HW_EVENTS_H__ 26 #define __HW_EVENTS_H__ 27 28 #include <sys/poll.h> 29 #include <string> 30 #include <vector> 31 #include <map> 32 #include <utility> 33 34 #include "hw_interface.h" 35 #include "hw_events_interface.h" 36 37 namespace sdm { 38 39 using std::vector; 40 41 class HWEvents : public HWEventsInterface { 42 public: 43 DisplayError Init(int fb_num, HWEventHandler *event_handler, 44 vector<const char *> *event_list); 45 DisplayError Deinit(); 46 47 private: 48 static const int kMaxStringLength = 1024; 49 50 typedef void (HWEvents::*EventParser)(char *); 51 52 struct HWEventData { 53 const char* event_name = NULL; 54 EventParser event_parser = NULL; 55 }; 56 57 static void* DisplayEventThread(void *context); 58 void* DisplayEventHandler(); 59 void HandleVSync(char *data); 60 void HandleBlank(char *data) { } 61 void HandleIdleTimeout(char *data); 62 void HandleThermal(char *data); 63 void HandleCECMessage(char *data); 64 void HandleThreadExit(char *data) { } 65 void PopulateHWEventData(); 66 DisplayError SetEventParser(const char *event_name, HWEventData *event_data); 67 pollfd InitializePollFd(HWEventData *event_data); 68 69 HWEventHandler *event_handler_ = NULL; 70 vector<const char *> *event_list_ = NULL; 71 vector<HWEventData> event_data_list_ = {}; 72 vector<pollfd> poll_fds_; 73 pthread_t event_thread_; 74 std::string event_thread_name_ = "SDM_EventThread"; 75 bool exit_threads_ = false; 76 const char* fb_path_ = "/sys/devices/virtual/graphics/fb"; 77 int fb_num_ = -1; 78 int exit_fd_ = -1; 79 }; 80 81 } // namespace sdm 82 83 #endif // __HW_EVENTS_H__ 84 85