| /* |
| * Copyright (C) 2017 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| #ifndef HIDUTIL_HIDGLOBAL_H_ |
| #define HIDUTIL_HIDGLOBAL_H_ |
| |
| #include "HidItem.h" |
| #include "TriState.h" |
| |
| namespace HidUtil { |
| // A set of global states that parser has to keep track during parsing. |
| // They are all specified in HID spec v1.11 section 6.2.2.7 |
| struct HidGlobal { |
| // add a token and change global states, returns value indicates if operation is successful |
| bool append(const HidItem &i); |
| |
| tri_uint usagePage; |
| tri_int logicalMin; |
| tri_int logicalMax; |
| tri_int physicalMin; |
| tri_int physicalMax; |
| tri_uint exponent; |
| tri_uint unit; |
| tri_uint reportSize; |
| tri_uint reportId; |
| tri_uint reportCount; |
| }; |
| |
| // HID specs allows PUSH and POP to save a snapshot of current global states and come back to the |
| // saved sates later. HidStack manages this logic. Note that PUSH and POP are also HidItems, so |
| // there is no explicit push and pop function in this stack implementation. |
| class HidGlobalStack { |
| public: |
| HidGlobalStack(); |
| |
| // add a token and change global states, returns value indicates if operation is successful |
| // it the token is push/pop, the stack push/pop accordingly. |
| bool append(const HidItem &i); |
| |
| // get reference to top element on the stack |
| const HidGlobal& top() const; |
| private: |
| std::vector<HidGlobal> mStack; |
| }; |
| |
| } //namespace HidUtil |
| |
| #endif // HIDUTIL_HIDGLOABL_H_ |