/*
 * RDA5807_TP_Key_In.c
 *
 *  Created on: 2026/02/05
 *      Author: egaono-electronics
 */

#include "RDA5807_TP_Key_In.h"

#include "ILI9341_SPI_Draw.h"

#include "RDA5807_TP_Save_Load.h"


#include <stdio.h>
#include <string.h>



//----------------------------------------------------------
// RDA5807 I2C の TP SWの値を設定
//----------------------------------------------------------
// 引数;
// struct sParam_Adjust_TP *pstructParam_Adjust_TP :
//          タッチパネル位置調整用パラメータ構造体のポインタ

// struct sParam_TP_SW *pstructParam_TP_SW :
//          タッチパネルスイッチ用パラメータの構造体のポインタ


// 戻り値;
//    なし
//----------------------------------------------------------
void Set_TP_SW_Value_RDA5807_I2C(
            struct sParam_Adjust_TP *pstructParam_Adjust_TP,
            struct sParam_TP_SW *pstructParam_TP_SW)
{
  int16_t int16_I;


  // VOL- : Volume-
  pstructParam_TP_SW->
    int16_aPos_X_Draw_TP_SW[(int16_t)def_Num_TP_SW_VOLM]
                 = (int16_t)def_Pos_X_TP_SW_VOLM;

  pstructParam_TP_SW->
    int16_aPos_Y_Draw_TP_SW[(int16_t)def_Num_TP_SW_VOLM]
                 = (int16_t)def_Pos_Y_TP_SW_VOLM;

  pstructParam_TP_SW->
    int16_aWidth_TP_SW[(int16_t)def_Num_TP_SW_VOLM]
        = (int16_t)def_Width_Button_Key_In
        * (int16_t)strlen((char *)def_aStr_TP_SW_VOLM);

  pstructParam_TP_SW->
    int16_aHeight_TP_SW[(int16_t)def_Num_TP_SW_VOLM]
              = (int16_t)def_Height_Button_Key_In;

  strcpy((char *)pstructParam_TP_SW->
    uint8_aDraw_Data_TP_SW[(int16_t)def_Num_TP_SW_VOLM],
                    (char *)def_aStr_TP_SW_VOLM);



  // VOL+ : Volume+
  pstructParam_TP_SW->
    int16_aPos_X_Draw_TP_SW[(int16_t)def_Num_TP_SW_VOLP]
                 = (int16_t)def_Pos_X_TP_SW_VOLP;

  pstructParam_TP_SW->
    int16_aPos_Y_Draw_TP_SW[(int16_t)def_Num_TP_SW_VOLP]
                 = (int16_t)def_Pos_Y_TP_SW_VOLP;

  pstructParam_TP_SW->
    int16_aWidth_TP_SW[(int16_t)def_Num_TP_SW_VOLP]
        = (int16_t)def_Width_Button_Key_In
        * (int16_t)strlen((char *)def_aStr_TP_SW_VOLP);

  pstructParam_TP_SW->
    int16_aHeight_TP_SW[(int16_t)def_Num_TP_SW_VOLP]
              = (int16_t)def_Height_Button_Key_In;

  strcpy((char *)pstructParam_TP_SW->
    uint8_aDraw_Data_TP_SW[(int16_t)def_Num_TP_SW_VOLP],
                    (char *)def_aStr_TP_SW_VOLP);



  // CH- : Channel-
  pstructParam_TP_SW->
    int16_aPos_X_Draw_TP_SW[(int16_t)def_Num_TP_SW_CHM]
                 = (int16_t)def_Pos_X_TP_SW_CHM;

  pstructParam_TP_SW->
    int16_aPos_Y_Draw_TP_SW[(int16_t)def_Num_TP_SW_CHM]
                 = (int16_t)def_Pos_Y_TP_SW_CHM;

  pstructParam_TP_SW->
    int16_aWidth_TP_SW[(int16_t)def_Num_TP_SW_CHM]
        = (int16_t)def_Width_Button_Key_In
        * (int16_t)strlen((char *)def_aStr_TP_SW_CHM);

  pstructParam_TP_SW->
    int16_aHeight_TP_SW[(int16_t)def_Num_TP_SW_CHM]
              = (int16_t)def_Height_Button_Key_In;

  strcpy((char *)pstructParam_TP_SW->
    uint8_aDraw_Data_TP_SW[(int16_t)def_Num_TP_SW_CHM],
                    (char *)def_aStr_TP_SW_CHM);



  // CH+ : Channel+
  pstructParam_TP_SW->
    int16_aPos_X_Draw_TP_SW[(int16_t)def_Num_TP_SW_CHP]
                 = (int16_t)def_Pos_X_TP_SW_CHP;

  pstructParam_TP_SW->
    int16_aPos_Y_Draw_TP_SW[(int16_t)def_Num_TP_SW_CHP]
                 = (int16_t)def_Pos_Y_TP_SW_CHP;

  pstructParam_TP_SW->
    int16_aWidth_TP_SW[(int16_t)def_Num_TP_SW_CHP]
        = (int16_t)def_Width_Button_Key_In
        * (int16_t)strlen((char *)def_aStr_TP_SW_CHP);

  pstructParam_TP_SW->
    int16_aHeight_TP_SW[(int16_t)def_Num_TP_SW_CHP]
              = (int16_t)def_Height_Button_Key_In;

  strcpy((char *)pstructParam_TP_SW->
    uint8_aDraw_Data_TP_SW[(int16_t)def_Num_TP_SW_CHP],
                    (char *)def_aStr_TP_SW_CHP);



