/* code2snd * Takes string of . and - and turns them into audible tones. Typically * this will be one letter. * Requires prepared global variables: * fd - file descriptor for DSP device * ditbf, nditbf - dit buffer and dit buffer length * dahbf, ndahbf - dah buffer and dit buffer length * sgapbf, nsgapbf - short gap buffer and dit buffer length * lgapbf, nlgapbf - long gap b uffer and dit buffer length */ void code2snd(char *cd) { char ch, w; setbuf(stdout, NULL); while ((ch = *cd++) != '\0') { /* Send dit or dah tone, or space */ if (ch == '.') { w = sound_write(&ditbf, &nditbf, outp); if (verbose) fprintf(stderr, "."); } if (ch == '-') { w = sound_write(&dahbf, &ndahbf, outp); if (verbose) fprintf(stderr, "-"); } if (ch == 'S') { /* Send word gap (7 dit). Note that each element is followed * by a short gap (1 dit) and also by the letter gap (3 dit). * This means we only need a single long gap here to accomplish * the 7 dit gap. */ w = sound_write(&lgapbf, &nlgapbf, outp); if (verbose) fprintf(stderr, " "); } /* Send inter-element gap (1 dit) */ w = sound_write(&sgapbf, &nsgapbf, outp); } /* Send letter gap */ w = sound_write(&lgapbf, &nlgapbf, outp); if (verbose) fprintf(stderr, " "); }
int answer_record(char* filename1, char* filename2, char use_beep) // Отвечает, записывает сообщение, { if (answer_play(filename1)) return 1; // Отвечаем, предлагаем оставить сообщение if (use_beep) 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) // Пишем сообщение { int s = 0; long int totalSize = 0; while (s >= 0 && totalSize < 8000UL*RECORD_MAX_LENGTH) { s = sound_write(); totalSize += s; if (!LINE_POWER || OFFHOOK) // Сняли трубку, или сигнал исчез { sound_stop(); return 1; } } sound_stop(); } if (play_wav_pgm(filename2) == 0) // Если пациент дождался, благодарим { while (sound_read() >= 0) { if (!LINE_POWER || OFFHOOK) // Сняли трубку, или сигнал исчез { sound_stop(); return 1; } } sound_stop(); } return 0; }
void io_write(u16 adr, u8 val) { u8 reg = adr & 0x00FF; switch(reg) { case 0x00: joy_select_col(val); break; case 0x01: /*serial.sb = val;*/ break; case 0x02: /*serial_sc_write(val);*/ break; case 0x04: timers.div = 0x00; break; case 0x05: timers.tima = val; break; case 0x06: timers.tma = val; break; case 0x07: timers_tac(val & 0x07); break; case 0x0F: cpu.irq = val & 0x1F; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1A: case 0x1B: case 0x1C: case 0x1D: case 0x1E: case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x3A: case 0x3B: case 0x3C: case 0x3D: case 0x3E: case 0x3F: sound_write(reg, val); break; case 0x15: case 0x1F: break; case 0x40: lcd_c_write(val); break; case 0x41: lcd.stat = (lcd.stat & 0x87) | (val & 0x78); break; case 0x42: lcd.scy = val; break; case 0x43: lcd.scx = val; break; case 0x44: lcd_reset_ly(); break; case 0x45: lcd_set_lyc(val); break; case 0x46: lcd_dma(val); break; case 0x47: lcd_dmg_palette_data(&lcd.bgp, val, 0); break; case 0x48: lcd_dmg_palette_data(&lcd.obp, val, 0); break; case 0x49: lcd_dmg_palette_data(&lcd.obp, val, 1); break; case 0x4A: lcd.wy = val; break; case 0x4B: lcd.wx = val; break; case 0x4D: cpu.freq_switch = val & 0x01; break; case 0x4F: ram.selected_vrambank = val & 0x01; break; case 0x51: lcd.hdma_source = (lcd.hdma_source & 0x00FF) | (val << 8); break; case 0x52: lcd.hdma_source = (lcd.hdma_source & 0xFF00) | (val & 0xF0); break; case 0x53: lcd.hdma_dest = (lcd.hdma_dest & 0x80FF) | ((val & 0x1F) << 8); break; case 0x54: lcd.hdma_dest = (lcd.hdma_dest & 0xFF00) | (val & 0xF0); break; case 0x55: lcd_hdma_control(val); break; case 0x56: break; case 0x68: lcd_palette_control(&lcd.bgp, val); break; case 0x69: lcd_cgb_palette_data(&lcd.bgp, val); break; case 0x6A: lcd_palette_control(&lcd.obp, val); break; case 0x6B: lcd_cgb_palette_data(&lcd.obp, val); break; case 0x70: ram.rambank_index = (val & 0x07) != 0 ? val & 0x07 : 0x01; ram.rambank = ram.rambanks[ram.rambank_index]; break; default:; #ifdef DEBUG printf("Unknown IO write: %.2X=%.2X\n", reg, val); #endif } }