Peter Zubaj <pzad@pobox.sk>
Contributors:
-Mikael Magnusson <mikma@users.sourceforge.net>
\ No newline at end of file
+Mikael Magnusson <mikma@users.sourceforge.net>
+Tim <terminator356@users.sourceforge.net>
\ No newline at end of file
+0.1.8p1
+ By Tim...
+ Now loads as10k1 bin patch files from ALSA alsa-tools AND from EMU10K1 project emu-utils.
+ Fixed init_live bug.
+ Fixed bug in liblo10k1.c liblo10k1_patch_get().
0.1.8
Sync with ALSA 1.0.8rc1
0.1.7test4
AC_INIT(src/ld10k1.c)
-AM_INIT_AUTOMAKE(ld10k1, 0.1.8)
+AM_INIT_AUTOMAKE(ld10k1, 0.1.8p1)
AC_CONFIG_HEADERS(config.h)
AC_PROG_CC
(LD10K1_LIB_MINOR<<8)|\
LD10K1_LIB_SUBMINOR)
/** library version (string) */
-#define LD10K1_LIB_VERSION_STR "0.1.8"
+#define LD10K1_LIB_VERSION_STR "0.1.8p1"
ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x0f].name), "OUT_Rear_Right");
ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x10].name), "OUT_AC97_Front_Left");
ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x11].name), "OUT_AC97_Front_Right");
- ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x16].name), "OUT_ADC_Caputre_Left");
+ ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x16].name), "OUT_ADC_Capture_Left");
ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x17].name), "OUT_ADC_Capture_Right");
ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x18].name), "OUT_Mic_Capture");
} else {
goto err_nomem;
}
- /* ctls */
- if (patch->ctl_count) {
- if ((err = receive_response(*conn, &opr, &sizer)) < 0)
- return err;
-
- if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->ctl_count * sizeof(liblo10k1_dsp_ctl_t))
- goto err_protocol;
-
- patch->ctl = (liblo10k1_dsp_ctl_t *)receive_msg_data_malloc(*conn, sizer);
- if (!patch->ctl)
- goto err_nomem;
- }
-
/* tram grp */
if (patch->tram_count) {
if ((err = receive_response(*conn, &opr, &sizer)) < 0)
goto err_nomem;
}
+ /* ctls */
+ if (patch->ctl_count) {
+ if ((err = receive_response(*conn, &opr, &sizer)) < 0)
+ return err;
+
+ if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->ctl_count * sizeof(liblo10k1_dsp_ctl_t))
+ goto err_protocol;
+
+ patch->ctl = (liblo10k1_dsp_ctl_t *)receive_msg_data_malloc(*conn, sizer);
+ if (!patch->ctl)
+ goto err_nomem;
+ }
+
/* instr */
if (patch->instr_count) {
if ((err = receive_response(*conn, &opr, &sizer)) < 0)
#include "liblo10k1.h"
#include "liblo10k1ef.h"
+#define AS10K1_FILE_SIGNATURE_ALSA "EMU10K1 FX8010 1"
+#define AS10K1_FILE_SIGNATURE_EMU "emu10k1-dsp-file"
+#define AS10K1_FILE_FORMAT_VERSION_EMU 1
+
liblo10k1_emu_patch_t *liblo10k1_emu_new_patch()
{
liblo10k1_emu_patch_t *tmp = (liblo10k1_emu_patch_t *)malloc(sizeof(liblo10k1_emu_patch_t));
} else
fclose(patch_file);
- /* signature check */
- if (strncmp(patch_data, "EMU10K1 FX8010 1", 16) != 0) {
- en = LD10K1_EF_ERR_SIGNATURE;
- goto err;
+ int file_sig = 0;
+
+ /* signature checks - two kinds of as10k1 files, one from alsa-tools, other from emu-tools. */
+ if(strncmp(patch_data, AS10K1_FILE_SIGNATURE_ALSA, 16) != 0)
+ {
+ if((strncmp(patch_data, AS10K1_FILE_SIGNATURE_EMU, 16) == 0) && (*((unsigned short *)&patch_data[17]) == AS10K1_FILE_FORMAT_VERSION_EMU))
+ file_sig = 3;
+ else
+ {
+ en = LD10K1_EF_ERR_SIGNATURE;
+ goto err;
+ }
}
new_patch = liblo10k1_emu_new_patch();
}
/* next patch name */
- strncpy(new_patch->patch_name, &(patch_data[16]), 31);
+ strncpy(new_patch->patch_name, &(patch_data[16 + file_sig]), 31);
new_patch->patch_name[31] = '\0';
-
/* registers */
- file_pos = 32+16;
+ file_pos = 32+16 + file_sig;
/* in count */
if ((en = read_byte(patch_data, file_size, &file_pos, &byte_tmp)) < 0)
- goto err;
+ goto err;
if (byte_tmp >= 32) {
en = LD10K1_EF_ERR_FORMAT;
if ((en = read_ushort(patch_data, file_size, &file_pos, &ushort_tmp)) < 0)
goto err;
+ if(file_sig)
+ ushort_tmp >>= 1;
+
if ((en = liblo10k1_emu_patch_set_instr_count(new_patch, ushort_tmp)) < 0)
goto err;
}
if (liblo10k1_emu_transform_patch(ep, tctl, ctrl_to_concate_count, &np) < 0)
+ {
+ error("error on liblo10k1_emu_transform_patch");
return 1;
+ }
free(tctl);