/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef PHONE_H #define PHONE_H #include "text_strings.h" #include "sessionConstants.h" // define device reset types typedef enum { DEVICE_RESET = CC_DEVICE_RESET, DEVICE_RESTART = CC_DEVICE_RESTART, ICMP_UNREACHABLE_RESET = CC_DEVICE_ICMP_UNREACHABLE } DeviceResetType; /* * When not building IRX or attempting to emluate IRX * define the irx_lst_blk structure */ typedef int32_t irx_lst_blk; #if defined SIP_OS_WINDOWS /* * When attempting to emulate TNP, but use 79xx BTXML * define the following */ typedef int32_t irx_tsk_blk; typedef int32_t irx_tmr_buf; #include "tnpphone.h" #endif #define APP_MAX_SIZE 0x60000L #define MAX_CTL_FILE_SIZE 0x8000L #define disableInt IRXDISAB #define enableInt IRXENAB #define intrOff IRXHRDDIS #define intrOn IRXHRDENA #define MAX_LINES_7940 2 #define MAX_LINES_7960 6 #define DSP_LOAD_ID_MAX 28 #define OLD_DSP_LOAD_ID_MAX 8 /* * System timer tick (clock interrupt) specifications. */ #define TICKS_PER_SECOND 100 /* 10ms. per tick */ #define SECONDS_TO_TICKS(SECS) ((SECS) * TICKS_PER_SECOND) #define TICKS_TO_SECONDS(TICKS) ((TICKS)/ TICKS_PER_SECOND) #define MILLISECONDS_TO_TICKS(MILLISECS) (((MILLISECS)*(TICKS_PER_SECOND))/1000) enum { DSP_RST, GPIO_A = 4, GPIO_B, GPIO_C, GPIO_D, gpioMax }; typedef struct { uint8_t loadid[256]; uint8_t apploadid[8]; uint32_t chksum; // file checksum uint32_t applen; // file len uint32_t appcmp; // compressed/uncompressed uint32_t cmpchksum; // file checksum uint32_t cmplen; // file len } LoadHdr; typedef struct { uint8_t apploadid[DSP_LOAD_ID_MAX]; uint32_t chksum; // file checksum uint32_t applen; // file len uint32_t appcmp; // compressed/uncompressed uint32_t cmpchksum; // file checksum uint32_t cmplen; // file len } DSPLoadHdr; typedef struct { uint8_t apploadid[OLD_DSP_LOAD_ID_MAX]; uint32_t chksum; // file checksum uint32_t applen; // file len uint32_t appcmp; // compressed/uncompressed uint32_t cmpchksum; // file checksum uint32_t cmplen; // file len } LegacyDSPLoadHdr; typedef struct { uint16_t valid; uint16_t notused[3]; uint16_t hw_ver_hi; uint16_t hw_ver_low; uint8_t mac[6]; int8_t model[20]; uint16_t feature_bits; uint16_t ext; uint16_t license[20]; int8_t serial_number[20]; } MfgBlk; #define GPIO_IO_SEL_SHIFT 8 #define GPIOA_LBK_ON 1 #define GPIOA_MSG_LED 4 #define GPIOA_SPKR_LED 5 #define GPIOA_MUTE_LED 6 #define GPIOA_HDST_LED 7 #define GPIOA_IO_MASK ((1<<(GPIOA_LBK_ON+GPIO_IO_SEL_SHIFT))|\ (1<<(GPIOA_MSG_LED+GPIO_IO_SEL_SHIFT))|\ (1<<(GPIOA_SPKR_LED+GPIO_IO_SEL_SHIFT))|\ (1<<(GPIOA_MUTE_LED+GPIO_IO_SEL_SHIFT))|\ (1<<(GPIOA_HDST_LED+GPIO_IO_SEL_SHIFT))) #define GPIOD_HANDSET 0 #define GPIOD_SPKER 1 #define GPIOD_PHY_MDC 3 #define GPIOD_PHY_MDIO 4 #define GPIOD_IO_RST_HI 5 #define GPIOD_IO_RST_LO 6 #define GPIOD_IO_MASK 0xff00 typedef volatile struct { uint16_t reg; uint16_t unused; } s_rbbreg; enum { rbbTimeout, rbbAPIWs, rbbWbufEn, rbbAccessFactor0, rbbAccessFactor1, rbbAccessFactor2, rbbAccessFactor3, rbbIntrSw, rbbMax }; extern s_rbbreg RBBReg[rbbMax]; #define DCFG_PROGRAMMED 0x12300000L #define DCFG_FIXED_VLAN 0x00000001L #define DCFG_UI_SETTING 0x00000002L #define IF_MAX 1 #define MAX_PORT 2 enum { PORT_UP, PORT_DOWN }; #define KA_TICKS 0 //Default to 10 seconds typedef struct { uint32_t Active, IP, SSRC, PktIn, OctIn, Delay, Cycle, Tick, Time, Mcast; uint16_t Seq, First; int32_t Jitter, Trans; } _s_talkers; #define TX_CONNECT 1 #define RX_CONNECT 2 //defined values for IfActive #define IF_2MPS 1L #define IF_10MPS 2L //Flag definitions for timer #define KEYSCAN 0x00000001L #define HOOKSCAN 0x00000002L #define TIMETICK 0x00000004L #define ON 1 #define OFF 0 #define TALK 2 #define SIZEOF_UISET 16 typedef struct { uint8_t diag; uint32_t status; uint16_t vlan; uint16_t vvlan; uint16_t port; uint16_t uiset[SIZEOF_UISET]; uint16_t vvlanAdmin; uint16_t vvlanIP; //vvlan that our IP address was aquired on uint8_t unused[2001]; //struct must remain 2046 in size } DeviceCfgBlk; // pulled from net_config.h #define MAX_NAME (64) #define BACKUP_SERVERS (7) #define MAX_DHCP_TFTP_FILE_NAME (128) #define DISKFULL 3 // file too large #define NOERR 8 // no error typedef struct { int8_t tftp_file[40]; uint32_t status; uint32_t control; uint32_t appStatus; uint32_t appControl; uint32_t tftp_backup; } DHCPBlkExt; typedef struct { uint32_t status; // This structure for sake of backward compatibility needs to uint32_t my_ip_addr; // remain as is until you and I are deceased, stop paying taxes uint32_t subnet_mask; // and all the 79xx phones are long gone. A strategy could be uint32_t defaultgw; // developed to solve this and world hunger but heed this warning. uint32_t dns_addr; uint32_t tftp_addr; uint8_t my_mac_addr[6]; int8_t domain_name[MAX_NAME]; int8_t my_name[MAX_NAME]; uint32_t dhcp_server; uint32_t spare; uint32_t dns_backup[BACKUP_SERVERS]; uint32_t gw_backup[BACKUP_SERVERS]; int8_t tftp_name[MAX_NAME]; union { int8_t tftp_file[MAX_DHCP_TFTP_FILE_NAME]; DHCPBlkExt ext; } extFields; } DHCPBlk; /* * These structures are how the memory blocks are laid out * Note that these are reflected in ASICAPP.CMD with: * * BOOT_MEM : org = 0x00000020 len = 0x00001FE0 * MFG_ROM : org = 0x00004000 len = 0x00002000 * CFG_ROM : org = 0x00006000 len = 0x00002000 * VER_MEM : org = 0x00008000 len = 0x00000004 * A1_ROM : org = 0x00010000 len = 0x00060000 * A2_ROM : org = 0x00070000 len = 0x00060000 * DSP_ROM : org = 0x000D0000 len = 0x00020000 * DIR_ROM : org = 0x000F0000 len = 0x00010000 */ typedef struct { DHCPBlk dhcp_blk; /* 0x00006000 - 0x0000619f len=0x01a0 */ DeviceCfgBlk device_cfg_blk; /* 0x000061a0 - 0x000069a3 len=0x0804 */ // removing this area as we don't use it. Re-allocating this space // for use in the prot_cfg_area so we can store more config info. // int8_t skinny_cfg[0x065c]; /* 0x000069a4 - 0x00006fff len=0x065c */ int8_t prot_signature[0x0004]; /* 0x000069a4 - 0x000069a7 len=0x0004 */ // int8_t prot_cfg_area[0x0ff8]; /* 0x00007004 - 0x00007ffb len=0x0ff8 */ int8_t prot_cfg_area[0x1654]; /* 0x000069a8 - 0x00007ffb len=0x1654 */ uint32_t prot_cfg_offset; /* 0x00007ffc - 0x00007fff len=0x0004 */ } cfg_rom_t; typedef struct { int8_t prot_signature[0x0004]; /* 0x000F0000 - 0x000F0003 len=0x0004 */ int8_t personal_dir[0xDFFC]; /* 0x000F0004 - 0x000FDFFF len=0xDFFC */ int8_t dial_signature[0x0004]; /* 0x000FE000 - 0x000FE003 len=0x0004 */ int8_t dial_plan[0x1FF0]; /* 0x000FE004 - 0x000FFFF3 len=0x1FF0 */ uint32_t unused_offset2; /* 0x000FFFF4 - 0x000FFFF7 len=0x0004 */ uint32_t dial_plan_offset; /* 0x000FFFF8 - 0x000FFFFB len=0x0004 */ uint32_t prot_dir_offset; /* 0x000FFFFC - 0x000FFFFF len=0x0004 */ } dir_rom_t; #define DIR_CONFIG_SIGNATURE "DIR0" #define CONFIG_MAX (0x2000 - sizeof(DHCPBlk) - sizeof(DeviceCfgBlk)) // These variables are declared in the ASIC.CMD file extern volatile uint32_t WDTimer; extern volatile uint16_t GPIO1[gpioMax]; extern DHCPBlk DHCPInfo; // DHCP info stored in RAM extern LoadHdr Load; // load header of current app #ifdef _WIN32 extern uint8_t LoadArea[0xFFFF]; extern uint8_t BootHeader[9]; // Magic number 9 = MAX_OLD_LOAD_ID_STRING #else extern uint8_t LoadArea; // landing zone for app download extern int8_t BootHeader; #endif extern LoadHdr LoadHeader; // landing zone for app download extern DHCPBlk DHCPInfoRom; // DHCP info stored in ROM extern DHCPBlk DHCPInfoTemp; // DHCP info stored in ROM extern MfgBlk MfgInfo; // Manufacturing information extern LoadHdr App1Hdr; // Application 1 in ROM extern LoadHdr App2Hdr; // Application 2 in ROM extern uint8_t App1Rom; // Application 1 in ROM extern uint8_t App2Rom; // Application 2 in ROM extern DSPLoadHdr DspHeader; extern dir_rom_t DirStorage; // Actual personal directory stored in ROM extern uint32_t DcmpVer; // Version of Decompression Algorithm in boot extern uint16_t DCVerReg; //extern SysHdr *pCFGTftpReq; typedef struct { int16_t displayContrast; int16_t ringType; int16_t handsetVolume; int16_t headsetVolume; int16_t speakerVolume; int16_t ringVolume; int16_t reserved[10]; } t_SettingsDesc; extern int16_t SavePhoneSettings; // Phone states enum { STATE_INIT_CFG, STATE_CDP_CFG, STATE_IP_CFG, STATE_FILE_CFG, STATE_CFG_UPDATE, STATE_CONNECTING, STATE_REGISTER, STATE_REGISTER_REJ, STATE_LOADID_REQ, STATE_BOOT_DSP, STATE_LOADING, STATE_CONNECTED, STATE_RESETTING, STATE_IP_RELEASE, STATE_DUP_IP, STATE_DONE_LOADING, STATE_UNPROVISIONED, /* KAZOO only */ maxPHNState }; enum { CDP_CACHE_P0_CLEAR, CDP_CACHE_P1_CLEAR, CDP_CACHE_CLEAN }; //enum { CDP_UNTRUSTED, CDP_TRUSTED, CDP_TRUST_NA = 255 }; #define DC_NONE 0 #define DC_C3PO 1 #define DC_ETH 3 #define DC_2MPS 7 #define NO_TAGGING 4095 #define NO_VID 4096 /* * Number of buffers in a pool. */ #define SYSBUF_CNT 50 #define DSPBUF_CNT 30 #define SIPTMRBUF_CNT 32 #define SIPBUF_CNT MAX(MAX_TEL_LINES, 32) #define GSMBUF_CNT 32 #define GUITMRBUF_CNT 5 #define TCPBUF_CNT 6 // for use by telnet etc #define PKTBUF_TX_CNT 10 #define ENET_RX_BUF_CNT 10 #define PKTBUF_CNT (ENET_RX_BUF_CNT + PKTBUF_TX_CNT) //20 /* * Size of an indivdual buffer. CPR_MAX_MSG_SIZE * declared in cpr_irx_ipc.h needs to be set to * the largest value defined here. */ #define SYSBUF_SIZ 512 #define GUITMRBUF_SIZ 32 #define PKTBUF_SIZ 3072 #define TCPBUF_SIZ 2560 #define DSPBUF_SIZ 96 #define GUIBUF_SIZ 512 // Buffer Return Identifiers /* * Since we now have this horrible mismash of CPR and IRX calls * in the legacy phone, CPR has to have an unique buffer ID to * place in the sys header of the buffers so when the application * is done with them CPR will know not to call Main0RetBuffer. This * value is not used in application code just #defined here to * prevent it being used in the future. */ #define SYS_BUFFER 1 //System Buffer #define XMT_BUFFER 2 //Ether Transmit Packet Ram Buffer #define RCV_BUFFER 3 //Ether Receive Packet Ram Buffer #define TCP_BUFFER 4 #define DSP_BUFFER 5 #define GUITMR_BUFFER 6 #define CPR_BUFFER 256 extern uint16_t ResetPend; extern uint32_t gtick; extern uint16_t ResetTimer; // used to delay the bugtrap, 10mse ticks extern uint8_t LinkState[MAX_PORT]; extern uint16_t LinkStatus[MAX_PORT]; extern uint8_t CurrentLinkState[MAX_PORT]; extern uint16_t CurrentMode[MAX_PORT]; extern int16_t CallInProg; extern int32_t BugTrapped; extern MfgBlk *pMfgInfo; extern DeviceCfgBlk *pDeviceInfo, *pDeviceInfoRom; extern LoadHdr *pMyLoad, *pPriLoad, *pSecLoad; extern int8_t *pMyPlatform; extern int8_t *pMyPhoneModel; extern DSPLoadHdr *pMyDSPLoad; extern int32_t PhoneStim; extern int32_t PhoneHookStim; extern uint32_t IfActive; extern volatile uint16_t VVLan, DCDetect, C3PODetected; extern uint32_t MaxPort; extern uint32_t BCastMax; extern boolean Is7940; extern boolean Is79x0G; void PHNChangeState(uint16_t state); uint16_t PHNGetState(void); int32_t PHNStateToStringIndex(uint16_t PhoneState); void PHNSpeakerMode(uint16_t mode); void PHNMuteMode(uint16_t mode); void PHNHeadsetMode(uint16_t mode); void PHNRequestFile(int8_t *pName, uint8_t *pDest, int32_t maxSize); void PHNMessageLedMode(uint16_t mode); void PHNRingerLedMode(uint16_t mode); void phone_reset(DeviceResetType resetType); void platform_reset_req(DeviceResetType resetType); void platform_sync_cfg_vers(char *configVersionStamp, char *dialplanVersionStamp, char *); int32_t phone_get_keypress_rand_seed(void); int16_t phone_call_in_progress(void); void tweak_watchdog(void); extern uint32_t set_wd_timeout(uint16_t new_time); extern void restore_wd_timeout(uint32_t prev_time); #define DEFAULT_WATCHDOG_TIME 8 #define PROGRAM_HW_WATCHDOG_IN_MILLISECONDS(x); WDTimer = 0x00550000; \ WDTimer = 0x01AA0000 + ((x)); //Program the watchdog #define HIT_THE_WATCHDOG() tweak_watchdog() void BugInfoValidate(void); uint32_t BugInfoAbortPtr(void); int8_t *task2string(int32_t task_id); #define EXCEPTION_BUGCODE 0xdd //BugTrap Code:0xddxx for exceptions #define INITSTKSZ 500 #define SVCSTKSZ 40 // interrupt off (svc) stack size /* SKITTLES moved syshdr for IPC from network.h. this will be the new home for * SysHdr. it is used by all phone tasks and can not be plat specific. */ #define MISC_LN 8 typedef struct { void *Next; uint32_t Cmd; uint16_t RetID; uint16_t Port; uint16_t Len; uint8_t *Data; union { void *UsrPtr; uint32_t UsrInfo; } Usr; uint8_t Misc[MISC_LN]; // void *TempPtr; } phn_syshdr_t; /* SKITTLES The line below is only temporary till we * change refernces to SysHdr. */ typedef phn_syshdr_t SysHdr; /* settings.c needs it */ extern DHCPBlk *pDHCPInfoTemp; extern SysHdr *pCFGTftpReq; typedef struct { char newcfgVerStamp[64]; char newdialplanVerStamp[64]; } PhoneSyncCfgVer; #endif /* PHONE_H */