/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
File: OCTVC1_MAIN_API.h
Copyright (c) 2018 Octasic Inc. All rights reserved.
Description: Contains the definition of the MAIN API.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see .
Release: OCTSDR Software Development Kit OCTSDR_GSM-02.11.00-B1927 (2018/04/27)
$Revision: $
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
#ifndef __OCTVC1_MAIN_API_H__
#define __OCTVC1_MAIN_API_H__
/*****************************  INCLUDE FILES  *******************************/
#include "../../octdev_types.h"
#include "../../octdev_devices.h"
#include "../octvc1_msg.h"
#include "../octvc1_handle.h"
#include "../octvc1_fifo.h"
#include "../octvc1_buffer.h"
#include "../octvc1_eth.h"
#include "../octvc1_transport.h"
#include "../octvc1_mac.h"
#include "../octvc1_cursor.h"
#include "../octvc1_list.h"
#include "../octvc1_log.h"
#include "../octvc1_process.h"
#include "../octvc1_api.h"
#include "../octvc1_module.h"
#include "../octvc1_user_id.h"
#include "../octvc1_stream.h"
#include "octvc1_main_id.h"
#include "octvc1_main_rc.h"
/************************  COMMON DEFINITIONS  *******************************/
/*-------------------------------------------------------------------------------------
 	Target related definitions.
-------------------------------------------------------------------------------------*/
#define cOCTVC1_MAIN_TARGET_MAX_INFO_BYTE_SIZE				768		 	/* Device info buffer size, in bytes. */
#define cOCTVC1_MAIN_USER_MAX_INFO_BYTE_SIZE				512		 	/* User info buffer size, in bytes. */
#define cOCTVC1_MAIN_USER_INFO_SIZE							0x80	
/*-------------------------------------------------------------------------------------
 	Application related definitions.
-------------------------------------------------------------------------------------*/
#define cOCTVC1_MAIN_APPLICATION_MAX_INFO_BYTE_SIZE			1024	 	/* Application info buffer size, in bytes. */
#define cOCTVC1_MAIN_APPLICATION_MAX_NAME_LENGTH			31		 	/* Application name max length, in bytes. */
#define cOCTVC1_MAIN_APPLICATION_MAX_SHORT_NAME_LENGTH		15		 	/* Application short_name max length, in bytes. */
#define cOCTVC1_MAIN_APPLICATION_MAX_DESCRIPTION_LENGTH		127		 	/* Application description max length, in bytes. */
#define cOCTVC1_MAIN_APPLICATION_MAX_VERSION_LENGTH			31		 	/* Application version max length, in bytes. */
#define cOCTVC1_MAIN_APPLICATION_SYSTEM_MAX_VERSION_LENGTH	512		 	/* System info max length, in bytes. */
#define cOCTVC1_MAIN_APPLICATION_SYSTEM_MAX_PLATFORM_LENGTH	31		 	/* System platform max length, in bytes. */
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_APPLICATION_STATE_ENUM :
-------------------------------------------------------------------------------------*/
#define tOCTVC1_MAIN_APPLICATION_STATE_ENUM					tOCT_UINT32
#define cOCTVC1_MAIN_APPLICATION_STATE_ENUM_STOPPED			0		
#define cOCTVC1_MAIN_APPLICATION_STATE_ENUM_STARTED			1		
#define cOCTVC1_MAIN_APPLICATION_STATE_ENUM_BOOTED			2		
#define cOCTVC1_MAIN_APPLICATION_STATE_ENUM_RESTRICTED		3		 	/* Some features are not available. */
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_APPLICATION_MODULE_STATE_ENUM :
-------------------------------------------------------------------------------------*/
#define tOCTVC1_MAIN_APPLICATION_MODULE_STATE_ENUM			tOCT_UINT32
#define cOCTVC1_MAIN_APPLICATION_MODULE_STATE_ENUM_INVALID	0		
#define cOCTVC1_MAIN_APPLICATION_MODULE_STATE_ENUM_STOPPED	1		
#define cOCTVC1_MAIN_APPLICATION_MODULE_STATE_ENUM_STARTED	2		
#define cOCTVC1_MAIN_APPLICATION_MODULE_STATE_ENUM_ERROR	3		
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_APPLICATION_MODULE_CONFIG_STATE_ENUM :
-------------------------------------------------------------------------------------*/
#define tOCTVC1_MAIN_APPLICATION_MODULE_CONFIG_STATE_ENUM				tOCT_UINT32
#define cOCTVC1_MAIN_APPLICATION_MODULE_CONFIG_STATE_ENUM_INVALID		0		
#define cOCTVC1_MAIN_APPLICATION_MODULE_CONFIG_STATE_ENUM_DEFAULT		1		
#define cOCTVC1_MAIN_APPLICATION_MODULE_CONFIG_STATE_ENUM_PARSE_OK		2		
#define cOCTVC1_MAIN_APPLICATION_MODULE_CONFIG_STATE_ENUM_PARSE_ERROR	3		
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_APPLICATION_MODULE_INFO
 		Application Module information
 Members:
	ulReserved
