/*
* 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_