/*
 * SPDX-FileCopyrightText: Copyright 2021-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * 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
 *
 * 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.
 */

/****************************************************************************
 * Includes
 ****************************************************************************/

#include "command_stream.hpp"

#include <stdio.h>

using namespace std;
using namespace EthosU::CommandStream;

/****************************************************************************
 * Data
 ****************************************************************************/
// clang-format off
__attribute__((section(".sram.data"), aligned(16))) char commandStream[] = {
    DRIVER_ACTION_MAGIC()
    DRIVER_ACTION_NOP()
    DRIVER_ACTION_NOP()
    DRIVER_ACTION_COMMAND_STREAM(84)

    0x30, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_DMA0_SRC_REGION          0   -
    0x30, 0x40, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_DMA0_SRC                 0   0x00000030 (48)
    0x31, 0x01, 0x01, 0x00,                          // cmd0.NPU_SET_DMA0_DST_REGION          1   -
    0x31, 0x40, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00,  // cmd1.NPU_SET_DMA0_DST                 0   0x00000480 (1152)
    0x32, 0x40, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_DMA0_LEN                 0   0x00000050 (80)
    0x10, 0x00, 0x00, 0x00,                          // cmd0.NPU_OP_DMA_START                 0   -
    0x0f, 0x01, 0x01, 0x00,                          // cmd0.NPU_SET_IFM_REGION               1   -
    0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_IFM_BASE0                0   0x00000000 (0)
    0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_IFM_BASE1                0   0x00000000 (0)
    0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_IFM_BASE2                0   0x00000000 (0)
    0x03, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_IFM_BASE3                0   0x00000000 (0)
    0x0b, 0x01, 0x07, 0x00,                          // cmd0.NPU_SET_IFM_HEIGHT0_M1           7   -
    0x0c, 0x01, 0x07, 0x00,                          // cmd0.NPU_SET_IFM_HEIGHT1_M1           7   -
    0x0a, 0x01, 0x07, 0x00,                          // cmd0.NPU_SET_IFM_WIDTH0_M1            7   -
    0x04, 0x01, 0x0f, 0x00,                          // cmd0.NPU_SET_IFM_DEPTH_M1            15   -
    0x06, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_IFM_STRIDE_C             0   0x00000001 (1)
    0x05, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_IFM_STRIDE_Y             0   0x00000080 (128)
    0x04, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_IFM_STRIDE_X             0   0x00000010 (16)
    0x09, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_IFM_ZERO_POINT           0   -
    0x05, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_IFM_PRECISION            0   -
    0x07, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_IFM_UPSCALE              0   -
    0x00, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_IFM_PAD_TOP              0   -
    0x01, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_IFM_PAD_LEFT             0   -
    0x03, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_IFM_PAD_BOTTOM           0   -
    0x02, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_IFM_PAD_RIGHT            0   -
    0x1f, 0x01, 0x01, 0x00,                          // cmd0.NPU_SET_OFM_REGION               1   -
    0x10, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,  // cmd1.NPU_SET_OFM_BASE0                0   0x00000400 (1024)
    0x11, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_OFM_BASE1                0   0x00000000 (0)
    0x12, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_OFM_BASE2                0   0x00000000 (0)
    0x13, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_OFM_BASE3                0   0x00000000 (0)
    0x1b, 0x01, 0x07, 0x00,                          // cmd0.NPU_SET_OFM_HEIGHT0_M1           7   -
    0x1c, 0x01, 0x07, 0x00,                          // cmd0.NPU_SET_OFM_HEIGHT1_M1           7   -
    0x1a, 0x01, 0x07, 0x00,                          // cmd0.NPU_SET_OFM_WIDTH0_M1            7   -
    0x12, 0x01, 0x07, 0x00,                          // cmd0.NPU_SET_OFM_HEIGHT_M1            7   -
    0x11, 0x01, 0x07, 0x00,                          // cmd0.NPU_SET_OFM_WIDTH_M1             7   -
    0x13, 0x01, 0x01, 0x00,                          // cmd0.NPU_SET_OFM_DEPTH_M1             1   -
    0x16, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_OFM_STRIDE_C             0   0x00000001 (1)
    0x15, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_OFM_STRIDE_Y             0   0x00000010 (16)
    0x14, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_OFM_STRIDE_X             0   0x00000002 (2)
    0x18, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_OFM_ZERO_POINT           0   -
    0x14, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_OFM_PRECISION            0   -
    0x21, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_KERNEL_HEIGHT_M1         0   -
    0x20, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_KERNEL_WIDTH_M1          0   -
    0x22, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_KERNEL_STRIDE            0   -
    0x28, 0x01, 0x01, 0x00,                          // cmd0.NPU_SET_WEIGHT_REGION            1   -
    0x20, 0x40, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00,  // cmd1.NPU_SET_WEIGHT_BASE              0   0x00000480 (1152)
    0x21, 0x40, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_WEIGHT_LENGTH            0   0x00000050 (80)
    0x29, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_SCALE_REGION             0   -
    0x22, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_SCALE_BASE               0   0x00000000 (0)
    0x23, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,  // cmd1.NPU_SET_SCALE_LENGTH             0   0x00000020 (32)
    0x25, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_ACTIVATION               0   -
    0x26, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_ACTIVATION_MIN           0   -
    0x27, 0x01, 0xff, 0x00,                          // cmd0.NPU_SET_ACTIVATION_MAX         255   -
    0x16, 0x01, 0x07, 0x00,                          // cmd0.NPU_SET_OFM_BLK_HEIGHT_M1        7   -
    0x15, 0x01, 0x07, 0x00,                          // cmd0.NPU_SET_OFM_BLK_WIDTH_M1         7   -
    0x17, 0x01, 0x07, 0x00,                          // cmd0.NPU_SET_OFM_BLK_DEPTH_M1         7   -
    0x0d, 0x01, 0x06, 0x00,                          // cmd0.NPU_SET_IFM_IB_END              10   -
    0x2d, 0x01, 0x0e, 0x00,                          // cmd0.NPU_SET_AB_START                30   -
    0x24, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_ACC_FORMAT               0   -
    0x2f, 0x01, 0x00, 0x00,                          // cmd0.NPU_SET_BLOCKDEP                 0   -
    0x11, 0x00, 0x00, 0x00,                          // cmd0.NPU_OP_DMA_WAIT                  0   -
    0x02, 0x00, 0x00, 0x00,                          // cmd0.NPU_OP_CONV                      0   -
    0x00, 0x00, 0xff, 0xff,                          // cmd0.NPU_OP_STOP                  65535   -
}; // clang-format on

