/*
 * Copyright (c) 1998-2006 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * This file contains Original Code and/or Modifications of Original Code
 * as defined in and that are subject to the Apple Public Source License
 * Version 2.0 (the 'License'). You may not use this file except in
 * compliance with the License. Please obtain a copy of the License at
 * http://www.opensource.apple.com/apsl/ and read it before using this
 * file.
 * 
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 * Please see the License for the specific language governing rights and
 * limitations under the License.
 * 
 * @APPLE_LICENSE_HEADER_END@
 */
 
#ifndef _APPLEUSBTRINITYAUDIODEVICE_H
#define _APPLEUSBTRINITYAUDIODEVICE_H

#include "AppleUSBAudioDevice.h"

#define V8_WRITE_START_ADDR			0xb042
#define V8_PLUGIN_START_ADDR		0x8120
#define XDFP_STARTING_EQ_ADDR		0x50

#define EQ_TABLE_SIZE				16

#define kMicronasSetMemReq			4
#define kMicronasGetMemReq			5

#define MAX_EQ_DOWNLOAD_RETRIES		200

class AppleUSBTrinityAudioDevice : public AppleUSBAudioDevice {
    OSDeclareDefaultStructors (AppleUSBTrinityAudioDevice);

    UInt32					mEQRetryCount;

public:
    virtual bool			start (IOService * provider);

	virtual IOReturn		performPowerStateChange (IOAudioDevicePowerState oldPowerState, IOAudioDevicePowerState newPowerState, UInt32 *microSecsUntilComplete);

protected:

    virtual IOReturn		xdfpGetMem (UInt8 * buf, UInt16 length, UInt16 xdfpAddr);
    virtual IOReturn		xdfpSetMem (UInt8 * buf, UInt16 length, UInt16 xdfpAddr);

    virtual IOReturn		xdfpWrite (UInt16 xdfpAddr, SInt32 value);

    virtual IOReturn		disablePlugin ();
    virtual IOReturn		downloadEQ ();
    virtual IOReturn		downloadEQ (SInt32 * eqSettings);
    virtual IOReturn		downloadPlugin ();
    virtual IOReturn		enablePlugin ();

    virtual SInt32 *		getProperEQSettings ();

    virtual void			attemptEQDownload ();
    virtual void			scheduleEQDownloadRetry ();

    static void				retryEQDownload (void *arg);
};

#endif
