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