1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef LOG_KMSG_H 17 #define LOG_KMSG_H 18 19 #include "log_buffer.h" 20 #include "kmsg_parser.h" 21 22 namespace OHOS { 23 namespace HiviewDFX { 24 class LogKmsg { 25 public: 26 static LogKmsg& GetInstance(HilogBuffer& hilogBuffer); 27 ssize_t LinuxReadOneKmsg(KmsgParser& parser); 28 int LinuxReadAllKmsg(); 29 void Start(); 30 void Stop(); 31 void ReadAllKmsg(); 32 ~LogKmsg(); 33 34 private: 35 enum ThreadStatus { 36 START, 37 NONEXIST, 38 STOP 39 }; 40 41 private: LogKmsg(HilogBuffer & hilogBuffer)42 explicit LogKmsg(HilogBuffer& hilogBuffer) : hilogBuffer(hilogBuffer) 43 { 44 threadStatus = NONEXIST; 45 } 46 int kmsgCtl = -1; 47 HilogBuffer& hilogBuffer; 48 std::thread logKmsgThread; 49 ThreadStatus threadStatus; 50 std::mutex startMtx; 51 }; 52 } // namespace HiviewDFX 53 } // namespace OHOS 54 #endif 55