// S_CHAT.C
// простая терминаальная программа


#include <conio.h>
#include <time.h>
#include <graph.h>
#include "timer.h"
#include "sysp.h"

// используется COM порт номер 3, для использования
// другого COM-порта измените эту директиву

#define COM_PORT  2 //0

// объявления функций

unsigned    com_address( int );
int         to_modem( unsigned, char* );
int         dtr_on( unsigned );
int         reset( unsigned );
void        disp( char, char );
void        disp_string( char*, char );
void        exchange( unsigned com_adr );

//
// Главная процедура
//

void main(void) {

	AUX_MODE amd;
	unsigned com_adr;
	char     ch_in;
	int      i, mdm_sts;

	// очищаем экран дисплея

	_setvideomode( _TEXTC80 );
	_clearscreen( _GCLEARSCREEN );
	_displaycursor( _GCURSOROFF );

	disp_string( "(C) Frolov G.V. Телекоммуникационная программа (su@rel.frolov)\n\r\n\r", 4 );

	// получаем базовый адрес регистров порта COM_PORT

	if(( com_adr = com_address( COM_PORT )) < 0 ) exit( com_adr );

	// сбрасываем регистры UART

	reset( com_adr);

	// инициализируем COM-порт: устанавливаем скорость и
	// формат данных

	amd.baud = 300L;                       // скорость обмена
	amd.ctl_aux.ctl_word.len = 3;          // длина слова

	amd.ctl_aux.ctl_word.stop = 0;         // число стоп-битов
	amd.ctl_aux.ctl_word.parity = 0;       // контроль четности
	amd.ctl_aux.ctl_word.stuck_parity = 0; // фиксация четности
	amd.ctl_aux.ctl_word.en_break_ctl = 0; // установка перерыва
	amd.ctl_aux.ctl_word.dlab = 0;         // загрузка регистра делителя

	// производим инициализацию COM-порта с базовым адресом com_adr

	com_init(&amd, com_adr, 0);

	// устанавливаем сигнал DTR и RTS

	dtr_on( com_adr );


	// передаем модему команду набора номера, модем
	// набирает номер и производит соединение с удааленным модемом

	disp_string( "\n\rВы можете вводить AT-команды, для выхода нажмите ESC\n\r", 12 );

	disp_string( "\n\rНабираем номер\n\r", 12 );
	if( 0!= to_modem( com_adr, "AT M0 DP 255 23 62" )) exit(3);

	// задержка

	sleep(1);

	// выполняем диалог с удаленным модемом

	exchange(  com_adr );
	disp_string( "\n\rПодождите, я кладу трубку\n\r", 12 );

	// передаем модему Escape последовательность

	delay(3000);
	com_out( com_adr, '+' );
	com_out( com_adr, '+' );
	com_out( com_adr, '+' );
	delay(3000);

	// кладем трубку

	to_modem( com_adr, "ATH0" );
	sleep(3);

	// сбрасываем сигнал DTR и RTS

	dtr_off( com_adr );

	disp_string( "\n\r\n\rКонец работы\n\r", 4 );
	_setvideomode( _DEFAULTMODE );
}

