1 /*
2 // Copyright (c) 2018 Intel Corporation
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 */
16
17 #include "id_button.hpp"
18
19 // add the button iface class to registry
20 static ButtonIFRegister<IDButton> buttonRegister;
21
simPress()22 void IDButton::simPress()
23 {
24 pressed();
25 }
26
handleEvent(sd_event_source *,int fd,uint32_t)27 void IDButton::handleEvent(sd_event_source* /* es */, int fd,
28 uint32_t /* revents */)
29 {
30 int n = -1;
31 char buf = '0';
32 n = ::lseek(fd, 0, SEEK_SET);
33
34 if (n < 0)
35 {
36 phosphor::logging::log<phosphor::logging::level::ERR>(
37 (getFormFactorType() + " : lseek error!").c_str());
38 return;
39 }
40
41 n = ::read(fd, &buf, sizeof(buf));
42 if (n < 0)
43 {
44 phosphor::logging::log<phosphor::logging::level::ERR>(
45 (getFormFactorType() + " : read error!").c_str());
46 return;
47 }
48
49 if (buf == '0')
50 {
51 phosphor::logging::log<phosphor::logging::level::DEBUG>(
52 (getFormFactorType() + " : pressed").c_str());
53 // emit pressed signal
54 pressed();
55 }
56 else
57 {
58 phosphor::logging::log<phosphor::logging::level::DEBUG>(
59 (getFormFactorType() + " : released").c_str());
60 // released
61 released();
62 }
63 }
64