__attribute__((section(".sram.data"), aligned(16))) char tflmModel[] = {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa4, 0x7b, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xa4, 0x7b,
    0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x5c, 0xe6, 0x4d, 0xf9, 0xef, 0x6f, 0xcf,
    0x5e, 0x2e, 0xbe, 0x0d, 0xbd, 0x4c, 0xfc, 0x0b, 0xeb, 0xa9, 0x29, 0xd9, 0x27, 0xe7, 0xa4, 0xf4, 0x63, 0xf3, 0x92,
    0x42, 0x32, 0xa2, 0x81, 0x51, 0x01, 0xc1, 0x00, 0x00, 0xf0, 0xaf, 0xeb, 0xcd, 0xc3, 0xe1, 0x12, 0xb7, 0x44, 0xff,
    0x4f, 0xbb, 0x39, 0x01, 0x08, 0x9e, 0x96, 0x87, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x4c, 0x35, 0x30, 0x89, 0x1d,
    0x00, 0xe0, 0xfc, 0xff, 0xbf, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};

__attribute__((section(".sram.data"), aligned(16))) char tflmArena[] = {
    0xac, 0x0a, 0x7f, 0x8c, 0x2f, 0xaa, 0xc4, 0x97, 0x75, 0xa6, 0x16, 0xb7, 0xc0, 0xcc, 0x21, 0xd8, 0x43, 0xb3, 0x4e,
    0x9a, 0xfb, 0x52, 0xa2, 0xdb, 0xc3, 0x76, 0x7d, 0x8b, 0x67, 0x7d, 0xe5, 0xd8, 0x09, 0xa4, 0x74, 0x6c, 0xd3, 0xde,
    0xa1, 0x9f, 0x15, 0x51, 0x59, 0xa5, 0xf2, 0xd6, 0x66, 0x62, 0x24, 0xb7, 0x05, 0x70, 0x57, 0x3a, 0x2b, 0x4c, 0x46,
    0x3c, 0x4b, 0xe4, 0xd8, 0xbd, 0x84, 0x0e, 0x58, 0x9a, 0xb2, 0xf6, 0x8c, 0xcd, 0xcc, 0x45, 0x3a, 0x39, 0x29, 0x62,
    0xc1, 0x42, 0x48, 0x7a, 0xe6, 0x7d, 0xae, 0xca, 0x27, 0x4a, 0xea, 0xcf, 0x57, 0xa8, 0x65, 0x87, 0xae, 0xc8, 0xdf,
    0x7a, 0x58, 0x5e, 0x6b, 0x91, 0x51, 0x8b, 0x8d, 0x64, 0xa5, 0xe6, 0xf3, 0xec, 0x19, 0x42, 0x09, 0xd6, 0x4d, 0x6b,
    0x2f, 0x12, 0x48, 0x98, 0x5f, 0x56, 0x09, 0x1b, 0x4e, 0x16, 0x94, 0x97, 0xee, 0xa5, 0x73, 0x08, 0x2d, 0x05, 0xd0,
    0x13, 0x45, 0x5e, 0xf3, 0x92, 0x26, 0xd5, 0xc5, 0x1e, 0x08, 0xf5, 0xfe, 0x47, 0x35, 0xc7, 0x4f, 0x07, 0xee, 0x23,
    0xaf, 0x1d, 0xb9, 0xde, 0xc0, 0x09, 0xbe, 0xde, 0x52, 0xbb, 0x86, 0xfa, 0x63, 0x60, 0x3e, 0x79, 0xd8, 0xa7, 0x95,
    0xcc, 0xb1, 0x7c, 0x08, 0xcd, 0xf3, 0x82, 0x23, 0x76, 0x1d, 0x03, 0x3e, 0x85, 0x93, 0xc2, 0xd0, 0xc7, 0x93, 0x0c,
    0xcb, 0xad, 0x8e, 0x3b, 0x47, 0x1e, 0xa7, 0x61, 0x7b, 0xb8, 0x20, 0xdd, 0xd1, 0xa3, 0xc1, 0x3f, 0xff, 0x94, 0x09,
    0xcd, 0xb2, 0x24, 0xb9, 0x4a, 0x91, 0x89, 0x7f, 0xd2, 0xd5, 0xf1, 0x20, 0xa2, 0x34, 0xc2, 0x1f, 0xda, 0x97, 0x85,
    0xca, 0xc2, 0x1c, 0x1b, 0xf4, 0x48, 0x27, 0x6a, 0x97, 0xe0, 0x3d, 0x79, 0xa3, 0xea, 0xb9, 0x43, 0xfe, 0x79, 0xb3,
    0x2f, 0xcb, 0x2d, 0x34, 0xc6, 0x72, 0xab, 0xa6, 0xbc, 0xb7, 0x44, 0xc6, 0x74, 0x1c, 0xd8, 0x6f, 0x37, 0x22, 0xe3,
    0x84, 0x91, 0x80, 0xa8, 0x9d, 0x22, 0x80, 0x68, 0xcf, 0x04, 0xa4, 0xe7, 0xfa, 0x52, 0x35, 0x5c, 0x1d, 0x9e, 0x85,
    0x17, 0x51, 0x26, 0x26, 0x4e, 0xb2, 0x9c, 0xe8, 0x0d, 0xea, 0x38, 0xf4, 0x62, 0xef, 0x9d, 0x11, 0xf1, 0xf0, 0x62,
    0x4f, 0x79, 0x99, 0xf1, 0x84, 0xb1, 0x10, 0xe7, 0x69, 0xc6, 0x8b, 0xae, 0x2a, 0xec, 0x2f, 0x73, 0xba, 0xb5, 0x08,
    0x5c, 0x1f, 0xba, 0xf1, 0x9c, 0x78, 0x53, 0xe1, 0x6f, 0x01, 0x51, 0x00, 0xe7, 0x41, 0xf5, 0x97, 0xb2, 0xe7, 0x6f,
    0x6a, 0x19, 0xa9, 0xef, 0x6a, 0x0f, 0x39, 0x68, 0x45, 0xf8, 0x23, 0x39, 0xb1, 0xaa, 0x66, 0x2f, 0x34, 0xa7, 0x77,
    0xec, 0xae, 0xab, 0x0b, 0xbb, 0xc0, 0x2b, 0xae, 0xa1, 0xdb, 0x35, 0x52, 0xdc, 0xaf, 0x5b, 0x5b, 0x50, 0x01, 0x21,
    0x80, 0xf7, 0x2c, 0xc0, 0x8e, 0xe9, 0xbf, 0x50, 0x63, 0xca, 0x9a, 0x9b, 0x35, 0x26, 0x1c, 0x5d, 0x8c, 0x4b, 0x36,
    0x53, 0x79, 0x6a, 0xf8, 0x91, 0xaa, 0x3f, 0xd6, 0x09, 0x54, 0x30, 0x48, 0x70, 0xcb, 0xc8, 0x5f, 0xa2, 0x44, 0x11,
    0x06, 0xfd, 0x06, 0xb3, 0x7d, 0xf5, 0xc4, 0x9b, 0x1f, 0x1a, 0x2f, 0x44, 0x1d, 0xa7, 0x7f, 0xf2, 0x78, 0x35, 0xf4,
    0x37, 0x93, 0xa2, 0x83, 0x94, 0x4b, 0x29, 0xcc, 0xf3, 0xcb, 0xfe, 0x64, 0x1b, 0x32, 0xa7, 0xb4, 0x24, 0xf4, 0x94,
    0xe8, 0xb7, 0xd7, 0x40, 0x4e, 0x0f, 0x14, 0x6a, 0x8f, 0x24, 0x60, 0x77, 0x94, 0xc6, 0x85, 0x79, 0xe3, 0xac, 0x92,
    0x3e, 0xba, 0x5b, 0x9e, 0x9f, 0x17, 0x3b, 0xb2, 0x28, 0xcf, 0xaa, 0x87, 0x56, 0x8d, 0x8b, 0x41, 0x1c, 0x75, 0x91,
    0xbc, 0xac, 0x55, 0x37, 0x05, 0xa8, 0x30, 0x22, 0x34, 0x51, 0x31, 0xf5, 0x5f, 0x23, 0x45, 0xa6, 0x41, 0xc7, 0xa9,
    0x38, 0x53, 0x32, 0xa3, 0x16, 0x17, 0xf3, 0xc0, 0xc5, 0x64, 0x5e, 0x5f, 0x5c, 0x9b, 0xa9, 0xc5, 0x9c, 0x2c, 0xd2,
    0x5e, 0x6e, 0x79, 0x03, 0x00, 0xa1, 0xdb, 0x18, 0x71, 0xd7, 0x72, 0x9f, 0xb2, 0x8e, 0x83, 0xd6, 0x24, 0xf5, 0x74,
    0xac, 0xa2, 0xe7, 0x99, 0x18, 0x30, 0x63, 0xd1, 0xf8, 0x5d, 0x3f, 0xf9, 0xf9, 0x83, 0x49, 0xd1, 0xe0, 0x62, 0x86,
    0xf9, 0x77, 0x2a, 0xbe, 0x76, 0x82, 0xcd, 0x03, 0x0d, 0xfa, 0x70, 0x51, 0x43, 0x0e, 0xe7, 0x27, 0xd7, 0x9a, 0x95,
    0x2b, 0x7f, 0x73, 0xc9, 0x60, 0x40, 0xbd, 0x7f, 0xe9, 0x1d, 0x05, 0x00, 0x36, 0x08, 0x0a, 0x8a, 0xf7, 0x13, 0x71,
    0x72, 0x09, 0x66, 0x48, 0x2b, 0x32, 0xc6, 0xfa, 0xba, 0x33, 0xc5, 0x1e, 0x7f, 0x8d, 0x04, 0x5c, 0x17, 0xd8, 0xcf,
    0x4b, 0xbb, 0xd6, 0x1b, 0x7b, 0x82, 0xf0, 0x64, 0x1e, 0x79, 0x19, 0x4c, 0xb0, 0x62, 0x58, 0x67, 0x51, 0x3e, 0xde,
    0x66, 0xe1, 0xa3, 0x23, 0x0d, 0x6a, 0xde, 0x7a, 0x11, 0xeb, 0x7b, 0xf8, 0x6b, 0x10, 0xc3, 0xa7, 0x81, 0x37, 0x52,
    0xda, 0x45, 0xb1, 0xae, 0x37, 0xb0, 0x90, 0xe3, 0xca, 0x0c, 0x91, 0x94, 0x5c, 0x77, 0xdd, 0xd1, 0x90, 0xf0, 0x43,
    0x32, 0xca, 0x4b, 0x82, 0x9b, 0x95, 0xf3, 0x85, 0x0e, 0x5b, 0xae, 0xea, 0x29, 0x7c, 0x0c, 0x18, 0x3a, 0xfc, 0xd0,
    0xeb, 0xc1, 0x3a, 0x71, 0x93, 0x24, 0xdc, 0x46, 0x15, 0x0a, 0x5b, 0xe6, 0xed, 0x56, 0x90, 0x18, 0x47, 0x2b, 0xbc,
    0x8d, 0x51, 0x68, 0x33, 0x65, 0x02, 0x0b, 0x68, 0xdb, 0xaa, 0x02, 0xbb, 0xa3, 0xd7, 0x33, 0x81, 0xbd, 0x21, 0x50,
    0x34, 0xad, 0xa5, 0x20, 0x38, 0x61, 0xb7, 0xb6, 0x14, 0x65, 0xd7, 0x80, 0x84, 0x16, 0x4a, 0x26, 0x5b, 0xc5, 0x43,
    0x13, 0xa1, 0xe5, 0x2e, 0xae, 0x94, 0xd7, 0x65, 0x2a, 0xb6, 0x25, 0x96, 0x73, 0xb5, 0x85, 0x8d, 0xb8, 0xc4, 0x25,
    0x05, 0xbc, 0x89, 0x39, 0x2a, 0xe8, 0x69, 0x35, 0xd4, 0x4d, 0xbe, 0xab, 0x5e, 0x1e, 0xb9, 0x33, 0x01, 0x18, 0x35,
    0x7d, 0x25, 0x7d, 0x62, 0x85, 0xad, 0x02, 0x83, 0xd2, 0x91, 0x03, 0x3e, 0x1f, 0x45, 0x5e, 0x20, 0x28, 0xb4, 0xe2,
    0xac, 0x35, 0xbc, 0x6b, 0x97, 0xd9, 0x49, 0x0d, 0xfd, 0x51, 0xf6, 0x70, 0xf7, 0xeb, 0x6e, 0x28, 0x49, 0xae, 0x3f,
    0x48, 0x35, 0x90, 0xc1, 0x13, 0x0c, 0x7f, 0x93, 0x5f, 0xb2, 0x66, 0x65, 0x48, 0x0f, 0x90, 0x97, 0x9a, 0xc5, 0x62,
    0xe5, 0xc2, 0x19, 0x7f, 0x92, 0xf8, 0x54, 0x90, 0xa3, 0xb4, 0xe0, 0x1b, 0x39, 0x43, 0xe9, 0x3c, 0xe4, 0xec, 0x5b,
    0xe7, 0xf3, 0x3d, 0x1f, 0x18, 0xae, 0x0e, 0xcf, 0x76, 0x72, 0x60, 0x9f, 0xfe, 0x72, 0x04, 0x3d, 0xae, 0xd8, 0xc3,
    0x9f, 0x83, 0xfa, 0xed, 0x12, 0x11, 0xb3, 0x8b, 0x68, 0xbf, 0x1d, 0xfc, 0xd3, 0x24, 0x4c, 0x56, 0xaa, 0x5b, 0xc4,
    0xcd, 0x0d, 0x55, 0xd0, 0x79, 0x0b, 0x6d, 0x69, 0x6d, 0x66, 0x81, 0x65, 0x4b, 0x93, 0xe9, 0xac, 0xb8, 0xfa, 0x8f,
    0xe1, 0x10, 0xa6, 0xf2, 0x3f, 0x98, 0x4c, 0xce, 0x94, 0x9d, 0x13, 0x2f, 0x50, 0x95, 0x68, 0xb9, 0xe1, 0x6e, 0x84,
    0x25, 0xf7, 0x19, 0xc0, 0x49, 0xb1, 0xd0, 0xa5, 0xa5, 0x96, 0xbc, 0x43, 0xaa, 0xb9, 0x79, 0x07, 0xe0, 0xa8, 0x76,
    0xcb, 0x56, 0x80, 0x75, 0x34, 0x80, 0x88, 0xbd, 0xe5, 0xc1, 0xf4, 0x53, 0x36, 0x04, 0x3b, 0xa1, 0x8a, 0xdc, 0xa4,
    0x68, 0x27, 0x16, 0x65, 0xa0, 0xc3, 0x81, 0x6c, 0xe4, 0x3c, 0x6a, 0x9e, 0xfb, 0x95, 0x3c, 0x9b, 0xfb, 0xea, 0x90,
    0x79, 0x79, 0xd8, 0xe9, 0x04, 0x46, 0x95, 0x5a, 0x78, 0xd5, 0x01, 0x34, 0x4d, 0x1f, 0xa9, 0x50, 0xb7, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

char input0[] = {
    0xac, 0x0a, 0x7f, 0x8c, 0x2f, 0xaa, 0xc4, 0x97, 0x75, 0xa6, 0x16, 0xb7, 0xc0, 0xcc, 0x21, 0xd8, 0x43, 0xb3, 0x4e,
    0x9a, 0xfb, 0x52, 0xa2, 0xdb, 0xc3, 0x76, 0x7d, 0x8b, 0x67, 0x7d, 0xe5, 0xd8, 0x09, 0xa4, 0x74, 0x6c, 0xd3, 0xde,
    0xa1, 0x9f, 0x15, 0x51, 0x59, 0xa5, 0xf2, 0xd6, 0x66, 0x62, 0x24, 0xb7, 0x05, 0x70, 0x57, 0x3a, 0x2b, 0x4c, 0x46,
    0x3c, 0x4b, 0xe4, 0xd8, 0xbd, 0x84, 0x0e, 0x58, 0x9a, 0xb2, 0xf6, 0x8c, 0xcd, 0xcc, 0x45, 0x3a, 0x39, 0x29, 0x62,
    0xc1, 0x42, 0x48, 0x7a, 0xe6, 0x7d, 0xae, 0xca, 0x27, 0x4a, 0xea, 0xcf, 0x57, 0xa8, 0x65, 0x87, 0xae, 0xc8, 0xdf,
    0x7a, 0x58, 0x5e, 0x6b, 0x91, 0x51, 0x8b, 0x8d, 0x64, 0xa5, 0xe6, 0xf3, 0xec, 0x19, 0x42, 0x09, 0xd6, 0x4d, 0x6b,
    0x2f, 0x12, 0x48, 0x98, 0x5f, 0x56, 0x09, 0x1b, 0x4e, 0x16, 0x94, 0x97, 0xee, 0xa5, 0x73, 0x08, 0x2d, 0x05, 0xd0,
    0x13, 0x45, 0x5e, 0xf3, 0x92, 0x26, 0xd5, 0xc5, 0x1e, 0x08, 0xf5, 0xfe, 0x47, 0x35, 0xc7, 0x4f, 0x07, 0xee, 0x23,
    0xaf, 0x1d, 0xb9, 0xde, 0xc0, 0x09, 0xbe, 0xde, 0x52, 0xbb, 0x86, 0xfa, 0x63, 0x60, 0x3e, 0x79, 0xd8, 0xa7, 0x95,
    0xcc, 0xb1, 0x7c, 0x08, 0xcd, 0xf3, 0x82, 0x23, 0x76, 0x1d, 0x03, 0x3e, 0x85, 0x93, 0xc2, 0xd0, 0xc7, 0x93, 0x0c,
    0xcb, 0xad, 0x8e, 0x3b, 0x47, 0x1e, 0xa7, 0x61, 0x7b, 0xb8, 0x20, 0xdd, 0xd1, 0xa3, 0xc1, 0x3f, 0xff, 0x94, 0x09,
    0xcd, 0xb2, 0x24, 0xb9, 0x4a, 0x91, 0x89, 0x7f, 0xd2, 0xd5, 0xf1, 0x20, 0xa2, 0x34, 0xc2, 0x1f, 0xda, 0x97, 0x85,
    0xca, 0xc2, 0x1c, 0x1b, 0xf4, 0x48, 0x27, 0x6a, 0x97, 0xe0, 0x3d, 0x79, 0xa3, 0xea, 0xb9, 0x43, 0xfe, 0x79, 0xb3,
    0x2f, 0xcb, 0x2d, 0x34, 0xc6, 0x72, 0xab, 0xa6, 0xbc, 0xb7, 0x44, 0xc6, 0x74, 0x1c, 0xd8, 0x6f, 0x37, 0x22, 0xe3,
    0x84, 0x91, 0x80, 0xa8, 0x9d, 0x22, 0x80, 0x68, 0xcf, 0x04, 0xa4, 0xe7, 0xfa, 0x52, 0x35, 0x5c, 0x1d, 0x9e, 0x85,
    0x17, 0x51, 0x26, 0x26, 0x4e, 0xb2, 0x9c, 0xe8, 0x0d, 0xea, 0x38, 0xf4, 0x62, 0xef, 0x9d, 0x11, 0xf1, 0xf0, 0x62,
    0x4f, 0x79, 0x99, 0xf1, 0x84, 0xb1, 0x10, 0xe7, 0x69, 0xc6, 0x8b, 0xae, 0x2a, 0xec, 0x2f, 0x73, 0xba, 0xb5, 0x08,
    0x5c, 0x1f, 0xba, 0xf1, 0x9c, 0x78, 0x53, 0xe1, 0x6f, 0x01, 0x51, 0x00, 0xe7, 0x41, 0xf5, 0x97, 0xb2, 0xe7, 0x6f,
    0x6a, 0x19, 0xa9, 0xef, 0x6a, 0x0f, 0x39, 0x68, 0x45, 0xf8, 0x23, 0x39, 0xb1, 0xaa, 0x66, 0x2f, 0x34, 0xa7, 0x77,
    0xec, 0xae, 0xab, 0x0b, 0xbb, 0xc0, 0x2b, 0xae, 0xa1, 0xdb, 0x35, 0x52, 0xdc, 0xaf, 0x5b, 0x5b, 0x50, 0x01, 0x21,
    0x80, 0xf7, 0x2c, 0xc0, 0x8e, 0xe9, 0xbf, 0x50, 0x63, 0xca, 0x9a, 0x9b, 0x35, 0x26, 0x1c, 0x5d, 0x8c, 0x4b, 0x36,
    0x53, 0x79, 0x6a, 0xf8, 0x91, 0xaa, 0x3f, 0xd6, 0x09, 0x54, 0x30, 0x48, 0x70, 0xcb, 0xc8, 0x5f, 0xa2, 0x44, 0x11,
    0x06, 0xfd, 0x06, 0xb3, 0x7d, 0xf5, 0xc4, 0x9b, 0x1f, 0x1a, 0x2f, 0x44, 0x1d, 0xa7, 0x7f, 0xf2, 0x78, 0x35, 0xf4,
    0x37, 0x93, 0xa2, 0x83, 0x94, 0x4b, 0x29, 0xcc, 0xf3, 0xcb, 0xfe, 0x64, 0x1b, 0x32, 0xa7, 0xb4, 0x24, 0xf4, 0x94,
    0xe8, 0xb7, 0xd7, 0x40, 0x4e, 0x0f, 0x14, 0x6a, 0x8f, 0x24, 0x60, 0x77, 0x94, 0xc6, 0x85, 0x79, 0xe3, 0xac, 0x92,
    0x3e, 0xba, 0x5b, 0x9e, 0x9f, 0x17, 0x3b, 0xb2, 0x28, 0xcf, 0xaa, 0x87, 0x56, 0x8d, 0x8b, 0x41, 0x1c, 0x75, 0x91,
    0xbc, 0xac, 0x55, 0x37, 0x05, 0xa8, 0x30, 0x22, 0x34, 0x51, 0x31, 0xf5, 0x5f, 0x23, 0x45, 0xa6, 0x41, 0xc7, 0xa9,
    0x38, 0x53, 0x32, 0xa3, 0x16, 0x17, 0xf3, 0xc0, 0xc5, 0x64, 0x5e, 0x5f, 0x5c, 0x9b, 0xa9, 0xc5, 0x9c, 0x2c, 0xd2,
    0x5e, 0x6e, 0x79, 0x03, 0x00, 0xa1, 0xdb, 0x18, 0x71, 0xd7, 0x72, 0x9f, 0xb2, 0x8e, 0x83, 0xd6, 0x24, 0xf5, 0x74,
    0xac, 0xa2, 0xe7, 0x99, 0x18, 0x30, 0x63, 0xd1, 0xf8, 0x5d, 0x3f, 0xf9, 0xf9, 0x83, 0x49, 0xd1, 0xe0, 0x62, 0x86,
    0xf9, 0x77, 0x2a, 0xbe, 0x76, 0x82, 0xcd, 0x03, 0x0d, 0xfa, 0x70, 0x51, 0x43, 0x0e, 0xe7, 0x27, 0xd7, 0x9a, 0x95,
    0x2b, 0x7f, 0x73, 0xc9, 0x60, 0x40, 0xbd, 0x7f, 0xe9, 0x1d, 0x05, 0x00, 0x36, 0x08, 0x0a, 0x8a, 0xf7, 0x13, 0x71,
    0x72, 0x09, 0x66, 0x48, 0x2b, 0x32, 0xc6, 0xfa, 0xba, 0x33, 0xc5, 0x1e, 0x7f, 0x8d, 0x04, 0x5c, 0x17, 0xd8, 0xcf,
    0x4b, 0xbb, 0xd6, 0x1b, 0x7b, 0x82, 0xf0, 0x64, 0x1e, 0x79, 0x19, 0x4c, 0xb0, 0x62, 0x58, 0x67, 0x51, 0x3e, 0xde,
    0x66, 0xe1, 0xa3, 0x23, 0x0d, 0x6a, 0xde, 0x7a, 0x11, 0xeb, 0x7b, 0xf8, 0x6b, 0x10, 0xc3, 0xa7, 0x81, 0x37, 0x52,
    0xda, 0x45, 0xb1, 0xae, 0x37, 0xb0, 0x90, 0xe3, 0xca, 0x0c, 0x91, 0x94, 0x5c, 0x77, 0xdd, 0xd1, 0x90, 0xf0, 0x43,
    0x32, 0xca, 0x4b, 0x82, 0x9b, 0x95, 0xf3, 0x85, 0x0e, 0x5b, 0xae, 0xea, 0x29, 0x7c, 0x0c, 0x18, 0x3a, 0xfc, 0xd0,
    0xeb, 0xc1, 0x3a, 0x71, 0x93, 0x24, 0xdc, 0x46, 0x15, 0x0a, 0x5b, 0xe6, 0xed, 0x56, 0x90, 0x18, 0x47, 0x2b, 0xbc,
    0x8d, 0x51, 0x68, 0x33, 0x65, 0x02, 0x0b, 0x68, 0xdb, 0xaa, 0x02, 0xbb, 0xa3, 0xd7, 0x33, 0x81, 0xbd, 0x21, 0x50,
    0x34, 0xad, 0xa5, 0x20, 0x38, 0x61, 0xb7, 0xb6, 0x14, 0x65, 0xd7, 0x80, 0x84, 0x16, 0x4a, 0x26, 0x5b, 0xc5, 0x43,
    0x13, 0xa1, 0xe5, 0x2e, 0xae, 0x94, 0xd7, 0x65, 0x2a, 0xb6, 0x25, 0x96, 0x73, 0xb5, 0x85, 0x8d, 0xb8, 0xc4, 0x25,
    0x05, 0xbc, 0x89, 0x39, 0x2a, 0xe8, 0x69, 0x35, 0xd4, 0x4d, 0xbe, 0xab, 0x5e, 0x1e, 0xb9, 0x33, 0x01, 0x18, 0x35,
    0x7d, 0x25, 0x7d, 0x62, 0x85, 0xad, 0x02, 0x83, 0xd2, 0x91, 0x03, 0x3e, 0x1f, 0x45, 0x5e, 0x20, 0x28, 0xb4, 0xe2,
    0xac, 0x35, 0xbc, 0x6b, 0x97, 0xd9, 0x49, 0x0d, 0xfd, 0x51, 0xf6, 0x70, 0xf7, 0xeb, 0x6e, 0x28, 0x49, 0xae, 0x3f,
    0x48, 0x35, 0x90, 0xc1, 0x13, 0x0c, 0x7f, 0x93, 0x5f, 0xb2, 0x66, 0x65, 0x48, 0x0f, 0x90, 0x97, 0x9a, 0xc5, 0x62,
    0xe5, 0xc2, 0x19, 0x7f, 0x92, 0xf8, 0x54, 0x90, 0xa3, 0xb4, 0xe0, 0x1b, 0x39, 0x43, 0xe9, 0x3c, 0xe4, 0xec, 0x5b,
    0xe7, 0xf3, 0x3d, 0x1f, 0x18, 0xae, 0x0e, 0xcf, 0x76, 0x72, 0x60, 0x9f, 0xfe, 0x72, 0x04, 0x3d, 0xae, 0xd8, 0xc3,
    0x9f, 0x83, 0xfa, 0xed, 0x12, 0x11, 0xb3, 0x8b, 0x68, 0xbf, 0x1d, 0xfc, 0xd3, 0x24, 0x4c, 0x56, 0xaa, 0x5b, 0xc4,
    0xcd, 0x0d, 0x55, 0xd0, 0x79, 0x0b, 0x6d, 0x69, 0x6d, 0x66, 0x81, 0x65, 0x4b, 0x93, 0xe9, 0xac, 0xb8, 0xfa, 0x8f,
    0xe1, 0x10, 0xa6, 0xf2, 0x3f, 0x98, 0x4c, 0xce, 0x94, 0x9d, 0x13, 0x2f, 0x50, 0x95, 0x68, 0xb9, 0xe1, 0x6e, 0x84,
    0x25, 0xf7, 0x19, 0xc0, 0x49, 0xb1, 0xd0, 0xa5, 0xa5, 0x96, 0xbc, 0x43, 0xaa, 0xb9, 0x79, 0x07, 0xe0, 0xa8, 0x76,
    0xcb, 0x56, 0x80, 0x75, 0x34, 0x80, 0x88, 0xbd, 0xe5, 0xc1, 0xf4, 0x53, 0x36, 0x04, 0x3b, 0xa1, 0x8a, 0xdc, 0xa4,
    0x68, 0x27, 0x16, 0x65, 0xa0, 0xc3, 0x81, 0x6c, 0xe4, 0x3c, 0x6a, 0x9e, 0xfb, 0x95, 0x3c, 0x9b, 0xfb, 0xea, 0x90,
    0x79, 0x79, 0xd8, 0xe9, 0x04, 0x46, 0x95, 0x5a, 0x78, 0xd5, 0x01, 0x34, 0x4d, 0x1f, 0xa9, 0x50, 0xb7};

char expected0[] = {0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x65, 0xff, 0x00, 0xff,
                    0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x70, 0xff, 0x50, 0xff, 0x00, 0xff, 0x00, 0xff,
                    0x59, 0xff, 0x88, 0xff, 0x00, 0xff, 0x00, 0xff, 0x31, 0xff, 0x7c, 0xff, 0x00, 0xff, 0x00, 0xff,
                    0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x2a, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
                    0x00, 0xff, 0xab, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x73, 0xff,
                    0x00, 0xff, 0x9d, 0xff, 0x00, 0xff, 0x00, 0xff, 0xbe, 0xff, 0xa5, 0xff, 0x00, 0xff, 0x5f, 0xff,
                    0x00, 0xff, 0xbd, 0xff, 0x00, 0xff, 0x3f, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
                    0x00, 0xff, 0x00, 0xff, 0x17, 0xff, 0x00, 0xff, 0x00, 0xff, 0x1f, 0xff, 0x00, 0xff, 0x00, 0xff};

/****************************************************************************
 * Functions
 ****************************************************************************/

int main() {
    /*
     * The command stream compiled by Vela only uses two base addresses (for a
     * network without fast scratch).
     *
     * The first base address points at the TFLM model. This buffer contains
     * constant data, like the command stream, weights and biases.
     *
     * The second base address points at the TFLM arena. This buffer contains
     * variable data, like the IFM, OFM, activations etc.
     *
     * NOTE! Really important to understand is that the command stream will
     * access the IFM and OFM buffers using the second base address only.
     * Consequently the input- and output pointers below are referring to an
     * offset within the TFLM arena.
     *
     * NOTE! The offsets of the IFM and OFM buffers within the TFLM arena
     * varies between models. They can be found comparing input tensor 4 and
     * output tensor 0 with the address of the TFLM arena.
     *
     * The remaining base addresses are unused.
     */
    CommandStream cs(
        DataPointer(commandStream, sizeof(commandStream)),
        BasePointers({DataPointer(tflmModel, sizeof(tflmModel)), DataPointer(tflmArena, sizeof(tflmArena))}),
        PmuEvents({ETHOSU_PMU_CYCLE, ETHOSU_PMU_NPU_IDLE, ETHOSU_PMU_NPU_ACTIVE}));

    const size_t repeat = 100;
    uint64_t cycleCount = 0;
    int errors          = 0;
    int res;

    // Input data located inside the arena
    DataPointer inputPointer(tflmArena, sizeof(input0));

    // Output data located inside the arena
    DataPointer outputPointer(tflmArena + 1024, sizeof(expected0));

    // Expected output data
    DataPointer expectedPointer(expected0, sizeof(expected0));

    printf("Running %u iterations using sync API...\n", repeat);

    // Clear PMU
    cs.getPmu().clear();

    // Run inference
    res = cs.run(repeat);
    if (res == 0) {
        cycleCount = cs.getPmu().getCycleCount();

        // Print PMU counters
        cs.getPmu().print();
        printf("cycleCount=%llu, cycleCountPerJob=%llu\n", cycleCount, cycleCount / repeat);

        // Compare output with expected data
        if (outputPointer != expectedPointer) {
            printf("Output mismatch for sync test\n");
            res = 1;
        }
    }
    errors = res;
    printf("\n");

    // Test using the async API
    printf("Running %u iterations using async API...\n", repeat);

    // Clear PMU
    cs.getPmu().clear();

    // Dummy wait loop count for inference to complete
    int wait_loops = 0;

    // Run async job
    for (size_t r = repeat; r > 0; r--) {
        res = cs.run_async();
        if (res != 0) {
            // Invoke async failed
            errors++;
            break;
        }

        // Wait for inference to complete
        while ((res = cs.wait_async(false)) == 1) {
            // CPU is free to do other work while waiting for inference completion
            wait_loops++;
        }

        // Check inference result
        if (res != 0) {
            printf("Async inference test failed\n");
            errors++;
            break;
        }
    }

    // Print async results on success
    if (res == 0) {
        cycleCount = cs.getPmu().getCycleCount();

        // Print PMU counters
        cs.getPmu().print();
        printf("cycleCount=%llu, cycleCountPerJob=%llu\n", cycleCount, cycleCount / repeat);

        printf("wait_loops=%d\n", wait_loops);

        // Compare output with expected data
        if (outputPointer != expectedPointer) {
            printf("Output mismatch for async test\n");
            errors++;
        }
    }
    printf("\n");

    return errors;
}
