Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/intercom.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intercom.c')
-rw-r--r--intercom.c120
1 files changed, 60 insertions, 60 deletions
diff --git a/intercom.c b/intercom.c
index 9204e26..2851841 100644
--- a/intercom.c
+++ b/intercom.c
@@ -13,8 +13,8 @@
#include "transfer.h"
-volatile unsigned char mode_current = 1; //
-volatile unsigned char mode_temp = 0; //
+volatile unsigned char mode_current = 1; // Текущий режим
+volatile unsigned char mode_temp = 0; // Режим на один раз
volatile unsigned long int record_num = 0;
char buffer[32];
@@ -43,41 +43,41 @@ void send_current_mode(unsigned char dest)
{
buffer[0] = mode_current;
buffer[1] = mode_temp;
- clunet_send(dest, CLUNET_PRIORITY_INFO, CLUNET_COMMAND_INTERCOM_MODE_INFO, (char*)&buffer, 2); //
+ clunet_send(dest, CLUNET_PRIORITY_INFO, CLUNET_COMMAND_INTERCOM_MODE_INFO, (char*)&buffer, 2); // Отправляем в сеть текущий режим
}
void save_mode()
{
- eeprom_write_byte((void*)4, mode_current); //
- eeprom_write_byte((void*)5, mode_temp); //
+ eeprom_write_byte((void*)4, mode_current); // Режим
+ eeprom_write_byte((void*)5, mode_temp); // Временный режим
send_current_mode(CLUNET_BROADCAST_ADDRESS);
}
void data_received(unsigned char src_address, unsigned char dst_address, unsigned char command, char* data, unsigned char size)
{
- if (command == CLUNET_COMMAND_TIME && size >= 6) //
+ if (command == CLUNET_COMMAND_TIME && size >= 6) // Синхронизация времени
{
set_time(data[3]+2000, data[4], data[5], data[0],data[1],data[2]);
}
- else if (command == CLUNET_COMMAND_INTERCOM_MODE_REQUEST) //
+ else if (command == CLUNET_COMMAND_INTERCOM_MODE_REQUEST) // У нас запрашивают режим
{
send_current_mode(src_address);
}
- else if (command == CLUNET_COMMAND_INTERCOM_MODE_SET) //
+ else if (command == CLUNET_COMMAND_INTERCOM_MODE_SET) // Установка режима
{
if (size >= 1 && (unsigned char)data[0] != 0xFF) mode_current = data[0];
if (size >= 2 && (unsigned char)data[1] != 0xFF) mode_temp = data[1];
save_mode();
}
- else if (command == CLUNET_COMMAND_INTERCOM_RECORD_REQUEST) //
+ else if (command == CLUNET_COMMAND_INTERCOM_RECORD_REQUEST) // Передача записей
{
- if (size == 4) transfer_start(*((unsigned long int*)data), src_address); //
- else if (size == 1 && data[0] == 1) transfer_ack(); // ,
- else if (size == 1 && data[0] == 0) transfer_stop(); //
+ if (size == 4) transfer_start(*((unsigned long int*)data), src_address); // Начинаем передачу
+ else if (size == 1 && data[0] == 1) transfer_ack(); // Подтвержают приём, переходим к следующему куску
+ else if (size == 1 && data[0] == 0) transfer_stop(); // Прекращение передачи данных
}
}
-int is_LINE_POWER() // ,
+int is_LINE_POWER() // Определяет, что есть стабильный сигнал в линии
{
int i;
for (i = 0; i < 10; i++)
@@ -88,7 +88,7 @@ int is_LINE_POWER() // ,
return 1;
}
-void intercom_bell() //
+void intercom_bell() // Издаёт звук входящего звонка
{
int t;
for (t = 0; t < 9; t++)
@@ -101,7 +101,7 @@ void intercom_bell() //
}
}
-int answer_play(char* filename) //
+int answer_play(char* filename) // Отвечает и воспроизводит файл
{
ANSWER;
MODE_MYSOUND;
@@ -110,7 +110,7 @@ int answer_play(char* filename) //
{
while (sound_read() >= 0)
{
- if (!LINE_POWER || OFFHOOK) // ,
+ if (!LINE_POWER || OFFHOOK) // Сняли трубку, или сигнал исчез
{
sound_stop();
return 1;
@@ -121,23 +121,23 @@ int answer_play(char* filename) //
return 0;
}
-int answer_play_open(char* filename) // ,
+int answer_play_open(char* filename) // Отвечает, воспроизводит файл и открывает дверь
{
- if (answer_play(filename)) return 1; // ,
+ if (answer_play(filename)) return 1; // Сняли трубку, или сигнал исчез
OPEN;
return 0;
}
-int answer_record(char* filename1, char* filename2) // , ,
+int answer_record(char* filename1, char* filename2) // Отвечает, записывает сообщение,
{
- if (answer_play(filename1)) return 1; // ,
- beep(3000, 500); //
- sprintf(buffer, "/%08lu.wav", record_num); //
- clunet_send(CLUNET_BROADCAST_ADDRESS, CLUNET_PRIORITY_INFO, CLUNET_COMMAND_INTERCOM_MESSAGE, (char*)&record_num, sizeof(record_num)); //
+ if (answer_play(filename1)) return 1; // Отвечаем, предлагаем оставить сообщение
+ beep(3000, 500); // Биип
+ sprintf(buffer, "/%08lu.wav", record_num); // Формируем имя файла
+ clunet_send(CLUNET_BROADCAST_ADDRESS, CLUNET_PRIORITY_INFO, CLUNET_COMMAND_INTERCOM_MESSAGE, (char*)&record_num, sizeof(record_num)); // Отправляем в сеть сообщение
record_num++;
- eeprom_write_dword((void*)0, record_num); // -
- if (rec_wav(buffer) == 0) //
+ eeprom_write_dword((void*)0, record_num); // Запоминаем кол-во записей
+ if (rec_wav(buffer) == 0) // Пишем сообщение
{
int s = 0;
long int totalSize = 0;
@@ -145,7 +145,7 @@ int answer_record(char* filename1, char* filename2) // ,
{
s = sound_write();
totalSize += s;
- if (!LINE_POWER || OFFHOOK) // ,
+ if (!LINE_POWER || OFFHOOK) // Сняли трубку, или сигнал исчез
{
sound_stop();
return 1;
@@ -153,11 +153,11 @@ int answer_record(char* filename1, char* filename2) // ,
}
sound_stop();
}
- if (play_wav_pgm(filename2) == 0) // ,
+ if (play_wav_pgm(filename2) == 0) // Если пациент дождался, благодарим
{
while (sound_read() >= 0)
{
- if (!LINE_POWER || OFFHOOK) // ,
+ if (!LINE_POWER || OFFHOOK) // Сняли трубку, или сигнал исчез
{
sound_stop();
return 1;
@@ -168,19 +168,19 @@ int answer_record(char* filename1, char* filename2) // ,
return 0;
}
-void incoming_ring() //
+void incoming_ring() // Выполняется при любом входящем звонке
{
LED_RED_ON;
- unsigned char mode = (mode_temp != 0) ? mode_temp : mode_current; //
- // ,
+ unsigned char mode = (mode_temp != 0) ? mode_temp : mode_current; // Текущий режим
+ // Сообщение о звонке, указываем текущий режим
clunet_send(CLUNET_BROADCAST_ADDRESS, CLUNET_PRIORITY_INFO, CLUNET_COMMAND_INTERCOM_RING, (char*)&mode, 1);
intercom_bell();
- if (mode_temp) //
+ if (mode_temp) // Обнуляем временный режим
{
mode_temp = 0;
save_mode();
}
- if (!LINE_POWER) // ,
+ if (!LINE_POWER) // Аварийное откртие двери, если набрали и сразу сбросили
{
mode_temp = 0xFF;
save_mode();
@@ -189,38 +189,38 @@ void incoming_ring() //
{
switch (mode)
{
- case 1: // , ,
+ case 1: // Автоответчик, долго ждёт ответа, потом записывает
answer_record(AUTOLONG_WAV, SAVED_WAV);
break;
- case 2: // ,
+ case 2: // Автоответчик, сразу записывает
answer_record(AUTOFAST_WAV, SAVED_WAV);
break;
- case 3: // ,
+ case 3: // Приветствует хозяина, открывает дверь
answer_play_open(OPENME_WAV);
break;
- case 4: // ,
+ case 4: // Приветствует гостя, открывает дверь
answer_play_open(OPEN_WAV);
break;
- case 5: // . .
+ case 5: // Долго ждёт ответа. Сообщение не пишет.
answer_play(WAITLONG_WAV);
break;
- case 9: // , . , , .
+ case 9: // Здрасти, здрастите. Проходи, братишка, проходи.
answer_play_open(MODE9_WAV);
break;
- case 0xFF: //
+ case 0xFF: // Аварийное откртие двери
answer_play_open(EMERGENCY_OPEN_WAV);
}
MODE_NORMAL;
- _delay_ms(200); // ,
+ _delay_ms(200); // На случай, если контакты снятия трубки не успели разомкнуться
HANGUP;
}
- while (LINE_POWER); //
+ while (LINE_POWER); // Ждём пока не пропадёт сигнал
LED_RED_OFF;
- while (OFFHOOK); //
- _delay_ms(100); //
+ while (OFFHOOK); // И пользователь не положит трубку
+ _delay_ms(100); // Защита от дребезга контактов
}
-int count_disk() // ,
+int count_disk() // Считает, что набрали на диске
{
int cnt = 1;
while (1)
@@ -280,7 +280,7 @@ void say_mode(char istemp)
}
}
-void select_mode(char istemp) //
+void select_mode(char istemp) // Выбот режима
{
say_mode(istemp);
while (!CONTROL && OFFHOOK) play_wav_auto_pgm(MODELIST_WAV);
@@ -300,11 +300,11 @@ void select_mode(char istemp) //
void play_record(long unsigned int num)
{
- sprintf(buffer, "/%08lu.wav", num); //
+ sprintf(buffer, "/%08lu.wav", num); // Формируем имя файла
play_wav_auto(buffer);
}
-void control_mode() //
+void control_mode() // Режим управления
{
LED_GREEN_ON;
while (OFFHOOK)
@@ -332,7 +332,7 @@ void control_mode() //
}
}
LED_GREEN_OFF;
- _delay_ms(100); //
+ _delay_ms(100); // Защита от дребезга контактов
}
int main (void)
@@ -342,19 +342,19 @@ int main (void)
time_init();
sei();
//eeprom_write_dword((void*)0, 0);
- record_num = eeprom_read_dword((void*)0); // -
- mode_current = eeprom_read_byte((void*)4); //
- mode_temp = eeprom_read_byte((void*)5); //
+ record_num = eeprom_read_dword((void*)0); // Читаем кол-во записей
+ mode_current = eeprom_read_byte((void*)4); // Режим
+ mode_temp = eeprom_read_byte((void*)5); // Временный режим
disk_initialize(0);
- unset_bit(DDRA, 3); set_bit(PORTA, 3); //
- unset_bit(DDRA, 4); unset_bit(PORTA, 4); //
- set_bit(DDRA, 5); HANGUP; //
- set_bit(DDRA, 6); MODE_NORMAL; //
- unset_bit(DDRG, 0); set_bit(PORTG, 0); // ,
- set_bit(DDRD, 6); set_bit(DDRD, 7); //
- unset_bit(DDRA, 7); set_bit(PORTA, 7); //
+ unset_bit(DDRA, 3); set_bit(PORTA, 3); // Определение сигнала в линии
+ unset_bit(DDRA, 4); unset_bit(PORTA, 4); // Открывалка двери
+ set_bit(DDRA, 5); HANGUP; // Реле снимания трубки
+ set_bit(DDRA, 6); MODE_NORMAL; // Реле выбора режима
+ unset_bit(DDRG, 0); set_bit(PORTG, 0); // Определение, лежит ли трубка
+ set_bit(DDRD, 6); set_bit(DDRD, 7); // Светодиоды
+ unset_bit(DDRA, 7); set_bit(PORTA, 7); // Счётчик оборотов диска
unset_bit(DDRF, 0); // ADC+
unset_bit(PORTF, 0);
@@ -385,7 +385,7 @@ int main (void)
{
if (is_LINE_POWER()) incoming_ring();
if (OFFHOOK) control_mode();
- transfer_data(); // .
+ transfer_data(); // Передаём данные на досуге.
//play_wav_auto("/00000007.wav");
}
}