/*----------------------------------------------------------------------------
 *
 * File: 
 * eas_miditypes.h
 *
 * Contents and purpose:
 * Contains declarations for the MIDI stream parser.
 *
 *
 * Copyright Sonic Network Inc. 2005

 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *----------------------------------------------------------------------------
 * Revision Control:
 *   $Revision: 778 $
 *   $Date: 2007-07-23 16:45:17 -0700 (Mon, 23 Jul 2007) $
 *----------------------------------------------------------------------------
*/

#ifndef _EAS_MIDITYPES_H
#define _EAS_MIDITYPES_H

#include "eas_data.h"
#include "eas_parser.h"

/*----------------------------------------------------------------------------
 * S_MIDI_STREAM
 *
 * Maintains parser state for the MIDI stream parser
 *
 *----------------------------------------------------------------------------
*/
 
typedef struct s_midi_stream_tag
{
	EAS_BOOL8			byte3;				/* flag indicates 3rd byte expected */
	EAS_BOOL8			pending;			/* flag indicates more data expected */
	EAS_U8				sysExState;			/* maintains the SysEx state */
	EAS_U8				runningStatus;		/* last running status received */
	EAS_U8				status;				/* status byte */
	EAS_U8				d1;					/* first data byte */
	EAS_U8				d2;					/* second data byte */
	EAS_U8				flags;				/* flags - see below for definition */
#ifdef JET_INTERFACE	
	EAS_U32				jetData;			/* JET data */
#endif
} S_MIDI_STREAM;

/* flags for S_MIDI_STREAM.flags */
#define MIDI_FLAG_GM_ON			0x01		/* GM System On message received */
#define MIDI_FLAG_FIRST_NOTE	0x02		/* first note received */

/* flags for S_MIDI_STREAM.jetFlags */
#define MIDI_FLAGS_JET_MUTE		0x00000001	/* track is muted */
#define MIDI_FLAGS_JET_CB		0x00000002	/* JET callback enabled */

/*----------------------------------------------------------------------------
 *
 * S_SMF_STREAM
 *
 * This structure contains data required to parse an SMF stream. For SMF0 files, there
 * will be a single instance of this per file. For SMF1 files, there will be multiple instance,
 * one for each separate stream in the file.
 *
 *----------------------------------------------------------------------------
*/

typedef struct s_smf_stream_tag
{
	EAS_FILE_HANDLE		fileHandle;			/* host wrapper file handle */
	EAS_U32				ticks;				/* time of next event in stream */
	EAS_I32 			startFilePos;		/* start location of track within file */
	S_MIDI_STREAM 		midiStream;			/* MIDI stream state */
} S_SMF_STREAM;

/*----------------------------------------------------------------------------
 *
 * S_SMF_DATA
 *
 * This structure contains the instance data required to parse an SMF stream.
 *
 *----------------------------------------------------------------------------
*/

typedef struct s_smf_data_tag
{
#ifdef _CHECKED_BUILD
	EAS_U32				handleCheck;		/* signature check for checked build */
#endif
	S_SMF_STREAM		*streams;			/* pointer to individual streams in file */
	S_SMF_STREAM		*nextStream;		/* pointer to next stream with event */
	S_SYNTH				*pSynth;			/* pointer to synth */
	EAS_FILE_HANDLE		fileHandle;			/* file handle */
	S_METADATA_CB		metadata;			/* metadata callback */
	EAS_I32				fileOffset;			/* for embedded files */
	EAS_I32				time;				/* current time in milliseconds/256 */
	EAS_U16				numStreams;			/* actual number of streams */
	EAS_U16				tickConv;			/* current MIDI tick to msec conversion */
	EAS_U16				ppqn;				/* ticks per quarter note */
	EAS_U8				state;				/* current state EAS_STATE_XXXX */
	EAS_U8				flags;				/* flags - see definitions below */
} S_SMF_DATA;

#define SMF_FLAGS_CHASE_MODE		0x01	/* chase mode - skip to first note */
#define SMF_FLAGS_HAS_TIME_SIG		0x02	/* time signature encountered at time 0 */
#define SMF_FLAGS_HAS_TEMPO			0x04	/* tempo encountered at time 0  */
#define SMF_FLAGS_HAS_GM_ON			0x08	/* GM System On encountered at time 0 */
#define SMF_FLAGS_JET_STREAM		0x80	/* JET in use - keep strict timing */

/* combo flags indicate setup bar */
#define SMF_FLAGS_SETUP_BAR (SMF_FLAGS_HAS_TIME_SIG | SMF_FLAGS_HAS_TEMPO | SMF_FLAGS_HAS_GM_ON)

/*----------------------------------------------------------------------------
 * Interactive MIDI structure
 *----------------------------------------------------------------------------
*/
typedef struct s_interactive_midi_tag
{
#ifdef _CHECKED_BUILD
	EAS_U32				handleCheck;		/* signature check for checked build */
#endif
	S_SYNTH		*pSynth;			/* pointer to synth */
	S_MIDI_STREAM		stream;				/* stream data */
} S_INTERACTIVE_MIDI;

#endif /* #ifndef _EAS_MIDITYPES_H */

