/*
 * Copyright (C) 2019 MediaTek Inc.
 *
 * 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 CAMERA_HAL_MEDIATEK_MTKLIBV4L2_SYSCALL_H_
#define CAMERA_HAL_MEDIATEK_MTKLIBV4L2_SYSCALL_H_

#include <fcntl.h>
#include <poll.h>
#include <sys/ioctl.h>
#include <unistd.h>

class SysCall {
 public:
  SysCall();
  ~SysCall();

  static int open(const char* pathname, int flags);
  static int close(int fd);
  static int ioctl(int fd, int request, void* arg);
  static int poll(struct pollfd* pfd, nfds_t nfds, int timeout);
};

#endif  // CAMERA_HAL_MEDIATEK_MTKLIBV4L2_SYSCALL_H_
