== Build system == * root your phone * Backup your current system!!! * Check out the Dream Android repository following that howto: [http://source.android.com/documentation/building-for-dream],but be carefull...DO NOT put the files extracted by extract-files.sh in the build system...it would put proprietary files in your build,that you can't even redistribute,but keep wifi firmware for pushing it later if you can stand proprietary firmwares(/system/etc/wifi/Fw1251r1c.bin ) Android use a custom Makefile based buildsystem * Add the patches that can be find here [http://groups.fsf.org/wiki/Freest_hardware_comparisons/replicant] * Add HAVE_HTC_AUDIO_DRIVER := true to BoardConfig.mk * Add this patch for sound: {{{ diff --git a/include/hardware_legacy/AudioHardwareInterface.h b/include/hardware_legacy/AudioHardwareInterface.h index 0aa3a95..371ee48 100644 --- a/include/hardware_legacy/AudioHardwareInterface.h +++ b/include/hardware_legacy/AudioHardwareInterface.h -211,8 +211,7 @@ public: int format, int channelCount, uint32_t sampleRate, - status_t *status, - AudioSystem::audio_in_acoustics acoustics) = 0; + status_t *status) = 0; /**This method dumps the state of the audio hardware */ virtual status_t dumpState(int fd, const Vector& args) = 0; diff --git a/libs/audioflinger/A2dpAudioInterface.cpp b/libs/audioflinger/A2dpAudioInterface.cpp index b6d5078..15ce1dd 100644 --- a/libs/audioflinger/A2dpAudioInterface.cpp +++ b/libs/audioflinger/A2dpAudioInterface.cpp -71,8 +71,7 @@ AudioStreamOut* A2dpAudioInterface::openOutputStream( } AudioStreamIn* A2dpAudioInterface::openInputStream( - int format, int channelCount, uint32_t sampleRate, status_t *status, - AudioSystem::audio_in_acoustics acoustics) + int format, int channelCount, uint32_t sampleRate, status_t *status) { if (status) *status = -1; diff --git a/libs/audioflinger/A2dpAudioInterface.h b/libs/audioflinger/A2dpAudioInterface.h index 7901a8c..e67f05f 100644 --- a/libs/audioflinger/A2dpAudioInterface.h +++ b/libs/audioflinger/A2dpAudioInterface.h -58,8 +58,7 @@ public: int format, int channelCount, uint32_t sampleRate, - status_t *status, - AudioSystem::audio_in_acoustics acoustics); + status_t *status); protected: virtual status_t doRouting(); diff --git a/libs/audioflinger/AudioDumpInterface.h b/libs/audioflinger/AudioDumpInterface.h index 9a94102..42204d6 100644 --- a/libs/audioflinger/AudioDumpInterface.h +++ b/libs/audioflinger/AudioDumpInterface.h -78,9 +78,8 @@ public: virtual status_t setParameter(const char* key, const char* value) {return mFinalInterface->setParameter(key, value);} - virtual AudioStreamIn* openInputStream( int format, int channelCount, uint32_t sampleRate, status_t *status, - AudioSystem::audio_in_acoustics acoustics) - {return mFinalInterface->openInputStream( format, channelCount, sampleRate, status, acoustics);} + virtual AudioStreamIn* openInputStream( int format, int channelCount, uint32_t sampleRate, status_t *status) + {return mFinalInterface->openInputStream( format, channelCount, sampleRate, status);} virtual status_t dump(int fd, const Vector& args) { return mFinalInterface->dumpState(fd, args); } diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp index 43df7dd..f376b67 100644 --- a/libs/audioflinger/AudioFlinger.cpp +++ b/libs/audioflinger/AudioFlinger.cpp -2435,8 +2435,7 @@ bool AudioFlinger::AudioRecordThread::threadLoop() input = mAudioHardware->openInputStream(mRecordTrack->format(), mRecordTrack->channelCount(), mRecordTrack->sampleRate(), - &mStartStatus, - (AudioSystem::audio_in_acoustics)(mRecordTrack->mFlags >> 16)); + &mStartStatus); if (input != 0) { inBufferSize = input->bufferSize(); inFrameCount = inBufferSize/input->frameSize(); diff --git a/libs/audioflinger/AudioHardwareGeneric.cpp b/libs/audioflinger/AudioHardwareGeneric.cpp index 62beada..e455186 100644 --- a/libs/audioflinger/AudioHardwareGeneric.cpp +++ b/libs/audioflinger/AudioHardwareGeneric.cpp -93,8 +93,7 @@ void AudioHardwareGeneric::closeOutputStream(AudioStreamOutGeneric* out) { } AudioStreamIn* AudioHardwareGeneric::openInputStream( - int format, int channelCount, uint32_t sampleRate, status_t *status, - AudioSystem::audio_in_acoustics acoustics) + int format, int channelCount, uint32_t sampleRate, status_t *status) { AutoMutex lock(mLock); -108,7 +107,7 @@ AudioStreamIn* AudioHardwareGeneric::openInputStream( // create new output stream AudioStreamInGeneric* in = new AudioStreamInGeneric(); - status_t lStatus = in->set(this, mFd, format, channelCount, sampleRate, acoustics); + status_t lStatus = in->set(this, mFd, format, channelCount, sampleRate); if (status) { *status = lStatus; } -247,8 +246,7 @@ status_t AudioStreamInGeneric::set( int fd, int format, int channels, - uint32_t rate, - AudioSystem::audio_in_acoustics acoustics) + uint32_t rate) { // FIXME: remove logging LOGD("AudioStreamInGeneric::set(%p, %d, %d, %d, %u)", hw, fd, format, channels, rate); diff --git a/libs/audioflinger/AudioHardwareGeneric.h b/libs/audioflinger/AudioHardwareGeneric.h index c949aa1..64e0396 100644 --- a/libs/audioflinger/AudioHardwareGeneric.h +++ b/libs/audioflinger/AudioHardwareGeneric.h -69,8 +69,7 @@ public: int mFd, int format, int channelCount, - uint32_t sampleRate, - AudioSystem::audio_in_acoustics acoustics); + uint32_t sampleRate); uint32_t sampleRate() const { return 8000; } virtual size_t bufferSize() const { return 320; } -115,8 +114,7 @@ public: int format, int channelCount, uint32_t sampleRate, - status_t *status, - AudioSystem::audio_in_acoustics acoustics); + status_t *status); void closeOutputStream(AudioStreamOutGeneric* out); void closeInputStream(AudioStreamInGeneric* in); diff --git a/libs/audioflinger/AudioHardwareStub.cpp b/libs/audioflinger/AudioHardwareStub.cpp index b13cb1c..683af04 100644 --- a/libs/audioflinger/AudioHardwareStub.cpp +++ b/libs/audioflinger/AudioHardwareStub.cpp -57,10 +57,10 @@ AudioStreamOut* AudioHardwareStub::openOutputStream( AudioStreamIn* AudioHardwareStub::openInputStream( int format, int channelCount, uint32_t sampleRate, - status_t *status, AudioSystem::audio_in_acoustics acoustics) + status_t *status) { AudioStreamInStub* in = new AudioStreamInStub(); - status_t lStatus = in->set(format, channelCount, sampleRate, acoustics); + status_t lStatus = in->set(format, channelCount, sampleRate); if (status) { *status = lStatus; } -143,8 +143,7 @@ status_t AudioStreamOutStub::dump(int fd, const Vector& args) // ---------------------------------------------------------------------------- -status_t AudioStreamInStub::set(int format, int channels, uint32_t rate, - AudioSystem::audio_in_acoustics acoustics) +status_t AudioStreamInStub::set(int format, int channels, uint32_t rate) { if ((format == AudioSystem::PCM_16_BIT) && (channels == channelCount()) && diff --git a/libs/audioflinger/AudioHardwareStub.h b/libs/audioflinger/AudioHardwareStub.h index d406424..24736ed 100644 --- a/libs/audioflinger/AudioHardwareStub.h +++ b/libs/audioflinger/AudioHardwareStub.h -43,7 +43,7 @@ public: class AudioStreamInStub : public AudioStreamIn { public: - virtual status_t set(int format, int channelCount, uint32_t sampleRate, AudioSystem::audio_in_acoustics acoustics); + virtual status_t set(int format, int channelCount, uint32_t sampleRate); virtual uint32_t sampleRate() const { return 8000; } virtual size_t bufferSize() const { return 320; } virtual int channelCount() const { return 1; } -81,8 +81,7 @@ public: int format, int channelCount, uint32_t sampleRate, - status_t *status, - AudioSystem::audio_in_acoustics acoustics); + status_t *status); protected: virtual status_t doRouting() { return NO_ERROR; } diff --git a/libaudio/AudioHardware.cpp b/libaudio/AudioHardware.cpp index 0ece3f7..88dd46f 100644 --- a/libaudio/AudioHardware.cpp +++ b/libaudio/AudioHardware.cpp -36,12 +36,51 @@ #define LOG_SND_RPC 0 // Set to 1 to log sound RPC's namespace android { -static int audpre_index, tx_iir_index; -static void * acoustic; const uint32_t AudioHardware::inputSamplingRates[] = { 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }; + + + // ---------------------------------------------------------------------------- +static int snd_get_endpoint( int cnt,msm_snd_endpoint * ept) +{ + int fd; + int status; + fd = open("/dev/msm_snd",O_RDWR); + if (fd < 0) + { + perror("Cannot open msm_snd device"); + close(fd); + return -1; + } + status = ioctl(fd,SND_GET_ENDPOINT, ept); + close(fd); + return status; +} + +static int snd_get_num() +{ + int fd; + int status; + int mNumSndEndpoints; + fd = open("/dev/msm_snd",O_RDWR); + if (fd < 0) + { + perror("Cannot open msm_snd device"); + return -1; + } + + if(ioctl(fd,SND_GET_NUM_ENDPOINTS,&mNumSndEndpoints)<0 ) + { + perror("get number of endpoints error"); + close(fd); + return -1; + } + close(fd); + return mNumSndEndpoints; + +} AudioHardware::AudioHardware() : mInit(false), mMicMute(true), mBluetoothNrec(true), mBluetoothId(0), -54,44 +93,22 @@ AudioHardware::AudioHardware() : SND_DEVICE_HEADSET(-1), SND_DEVICE_HEADSET_AND_SPEAKER(-1) { - - int (*snd_get_num)(); - int (*snd_get_endpoint)(int, msm_snd_endpoint *); - int (*set_acoustic_parameters)(); + LOGE("inside AudioHardware::AudioHardware()"); + //int snd_get_num(); + //int snd_get_endpoint(int cnt,msm_snd_endpoint *ept); + //int (*snd_get_num)(); + //int (*snd_get_endpoint)(int, msm_snd_endpoint *); struct msm_snd_endpoint *ept; - - acoustic = ::dlopen("/system/lib/libhtc_acoustic.so", RTLD_NOW); - if (acoustic == NULL ) { - LOGE("Could not open libhtc_acoustic.so"); - return; - } - - set_acoustic_parameters = (int (*)(void))::dlsym(acoustic, "set_acoustic_parameters"); - if ((*set_acoustic_parameters) == 0 ) { - LOGE("Could not open set_acoustic_parameters()"); - return; - } - - int rc = set_acoustic_parameters(); - if (rc < 0) { - LOGE("Could not set acoustic parameters to share memory: %d", rc); -// return; - } - - snd_get_num = (int (*)(void))::dlsym(acoustic, "snd_get_num_endpoints"); - if ((*snd_get_num) == 0 ) { - LOGE("Could not open snd_get_num()"); -// return; - } - + LOGE("before"); mNumSndEndpoints = snd_get_num(); + LOGE("after"); LOGD("mNumSndEndpoints = %d", mNumSndEndpoints); mSndEndpoints = new msm_snd_endpoint[mNumSndEndpoints]; mInit = true; LOGV("constructed %d SND endpoints)", mNumSndEndpoints); - ept = mSndEndpoints; - snd_get_endpoint = (int (*)(int, msm_snd_endpoint *))::dlsym(acoustic, "snd_get_endpoint"); + ept = mSndEndpoints; //LOOK AT mSndEndpoints type... + if ((*snd_get_endpoint) == 0 ) { LOGE("Could not open snd_get_endpoint()"); return; -121,7 +138,6 @@ AudioHardware::~AudioHardware() delete mInput; delete mOutput; delete [] mSndEndpoints; - ::dlclose(acoustic); mInit = false; } -168,8 +184,7 @@ void AudioHardware::closeOutputStream(AudioStreamOutMSM72xx* out) { } AudioStreamIn* AudioHardware::openInputStream( - int format, int channelCount, uint32_t sampleRate, status_t *status, - AudioSystem::audio_in_acoustics acoustic_flags) + int format, int channelCount, uint32_t sampleRate, status_t *status) { mLock.lock(); // input stream already open? -182,7 +197,7 @@ AudioStreamIn* AudioHardware::openInputStream( } AudioStreamInMSM72xx* in = new AudioStreamInMSM72xx(); - status_t lStatus = in->set(this, format, channelCount, sampleRate, acoustic_flags); + status_t lStatus = in->set(this, format, channelCount, sampleRate); if (status) { *status = lStatus; } -449,6 +464,42 @@ static int count_bits(uint32_t vector) return bits; } +static int msm72xx_enable_audpp (uint16_t enable_mask) +{ + int fd; + +// if (!audpp_filter_inited) +// return -1; + + fd = open ("/dev/msm_pcm_ctl", O_RDWR); + if (fd < 0) + { + perror ("Cannot open audio device"); + return -1; + } + + if (enable_mask & ADRC_ENABLE) + enable_mask &= ~ADRC_ENABLE; + if (enable_mask & EQ_ENABLE) + enable_mask &= ~EQ_ENABLE; + if (enable_mask & RX_IIR_ENABLE) + enable_mask &= ~RX_IIR_ENABLE; + + printf ("msm72xx_enable_audpp: 0x%04x", enable_mask); + if (ioctl (fd, AUDIO_ENABLE_AUDPP, &enable_mask) < 0) + { + perror ("enable audpp error"); + close (fd); + return -1; + } + + close (fd); + return 0; +} + + + + status_t AudioHardware::doRouting() { Mutex::Autolock lock(mLock); -460,8 +511,7 @@ status_t AudioHardware::doRouting() " picking closest possible route...", routes); } } - int (*msm72xx_enable_audpp)(int); - msm72xx_enable_audpp = (int (*)(int))::dlsym(acoustic, "msm72xx_enable_audpp"); + status_t ret = NO_ERROR; if (routes & AudioSystem::ROUTE_BLUETOOTH_SCO) { LOGI("Routing audio to Bluetooth PCM\n"); -700,14 +750,12 @@ bool AudioHardware::AudioStreamOutMSM72xx::checkStandby() AudioHardware::AudioStreamInMSM72xx::AudioStreamInMSM72xx() : mHardware(0), mFd(-1), mState(AUDIO_INPUT_CLOSED), mRetryCount(0), mFormat(AUDIO_HW_IN_FORMAT), mChannelCount(AUDIO_HW_IN_CHANNELS), - mSampleRate(AUDIO_HW_IN_SAMPLERATE), mBufferSize(AUDIO_HW_IN_BUFFERSIZE), - mAcoustics((AudioSystem::audio_in_acoustics)0) + mSampleRate(AUDIO_HW_IN_SAMPLERATE), mBufferSize(AUDIO_HW_IN_BUFFERSIZE) { } status_t AudioHardware::AudioStreamInMSM72xx::set( - AudioHardware* hw, int format, int channelCount, uint32_t sampleRate, - AudioSystem::audio_in_acoustics acoustic_flags) + AudioHardware* hw, int format, int channelCount, uint32_t sampleRate) { LOGV("AudioStreamInMSM72xx::set(%d, %d, %u)", format, channelCount, sampleRate); if (mFd >= 0) { -763,26 +811,7 @@ status_t AudioHardware::AudioStreamInMSM72xx::set( mHardware = hw; mHardware->setMicMute_nosync(false); mState = AUDIO_INPUT_OPENED; - audpre_index = calculate_audpre_table_index(sampleRate); - tx_iir_index = (audpre_index * 2) + (hw->checkOutputStandby() ? 0 : 1); - LOGD("audpre_index = %d, tx_iir_index = %d\n", audpre_index, tx_iir_index); - - /** - * If audio-preprocessing failed, we should not block record. - */ - int (*msm72xx_set_audpre_params)(int, int); - msm72xx_set_audpre_params = (int (*)(int, int))::dlsym(acoustic, "msm72xx_set_audpre_params"); - status = msm72xx_set_audpre_params(audpre_index, tx_iir_index); - if (status < 0) - LOGE("Cannot set audpre parameters"); - - int (*msm72xx_enable_audpre)(int, int, int); - msm72xx_enable_audpre = (int (*)(int, int, int))::dlsym(acoustic, "msm72xx_enable_audpre"); - mAcoustics = acoustic_flags; - status = msm72xx_enable_audpre((int)acoustic_flags, audpre_index, tx_iir_index); - if (status < 0) - LOGE("Cannot enable audpre"); - + return NO_ERROR; Error: -811,7 +840,7 @@ ssize_t AudioHardware::AudioStreamInMSM72xx::read( void* buffer, ssize_t bytes) uint8_t* p = static_cast(buffer); if (mState < AUDIO_INPUT_OPENED) { - if (set(mHardware, mFormat, mChannelCount, mSampleRate, mAcoustics) != NO_ERROR) { + if (set(mHardware, mFormat, mChannelCount, mSampleRate) != NO_ERROR) { return -1; } } diff --git a/libaudio/AudioHardware.h b/libaudio/AudioHardware.h index 047bad3..2111e16 100644 --- a/libaudio/AudioHardware.h +++ b/libaudio/AudioHardware.h -128,8 +128,8 @@ public: int format, int channelCount, uint32_t sampleRate, - status_t *status, - AudioSystem::audio_in_acoustics acoustics); + status_t *status + ); void closeOutputStream(AudioStreamOutMSM72xx* out); void closeInputStream(AudioStreamInMSM72xx* in); -190,8 +190,8 @@ private: status_t set(AudioHardware* mHardware, int format, int channelCount, - uint32_t sampleRate, - AudioSystem::audio_in_acoustics acoustics); + uint32_t sampleRate + ); virtual size_t bufferSize() const { return mBufferSize; } virtual int channelCount() const { return mChannelCount; } virtual int format() const { return mFormat; } -210,7 +210,7 @@ private: int mChannelCount; uint32_t mSampleRate; size_t mBufferSize; - AudioSystem::audio_in_acoustics mAcoustics; + }; static const uint32_t inputSamplingRates[]; }}} The RIL (radio library) can be replaced with the Openmoko RIL. Use the following patch to enable phone-unlock PIN entry (FIXME: add information on where to get OpenMoko RIL and how to add it to Android build): {{{ Index: replicant/hardware/ril/reference-ril/reference-ril.c =================================================================== --- replicant.orig/hardware/ril/reference-ril/reference-ril.c +++ replicant/hardware/ril/reference-ril/reference-ril.c -1152,7 +1152,7 @@ static void requestEnterSimPin(void* d } else goto error; - err = at_send_command_singleline(cmd, "+CPIN:", &p_response); + err = at_send_command(cmd, &p_response); free(cmd); if (err < 0 || p_response->success == 0) { -1802,6 +1802,13 @@ static void onUnsolicited (const char *s /* Ignore unsolicited responses until we're initialized. * This is OK because the RIL library will poll for initial state */ + if(strStartsWith(s, "+PB_READY") ) { + setRadioState(RADIO_STATE_SIM_READY); + LOGD("REMOVE_THAT: SIM IS READY\n"); + return; + //sim is now ready + } + if (sState == RADIO_STATE_UNAVAILABLE) { return; } }}} Build process: Let's say that our build directory is ~/replicant * Add that file: {{{ TARGET_PRODUCT := htc_dream }}} To ~/replicant/buildspec.mk * Then type {{{ cd ~/replicant export ANDROID_JAVA_HOME=$JAVA_HOME make }}} * The files to flash are in ~/replicant/out/target/product/dream,flash them and then clear the cache * boot and push the wifi firmware if you want it == Status == * web browser crashes * ril seem to work(I made some calls and received sms,but can't receive calls) * sound on the application cpu(the baseband cpu has sound too) now works