  // PWM : Power
  pstructParam_TP_SW->
    int16_aPos_X_Draw_TP_SW[(int16_t)def_Num_TP_SW_PWR]
                 = (int16_t)def_Pos_X_TP_SW_PWR;

  pstructParam_TP_SW->
    int16_aPos_Y_Draw_TP_SW[(int16_t)def_Num_TP_SW_PWR]
                 = (int16_t)def_Pos_Y_TP_SW_PWR;

  pstructParam_TP_SW->
    int16_aWidth_TP_SW[(int16_t)def_Num_TP_SW_PWR]
        = (int16_t)def_Width_Button_Key_In
        * (int16_t)strlen((char *)def_aStr_TP_SW_PWR);

  pstructParam_TP_SW->
    int16_aHeight_TP_SW[(int16_t)def_Num_TP_SW_PWR]
              = (int16_t)def_Height_Button_Key_In;

  strcpy((char *)pstructParam_TP_SW->
    uint8_aDraw_Data_TP_SW[(int16_t)def_Num_TP_SW_PWR],
                    (char *)def_aStr_TP_SW_PWR);



  for(int16_I = 0;
            int16_I <= def_Num_TP_SW_PWR; int16_I++){
    pstructParam_TP_SW->uint16_aFont_TP_SW[int16_I]
                            = (uint16_t)def_Font_ASCII_16x16;
    pstructParam_TP_SW->uint32_aColor_TP_SW[int16_I]
                        = (uint32_t)def_Color_TP_SW_RDA5807;
  }



  //------------------------------------------------------------
  // タッチパネル上のスイッチのXY位置を算出 : RDA5807 I2C
  //------------------------------------------------------------
  // タッチパネル上のスイッチ位置を保存する
  //                    グローバル変数にセットする。
  //------------------------------------------------------------
  // 引数:
  // int16_t int16_Num_SW_Start : 開始スイッチ番号
  // int16_t int16_Num_SW_End : 終了スイッチ番号

  // struct sParam_Adjust_TP *pstructParam_Adjust_TP :
  //            タッチパネル位置調整用パラメータ構造体のポインタ

  // struct sParam_TP_SW *pstructParam_TP_SW :
  //            タッチパネルスイッチ用パラメータの構造体のポインタ


  // 戻り値;
  //    なし
  //------------------------------------------------------------
  Calc_TP_SW_XY((int16_t)def_Num_TP_SW_VOLM,
                (int16_t)def_Num_TP_SW_PWR,
                pstructParam_Adjust_TP,
                pstructParam_TP_SW);
}



//----------------------------------------------------------
// Switch表示
//----------------------------------------------------------
// 引数;
// uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

// struct sParam_TP_SW *pstructParam_TP_SW :
//          タッチパネルスイッチ用パラメータの構造体のポインタ


// 戻り値;
//   -1 : 処理中
//    0 : OK終了
//    1 : NG終了
//----------------------------------------------------------
int16_t Print_Switch(uint8_t *puint8_JobNum,
            struct sParam_TP_SW *pstructParam_TP_SW)
{
  static uint8_t STC_uint8_JobNum_LCD;


  int16_t int16_I;
  int16_t int16_Return;


  switch(*puint8_JobNum)
  {
  case 0:
    STC_uint8_JobNum_LCD = 0;  // LCD表示処理番号初期化


    //----------------------------------------------------------
    // RDA5807 I2C の TP SWの値を設定
    //----------------------------------------------------------
    // 引数;
    // struct sParam_Adjust_TP *pstructParam_Adjust_TP :
    //          タッチパネル位置調整用パラメータ構造体のポインタ

    // struct sParam_TP_SW *pstructParam_TP_SW :
    //          タッチパネルスイッチ用パラメータの構造体のポインタ


    // 戻り値;
    //    なし
    //----------------------------------------------------------
    Set_TP_SW_Value_RDA5807_I2C(&GLB_structParam_Adjust_TP,
                                  &GLB_structParam_TP_SW);


    // TP検出フラグクリア
    for(int16_I = 0;
        int16_I < (int16_t)def_Max_Number_of_TP_SW; int16_I++){
      pstructParam_TP_SW->int16_aFlag_Detect_TP_SW[int16_I] = 0;
    }

    // TP検出フラグセット
    for(int16_I = 0;
        int16_I <= (int16_t)def_Num_TP_SW_RDA5807_I2C; int16_I++){
      pstructParam_TP_SW->int16_aFlag_Detect_TP_SW[int16_I] = 1;
    }


    (*puint8_JobNum)++;  // 次の処理番号に移行する。
    int16_Return = -1;   // 処理継続
    break;

  case 1:
    //----------------------------------------------------------
    // タッチパネルのスイッチ表示 :
    //   開始スイッチ番号から終了スイッチ番号までを表示する。
    //----------------------------------------------------------
    // 引数;
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // int16_t int16_Num_SW_Start : 開始スイッチ番号
    // int16_t int16_Num_SW_End : 終了スイッチ番号

    // uint8_t uint8_R : 反転表示フラグ
    //    0 : 通常表示
    //    1 : 反転表示

    // 戻り値;
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //----------------------------------------------------------
    int16_Return = Print_TP_SW_Num(&STC_uint8_JobNum_LCD,
                               (int16_t)def_Num_TP_SW_VOLM,
                               (int16_t)def_Num_TP_SW_PWR,
                                   (uint8_t)0);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    *puint8_JobNum = 0;  // 処理番号初期化
    int16_Return = 0;    // OK終了
    break;

  default:
    *puint8_JobNum = 0;  // 処理番号初期化
    int16_Return = -1;   // NG
    break;
  }

  return(int16_Return);
}
