SYSTEM AND METHOD FOR DETERMINING END-TO-END CHARACTERISTICS OF A DATA COMMUNICATION CHANNEL

Abstract: A method for determining characteristics of a data communication channel between first and second data communication devices. The method includes the step of sending a relatively low power digital probe signal over said channel from said first to said second data communication devices. The method further includes sending a second digital probe signal corresponding to an analog signal having a relatively high-frequency signal with a time-varying dc component from said first to said second data communication devices. The second data communication device receives a signal, said received signal corresponding to said probe signals sent by said first device. In addition, the second data communication device determines whether said received signal varies from a predetermined standard.

Description: TITLE: System and Method for Determining End-to-End Characteristics of a Data Communication Channel Copyright Authorization A portion of the disclosure of this patent document contains material that is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the United States Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever. Background of the Invention The present invention relates to a method and apparatus for detecting characteristics of a communication channel. In particular, the present invention may be utilized to determine if a communication channel is digital end-to-end. For example, the present method and apparatus may determine whether an Integrated Services Digital Network ("ISDN") to ISDN connection is all digital. Alternatively, the present method and apparatus may determine whether an ISDN to Tl/El, or Tl/El to Tl/El, connection is all digital. Impairments in the digital connection may also be detected by the apparatus and method of the present invention. For ISDN to ISDN connections, some known systems send digital data over a channel that is billed as analog. Such systems do not verify that the channel is actually digital before sending the data. Rather, such systems may simply follow the practice of "just trying" to blindly send digital data over what may be an analog link and "seeing" if it works. If the channel is believed to be digital, but is actually analog, the connection will fail. For ISDN to Tl/El, or Tl El to Tl/El, connections, no known methods or apparatii provide high speed data transfer. If an ISDN to Tl El, or Tl/El to Tl/El, call is made with prior art systems, analog communication is typically provided (speeds up to 33.6 full-duplex). In accordance with standard industry practice, communication occurs as if only over an analog link. Accordingly, it would be desirable to have an improved method and apparatus for determining characteristics of a communication channel. SUMMARY OF THE INVENTION In accordance with the present invention, if the communication channel in an ISDN- to-ISDN connection is determined to be end-to-end digital, the data can be sent and billed as an analog call. In addition, if the communication channel is determined to be analog, then a second call attempt can be made requesting (and paying for) a digital call. Moreover, if an ISDN to Tl/El, or Tl/El to Tl El, connection is determined to be all digital, digital data transfer rates of up to 62.666 kbps/B channel full-duplex can be achieved utilizing the method and apparatus of the present invention. It is an object of the present device and method to provide one or more of the following features or advantages: Enable digital communication at up to 62.666 kbps full-duplex from ISDN to Tl/El, or Tl/El to Tl/El; Enable more robust and faster communication at up to 64kbps full-duplex from ISDN to ISDN (BRI— Basic Rate Interface or PRI~Primary Rate Interface) connections while being billed for an analog call; Determine whether any point-to-point GSTN (General Switched Telephone Network) communication channel is digital end-to-end; Determine whether any communication channel is digital end-to-end; Determine whether a G.711 CODEC (Coder-Decoder) is in the network path; Determine if robbed bit signaling is present and determines the position and number of the robbed bits on an all-digital network; Determine whether the network requires a minimum "one's density;" Determine whether one or more digital attenuator pads are present in the connection; Use a scrambler to prevent the network from compressing the data; Use zero byte suppression to communicate digitally over a link that converts 00 to 02; Determine if one or more robbed bits are present in a communication channel; and/or Determine where one or more robbed bits are located and use 100% of the remaining non-robbed bits for data. Description of the Drawings Figure 1 is a block diagram showing a connection between two devices having digital connectivity to the telephone network. Figure 2 is a block diagram showing a sequence of initial negotiations between the calling device and the answering device shown in Figure 1. Figure 3 is a block diagram showing more fully the content of block FF in Figure 2. Figure 4 is an expanded diagram of the contents of block SQA in Figure 2. Figures 5 A and 5B are an expanded diagram of the contents of block SPl in Figure 2 and a tabular description of the contents, respectively. Figure 6 is an expanded diagram of block E in Figure 2. Figure 7 is a block diagram of a transmitter in the calling device and the answering device shown in Figure 1. Detailed Description of the Preferred Embodiment Figure 1 is a block diagram showing a connection between two devices having digital connectivity to the telephone network. A calling device 10 has a digital connection to the General Switched Telephone Network ("GSTN") 12. An answering device 14 also has a digital connection to the GSTN 12. At the beginning of a call between the calling device 10 and the answering device 14, certain characteristics of the GSTN are unknown. Figure 2 shows the negotiation between the calling and answering devices 10 and 14 using the present system. The calling and answering devices are preferably modems. The following is a description of what each of the modems 10, 14 is doing during negotiation over data communication channel 16, as shown in Figure 1. Figure 1 shows a calling device 10 communicating over a data communication line 16 with an answering device 14. The line 16 may or may not include an analog segment. The devices 10,14 utilize the present system to determine the characteristics of the line 16, including whether the line 16 is entirely digital or it includes an analog segment and whether the line includes any digital impairments. As used herein, digital impairments refers to limitations on the content of the data sent over the line, such as robbed bit signaling (RBS) or a restricted channel. With an RBS impairment, the an entity, such as a telephone company, operating the line utilizes the least significant bit of selected (e.g., every sixth) byte for overhead purposes. With a restricted channel (rather than a nonrestricted channel, the data sent over the line must have a minimum one's density: there is a limitation on the number of zeros that may validly be placed in a consecutive series. (In some telecommunication systems, such ones density is used to ensure synchronization.) In addition to digital impairments, regulatory bodies may impose a limitation on the maximum power that may be carried by the line 16. Such power limitations may restrict the energy (in terms of power) that a modem may transmit receive during various time intervals of predetermined length, such as 250 milliseconds or 3 seconds. Calling modem procedures As shown in Figure 2, the calling modem will transmit all marks (bytes of FF hex) until it receives the SQA sequence from the answering modem. The composition of the SQA sequence is shown in Figure 4. The SQA sequence will allow the modem to determine the following: Is the channel partially analog, or is it all digital? If the channel is digital, what kinds of "digital impairments" does it contain? How many and what are the locations of the RBS (robbed bit signaling) bits? Is the channel restricted or unrestricted (i.e. does it have a minimum one's density requirement? Does the channel have digital pads in it? If so, what kinds of pads are they? Referring again to Figure 2, upon receiving the SQA sequence from the answering modem, the calling modem will transmit the SQA sequence until it receives the SPl sequence from the answering modem. The SQA sequence, or probing signal, is shown more fully in Figure 4. The sequence may thus be divided into three subparts: (1) 7+6n bytes of 7E, where n is preferably 290; (2) 7 bytes of 00, and (3) a sequence of digital codewords, which corresponds to an analog signal with a 4,000 Hz frequency, l A the maximum allowable amplitude, and an increasing dc offset voltage. The digital codewords are preferably eight bit PCM codewords or PCM codes. The first subpart of SQA, 7E in Figure 4, is a low power transmission. This allows the probing signal to meet the maximum power constraints imposed on the line by decreasing the average power transmitted during the SQA sequence. Also, the first subpart effectively "pads" the length of the probing signal, such that the length of the entire probing signal (all three subparts) is a multiple of 6 bytes. In this way, RBS may be more easily detected, since, in many environments, RBS occurs only in every sixth byte at DSO. Moreover, since the SQA sequence is known to the answering device and has a predetermined length, the location and number of robbed bits are determined from the SQA sequence. The second subpart of SQA, 00 in Figure 4, is sent by the calling modem to test whether the line is a restricted channel or a clear channel. The answering modem effectively knows that if the received signal includes ones in the portion corresponding to the second subpart of the probing signal, the telephone company has probably inserted ones in order to maintain a minimum ones density in the transmitted data. Thus, in such a case, the channel is restricted. There may be several different one's density requirements imposed by differing transmission technologies in the underlying DS1, DS2, DS3, etc. For example, a very restrictive requirement is that no single PCM codeword can contain all zeros. This effectively limits the number of consecutive zeros to seven in the same PCM codeword, or fourteen zeros across two consecutive PCM codewords. This type of density restriction may be satisfied, along with all other density restrictions, by inserting a 1 after each string of at most seven consecutive zeros. It should be noted that, since the insertion is done before the data is inverted for transmission, this algorithm may be implemented by inserting a zero after each string of at most seven ones. It should further be noted that the "zero bit insertion deletion" (ZBID) scheme used with HDLC/SDLC specifies insertion of a zero after six consecutive ones in the data stream to avoid false flag patterns (0, 6 ones, 0). The flag pattern was chosen to be distinguishable from an abort pattern (0, 7 or more ones) and the idle pattern (continuous ones). Accordingly, if there is either robbed bit signalling present or a one's density requirement, data transfer occurs at rates below 64 Kbps, such as 56 Kbps. Conversely, if the are no robbed bits and no one's density requirement, i.e. a 64 Kbps clear channel, data transfer may occur at 64 Kbps. In accordance with the preferred embodiment, data transfer rates in excess of 56 Kbps may be achieved, even in the face of robbed bit signalling and a one's density requirement. The increasing dc offset voltage in the third subpart of SQA, 00, FF, ... , 80 in Figure 4, ensures that, for example, where the line utilizes a 256 level quantizer, all 256 levels are utilized in transmitting the probing signal. The quantizer may be for example a μ-law quantizer, as is used in North America and Japan, or an A-law quantizer , as is used in Europe. In the digital domain, each of the quantizer levels may be represented by a different eight bit codeword. If the signal received by the answering device lacks the full range of the transmitted probing signal, the answering modem may effectively "know" of the digital coding system used in the line. For example, the presence of a digital attenuator pad in the connection will cause the codewords in the third subpart of SQA to be adjusted in a fixed manner. The answering device, which knows what the third subpart should be, analyzes the received signal and may thereby identify the presence and characteristics of the pad. The relatively high frequency and amplitude of the probe signal in the third subpart are difficult for an analog converter to translate. Indeed, in many telephone company lines, a filter substantially attenuates signals even approaching 4,000 Hz. If the received signal does not correspond to the transmitted probe signal, the answering modem may know that an analog segment lies in the line. The total length of the probing signal used in the preferred embodiment is 256 bytes + 7 bytes + 7 bytes + (290 * 6), or 2010, bytes long. The answering device monitors, during the entire predetermined probing signal, to detect whether the received signal has the least significant bit different than the least significant bit of the probe signal. If so, the answering modem effectively knows that the telephone company line utilizes RBS. In one embodiment, the modems then simply know to communicate at 56 kbps rather than, for example, 64 kbps. In other embodiments, the modems simply do not send data in the least significant bit ("LSB") of any byte because of RBS. The data transmission speed of such modems is accordingly limited to a top speed of 56 kbps. Figure 5 is an expanded diagram of the contents of block SPl in Figure 2. The SPl sequence is an indication of capabilities of the modem and a request to turn on or off various features and speeds in the modem. Upon receiving the SPl sequence from the answering modem, the calling modem will transmit the SPl sequence until it receives the E sequence. Figure 6 is an expanded diagram of block E in Figure 2. Upon receiving the E sequence from the answering modem, the calling modem will transmit the E sequence (fixed length of 5 bytes) followed by data. Upon receiving the data from the answering modem, the calling modem will unclamp its receive data and will proceed to receive data from the answering modem. Answering modem procedures: The answering modem will transmit the SQA sequence until it receives the SQA sequence form the calling modem. The SQA sequence will allow the modem to determine the following: Is the channel partially analog, or is it all digital? If the channel is digital, what kinds of "digital impairments" does it contain? How many and what are the locations of the RBS (robbed bit signaling) bits? Is the channel restricted or unrestricted (i.e. does it have a minimum one's density requirement? Does the channel have digital pads in it? If so, what kinds of pads are they? Upon receiving the SQA sequence from the calling modem, the answering modem will transmit the SPl sequence until it receives the SPl sequence from the calling modem. The SPl sequence is an indication of capabilities and of the modem and a request to turn on or off various features and speeds in the modem. Upon receiving the SPl sequence from the calling modem, the answering modem will transmit the E sequence (fixed length of 5 bytes) followed by data. Upon receiving the data from the calling modem, the calling modem will unclamp its receive data and will proceed to receive data from the calling modem. One aspect of the present system relates to the detection stage: by sending the SQA pattern, the present system has the ability to: 1) detect if the channel is digital end-to-end 2) detect the exact number and location of RBS 3) detect if digital pads are present (A pad is an adjustment of a digital signal, in one of a predetermined number of different ways, to emulate or mimic the attenuation that would have occurred if the signal had been sent on an analog line rather than a digital line. By noting the systematic padding of the probe signal, the modems may adjust their transmission characteristics to compensate for such padding). 4) detect if the channel is restricted/unrestricted (minimum l's density issues) 5) detect any digital impairments that we are currently unaware of (since the system sends all 256 codes). 6) detect all of these things without violating transmit power requirements of -15dBm transmit level measured over 3 seconds and OdBm measured over 250ms. Another aspect of the invention relates to the data phase: how can the modems may transmit the fastest possible speed given the impairments that are on the line/data communication channel. The present system has the ability to: 1) transmit over any end-to-end digital channel (throughout this specification, except whether context may require otherwise, the term transmit may also be used to mean receive or simply operate.") 2) transmit at speeds of 56K or faster (up to 64K) including intermediate speeds of 62,666bps, 61,333bps, 60,000bps, 58,666bps, 57,333bps. Many other systems can not transmit at these intermediate speeds. This is accomplished by sending 7 data bits byte (+ 1 non-data bit) in any slot where a RBS bit is present and sending 8 data bits/byte in any slot where a RBS bit is not present. 3) transmit over digital channels that are restricted (i.e. they have a minimum one's density requirement). We do this with zero byte suppression: any time we get 7 0's in a row, insert a 1. 4) transmit over digital channels that have digital pads. We can do this by using a mapping scheme such that the receiver knows that transmitted codes get mapped into a different set of codes after the pad, so the receiver needs to "undo" this mapping. And, any codes that are doubly mapped (i.e. 2 or more transmitted codes get mapped into the same code after the pad) are not sent by the transmitter. 5) Prevent compression by the network: Sometimes the network will monitor the first 6 seconds of the call to see how compressible the data is, and if it is compressible, it will compress it. We prevent this by transmitting scrambled data which will look like wideband white noise. 6) Minimize overhead bits used by the zero byte suppresser. By scrambling the data into white noise, the number of bytes that require action by the zero byte suppresser are a controlled small number of bytes that is independent of the data that the user or protocol is sending. The present method can determine the exact number and exact location of the RBS which allows faster data transmission than known methods. This is so because if there is just 1 bit robbed by RBS, the preferred method and apparatus described herein may transmit at up to 62,666bps. In fact, with any number or robbed bits between 1 and 5, the preferred method and apparatus provide data transfer rates in excess of 56 Kbps. In a typical network connection, 0-3 robbed bits may be encountered. Finding 4-6 robbed bits appears to be fairly rare. With respect to the ones density requirement, the present system can detect if we need to avoid sending too many O's in a row. We can compensate for this in several methods. First, we could just transmit at 56K (and set the LSB=1) which will fix the problem. Or, we could run the "zero byte suppresser" which is an algorithm that inserts a 1 into the data stream if it sees 7 O's in a row and we could run at a faster speed. Third, we could run a scrambler on the data which will make the number of times that we send too many zeros (and would make the zero byte suppresser kick in) very controlled (since the output is basically white noise. The presently described system will detect the "digital impairment" of digital attenuator pads and could compensate for it, running at a reduced speed, but still running faster than an analog modem. Because the present system sends all 256 PCM codes, if there are any digital impairments that we are currently unaware of, it is very likely that we could detect and handle them with our current SQA sequence. A typical digital network may see a transmitted data stream as being compressible. If, however, the transmitted data stream is compressed by the network, the data stream will likely be corrupted and the connection may fail. Use of a scrambler as described herein, on the other hand, makes the transmitted data stream appear as wide-band white noise (i.e. uncompressible). Therefore, the network will not compress the transmitted data stream. In accordance with the presently preferred embodiment, where an ISDN to ISDN (basic rate or primary rate) connection is determined to be all digital, digital data transfer at rates up to 64kbps/B channel full-duplex can be achieved while the customer is billed for an analog call, which is typically billed at a lower rate than a customer would be billed for a digital call. If an ISDN to Tl/El, or Tl/El to Tl/El, connection is determined to be all digital, digital data transfer rates of up to 62.666 kbps B channel full-duplex can be achieved. The method and apparatus of the present invention may be used in association with 56 Kbps, or higher, transmission speed modems, ISDN modems, and rack modem products. In addition, with the inclusion of a scrambler and a zero-byte suppresser, higher data rates can be achieved. With prior art, 56kbps maximum can be achieved over the channel. With current art, up to 64kbps can be achieved. Finally, the present device provides added robustness to the communication. The scrambler and zero byte suppresser enable the communication to be successful in situations when the prior art would fail to connect. The operation of a transmitter and a receiver will now be described with reference to Figure 7. Note that each block shown in Figure 7, except for Byte Conversion, may be turned on or off individually to meet the requirements of the particular network channel: RBS synchronization: Each modem's transmitter is synchronized with the remote modem's receiver which is synchronized with the robbed bits in that particular network path (if any are present). The transmitter takes advantage of the fact that it knows if a robbed bit is present in each of the six possible time slots. Each time slot is 8 bits (one byte) long, and the six time slots are periodic i.e., if there is a robed bit in the first time slot, there will be a robbed bit in every sixth byte thereafter (in the same time slot) and these bits together we call "one robbed bit". So, there is a possibility of having from 0-6 robbed bits. In any time slot where there is a robbed bit, the transmitter will only transmit 7 bits of user data. The 8 th bit will be forced to binary one and will be placed in the position of the robbed bit (this happens in the Byte Conversion routine). With this method, the 7 bits of user data will not be corrupted by the RBS, only the 8 th bit (not user data) will be corrupted. In any time slot where there is not a robbed bit, the transmitter will transmit the full 8 bits of user data. These bits will not be corrupted by RBS because we know that it is not present in these time slots. Because we are synchronized with the robbed bit signaling (RBS) in the network and we know the exact number and location of the robbed bits, we can take full advantage of all available information bandwidth in the digital channel. Scrambler: The scrambler takes the output of the previous section (which will be either 7 or 8 bits) and scrambles it using standard scrambling techniques to create wide-band white noise energy. In certain networks, the network will monitor the call for a duration of time to determine if the data is compressible. If it is, the network will compress the data. This would entirely corrupt the communication between two digital modems. To prevent the network from turning on the compressors, we can scramble the data. In addition, the scrambler will create a statistically controlled output which will minimize the output of the Zero Byte Suppresser. Zero Byte Suppression: The zero byte suppresser takes the output from the previous section (which will be either 7 or 8 bits) and runs it through the following algorithm: If there are ever 7 bits of "binary zero" in a row, insert a "binary one" into the data stream. This algorithm ensures that minimum one's density requirements are met in the network. Note that this routine outputs the same number of bits that it received as an input and it buffers any additional data caused by the bit insertion. The buffered data is combined with the input of the next byte. If there is ever enough data buffered to transmit entirely out of the buffer, that action will be performed. Byte Conversion: The byte conversion routine will output 8 bits of data. If its input was 8 bits, it passes the input data to its output without changing it. If its input was 7 bits, it will insert a "binary one" into the byte at the location where the robbed bit will be, and it will output the 8 bits. Pad Mapper: The pad mapper takes the output from the previous section (which will be 8 bits) and it maps the data in such a way as to avoid sending any PCM codes that (due to the digital pad) would result in an ambiguous code at the receiver. Note that if the Zero Byte Suppression and the Pad Mapper are turned on at the same time, they will need to share information to ensure that their respective functions are achieved. The final output is transmitted onto a digital link on the General Switched Telephone Network. The receiver of the remote modem will have knowledge of which of the above blocks are turned on in the transmitter and knowledge of any additional specific information about the transmitter's configuration that it needs in order to reverse the operations of the transmitter and decode the data. The description above is sufficient to enable one of ordinary skill in the art to implement the present invention. Nonetheless, to provide additional details regarding the present system, an assembler code listing for a method of implementing certain aspects of the presently described device is provided below. The code has been written for use with a Texas Instruments' TMS320C51 digital signal processor. A User's Guide for the TMS320C5x series of processors is readily available to those of ordinary skill in the art and may be useful to the novice in understanding the commands set forth below. * * * ISDNLOOP.ASM * * Contains Main digital loop and other * * routines that are required only during * * a V.120 or V.110 call. * * * * Author: Bert A. Davenport * * © 1997, U.S. Robotics Access Corp. * thresh_7ea .equ 007 ; # of 7E's in a row to auto-detect speed tx_7e_15db .equ 7+290*6 ; # of 7e's to transmit to make -15db power ; note: this MUST be a 7 + a multiple of 6 ** * orig_isdn & answ_isdn * Similar to originate now & answer_now commands from the supervisor * excect that these are used to originate or answer digital calls, that * is, not PCM data. This is used to establish a 56-64Kps connection over * a single channel. Data transported over such a link may be bit * transparent, an HDLC-framed protocol (i.e V.120, PPP), V.110 encoding, * bonding, etc. A single background loop exists for all data modes as * those previously described. The background loop is essentially * identical to the sync_idle_tl loop used in "analog" mode except no * interpolation or PCM conversion is necessary. The txvect and rxvect * vectors point to the appropriate encoder/decoder for the active * digital "mode". The default digital "mode" of operation is 64Kbps * clear channel data, although this may be altered as follows; * Inputs: (exp * * bbOO 0 = 64 Kbps, 1 = 56Kbps * bl 0 = V.120/PPP, 1 = V.l 10 * b2 0 = use specified rate, 1 = autodetet rate * b3 Do NOT use this bit in exparm * It is set in isdnflg as l=monitor_line mode * * bb44 0 = no stos, 1 = server to server mode (PCM code) * b5 0 = set up call, 1 = tear down call (hangup/reset) * b6 0 = single data call (use MB1), 1 = 2 data calls * b7 0 = Use IOM Ch 1, 1 = Use IOM Ch 2 * b8 Reserved; (0 = answer, 1 = originate forced in code) * * bb99 Reserved; (0=no scr, 1 = scrambler for stos) * blO Reserved; (0= no zbs, 1 = zero byte supression stos) * bll Reserved * bl2 Reserved * bl3 Reserved * * bbll44 Reserved bl5 Reserved Note: for V.l 10, b8-bl5 indicates rate Outputs: None ** answ isdn ;dp = 0 lace #0 lace # 1 OOh ; or on originate bit (non-v 110 only) comm_isdn sacb accb = answ/originate status lace exparm ; Is this call on Ch 2 & we can have 2 calls? and #o2data+och2 ; sub #o2data+och2 ; ldp #isdn_dp ; use Ch 1/MBl data page sst #0,tempx ; save dp, arp in tempx(dpθ) (isdn_dp) ldp #6 ; use Ch 1/MB1 data page sst #0,tempy ; save dp, arp in tempx(dpθ) (dp = 6) ldp #7 sst #0,tempz ; save dp, arp in tempy(dpθ) (dp = 7) opl #odigisdn,sysflg2 ; Set digital ISDN bit (V120, ppp,...) splk #dtx_clear_orig_mbl, txvect ; orig digital TX sample vector splk #drx_clear_orig_mbl, rxvect ; orig digital RX sample vector bend chk_iflg,neq ; b if 1 data call or if on Ch 1 ldp #isdn_dp2 ; yes, use MB2 data page splk #dtx_clear_orig_mb2,txvect ; orig digital TX sample vector splk #drx_clear_orig_mb2,rxvect ; orig digital RX sample vector sst #0,tempx ; save dp, arp in tempx(dpθ) (isdn_dp2) sst #0,tempy ; save dp, arp in tempy(dpθ) (isdn_dp2) sst #0,tempz ; save dp, arp in tempy(dpθ) (isdn_dp2) chk_iflg ; dp = 7 (Ch 1) or isdn_dp2 (Ch 2) ldp #0 bit exparm,f2data ; 2 data calls possible (mlppp)? ldp #7 c 2,tc ; Multilink PPP mode? opl #omlppp,sysflg2 ; yes, or on bit in sysflg2 lamm tempx sacl dp_i ; save isdn_dp or isdn_dp2 depending on chan lamm tempy sacl dp_6 ; save dp 6 or isdn_dp2 depending on chan lamm tempz sacl dp_7 ; save dp 7 or isdn_dp2 depending on chan 1st #0,dp_7 ; set dp = 7 or isdn_dp2 ar(arp) = arl ; dp = 7 or isdn_dp2 lamm exparm orb ; turn on orig/answ bit (removed for v.110) sacl isdnflg ; automode flags (digital) sacl isdnflg_orig ; automode flags (won't be modified) bit isdnflg,fhangup ; Is the hangup bit set? bend hangup_call,tc ; b if yes => hangup call .if PCM code bit isdnflg_orig,fistos ; PCM code server-to-server mode? bend no_stos,ntc ; b if not PCM code stos mode splk #drx_sqa,rxvect ; SQA receiver splk #rx_7e_init,rxvect64 ; find 1st 0 in 7e patt at 64kbps splk #0,il l_cnt ; save no data until after 7e's splk #41h,rx_rate ; init rate mask to 56 & 64K only lace #24000 ; 3 second timeout samm dlycnt opl #ostosscr,isdnflg ; force scrambler bit on until supv uses it opl #ostosscr,isdnflg_orig ; scrambler bit on until supv uses it lace #stos_failed ; fall back to v.34 if stos fails samm rvec bit isdnflg_orig,forig ; originating? splk #dtx_stos,txvect ; SQA transmitter (answering side) xc 2,tc splk #tx_mark,txvect ; xmit ff (originating side) splk #tx_7e_15db,tx_cnt_sqad ; send 7 7e's + 6n 7e's bd start_digital_call splk #sqa_7e,tx_sqavect ;init state vector for next state no_stos .endif bit isdnflg,fautod ; Is the autodetect speed bit set? bend init_autod,tc ; b if yes bit isdnflg,fv 110 ; Is the v 110 interworking bit set? cc InitV 110Machine,tc ; yes, init V.110 b start_digital_call switch_tx ; switch xmit rate ; dp = 7 or isdn_dp2 ar(arp) = arl xpl #o56k,isdnflg ; switch rate bit isdnflg,f56k ; Is the 56K interworking bit set? lace tx_auto_thrsh ; ace = xmit threshold for next switch xc 1,NTC ; If 64kbps, double # of bytes to send add tx auto thrsh ; before next switch bendd init_speed,unc ; initialize speed related parameters sacl tx_auto_thrsh ; save updated threshold sacl tx_auto_cnt ; initialize counter ** * dtx_stos sends 7 7E's followed by the pattern 0,255,1,254,2,253... * 126, 129, 127, 128 ; then repeats with 7 7E's and the pattern again * This is a speed detection routine for digital server to server mode. * This is a possible state of txvect/2 * * inputs dp = 7 * ar(arp) = arl * arl = *(8 bit sample to transmit to the link) * * outputs dp = 7 * ar(arp) = arl *************************************************************************** ** .if PCM code dtx_stos ; dp = 7 1st #0,dp_7 ; set dp = 7 or isdn_dp2 ar(arp) = arl lace tx_sqavect cala ; vector to appropriate routine ; ace = tx data on rtn * call bit_reverse8 ; Prepare "digital" sample for transmission retd ldp #7 ; set dp = 7 for return to main loop sacl * ; txdata_main/aux = txdata ** * Send 7 7E's + 6n 7e's (n = # needed to make power <-15dBm over 250ms) *************************************************************************** ** sqa_7e lace tx_cnt_sqad ; ace = counter for 7e's sub #1 ; transmit 7e's sacl tx_cnt_sqad ; decrement and save cntr bend no_init_sq0,neq ; b to not init sqO sequence splk #7,tx_cnt_sqad ; init cntr to send 7 00's in a row splk #sqa_00,tx_sqavect ;init state vector for next state no_init_sq0 lacl #7eh ; transmit 7e at 64kbps ret ** * Send 7 OO's ** sqa__00 lace tx_cnt_sqad ; ace = counter for OO's sub #1 ; transmit OO's sacl tx_cnt_sqad ; decrement and save cntr bend no_init_sqa,neq ; b to not init sqa sequence splk #0,tx_cnt_sqau ; init up cntr to 0 (cnts up to 127) splk #255,tx_cnt_sqad ; init down cntr to 255 (cnts down to 128) splk #sqau_patt,tx_sqavect ;init state vector for next state no_init_sqa lacl #00h ; transmit 00 at 64kbps ret ** * Send 00,01,02...127 ** sqau_patt ; transmit sqa cnt up pattern at 64Kbps lace tx_cnt_sqau ; ace = up cntr (cnts up from 0-127) sacb ; accb = cntr add #1 ; incr cntr sacl tx_cnt_sqau ; save incr'd up cntr lacb ; ace = pre-decremented cntr retd splk #sqad_patt,tx_sqavect ;init state vector for next state ** * Send 255,254,253...128 ** sqad_patt ; transmit sqa cnt down pattern at 64Kbps lace tx_cnt_sqad ; ace = down cntr (cnts down from 255-128) sacb ; accb = cntr sub #1 ; deer cntr sacl tx_cnt_sqad ; save decr'd cntr sub #127 ; done with pattern? (return to 7e) bend continue_sqa,neq ; b to continue pattern lacb ; ace = pre-decremented cntr splk #tx_7e_15db,tx_cnt_sqad ; send 7 7e's + 6n 7e's retd splk #sqa_7e,tx_sqavect ;init state vector for next state continue sqa lacb ; ace = pre-decremented cntr retd splk #sqau_patt,tx_sqavect ;init state vector for next state *************************************************************************** ** * Send SPl sequence * Sequence consists of ff,81,81,dl,el,fl,gl,hl,il,j l,kl,ll * 81's are to sync up to (distinguishing from SQA pattern * dl-hl : MSB is 0, lsb is 1, 6 bits of information * dl : version information: 000000 * el : reserved for future use: 000000 * fl : rbs position: 1 = rbs on this bit, 0 = no rbs on this bit * gl: restricted/unrestricted: OOvwxy * v = 1 1 bit insrt 0, no ins (if 1 side selects, both must use) * w = 1 scrambler 0, no scram (if 1 side selects, both must use) * x = 1 restricted, 0, unrestr * y = 1, 64Kbps speed selected, 0 = not 64Kbps speed selected * hi : speed bits: mnopqr * m: 1 = 62.6Kbps selected, 0 = not selected * n: 1 = 61.3Kbps selected, 0 = not selected * o: 1 = 60.0Kbps selected, 0 = not selected * p: 1 = 58.6Kbps selected, 0 = not selected * q: 1 = 57.3Kbps selected, 0 = not selected * r: 1 = 56.0Kbps selected, 0 = not selected * il: CRC 4 bits: OOOCRCal (4 bits) * j 1 : CRC 4 bits: OOOCRCbl (4 bits) * kl : CRC 4 bits: OOOCRCdl (4 bits) * 11: CRC 4 bits: OOOCRCcl (4 bits) * *************************************************************************** ** tx_spla splk #Offffh,tx_crc ; init SDLC CRC (for next time we go in-frame) lace #0ffh ; TX first byte of spl (sync byte) retd splk #tx_splb,tx_sqavect ;init state vector for next state tx splb lace #81h ; TX first byte of spl (sync byte) retd splk #tx_splc,tx_sqavect ;init state vector for next state tx_splc lace #81 h ; TX 2nd byte of sp 1 (sync byte) retd splk #tx_spld,tx_sqavect ;init state vector for next state tx_spld lace #01h ; TX 3rd byte of spl (version byte) sacl tempx ; save for yl2 screen bldd tempx,#txinfoO_buf bd do_tx_crc splk #tx_sple,tx_sqavect ;init state vector for next state tx_sple lace #01h ; TX 4th byte of spl (reserved byte) sacl tempx ; save for y 12 screen bldd tempx,#txinfoO_buf+l bd do_tx_crc splk #tx_sp 1 f,tx_sqavect ;init state vector for next state tx_splf lace rbs_map,l ; TX 5th byte of spl (RBS info byte) and #7eh ; force to 6 bits or #1 ; force on lsb sacl tempx ; save for y 12 screen bldd tempx,#txinfoO_buf+2 bd do_tx_crc splk #tx_splg,tx_sqavect ;init state vector for next state tx_splg lace rbs_map ; TX 6th byte of spl (restricted info byte) splk #0,tempx ; assume no 64K xc 2,eq ; can we do 64K (no rbs and unrestricted)? splk #2,tempx ; turn on 64K bit ; turn on scrambler any time we do 64K ; if it's enabled bit isdnflg,fstosscr ; is local copy of scrambler on already? bend no_scrg,ntc ; b to not use scrambler if not enabled bend no_scrg,neq ; b to not use scrambler if not 64K opl #8,tempx ; turn on scrambler bit in tx_spl no scrg and #40h ; mask off all but restricted info bit and rx rate ; mask with rate mask bsar 4 ; position bit in 04h position or tempx ; or on 64K bit or #1 ; force on lsb sacl tempx ; save for y 12 screen bldd tempx,#txinfo0_buf+3 bd do_tx_crc splk #tx_splh,tx_sqavect ;init state vector for next state tx splh splk #4,tx_cnt_sqad ; init cntr to send 4 nibbles of CRC lace rx_rate,l ; TX 7th byte of spl (speed byte) and #7eh ; force rate mask to 6 bits or #1 ; force on lsb sacl tempx ; save for yl2 screen bldd tempx,#txinfo0_buf+4 bd do_tx_crc splk #tx_sp 1 i,tx_sqavect ;init state vector for next state tx_spli ; xmit 4 nibbles of CRC lace tx_crc,l cmpl ; invert before sending and #01 eh ; mask to 4 bits or #1 sacb lacl tx crc shift crc right 1 byte bsar 4 or #0f000h ; crc = fxxx (xx = old high byte of crc) sacl tx_crc lace tx cnt sqad ace = counter for 7e's sub #1 transmit 7e's sacl tx_cnt_sqad decrement and save cntr bend not_over,neq ; b to not init sqO sequence splk #tx_sp 1 a,tx_sqavect ;init state vector for next state not_over ret do_tx_crc sacb calc_crc_byte tx_crc ; calculate crc and store in tx erc lacb ret *************************************************************************** ** * Send E (ff,81,81,81,81) ** tx_e lacl #0ffh ; transmit ff at 64kbps splk #4,tx_cnt_sqad ; init cntr to send 4 8 l's in a row retd splk #tx_e81 ,tx_sqavect ;init state vector for next state tx e81 lace tx_cnt_sqad ; ace = counter for 8 l's sub #1 ; transmit 8 l's sacl tx_cnt_sqad ; decrement and save cntr bend no_init_scr,neq ; b to not init scrambler done sending E sequence, transmit scr data bit isdnflg,forig originating? bend tx_e_orig,tc b if originating (answering side) tx scr data, rx E bit rx_rate,fs64 is 64kbps possible? cc connect_64,tc b if yes bit rx_rate,fs64 is 64kbps possible? bend no_chk56t,tc yes, don't check other speeds bit rx_rate,fs56 is 56kbps possible? cc connect_56,tc b if yes no chk56t lace rxvect sacl rxvect_bak ; back up receiver to restore later splk #drx_sqa,rxvect ; SQA receiver splk #rx_e,rxvect64 ; receive E sequence (answering side) lacl #81h ; transmit 81 at 64kbps ret tx_e_orig ; originator: already receiving scr data ; now tx scr data lace txvect bak sacl txvect ; restore txvect to tx scr data no init scr lacl #81h ; transmit 81 at 64kbps ret ** * drx_sqa receives 7 7E's followed by the pattern 0,255,1,254,2,253... * 126,129,127,128; then repeats with 7 7E's and the pattern again * This is a speed detection routine for PCM code server to server mode. * This is a possible state of rxvect/2 inputs dp = 7 ar(arp) = arl arl = *(8 bit rceive sample from the link) outputs dp = ? ar(arp) = arl ** drx_sqa ; dp = 7, ar(arp) = arl ; don't disturb AR1, it has rev data in it * lace * ; ace = 8 bit recceive data * call bit_reverse8 ; Modify rev samp for main (digital) channel * sacl * ; save reversed digital data call handshake ; time out and fall back to V.34? lace #b0 ; start processing at bO and go through b7 samm treg2 ; save into dynamic bit pointer test register lace #b8 ; 64K ends before b8 (bO through b7) sacl tempw ; tempw = bit to stop at lacl rxvect64 ; process rev samp looking for 64kbps pattern cala ret *************************************************************************** ** * Increment rbs position modulo 6 (0-5) ** incr rbs lace rx_cnt_rbs ; increment rbs position (0-5) add #1 ; rbs repeats every 6 bytes sacl rx_cnt_rbs sub #6 ; force to be modulo 6 (if 6, set to 0) 83 χBnb9jι ' b9'sιιq ~ 9UiBS puoq OS juo = duiBS XJ si . nBbs-uo ~ χj qns dUIBS XJ = OOB ' „, OBχ X 11 oj jBp SUIΛBS uo s avp ' x x lArøO XXBO qoBS gt> t«)0Z0# o∞l uoμisod sqj ju9UU9Jouι . sqj ~~ Jθuι JJBO ("T'1'0 β lBjs Jjuo dn) ixrajBd SZVLZV ' SZ'l'SSZO JO J ^l 00 ! * ** sε χ i 3ΛBS q J0# PU XXI JOJ OJU13ΛBS . £»'* OOBχ 0 = Juo i Suiqjou op . ϊl 0J3J I# qns jgunoo χχι ju9ui9J09p . uo χχι O Bl S3 πppp ** (Bbs XJ Λq pgsn) USSJOS x χi JOJ BjBp 9ΛBS OJ pssu ji -χo9q3 # ** 03 l# ∞«l (dL) I s . I • S Φ 1 3S 01 ** dBuι _ sqj ut uo iq uinj 'puno iq §gΗ „. ** r I--3tO/86Sn/X3I 9986£/86 OΛV lace * ; ace = rx samp (eliminate lsb) or #1 bldd #rx_cnt_sqau, tempx ; rxvect = rxvect 1 (initialize rxvect) opl #1, tempx sub tempx ; is rx samp = cntr? (eliminate lsb) bend same_7bits,eq ; b if equal lace rx_cnt_sqau bend bad_pattern,neq ; bad pattern if expected samp o 0 lace * ; ace = actual rx samp sub #2 bend bad_pattern,neq ; bad pattern if expected samp o 2 bd same_8bits ; pattern OK opl #40h,rbs_map ; or msb of lower byte on => 0 to 2 conversion bad_pattern retd splk #rx_7e_init,rxvect64 ; reset pattern detection from scratch same_7bits call set_rbs ; rbs detected, turn bit on in rbs nap same_8bits lace rx_cnt_sqau ; increment counter add #1 sacl rx_cnt_sqau retd splk #rx_sqad,rxvect64 ; next state of receiver (cnt down) ** * Look for 0,255,1,254...127,128 pattern (down cntr state 255,254,...) ** rx sqad call incr_rbs ; increment rbs position lace #0200h sacb call chk_il l ; check on saving data to il l lace * ; ace = rx samp sub rx_cnt_sqad ; is rx samp = cntr? bend same_8bitsd,eq ; b if equal lace * ; ace = rx samp (eliminate lsb) or #1 bldd #rx_cnt_sqad,tempx ; rxvect = rxvect 1 (initialize rxvect) opl #1, tempx sub tempx ; is rx samp = cntr? (eliminate lsb) bend same_7bitsd,eq ; b if equal ; bad pattern retd splk #rx_7e_init,rxvect64 ; reset pattern detection from scratch same_7bitsd call set_rbs ; rbs detected, turn bit on in rbs map same_8bitsd splk #rx_sqau,rxvect64 ; next state of receiver (cnt up) lace rx_cnt_sqad ; increment counter sub #1 sacl rx_cnt_sqad sub #127 retc neq ; SQA pattern fully detected bit isdnflg,forig ; originating? splk #tx_spla,tx_sqavect ; ; SPl transmitter (answering side) splk #rx_spl,rxvect64 ; receive speed 1 sequence (ans/orig) retc ntc splk #tx_7e_15db,tx_cnt_sqad ; send 7 7e's + 6n 7e's splk #sqa_7e,tx_sqavect ;init state vector for next state retd splk #dtx_stos,txvect ; SQA transmitter (originating side) ** * Receive SPl sequence * Sequence consists of ff,81,81,dl,el,fl,gl,hl * ff,81's are to sync up to (distinguishing from SQA pattern * dl-hl : MSB is 0, lsb is 1, 6 bits of information * dl: version information: 000000 * el: reserved for future use: 000000 * fl : rbs position: 1 = rbs on this bit, 0 = no rbs on this bit * gl : restricted/unrestricted: OOvwxy * v = 1 1 bit insrt 0, no ins (if 1 side selects, both must use) * w = 1 scrambler 0, no scram (if 1 side selects, both must use) * x = 1 restricted, 0, unrestr y = 1, 64Kbps speed selected, 0 = not 64Kbps speed selected hi: speed bits: mnopqr m: 1 = 62.6Kbps selected, 0 = not selected n: 1 = 61.3Kbps selected, 0 = not selected o: 1 = 60.0Kbps selected, 0 = not selected p: 1 = 58.6Kbps selected, 0 = not selected q: 1 = 57.3Kbps selected, 0 = not selected r: 1 = 56.0Kbps selected, 0 = not selected * ** *************************************************************************** ** * Receive 81,81 ** rx_spl call rx_81_i rx_81 lace * ; ace = rx samp or #1 ; or on 1 bit (in case lsb destroyed by RBS) sub #81h ; is rx samp = 81? bend yes_81,eq ; b if equal ; reset pattern detector rx_81_i splk #0ffffh,rx_crc ; initialize crc (digital ISDN only) splk #rx_81,rxvect64 ; look for 81 patt retd splk #2,cnt_7e_64 ; init # 8 l's in a row to validate speed yes_81 lace cnt_7e_64 ; ace = cnt_7e_64 = 81 counter sub #1 ; decrement 81 counter sacl cnt_7e_64 ; save cnt_7e_64 retc gt ; return if counter > 0 retd splk #rx_ver,rxvect64 ; look for version byte *************************************************************************** ** * Receive version byte *************************************************************************** ** rx ver 3 OJO XJ 3jBmoμ.o . OJO XJ op HBO OS ε+jnq _ oojutχj#'xdιusj ppiq US9J0S 3χλ JOJ 9ΛBS . xdtU9J pBS sjΛq sqj = dures XJ = OOB . „, OO I JSJ~XJ ** ζ p sjΛq oj pgjousgj g Λ og"a * ** gjλq ojui BjBp psjoussj sΛ osj . ^JOSAXJ'JSJ XJ# 5χχds pSJ sε OJO XJ sj χnoiBθ . ojo ~~ χj _ op JJBO 2+nq " oouιχ#'xdugj ppiq usgjos £χΛ JOJ OΛBS . xduisj p S sjλq sqj = dures XJ = OOB . * OO I oε ** S3 χ + jnq _ oojuιχj#'xduιsj ppiq uggjos 3χλ JOJ SABS . xduisj JOBS sjλq sqj = dures XJ = OOB . „, O BI SI ** gjXq pgΛjgssj SΛ og-jj „, ** 01 sjλq pgΛjgsgj Λ ogj .1 7 9JOSΛXJ'XX _ XJ# 5r[ds OJO XJ gjBinonp ' ojo-χj-op JJBO nq ~ oouιχj#'xduιgj ppiq uggjos 3χ JOJ gΛ S ' xduigj pss gjXq sq = dures XJ = OOB . * OOBI ZPOmSiVlDd 9986£/86 OΛV εε sgχqqιu 3^3 snoiΛgjd qiΛV guiquioo . 9χ'Jθio ~~χ j OOBI qooAα ** *************************************************************************** sjAq qo S ui OJO JO sjiq f = xxxx (χxxxxooθ) ssjCq OJO p sΛ os"jj „, ςp ** sjλq ojui BBp psjouss 9Λ o9J . josΛx'qoJ XJ# -χιds pjgj OJO psΛposj jπii . JOJO XJ'O# jt ui 3Η3/Λ- ssλq p sΛposj . t9 ~ s/_ _ J O't7# 5χχds sε spis gjouigj UIOJJ SJBJ psΛposj piμiq . XJ-SJBJ ~ XJ pss '. XJ ~ SJBJ ~ XJ pUB qoqjjo# JO SJBJ XJ USIJB oj jqSu jμjs I -resq sjiq pssds jnq \γz JJO ^SBUI ΨL# P«B oε OJO J sjBχnoχBθ OJO XJ op ip +jnq _ oojuιχ#'xduιsj ppiq USSJOS jxλ JOJ ΛBS . xduisj pBS sjλq pssds = dures XJ = OOB . „. OO I pds XJ S3 ** sjλq ojui pssds sΛ os"a * ** 03 gjλq ojui BjBp psjoujssj SΛ ogj . XJ# Jnds gpis gjouigj UIOJJ SJBJ p9Λp09J ! XJ-3JBJ _ XJ pBS si jJ0# J o jiq pssds ^9 I n q UP Jo ^SBUI . qot?# P 1 ^ dures XJ =. OOB . '* OOBI jtq psjoujssj jnq ιχB JJO >ISBUI . MO 1 ^ JJO SI SJOUISJ JI JJO jiq jgjqurejos SOJOJ ' §χjτjpsι'jossojsB# idB OOB ^sjλq psjoujssj ui uo jiq jgiqurejos si •I3SJJ'* ji sjss IUK ) /86Sn/I3<I 9986£/860ΛV zap ror ; force carry bit to 0 lace * and #leh ; mask to 4 CRC bits ror ; crc = 4 lsb's ror ; crc = 3 lsb's and carry bit orb rpt #3 ; rotate right 4 times ror ssaacchh rrxx__ccrrccrr ; save updated received CRC lace cnt 7e 64 ; ace = cnt_7e_64 = counter sub #1 ; decrement counter sacl cnt 7e 64 ; save cnt_7e_64 rreettcc g gt ; return if counter > 0 ; received entire crc lacl rx crcr and #0ffh call do_rx_crc ; calculate rx crc (low byte) lacl rx crcr bsar 8 and #0ffn call do rx crc ; calculate rx crc (high byte) cpl #0f0b8h,rx_crc ; is CRC OK? (should be f0b8) splk #rx_sp 1 ,rxvect64 ; addr for BAD CRC (start SP 1 over) retc ntc ; BAD CRC, start over lacl rbs_map or rbs_map_rx sacl rbs_map ; or local and remote rbs_map's together lacl rx_rate and rx_rate_rx ; and remote and local rate masks together sacl rx_rate bit isdnflg,forig ; originating? splk #tx_e,tx_sqavect ; E transmitter (answering side) splk #rx_e,rxvect64 ; receive E sequence (ans/orig) retc ntc retd splk #tx_spla,tx_sqavect ; ; SPl transmitter (originating side) do_rx_crc sacb calc_crc_byte rx_crc ; calculate crc and store in rx_crc lacb ret *************************************************************************** ** * Receive E (81,81,81,81) ** rx e call rx_81_ie rx_81e lace * ; ace = rx samp or #1 ; or on 1 bit (in case lsb destroyed by RBS) sub #81h ; is rx samp = 81? bend yes_81e,eq ; b if equal ; reset pattern detector rx_81_ie splk #rx_81 e,rxvect64 ; look for 81 patt retd splk #4,cnt_7e_64 ; init # 8 l's in a row to validate speed yes_81e lace cnt_7e_64 ; ace = cnt_7e_64 = 81 counter sub #1 ; decrement 81 counter sacl cnt_7e_64 ; save cnt_7e_64 retc gt ; return if counter > 0 ; E sequence received ; connect and prepare for scrambled data bit isdnflg,forig ; originating? bend rx_e_orig,tc ; b if originating lace rxvect_bak ; (answering side) tx already sending scr data sacl rxvect ; restore receiver to receive scr data ret rx_e_orig ; originator: transmit E, receive scr data bit rx_rate,fs64 ; is 64kbps possible? cc connect_64,tc ; b if yes bit rx_rate,fs64 ; is 64kbps possible? bend no_chk56,tc ; yes, don't check other speeds bit rx_rate,fs56 ; is 56kbps possible? cc connect_56,tc ; b if yes no_chk56 lace txvect sacl txvect_bak ; save txvect to restore later splk #dtx_stos,txvect ; SQA transmitter (originating side) retd ; transmit E, receive scrambled data splk #tx_e,tx_sqavect ; E transmitter (originating side) ** * Look for 7 7e's (or 7f s) *************************************************************************** ** rx_7e_init call rx_7e_i rx_7e call incr_rbs ; increment rbs position rx_7e_00 lace #0400h sacb call chk_il l ; check on saving data to il l lace * ; ace = rx samp sub #7eh ; is rx samp = 7e? bend yes_7e,eq ; b if equal lace * ; ace = rx samp (eliminate lsb) sub #7fh ; is rx samp = 7f? bend yes_7f,eq ; b if equal ; reset pattern detector rx_7e_i splk #rx_7e,rxvect64 ; look for 7e/7f patt splk #thresh_7ea,cnt_7e_64 ; init # 7e's in a row to validate speed splk #0,rbs_map ; init rbs_map to 0 (no RBS) splk #4,rx_cnt_rbs ; init rbs position cntr to 5 ret yes_7f call set_rbs ; rbs detected, turn bit on in rbs_map yes_7e lace cnt_7e_64 ; ace = cnt_7e_64 = cnt_7e (7e counter) sub #1 ; decrement 7e counter sacl cnt_7e_64 ; save cnt_7e_64 retc gt ; return if counter > 0 splk #rx_00,rxvect64 ; look for 00 patt splk #7,cnt_7e_64 ; find 7 O's in a row ret ** * Look for 7 OO's (or Ol's if RBS) (or 02's if restricted data type) ** rx 00 call incr_rbs ; increment rbs p lace * ; ace = rx samp bend yes_00,eq ; b if equal sub #lh ; is rx samp = 1? bend yes_01,eq ; b if equal opl #40h,rbs_map ; or msb of lower byte on => 0 to 2 conversion sub #lh ; is rx samp = 2? bend yes_00,eq ; b if equal sub #lh ; is rx samp = 3? bend yes_01,eq ; b if equal splk #l,cnt_7e_64 ; init # 7e's in a row to validate speed * bd rx_7e_00 ; see if still receiving 7e's apl #0ffbfh,rbs_map ; and msb of lower byte off => no 0 to 2 conv lace * ; ace = rx samp sub #7eh ; is rx samp = 7e? bend yes_7e,eq ; b if equal lace * ; ace = rx samp (eliminate lsb) sub #7fh ; is rx samp = 7f? bend yes_7f,eq ; b if equal call reset_ill ; received 7 7e's and then received something ; that is o 7e/7f and o 00/01. Save it. lace *,ar2 , save info for 111 and #0fih or #0300h call save_ill splk #18,il l_cnt save 18 bytes of data after <>7e/00 byte bb rrxx_ 77ee_ ii . reset to look for 7e/7f yes_01 call set_rbs ; rbs detected, turn bit on in rbs_map yes_00 lace cnt_7e_64 ; ace = cnt_7e_64 = cnt_7e (00 counter) sub #7 ; first 00 detected? cc reset_ill,eq ; b if yes lace *,ar2 ; save info for 111 and #0ffh or #0100h call save_il l lace cnt 7e 64 ; ace = cnt_7e_64 = cnt_7e (00 counter) sub #1 ; decrement 00 counter sacl cnt 7e 64 ; save cnt_7e_64 retc gt ; return if counter > 0 splk #12,il l_cnt ; save 12 bytes of data after OO's splk #rx_sqau,rxvect64 ; next state of receiver (cnt up) splk #0,rx_cnt_sqau ; init up cntr to 0 (cnts up to 127) splk #255,rx_cnt_sqad ; init down cntr to 255 (cnts down to 128) ret save il l lar ar2,#stos_il l lar ar2,* sacl *+,arl ; save receive data into vfc_probe_results sar ar2,tempx bldd tempx,#stos_il l ret reset_i 11 ; initialize stos i 11 ptr mar *,ar2 lar ar2,#stos_il l splk #vfc_probe_results,* lar ar2,#vfc_probe_results rptz #24 sacl *+ mar *,arl lacl #stos_stats ; report rdata_on to SV b queue status ** * 3 second timeout for stos mode elapsed => fall back to v.34 ** stos_failed call set amfe lar arl,#arcflg apl #aarc,* ; turn off PCM code ldp #6 splk #queue_unpacked,rxd_vect ; use unpacked data mode as default ldp #7 apl #adigisdn,sysflg2 ; Turn off digital ISDN bit (V120, ppp,...) b init retrain v34 .endif connect isdn ; send isdn connect messages to supv ; and unclamp data ; input: sysflg has accurate speed bit ; dp = 7 or isdn_dp2 mar *,arl ssaarr aarrll.,tteemmppyy ;; ssaavvee arl for tx_e (PCM code) lar arl,#sysflg2 bit *,f_usr_mode bend not_stos,ntc lace #connect_arc|8000h report connect call queue status ; bit isdnflg,f56k ; 1 = 56K, 0 = 64K lace #1010h ; 64K connect xc 2,tc ; Cormect stos 56K? lace #0e0eh ; 56K connect call queue_status ; report speed to supervisor b connect com not_stos lace # #ccoonnnneecctt__ddiiggital|8000h ; report digital connection to supv call queue status lace isdnflg ; ace = isdnflag (contains speed bit and #o56k ; mask off all bits except speed bit xor #o56k ; toggle bit call queue status ; report speed to supervisor connect com lacl #rx_data_on ; report rdata_on to SV call queue status lacl #tx_data_on ; report tdata_on to SV call queue_status lacl #carrier_present call queue_status ; report carrier present to supervisor lar arl,#sysflg ; Point AR1 to the flag opl #otxd|orxd,* ; and unclamp both Rx and Tx data... lar arl,tempy ; restore arl for tx e (PCM code) bldd txvect,#txvect ; txvect(dp7) = txvect(dp7 or isdn_dp2) bldd rxvect,#rxvect ; rxvect(dp7) = rxvect(dp7 or isdn_dp2) ldp #7 ; force dp = 7 on return to main loop ret ; dp = 7, ar(arp) = arl init_speed ; initialize data parms for particular speed ; dp = 7 (Ch 1/2) or isdn_dp2 (Ch 2) lacl #5 ; prepare for var init sacl txmark ; init SDLC marks counter sach txbindx ; clear data buffer sach txdbuf ; clear data buffer .if PCM code sach scraml ; init scrambler to 0 sach scramh ; init scrambler to 0 .endif splk #get_data,txd_vect ; initialize txd_vect splk #0ffh,txmask ; mask 8 bits bit isdnflg,f56k ; Is the 56K interworking bit set? lacl #8 ; Assume 64Kbps interworking (8bit/baud) xc 1,TC ; If yes, then set the number of TX bits sub #ι ; per "baud" to 7 (56Kbps) sacl txnbit ; Set appropriate bits/symbol xc 2,TC ; If 56K, then set the number of bits splk #07fh,txmask ; mask 7 bits (56kbps) ldp #7 1st #0,dp_6 ; set dp = 6 or isdn_dp2 ar(a ) = arl sacl rxnbit ; Set appropriate bits/symbol sach rxbindx ; clear data buffer sach rxdbuf ; clear data buffer .if PCM code sach descrh ; init descrambler to 0 sach descrl ; init descrambler to 0 .endif sach rx_in_frame ; init to out of frame, no crc, no filter figs splk #0ffh,rxmask ; mask 8 bits (64kbps) xc 2,TC ; If 56K, then set the number of bits splk #07fh,rxmask ; mask 7 bits (56kbps) splk #filter_marks,rxd_vect ; use filter_marks data mode as default ldp #7 1st #0,dp_7 ; set dp = 7 or isdn_dp2 ar(arp) = arl ret init autod dp = 7 (Ch 1/2) or isdn_dp2 (Ch 2) splk #dtx_auto,txvect send auto-detect pattern for TX splk #drx_auto,rxvect send auto-detect pattern for RX splk #start_over,rxvect64 find 1st 0 in 7e patt at 64kbps splk #start over,rxvect56 find 1st 0 in 7e patt at 56kbps splk #0ffffh,cnt_ls_56 ; Offffh indicates no O's received lace #2000 ; wait 2000 bytes before switching sacl tx_auto_cnt ; xmit rate sacl tx auto thrsh ; set reset value splk #32000,cnt_bytes_lo ; init 32-bit timeout cntr to 4 sec. splk #0,cnt_bytes_hi ; init 32-bit timeout cntr to 4 sec. *************************************************************************** ** * Digital call initialization (common to both originate and answer modes and * common to all digital data call setup paths) *************************************************************************** ** start_digital_call ; dp = 7 (Ch 1/2) or isdn_dp2 (Ch 2) call init_speed ; initialize xmit & rev states & vars ; dp = 7 (Ch 1/2) or isdn_dp2 (Ch 2) bit isdnflg_orig,fistos ; PCM code server-to-server mode? lace isdnflg ; ace = isdn flags, is it v 120 fixed rate? and #o 11 Oaut ; is it v 120 fixed rate? (0 = yes) cc connect_isdn,eq,ntc ; Yes, send connect messages (rtn dp = 7) ; dp = ? ldp #7 1st #0,dp_7 ; set dp = 7 or isdn_dp2 ar(arp) = arl Initialize tx and rx front end pointers for ISDN pop ; skip analog stuff in cmdproc bit isdnflg_orig,fch2 ; Is the command for IOM Ch 2? ldp #isdn_dp ; set up channel based parameters bend set_iom_chan,unc ; set correct channel for tx/rxvectl/2 *************************************************************************** ** * dtx_clear_orig_mbl and dtx_clear_answ_mbl handle xmit HDLC functions * for V.120 and PPP on mailbox 1. * This is a possible state of txvect/2 * * inputs dp - 1 * ar(arp) = arl arl = *(8 bit sample to transmit to the link) * outputs dp = 7 * ar(arp) = arl ** dtx_clear_orig_mb 1 dtx_clear_answ_mbl ; dp = 7 sar arl, tempx ; tempx = ptr to xmit sample call get_txd,*,arl ; get data from supv. (must not use tempx) ; dp = 7 .if PCM code lacl txdata and txmask ; mask off extra bits (for scrambler) sacl txdata ; save transmit data bit isdnflg,fstosscr ; PCM code server to server call with scrambler? cc scram_v32orig,tc ; call PCM code server to server TX routine * bit isdnflg,fstoszbs ; PCM code stos call w/zero byte supression * * cccc tx_zbs,tc ; call tx zero byte supression routine lacl txdata lar arl,#arcflg bit *,farc ; stos? cc bit_reverse8,tc ; Prepare "digital" sample for transmission sacl txdata ; txdata_main/aux = reversed bits. .endif lar arl, tempx ; arl = ptr to xmit sample retd lacl txdata ; ace = txdata sacl * ; txdata_main/aux = transmit data *************************************************************************** ** * drx_clear_orig_mbl and drx_clear_answ_mbl handle receive HDLC functions * for V.120 and PPP for mailbox 1. * This is a possible state of rxvect 2 * * inputs dp = 7 * ar(arp) = arl * arl = *(8 bit rceive sample from the link) * outputsdp = 7 * ar(arp) = arl ** drx_clear_orig_mbl ;lear answ mbl ; dp = 7 ldp #6 ; dρ = 6 lacl * ; ace = receive data .if PCM code mar *,ar2 lar ar2,#arcflg bit *,farc,arl ; stos? cc bit_reverse8,tc ; Prepare "digital" sample for transmission .endif and rxmask ; mask to 8 or 7 bits sacl rxdata ; and save for transport to SV .if PCM code mar *,ar2 lar ar2,#isdnflg bit *,fstosscr,arl ; is it an PCM code server to server call w/scr? cc descram_v32answ,tc ; call PCM code server to server RX routine bit isdnflg,fstoszbs ; PCM code stos call w/zero byte supression cc rx_zbs,tc ; call rx zero byte supression routine .endif call queue_rxd,*,arl ; send receive data to supv. (input dp = 6) ldp #7 ; output dp = 7 ret ** * dtx_clear_orig_mb2 and dtx_clear_answ_mb2 handle xmit HDLC functions * for V.120 and PPP for mailbox 2 * This is a possible state of txvect/2 * * inputs dp = 7 * ar(arp) = arl arl = *(8 bit sample to transmit to the link) * outputs dp = 7 * ar(arp) = arl ** dtx_clear_orig_mb2 dtx_clear_answ_mb2 ; dp = 7 ldp #isdn_dρ2 ; use MB2 sar arl, tempx ; tempx = ptr to xmit sample call get_txd,*,arl ; get data from supv. (must not use tempx) ; dp = isdn_dp2 .if PCM code lacl txdata and txmask ; mask off extra bits (for scrambler) sacl txdata ; save transmit data bit isdnflg,fstosscr ; PCM code server to server call with scrambler? cc scram_v32orig,tc ; call PCM code server to server TX routine .endif lar arl, tempx ; arl = ptr to xmit sample lacl txdata ; ace = txdata retd ldp #7 ; return dp = 7 sacl * ; txdata main/aux = transmit data ** * drx_clear_orig_mb2 and drx_clear_answ_mb2 handle receive HDLC functions * for V.120 and PPP. * This is a possible state of rxvect/2 inputs dp = 7 ar(arp) = arl arl = *(8 bit rceive sample from the link) outputsdp = 7 * ar(arp) = arl ** drx_clear_orig_mb2 drx clear answ mb2 ldp #isdn_dp2 ; yes, use MB2 lacl * ; ace = receive data and rxmask ; mask to 8 or 7 bits sacl rxdata " ; and save for transport to SV .if PCM code mar *,ar2 lar ar2,#isdnflg bit *,fstosscr,arl ; is it an PCM code server to server call w/scr? cc descram_v32answ,tc ; call PCM code server to server RX routine .endif bldd #rx_crc 13, tempz ; move rx_crc from isdn_dp2 to tempz call queue_rxd_mb2,*,arl ;send receive data to SV(inpt dp=isdn_dp2) call queue_rxd,*,arl ;send receive data to SV(inpt dp=isdn_dp2) ldp #7 ; output dp = 7 ret .end

