15beee10b17e676380727da0b16b98ba7568669ecPeng Xu/*
25beee10b17e676380727da0b16b98ba7568669ecPeng Xu * Copyright (C) 2017 The Android Open Source Project
35beee10b17e676380727da0b16b98ba7568669ecPeng Xu *
45beee10b17e676380727da0b16b98ba7568669ecPeng Xu * Licensed under the Apache License, Version 2.0 (the "License");
55beee10b17e676380727da0b16b98ba7568669ecPeng Xu * you may not use this file except in compliance with the License.
65beee10b17e676380727da0b16b98ba7568669ecPeng Xu * You may obtain a copy of the License at
75beee10b17e676380727da0b16b98ba7568669ecPeng Xu *
85beee10b17e676380727da0b16b98ba7568669ecPeng Xu *      http://www.apache.org/licenses/LICENSE-2.0
95beee10b17e676380727da0b16b98ba7568669ecPeng Xu *
105beee10b17e676380727da0b16b98ba7568669ecPeng Xu * Unless required by applicable law or agreed to in writing, software
115beee10b17e676380727da0b16b98ba7568669ecPeng Xu * distributed under the License is distributed on an "AS IS" BASIS,
125beee10b17e676380727da0b16b98ba7568669ecPeng Xu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135beee10b17e676380727da0b16b98ba7568669ecPeng Xu * See the License for the specific language governing permissions and
145beee10b17e676380727da0b16b98ba7568669ecPeng Xu * limitations under the License.
155beee10b17e676380727da0b16b98ba7568669ecPeng Xu */
165beee10b17e676380727da0b16b98ba7568669ecPeng Xu#ifndef HIDUTIL_HIDLOCAL_H_
175beee10b17e676380727da0b16b98ba7568669ecPeng Xu#define HIDUTIL_HIDLOCAL_H_
185beee10b17e676380727da0b16b98ba7568669ecPeng Xu
195beee10b17e676380727da0b16b98ba7568669ecPeng Xu#include "HidItem.h"
205beee10b17e676380727da0b16b98ba7568669ecPeng Xu#include "TriState.h"
215beee10b17e676380727da0b16b98ba7568669ecPeng Xu#include <cstddef>
225beee10b17e676380727da0b16b98ba7568669ecPeng Xu#include <vector>
235beee10b17e676380727da0b16b98ba7568669ecPeng Xu
245beee10b17e676380727da0b16b98ba7568669ecPeng Xunamespace HidUtil {
255beee10b17e676380727da0b16b98ba7568669ecPeng Xu
265beee10b17e676380727da0b16b98ba7568669ecPeng Xu// A set of local states that parser has to keep track during parsing.
275beee10b17e676380727da0b16b98ba7568669ecPeng Xu// They are all specified in HID spec v1.11 section 6.2.2.8
285beee10b17e676380727da0b16b98ba7568669ecPeng Xustruct HidLocal {
295beee10b17e676380727da0b16b98ba7568669ecPeng Xu    // add a token to change local states, return value indicates if operation is successful
305beee10b17e676380727da0b16b98ba7568669ecPeng Xu    bool append(const HidItem &i);
315beee10b17e676380727da0b16b98ba7568669ecPeng Xu    // clear all local states. This need to be done after each main tag
325beee10b17e676380727da0b16b98ba7568669ecPeng Xu    void clear();
335beee10b17e676380727da0b16b98ba7568669ecPeng Xu
345beee10b17e676380727da0b16b98ba7568669ecPeng Xu    // multiple usage, designator or strings may exist for single input/output/feature report
355beee10b17e676380727da0b16b98ba7568669ecPeng Xu    uint32_t getUsage(size_t index) const;
365beee10b17e676380727da0b16b98ba7568669ecPeng Xu    uint32_t getDesignator(size_t index) const;
375beee10b17e676380727da0b16b98ba7568669ecPeng Xu    uint32_t getString(size_t index) const;
385beee10b17e676380727da0b16b98ba7568669ecPeng Xu
395beee10b17e676380727da0b16b98ba7568669ecPeng Xu    std::vector<uint32_t> usage;
405beee10b17e676380727da0b16b98ba7568669ecPeng Xu    // keep track of usage min when expecting a usage max
415beee10b17e676380727da0b16b98ba7568669ecPeng Xu    tri_uint usageMin;
425beee10b17e676380727da0b16b98ba7568669ecPeng Xu
435beee10b17e676380727da0b16b98ba7568669ecPeng Xu    std::vector<uint32_t> designator;
445beee10b17e676380727da0b16b98ba7568669ecPeng Xu    // keep track of designator min when expecting designator max
455beee10b17e676380727da0b16b98ba7568669ecPeng Xu    tri_uint designatorMin;
465beee10b17e676380727da0b16b98ba7568669ecPeng Xu
475beee10b17e676380727da0b16b98ba7568669ecPeng Xu    std::vector<uint32_t> string;
485beee10b17e676380727da0b16b98ba7568669ecPeng Xu    // keep track of string min when expecting string max
495beee10b17e676380727da0b16b98ba7568669ecPeng Xu    tri_uint stringMin;
505beee10b17e676380727da0b16b98ba7568669ecPeng Xu
515beee10b17e676380727da0b16b98ba7568669ecPeng Xu    tri_uint delimeter;
525beee10b17e676380727da0b16b98ba7568669ecPeng Xu};
535beee10b17e676380727da0b16b98ba7568669ecPeng Xu} // namespace HidUtil
545beee10b17e676380727da0b16b98ba7568669ecPeng Xu
555beee10b17e676380727da0b16b98ba7568669ecPeng Xu#endif // HIDUTIL_HIDLOCAL_H_
56