-------------------------------------------------------------------------------------*/
typedef struct
{
	tOCT_UINT32	ulReserved;
} tOCTVC1_MAIN_APPLICATION_MODULE_INFO;
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_APPLICATION_MODULE_STATS
 		API Command stats
 Members:
	ulState
	ulConfigState
	ulProcessCnt
 		Current number of process active in this module.
	ulIpcLinkCnt
 		Current number IPC Link.
	ulIpcLinkErrCnt
 		Number IPC Link open with error.
	ulStartTotalCnt
 		Total Count of start attempt.
	ulStartErrCnt
 		Count of start with error.
	ulStopTotalCnt
 		Total Count of stop attempt.
	ulStopErrCnt
 		Count of stop with error.
-------------------------------------------------------------------------------------*/
typedef struct
{
	tOCTVC1_MAIN_APPLICATION_MODULE_STATE_ENUM			ulState;
	tOCTVC1_MAIN_APPLICATION_MODULE_CONFIG_STATE_ENUM	ulConfigState;
	tOCT_UINT32											ulProcessCnt;
	tOCT_UINT32											ulIpcLinkCnt;
	tOCT_UINT32											ulIpcLinkErrCnt;
	tOCT_UINT32											ulStartTotalCnt;
	tOCT_UINT32											ulStartErrCnt;
	tOCT_UINT32											ulStopTotalCnt;
	tOCT_UINT32											ulStopErrCnt;
} tOCTVC1_MAIN_APPLICATION_MODULE_STATS;
/*-------------------------------------------------------------------------------------
 	API related definitions.
-------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------
 	Heartbeat state.
-------------------------------------------------------------------------------------*/
#define tOCTVC1_MAIN_HEARTBEAT_STATE_ENUM					tOCT_UINT32
#define cOCTVC1_MAIN_HEARTBEAT_STATE_ENUM_STOP				0		
#define cOCTVC1_MAIN_HEARTBEAT_STATE_ENUM_START				1		
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_API_SESSION_HEARTBEAT_CONFIG
 Members:
	ulWaitTimeMs
		Range:		[500..10000]
		Default:	1000
 		Wait time between heartbeats
	ulIdleOnlyFlag
		Default:	cOCT_TRUE
 		If true, heartbeat sent only when API session is idle
-------------------------------------------------------------------------------------*/
typedef struct
{
	tOCT_UINT32	ulWaitTimeMs;
	tOCT_BOOL32	ulIdleOnlyFlag;
} tOCTVC1_MAIN_API_SESSION_HEARTBEAT_CONFIG;
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_API_SESSION_HEARTBEAT_STATS
 Members:
	ulState
	ulHeartbeatSentCnt
 		Number of heartbeats that were sent
-------------------------------------------------------------------------------------*/
typedef struct
{
	tOCTVC1_MAIN_HEARTBEAT_STATE_ENUM	ulState;
	tOCT_UINT32							ulHeartbeatSentCnt;
} tOCTVC1_MAIN_API_SESSION_HEARTBEAT_STATS;
/*-------------------------------------------------------------------------------------
 	FILE SYSTEM related definitons.
-------------------------------------------------------------------------------------*/
#define cOCTVC1_MAIN_FILE_SYSTEM_NAME_MAX_LENGTH			cOCTVC1_HANDLE_OBJECT32_NAME_MAX_LENGTH	 	/* File System Name string length restriction. */
#define cOCTVC1_MAIN_FILE_SYSTEM_HOST_ROOT_PATH_MAX_LENGTH	255		 	/* File System Host Root path name string length restriction. */
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_FILE_SYSTEM_OPEN_PARMS
 Members:
	szName
 		Filesystem name. Must be unique.
	szHostRootPathName
 		Host root path name.
-------------------------------------------------------------------------------------*/
typedef struct
{
	tOCT_INT8	szName[(cOCTVC1_MAIN_FILE_SYSTEM_NAME_MAX_LENGTH+1)];/* NOSWAPMAC */
	tOCT_INT8	szHostRootPathName[(cOCTVC1_MAIN_FILE_SYSTEM_HOST_ROOT_PATH_MAX_LENGTH+1)];/* NOSWAPMAC */
} tOCTVC1_MAIN_FILE_SYSTEM_OPEN_PARMS;
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_FILE_SYSTEM_INFO_PARMS
 Members:
	hFileSystem
	szName
 		Filesystem name.
	szHostRootPathName
 		Host root path name.
	ulFileCnt
 		NOTE: this the number of files added in this file system.
	FileServerAddress
 		File server address.