Claims: We claim: 1. A method for determining characteristics of a data communication channel between first and second data communication devices comprising, in combination: sending a relatively low power digital probe signal over said channel from said first to said second data communication devices; sending a second digital probe signal corresponding to an analog signal having a relatively high-frequency signal with a time- varying dc component from said first to said second data communication devices; and detecting a received signal at said second data communication device, said received signal coπesponding to said probe signals sent by said first device, and determining whether said received signal varies from a predetermined standard. 2. A method as claimed in Claim 1, wherein said relatively high frequency signal is greater than 3,300 Hertz. 3. A method as claimed in Claim 1, wherein said relatively high frequency signal is substantially equal to 4,000 Hertz. 4. A method as claimed in claim 1, wherein said relatively high frequency signal has an amplitude of approximately one-half of a maximum amplitude permitted for said channel. 5. A method as claimed in claim 1, wherein said probe signal is synchronized between said first and said second data communication device. 6. A method as claimed in claim 5, wherein said probe signal includes a total number of bytes substantially equally divisible by 6. 7. A method as claimed in claim 1 wherein said method further comprises sending a third, substantially all-zero, probe signal. 8. A method as claimed in claim 1 wherein said step of determining whether said received signal varies from a predetermined standard includes determining whether robbed bit signaling has affected a probe signal. 9. A method as claimed in claim 8, wherein said step of determining whether said received signal varies from a predetermined standard further comprises at least one of: determining a number of robbed bits, and determining a location of a robbed bit. 10. A method as claimed in claim 1 wherein said step of determining whether said received signal varies from a predetermined standard includes determimng whether digital ones have been inserted in a probe signal. 11. A method as claimed in claim 1 wherein said step of determining whether said received signal varies from a predetermined standard includes determining whether a probe signal has passed through a digital pad. 12. A method as claimed in claim 1 wherein said step of determining whether said received signal varies from a predetermined standard includes monitoring said received signal for a digital signal corresponding to an analog signal having a relatively high-frequency signal with a time-varying dc component. 13. A method as claimed in claim 1, wherein said second probe signal comprises a sequence of digital codewords. 14. A method as claimed in claim 13, wherein said sequence of digital codewords comprises 256 distinct codewords. 15. A method as claimed in claim 14, wherein said 256 distinct codewords correspond to a series of levels associated with a 256 level quantizer. 16. A method as claimed in claim 1, wherein said relatively low power digital probe signal is of sufficient length so that an average power of at least said low power digital probe signal and said second digital probe signal is less than a predetermined threshold.

Inventors: DAVENPORT BERT A, JANKUS PETER P, RENKEL JAMES A, DAVENPORT, BERT, A., JANKUS, PETER, P., RENKEL, JAMES, A.
Applicants: 3COM CORP, 3COM CORPORATION
Application year: 1998
Main classification: H04J3
IPC codes: H04J3, H04L5, H04L25, H04Q11