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
|
#include "vpm450m_fw.h"
static int init_vpm450m(void *wc)
{
tOCT6100_CHIP_OPEN ChipOpen;
tOCT6100_GET_INSTANCE_SIZE InstanceSize;
UINT32 ulResult;
tOCT6100_CHANNEL_OPEN ChannelOpen;
struct stat sb;
char *filename = "OCT6104-128D.ima";
int fd;
void *fw;
int x;
Oct6100ChipOpenDef(&ChipOpen);
/* Setup Chip Open Parameters */
ChipOpen.ulUpclkFreq = cOCT6100_UPCLK_FREQ_33_33_MHZ;
Oct6100GetInstanceSizeDef(&InstanceSize);
ChipOpen.pbyImageFile = vpm450m_fw;
ChipOpen.pProcessContext = wc;
ChipOpen.ulImageSize = sizeof(vpm450m_fw);
ChipOpen.fEnableMemClkOut = TRUE;
ChipOpen.ulMemClkFreq = cOCT6100_MCLK_FREQ_133_MHZ;
ChipOpen.ulMaxChannels = 128;
ChipOpen.ulMemoryType = cOCT6100_MEM_TYPE_DDR;
ChipOpen.ulMemoryChipSize = cOCT6100_MEMORY_CHIP_SIZE_32MB;
ChipOpen.ulNumMemoryChips = 1;
ChipOpen.ulMaxTdmStreams = 4;
ChipOpen.aulTdmStreamFreqs[0] = cOCT6100_TDM_STREAM_FREQ_8MHZ;
ChipOpen.ulTdmSampling = cOCT6100_TDM_SAMPLE_AT_FALLING_EDGE;
#if 0
ChipOpen.fEnableAcousticEcho = TRUE;
#endif
ulResult = Oct6100GetInstanceSize(&ChipOpen, &InstanceSize);
if (ulResult != cOCT6100_ERR_OK) {
fprintf(stderr, "Failed to get instance size, code %08x!\n", ulResult);
return -1;
}
pApiInstance = malloc(InstanceSize.ulApiInstanceSize);
if (!pApiInstance) {
fprintf(stderr, "Out of memory (can't allocate %d bytes)!\n", InstanceSize.ulApiInstanceSize);
return -1;
}
ulResult = Oct6100ChipOpen(pApiInstance, &ChipOpen);
if (ulResult != cOCT6100_ERR_OK) {
fprintf(stderr, "Failed to open chip, code %08x!\n", ulResult);
return -1;
}
for (x=0;x<128;x++) {
Oct6100ChannelOpenDef(&ChannelOpen);tOCT6100_CHIP_OPEN
ChannelOpen.pulChannelHndl = &aulEchoChanHndl[x];
ChannelOpen.ulUserChanId = x;
ChannelOpen.TdmConfig.ulRinPcmLaw = cOCT6100_PCM_U_LAW;
ChannelOpen.TdmConfig.ulRinStream = 1;
ChannelOpen.TdmConfig.ulRinTimeslot = x;
ChannelOpen.TdmConfig.ulSinPcmLaw = cOCT6100_PCM_U_LAW;
ChannelOpen.TdmConfig.ulSinStream = 0;
ChannelOpen.TdmConfig.ulSinTimeslot = x;
ChannelOpen.TdmConfig.ulSoutPcmLaw = cOCT6100_PCM_U_LAW;
ChannelOpen.TdmConfig.ulSoutStream = 3;
ChannelOpen.TdmConfig.ulSoutTimeslot = x;
ChannelOpen.TdmConfig.ulRoutPcmLaw = cOCT6100_PCM_U_LAW;
ChannelOpen.TdmConfig.ulRoutStream = 2;
ChannelOpen.TdmConfig.ulRoutTimeslot = x;
ChannelOpen.VqeConfig.fEnableNlp = TRUE;
ChannelOpen.VqeConfig.fRinDcOffsetRemoval = TRUE;
ChannelOpen.VqeConfig.fSinDcOffsetRemoval = TRUE;
ChannelOpen.fEnableToneDisabler = TRUE;
ChannelOpen.ulEchoOperationMode = cOCT6100_ECHO_OP_MODE_POWER_DOWN;
ulResult = Oct6100ChannelOpen(pApiInstance, &ChannelOpen);
if (ulResult != GENERIC_OK) {
fprintf(stderr, "Failed to open channel %d!\n", x);
}
}
return 0;
}
static int close_chip(void)
{
UINT32 ulResult;
tOCT6100_CHIP_CLOSE ChipClose;
Oct6100ChipCloseDef(&ChipClose);
ulResult = Oct6100ChipClose(pApiInstance, &ChipClose);
if (ulResult != cOCT6100_ERR_OK) {
fprintf(stderr, "Failed to close chip, code %08x!\n", ulResult);
return -1;
}
return 0;
}
|