diff options
Diffstat (limited to 'intercom.c')
-rw-r--r-- | intercom.c | 120 |
1 files changed, 60 insertions, 60 deletions
@@ -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"); } } |