// 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
|
|
}
|