You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

107 lines
1.9 KiB

// Copyright 2020 Justine Alexandra Roberts Tunney
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// RFC2833 RTP DTMF Telephone Events
package rtp
import (
"errors"
"fmt"
)
// Turns telephone event into ASCII character.
func DtmfToChar(event uint8) (byte, error) {
switch event {
case 0:
return '0', nil
case 1:
return '1', nil
case 2:
return '2', nil
case 3:
return '3', nil
case 4:
return '4', nil
case 5:
return '5', nil
case 6:
return '6', nil
case 7:
return '7', nil
case 8:
return '8', nil
case 9:
return '9', nil
case 10:
return '*', nil
case 11:
return '#', nil
case 12:
return 'A', nil
case 13:
return 'B', nil
case 14:
return 'C', nil
case 15:
return 'D', nil
case 16:
return '!', nil
default:
return '\x00', errors.New(fmt.Sprintf("bad tel event: %v", event))
}
}
// Turns ascii character into corresponding telephone event.
func CharToDtmf(ch byte) (event uint8, err error) {
switch ch {
case '0':
event = 0
case '1':
event = 1
case '2':
event = 2
case '3':
event = 3
case '4':
event = 4
case '5':
event = 5
case '6':
event = 6
case '7':
event = 7
case '8':
event = 8
case '9':
event = 9
case '*':
event = 10
case '#':
event = 11
case 'a', 'A':
event = 12
case 'b', 'B':
event = 13
case 'c', 'C':
event = 14
case 'd', 'D':
event = 15
case '!':
event = 16
default:
err = errors.New(fmt.Sprint("bad dtmf char:", string(ch)))
}
return
}