[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/driver/audio/src32_inc/ctm_modem.h b/mcu/driver/audio/src32_inc/ctm_modem.h
new file mode 100644
index 0000000..93e39ef
--- /dev/null
+++ b/mcu/driver/audio/src32_inc/ctm_modem.h
@@ -0,0 +1,90 @@
+/*******************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2001
+*
+*******************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * ctm_modem.h
+ *
+ * Project:
+ * --------
+ *
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ *
+ *
+ *==============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifdef __CTM_SUPPORT__
+
+#ifndef __CTM_MODEM_H
+#define __CTM_MODEM_H
+
+uint32 ctm_modem_mem_req(void);
+void ctm_modem_init(uint8 *buf, uint32 buf_len, CTM_Param *ctm_param);
+uint16 ctm_modem_get_flags(void);
+
+void baudot_demod(const uint16 *pcm_in_buf, uint16 *ctmFlags, uint8 *utf8_code);
+void ctm_receiver(const uint16 *pcm_in_buf, uint8 bfi, uint16 *ctmFlags, uint8 *utf8_code);
+void baudot_mod(uint8 utf8_code, uint16 *pcm_in_buf,uint16 *ctmFlags);
+void ctm_transmitter(uint8 utf8_code, uint16 *pcm_in_buf,uint16 *ctmFlags);
+void baudot_demod_reset(void);
+
+//*** CMF(CTM Modem Flags)
+
+// Baudot Demodulator
+#define CMF_BAUDOT_IN_DETECTED 0x1
+#define CMF_BAUDOT_IN_CHAR 0x2
+
+// CTM Receiver
+#define CMF_CTM_RX_EARLY_MUTE 0x4
+#define CMF_CTM_RX_DETECTED 0x8
+#define CMF_CTM_RX_CHAR 0x10
+
+// Baudot Modulator
+#define CMF_BAUDOT_OUT_BITS_READY 0x40
+#define CMF_BAUDOT_OUT_NEAR_EMPTY 0x80
+
+// CTM Transmitter
+#define CMF_CTM_TX_BITS_READY 0x100
+#define CMF_CTM_TX_NEAR_EMPTY 0x200
+
+#endif // __CTM_MODEM_H
+
+#endif // __CTM_SUPPORT__
diff --git a/mcu/driver/audio/src32_inc/ctm_params.h b/mcu/driver/audio/src32_inc/ctm_params.h
new file mode 100644
index 0000000..303f03b
--- /dev/null
+++ b/mcu/driver/audio/src32_inc/ctm_params.h
@@ -0,0 +1,207 @@
+/*******************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2001
+*
+*******************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * ctm_params.h
+ *
+ * Project:
+ * --------
+ *
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ *
+ *
+ *==============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifdef __CTM_SUPPORT__
+
+#ifndef _CTM_PARAMS_H_
+#define _CTM_PARAMS_H_
+
+//--------------------------------------------------------------------
+//#define L1CTM_DEBUG_MODE // used in ep_engine\ctm\*.*
+ // used in l1audio\l1ctm.c
+
+ #if defined(L1CTM_DEBUG_MODE)
+#define SAVE_ONLY_TTY_CHAR
+ #ifdef SAVE_ONLY_TTY_CHAR
+#define BURST_START_CHAR '#'
+#define BURST_END_CHAR '*'
+ #endif
+ #endif /* L1CTM_DEBUG_MODE */
+
+//--------------------------------------------------------------------
+// Count number of continuous symblos burst without IDLE
+// for detection of test case 7-2 (2006-06-15 Jinfa)
+#define DYNAMIC_IDLE_MISS_HNDL_BIT7_CHEAT // used in ctm_receiver.c
+#define THRESHOLD_IDLE_MISS_HNDL_BIT7_CHEAT 20
+//--------------------------------------------------------------------
+// If handover happened, disable the IDLE MISS HANDLE mechanism ##
+// CTM characters
+#define HANDOVER_DISABLE_IDLEMISS_HANDLE_NO 20 // Number of CTM characters
+
+//--------------------------------------------------------------------
+// Map all UTF code into Baudot code set (2006-06-28 Jinfa)
+#define SUPER_BIT_CHEAT // used in ctm_receiver.c
+//--------------------------------------------------------------------
+#define CPRM_MASK_DOWN_SAMP 0x01
+#define CPRM_MASK_BIT7_CHEAT 0x02
+#define CPRM_MASK_IDLE_MISS_HNDL 0x04
+
+#define CPRM_MASK_REC_DL_PCM_OUT 0x08 // used in l1ctm.c
+#define CPRM_MASK_REC_DL_PCM_IN 0x10 // used in l1ctm.c
+#define CPRM_MASK_REC_UL_PCM_OUT 0x20 // used in l1ctm.c
+#define CPRM_MASK_REC_UL_PCM_IN 0x40 // used in l1ctm.c
+#define CPRM_MASK_REC_RX_BUF 0x80 // used in l1ctm.c
+#define CPRM_MASK_ALWAYS_NEGO_SUC 0x100 // used in l1ctm.c
+#define CPRM_MASK_MORE_ENQUIRY 0x200 // used in l1ctm.c
+
+////////////////////////////////////////////
+#define CPRM_BAUDOT_BIT_DURATION 176
+#define CPRM_BFI_SHIFT 2
+#define CPRM_TH_RELIABILITY 100
+#define CPRM_NUM_MUTE_BIT 25
+
+#define CPRM_ALPHA 32113
+#define CPRM_ONE_MINUS_ALPHA 655
+#define CPRM_ALPHA2 32440
+#define CPRM_TH_A (8 + (10 << 8))
+#define CPRM_AVE_EARLY_MUTED_BIT 250
+
+#define CPRM_SCAL_FACTOR 23170
+#define CPRM_WAIT_SYNC_REL_THRESHOLD2 25265
+#define CPRM_WAIT_SYNC_REL_THRESHOLD1 17500
+#define CPRM_RESYNC_REL_THRESHOLD 26542
+
+#define CPRM_THRESHOLD_RELIABILITY_FOR_XCORR 800
+#define CPRM_THRESHOLD_RELIABILITY_FOR_XCORR2 8
+#define CPRM_NUM_BITS (40 + (48 << 8))
+#define CPRM_SEARCH_RANGE_PREAMBLE 80
+
+#define CPRM_SEARCH_RANGE_RESYNC 40
+#define CPRM_TH_SAMPLING_CORRECTION 40
+#define CPRM_TONE_DEMOD_DOWN_SAMP (CPRM_MASK_DOWN_SAMP)
+
+ #if defined(MT6225)
+#define CPRM_NULL_TH 16500
+#define CPRM_WAIT_SYNC_REL_THRESHOLD0 18500
+#define CPRM_DELAY_SYNC_REL_THRESHOLD 12100
+#define CPRM_CODEBOOK_GAIN_THRESHOLD 3000
+#define CPRM_CODEBOOK_GAIN_VALUE 2300
+ #elif defined(MT6229) || defined(MT6268T) || defined(TK6516)
+#define CPRM_NULL_TH 20480
+#define CPRM_WAIT_SYNC_REL_THRESHOLD0 20316
+#define CPRM_DELAY_SYNC_REL_THRESHOLD 11796
+#define CPRM_CODEBOOK_GAIN_THRESHOLD 4000
+#define CPRM_CODEBOOK_GAIN_VALUE 2000
+ #else
+/*For BB which support SAIC*/
+#define CPRM_NULL_TH 20480
+#define CPRM_WAIT_SYNC_REL_THRESHOLD0 20316
+#define CPRM_DELAY_SYNC_REL_THRESHOLD 11796
+#define CPRM_CODEBOOK_GAIN_THRESHOLD 3000
+#define CPRM_CODEBOOK_GAIN_VALUE 2800
+ #endif
+////////////////////////////////////////////
+
+#endif // _CTM_PARAMS_H_
+#endif // __CTM_SUPPORT__
+
diff --git a/mcu/driver/audio/src32_inc/ecall_control.h b/mcu/driver/audio/src32_inc/ecall_control.h
new file mode 100644
index 0000000..a364128
--- /dev/null
+++ b/mcu/driver/audio/src32_inc/ecall_control.h
@@ -0,0 +1,143 @@
+/*============================================================================*/
+/* eCall ANSI C fixed-point reference source code */
+/* */
+/* File: ecall_control.h */
+/* Version: 8.6.0 (Rel8) / 9.4.0 (Rel9) */
+/* Date: 2011-02-08 */
+/* Description: control message functions (header file) */
+/*----------------------------------------------------------------------------*/
+
+#ifndef ECALL_CONTROL_H_
+#define ECALL_CONTROL_H_
+
+#include "ecall_defines.h"
+#include "ecall_sync.h"
+
+
+typedef enum {
+ DlMsgNoop = -2,
+ DlMsgReset,
+ DlMsgStart, // 0
+ DlMsgNack, // 1
+ DlMsgAck, // 2
+ DlMsgSend, // 3
+ DlMsgUndef04,
+ DlMsgUndef05,
+ DlMsgUndef06,
+ DlMsgUndef07,
+ DlMsgUndef08,
+ DlMsgUndef09,
+ DlMsgUndef10,
+ DlMsgUndef11,
+ DlMsgUndef12,
+ DlMsgUndef13,
+ DlMsgUndef14,
+ DlMsgUndef15,
+ DlMsgUndef16,
+ DlMsgUndef17,
+ DlMsgUndef18,
+ DlMsgUndef19,
+ DlMsgUndef20,
+ DlMsgUndef21,
+ DlMsgUndef22,
+ DlMsgUndef23,
+ DlMsgUndef24,
+ DlMsgUndef25,
+ DlMsgUndef26,
+ DlMsgUndef27,
+ DlMsgUndef28,
+ DlMsgUndef29,
+ DlMsgUndef30,
+ DlMsgUndef31,
+ DlMsgHlack = SET_LLMSG + SET_HLMSG
+} DlData;
+
+#ifdef ECALL_ENUM2STR
+#define DLMSG_PAD (-DlMsgNoop)
+#define NUM_DLMSGS (DlMsgHlack - DlMsgNoop + 1)
+extern const char* const __DLMSG2STR[NUM_DLMSGS];
+#define DLDATA2STR(DLDATA) __DLMSG2STR[DLMSG_PAD + DLDATA]
+#endif
+
+typedef enum {
+ CtrlRxIdle,
+ CtrlRxSync,
+ CtrlRxLock,
+ CtrlTxIdle,
+ CtrlTxSend,
+ NUM_PORTSTATES
+} PortState;
+
+#ifdef ECALL_ENUM2STR
+extern const char* const __PORTSTATE2STR[NUM_PORTSTATES];
+#define PORTSTATE2STR(PORTSTATE) __PORTSTATE2STR[PORTSTATE]
+#endif
+
+typedef enum {
+ PortUndef,
+ PortIvs,
+ PortPsap,
+ NUM_PORTOWNERS
+} PortOwner;
+
+#ifdef ECALL_ENUM2STR
+extern const char* const __PORTOWNER2STR[NUM_PORTOWNERS];
+#define PORTOWNER2STR(PORTOWNER) __PORTOWNER2STR[PORTOWNER]
+#endif
+
+/*============================================================================*/
+/* Control structures */
+/*----------------------------------------------------------------------------*/
+
+typedef struct {
+ Int16 dlData; /* message symbol */
+ Int16 dlIndex; /* message frame counter */
+} CtrlTxPort;
+
+typedef struct {
+ Int16 dlData; /* detected message symbol */
+ Int16 dlMetric; /* receiver metric */
+} CtrlRxPort;
+
+typedef struct {
+ union {
+ CtrlTxPort tx; /* port control transmitter */
+ CtrlRxPort rx; /* port control receiver */
+ } u;
+ PortState state; /* port state */
+ PortOwner owner; /* port owner identification */
+ Bool invert; /* port inversion flag */
+} CtrlPort;
+
+typedef struct {
+ CtrlPort port; /* port struct */
+} CtrlTxData;
+
+typedef struct {
+ CtrlPort port; /* port struct */
+
+ SyncState *sync; /* pointer to sync struct */
+ Int16 *buffer; /* pointer to control receiver buffer */
+
+ Tern dlRead; /* sync indication (ternary variable) */
+ Int16 dlIndex; /* internal frame counter */
+ Int16 dlSyncLock; /* number of sync events required */
+} CtrlRxData;
+
+
+/*============================================================================*/
+/* Control functions */
+/*----------------------------------------------------------------------------*/
+
+const char* CtrlPortName(PortOwner);
+void CtrlSync(CtrlRxData*, const Int16*);
+
+void CtrlTxReset(CtrlTxData*, PortOwner);
+void CtrlTxProcess(CtrlTxData*, Int16*);
+void CtrlTxMod(Int16*, Int16, Int16);
+
+void CtrlRxReset(CtrlRxData*, PortOwner, SyncState*, Int16*, Int16);
+void CtrlRxProcess(CtrlRxData*, const Int16*);
+Int16 CtrlRxDemod(const Int16*, Int16*);
+
+#endif
diff --git a/mcu/driver/audio/src32_inc/ecall_defines.h b/mcu/driver/audio/src32_inc/ecall_defines.h
new file mode 100644
index 0000000..8bb9df5
--- /dev/null
+++ b/mcu/driver/audio/src32_inc/ecall_defines.h
@@ -0,0 +1,130 @@
+/*============================================================================*/
+/* eCall ANSI C fixed-point reference source code */
+/* */
+/* File: ecall_defines.h */
+/* Version: 8.6.0 (Rel8) / 9.4.0 (Rel9) */
+/* Date: 2011-02-08 */
+/* Description: constants and common data structures */
+/*----------------------------------------------------------------------------*/
+
+#ifndef ECALL_DEFINES_H_
+#define ECALL_DEFINES_H_
+
+#include <limits.h>
+
+//#define __ECALL_MODEM_SUPPORT_PSAP__
+#define ECALL_ENUM2STR
+
+/*============================================================================*/
+/* General conventions */
+/*----------------------------------------------------------------------------*/
+
+typedef enum { False, True } Bool;
+typedef enum { Minus = -1, Zero, Plus } Tern;
+
+typedef signed char Int8; /* 8 bit signed variable */
+typedef signed short int Int16; /* 16 bit signed variable */
+typedef signed int Int32; /* 32 bit signed variable */
+
+typedef unsigned char Ord1; /* 1 bit variable */
+typedef unsigned char Ord8; /* 8 bit unsigned variable */
+typedef unsigned short int Ord16; /* 16 bit unsigned variable */
+typedef unsigned int Ord32; /* 32 bit unsigned variable */
+
+#define MAX(a,b) ((a)>(b) ? (a) : (b)) /* macro: maximum */
+#define MIN(a,b) ((a)<(b) ? (a) : (b)) /* macro: minimum */
+#define ABS(a) ((a)< 0 ? -(a) : (a)) /* macro: absolute value */
+#define SIGN(a) ((a)< 0 ? (-1) : (1)) /* macro: sign */
+
+#ifndef PCM_LENGTH
+#define PCM_LENGTH (160) /* length of PCM frame in samples */
+#endif
+#ifndef ECALL_MSD_MAX_LENGTH
+#define ECALL_MSD_MAX_LENGTH (140) /* length of MSD message in bytes */
+#endif
+#ifndef PCM_MIN
+#define PCM_MIN (SHRT_MIN) /* minimum PCM value */
+#endif
+#ifndef PCM_MAX
+#define PCM_MAX (SHRT_MAX) /* maximum PCM value */
+#endif
+
+/*============================================================================*/
+/* Synchronization */
+/*----------------------------------------------------------------------------*/
+
+#define SYNC_BADCHECK (3) /* sync consecutive bad check */
+#define SYNC_BADTRACK (4) /* sync consecutive bad track */
+#define SYNC_IDXLEN (75) /* sync index length */
+#define SYNC_THRESHOLD (10e6) /* sync threshold */
+
+#define LOCK_RESYNC (2) /* messages to lock after sync loss */
+#define LOCK_START_UL (2) /* START messages to lock sync (UL) */
+#define LOCK_START_DL (3) /* START messages to lock sync (DL) */
+#define FAIL_RESTART (3) /* START messages to restart */
+
+#define NRF_WAKEUP (3) /* number of wakeup frames */
+#define NRF_SYNC (13) /* number of sync frames */
+#define NRF_OBSERVE (10) /* number of sync observer frames */
+#define NRF_RESYNC (60) /* resync frames after sync loss */
+
+#define NRS_CHECK (480) /* number of samples to check */
+#define NRS_TRACK (240) /* number of samples to track */
+#define NRS_CP (2) /* number of samples next to peaks */
+
+#define PNSEQ_OSF (22) /* oversampling of PN sequence */
+#define PEAK_DIST_PP (30*PNSEQ_OSF) /* distance outer positive peaks */
+#define PEAK_DIST_NN (54*PNSEQ_OSF) /* distance negative peaks */
+#define PEAK_DIST_PN (12*PNSEQ_OSF) /* distance positive to negative */
+
+/*============================================================================*/
+/* Uplink/Downlink format */
+/*----------------------------------------------------------------------------*/
+
+#define ARQ_MAX (8) /* number of redundancy versions */
+#define NRB_TAIL (3) /* number of encoder tail bits */
+#define NRB_CRC (28) /* order of CRC polynomial */
+
+#define NRB_INFO (8*ECALL_MSD_MAX_LENGTH)
+#define NRB_INFO_CRC (8*ECALL_MSD_MAX_LENGTH + NRB_CRC)
+#define NRB_CODE_ARQ (1380)
+#define NRB_CODE_BUFFER (3*(8*ECALL_MSD_MAX_LENGTH + NRB_CRC) + 4*NRB_TAIL)
+
+#define SET_LLMSG (16) /* set size lower-layer messages */
+#define SET_HLMSG (16) /* set size higher-layer messages */
+
+#define NRF_DLDATA (3) /* downlink data frames */
+#define NRF_DLMUTE1LL (3) /* 1st muting lower-layer message */
+#define NRF_DLMUTE1HL (1) /* 1st muting higher-layer message */
+#define NRF_DLCHUNK (NRF_SYNC + NRF_DLMUTE1HL + 2*NRF_DLDATA)
+
+/*============================================================================*/
+/* IVS/PSAP processing */
+/*----------------------------------------------------------------------------*/
+
+#define NRF_MEMCTRL (7)
+#define NRS_MEMSYNC (508 + 38*NRS_CP)
+
+#define IVS_NUMSEND (5) /* number of SEND messages */
+#define IVS_THRESHOLD (40000) /* threshold for control messages */
+#define IVS_GOSTART (6) /* threshold for unreliable START */
+#define IVS_TXFAST (10) /* fast modulator NACK condition */
+#define IVS_TXINC (87) /* sample increment at restart */
+
+#define PSAP_NUMSTART (500) /* number of START messages */
+#define PSAP_NUMACK (5) /* number of ACK messages */
+#define PSAP_NUMHLACK (5) /* number of HLACK messages */
+#define PSAP_THRESHOLD (40) /* threshold for modulator type */
+
+#define FEC_VAR (30206) /* variance: 1/4550000 in Q37 */
+#define FEC_MEAN (0xB9999A) /* mean: 5.8 in Q21 */
+#define FEC_ITERATIONS (8) /* number of decoder iterations */
+#define FEC_STATES (8) /* number of decoder states */
+
+#define IntLLR Int16
+#define LLR_MAX ((Int32)(0x7fff-1))
+#define LOGEXP_RES (401) /* resolution of logexp table */
+#define LOGEXP_DELTA (-6) /* internal Q-factor */
+#define LOGEXP_QIN (8) /* input Q-factor of LLR values */
+
+#endif
diff --git a/mcu/driver/audio/src32_inc/ecall_fec.h b/mcu/driver/audio/src32_inc/ecall_fec.h
new file mode 100644
index 0000000..d251217
--- /dev/null
+++ b/mcu/driver/audio/src32_inc/ecall_fec.h
@@ -0,0 +1,50 @@
+/*============================================================================*/
+/* eCall ANSI C fixed-point reference source code */
+/* */
+/* File: ecall_fec.h */
+/* Version: 8.6.0 (Rel8) / 9.4.0 (Rel9) */
+/* Date: 2011-02-08 */
+/* Description: Turbo encoder and decoder (header file) */
+/*----------------------------------------------------------------------------*/
+
+#ifndef ECALL_FEC_H_
+#define ECALL_FEC_H_
+
+#include "ecall_defines.h"
+#include "ecall_rom.h"
+
+
+/*============================================================================*/
+/* Encoder functions */
+/*----------------------------------------------------------------------------*/
+
+void FecEncode(Ord1*);
+
+void AttachCrc(const Ord1*, Ord1*);
+void Scramble(const Ord1*, Ord1*);
+void EncodeTwo(Ord1*);
+void EncodeOne(Ord1*, Int16);
+
+/*============================================================================*/
+/* Decoder functions */
+/*----------------------------------------------------------------------------*/
+
+Bool FecDecode(const IntLLR*, Int16, Ord1*);
+
+void UpdateBuffer(IntLLR*, const IntLLR*, Int16);
+void DecodeBuffer(const IntLLR*, const IntLLR*,
+ const IntLLR*, const IntLLR*, Ord1*);
+
+Bool DecodeCrc(const Ord1*);
+void Interleave(const IntLLR*, IntLLR*);
+void Deinterleave(IntLLR*);
+void Descramble(Ord1*);
+void Bcjr(const IntLLR*, IntLLR*);
+
+IntLLR GammaQ(Int16, Int16, const IntLLR*, const IntLLR*);
+IntLLR JacLog(Int32, Int32);
+
+void FecInit(void *addr);
+void FecDeinit(void);
+
+#endif
diff --git a/mcu/driver/audio/src32_inc/ecall_modem.h b/mcu/driver/audio/src32_inc/ecall_modem.h
new file mode 100644
index 0000000..e1d296a
--- /dev/null
+++ b/mcu/driver/audio/src32_inc/ecall_modem.h
@@ -0,0 +1,61 @@
+/*============================================================================*/
+/* eCall ANSI C fixed-point reference source code */
+/* */
+/* File: ecall_modem.h */
+/* Version: 8.6.0 (Rel8) / 9.4.0 (Rel9) */
+/* Date: 2011-02-08 */
+/* Description: modulator and demodulator functions (header file) */
+/*----------------------------------------------------------------------------*/
+
+#ifndef ECALL_MODEM_H_
+#define ECALL_MODEM_H_
+
+#include "ecall_defines.h"
+
+
+typedef enum {
+ ModUndef,
+ Mod3bit4smp,
+ Mod3bit8smp
+} ModType;
+
+typedef struct {
+ ModType type; /* identifies modulator type */
+
+ Int16 bpsym; /* bits per symbol */
+ Int16 spmf; /* samples per modulation frame */
+ Int16 mfpf; /* modulation frames per frame = PCM_LENGTH/spmf */
+ Int16 decpos1; /* position 1st decoding trial */
+ Int16 decpos2; /* position 2nd decoding trial */
+ Int16 wutperiod; /* wakeup tone period in samples */
+ Int16 nfmute1; /* number of muting frames 1st interval */
+ Int16 nfmute4; /* number of muting frames 4th interval */
+ Int16 nfmuteall; /* number of muting frames total */
+ Int16 nfdata; /* number of data frames = NRB_CODE_ARQ/(mfpf*bpsym) */
+
+ const Int16 *ulPulse;
+ const Int16 *ulPulseMatch;
+ const Int16 *mgTable;
+ const Int16 *wakeupSin;
+ const Int16 *wakeupCos;
+} ModState;
+
+
+/*============================================================================*/
+/* Modem functions */
+/*----------------------------------------------------------------------------*/
+
+void SetModState(ModState*, ModType);
+
+void IvsTransmitter(const ModState*, const Ord1*, Int16*, Int16, Int16);
+void PsapReceiver(const ModState*, const Int16*, IntLLR*);
+
+void SymbolMod(const ModState*, Int16, Int16*);
+void SymbolDemod(const ModState*, const Int16*, IntLLR*);
+
+void Byte2Bit(const Ord8*, Ord1*, Int16);
+void Bit2Byte(const Ord1*, Ord8*, Int16);
+
+Int32 MpyLacc(Int32, Int16);
+
+#endif
diff --git a/mcu/driver/audio/src32_inc/ecall_rom.h b/mcu/driver/audio/src32_inc/ecall_rom.h
new file mode 100644
index 0000000..d54ddc0
--- /dev/null
+++ b/mcu/driver/audio/src32_inc/ecall_rom.h
@@ -0,0 +1,62 @@
+/*============================================================================*/
+/* eCall ANSI C fixed-point reference source code */
+/* */
+/* File: ecall_rom.h */
+/* Version: 8.6.0 (Rel8) / 9.4.0 (Rel9) */
+/* Date: 2011-02-08 */
+/* Description: ROM data arrays (header file) */
+/*----------------------------------------------------------------------------*/
+
+#ifndef ECALL_ROM_H_
+#define ECALL_ROM_H_
+
+#include "ecall_defines.h"
+
+
+/*============================================================================*/
+/* Synchronization */
+/*----------------------------------------------------------------------------*/
+
+extern const Int16 wakeupSin500[16];
+extern const Int16 wakeupCos500[16];
+extern const Int16 wakeupSin800[10];
+extern const Int16 wakeupCos800[10];
+
+extern const Int16 syncPulseForm[5];
+extern const Int16 syncSequence[15];
+extern const Int16 syncIndexPreamble[SYNC_IDXLEN];
+extern const Int16 syncFrame[10*PCM_LENGTH];
+
+/*============================================================================*/
+/* Uplink/Downlink format */
+/*----------------------------------------------------------------------------*/
+
+extern const Int16 indexBits[24];
+
+extern const Int16 m4smp_ulPulse[16];
+extern const Int16 m8smp_ulPulse[32];
+extern const Int16 m4smp_ulPulseMatch[64];
+extern const Int16 m8smp_ulPulseMatch[128];
+
+extern const Int16 m4smp_mgTable[66];
+extern const Int16 m8smp_mgTable[116];
+
+extern const Int16 dlPcmData[4][NRF_DLDATA*PCM_LENGTH];
+extern const Int16 dlPcmDataMatch[4][NRF_DLDATA*PCM_LENGTH];
+
+/*============================================================================*/
+/* FEC encoder/decoder */
+/*----------------------------------------------------------------------------*/
+
+extern const Ord16 stateTrans[16];
+extern const Ord16 revStateTrans[16];
+extern const Ord1 outputParity[16];
+
+extern const Ord1 crcPolynomial[NRB_CRC+1];
+extern const Ord1 scramblingSeq[NRB_INFO_CRC];
+extern const Ord16 interleaverSeq[NRB_INFO_CRC];
+extern const Ord16 redVerIndex[8][NRB_CODE_ARQ];
+
+extern const IntLLR logExpTable[LOGEXP_RES];
+
+#endif
diff --git a/mcu/driver/audio/src32_inc/ecall_sync.h b/mcu/driver/audio/src32_inc/ecall_sync.h
new file mode 100644
index 0000000..0200543
--- /dev/null
+++ b/mcu/driver/audio/src32_inc/ecall_sync.h
@@ -0,0 +1,83 @@
+/*============================================================================*/
+/* eCall ANSI C fixed-point reference source code */
+/* */
+/* File: ecall_sync.h */
+/* Version: 12.0.0 (Rel12) */
+/* Date: 2014-09-11 */
+/* Description: synchronization functions (header file) */
+/*----------------------------------------------------------------------------*/
+
+#ifndef ECALL_SYNC_H_
+#define ECALL_SYNC_H_
+
+#include "ecall_defines.h"
+
+
+typedef struct {
+ Int32 amplitude[2]; /* amplitudes (average, maximum) */
+ Int32 shape[2*NRS_CP+1]; /* shape of peak causing a sync event */
+ Int32 sign; /* sync sign marker */
+
+ Bool flag; /* indicates sync success */
+ Int16 delay; /* synchronization delay */
+ Int16 npeaks; /* number of sync peaks detected */
+ Int16 npeaksChk; /* number of sync peaks detected by sync check */
+} SyncSub;
+
+typedef struct {
+ Int32 *mem; /* memory for sync */
+ Int32 *memWakeup; /* memory for wakeup tone detector */
+
+ SyncSub syncPos; /* regular sync (non-inverted) */
+ SyncSub syncNeg; /* inverted sync */
+
+ Int32 amplitude[3]; /* amplitudes (average, maximum, memory) */
+ Int32 shape[2*NRS_CP+1]; /* shape of peak causing a sync event */
+ Int32 sign; /* sync sign marker */
+
+ Bool flag; /* indicates sync success */
+ Bool invert; /* indicates sync inversion */
+ Bool resync; /* indicates resynchronization event */
+
+ Int16 delay; /* synchronization delay */
+ Int16 delayMem; /* synchronization delay (memory) */
+ Int16 npeaks; /* number of sync peaks detected */
+ Int16 npeaksMem; /* number of sync peaks detected (memory) */
+ Int16 events; /* number of subsequent equal sync events */
+
+ Tern check; /* indicates sync check result (ternary variable) */
+ Int16 checkCnt; /* counter for subsequent sync check failures */
+ Int16 index; /* frame reference for sync evaluation */
+} SyncState;
+
+
+/*============================================================================*/
+/* Sync functions */
+/*----------------------------------------------------------------------------*/
+
+void SyncReset(SyncState*, Int32*, Int32*);
+void SyncSubReset(SyncSub*);
+
+void Sync(SyncState*, const Int16*, const char*, Bool);
+void SyncCheck(SyncState*, const Int16*, const char*);
+void SyncTrack(SyncState*, Bool);
+
+void SyncFilter(SyncState*, const Int16*, Bool);
+
+void SyncSubPut(const SyncState*, SyncSub*);
+void SyncSubGet(SyncState*, const SyncSub*);
+void SyncSubCpy(const SyncSub*, SyncSub*);
+
+void SyncSubRun(SyncSub*, const char*,
+ const Int32*, const Int32*, const Int32*, const Int32*);
+void SyncSubChk(SyncSub*, const char*,
+ const Int32*, const Int32*, const Int32*, const Int32*, Int16);
+
+Int16 PeakUpdate(const Int32*, const Int32*, Int16);
+void PeakCheck(SyncSub*, const char*, const Bool*, const Int16*,
+ const Int32*, const Int32*, const Int32*,
+ Int16, Int16, Int16, Int16);
+
+void ToneDetect(SyncState*, const Int16*);
+
+#endif
diff --git a/mcu/driver/audio/src32_inc/modemx.h b/mcu/driver/audio/src32_inc/modemx.h
new file mode 100644
index 0000000..6696396
--- /dev/null
+++ b/mcu/driver/audio/src32_inc/modemx.h
@@ -0,0 +1,238 @@
+/*============================================================================*/
+/* eCall ANSI C fixed-point reference source code */
+/* */
+/* File: modemx.h */
+/* Version: 8.6.0 (Rel8) / 9.4.0 (Rel9) */
+/* Date: 2011-02-08 */
+/* Description: IVS and PSAP structures and functions (header file) */
+/*----------------------------------------------------------------------------*/
+
+#ifndef MODEMX_H_
+#define MODEMX_H_
+
+#include <stdio.h>
+#include <string.h>
+
+#include "ecall_defines.h"
+#include "ecall_control.h"
+#include "ecall_modem.h"
+#include "ecall_sync.h"
+#include "ecall_fec.h"
+#include "ecall_rom.h"
+
+#include "kal_public_api.h"
+#include "kal_trace.h"
+#include "l1sp_trc.h"
+
+/* callback functions: to be implemented by the user application */
+
+void Abort(const char *format, ...);
+void LogInfo(const char *format, ...);
+
+/*============================================================================*/
+/* IVS declarations */
+/*----------------------------------------------------------------------------*/
+
+typedef enum {
+ IVSEVENT_SENDINGSTART,
+ IVSEVENT_SENDINGMSD,
+ IVSEVENT_RESTARTMSD,
+ IVSEVENT_CONTROLSYNC,
+ IVSEVENT_CONTROLLOCK,
+ IVSEVENT_LLACKRECEIVED,
+ IVSEVENT_HLACKRECEIVED,
+ IVSEVENT_IDLEPOSTRESET,
+ IVSEVENT_IDLEPOSTSTART,
+ IVSEVENT_TIMEOUT,
+ IVSEVENT_NACKRECEIVED,
+ IVSEVENT_RECEIVESTART //self defined
+} IvsEvent;
+
+/* callback functions: to be implemented by the user application */
+
+void IvsCatchEvent(IvsEvent ie);
+void IvsReceiveHlack(const Ord8 data);
+
+/*----------------------------------------------------------------------------*/
+
+void IvsReset(const Ord8 *msd, int length);
+void IvsProcess(Int16 *pcm);
+void IvsSendStart(void);
+
+void IvsRxReset(void);
+void IvsRxProcess(const Int16 *pcm);
+
+void IvsTxReset(const Ord8 *msd, int length);
+void IvsTxProcess(Int16 *pcm);
+void IvsTxState(Int16 msg, Int16 metric, Bool syncLock);
+
+/*----------------------------------------------------------------------------*/
+
+typedef enum {
+ IvsIdle,
+ IvsTrigger,
+ IvsStart,
+ IvsSendMsd,
+ IvsAck,
+ IvsHlack
+} IvsState;
+
+typedef struct {
+ IvsState state; /* IVS transmitter state */
+ CtrlTxData ctrl; /* IVS control struct */
+ ModState mod; /* IVS modulator struct */
+
+ Int16 rv; /* redundancy version */
+ Int16 ulN; /* uplink number of frames */
+ Int16 ulIndex; /* uplink frame counter */
+ Int16 ulDelay; /* uplink transmit offset in samples */
+ Int16 dlMsgOld; /* previous control message */
+
+ Bool pendingStart; /* indicates pending START message */
+ Int16 overallNack; /* cumulative NACK count */
+
+ Int16 stateCnt[SET_LLMSG + SET_HLMSG+1];
+ Int16 stateIgn[SET_LLMSG + SET_HLMSG+1];
+
+ Ord1 memCode[NRB_CODE_BUFFER];
+ Int16 memDelay[2*PCM_LENGTH];
+
+ Int8 Ivs_eCall_LIB_Status;
+} IvsTxData;
+
+typedef struct {
+ IvsState state; /* IVS receiver state */
+ CtrlRxData ctrl; /* IVS control struct */
+ SyncState sync; /* IVS sync struct */
+
+ Int16 dlData; /* downlink message symbol */
+ Int16 dlIndex; /* donwlink frame counter */
+ Int16 dlMsgCnt; /* downlink message counter */
+
+ Int16 memCtrl[NRF_MEMCTRL*PCM_LENGTH];
+ Int32 memSync[NRS_MEMSYNC];
+} IvsRxData;
+
+typedef struct {
+ IvsRxData rx; /* IVS receiver struct */
+ IvsTxData tx; /* IVS transmitter struct */
+} IvsData;
+
+// KH: add for integration
+void IvsInit(void *addr);
+void IvsDeinit(void);
+int IvsGetMemSize(void);
+IvsState IvsTxGetState(void);
+IvsState IvsRxGetState(void);
+
+void PsapInit(void *addr);
+void PsapDeinit(void);
+int PsapGetMemSize(void);
+
+void Ivs_Set_Ecall_Lib_Status(Int8 status);
+Int8 Ivs_Get_Ecall_Lib_Status(void);
+
+
+
+
+typedef enum{
+ Ivs_ECALL_DISABLE = 0,
+ Ivs_ECALL_SDT_ONLY,
+ Ivs_ECALL_ENABLE,
+ Ivs_ECALL_MAX = 3
+} Ivs_ECALL_STATUS;
+
+/*============================================================================*/
+/* PSAP declarations */
+/*----------------------------------------------------------------------------*/
+
+typedef enum {
+ PSAPEVENT_SENDINGSTART,
+ PSAPEVENT_SENDINGRESTART,
+ PSAPEVENT_SENDINGLLACK,
+ PSAPEVENT_SENDINGHLACK,
+ PSAPEVENT_CONTROLSYNC,
+ PSAPEVENT_CONTROLLOCK,
+ PSAPEVENT_MSDSYNC,
+ PSAPEVENT_MSDRECEIVED,
+ PSAPEVENT_IDLEPOSTRESET,
+ PSAPEVENT_IDLEPOSTSTART,
+ PSAPEVENT_IDLEPOSTLLACK,
+ PSAPEVENT_IDLEPOSTHLACK,
+ PSAPEVENT_TIMEOUT
+} PsapEvent;
+
+/* callback functions: to be implemented by the user application */
+
+void PsapCatchEvent(PsapEvent pe);
+void PsapReceiveMsd(const Ord8 *msd, int length);
+
+/*----------------------------------------------------------------------------*/
+
+void PsapReset(void);
+void PsapProcess(Int16 *pcm);
+void PsapSendStart(void);
+void PsapSendHlack(const Ord8 data);
+
+void PsapRxReset(void);
+void PsapRxProcess(const Int16 *pcm);
+void PsapRxUplink(const Int16 *pcm);
+void PsapRxDownlink(void);
+void PsapRxSetMod(const SyncState *sync, ModState *mod);
+
+void PsapTxReset(void);
+void PsapTxProcess(Int16 *pcm);
+
+/*----------------------------------------------------------------------------*/
+
+typedef enum {
+ PsapIdle,
+ PsapTrigger,
+ PsapStart,
+ PsapNack,
+ PsapAck,
+ PsapHlack
+} PsapState;
+
+typedef struct {
+ PsapState state; /* PSAP receiver state */
+ CtrlRxData ctrl; /* PSAP control struct */
+ SyncState sync; /* PSAP sync struct */
+ ModState mod; /* PSAP modulator struct */
+
+ Int16 rv; /* redundancy version */
+ Int16 ulN; /* uplink number of frames without muting */
+ Int16 ulIndex; /* uplink frame counter */
+ Int16 mgIndex; /* uplink position in muting gap table */
+ Int16 ulTrials; /* uplink decoding trails */
+ Int16 ulSyncTail; /* sync observation counter after sync success */
+
+ Ord8 dlHlackData; /* downlink higher-layer message (4 bits) */
+ Int16 dlData; /* downlink message symbol */
+ Int16 dlIndex; /* donwlink frame counter */
+ Int16 dlMsgCnt; /* downlink message counter */
+
+ Ord8 *msd; /* MSD in byte representation */
+ Ord1 *msdBin; /* MSD in binary representation */
+ Int16 *memCtrl; /* buffer for control and data demodulation */
+ IntLLR *memCode; /* soft bit buffer for decoding */
+
+ char buffer[0
+ + sizeof(IntLLR)* NRB_CODE_ARQ
+ + sizeof(Int16) * NRF_MEMCTRL*PCM_LENGTH
+ + sizeof(Int32) * NRS_MEMSYNC
+ + sizeof(Int32) * 2*(NRF_SYNC+1)];
+} PsapRxData;
+
+typedef struct {
+ CtrlTxData ctrl; /* PSAP control struct */
+} PsapTxData;
+
+typedef struct {
+ PsapRxData rx; /* PSAP receiver struct */
+ PsapTxData tx; /* PSAP transmitter struct */
+} PsapData;
+
+PsapData* PsapGetData(void);
+
+#endif