1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367
|
/****************************************************************************
HalLStream.h
Description: Interface for the HalLStream class.
Created: David A. Hoatson, September 2002
Copyright 2000 Lynx Studio Technology, Inc.
This software contains the valuable TRADE SECRETS and CONFIDENTIAL INFORMATION
of Lynx Studio Technology, Inc. The software is protected under copyright
laws as an unpublished work of Lynx Studio Technology, Inc. Notice is
for informational purposes only and does not imply publication. The user
of this software may make copies of the software for use with products
manufactured by Lynx Studio Technology, Inc. or under license from
Lynx Studio Technology, Inc. and for no other use.
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
PURPOSE.
Environment:
4 spaces per tab
Revision History
When Who Description
--------- --- ------------------------------------------------------------
****************************************************************************/
#ifndef _HALLSTREAM_H
#define _HALLSTREAM_H
#include "Hal.h"
#include "HalEnv.h" // Added by ClassView
enum
{
LSTREAM_BRACKET = 0,
LSTREAM_HEADER,
LSTREAM_NUM_PORTS
};
enum
{
ADAT_OPTICAL_IN_1 = 0,
ADAT_OPTICAL_IN_2
};
/////////////////////////////////////////////////////////////////////////////
// Control Registers (Write Only)
/////////////////////////////////////////////////////////////////////////////
enum
{
kControlLSCTL0 = 0, // 00 LStream control, generic
kControlLSREQ, // 01 LStream status request, generic
// LS-ADAT Specific
kControlADATCTL = 2, // 02 LS-ADAT control
kControlTCRATE0, // 03 Sync In time code transmission rate, byte 0
kControlTCRATE1, // 04 Sync In time code transmission rate, byte 1
kControlTCCUE0, // 05 Sync In time code cue frame count, byte 0
kControlTCCUE1, // 06 Sync In time code cue frame count, byte 1
kControlTCCUE2, // 07 Sync In time code cue frame count, byte 2
kControlTCCUE3, // 08 Sync In time code cue frame count, byte 3
kControlSYNCOUT, // 09 Sync Out MIDI data on SYNC IN port.
kControlUSR1TC0, // 0A ADAT optical out 1 user bit time code, byte 0
kControlUSR1TC1, // 0B ADAT optical out 1 user bit time code, byte 1
kControlUSR1TC2, // 0C ADAT optical out 1 user bit time code, byte 2
kControlUSR1TC3, // 0D ADAT optical out 1 user bit time code, byte 3 (MSB)
kControlUSR1MIDI, // 0E ADAT optical out 1 user bit MIDI
kControlUSR2TC0, // 0F ADAT optical out 2 user bit time code, byte 0 (LSB)
kControlUSR2TC1, // 10 ADAT optical out 2 user bit time code, byte 1
kControlUSR2TC2, // 11 ADAT optical out 2 user bit time code, byte 2
kControlUSR2TC3, // 12 ADAT optical out 2 user bit time code, byte 3 (MSB)
kControlUSR2MIDI, // 13 ADAT optical out 2 user bit MIDI
// LS-AES Specific
kControlDEVCTL = 0x02, // 02 Device Specific Control
kControlAK4117_PDC = 0x08, // 08 AK4117 Control Register Block (8 Bytes)
kControlAK4117_CLC, // 09 AK4117 Register
kControlAK4117_IOC, // 0A AK4117 Register
kControlCBLK8420A = 0x10, // 10 CS8420 Control Register Block (16 Bytes)
kControlCBLK8420B = 0x20, // 20 CS8420 Control Register Block (16 Bytes)
kControlCBLK8420C = 0x30, // 30 CS8420 Control Register Block (16 Bytes)
kControlCBLK8420D = 0x40, // 40 CS8420 Control Register Block (16 Bytes)
kControlNumRegs
};
enum
{
kAES8420MiscControl1 = 0,
kAES8420MiscControl2,
kAES8420DataFlowControl,
kAES8420ClockSourceControl,
kAES8420RxErrorMask,
kAES8420CSDataBufferControl,
kAES8420CSBuffer
};
#define REG_LSCTL0_MRST kBit0 // Master reset for LStream device logic and state machines, active high (NEVER ASSERT THIS!)
#define REG_LSCTL0_MMUTEn kBit1 // Master mute. Must all inputs and outputs, active low
#define REG_LSCTL0_LED kBit2 // Illuminates LED
#define REG_LSCTL0_PING kBit3 // Enables periodic transmission of basic status
#define REG_LSCTL0_CKSRC_MASK (kBit4 | kBit5)
#define REG_LSCTL0_CKSRC_FCK (0) // LStream frame clock (FCK)
// LS-ADAT Specific
#define REG_LSCTL0_CKSRC_OP0 kBit4 // ADAT Optical In 0
#define REG_LSCTL0_CKSRC_OP1 kBit5 // ADAT Optical In 1
#define REG_LSCTL0_CKSRC_SYNCIN (kBit4 | kBit5) // ADAT Sync In port
// LS-AES Specific
#define REG_LSCTL0_CLKSRC_DIGIN1 0
#define REG_LSCTL0_CLKSRC_DIGIN2 kBit4
#define REG_LSCTL0_CLKSRC_DIGIN3 kBit5
#define REG_LSCTL0_CLKSRC_DIGIN4 (kBit4 | kBit5)
#define REG_LSCTL0_FCKOE kBit6 // Output frame clock enable, 0=disabled, 1=enabled.
#define REG_LSREQ_ADDR_MASK 0x3F // Address of requested status register
#define REG_LSREQ_REQSINGLE kBit6 // Request transmission of single status register at ADDR
#define REG_LSREQ_REQALL kBit7 // Request transmission of all status registers
#define REG_ADATCTL_RCVRSTn kBit0 // ADAT receiver reset, resets both receivers, active low.
#define REG_ADATCTL_RCVMUTEn kBit1 // ADAT receiver reset, mutes both receivers, active low.
#define REG_ADATCTL_XMTMUTEn kBit2 // ADAT transmitter mute, mutes both transmitters, active low.
#define REG_ADATCTL_TCEN kBit3 // Enables transmission of SYNC IN timecode to hoast at the rate specified by TCRATE3-0.
#define REG_ADATCTL_TCXMITSYNC kBit4 // Initalizes the counter used to count cycles between time code transmissions.
#define REG_ADATCTL_TCCUEEN kBit5 // Enabled time code cuit hit signal transmission to host for starting devices in SYNCREADY mode.
#define REG_ADATCTL_SYNCINEN kBit6 // Enables transmission of SYNC IN data on arrival
enum
{
MIXVAL_ADATCLKSRC_SLAVE = 0,
MIXVAL_ADATCLKSRC_IN1,
MIXVAL_ADATCLKSRC_IN2,
MIXVAL_ADATCLKSRC_SYNCIN
};
#define REG_DEVCTL_DEVRSTn kBit0
#define REG_DEVCTL_CSINIT kBit1
#define REG_DEVCTL_RXNOTIFY kBit2
#define REG_DEVCTL_WIDEWIRE kBit3
#define REG_DEVCTL_DIOFMT1 kBit4
#define REG_DEVCTL_DIOFMT2 kBit5
#define REG_DEVCTL_DIOFMT3 kBit6
#define REG_DEVCTL_DIOFMT4 kBit7
enum
{
MIXVAL_AESCLKSRC_SLAVE = 0,
MIXVAL_AESCLKSRC_IN1,
MIXVAL_AESCLKSRC_IN2,
MIXVAL_AESCLKSRC_IN3,
MIXVAL_AESCLKSRC_IN4
};
/////////////////////////////////////////////////////////////////////////////
// Status Registers (Read Only)
/////////////////////////////////////////////////////////////////////////////
enum
{
kStatusLSDEVID = 0, // 00 LStream device ID LS-ADAT 1, LS-AES 2, LS-TDIF 3
kStatusPCBRREV, // 01 LStream device PCB revision, 0=NC, 1=A, 2=B, etc.
kStatusFWREV, // 02 LStream device firmware build number
kStatusLSSTAT, // 03 LStream device status/errors, generic (locked, power, parity)
// LS-ADAT Specific
kStatusADATSTAT = 4, // 04 LS-ADAT status (receiver errors)
kStatusSYNCTC0, // 05 ADAT SYNC IN port time code, byte 0 (LSB)
kStatusSYNCTC1, // 06 ADAT SYNC IN port time code, byte 1
kStatusSYNCTC2, // 07 ADAT SYNC IN port time code, byte 2
kStatusSYNCTC3, // 08 ADAT SYNC IN port time code, byte 3 (MSB)
kStatusSYNCIN, // 09 ADAT SYNC IN port MIDI data
kStatusUSR1TC0, // 0A ADAT optical in 1 user bit time code, byte 0 (LSB)
kStatusUSR1TC1, // 0B ADAT optical in 1 user bit time code, byte 1
kStatusUSR1TC2, // 0C ADAT optical in 1 user bit time code, byte 2
kStatusUSR1TC3, // 0D ADAT optical in 1 user bit time code, byte 3 (MSB)
kStatusUSR1MIDI, // 0E ADAT optical in 1 user bit MIDI
kStatusUSR2TC0, // 0F ADAT optical in 2 user bit time code, byte 0 (LSB)
kStatusUSR2TC1, // 10 ADAT optical in 2 user bit time code, byte 1
kStatusUSR2TC2, // 11 ADAT optical in 2 user bit time code, byte 2
kStatusUSR2TC3, // 12 ADAT optical in 2 user bit time code, byte 3 (MSB)
kStatusUSR2MIDI, // 13 ADAT optical in 2 user bit MIDI
// LS-AES Specific
kStatusFREQCNTA0 = 3, // 03 AES Frequency Counter A LSB
kStatusFREQCNTA1, // 04 AES Frequency Counter A MSB
kStatusFREQSCALEA, // 05 AES Frequency Scale A
kStatusFREQCNTB0, // 06 AES Frequency Counter B LSB
kStatusFREQCNTB1, // 07 AES Frequency Counter B MSB
kStatusFREQSCALEB, // 08 AES Frequency Scale B
kStatusFREQCNTC0, // 09 AES Frequency Counter C LSB
kStatusFREQCNTC1, // 0A AES Frequency Counter C MSB
kStatusFREQSCALEC, // 0B AES Frequency Scale C
kStatusFREQCNTD0, // 0C AES Frequency Counter D LSB
kStatusFREQCNTD1, // 0D AES Frequency Counter D MSB
kStatusFREQSCALED, // 0E AES Frequency Scale D
kStatusAKSTAT0 = 0x10, // 10 AK4117 Receiver Status 0
kStatusAKSTAT1, // 11 AK4117 Receiver Status 1
kStatusAKSTAT2, // 12 AK4117 Receiver Status 2
kStatusRXCSA, // 13 CS8420 Receiver Channel Status, Digital In 1
kStatusRXERRA, // 14 CS8420 Receiver Error Status, Digital In 1
kStatusSRRA, // 15 CS8420 Sample Rate Ratio, Digital In 1
kStatusRXCSB, // 16 CS8420 Receiver Channel Status, Digital In 2
kStatusRXERRB, // 17 CS8420 Receiver Error Status, Digital In 2
kStatusSRRB, // 18 CS8420 Sample Rate Ratio, Digital In 2
kStatusRXCSC, // 19 CS8420 Receiver Channel Status, Digital In 3
kStatusRXERRC, // 1A CS8420 Receiver Error Status, Digital In 3
kStatusSRRC, // 1B CS8420 Sample Rate Ratio, Digital In 3
kStatusRXCSD, // 1C CS8420 Receiver Channel Status, Digital In 4
kStatusRXERRD, // 1D CS8420 Receiver Error Status, Digital In 4
kStatusSRRD, // 1E CS8420 Sample Rate Ratio, Digital In 4
kStatusNumRegs
};
enum
{
k8420_A = 0,
k8420_B,
k8420_C,
k8420_D,
LSTREAM_NUM_8420
};
enum
{
MIXVAL_AESSRCMODE_SRC_ON = 0, // AES In, SRC
MIXVAL_AESSRCMODE_SRC_OFF, // Slave to AES In, No SRC
MIXVAL_AESSRCMODE_SRC_ON_DIGOUT, // AES out SRC to AES in
MIXVAL_AESSRCMODE_TXONLY // AES out only
};
#define REG_LSDEVID_LSADAT 1
#define REG_LSDEVID_LSAES 2
#define REG_LSDEVID_AURORA16 0x26
#define REG_LSDEVID_AURORA8 0x27
#define REG_ADATSTAT_RCVERR0 kBit0
#define REG_ADATSTAT_RCVERR1 kBit1
// This is the abstract class CHalLStream
class CHalLStream
{
public:
CHalLStream ()
{
}
~CHalLStream ()
{
}
USHORT Open (PHALADAPTER pHalAdapter);
USHORT Close ();
void EnableInterrupts ();
void DisableInterrupts ();
void ResetFIFOs ();
USHORT SampleClockChanged (LONG lRate, LONG lSource);
ULONG GetDeviceID (ULONG ulPort);
ULONG GetPCBRev (ULONG ulPort);
ULONG GetFirmwareRev (ULONG ulPort);
USHORT ReadStatus (ULONG ulPort, ULONG ulReg, PBYTE pucValue);
BOOLEAN IsLocked (ULONG ulPort);
USHORT WaitForLock (ULONG ulPort);
USHORT SetOutputSelection (ULONG ulPort, ULONG ulOutputSelection);
ULONG GetOutputSelection (ULONG ulPort);
USHORT SetLStreamDualInternal (ULONG ulLStreamDualInternal);
ULONG GetLStreamDualInternal ()
{
return (m_bLStreamDualInternal);
}
USHORT SetGPOut (ULONG ulGPOut);
ULONG GetGPOut ()
{
return (m_bGPOut);
}
// LS-ADAT Specific
USHORT ADATSetClockSource (ULONG ulPort, ULONG ulClockSource);
BYTE ADATGetClockSource (ULONG ulPort);
BOOLEAN ADATIsLocked (ULONG ulPort, ULONG ulInput);
USHORT ADATEnableTimeCodeToMTC (ULONG ulPort, BOOLEAN bEnable);
USHORT ADATSetTimeCodeTxRate (ULONG ulPort, ULONG ulTCTxRateSamples);
USHORT ADATSetCuePoint (ULONG ulPort, ULONG ulCuePoint);
ULONG ADATGetCuePoint (ULONG ulPort);
USHORT ADATCuePointEnable ();
USHORT ADATGetSyncInTimeCode (ULONG ulPort, PULONG pulTimecode);
USHORT ADATGetPosition (ULONG ulPort, PULONG pulPosition);
// LS-AES Specific
USHORT AESSetClockSource (ULONG ulPort, ULONG ulClockSource,
BOOLEAN bInISR = FALSE);
ULONG AESGetClockSource (ULONG ulPort);
USHORT AESSetSRCMode (ULONG ulPort, ULONG ulTheChip, ULONG ulMode);
ULONG AESGetSRCMode (ULONG ulPort, ULONG ulTheChip);
USHORT AESSetFormat (ULONG ulPort, ULONG ulTheChip, ULONG ulFormat);
ULONG AESGetFormat (ULONG ulPort, ULONG ulTheChip);
USHORT AESSetInputMuteOnError (ULONG ulPort, BOOLEAN bMuteOnError);
USHORT AESSetOutputStatus (ULONG ulPort, ULONG ulTheChip, ULONG ulStatus);
ULONG AESGetOutputStatus (ULONG ulPort, ULONG ulTheChip);
ULONG AESGetInputSampleRate (ULONG ulPort, ULONG ulTheChip);
ULONG AESGetSRCRatio (ULONG ulPort, ULONG ulTheChip);
ULONG AESGetInputStatus (ULONG ulPort, ULONG ulTheChip);
USHORT AESSetWideWire (ULONG ulPort, ULONG ulWideWire);
ULONG AESGetWideWire (ULONG ulPort);
// Mixer
USHORT SetDefaults (void);
USHORT SetMixerControl (USHORT usControl, ULONG ulValue);
USHORT GetMixerControl (USHORT usControl, PULONG pulValue);
USHORT Service (BOOLEAN bPolled = FALSE);
private:
USHORT InitializeDevice (ULONG ulPort);
USHORT WriteControl (ULONG ulPort, ULONG ulReg, BYTE ucValue, BYTE ucMask =
0xFF);
// LS-AES Specific
ULONG AESGetBaseControl (ULONG ulTheChip);
ULONG AESGetBaseStatus (ULONG ulTheChip);
USHORT AESInitialize8420 (ULONG ulPort, ULONG ulTheChip);
USHORT AESWriteCSBuffer (ULONG ulPort, ULONG ulTheChip, PBYTE pBuffer);
PHALADAPTER m_pHalAdapter;
CHalRegister m_RegOPIOCTL;
CHalRegister m_RegOPDEVCTL;
CHalRegister m_RegOPDEVSTAT;
CHalRegister m_RegOPBUFSTAT;
CHalMIDIDevice *m_pMIDIRecord;
LONG m_lSampleRate;
ULONG m_ulSpeed;
BYTE m_aControlRegisters[LSTREAM_NUM_PORTS][127]; // 2 ports, 0x7F registers each
BYTE m_aStatusRegisters[LSTREAM_NUM_PORTS][127]; // 2 ports, 0x7F registers each
ULONG m_ulOutputSelection[LSTREAM_NUM_PORTS];
BOOLEAN m_bInitialized[LSTREAM_NUM_PORTS];
BOOLEAN m_bLStreamDualInternal;
BOOLEAN m_bGPOut;
// LS-ADAT Specific
ULONG m_ulADATClockSource[LSTREAM_NUM_PORTS];
ULONG m_ulLastTimecode[LSTREAM_NUM_PORTS];
ULONG m_ulADATTimeCodeTxRate[LSTREAM_NUM_PORTS];
ULONG m_ulADATCuePoint[LSTREAM_NUM_PORTS];
BOOLEAN m_bEnableMTC[LSTREAM_NUM_PORTS];
// LS-AES Specific
ULONG m_ulAESClockSource[LSTREAM_NUM_PORTS];
ULONG m_ulWideWire[LSTREAM_NUM_PORTS];
ULONG m_ulFormat[LSTREAM_NUM_PORTS][LSTREAM_NUM_8420];
ULONG m_ulSRCMode[LSTREAM_NUM_PORTS][LSTREAM_NUM_8420];
ULONG m_ulOutputStatus[LSTREAM_NUM_PORTS][LSTREAM_NUM_8420];
};
#endif // _HALLSTREAM_H
|