/*
 * Copyright 2017 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef CAMERA_COMMON_LIBCAB_TEST_INTERNAL_H_
#define CAMERA_COMMON_LIBCAB_TEST_INTERNAL_H_

namespace libcab_test {

// This test command is carried in the first byte of the |req_header|
// parameter for the Request() function call, and the fake camera algorithm
// library should operate as instructed.
enum RequestTestCommand {
  // This is to test normal behavior.
  REQUEST_TEST_COMMAND_NORMAL,
  // This is to verify that the request header and callback status is passed
  // through IPC correctly. Upon receiving this command, the fake camera
  // algorithm library should calculate the hashcode from the entire
  // |req_header| and invoke the return callback using the hashcode as the
  // |status| parameter.
  REQUEST_TEST_COMMAND_VERIFY_STATUS,
  // This is to emulate a dead lock.
  REQUEST_TEST_COMMAND_DEAD_LOCK
};

inline uint32_t SimpleHash(const uint8_t buf[], uint32_t size) {
  uint32_t hash, i;
  for (hash = size, i = 0; i < size; ++i) {
    hash = (hash << 4) ^ (hash >> 28) ^ buf[i];
  }
  return hash;
}

}  // namespace libcab_test

#endif  // CAMERA_COMMON_LIBCAB_TEST_INTERNAL_H_
