void K3LAPIBase::mixerRecord(int32 dev, KDeviceType type, int32 obj, byte track, KMixerSource src, int32 index) const { /* estes buffers *NAO PODEM SER ESTATICOS*! */ char cmd[] = { 0x3f, 0x03, (char)obj, (char)track, 0xff, 0xff }; switch (src) { case kmsChannel: cmd[4] = 0x05; cmd[5] = (char)index; break; case kmsNoDelayChannel: cmd[4] = 0x0a; cmd[5] = (char)index; break; case kmsGenerator: cmd[4] = 0x09; switch ((KMixerTone)index) { case kmtSilence: cmd[5] = 0x0F; break; case kmtDial: cmd[5] = 0x08; break; case kmtBusy: cmd[5] = 0x0D; break; case kmtFax: case kmtVoice: case kmtEndOf425: case kmtCollect: case kmtEndOfDtmf: /* TODO: exception, unable to generate */ break; } break; case kmsCTbus: case kmsPlay: /* TODO: exception, not implemented! */ break; } int32 dsp = get_dsp(type, DSP_AUDIO); raw_command(dev, dsp, cmd, sizeof(cmd)); }
static status_t raw_ioctl(raw_device_info *device, int op, void *buffer, size_t length) { status_t res; switch (op) { case B_RAW_DEVICE_COMMAND: res = raw_command(device, buffer); break; default: res = B_DEV_INVALID_IOCTL; } SHOW_FLOW(4, "%x: %s", op, strerror(res)); return res; }
void K3LAPIBase::raw_command(int32 dev, int32 dsp, std::string & str) const { raw_command(dev, dsp, str.data(), str.size()); }