-------------------------------------------------------------------------------------*/
typedef struct
{
	tOCTVC1_HANDLE_OBJECT		hFileSystem;
	tOCT_INT8					szName[(cOCTVC1_MAIN_FILE_SYSTEM_NAME_MAX_LENGTH+1)];/* NOSWAPMAC */
	tOCT_INT8					szHostRootPathName[(cOCTVC1_MAIN_FILE_SYSTEM_HOST_ROOT_PATH_MAX_LENGTH+1)];/* NOSWAPMAC */
	tOCT_UINT32					ulFileCnt;
	tOCTVC1_TRANSPORT_ADDRESS	FileServerAddress;
} tOCTVC1_MAIN_FILE_SYSTEM_INFO_PARMS;
/*-------------------------------------------------------------------------------------
 	FILE related definitons.
-------------------------------------------------------------------------------------*/
#define cOCTVC1_MAIN_FILE_MAX_DATA_BYTE_SIZE				1200	 	/* File commands (read/write) buffer size, in bytes. */
#define cOCTVC1_MAIN_FILE_NAME_MAX_LENGTH					cOCTVC1_HANDLE_OBJECT32_NAME128_MAX_LENGTH	 	/* File name string length restriction. */
/*-------------------------------------------------------------------------------------
 	API command/response arguments file modes.
-------------------------------------------------------------------------------------*/
#define tOCTVC1_MAIN_FILE_TRANSFER_MODE_ENUM				tOCT_UINT32
#define cOCTVC1_MAIN_FILE_TRANSFER_MODE_ENUM_READ			0x1		 	/* Read from target */
#define cOCTVC1_MAIN_FILE_TRANSFER_MODE_ENUM_WRITE			0x2		 	/* Write to target */
/*-------------------------------------------------------------------------------------
 	API command/response arguments file modes.
-------------------------------------------------------------------------------------*/
#define tOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM						tOCT_UINT32
#define cOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM_INVALID					0x00	
#define cOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM_WAIT_ACK					0x01	
#define cOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM_ACTIVE					0x02	
#define cOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM_WAIT_ACK_EOF				0x03	
#define cOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM_EOF						0x04	
#define cOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM_ACK_REPLY				0x05	
#define cOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM_ERROR					0x80	
#define cOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM_ERROR_NOT_FOUND			0x81	
#define cOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM_ERROR_ALREADY_OPEN		0x82	
#define cOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM_ERROR_NO_REQUEST_ACK		0x83	
#define cOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM_ERROR_MISSING_DATA		0x84	
/*-------------------------------------------------------------------------------------
 	File transfer mask.
-------------------------------------------------------------------------------------*/
#define tOCTVC1_MAIN_FILE_TRANSFER_MASK						tOCT_UINT32
#define cOCTVC1_MAIN_FILE_TRANSFER_MASK_NONE				0x00000000	
#define cOCTVC1_MAIN_FILE_TRANSFER_MASK_REWIND				((tOCT_UINT32)(0x1<<0) )	
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_FILE_TRANSFER_STATS
 Members:
	Mode
	Status
	Stream
-------------------------------------------------------------------------------------*/
typedef struct
{
	tOCTVC1_MAIN_FILE_TRANSFER_MODE_ENUM	Mode;
	tOCTVC1_MAIN_FILE_TRANSFER_STATUS_ENUM	Status;
	tOCTVC1_STREAM_STATS					Stream;
} tOCTVC1_MAIN_FILE_TRANSFER_STATS;
/*-------------------------------------------------------------------------------------
 	API command/response arguments file modes.
 	Note : deprecated. Replaced by FILE_TRANSFER_MODE_ENUM
 	Note : Opening both read and write at the same time is not supported.
-------------------------------------------------------------------------------------*/
#define tOCTVC1_MAIN_FILE_OPEN_MODE_MASK					tOCT_UINT32
#define cOCTVC1_MAIN_FILE_OPEN_MODE_MASK_READ				0x1		
#define cOCTVC1_MAIN_FILE_OPEN_MODE_MASK_WRITE				0x2		
/*-------------------------------------------------------------------------------------
 	Stream related definitions
-------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------
 	Stream state.
-------------------------------------------------------------------------------------*/
#define tOCTVC1_MAIN_STREAM_STATE_ENUM						tOCT_UINT32
#define cOCTVC1_MAIN_STREAM_STATE_ENUM_STOP					0		
#define cOCTVC1_MAIN_STREAM_STATE_ENUM_START				1		
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_STREAM_INFO
 Members:
	hLogicalObj
	ulState
