Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package require Tk
- package require tile
- ttk::frame .buttons
- pack .buttons -side top -fill both -padx 10 -pady 3
- ttk::button .buttons.connect -text {Запустить} -command {start_modem}
- pack .buttons.connect -side left -fill x
- set status "Настройка соединения"
- set data ""
- set serial_port "/dev/ttyS0"
- global status data
- global working_mode
- set working_mode "DATA"
- set serial [open $serial_port r+]
- fconfigure $serial -mode "9600,n,8,1" -blocking 0 -buffering none -translation binary
- fileevent $serial readable [list serial_receiver $serial]
- ############################################
- proc start_modem {} {
- global serial
- global status
- set status "Настройка соединения"
- puts -nonewline $serial "AT\r"
- }
- proc serial_receiver { chan } {
- global working_mode
- global status data
- if { [eof $chan] } {
- catch {close $chan}
- return
- }
- if {[catch {read $chan} ans]} {
- set ans ""
- }
- if {$ans != ""} {
- append data $ans
- }
- if {[regexp \\r\\n $data]} {
- switch $working_mode {
- "DATA" {
- switch $status {
- "Настройка соединения"
- {
- if {[regexp OK\\r\\n $data]} {
- set data ""
- change_status $chan "Настройка модема"
- } else {
- *Вот здесь что-то вставить?*
- }
- }
- "Настройка модема"
- {
- if {[regexp OK\\r\\n $data]} {
- set data ""
- change_status $chan "Установка класса"
- }
- }
- } #status
- } #working_mode
- } #if
- }
- }
- proc change_status {chan prog_status} {
- set cmd ""
- switch $working_mode {
- "DATA" {
- switch $prog_status {
- "Настройка соединения" {
- set cmd [set_command "AT"]
- }
- "Настройка модема" {
- set cmd [set_command "ATQ0V1E0&D2X4S0=0"]
- }
- }
- }
- }
- puts -nonewline $chan $cmd
- flush $chan
- set status $prog_status
- }
- proc set_command {cmd} {
- append cmd [format %c 13]
- return $cmd
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement