Announcements
IMPORTANT: Cypress Developer Community is transitioning on October 20th. To learn more and be prepared for this change, check out our latest announcement.
cancel
Showing results for 
Search instead for 
Did you mean: 

PSoC Creator & Designer Software

RyYo_1406951
Contributor II

PSoCCreatorにより自動生成されるファイル(CapSense_Control.c・CapSense_Control.hなど)を書き換えたいです。

しかし、ビルド後に書いたコードが消えることがあります。

書きかえたコードが消えないようにするにはどのようにすべきでしょうか?

コードはmain.cファイルなどに書くべきでしょうか?

0 Likes
1 Solution
HirotakaT_91
Moderator
Moderator

ご連絡が遅くなり申し訳ございません。

現在、サンプルコードはございません。

PSoCを専門とするエンジニアと話をした結果、CapSense_Filter.cにて複数のAPIを自身で作成するのが良い手段となりましたので報告致します。

☆作成するAPI

CapSense_UpdateAllBaselines_custom()

CapSense_UpdateWidgetBaseline_custom()

CapSense_UpdateSensorBaseline_custom()

CapSense_FtUpdateBaseline_custom()

CapSense_FtIIR1stOrder_custom()

☆解説

新たに作成された _custom() というAPIは既存のものではないため、書き換えが行われません。

そのため、この方法で書き換えられないようにすることが可能です。

_custom() APIの中身はオリジナルのAPI群とほぼ同様で、違う部分は Re: CapSense auto reset でお伝えしてある部分です。

よろしくお願い致します。

Hirotaka Takayama

View solution in original post

0 Likes
4 Replies
HirotakaT_91
Moderator
Moderator

main.cでコード記述を行うことを推奨致します。

例として以下のスレッドで自動生成ファイルの書き換え例がありますが、ご理解いただいている通り、コンポーネント構成の変更等の後に変更が書き換えられる可能性があります。

Re: CapSense auto reset

Hirotaka Takayama

0 Likes
RyYo_1406951
Contributor II

追加で確認させてください。

Re: CapSense auto reset

上記スレッド、以下の自動生成されたAPI内のコードを書き換えています。

3. CapSense_Filter.cのCapSense_FtUpdateBaselineの一部を変更します。

#if (CapSense_BASELINE_TYPE == CapSense_IIR_BASELINE)

    /* Calculate baseline value */

    if ((CapSense_WD_TYPE_ENUM)wdType != CapSense_WD_PROXIMITY_E)

    {

          #if (CapSense_REGULAR_SENSOR_EN)

              #if (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE)

                    history = (uint32) ptrSensor->bsln[freqChannel] << 10u;

                    history |= ptrSensor->bslnExt[freqChannel];

              #else

                    history = ptrSensor->bsln[freqChannel];

              #endif /* (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE) */

              #if (CapSense_ENABLE == CapSense_WD_BSLN_COEFF_EN)

                    baselineCoeff = ptrWidgetRam->bslnCoeff;

              #else /* (CapSense_ENABLE == CapSense_WD_BSLN_COEFF_EN) */

                    baselineCoeff = CapSense_REGULAR_IIR_BL_N;

              #endif /* (CapSense_ENABLE == CapSense_WD_BSLN_COEFF_EN) */

              history = CapSense_FtIIR1stOrder_custom((uint32)ptrSensor->raw[freqChannel], history, baselineCoeff, CapSense_REGULAR_IIR_BL_SHIFT);

             

              #if (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE)

                    ptrSensor->bsln[freqChannel] = LO16(history >> 10u);

                    ptrSensor->bslnExt[freqChannel] = LO16(history & 0x03FF);

              #else

                    ptrSensor->bsln[freqChannel] = LO16(history);

              #endif /* (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE) */

          #endif /* (CapSense_REGULAR_SENSOR_EN) */

}

この場合、どのようにmain.cにコード書くべきでしょうか?

main.cにそのまま、同じコード(CapSense_FtUpdateBaseline)を書けばいいのでしょうか?

0 Likes
HirotakaT_91
Moderator
Moderator

ご連絡が遅くなり申し訳ございません。

現在、サンプルコードはございません。

PSoCを専門とするエンジニアと話をした結果、CapSense_Filter.cにて複数のAPIを自身で作成するのが良い手段となりましたので報告致します。

☆作成するAPI

CapSense_UpdateAllBaselines_custom()

CapSense_UpdateWidgetBaseline_custom()

CapSense_UpdateSensorBaseline_custom()

CapSense_FtUpdateBaseline_custom()

CapSense_FtIIR1stOrder_custom()

☆解説

新たに作成された _custom() というAPIは既存のものではないため、書き換えが行われません。

そのため、この方法で書き換えられないようにすることが可能です。

_custom() APIの中身はオリジナルのAPI群とほぼ同様で、違う部分は Re: CapSense auto reset でお伝えしてある部分です。

よろしくお願い致します。

Hirotaka Takayama

View solution in original post

0 Likes
RyYo_1406951
Contributor II

回答ありがとうございます。

動作確認いたします。

0 Likes