-------------------------------------------------------------------------------------*/
typedef struct
{
	tOCTVC1_HANDLE_OBJECT			hLogicalObj;
	tOCTVC1_MAIN_STREAM_STATE_ENUM	ulState;
} tOCTVC1_MAIN_STREAM_INFO;
/*-------------------------------------------------------------------------------------
 	LOG related sections.
-------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------
 	Log Trace state.
-------------------------------------------------------------------------------------*/
#define tOCTVC1_MAIN_LOG_TRACE_STATE_ENUM					tOCT_UINT32
#define cOCTVC1_MAIN_LOG_TRACE_STATE_ENUM_STOP				0		
#define cOCTVC1_MAIN_LOG_TRACE_STATE_ENUM_START				1		
#define cOCTVC1_MAIN_LOG_MAX_NUM_FILES						32		 	/* Maximum total number of log files that can be logged to */
#define cOCTVC1_MAIN_LOG_FILE_PREFIX_MAX_LENGTH				(cOCTVC1_MAIN_FILE_NAME_MAX_LENGTH-2)	 	/* Maximum length of the prefix of the log filename */
#define cOCTVC1_MAIN_LOG_TRACE_FILTER_PROCESS_ENTRY_MAX		8		 	/* Max number of process entry in log trace filter */
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_LOG_TRACE_STATS
 Members:
	ulCurrentFileSize
 		Size (in bytes) of the current log file.
	ulCurrentFileIndex
 		The index number of the current log file.
	ulFileOverwriteCnt
 		The number of times the log files were replaced/overwritten.
	ulNumFiles
 		Number of valid log files. Number of indexes in the array.
	abyFileIndexes
 		An array containing log file index numbers.
 		This sequence indicates the order that the log files
 		should be read in.
	szFileNamePrefix
 		Array of bytes containing the prefix of log file name.
 		The buffer name can be up to LOG_FILE_PREFIX_MAX_LENGTH characters long,
 		excluding the terminating NULL character.
-------------------------------------------------------------------------------------*/
typedef struct
{
	tOCT_UINT32	ulCurrentFileSize;
	tOCT_UINT32	ulCurrentFileIndex;
	tOCT_UINT32	ulFileOverwriteCnt;
	tOCT_UINT32	ulNumFiles;
	tOCT_UINT8	abyFileIndexes[cOCTVC1_MAIN_LOG_MAX_NUM_FILES];
	tOCT_INT8	szFileNamePrefix[cOCTVC1_MAIN_LOG_FILE_PREFIX_MAX_LENGTH];
} tOCTVC1_MAIN_LOG_TRACE_STATS;
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_LOG_TRACE_INFO
 Members:
	ulMaxFileSize
 		The maximum size (in bytes) of each file.
	ulMaxNumFiles
 		Maximum number of files there can be at once.
	szFileNamePrefix
 		Array of bytes containing the prefix of log file name.
 		The buffer name can be up to LOG_FILE_PREFIX_MAX_LENGTH characters long,
 		excluding the terminating NULL character.
-------------------------------------------------------------------------------------*/
typedef struct
{
	tOCT_UINT32	ulMaxFileSize;
	tOCT_UINT32	ulMaxNumFiles;
	tOCT_INT8	szFileNamePrefix[cOCTVC1_MAIN_LOG_FILE_PREFIX_MAX_LENGTH];
} tOCTVC1_MAIN_LOG_TRACE_INFO;
/*-------------------------------------------------------------------------------------
	tOCTVC1_MAIN_LOG_TRACE_FILTER
 Members:
	ulTraceProcessAllFlag
		Default:	cOCT_TRUE
 		When set to cOCT_TRUE, the trace will be started for all process
 		When set to cOCT_FALSE, the trace will be started only for specified process
	aTraceProcessUserId
		Default:	cOCTVC1_USER_ID_PROCESS_ENUM_INVALID
 		Process User ID to start trace.
 		Only used, if ulTraceProcessAllFlag set to cOCT_FALSE
-------------------------------------------------------------------------------------*/
typedef struct
{
	tOCT_BOOL32						ulTraceProcessAllFlag;
	tOCTVC1_USER_ID_PROCESS_ENUM	aTraceProcessUserId[cOCTVC1_MAIN_LOG_TRACE_FILTER_PROCESS_ENTRY_MAX];
} tOCTVC1_MAIN_LOG_TRACE_FILTER;
/*-------------------------------------------------------------------------------------
 	Main Module Data Definitions
-------------------------------------------------------------------------------------*/
#define cOCTVC1_MAIN_MODULE_DATA_IPC						((0x0001)|(cOCTVC1_MODULE_ID_ENUM_MAIN<