GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)

This commit is contained in:
lai
2026-09-06 03:52:57 +08:00
commit b1928b41c0
21813 changed files with 4413081 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
#!/usr/bin/env make
###############################################################################
#
#Copyright (c) XMEDIA. All rights reserved.
#
#
###############################################################################
REGTOOLS := regtools
REGTOOLS_BUILD := $(ROOTFS_BUILDDIR)/regtools
CROSS_STRIP := $(CONFIG_XMEDIA_USR_ARM_TOOLCHAINS)-strip
CFG_FLAGS := -DVENDOR_I2C
CFG_FLAGS += -g3
CFG_FLAGS += -Wall -Wunused
CFG_FLAGS += -D__LINUX_ARM_ARCH__=7
CFG_FLAGS += -mtune=arm9tdmi
CFG_FLAGS += -DTARGET_ARM
CFG_FLAGS += -mlittle-endian
CFG_FLAGS += $(filter-out -Werror,$(SDK_USR_CFLAGS))
CFG_FLAGS += -I$(ROOTFS_SRCDIR)/$(REGTOOLS)/include/common
CFG_FLAGS += -I$(ROOTFS_SRCDIR)/$(REGTOOLS)/include/utils
COMMON_SRC=$(wildcard $(addprefix $(ROOTFS_SRCDIR)/$(REGTOOLS)/source/,common/*.c) )
COMMON_OBJ=$(patsubst %.c,$(REGTOOLS_BUILD)/source/common/%.o, $(notdir $(COMMON_SRC)))
TOOLS_SRC=$(wildcard $(addprefix $(ROOTFS_SRCDIR)/$(REGTOOLS)/source/,tools/*.c) )
TOOLS_OBJ=$(patsubst %.c,$(REGTOOLS_BUILD)/source/tools/%.o, $(notdir $(TOOLS_SRC)))
UITILS_SRC=$(wildcard $(addprefix $(ROOTFS_SRCDIR)/$(REGTOOLS)/source/,utils/*.c) )
UITILS_OBJ=$(patsubst %.c,$(REGTOOLS_BUILD)/source/utils/%.o, $(notdir $(UITILS_SRC)))
LINK_OBJ=$(wildcard $(REGTOOLS_BUILD)/*.o)
COMPILE=$(CROSS_COMPILE)-gcc $(CFG_FLAGS) -c -w -o "$(REGTOOLS_BUILD)/$(*F).o" "$<"
###############################################################################
rootfs_unstrip: $(ROOTFS_PREFIX)/bin/regtools
clean: $(REGTOOLS).clean
$(REGTOOLS).clean:
rm -rf $(REGTOOLS_BUILD)
install_regtools = cd $(REGTOOLS_BUILD); ln -sf regtools $1; \
cp -rf $(REGTOOLS_BUILD)/$1 $(ROOTFS_PREFIX)/bin
install_ddr_stat_tools = cd $(REGTOOLS_BUILD);\
echo "\#!/bin/sh" >$1;\
echo "" >>$1;\
echo "while true; do (cat /proc/ddr_bandwidth;sleep 1) done | grep \"Bandwidth Util:\"" >>$1;\
echo "" >>$1; \
chmod +x $(REGTOOLS_BUILD)/$1;\
cp -f $(REGTOOLS_BUILD)/$1 $(ROOTFS_PREFIX)/bin
$(ROOTFS_PREFIX)/bin/regtools: $(REGTOOLS_BUILD)/.built
$(call mkdir,$(@D))
$(call install_regtools,xmmd)
$(call install_regtools,xmmd.l)
$(call install_regtools,xmmm)
$(call install_regtools,xmmc)
$(call install_regtools,i2c_read)
$(call install_regtools,i2c_write)
$(call install_regtools,ssp_read)
$(call install_regtools,ssp_write)
$(call install_ddr_stat_tools,xmddrs)
cp -rf $(REGTOOLS_BUILD)/regtools $(ROOTFS_PREFIX)/bin
touch $@
$(REGTOOLS_BUILD)/.built: $(COMMON_OBJ) $(TOOLS_OBJ) $(UITILS_OBJ) prepare
$(CROSS_COMPILE)-gcc -o $(REGTOOLS_BUILD)/regtools -lpthread -lrt $(filter-out -Werror,$(SDK_USR_CFLAGS)) $(LINK_OBJ)
$(CROSS_STRIP) $(REGTOOLS_BUILD)/regtools
touch $@
$(REGTOOLS_BUILD)/%.o : $(ROOTFS_SRCDIR)/$(REGTOOLS)/%.c
$(call mkdir,$(@D))
$(COMPILE)
touch $@
prepare:
@$(call mkdir,$(REGTOOLS_BUILD))
(test ! -f $(ROOTFS_SRCDIR)/$(REGTOOLS)/*.o) || cp -af $(ROOTFS_SRCDIR)/$(REGTOOLS)/*.o $(REGTOOLS_BUILD)/
@@ -0,0 +1,35 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_H__
#define __XMEDIA_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#include "bsp_config.h"
#include "bsp_defs.h"
#include "bsp_type.h"
#include "bsp_version.h"
#include "bsp_os.h"
#include "bsp_module.h"
#include "bsp_error.h"
#include "bsp_dbg.h"
#include "bsp_bits.h"
#include "bsp_utils.h"
#include "bsp_help_en.h"
#include "bsp_thread.h"
#include <errno.h>
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_H__ */
@@ -0,0 +1,66 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_BITS_H__
#define __XMEDIA_BITS_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
/*** High 8 bits of 16 ***/
#define GET_0Byte_32(ul) ((U32)ul & 0x000000FF)
#define GET_1Byte_32(ul) ((U32)ul & 0x0000FF00) >> 8
#define GET_2Byte_32(ul) ((U32)ul & 0x00FF0000) >> 16
#define GET_3Byte_32(ul) ((U32)ul & 0xFF000000) >> 24
#define GET_HI8_16(us) ((U16)us >> 8)
#define GET_LO8_16(us) ((U16)us & 0x00FF)
#define SET_HI8_16(us, v) (((U16)us & 0x00FF) | (v << 8))
#define SET_LO8_16(us, v) (((U16)us & 0xFF00) | (v))
/**/
#define GET_HI16_32(dw) ((dw) >> 16)
#define GET_LO16_32(dw) ((dw) & 0x0000FFFF)
#define SET_HI16_32(dw, v) ((dw & 0x0000FFFF) | (v << 16))
#define SET_LO16_32(dw, v) ((dw & 0xFFFF0000) | (v))
#define GET_LO32_64(dw) ((dw) & 0x00000000FFFFFFFF)
/*15...3 2 1 0*/
#define SET_BIT0_16(us, v) ((us & 0xFFFE) | v)
#define SET_BIT1_16(us, v) ((us & 0xFFFD) | (v << 1))
#define SET_BIT2_16(us, v) ((us & 0xFFFB) | (v << 2))
#define SET_BIT3_16(us, v) ((us & 0xFFF7) | (v << 3))
#define SET_BIT4_16(us, v) ((us & 0xFFEF) | (v << 4))
#define SET_BIT5_16(us, v) ((us & 0xFFDF) | (v << 5))
#define SET_BIT6_16(us, v) ((us & 0xFFBF) | (v << 6))
#define SET_BIT7_16(us, v) ((us & 0xFF7F) | (v << 7))
#define SET_BIT8_16(us, v) ((us & 0xFEFF) | (v << 8))
#define SET_BIT9_16(us, v) ((us & 0xFDFF) | (v << 9))
#define SET_BIT10_16(us, v) ((us & 0xFBFF) | (v << 10))
#define SET_BIT11_16(us, v) ((us & 0xF7FF) | (v << 11))
#define SET_BIT12_16(us, v) ((us & 0xEFFF) | (v << 12))
#define SET_BIT13_16(us, v) ((us & 0xDFFF) | (v << 13))
#define SET_BIT14_16(us, v) ((us & 0xBFFF) | (v << 14))
#define SET_BIT15_16(us, v) ((us & 0x7FFF) | (v << 15))
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_BITS_H__ */
@@ -0,0 +1,93 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_CONFIG_H__
#define __XMEDIA_CONFIG_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#if defined(TARGET_X86)
//#define PC_EMULATOR
/*#undefine PC_EMULATOR*/
/* Whether to use the BTRACE debug library */
/*#define USE_BTRACE*/
/*#undefine USE_BTRACE*/
#endif
/* DEBUG MODE */
#define DEBUG
/*#define RELEASE*/
#define OS_LINUX
/**/
/************ -D in Makefile ******/
/* Simulate the program on ARM, Use -DARM_CPU*/
/*#define ARM_CPU*/
/*Simulate the program on ZSP, Use -DZSP_CPU*/
/*#define ZSP_CPU*/
/* Whether to perform the print function */
#define LOGQUEUE
/* Whether to do Arm and ZSP communication statistics */
#define AZ_STAT
/* multi-task logqueue*/
#define MULTI_TASK_LOGQUEUE
/* Using inerrupt mode on ARM and ZSP communication */
#define USE_AZ_INT
#define STAT
#if 0
/*Turn on both when test video */
#define AZ_POOL_LOW
#define AZ_MAGIC_LOW
#endif
//#define H264STREAM_CORRECT
/*RingBuffer count */
#define RBSTAT
#define BITSTREAM_ENC_CHECKSUM
#define BITSTREAM_DEC_CHECKSUM
#define RTSP_VOD
#define SAVE_VOICE 1
/* Support network on-demand */
#define MPLAYER_NETWORK
#define DEMO_MEDIA
#define DEMO_VOICE
#define DEMO_VIDEO_ENC
#define DEMO_VIDEO_DEC
//#define SYNC_USE_COND
#define AZPOOLS_X
#if defined(IMAGESIZE_CIF)
#define CONFIG_VIU_CAPTURE_DOWNSCALING //CIF
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_CONFIG_H__ */
+238
View File
@@ -0,0 +1,238 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_DBG_H__
#define __XMEDIA_DBG_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#include <stdio.h>
#if defined(DEBUG)
#include <assert.h>
#endif
#ifdef LOGQUEUE
#include "bsp_message.h"
USE_GLOBALVAR LOG_QUEUE gLogQueue;
#endif
#if defined(DEBUG)
#define DBG_ASSERT(expression) assert(expression)
#define DBG_ASSERT_STR(expression, str) \
do \
{ \
if (!(expression)) \
{ \
WRITE_LOG_DEBUG(str); \
assert(expression); \
} \
}while(0);
#define DBG_LOG WRITE_LOG_DEBUG
#define DBG_LOG1 WRITE_LOG_DEBUG1
#define DBG_LOG2 WRITE_LOG_DEBUG2
#else
#define DBG_ASSERT(expression) ((void)0)
#define DBG_ASSERT_STR(expression, str)
#define DBG_LOG(args...)
#define DBG_LOG1 WRITE_LOG_DEBUG1
#define DBG_LOG2 WRITE_LOG_DEBUG2
#endif
#define LOG_LEVEL_NORMAL 0
#define LOG_LEVEL_FATAL 1
#define LOG_LEVEL_ERROR 2
#define LOG_LEVEL_WARN 3
#define LOG_LEVEL_INFO 4
#define LOG_LEVEL_DEBUG 5
#define LOG_LEVEL_DEBUG1 6
#define LOG_LEVEL_DEBUG2 7
#define LOG_LEVEL_ALL 10
#define LOG_LEVEL_NONE 0
#define LOG_LEVEL_DEFAULT LOG_LEVEL_INFO
#define LOG_LEVEL_MINI LOG_LEVEL_ERROR
#define LOG_LEVEL_MAX LOG_LEVEL_ALL
/* LOG */
/*
*WRITE_LOG_FATAL("Memory is too much , total: %u M, it's waste, please save people's money , 1024");
*WRITE_LOG ( LOG_LEVEL_WARN, "after VIU device analyse: you are a handsome pig." );
*/
/*gLogQueue is a Global Var, now defined at bsp_message.c and
declare at bsp_dbg.h, it you use this log functions outside,
you can declare your owner "gLogQueue"*/
/*Call this first , and only call it once*/
/*level = LOG_LEVEL_ERROR .....*/
#ifdef LOGQUEUE
#define LOG_CREATE(level, msglen) Log_Create(&gLogQueue, level, msglen)
#define LOG_SETLEVEL(level) (gLogQueue.ucMinLevel = level)
#define LOG_GETLEVEL() (gLogQueue.ucMinLevel)
#define LOG_DESTROY() Log_Destroy(&gLogQueue)
#if 0
#define WRITE_LOG_NORMAL(psz_format, args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_NORMAL, psz_format, ##args )
#define WRITE_LOG_INFO(psz_format, args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_INFO, psz_format, ##args )
#define WRITE_LOG_FATAL(psz_format, args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_FATAL, psz_format, ##args )
#define WRITE_LOG_ERROR(psz_format, args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_ERROR, psz_format, ##args )
#define WRITE_LOG_WARN(psz_format, args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_WARN, psz_format, ##args )
#define WRITE_LOG_DEBUG(psz_format, args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_DEBUG, "{%s:%i}:"psz_format, \
__FILE__, __LINE__ ,##args)
#define WRITE_LOG_DEBUG1(psz_format, args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_DEBUG1, "{%s:%i}:"psz_format, \
__FILE__, __LINE__ ,##args)
#define WRITE_LOG_DEBUG2(psz_format, args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_DEBUG2, "{%s:%i}:"psz_format, \
__FILE__, __LINE__ ,##args)
#define WRITE_LOG(iLevel, psz_format, args... ) \
Log_Msg(&gLogQueue, iLevel, psz_format, ##args )
#endif /* End of #if 0 */
#define MKSTR(exp) # exp
#define MKMARCOTOSTR(exp) MKSTR(exp)
#define LINENUMBER MKMARCOTOSTR(__LINE__)
#define ATTACHINFO ""
#define WRITE_LOG_NORMAL(args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_NORMAL, args )
#define WRITE_LOG_INFO(args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_INFO, args)
#define WRITE_LOG_FATAL(args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_FATAL, args )
#define WRITE_LOG_ERROR(args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_ERROR, args )
#define WRITE_LOG_WARN(args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_WARN, args )
#define WRITE_LOG_DEBUG(args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_DEBUG, ATTACHINFO args)
#define WRITE_LOG_DEBUG1(args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_DEBUG1, ATTACHINFO args)
#define WRITE_LOG_DEBUG2(args... ) \
Log_Msg(&gLogQueue, LOG_LEVEL_DEBUG2, ATTACHINFO args)
#define WRITE_LOG(iLevel, args... ) \
Log_Msg(&gLogQueue, iLevel, args )
#else
#define LOG_CREATE(level, msglen)
#define LOG_SETLEVEL(level)
#define LOG_GETLEVEL() (0)
#define LOG_DESTROY()
#define WRITE_LOG_NORMAL(args...)
#define WRITE_LOG_INFO(args...)
#define WRITE_LOG_FATAL(args...)
#define WRITE_LOG_ERROR(args...)
#define WRITE_LOG_WARN(args...)
#define WRITE_LOG_DEBUG(args...)
#define WRITE_LOG_DEBUG1(args...)
#define WRITE_LOG_DEBUG2(args...)
#define WRITE_LOG(args...)
#endif
#if defined(OS_LINUX) && defined(USE_BTRACE) && defined(DEBUG)
#if !defined(BTRACE_ENABLE)
#define BTRACE_ENABLE
#endif
#else
#if defined(BTRACE_ENABLE)
#undef BTRACE_ENABLE
#endif
#endif
#if defined(BTRACE_ENABLE)
#define BTRACE_INIT() btrace()
#define BTRACE_PRINT btrace_print
#define BTRACE_PRINT_FUNC() btrace_print_str(__func__)
#define BTRACE_PRINT_STR(str) btrace_print_str(str)
#else
#define BTRACE_INIT()
#define BTRACE_PRINT
#define BTRACE_PRINT_FUNC()
#define BTRACE_PRINT_STR(str)
#endif
EXTERNFUNC XMEDIA_RET bsp_md(IN VOID* pStart,IN U32 ulLen,IN FD fd);
/*Memory Dump 2 file*/
EXTERNFUNC XMEDIA_RET bsp_md2file(IN VOID* pStart,IN U32 ulLen,
IN const char* strLabel,
IN char* fn);
EXTERNFUNC void bsp_hexdump(OUT FILE *stream,
IN const void *src, IN size_t len,
IN size_t width);
EXTERNFUNC VOID bsp_hexdump_log(IN const void *src, IN size_t len,
IN size_t width);
VOID bsp_hexdump2(OUT FILE *stream,
IN const void *src, IN size_t len, IN size_t width);
#if defined(DEBUG)
#define MEM_DUMP bsp_md
#define MEM_DUMP2FILE bsp_md2file
#else
#define MEM_DUMP
#define MEM_DUMP2FILE
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_DBG_H__ */
@@ -0,0 +1,90 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_DEFS_H__
#define __XMEDIA_DEFS_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#ifndef __GNUC__
#define __asm__ asm
#define __inline__ inline
#endif
#define DO_NOTHING
#define INLINE inline
/*use for parameter INPUT, *DO NOT Modify the value* */
#define IN
/* use for parameter OUTPUT, the value maybe change when return from the function
* the init value is ingore in the function.*/
#define OUT
/*use for parameter INPUT and OUTPUT*/
#define IO
/* -------------------------------- */
#define EXTERN extern
#define STATIC static
#define LOCALVAR static
#define GLOBALVAR extern
#define DECLARE_GLOBALVAR
#define USE_GLOBALVAR extern
#define LOCALFUNC static
#define EXTERNFUNC extern
#define LAPI
#define HAPI
/*Multimedia Frame API*/
#define MMFAPI
/* -------- Standard input/output/err *****/
#define STDIN stdin
#define STDOUT stdout
#define STDERR stderr
#define MIN(x,y) ((x) < (y) ? (x) : (y))
#define MAX(x,y) ((x) > (y) ? (x) : (y))
#define ALIGN_START(v,a) (((v)) & (~((a)-1)))
#define ALIGN_END(v,a) (((v) & ~((a)-1)) + ((a)-1) )
#define ALIGN_NEXT(v,a) ((((v) + ((a)-1)) & (~((a)-1))))
#define ALIGN_LENGTH(l, a) ALIGN_NEXT(l, a)
#define ALIGNTYPE_1BYTE 1
/*zsp*/
#define ALIGNTYPE_2BYTE 2
/*x86... default*/
#define ALIGNTYPE_4BYTE 4
#define ALIGNTYPE_8BYTE 8
/*1 Page*/
#define ALIGNTYPE_4K 4096
#define ALIGNTYPE_ZSP ALIGNTYPE_2BYTE
#define ALIGNTYPE_VIDEO ALIGNTYPE_8BYTE
#define PRINT_OUT(args...) printf(##args)
#define PACK_ONE_BYTE __attribute__((__packed__))
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_DEFS_H__ */
+246
View File
@@ -0,0 +1,246 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_ERROR_H__
#define __XMEDIA_ERROR_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
/*
*/
#define ERR_SUB_MODULE_BASE(module, submodule) \
(( module << 24 ) | ( submodule << 16 ))
#define ERR_NUMBER(err, base) ( (base) | (err) )
/*****************************************************************************
****************************************************************************/
/*0x00XX*/
#define ERR_GENERAL_BASE ERR_SUB_MODULE_BASE(MODULE_GENERAL, 0)
#define ERR_GEN_NOT_ENOUGH_MEMORY ERR_NUMBER(2, ERR_GENERAL_BASE) /*0x0002*/
#define ERR_GEN_INVALID_POINTER ERR_NUMBER(3, ERR_GENERAL_BASE) /*0x0003*/
#define ERR_GEN_OVERFLOW ERR_NUMBER(4, ERR_GENERAL_BASE) /*0x0004*/
#define ERR_GEN_OUT_OF_BOUND ERR_NUMBER(5, ERR_GENERAL_BASE) /*0x0004*/
#define ERR_GEN_INVALID_FP ERR_NUMBER(6, ERR_GENERAL_BASE) /*0x0004*/
#define ERR_GEN_TIMEOUT ERR_NUMBER(7, ERR_GENERAL_BASE) /*0x0007*/
#define ERR_GEN_INVALID_PARAMETER ERR_NUMBER(8, ERR_GENERAL_BASE) /*0x0008*/
/*****************************************************************************
****************************************************************************/
#define ERR_DRV_VIU_BASE ERR_SUB_MODULE_BASE(MODULE_DRV, DRV_SUB_MODULE_VIU)
#define ERR_DRV_VOU_BASE ERR_SUB_MODULE_BASE(MODULE_DRV, DRV_SUB_MODULE_VOU)
#define ERR_DRV_DSU_BASE ERR_SUB_MODULE_BASE(MODULE_DRV, DRV_SUB_MODULE_DSU)
#define ERR_DRV_USB_BASE ERR_SUB_MODULE_BASE(MODULE_DRV, DRV_SUB_MODULE_USB)
#define ERR_DRV_SF_BASE ERR_SUB_MODULE_BASE(MODULE_DRV, DRV_SUB_MODULE_SF)
#define ERR_DRV_TDE_BASE ERR_SUB_MODULE_BASE(MODULE_DRV, DRV_SUB_MODULE_TDE)
/* ERR_DRV_VOU_BASE */
#define ERR_DRV_VOU_ERROR ERR_NUMBER(0, ERR_DRV_VOU_BASE)
#define ERR_DRV_VOU_NOT_INITED ERR_NUMBER(1, ERR_DRV_VOU_BASE)
#define ERR_DRV_VOU_INIT_FAILED ERR_NUMBER(2, ERR_DRV_VOU_BASE)
#define ERR_DRV_VOU_OUTPUT_MODE_NOT_SUPPORT ERR_NUMBER(3, ERR_DRV_VOU_BASE)
#define ERR_DRV_VOU_LAYER_INVALID ERR_NUMBER(4, ERR_DRV_VOU_BASE)
/* ERR_DRV_VIU_BASE */
#define ERR_DRV_VIU_ERROR ERR_NUMBER(0, ERR_DRV_VIU_BASE)
#define ERR_DRV_VIU_NOT_INITED ERR_NUMBER(1, ERR_DRV_VIU_BASE)
#define ERR_DRV_VIU_INIT_FAILED ERR_NUMBER(2, ERR_DRV_VIU_BASE)
#define ERR_DRV_VIU_MODE_NOT_SUPPORT ERR_NUMBER(3, ERR_DRV_VIU_BASE)
/* ERR_DRV_DSU_BASE */
#define ERR_DRV_DSU_ERROR ERR_NUMBER(0, ERR_DRV_DSU_BASE)
#define ERR_DRV_DSU_NOT_INITED ERR_NUMBER(1, ERR_DRV_DSU_BASE)
#define ERR_DRV_DSU_INIT_FAILED ERR_NUMBER(2, ERR_DRV_DSU_BASE)
#define ERR_DRV_DSU_FILTER_NOT_SUPPORT ERR_NUMBER(3, ERR_DRV_DSU_BASE)
/* ERR_DRV_TDE_BASE */
#define ERR_DRV_TDE_ERROR ERR_NUMBER(0, ERR_DRV_TDE_BASE)
#define ERR_DRV_TDE_NOT_INITED ERR_NUMBER(1, ERR_DRV_TDE_BASE)
#define ERR_DRV_TDE_INIT_FAILED ERR_NUMBER(2, ERR_DRV_TDE_BASE)
#define ERR_DRV_TDE_FIFO_TIMEOUT ERR_NUMBER(3, ERR_DRV_TDE_BASE)
/*
Add By You , man
......
.....
*/
/*00000001-00000001-xxxxxxxx-xxxxxxxx 0x11XX*/
#define ERR_SYS_AZ_BASE ERR_SUB_MODULE_BASE(MODULE_SYS, SYS_SUB_MODULE_AZ)
#define ERR_AZMSG_INVALID_MSGPOOLS ERR_NUMBER(1, ERR_SYS_AZ_BASE) /*0x1101*/
#define ERR_AZMSG_INVALID_MSG ERR_NUMBER(2, ERR_SYS_AZ_BASE) /*0x1102*/
#define ERR_AZMSG_NO_SPACE_TOSEND ERR_NUMBER(3, ERR_SYS_AZ_BASE) /*0x1103*/
#define ERR_AZMSG_NO_MSG_TORECV ERR_NUMBER(4, ERR_SYS_AZ_BASE)
#define ERR_AZMSG_INVALID_MSGDATA ERR_NUMBER(5, ERR_SYS_AZ_BASE) /*0x1105*/
#define ERR_AZMSG_OVERFLOW ERR_NUMBER(6, ERR_SYS_AZ_BASE) /*0x1106*/
#define ERR_AZMSG_EMPTY ERR_NUMBER(7, ERR_SYS_AZ_BASE) /*0x1107*/
#define ERR_AZMSG_READY_TIMEOUT ERR_NUMBER(8, ERR_SYS_AZ_BASE) /*0x1108*/
#define ERR_AZMSG_POOL_OFFREAD ERR_NUMBER(9, ERR_SYS_AZ_BASE) /*0x1109*/
#define ERR_AZMSG_POOL_OFFWRITE ERR_NUMBER(10, ERR_SYS_AZ_BASE) /*0x1110*/
#define ERR_AZMSG_MSG_MAGIC ERR_NUMBER(11, ERR_SYS_AZ_BASE) /*0x1111*/
#define ERR_AZMSG_MSG_LENGTH ERR_NUMBER(12, ERR_SYS_AZ_BASE) /*0x1112*/
#define ERR_AZMSG_MSG_PID ERR_NUMBER(13, ERR_SYS_AZ_BASE) /*0x1113*/
/*Ring Buffer*/
/*00000001-00000002-xxxxxxxx-xxxxxxxx 0x12XX*/
#define ERR_SYS_RB_BASE ERR_SUB_MODULE_BASE(MODULE_SYS, SYS_SUB_MODULE_RB)
#define ERR_RB_ERROR ERR_NUMBER(0, ERR_SYS_RB_BASE) /*0x1201*/
#define ERR_RB_INIT ERR_NUMBER(1, ERR_SYS_RB_BASE) /*0x1201*/
#define ERR_RB_OVERFLOW ERR_NUMBER(2, ERR_SYS_RB_BASE) /*0x1202*/
#define ERR_RB_READ_NOTENOGH ERR_NUMBER(3, ERR_SYS_RB_BASE) /*0x1203*/
#define ERR_RB_WRITE_NOTENOGH ERR_NUMBER(4, ERR_SYS_RB_BASE) /*0x1204*/
#define ERR_RB_NULL_BUF ERR_NUMBER(5, ERR_SYS_RB_BASE) /*0x1205*/
#define ERR_RB_DAMAGE ERR_NUMBER(6, ERR_SYS_RB_BASE) /*0x1206*/
/*Buffer Manager*/
/*00000001-00000003-xxxxxxxx-xxxxxxxx 0x13XX*/
#define ERR_SYS_BM_BASE ERR_SUB_MODULE_BASE(MODULE_SYS, SYS_SUB_MODULE_BM)
#define ERR_BM_ERROR ERR_NUMBER(0, ERR_SYS_BM_BASE) /*0x1301*/
#define ERR_BM_INIT ERR_NUMBER(1, ERR_SYS_BM_BASE) /*0x1301*/
#define ERR_BM_OVERFLOW ERR_NUMBER(2, ERR_SYS_BM_BASE) /*0x1302*/
#define ERR_BM_READ_NOTENOGH ERR_NUMBER(3, ERR_SYS_BM_BASE) /*0x1303*/
#define ERR_BM_WRITE_NOTENOGH ERR_NUMBER(4, ERR_SYS_BM_BASE) /*0x1304*/
#define ERR_BM_INVALIDLEN ERR_NUMBER(5, ERR_SYS_BM_BASE) /*0x1304*/
/*Message Queue*/
/*00000001-00000004-xxxxxxxx-xxxxxxxx 0x14XX*/
#define ERR_SYS_MQ_BASE ERR_SUB_MODULE_BASE(MODULE_SYS, SYS_SUB_MODULE_MQ)
/*Message Queue's Normal Error*/
#define ERR_MQ_ERROR ERR_NUMBER(0, ERR_SYS_MQ_BASE)
/*the Queue is invalid*/
#define ERR_MQ_QUEUE_INVALUD ERR_NUMBER(1, ERR_SYS_MQ_BASE)
/*no enough space to write to queue*/
#define ERR_MQ_QUEUE_OVERFLOW ERR_NUMBER(2, ERR_SYS_MQ_BASE)
/*the queue is empty to read */
#define ERR_MQ_QUEUE_EMPTY ERR_NUMBER(3, ERR_SYS_MQ_BASE)
/*the message is invalid*/
#define ERR_MQ_MSG_INVALID ERR_NUMBER(4, ERR_SYS_MQ_BASE)
/*the message length is null*/
#define ERR_MQ_MSG_LEN_INVALID ERR_NUMBER(5, ERR_SYS_MQ_BASE)
/*the buffer is invalid*/
#define ERR_MQ_BUFFER_INVALID ERR_NUMBER(6, ERR_SYS_MQ_BASE)
/*thread manager*/
#define ERR_SYS_THREAD_BASE ERR_SUB_MODULE_BASE(MODULE_SYS, SYS_SUB_MODULE_THREAD)
#define ERR_SYS_THREAD_MUTEX_ERROR ERR_NUMBER(0, ERR_SYS_THREAD_BASE)
/*------------- MMF Module Error Number Define ---------------0x31xx----------*/
#define ERR_MMF_INPUT_BASE \
ERR_SUB_MODULE_BASE(MODULE_MMF, MMF_SUB_MODULE_INPUT)
#define ERR_INPUT_STREAM_ERROR \
ERR_NUMBER(1, ERR_MMF_INPUT_BASE) /*0x3102*/
#define ERR_INPUT_STREAM_NOTSUPPORT \
ERR_NUMBER(2, ERR_MMF_INPUT_BASE) /*0x3102*/
#define ERR_INPUT_FILE_OPEN_ERROR \
ERR_NUMBER(3, ERR_MMF_INPUT_BASE) /*0x3102*/
/*------------- DEMUX Module Error Number Define ---------------0x35xx--------*/
#define ERR_MMF_DEMUX_BASE \
ERR_SUB_MODULE_BASE(MODULE_MMF, MMF_SUB_MODULE_DEMUX)
#define ERR_DEMUX_STREAM_END \
ERR_NUMBER(1, ERR_MMF_DEMUX_BASE)
#define ERR_DEMUX_STREAM_SEEK_FAILED \
ERR_NUMBER(2, ERR_MMF_DEMUX_BASE)
#define ERR_DEMUX_STREAM_SEEK_NOSUPPORT \
ERR_NUMBER(3, ERR_MMF_DEMUX_BASE)
#define ERR_DEMUX_NO_DEMUX_INFO \
ERR_NUMBER(4, ERR_MMF_DEMUX_BASE)
#define ERR_MMF_STREAM_BASE \
ERR_SUB_MODULE_BASE(MODULE_MMF, MMF_SUB_MODULE_STREAM)
#define ERR_STREAM_EMPTY \
ERR_NUMBER(1, MMF_SUB_MODULE_STREAM) /*0x3601*/
/*************** video decode error code define *******************/
#define ERR_MMF_VDEC_BASE \
ERR_SUB_MODULE_BASE(MODULE_MMF, MMF_SUB_MODULE_VDEC)
#define ERR_MMF_VDEC_ERROR \
ERR_NUMBER(0, ERR_MMF_VDEC_BASE) /*0x3701*/
#define ERR_MMF_VDEC_HANDLE_INVALID \
ERR_NUMBER(1, ERR_MMF_VDEC_BASE)
#define ERR_MMF_VDEC_DATA_INVALID \
ERR_NUMBER(2, ERR_MMF_VDEC_BASE)
#define ERR_MMF_VDEC_DATATYPE_INVALID \
ERR_NUMBER(3, ERR_MMF_VDEC_BASE)
#define ERR_MMF_VDEC_PAYTYPE_INVALID \
ERR_NUMBER(4, ERR_MMF_VDEC_BASE)
#define ERR_MMF_VDEC_FIRST_NALU_INVALID \
ERR_NUMBER(5, ERR_MMF_VDEC_BASE)
/*************** jitter buffer error code define *******************/
#define ERR_MMF_JB_BASE \
ERR_SUB_MODULE_BASE(MODULE_MMF, MMF_SUB_MODULE_JB)
#define ERR_APP_VPAI_BASE ERR_SUB_MODULE_BASE(MODULE_APP, APP_SUB_MODULE_VAPI)
/* ERR_APP_VPAI_BASE */
#define ERR_APP_VAPI_ERROR ERR_NUMBER(0, ERR_APP_VPAI_BASE)
#define ERR_APP_VAPI_NOT_INITED ERR_NUMBER(1, ERR_APP_VPAI_BASE)
#define ERR_APP_VAPI_INIT_FAILED ERR_NUMBER(2, ERR_APP_VPAI_BASE)
#define STRFMT_ERRCODE "%#010lX"
#ifdef DEBUG
#define XMEDIA_ERRNO(err) \
do{ \
(err) \
? WRITE_LOG_DEBUG("<ERROR>%s:"STRFMT_ERRCODE"\n", #err, err ) \
: (void)0 ; \
return (err); \
}while(0)
#else
#define XMEDIA_ERRNO(err) return (err)
#endif
#ifdef DEBUG
#define EXIT(msg, errno) \
WRITE_LOG_ERROR("%s exit:"STRFMT_ERRCODE"\n", msg, errno); \
printf("[END]\n"); \
exit(errno)
#else
#define EXIT(msg, errno) \
printf("[END]\n"); \
(exit(errno))
#endif
#define XMEDIA_RETCHECK(err) \
do{\
(err) \
? WRITE_LOG_DEBUG("<ERROR>%s:"STRFMT_ERRCODE"\n", #err, err ) \
: (void)0 ; \
exit(err);\
}while(0)
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_ERROR_H__ */
@@ -0,0 +1,36 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_HELP_EN_H__
#define __XMEDIA_HELP_EN_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#define MSG_CR "\n"
#define MSG_NEWLINE(msg) (msg MSG_CR)
#define MSG_FILE_NotFound "File '%s' not found."
#define MSG_FILE_Open_Error "File '%s' open error."
#define MSG_FILE_Open_Success "File '%s' open success."
#define MSG_FILE_Filename_Error "File name error."
#define MSG_THREAD_CREATE_INFO "Create Thread. name:%s, threadid:%i "
#define AZ_WAITREADY_TIMEOUT "Waitting for pools ready is timeout."
#define AZ_POOLS_NOTREADY "Pools is not ready."
#define MSG_COMMON_NOTSUPPORT "Not support now."
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_HELP_EN_H__ */
@@ -0,0 +1,88 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_I2C_H__
#define __XMEDIA_I2C_H__
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */
typedef struct I2C_DATA_S
{
unsigned char dev_addr;
unsigned int reg_addr;
unsigned int addr_byte_num;
unsigned int data;
unsigned int data_byte_num;
}I2C_DATA_S ;
#define READ_OPERATION (1)
#define WRITE_OPERATION 0xfe
#define CMD_I2C_WRITE 0x01
#define CMD_I2C_READ 0x03
/* I2C_CTRL_REG */
#define I2C_ENABLE (1 << 8)
#define I2C_UNMASK_TOTAL (1 << 7)
#define I2C_UNMASK_START (1 << 6)
#define I2C_UNMASK_END (1 << 5)
#define I2C_UNMASK_SEND (1 << 4)
#define I2C_UNMASK_RECEIVE (1 << 3)
#define I2C_UNMASK_ACK (1 << 2)
#define I2C_UNMASK_ARBITRATE (1<< 1)
#define I2C_UNMASK_OVER (1 << 0)
#define I2C_UNMASK_ALL (I2C_UNMASK_START | I2C_UNMASK_END | \
I2C_UNMASK_SEND | I2C_UNMASK_RECEIVE | \
I2C_UNMASK_ACK | I2C_UNMASK_ARBITRATE | \
I2C_UNMASK_OVER)
/* I2C_COM_REB */
#define I2C_SEND_ACK (~(1 << 4))
#define I2C_START (1 << 3)
#define I2C_READ (1 << 2)
#define I2C_WRITE (1 << 1)
#define I2C_STOP (1 << 0)
/* I2C_ICR_REG */
#define I2C_CLEAR_START (1 << 6)
#define I2C_CLEAR_END (1 << 5)
#define I2C_CLEAR_SEND (1 << 4)
#define I2C_CLEAR_RECEIVE (1 << 3)
#define I2C_CLEAR_ACK (1 << 2)
#define I2C_CLEAR_ARBITRATE (1 << 1)
#define I2C_CLEAR_OVER (1 << 0)
#define I2C_CLEAR_ALL (I2C_CLEAR_START | I2C_CLEAR_END | \
I2C_CLEAR_SEND | I2C_CLEAR_RECEIVE | \
I2C_CLEAR_ACK | I2C_CLEAR_ARBITRATE | \
I2C_CLEAR_OVER)
/* I2C_SR_REG */
#define I2C_BUSY (1 << 7)
#define I2C_START_INTR (1 << 6)
#define I2C_END_INTR (1 << 5)
#define I2C_SEND_INTR (1 << 4)
#define I2C_RECEIVE_INTR (1 << 3)
#define I2C_ACK_INTR (1 << 2)
#define I2C_ARBITRATE_INTR (1 << 1)
#define I2C_OVER_INTR (1 << 0)
int XMEDIA_I2C_WriteConfig(unsigned char dev_addr);
int XMEDIA_I2C_Write(unsigned char dev_addr, unsigned int reg_addr,
unsigned int addr_byte_num, unsigned int data, unsigned int data_byte_num);
int XMEDIA_I2C_Read (unsigned char dev_addr, unsigned int reg_addr,
unsigned int addr_byte_num, unsigned int data_byte_num);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif
@@ -0,0 +1,60 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
/*----------------------------------------------*
* external variables *
*----------------------------------------------*/
/*----------------------------------------------*
* external routine prototypes *
*----------------------------------------------*/
/*----------------------------------------------*
* internal routine prototypes *
*----------------------------------------------*/
/*----------------------------------------------*
* project-wide global variables *
*----------------------------------------------*/
/*----------------------------------------------*
* module-wide global variables *
*----------------------------------------------*/
/*----------------------------------------------*
* constants *
*----------------------------------------------*/
/*----------------------------------------------*
* macros *
*----------------------------------------------*/
/*----------------------------------------------*
* routines' implementations *
*----------------------------------------------*/
#ifndef XMEDIA_LIMIT_H__
#define XMEDIA_LIMIT_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#define INT_MAX ((int)(~0U>>1))
#define MAXINT INT_MAX
#define INT_MIN (-INT_MAX - 1)
#define UINT_MAX (~0U)
#define LONG_MAX ((long)(~0UL>>1))
#define LONG_MIN (-LONG_MAX - 1)
#define ULONG_MAX (~0UL)
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* XMEDIA_LIMIT_H__ */
@@ -0,0 +1,57 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#if !defined( XMEDIA_MESSAGE_H__ )
#define XMEDIA_MESSAGE_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#include <stdarg.h>
#if defined(MULTI_TASK_LOGQUEUE)
#ifdef OS_LINUX
#include <pthread.h>
#endif
#endif
#define MAX_MESSAG_STRLEN 512
typedef struct LOG_QUEUE_STRU
{
/** Message queue lock */
#if defined(MULTI_TASK_LOGQUEUE)
pthread_mutex_t mutex_lock;
#endif
U8 ucMinLevel;
LENGTH_T lenMsg;
CHAR *pMsg;
}LOG_QUEUE;
XMEDIA_RET Log_Create (IO LOG_QUEUE *pLogQueue, IN U8 minLevel, IN LENGTH_T lenMsg);
VOID Log_Destroy(IO LOG_QUEUE *pLogQueue );
VOID Log_Msg (IO LOG_QUEUE *pLogQueue,
IN U32 ucLogLevel,
IN char *psz_format, ... );
VOID Log_MsgVa( IO LOG_QUEUE* pLogQueue,
IN U32 ucLogLevel,
IN const char *psz_format,IN va_list args );
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif
@@ -0,0 +1,75 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_MODULE_H__
#define __XMEDIA_MODULE_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
typedef enum tag_MODULE
{
MODULE_GENERAL = 0,
MODULE_SYS = 1 ,
MODULE_DRV = 2 ,
MODULE_MMF = 3, /*MultiMedia Frame*/
MODULE_APP = 4,
MODULE_BUTT
}MODULE_E;
typedef enum tag_SYS_SUB_MODULE
{
SYS_SUB_MODULE_AZ = 1, /*Arm ZSP Message Communication*/
SYS_SUB_MODULE_RB = 2, /*Ring Buffer */
SYS_SUB_MODULE_BM = 3, /*Buffer Manager*/
SYS_SUB_MODULE_MQ = 4, /*Message Queue*/
SYS_SUB_MODULE_THREAD = 5,
SYS_SUB_MODULE_BUTT
}SYS_SUB_MODULE;
typedef enum tag_DRV_SUB_MODULE
{
DRV_SUB_MODULE_VIU = 1, /*Video In Unit*/
DRV_SUB_MODULE_VOU = 2, /*Video Out Unit*/
DRV_SUB_MODULE_DSU = 3, /*DS Unit*/
DRV_SUB_MODULE_USB = 4, /*USB*/
DRV_SUB_MODULE_SF = 5, /*Soft Switch*/
DRV_SUB_MODULE_TDE = 6, /*2d accelarate */
DRV_SUB_MODULE_BUTT
}DRV_SUB_MODULE;
typedef enum tag_MMF_SUB_MODULE
{
MMF_SUB_MODULE_INPUT = 1,
MMF_SUB_MODULE_DEMUX = 2,
MMF_SUB_MODULE_MUX = 3,
MMF_SUB_MODULE_AO = 4,
MMF_SUB_MODULE_VO = 5,
MMF_SUB_MODULE_STREAM = 6,
MMF_SUB_MODULE_VDEC = 7,
MMF_SUB_MODULE_JB = 8,
MMF_SUB_MODULE_BUTT
}MMF_SUB_MODULE;
typedef enum tag_APP_SUB_MODULE
{
APP_SUB_MODULE_VAPI = 1,
APP_SUB_MODULE_BUTT
}APP_SUB_MODULE;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_MODULE_H__ */
@@ -0,0 +1,51 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_OS_H__
#define __XMEDIA_OS_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#if defined(OS_LINUX)
#endif
#if defined(OS_WINCE)
#endif
#if defined(OS_WIN32)
#endif
#if defined(OS_LINUX)
#define _UNUSED_FUNC __attribute__ ((unused))
#define _UNUSED_VAR __attribute__ ((unused))
/*
int xxx() _NOWARN_UNUSED;
int _NOWARN_UNUSED YYY()
{
return 0;
}
*/
#define _NOWARN_UNUSED _UNUSED_FUNC
#endif
#if defined(OS_VXWORKS)
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_OS_H__ */
@@ -0,0 +1,113 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_SPI_H__
#define __XMEDIA_SPI_H__
#include <linux/ioctl.h>
/* User space versions of kernel symbols for SPI clocking modes,
* matching <linux/spi/spi.h>
*/
#define SPI_CPHA 0x01
#define SPI_CPOL 0x02
#define SPI_MODE_0 (0|0)
#define SPI_MODE_1 (0|SPI_CPHA)
#define SPI_MODE_2 (SPI_CPOL|0)
#define SPI_MODE_3 (SPI_CPOL|SPI_CPHA)
#define SPI_CS_HIGH 0x04
#define SPI_LSB_FIRST 0x08
#define SPI_3WIRE 0x10
#define SPI_LOOP 0x20
#define SPI_NO_CS 0x40
#define SPI_READY 0x80
/*---------------------------------------------------------------------------*/
/* IOCTL commands */
#define SPI_IOC_MAGIC 'k'
/**
* struct spi_ioc_transfer - describes a single SPI transfer
* @tx_buf: Holds pointer to userspace buffer with transmit data, or null.
* If no data is provided, zeroes are shifted out.
* @rx_buf: Holds pointer to userspace buffer for receive data, or null.
* @len: Length of tx and rx buffers, in bytes.
* @speed_hz: Temporary override of the device's bitrate.
* @bits_per_word: Temporary override of the device's wordsize.
* @delay_usecs: If nonzero, how long to delay after the last bit transfer
* before optionally deselecting the device before the next transfer.
* @cs_change: True to deselect device before starting the next transfer.
*
* This structure is mapped directly to the kernel spi_transfer structure;
* the fields have the same meanings, except of course that the pointers
* are in a different address space (and may be of different sizes in some
* cases, such as 32-bit i386 userspace over a 64-bit x86_64 kernel).
* Zero-initialize the structure, including currently unused fields, to
* accommodate potential future updates.
*
* SPI_IOC_MESSAGE gives userspace the equivalent of kernel spi_sync().
* Pass it an array of related transfers, they'll execute together.
* Each transfer may be half duplex (either direction) or full duplex.
*
* struct spi_ioc_transfer mesg[4];
* ...
* status = ioctl(fd, SPI_IOC_MESSAGE(4), mesg);
*
* So for example one transfer might send a nine bit command (right aligned
* in a 16-bit word), the next could read a block of 8-bit data before
* terminating that command by temporarily deselecting the chip; the next
* could send a different nine bit command (re-selecting the chip), and the
* last transfer might write some register values.
*/
struct spi_ioc_transfer {
__u64 tx_buf;
__u64 rx_buf;
__u32 len;
__u32 speed_hz;
__u16 delay_usecs;
__u8 bits_per_word;
__u8 cs_change;
__u32 pad;
/* If the contents of 'struct spi_ioc_transfer' ever change
* incompatibly, then the ioctl number (currently 0) must change;
* ioctls with constant size fields get a bit more in the way of
* error checking than ones (like this) where that field varies.
*
* NOTE: struct layout is the same in 64bit and 32bit userspace.
*/
};
/* not all platforms use <asm-generic/ioctl.h> or _IOC_TYPECHECK() ... */
#define SPI_MSGSIZE(N) \
((((N)*(sizeof (struct spi_ioc_transfer))) < (1 << _IOC_SIZEBITS)) \
? ((N)*(sizeof (struct spi_ioc_transfer))) : 0)
#define SPI_IOC_MESSAGE(N) _IOW(SPI_IOC_MAGIC, 0, char[SPI_MSGSIZE(N)])
/* Read / Write of SPI mode (SPI_MODE_0..SPI_MODE_3) */
#define SPI_IOC_RD_MODE _IOR(SPI_IOC_MAGIC, 1, __u8)
#define SPI_IOC_WR_MODE _IOW(SPI_IOC_MAGIC, 1, __u8)
/* Read / Write SPI bit justification */
#define SPI_IOC_RD_LSB_FIRST _IOR(SPI_IOC_MAGIC, 2, __u8)
#define SPI_IOC_WR_LSB_FIRST _IOW(SPI_IOC_MAGIC, 2, __u8)
/* Read / Write SPI device word length (1..N) */
#define SPI_IOC_RD_BITS_PER_WORD _IOR(SPI_IOC_MAGIC, 3, __u8)
#define SPI_IOC_WR_BITS_PER_WORD _IOW(SPI_IOC_MAGIC, 3, __u8)
/* Read / Write SPI device default max speed hz */
#define SPI_IOC_RD_MAX_SPEED_HZ _IOR(SPI_IOC_MAGIC, 4, __u32)
#define SPI_IOC_WR_MAX_SPEED_HZ _IOW(SPI_IOC_MAGIC, 4, __u32)
#endif /* __XMEDIA_SPI_H__ */
@@ -0,0 +1,159 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_THREAD_H__
#define __XMEDIA_THREAD_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#include <pthread.h>
#include <semaphore.h>
#include <bsp_defs.h>
#include <stdio.h>
typedef pthread_mutex_t XMEDIA_THREAD_MUTEX ;
typedef pthread_mutexattr_t XMEDIA_THREAD_MUTEXATTR;
typedef pthread_cond_t XMEDIA_THREAD_COND;
typedef pthread_condattr_t XMEDIA_THREAD_CONDATTR;
typedef struct XMEDIA_SYNC_STRU
{
#if defined(SYNC_USE_COND)
XMEDIA_THREAD_MUTEX _mutex;
XMEDIA_THREAD_COND _cond;
#else
sem_t _sem;
#endif
}XMEDIA_SYNC_T;
#define MAX_THREAD_NAME_LEN 16
typedef int XMEDIA_PRIORITY_T;
typedef char THREAD_NAME[MAX_THREAD_NAME_LEN];
typedef VOID* (*THREAD_RUN)(VOID* );
typedef struct XMEDIA_THREAD_STRU
{
THREAD_NAME szThreadName;
/**/
pthread_t threadid;
pid_t pid;
XMEDIA_PRIORITY_T priority;
THREAD_RUN pf_run;
BOOL bStart;
XMEDIA_THREAD_COND cond_start;
XMEDIA_THREAD_MUTEX mutex_cond_start;
VOID* args;
}XMEDIA_THREAD_T;
EXTERNFUNC XMEDIA_RET bsp_thread_init(XMEDIA_THREAD_T *pThread, const char* szName,
THREAD_RUN pf, INT32 priority, BOOL bStart);
VOID* bsp_thread_run_handle(VOID* arg);
EXTERNFUNC void bsp_delay(U32 ulUsDelay);
/*__wait is TRUE, not run when create , wait cond_start to run*/
EXTERNFUNC INT32 bsp_thread_create(XMEDIA_THREAD_T *pThread,const pthread_attr_t*__attr,
void*__arg);
EXTERNFUNC INT32 bsp_thread_join(XMEDIA_THREAD_T *pThread, void **thread_return);
EXTERNFUNC INT32 XMEDIA_THREAD_Start(XMEDIA_THREAD_T *pThread);
EXTERNFUNC INT32 bsp_thread_pause(XMEDIA_THREAD_T *pThread);
EXTERNFUNC INT32 bsp_thread_cancel(XMEDIA_THREAD_T *pThread);
EXTERNFUNC VOID bsp_thread_setid(XMEDIA_THREAD_T *pThread);
EXTERNFUNC VOID bsp_thread_setpriority(XMEDIA_THREAD_T *pThread, XMEDIA_PRIORITY_T prio);
/*** ------------------------------------ ***/
EXTERNFUNC INT32 bsp_thread_mutex_init(XMEDIA_THREAD_MUTEX* pMutex, XMEDIA_THREAD_MUTEXATTR* pMutexattr);
EXTERNFUNC INT32 bsp_thread_mutex_lock(XMEDIA_THREAD_MUTEX* pMutex);
EXTERNFUNC INT32 bsp_thread_mutex_trylock(XMEDIA_THREAD_MUTEX* pMutex);
EXTERNFUNC INT32 bsp_thread_mutex_unlock(XMEDIA_THREAD_MUTEX* pMutex);
EXTERNFUNC INT32 bsp_thread_mutex_destroy(XMEDIA_THREAD_MUTEX* pMutex);
/*** ------------------------------------ ***/
EXTERNFUNC INT32 bsp_thread_cond_init(XMEDIA_THREAD_COND* pCond, XMEDIA_THREAD_CONDATTR* pCondattr);
EXTERNFUNC INT32 bsp_thread_cond_signal(XMEDIA_THREAD_COND* pCond);
EXTERNFUNC INT32 bsp_thread_cond_broadcast(XMEDIA_THREAD_COND* pCond);
EXTERNFUNC INT32 bsp_thread_cond_wait(XMEDIA_THREAD_COND* pCond, XMEDIA_THREAD_MUTEX *pMutex, U32 msecs);
EXTERNFUNC INT32 bsp_thread_cond_destroy(XMEDIA_THREAD_COND* pCond);
#define DEFAULT_PRIORITY 0
#define THREAD_PRIORITY_AUDIO 0
#define THREAD_PRIORITY_AZ 10
#define THREAD_SLEEP(msec) usleep(msec * 1000)
/*#define THREAD_SLEEP(msec) */
/*** -------------------------------------***/
EXTERNFUNC XMEDIA_RET bsp_sync_create(IO XMEDIA_SYNC_T *pWait);
EXTERNFUNC XMEDIA_RET bsp_sync_wait(IO XMEDIA_SYNC_T *pWait, IN U32 msec);
EXTERNFUNC XMEDIA_RET bsp_sync_notify(IO XMEDIA_SYNC_T *pWait);
EXTERNFUNC XMEDIA_RET bsp_sync_destroy(IO XMEDIA_SYNC_T *pWait);
#if defined(DEBUG)
#define SYNC_WAIT(pSync, msec, pStr) \
if (pStr) \
WRITE_LOG_DEBUG(pStr); \
bsp_sync_wait(pSync, msec)
#define SYNC_NOTIFY(pSync, msec, pStr) \
if (pStr) \
WRITE_LOG_DEBUG(pStr); \
bsp_sync_notify(pSync)
#else
#define SYNC_WAIT(pSync, msec, pStr) \
bsp_sync_wait(pSync, msec)
#define SYNC_NOTIFY(pSync, msec, pStr) \
bsp_sync_notify(pSync)
#endif
/*__wait is TRUE, not run when create , wait cond_start to run*/
#define XMEDIA_THREAD_CREATE (pThread, __attr, __arg)\
bsp_thread_create(pThread, __attr, __arg)
#define XMEDIA_THREAD_JOIN(pThread, ppthread_return) \
bsp_thread_join(pThread, ppthread_return)
#define XMEDIA_THREAD_START(pThread) \
XMEDIA_THREAD_Start(pThread)
#define XMEDIA_THREAD_PAUSE(pThread) \
bsp_thread_pause(pThread)
#define XMEDIA_THREAD_SETID(pThread) \
bsp_thread_setid(pThread)
#define XMEDIA_THREAD_SETPRIORITY(pThread ,prio) \
bsp_thread_setpriority(pThread ,prio)
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_THREAD_H__ */
@@ -0,0 +1,157 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
/*
*/
#ifndef __XMEDIA_TYPE_H__
#define __XMEDIA_TYPE_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#include <stdint.h>
#if !defined( OS_VXWORKS) /* there is a same typedef in vxworks for U8 */
typedef unsigned char U8;
#endif
typedef unsigned short U16;
typedef unsigned long U32;
typedef unsigned long long U64;
typedef char S8;
typedef short S16;
typedef long S32;
typedef long long S64;
typedef char INT8;
typedef short INT16;
typedef int INT32;
typedef char CHAR;
typedef char* PCHAR;
#if 0
typedef U8 B8;
typedef U16 B16;
typedef U32 B32;
#endif
typedef float FLOAT;
typedef double DOUBLE;
typedef void VOID;
typedef unsigned char UCHAR;
typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned long UINT32;
typedef unsigned long ULONG;
typedef U16 ZWORD;
typedef U32 ZDWORD;
typedef U32 ZLENGTH;
typedef U32 ZSIZE;
#define LEN_Z2C(len) (len+len)
#define LEN_C2Z(len) (len >> 1)
typedef unsigned long PHY_ADDR;
typedef unsigned long VADDR;
typedef void* PVOID;
typedef void* PTR;
#define INVALID_ADDR 0
/*File descriptor*/
typedef int FD;
typedef unsigned long LENGTH_T;
typedef unsigned long size_type;
typedef unsigned long SIZE_T;
typedef unsigned long COUNT_T;
#if !defined(OFF_T)
typedef unsigned long OFF_T ;
#endif
typedef long SOFF_T;//by hhm
typedef unsigned long XMEDIA_RET;
#define MAX_FILENAME_LENGTH 128
typedef char FILENAME_T[MAX_FILENAME_LENGTH];
typedef char CHECKNAME_T[32];
typedef char IPADDRESS_T[32]; //add by ququ
/*#define EMPTY_VAR U32 null_var*/
#define EMPTY_VAR unsigned int xyz
/* Vxworks defined BOOL type */
#if !defined(BOOL) && !defined(OS_VXWORKS)
#define BOOL U8
#endif
#ifdef TRUE
#undef TRUE
#endif
#define TRUE 0x1
#ifdef FALSE
#undef FALSE
#endif
#define FALSE 0x0L
#define YES 0x1
#define NO 0x0L
#ifndef NULL
#define NULL (U32)0x0L
#endif
/* *DO NOT* type like : if(XMEDIA_OK)*/
#define XMEDIA_OK 0
#define XMEDIA_ERROR (1)
#define XMEDIA_SUCCESS 0
#define XMEDIA_FAILURE 1
#define XMEDIA_RET_NOT_DEFINED 0
#define AV_MALLOC(sizeLen) malloc(sizeLen)
#define AV_MALLOC_ALIGN(ucAlign, sizeLen) malloc(sizeLen)
typedef void* AV_PTR;
typedef void* VIDEO_PTR;
typedef void* AUDIO_PTR;
#ifndef MAXPATHLEN
#define MAXPATHLEN 1024
#endif
/*typedef char[MAXPATHLEN] FILENAME_T;*/
#define MAX_POOL_NAME_LEN 16
typedef char POOL_NAME[MAX_POOL_NAME_LEN];
typedef unsigned long long PTS_TIME;
typedef struct PVADDR_STRU
{
VOID* pvAddr;/*point of virtual address*/
PHY_ADDR phyAddr; /*phy address*/
}PVADDR_T;
typedef struct ADDRINFO_STRU
{
PHY_ADDR phyAddrStart;
SIZE_T sizeAddr;
}ADDRINFO_T;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_TYPE_H__ */
@@ -0,0 +1,22 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef XMEDIA_LIMIT_H__
#define XMEDIA_LIMIT_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#include <unistd.h>
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* XMEDIA_LIMIT_H__ */
@@ -0,0 +1,71 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_VERSION_H__
#define __XMEDIA_VERSION_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#include <stdio.h>
typedef unsigned long XMEDIA_VERSION_T;
/*
Version define
31 24 23 16 15 0
-----------------------------------------------
| major | minor | build number |
-----------------------------------------------
*/
#define VERSION_CODE(major, minor, build) \
( ((major) << 24) | ((minor) << 16) | (build) )
#define VERSION_CODE_MAJOR(v) ((v) >> 24)
#define VERSION_CODE_MINOR(v) (((v) >> 16) & 0xFF)
#define VERSION_CODE_BUILD(v) ((v) & 0xFFFF )
#define MMPLIB_VER_MAJOR 0L
#define MMPLIB_VER_MINOR 6L
#define MMPLIB_VER_BUILD 0106L
#define MMPLIB_BUILD_DATE "20060415-V100ITr1"
#define MMPLIB_VER_EXTFLAG 0
#define GET_MMPLIB_VER VERSION_CODE(MMPLIB_VER_MAJOR, MMPLIB_VER_MINOR,MMPLIB_VER_BUILD )
#define VERSTF_SIZE 64
static inline const char* MMPLIB_VER_STR()
{
static char verstr[VERSTF_SIZE];
sprintf(verstr, "%02lu.%02lu.%04lu build:%s",
MMPLIB_VER_MAJOR,
MMPLIB_VER_MINOR,
MMPLIB_VER_BUILD,
MMPLIB_BUILD_DATE
);
return ( (char*)verstr );
}
static inline const char* bsp_version_str(XMEDIA_VERSION_T v)
{
static char verstr[VERSTF_SIZE];
sprintf(verstr, "%02lu.%02lu.%04lu ",
VERSION_CODE_MAJOR(v),
VERSION_CODE_MINOR(v),
VERSION_CODE_BUILD(v)
);
return verstr;
}
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __XMEDIA_VERSION_H__ */
@@ -0,0 +1,19 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef _GPIO_I2C_H
#define _GPIO_I2C_H
#define GPIO_I2C_READ 0x01
#define GPIO_I2C_WRITE 0x03
typedef unsigned char byte;
unsigned char gpio_i2c_read(unsigned char devaddress, unsigned char address);
void gpio_i2c_write(unsigned char devaddress, unsigned char address, unsigned char value);
byte siiReadSegmentBlockEDID(byte SlaveAddr, byte Segment, byte Offset, byte *Buffer, byte Length);
#endif
@@ -0,0 +1,44 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef _UAPI_LINUX_I2C_DEV_H
#define _UAPI_LINUX_I2C_DEV_H
/* /dev/i2c-X ioctl commands. The ioctl's parameter is always an
* unsigned long, except for:
* - I2C_FUNCS, takes pointer to an unsigned long
* - I2C_RDWR, takes pointer to struct i2c_rdwr_ioctl_data
* - I2C_SMBUS, takes pointer to struct i2c_smbus_ioctl_data
*/
#define I2C_RETRIES 0x0701 /* number of times a device address should
be polled when not acknowledging */
#define I2C_TIMEOUT 0x0702 /* set timeout in units of 10 ms */
/* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses
* are NOT supported! (due to code brokenness)
*/
#define I2C_SLAVE 0x0703 /* Use this slave address */
#define I2C_SLAVE_FORCE 0x0706 /* Use this slave address, even if it
is already in use by a driver! */
#define I2C_TENBIT 0x0704 /* 0 for 7 bit addrs, != 0 for 10 bit */
#define I2C_FUNCS 0x0705 /* Get the adapter functionality mask */
#define I2C_RDWR 0x0707 /* Combined R/W transfer (one STOP only) */
#define I2C_PEC 0x0708 /* != 0 to use PEC with SMBus */
#define I2C_SMBUS 0x0720 /* SMBus transfer */
#define I2C_16BIT_REG 0x0709 /* 16BIT REG WIDTH */
#define I2C_16BIT_DATA 0x070a /* 16BIT DATA WIDTH */
/* This is the structure as used in the I2C_RDWR ioctl call */
struct i2c_rdwr_ioctl_data {
struct i2c_msg *msgs; /* pointers to i2c_msgs */
__u32 nmsgs; /* number of i2c_msgs */
};
#define I2C_RDRW_IOCTL_MAX_MSGS 42
#endif /* _UAPI_LINUX_I2C_DEV_H */
@@ -0,0 +1,22 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __MMPVER_H__
#define __MMPVER_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
USE_GLOBALVAR XMEDIA_VERSION_T g_mmplib_ver;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __MMPVER_H__ */
@@ -0,0 +1,56 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef ARGPARSER_H__
#define ARGPARSER_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#define ERR_ARG_WRONG_FMT 2 /* format error */
#define ERR_ARG_UNKOWN_ARG 3 /* Undefined arg*/
#define ERR_ARG_NOT_DEFINE_NO_OPT 4/* Undefined NO_OPT Type */
#define ERR_ARG_MULTI_NO_OPT 5/* Undefined NO_OPT Type */
enum ARG_TYPE
{
ARG_TYPE_NO_OPT = 0, /* lack of opt, only single one arg */
ARG_TYPE_CHAR = 1, /* char */
ARG_TYPE_STRING = 2, /* string */
ARG_TYPE_INT = 3, /* integer */
ARG_TYPE_FLOAT = 4, /* float */
ARG_TYPE_SINGLE = 5, /* single, no parm */
ARG_TYPE_HELP = 6,
ARG_TYPE_END
};
typedef struct ARGOpt_stru
{
//CHAR opt;
CHAR* sz_opt;
CHAR type;
CHAR isSet; /*1: be set, 0 not set*/
CHAR resv;
CHAR *pHelpMsg;
void *pValue;
}ARGOpt_t;
EXTERNFUNC XMEDIA_RET ARGParser(int argc, char **argv, ARGOpt_t *opts);
EXTERNFUNC VOID ARGPrintOpt(ARGOpt_t *pOpt);
EXTERNFUNC VOID StrToArg(CHAR* pSrc, int* argc, CHAR** argv);
EXTERNFUNC VOID ARGClearOpts(ARGOpt_t *opts);
EXTERNFUNC VOID ARGPrintHelp(ARGOpt_t *opts);
#define ARGHelpStrHead "\t"
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* ARGPARSER_H__ */
+40
View File
@@ -0,0 +1,40 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __BTOOLS_H__
#define __BTOOLS_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
XMEDIA_RET xmmc(int argc , char* argv[]);
XMEDIA_RET xmmd_l(int argc , char* argv[]);
XMEDIA_RET xmmd(int argc , char* argv[]);
XMEDIA_RET xmmm(int argc , char* argv[]);
XMEDIA_RET bsper(int argc , char* argv[]);
XMEDIA_RET bspew(int argc , char* argv[]);
XMEDIA_RET i2c_read(int argc , char* argv[]);
XMEDIA_RET i2c_write(int argc , char* argv[]);
XMEDIA_RET ssp_read(int argc , char* argv[]);
XMEDIA_RET ssp_write(int argc , char* argv[]);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __BTOOLS_H__ */
@@ -0,0 +1,79 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef CMDSHELL_H__
#define CMDSHELL_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
/*///////////////////////////////////////*/
/*main function style*/
#define ERR_CMD_SHELL_NULL_CMD 2
#define ERR_CMD_SHELL_NULL_FP 3
#define MAX_CMDSHELL_STRING_LEN 16
typedef XMEDIA_RET (*cmd_func)(int , char **);
#define CMD_ENABLE 1
#define CMD_DISABLE 0
typedef char CMDSHELL_STR[MAX_CMDSHELL_STRING_LEN] ;
typedef struct CMDSHELL_STRU
{
char *cmdstr;
U32 isEnable;
cmd_func pFunc;
char *helpstr;
}CMD_SHELL_T;
#define CMD_SHELL_DEF(cmdstr,isEnable, pf, helpmsg) {cmdstr,isEnable, pf, helpmsg},
/*
cmdstrs : Whole
*/
/*
CMD_SHELL_T *CMD_SHELL_Search(IN char* cmdstr,
IN CMD_SHELL_T* pCmds,
IN COUNT_T max_cmds
);
*/
CMD_SHELL_T *CMD_SHELL_Search(IN char* cmdstr,
IN CMD_SHELL_T* pCmds
);
int CMD_SHELL_Run(CMD_SHELL_T* pCmd, int argc, char** argv);
/* Enter the whole series of commands */
int CMD_SHELL_RUN(char* cmdstrs, const CMD_SHELL_T *pCmds);
/* If input parm is command line, transfer Parm from mian immediatly */
int CMD_SHELL_RUN_2(int argc, char* argv[], const CMD_SHELL_T *pCmds);
#define CMD_SHELL_PRINT_CMDSTRS(xargc, xargv) \
do \
{ \
int i = 0; \
char x[128]; \
memset(x, 0, 128); \
for (i = 0; i< xargc;i++) \
{ \
sprintf(x, "%s %s ",x, xargv[i]); \
} \
printf(" argc: %d, argv:<%s>\n", xargc, x); \
}while(0)
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* CMDSHELL_H__ */
@@ -0,0 +1,33 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
/* linux /dev/mem mmap support head file */
/* */
/* */
/* Copyright 2021 CJiang com. */
/* Create date: 2021-01-07 */
/* Modify bspstory */
/* */
#ifndef __MEM_MAP_H__
#define __MEM_MAP_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
extern void * memmap(unsigned long phy_addr, unsigned long size);
extern int memunmap(void * addr_mapped);
extern void * mmapfile(char* fn, unsigned int size);
extern void * mmapfile_r(char* fn, unsigned int size);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif
+100
View File
@@ -0,0 +1,100 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __STAT_H__
#define __STAT_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#ifdef STAT
typedef struct
{
time_t StartTime;
time_t EndTime;
}TimeVal_t;
typedef enum STAT_ITEM_ENUM
{
E_VEnc_SendFrames,
E_VEnc_RecvPackets,
E_VEnc_RecvEncdata,
E_VEnc_Rtp_SendPackets,
E_VEnc_Rtp_SendBytes,
E_VDec_SendPackets,
E_VDec_RecvFrames,
E_VDec_RecvDecdata,
E_VDec_Rtp_RecvPackets,
E_VDec_Rtp_RecvBytes,
E_VDec_Rtp_Discarded,
E_Voice_SendPackets,
E_Voice_RecvFrames,
E_Voice_ResendTimes,
E_Voice_Rtp_SendPackets,
E_Voice_Rtp_SendBytes,
E_Voice_Rtp_RecvPackets,
E_Voice_Rtp_RecvBytes,
E_Voice_Rtp_Discarded,
E_STAT_ITEM_END
}STAT_ITEM_E;
typedef enum STAT_TYPE_ENUM
{
STAT_AUDIODEC = 1,
STAT_AUDIOENC = 2,
STAT_VIDEODEC = 3,
STAT_VIDEOENC = 4,
STAT_VOICE = 5,
STAT_TYPE_MAX
}STAT_TYPE_E;
extern VOID stat_init();
extern VOID stat_rtp_discarded(STAT_ITEM_E t, U16 seq, U16 prev_seq);
extern VOID stat_calc(STAT_ITEM_E t, U32 value);
extern VOID stat_time_start(STAT_TYPE_E t);
extern VOID stat_print(STAT_TYPE_E t);
extern VOID stat_print_venc(int argc, char* argv[]);
extern VOID stat_print_vdec(int argc, char* argv[]);
extern VOID stat_print_voice(int argc, char* argv[]);
#define STAT_CALC(t, value) stat_calc(t, value)
#define STAT_INIT() stat_init()
#define STAT_TIME_STAT(t) stat_time_start(t)
#define STAT_RTP_DISCARDED(t, seq, prev_seq) stat_rtp_discarded(t, seq, prev_seq)
#define STAT_PRINT_VENC(argc, argv ) stat_print_venc(argc, argv )
#define STAT_PRINT_VDEC(argc, argv ) stat_print_vdec(argc, argv )
#define STAT_PRINT_VOICE(argc, argv ) stat_print_voice(argc, argv )
#else
#define STAT_CALC(t, value)
#define STAT_INIT()
#define STAT_TIME_STAT(t)
#define STAT_RTP_DISCARDED(t, seq, prev_seq)
#define STAT_PRINT_VENC(argc, argv )
#define STAT_PRINT_VDEC(argc, argv )
#define STAT_PRINT_VOICE(argc, argv )
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __STAT_H__ */
@@ -0,0 +1,25 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __STRFUNC_H__
#define __STRFUNC_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#define STRFMT_ADDR32 "%#010lX"
#define STRFMT_ADDR32_2 "0x%08lX"
EXTERNFUNC XMEDIA_RET StrToNumber(IN CHAR *str , OUT U32 * ulValue);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __STRFUNC_H__ */
@@ -0,0 +1,191 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#include <stdlib.h>
#include "bsp.h"
#include "memmap.h"
#define MAX_ROW (0x8000000) /* =max_len/16 */
/*memory dump*/
XMEDIA_RET bsp_md(IN VOID* pStart, IN U32 ulLen, IN FD fd)
{
if (NULL == pStart) {
return ERR_GEN_INVALID_POINTER;
}
size_t wl = write(fd, pStart, ulLen);
if (wl != ulLen) {
WRITE_LOG_DEBUG("Dump memory error!wish len: %u, dump len:%u\n", ulLen, wl);
}
return XMEDIA_SUCCESS;
}
/*Memory Dump 2 file*/
XMEDIA_RET bsp_md2file(IN VOID* pStart, IN U32 ulLen, IN const char* strLabel, IN char* fn)
{
char path[PATH_MAX + 1] = {0x00};
if (NULL == fn || NULL == pStart) {
return ERR_GEN_INVALID_POINTER;
}
if ((strlen(fn) > PATH_MAX) || (NULL == realpath(fn, path))) {
printf("error: input path error.\n");
return ERR_GEN_INVALID_POINTER;
}
FILE* fMd = fopen(path, "a");
if (NULL == fMd) {
WRITE_LOG_DEBUG("Open File %s to dump memory error.\n", fn);
return XMEDIA_FAILURE;
}
if (strLabel) {
fwrite(strLabel, strlen(strLabel), 1, fMd);
}
fwrite(pStart, ulLen, 1, fMd);
fclose(fMd);
return XMEDIA_SUCCESS;
}
VOID bsp_hexdump(OUT FILE* stream, IN const void* src, IN size_t len, IN size_t width)
{
unsigned int rows, pos, c, i;
const unsigned char* start = NULL;
const unsigned char* rowpos = NULL;
const unsigned char* data = NULL;
if (width == 0) {
return;
}
data = src;
start = data;
pos = 0;
rows = (len % width) == 0 ? len / width : len / width + 1;
for (i = 0; i < rows; i++) {
rowpos = data;
fprintf(stream, "%05x: ", pos);
do {
c = *data++ & 0xff;
if ((size_t)(data - start) <= len) {
fprintf(stream, " %02x", c);
} else {
fprintf(stream, " ");
}
} while (((data - rowpos) % width) != 0);
fprintf(stream, " |");
data -= width;
do {
c = *data++;
if (isprint(c) == 0 || c == '\t') {
c = '.';
}
if ((size_t)(data - start) <= len) {
fprintf(stream, "%c", c);
} else {
fprintf(stream, " ");
}
} while (((data - rowpos) % width) != 0);
fprintf(stream, "|\n");
pos += width;
}
fflush(stream);
}
VOID bsp_hexdump2(OUT FILE* stream, IN const void* src, IN size_t len, IN size_t width)
{
unsigned int c, i, rows;
const unsigned int* rowpos = NULL;
const unsigned int* data = NULL;
if (width == 0) {
return;
}
data = src;
rows = (len % width) == 0 ? len / width : len / width + 1;
if (MAX_ROW < rows) {
printf("error:Input param(len) is greater than 2GB!\n");
return;
}
for (i = 0; i < rows; i++) {
rowpos = data;
fprintf(stream, "%04x: ", i * 0x10);
do {
c = *data++;
fprintf(stream, " %08x", c);
} while (((data - rowpos) % 4) != 0);
fprintf(stream, "\n");
}
fflush(stream);
}
VOID bsp_hexdump_log(IN const void* src, IN size_t len, IN size_t width)
{
if (LOG_GETLEVEL() < LOG_LEVEL_DEBUG2)
return;
unsigned int rows, pos, c, i;
const unsigned char* start = NULL;
const unsigned char* rowpos = NULL;
const unsigned char* data = NULL;
if (width == 0) {
return;
}
data = src;
start = data;
pos = 0;
rows = (len % width) == 0 ? len / width : len / width + 1;
for (i = 0; i < rows; i++) {
rowpos = data;
WRITE_LOG_NORMAL("%05x: ", pos);
do {
c = *data++ & 0xff;
if ((size_t)(data - start) <= len) {
WRITE_LOG_NORMAL(" %02x", c);
} else {
WRITE_LOG_NORMAL(" ");
}
} while (((data - rowpos) % width) != 0);
WRITE_LOG_NORMAL(" |");
data -= width;
do {
c = *data++;
if (isprint(c) == 0 || c == '\t') {
c = '.';
}
if ((size_t)(data - start) <= len) {
WRITE_LOG_NORMAL("%c", c);
} else {
WRITE_LOG_NORMAL(" ");
}
} while (((data - rowpos) % width) != 0);
WRITE_LOG_NORMAL("|\n");
pos += width;
}
}
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
@@ -0,0 +1,164 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <pthread.h>
#include <assert.h>
#include "bsp.h"
#include "bsp_message.h"
DECLARE_GLOBALVAR LOG_QUEUE gLogQueue;
static const char *gppsz_type[] =
{
" ","[fatal]:", "[error]:", "[warn]:",
"[info]:", "[debug]:" , "[debug1]:", "[debug2]:"
};
LOCALFUNC VOID Log_PrintMsg (IO LOG_QUEUE* pLogQueue,IN U32 ucLogLevel,
IN const char *psz_format,IN va_list _args );
#if defined(MULTI_TASK_LOGQUEUE)
LOCALFUNC VOID Log_InitLock(IO LOG_QUEUE* pLogQueue);
LOCALFUNC S32 Log_Lock(IO LOG_QUEUE* pLogQueue);
LOCALFUNC S32 Log_Unlock(IO LOG_QUEUE* pLogQueue);
LOCALFUNC VOID Log_DestroyLock(IO LOG_QUEUE* pLogQueue);
/*-------- Lock Function , Maybe Replace later ---*/
LOCALFUNC S32 Log_Lock(IO LOG_QUEUE* pLogQueue)
{
#if defined(OS_LINUX)
return pthread_mutex_lock(&(pLogQueue->mutex_lock));
#else
return 0;
#endif
}
LOCALFUNC S32 Log_Unlock(IO LOG_QUEUE* pLogQueue)
{
#if defined(OS_LINUX)
return pthread_mutex_unlock(&(pLogQueue->mutex_lock));
#else
return 0;
#endif
}
LOCALFUNC VOID Log_InitLock(IO LOG_QUEUE* pLogQueue)
{
#if defined(OS_LINUX)
pthread_mutex_init(&pLogQueue->mutex_lock, NULL);
#else
return 0;
#endif
}
LOCALFUNC VOID Log_DestroyLock(IO LOG_QUEUE* pLogQueue)
{
Log_Unlock(pLogQueue);
#if defined(OS_LINUX)
pthread_mutex_destroy( &pLogQueue->mutex_lock );
#else
#endif
}
#else
#define Log_Lock(p)
#define Log_Unlock(p)
#define Log_InitLock(p)
#define Log_DestroyLock(p)
#endif
/* --------- Message Functions -----*/
XMEDIA_RET Log_Create(IO LOG_QUEUE* pLogQueue, IN U8 minLevel , IN LENGTH_T lenMsg)
{
DBG_ASSERT(pLogQueue);
Log_InitLock(pLogQueue);
pLogQueue->ucMinLevel = minLevel;
pLogQueue->lenMsg = lenMsg;
if (lenMsg <= 0)
{
return XMEDIA_FAILURE;
}
pLogQueue->pMsg = malloc(lenMsg);
if (NULL == pLogQueue->pMsg)
{
return XMEDIA_FAILURE;
}
return XMEDIA_SUCCESS;
}
VOID Log_Destroy(IO LOG_QUEUE* pLogQueue )
{
DBG_ASSERT(pLogQueue);
free(pLogQueue->pMsg);
Log_DestroyLock(pLogQueue);
pLogQueue->pMsg = NULL;
}
VOID Log_Msg(IO LOG_QUEUE* pLogQueue,IN U32 ucLogLevel,
IN char *psz_format, ... )
{
DBG_ASSERT(pLogQueue);
if (pLogQueue->ucMinLevel < ucLogLevel)
{
return;
}
va_list args;
va_start( args, psz_format );
Log_PrintMsg( pLogQueue, ucLogLevel, psz_format, args );
va_end( args );
}
VOID Log_MsgVa(IO LOG_QUEUE* pLogQueue,IN U32 ucLogLevel,
IN const char *psz_format, IN va_list args )
{
Log_PrintMsg( pLogQueue, ucLogLevel, psz_format, args );
}
/* following functions are local */
static VOID Log_PrintMsg (IO LOG_QUEUE* pLogQueue,IN U32 ucLogLevel,
IN const char *psz_format,IN va_list _args )
{
va_list args;
Log_Lock(pLogQueue);
va_copy( args, _args );
vsnprintf(pLogQueue->pMsg, pLogQueue->lenMsg, psz_format, args);
va_end( args );
pLogQueue->pMsg[ pLogQueue->lenMsg - 1 ] = 0;
if (ucLogLevel)
fprintf( STDOUT, "%s %s", gppsz_type[ucLogLevel], pLogQueue->pMsg);
else
fprintf( STDOUT, "%s", pLogQueue->pMsg);
Log_Unlock(pLogQueue);
fflush(STDOUT);
return;
}
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
@@ -0,0 +1,237 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#include <sys/time.h>
#include <time.h>
#include <pthread.h>
#include <string.h>
#include "bsp.h"
#include "bsp_thread.h"
/*** Mutex Port Begin **/
INT32 bsp_thread_mutex_init(XMEDIA_THREAD_MUTEX* pMutex, XMEDIA_THREAD_MUTEXATTR* pMutexattr)
{
return (pthread_mutex_init(pMutex, pMutexattr));
}
INT32 bsp_thread_mutex_lock(XMEDIA_THREAD_MUTEX* pMutex)
{
return (pthread_mutex_lock(pMutex));
}
INT32 bsp_thread_mutex_trylock(XMEDIA_THREAD_MUTEX* pMutex)
{
return (pthread_mutex_trylock(pMutex));
}
INT32 bsp_thread_mutex_unlock(XMEDIA_THREAD_MUTEX* pMutex)
{
return (pthread_mutex_unlock(pMutex));
}
INT32 bsp_thread_mutex_destroy(XMEDIA_THREAD_MUTEX* pMutex)
{
return (pthread_mutex_destroy(pMutex));
}
INT32 bsp_thread_cond_init(XMEDIA_THREAD_COND* pCond, XMEDIA_THREAD_CONDATTR* pCondattr)
{
return pthread_cond_init(pCond, pCondattr);
}
INT32 bsp_thread_cond_destroy(XMEDIA_THREAD_COND* pCond)
{
return pthread_cond_destroy(pCond);
}
INT32 bsp_thread_cond_broadcast(XMEDIA_THREAD_COND* pCond)
{
return pthread_cond_broadcast(pCond);
}
INT32 bsp_thread_cond_wait(XMEDIA_THREAD_COND* pCond, XMEDIA_THREAD_MUTEX *pMutex, U32 msecs)
{
struct timeval now;
struct timespec timeout;
if (msecs == 0)
{
return pthread_cond_wait(pCond, pMutex);
}
else
{
gettimeofday(&now, NULL);
timeout.tv_sec = now.tv_sec;
timeout.tv_nsec = ( now.tv_usec + (msecs * 1000 )) * 1000;
return pthread_cond_timedwait(pCond, pMutex, &timeout);
}
}
/*** Mutex Port END **/
INT32 bsp_thread_join(XMEDIA_THREAD_T *pThread, void **thread_return)
{
return (pthread_join(pThread->threadid, thread_return));
}
INT32 bsp_thread_create(XMEDIA_THREAD_T *pThread,const pthread_attr_t*__attr,
void*__arg)
{
if (NULL == pThread)
{
WRITE_LOG_ERROR("No routine to be run for create thread. \n");
return XMEDIA_FAILURE;
}
if (NULL == pThread->pf_run)
{
WRITE_LOG_ERROR("No routine to be run for create thread. \n");
return XMEDIA_FAILURE;
}
#if 0
if (0 == pthread_create(&(pThread->threadid), __attr, pThread->pf_run, __arg))
{
WRITE_LOG_DEBUG("thread %s create, id:%u\n", pThread->szThreadName, pThread->threadid);
return XMEDIA_SUCCESS;
}
else
{
return XMEDIA_FAILURE;
}
#endif
pThread->args = __arg;
if (0 == pthread_create(&(pThread->threadid), __attr,
bsp_thread_run_handle,
(void*)(pThread))
)
{
WRITE_LOG_DEBUG("thread %s create, threadid:%u.\n", pThread->szThreadName, pThread->threadid);
return XMEDIA_SUCCESS;
}
else
{
return XMEDIA_FAILURE;
}
}
INT32 bsp_thread_cancel(XMEDIA_THREAD_T *pThread)
{
if (pThread == NULL)
{
return XMEDIA_FAILURE;
}
WRITE_LOG_DEBUG("cancel thread %s. pid:%d,tid:%d.\n",
pThread->szThreadName, pThread->pid, pThread->threadid);
return pthread_cancel(pThread->threadid);
}
VOID* bsp_thread_run_handle(VOID* arg)
{
if (NULL == arg)
{
return NULL;
}
XMEDIA_THREAD_T *pThread = (XMEDIA_THREAD_T*)arg;
pThread->pid = getpid();
pThread->threadid = pthread_self();
WRITE_LOG_DEBUG("thread %s run, pid:%u, threadid:%u\n",
pThread->szThreadName,
pThread->pid,
pThread->threadid);
if (pThread->pf_run)
{
return pThread->pf_run(pThread->args);
}
else
{
return NULL;
}
}
EXTERNFUNC XMEDIA_RET bsp_thread_init(XMEDIA_THREAD_T *pThread, const char* szName,
THREAD_RUN pf, INT32 priority, BOOL bStart)
{
pThread->pf_run = pf;
pThread->priority = priority;
pThread->bStart = bStart;
if(strlen(szName) >= MAX_THREAD_NAME_LEN)
{
printf("The len of szName is more than MAX_THREAD_NAME_LEN\n");
return XMEDIA_FAILURE;
}else{
strcpy(pThread->szThreadName, szName);
}
return XMEDIA_SUCCESS;
}
/* work at 100MHz */
EXTERNFUNC void bsp_delay(U32 ulUsDelay)
{
U32 ulLoop = 0;
while(ulLoop<ulUsDelay * 10)
{
ulLoop++;
}
//return XMEDIA_SUCCESS;
}
#if defined(SYNC_USE_COND)
EXTERNFUNC XMEDIA_RET bsp_sync_create(IO XMEDIA_SYNC_T *pWait)
{
bsp_thread_cond_init(&pWait->_cond, NULL);
bsp_thread_mutex_init(&pWait->_mutex, NULL);
return XMEDIA_SUCCESS;
}
EXTERNFUNC XMEDIA_RET bsp_sync_wait(IO XMEDIA_SYNC_T *pWait,IN U32 msec)
{
return bsp_thread_cond_wait(&pWait->_cond, &pWait->_mutex, msec);
}
EXTERNFUNC XMEDIA_RET bsp_sync_notify(IO XMEDIA_SYNC_T *pWait)
{
return bsp_thread_cond_broadcast(&pWait->_cond);
}
EXTERNFUNC XMEDIA_RET bsp_sync_destroy(IO XMEDIA_SYNC_T *pWait)
{
bsp_thread_cond_init(&pWait->_cond, NULL);
bsp_thread_mutex_init(&pWait->_mutex, NULL);
return XMEDIA_SUCCESS;
}
#else
EXTERNFUNC XMEDIA_RET bsp_sync_create(IO XMEDIA_SYNC_T *pWait)
{
sem_init(&pWait->_sem, 0, 0);
return XMEDIA_SUCCESS;
}
EXTERNFUNC XMEDIA_RET bsp_sync_wait(IO XMEDIA_SYNC_T *pWait,IN U32 msec)
{
(void)msec;
sem_wait(&pWait->_sem);
return XMEDIA_SUCCESS;
}
EXTERNFUNC XMEDIA_RET bsp_sync_notify(IO XMEDIA_SYNC_T *pWait)
{
sem_post(&pWait->_sem);
return XMEDIA_SUCCESS;
}
EXTERNFUNC XMEDIA_RET bsp_sync_destroy(IO XMEDIA_SYNC_T *pWait)
{
sem_destroy(&pWait->_sem);
return XMEDIA_SUCCESS;
}
#endif
@@ -0,0 +1,329 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "bsp.h"
#include "argparser.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cpluscplus */
char ARG_TYPE_STR[ARG_TYPE_END + 1][8] =
{
{"NO_OPT"},
{"CHAR"},
{"STRING"},
{"INT"},
{"FLOAT"},
{"SINGLE"},
{"HELP"},
{"END"}
};
#if 0
XMEDIA_RET _NOWARN_UNUSED ARG_CheckType(ARGOpt_t *pOpt, char* szArgv)
{
(void) szArgv;
switch (pOpt->type)
{
case ARG_TYPE_INT:
break;
case ARG_TYPE_FLOAT:
break;
case ARG_TYPE_CHAR:
break;
case ARG_TYPE_NO_OPT:
case ARG_TYPE_STRING:
break;
case ARG_TYPE_END:
break;
default:
return ERR_ARG_UNKOWN_ARG;
}
return XMEDIA_SUCCESS;
}
#endif
XMEDIA_RET ARG_SetValue(ARGOpt_t *pOpt, const char* szArgv, int num)
{
switch (pOpt->type)
{
case ARG_TYPE_INT:
*((INT32*)pOpt->pValue) = atoi(szArgv);
pOpt->isSet = TRUE;
break;
case ARG_TYPE_FLOAT:
*((float*)pOpt->pValue) = (float)atof(szArgv);
pOpt->isSet = TRUE;
break;
case ARG_TYPE_CHAR:
*((CHAR*)pOpt->pValue) = szArgv[0];
pOpt->isSet = TRUE;
break;
case ARG_TYPE_NO_OPT:
case ARG_TYPE_STRING:
strcpy((char*)pOpt->pValue, szArgv);
pOpt->isSet = TRUE;
break;
case ARG_TYPE_END:
pOpt->isSet = FALSE;
break;
default:
pOpt->isSet = FALSE;
WRITE_LOG_ERROR("error opt type: %u\n",pOpt->type );
return ERR_ARG_UNKOWN_ARG;
}
return XMEDIA_SUCCESS;
}
/*
cmd -i 1003 xyz
^-------------
-i 1003
^ ^ 1003 arg
^
^------ i opt
*/
/*****************************************************************************
Prototype : StrToArg
Description : Convert string to [argc, argv] pair, the INPUT str had chan-
ged in this function
Input : CHAR* pSrc
int* argc
CHAR** argv
Output : None
Return Value :
Calls :
Called By :
History :
1.Date : 2005/7/27
Modification : Created function
*****************************************************************************/
VOID StrToArg(CHAR* pSrc, int* argc, CHAR** argv)
{
INT32 iNum = 0;
BOOL bNewWord = FALSE;
while(*pSrc)
{
if (*pSrc == ' ')
{
if (bNewWord == TRUE)
{
*pSrc = 0;
bNewWord = FALSE;
}
}
else
{
if (bNewWord == FALSE)
{
bNewWord = TRUE;
argv[iNum] = pSrc;
iNum++;
}
}
pSrc++;
}
*argc = iNum;
}
/*****************************************************************************
Prototype : ARGFindOptStr
Description : Find option string in option lists, if not find, return
NULL
Input : ARGOpt_t * opts
CHAR* strOpt
Output : None
Return Value :
Calls :
Called By :
History :
1.Date : 2005/7/27
Modification : Created function
*****************************************************************************/
static ARGOpt_t *ARGFindOptStr(ARGOpt_t * opts, CHAR* strOpt)
{
INT32 i = 0;
while (opts[i].type < ARG_TYPE_END)
{
if (strcmp(opts[i].sz_opt, strOpt) == 0 )
{
return &opts[i];
}
i++;
}
return NULL;
}
static ARGOpt_t *ARGFindOpt_NoArg(ARGOpt_t * opts)
{
INT32 i = 0;
while (opts[i].type < ARG_TYPE_END)
{
if (opts[i].type == ARG_TYPE_NO_OPT)
{
return &opts[i];
}
i++;
}
return NULL;
}
VOID ARGClearOpts(ARGOpt_t *opts)
{
INT32 i = 0;
while (opts[i].type < ARG_TYPE_END)
{
opts[i].isSet = 0;
i++;
}
}
XMEDIA_RET ARGParser(int argc, char **argv, ARGOpt_t *opts)
{
XMEDIA_RET ret;
INT32 iArgIdx = 0;
CHAR* pCurrArg = NULL;
ARGOpt_t* pCurrOpt = NULL;
BOOL bHasParseArg = FALSE;
INT32 iNO_OPT_Cnt = 0;
if (argc == 1)
{
return XMEDIA_SUCCESS;
}
//argv[0] is execute command
for (iArgIdx = 1; iArgIdx < argc ; iArgIdx++)
{
pCurrArg = argv[iArgIdx];
if (*pCurrArg == '/' || *pCurrArg == '-')
{
pCurrArg++;
/*the argv[n] as '-' */
if (*pCurrArg == 0)
{
WRITE_LOG_DEBUG("Wrong Args x: %s\n", argv[iArgIdx]);
return ERR_ARG_WRONG_FMT;
}
pCurrOpt = ARGFindOptStr(opts, pCurrArg);
if (pCurrOpt == NULL)
{
WRITE_LOG_DEBUG("Wrong Args y: %s\n", argv[iArgIdx]);
return ERR_ARG_WRONG_FMT;
}
if (pCurrOpt->type == ARG_TYPE_SINGLE)
{
bHasParseArg = FALSE;
pCurrOpt->isSet = TRUE;
}
else
{
bHasParseArg = TRUE;
}
continue;
}
else if (bHasParseArg == FALSE)
{
pCurrOpt = ARGFindOpt_NoArg(opts);
if (pCurrOpt == NULL)
{
WRITE_LOG_DEBUG("Wrong Args z: %s\n", argv[iArgIdx]);
return ERR_ARG_NOT_DEFINE_NO_OPT;
}
bHasParseArg = TRUE;
iNO_OPT_Cnt++;
if (iNO_OPT_Cnt >1)
{
return ERR_ARG_MULTI_NO_OPT;
}
}
if (TRUE == bHasParseArg )
{
ret = ARG_SetValue(pCurrOpt, argv[iArgIdx], iArgIdx);
if ( ret != XMEDIA_SUCCESS)
{
return ret;
}
bHasParseArg = FALSE;
}
}
return XMEDIA_SUCCESS;
}
/*return opts[]*/
VOID ARGPrintHelp(ARGOpt_t *opts)
{
INT32 i = 0;
while (opts[i].type < ARG_TYPE_END)
{
//fprintf(stdout, "-%s\n%s", opts[i].sz_opt,opts[i].pHelpMsg);
WRITE_LOG_NORMAL("-%s\n%s", opts[i].sz_opt,opts[i].pHelpMsg);
fflush(stdout);
i++;
}
}
VOID ARGPrintOpt(ARGOpt_t *pOpt)
{
switch (pOpt->type)
{
case ARG_TYPE_INT:
WRITE_LOG_DEBUG("opt:%s, argtype:%s, Set:%i, argValue:%i. hlp:%s\n",
pOpt->sz_opt, ARG_TYPE_STR[(int)pOpt->type],
pOpt->isSet, *((INT32*)pOpt->pValue),
(char*)pOpt->pHelpMsg);
break;
case ARG_TYPE_FLOAT:
WRITE_LOG_DEBUG("opt:%s, argtype:%s, Set:%u, argValue:%f. hlp:%s\n",
pOpt->sz_opt, ARG_TYPE_STR[(int)pOpt->type],
pOpt->isSet, *((float*)pOpt->pValue),
pOpt->pHelpMsg);
break;
case ARG_TYPE_CHAR:
WRITE_LOG_DEBUG("opt:%s, argtype:%s, Set:%u, argValue:%c. hlp:%s\n",
pOpt->sz_opt, ARG_TYPE_STR[(int)pOpt->type],
pOpt->isSet, *((char*)pOpt->pValue),
pOpt->pHelpMsg);
break;
case ARG_TYPE_NO_OPT:
case ARG_TYPE_STRING:
WRITE_LOG_DEBUG("opt:%s, argtype:%s, Set:%u, argValue:%s. hlp:%s\n",
pOpt->sz_opt, ARG_TYPE_STR[(int)pOpt->type],
pOpt->isSet, (char*)pOpt->pValue,
pOpt->pHelpMsg);
break;
case ARG_TYPE_SINGLE:
WRITE_LOG_DEBUG("opt:%s, argtype:%s, Set:%u, hlp:%s\n",
pOpt->sz_opt,
ARG_TYPE_STR[(int)pOpt->type],
pOpt->isSet,
pOpt->pHelpMsg);
break;
case ARG_TYPE_END:
WRITE_LOG_DEBUG("END\n");
break;
default:
break;
}
}
#ifdef __cplusplus
}
#endif /* __cpluscplus */
@@ -0,0 +1,167 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#include <stdio.h>
#include <string.h>
#include "bsp.h"
#include "argparser.h"
#include "cmdshell.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cpluscplus */
CMD_SHELL_T *CMD_SHELL_Search(IN char* cmdstr,
IN CMD_SHELL_T* pCmds
)
{
if (NULL == pCmds || NULL == cmdstr)
{
return NULL;
}
LENGTH_T lenCmdStr = strlen(cmdstr);
if ( 0 == lenCmdStr )
{
WRITE_LOG_DEBUG1("cmdstr is zero length string \n");
return NULL;
}
/**/
int i = 0;
while(pCmds[i].cmdstr)
{
if (strcmp(pCmds[i].cmdstr, cmdstr) == 0)
{
return (&pCmds[i]);
}
i++;
}
WRITE_LOG_DEBUG1("cann't find cmd: %s \n", cmdstr);
return NULL;
}
int CMD_SHELL_Run(CMD_SHELL_T* pCmd, int argc, char** argv)
{
if (NULL == pCmd)
{
return ERR_CMD_SHELL_NULL_CMD;
}
if (NULL == pCmd->pFunc)
{
return ERR_CMD_SHELL_NULL_FP;
}
else
{
//CMD_SHELL_PRINT_CMDSTRS(argc, argv);
return ((int)pCmd->pFunc(argc, argv));
}
}
#if 0
impl in file argparser.c
static void StrToArg(CHAR* pSrc, int* argc, CHAR** argv)
{
U32 iNum = 0;
BOOL bNewWord = FALSE;
while(*pSrc)
{
if (*pSrc == ' ')
{
if (bNewWord == TRUE)
{
*pSrc = 0;
bNewWord = FALSE;
}
}
else
{
if (bNewWord == FALSE)
{
bNewWord = TRUE;
argv[iNum] = pSrc;
iNum++;
}
}
pSrc++;
}
*argc = iNum;
}
#endif
#define MAX_CMD_LEN 128
int CMD_SHELL_RUN(char* cmdstrs, const CMD_SHELL_T *pCmds)
{
char xcmdstr[MAX_CMD_LEN];
int xargc;
char* xargv[16] = {0};
if (NULL == cmdstrs)
{
printf("null\n");
return XMEDIA_FAILURE;
}
if (cmdstrs[0] == 0)
{
return XMEDIA_FAILURE;
}
if (strlen(cmdstrs) >= MAX_CMD_LEN)
{
printf("cmdstrs's length is %ld, wbsp.h should less than %d\n",
strlen(cmdstrs), MAX_CMD_LEN);
return XMEDIA_FAILURE;
}
memset(xcmdstr, 0, MAX_CMD_LEN);
strncpy(xcmdstr, cmdstrs, MAX_CMD_LEN - 1);
StrToArg(xcmdstr, &xargc, xargv);
//CMD_SHELL_PRINT_CMDSTRS(xargc, xargv);
CMD_SHELL_T* pCmd = CMD_SHELL_Search(xargv[0], (CMD_SHELL_T*)pCmds);
if (pCmd == NULL)
{
WRITE_LOG_DEBUG("cann't find cmdstr:%s\n", cmdstrs);
return XMEDIA_FAILURE;
}
else
{
return CMD_SHELL_Run(pCmd, xargc, xargv);
}
}
int CMD_SHELL_RUN_2(int argc, char* argv[], const CMD_SHELL_T *pCmds)
{
CMD_SHELL_T* pCmd = NULL;
char* pCmdStr = argv[0];
char* pTmp = NULL;
for (pTmp = pCmdStr; *pTmp != '\0';)
{
if (*pTmp++ == '/')
pCmdStr = pTmp;
}
WRITE_LOG_DEBUG1("cmdstr:%s\n", pCmdStr);
pCmd = CMD_SHELL_Search(pCmdStr, (CMD_SHELL_T*)pCmds);
if (pCmd == NULL)
{
WRITE_LOG_DEBUG("cann't find cmdstr:%s\n", argv[0]);
return XMEDIA_FAILURE;
}
else
{
return CMD_SHELL_Run(pCmd, argc, argv);
}
}
#ifdef __cplusplus
}
#endif /* __cplusplus */
@@ -0,0 +1,298 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
/* file name : memmap.c */
/* linux /dev/mem mmap support func */
/* */
/* Copyright 2021 CJiang com. */
/* Create date: 2021-01-07 */
/************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <linux/limits.h>
#include "bsp.h"
#ifdef OS_LINUX
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <string.h>
typedef struct tag_MMAP_Node
{
unsigned long Start_P;
unsigned long Start_V;
unsigned long length;
unsigned long refcount;
struct tag_MMAP_Node * next;
}TMMAP_Node_t;
TMMAP_Node_t * pTMMAPNode = NULL;
#define PAGE_SIZE 0x1000
#define PAGE_SIZE_MASK (~(0xfff))
static int fd = -1;
static const char dev[]="/dev/mem";
#endif
/* no need considering page_size of 4K */
void * memmap(unsigned long phy_addr, unsigned long size)
{
#ifndef OS_LINUX
return (void *)phy_addr;
#else
unsigned long phy_addr_in_page;
unsigned long page_diff;
unsigned long size_in_page;
TMMAP_Node_t *pTmp = NULL;
TMMAP_Node_t *pNew = NULL;
void *addr=NULL;
if(size == 0)
{
WRITE_LOG_ERROR("memmap():size can't be zero!\n");
return NULL;
}
/* check if the physical memory space have been mmaped */
pTmp = pTMMAPNode;
while(pTmp != NULL)
{
if( (phy_addr >= pTmp->Start_P) &&
( (phy_addr + size) <= (pTmp->Start_P + pTmp->length) ) )
{
pTmp->refcount++; /* referrence count increase by 1 */
return (void *)(uintptr_t)(pTmp->Start_V + phy_addr - pTmp->Start_P);
}
pTmp = pTmp->next;
}
/* not mmaped yet */
if(fd < 0)
{
/* dev not opened yet, so open it */
fd = open (dev, O_RDWR | O_SYNC);
if (fd < 0)
{
WRITE_LOG_ERROR("memmap():open %s error!\n", dev);
return NULL;
}
}
/* addr align in page_size(4K) */
phy_addr_in_page = phy_addr & PAGE_SIZE_MASK;
page_diff = phy_addr - phy_addr_in_page;
/* size in page_size */
size_in_page =((size + page_diff - 1) & PAGE_SIZE_MASK) + PAGE_SIZE;
addr = mmap((void *)0, size_in_page, PROT_READ|PROT_WRITE, MAP_SHARED, fd, phy_addr_in_page);
if (addr == MAP_FAILED)
{
WRITE_LOG_ERROR("memmap():mmap @ 0x%x error!\n", phy_addr_in_page);
return NULL;
}
/* add this mmap to MMAP Node */
pNew = (TMMAP_Node_t *)malloc(sizeof(TMMAP_Node_t));
if(NULL == pNew)
{
WRITE_LOG_ERROR("memmap():malloc new node failed!\n");
munmap(addr, size_in_page);
return NULL;
}
pNew->Start_P = phy_addr_in_page;
pNew->Start_V = (unsigned long)(uintptr_t)addr;
pNew->length = size_in_page;
pNew->refcount = 1;
pNew->next = NULL;
if(pTMMAPNode == NULL)
{
pTMMAPNode = pNew;
}
else
{
pTmp = pTMMAPNode;
while(pTmp->next != NULL)
{
pTmp = pTmp->next;
}
pTmp->next = pNew;
}
return (void *)(addr+page_diff);
#endif
}
/*****************************************************************************
Prototype : memunmap
Description :
Input : void * addr_mapped
Output : None
Return Value : On success, returns 0, on failure -1
Calls :
Called By :
History :
1.Date : 2005/12/21
Author : Z42136
Modification : Created function
*****************************************************************************/
int memunmap(const void * addr_mapped)
{
TMMAP_Node_t *pPre = NULL;
TMMAP_Node_t *pTmp = NULL;
if(pTMMAPNode == NULL)
{
WRITE_LOG_ERROR("memunmap(): address have not been mmaped!\n");
return -1;
}
/* check if the physical memory space have been mmaped */
pTmp = pTMMAPNode;
pPre = pTMMAPNode;
do
{
if( ((unsigned long)(uintptr_t)addr_mapped >= pTmp->Start_V) &&
((unsigned long)(uintptr_t)addr_mapped <= (pTmp->Start_V + pTmp->length)) )
{
pTmp->refcount--; /* referrence count decrease by 1 */
if(0 == pTmp->refcount)
{
WRITE_LOG_INFO("memunmap(): map node will be remove!\n");
/* delete this map node from pMMAPNode */
if(pTmp == pTMMAPNode)
{
pTMMAPNode = NULL;
}
else
{
pPre->next = pTmp->next;
}
/* munmap */
if(munmap((void *)(uintptr_t)pTmp->Start_V, pTmp->length) != 0 )
{
WRITE_LOG_INFO("memunmap(): munmap failed!\n");
}
free(pTmp);
}
return 0;
}
pPre = pTmp;
pTmp = pTmp->next;
}while(pTmp != NULL);
WRITE_LOG_ERROR("memunmap(): address have not been mmaped!\n");
return -1;
}
void * mmapfile(char* fn, unsigned long size)
{
int fd =-1;
void * pShm = NULL;
char path[PATH_MAX + 1] = {0x00};
if(fn == NULL)
{
return NULL;
}
if((strlen(fn) > PATH_MAX) || (NULL == realpath(fn, path)))
{
printf("error: mmapfile_r input path error.\n");
return NULL;
}
if(size == 0)
{
printf("error:size is 0, error.\n");
return NULL;
}
/* Open the file. */
fd = open(path, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | O_SYNC);
if (fd == -1)
{
WRITE_LOG_DEBUG("Open file %s error: %i.\n",fn, errno );
return NULL;
}
/* Create the memory-mapping. */
pShm = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
close (fd);
if (pShm != NULL)
{
WRITE_LOG_DEBUG("Memory Map OK. Map File: %s, length:%#X, addr:0x%08lX",
fn, size, (unsigned long)(uintptr_t)pShm);
}
else
{
WRITE_LOG_DEBUG("Memory Map Failure. Map File %s, length:0x%08lX",
fn, size);
}
return pShm;
}
void * mmapfile_r(char* fn, unsigned long size)
{
int fd = -1;
void * pShm = NULL;
char path[PATH_MAX + 1] = {0x00};
if (fn == NULL || size == 0)
{
return NULL;
}
if((strlen(fn) > PATH_MAX) || (NULL == realpath(fn, path)))
{
printf("error: mmapfile_r input path error.\n");
return NULL;
}
/* Open the file. */
fd = open (path, O_RDONLY | O_SYNC);
if (fd == -1)
{
WRITE_LOG_INFO("Open file %s error: %d.\n",fn, errno );
return NULL;
}
/* Create the memory-mapping. */
pShm = mmap(0, size, PROT_READ, MAP_SHARED, fd, 0);
close (fd);
if (pShm != NULL)
{
WRITE_LOG_DEBUG("Memory Map OK. Map File: %s, length:%#X, addr:0x%08lX\n",
fn, size, (unsigned long)(uintptr_t)pShm);
}
else
{
WRITE_LOG_DEBUG("Memory Map Failure. Map File %s, length:0x%08lX\n",
fn, size);
}
return pShm;
}
@@ -0,0 +1,123 @@
/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#include <stdio.h>
#include <ctype.h>
#include "bsp.h"
#include "strfunc.h"
LOCALFUNC XMEDIA_RET atoul(IN CHAR *str,OUT unsigned long * pulValue);
LOCALFUNC XMEDIA_RET atoulx(IN CHAR *str,OUT unsigned long * pulValue);
/*****************************************************************************
Prototype : StrToNumber
Calls : isdigit
Called By :
History :
Modification : Created function
*****************************************************************************/
XMEDIA_RET StrToNumber(IN CHAR *str , OUT unsigned long * pulValue)
{
if ( *str == '0' && (*(str+1) == 'x' || *(str+1) == 'X') )
{
if (*(str+2) == '\0')
{
return XMEDIA_FAILURE;
}
else
{
return atoulx(str+2,pulValue);
}
}
else
{
return atoul(str,pulValue);
}
}
/*****************************************************************************
Prototype : atoul
Calls : isdigit
Called By :
History :
Modification : Created function
*****************************************************************************/
XMEDIA_RET atoul(IN CHAR *str,OUT unsigned long * pulValue)
{
unsigned long ulResult=0;
while (*str)
{
if (isdigit((int)*str))
{
if ((ulResult<429496729) || ((ulResult==429496729) && (*str<'6')))
{
ulResult = ulResult*10 + (*str)-48;
}
else
{
*pulValue = ulResult;
return XMEDIA_FAILURE;
}
}
else
{
*pulValue=ulResult;
return XMEDIA_FAILURE;
}
str++;
}
*pulValue=ulResult;
return XMEDIA_SUCCESS;
}
/*****************************************************************************
Prototype : atoulx
Calls : toupper
isdigit
Called By :
History :
Modification : Created function
*****************************************************************************/
#define ASC2NUM(ch) (ch - '0')
#define HEXASC2NUM(ch) (ch - 'A' + 10)
XMEDIA_RET atoulx(IN CHAR *str,OUT unsigned long * pulValue)
{
unsigned long ulResult=0;
UCHAR ch;
while (*str)
{
ch=toupper(*str);
if (isdigit(ch) || ((ch >= 'A') && (ch <= 'F' )))
{
if (ulResult < 0x200000000)
{
ulResult = (ulResult << 4) + ((ch<='9')?(ASC2NUM(ch)):(HEXASC2NUM(ch)));
}
else
{
*pulValue=ulResult;
return XMEDIA_FAILURE;
}
}
else
{
*pulValue=ulResult;
return XMEDIA_FAILURE;
}
str++;
}
*pulValue=ulResult;
return XMEDIA_SUCCESS;
}