/*
 * ILI9341_SPI_Init.c
 *
 *  Created on: 2025/04/24
 *      Author: egaono-electronics
 */

#include "ILI9341_SPI_Init.h"

#include def_H_Periph_SPI

#include "H_Common_STM32F4_SPI.h"

#include "ILI9341_SPI_Draw.h"
#include "Time_Interval.h"



//----------------------------------------------------------
// ILI9341初期化
//----------------------------------------------------------
// 引数;
// uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ


// 戻り値;
//   -1 : 処理中
//    0 : OK
//    1 : NG
//----------------------------------------------------------
int16_t ILI9341_Initialize(uint8_t *puint8_JobNum)
{
  //----------------------------------------------------
  // 呼び出す関数の引数に使用する処理番号は、
  // 必ず static の変数宣言をしてください。
  //----------------------------------------------------
  static uint8_t STC_uint8_JobNum_Time;  // Time_Interval処理番号

  //--------------------------------------------------------
  // Time_Interval用パラメータの構造体の宣言は、
  // 使用する関数内で、必ず static で宣言してください。
  //--------------------------------------------------------
  // Time_Interval用パラメータの構造体の宣言
  //--------------------------------------------------------
  static struct sParam_Time_Interval STC_structParam_Time_Interval;


  static uint8_t STC_uint8_JobNum_Ini;  // 初期化処理番号

  static uint8_t STC_uint8_Address;
  static uint16_t STC_uint16_DataLength;
  static uint8_t STC_uint8_aData[32];


  GPIO_InitTypeDef GPIO_InitStructure;


  int16_t int16_Return;


  switch(*puint8_JobNum)
  {
  case 0:
    STC_uint8_JobNum_Ini = 0;  // 初期化処理番号初期化


    //----------------------------------------------------------
    // SPIx : Handle SPI用パラメータの構造体を初期化
    //----------------------------------------------------------
    // 引数;
    // uint8_t *puint8_aSPI_TxBuffer : SPI送信Bufferのポインタ
    // uint8_t *puint8_aSPI_RxBuffer : SPI受信Bufferのポインタ

    // struct sParam_Handle_SPIx  *pstructParam_Handle_SPIx
    //              Handle SPI用パラメータの構造体のポインタ


    // 戻り値;
    //    なし
    //----------------------------------------------------------
    Initialize_Parameter_SPIx(GLB_uint8_aSPI1_TxBuffer,
                              GLB_uint8_aSPI1_RxBuffer,
                              &GLB_structParam_Handle_SPI1);


    //----------------------------------
    // Initialize SPI 1 : Master
    //----------------------------------
    //----------------------------------------------------------
    // SPIx 初期化
    //----------------------------------------------------------
    // 引数;
    // SPI_TypeDef *SPIx :
    //      where x can be 1 or 2 to select the SPI peripheral.
    // SPI_HandleTypeDef *pSpiHandle : SPI handler declaration

    // uint32_t uint32_SPI_Mode :
    //                  SPI_MODE_MASTER or SPI_MODE_SLAVE

    // uint32_t uint32_BaudRatePrescaler : SPIクロック 分周設定

    // uint16_t uint16_SPI_CLKPolarityL :
    //  clock polarity : SPI_POLARITY_LOW or SPI_POLARITY_HIGH


    // 戻り値;
    //    0 : OK
    //    1 : NG
    //----------------------------------------------------------
    Initialize_SPIx(SPI1,
                    &Handle_SPI1,
                    SPI_MODE_MASTER,
                    def_SPI_BAUDRATEPRESCALER_x,  // SPI_SCK : 10MHz
                    SPI_POLARITY_LOW);


    //--------------------------------------------------
    // LCD : LEDピン : BackLight制御ピン初期化
    //--------------------------------------------------
    // LEDピンを出力に設定
    __HAL_RCC_GPIOA_CLK_ENABLE();

    GPIO_InitStructure.Pin = def_GPIO_PIN_x_LCD_LED;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Pull = GPIO_NOPULL;
    GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;

    HAL_GPIO_Init(def_GPIOx_LCD_LED, &GPIO_InitStructure);

    // LCD : LEDピンに 1  を出力 : BackLight LED ON
    HAL_GPIO_WritePin(def_GPIOx_LCD_LED,
                      def_GPIO_PIN_x_LCD_LED,
                      GPIO_PIN_SET);


    //--------------------------------------------------
    // LCD : DCピン初期化
    //--------------------------------------------------
    // DCピンを出力に設定
    __HAL_RCC_GPIOC_CLK_ENABLE();

    GPIO_InitStructure.Pin = def_GPIO_PIN_x_LCD_DC;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Pull = GPIO_NOPULL;
    GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;

    HAL_GPIO_Init(def_GPIOx_LCD_DC, &GPIO_InitStructure);

    // LCD : DCピンに 0 を出力 : Command
    HAL_GPIO_WritePin(def_GPIOx_LCD_DC,
                      def_GPIO_PIN_x_LCD_DC,
                      GPIO_PIN_RESET);


    //--------------------------------------------------
    // LCD : Resetピン初期化
    //--------------------------------------------------
    // Resetピンを出力に設定
    __HAL_RCC_GPIOA_CLK_ENABLE();

    GPIO_InitStructure.Pin = def_GPIO_PIN_x_LCD_Reset;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Pull = GPIO_NOPULL;
    GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;

    HAL_GPIO_Init(def_GPIOx_LCD_Reset, &GPIO_InitStructure);


    //--------------------------------------------------
    // Reset LCD
    //--------------------------------------------------
    // LCD : Resetピンに 1 を出力
    HAL_GPIO_WritePin(def_GPIOx_LCD_Reset,
                      def_GPIO_PIN_x_LCD_Reset,
                      GPIO_PIN_SET);


    STC_uint8_JobNum_Time = 0;  // Time_Interval処理番号初期化
    STC_structParam_Time_Interval.uint32_Interval = (uint32_t)2;
                                    // 待ち時間セット : 2mSec


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

  case 1:
    //----------------------------------------------------------
    // 時間待ち : 2mSec
    //----------------------------------------------------------
    //----------------------------------------------------------
    // 時間待ち : 単位 mSec
    //----------------------------------------------------------
    // 戻り値が -1 以外になるまで、繰り返し呼び出してください。
    //----------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // struct sParam_Time_Interval *pstructParam_Time_Interval :
    //              Time_Interval用パラメータの構造体のポインタ


    // 戻り値:
    //   -1 : 処理中 : 時間が経過していない。
    //    0 : OK終了 : 時間が経過した。
    //    1 : NG終了
    //----------------------------------------------------------
    int16_Return = Time_Interval(&STC_uint8_JobNum_Time,
                                 &STC_structParam_Time_Interval);
    if(int16_Return == -1){
      // 処理中 : 時間が経過していない。
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    // LCD : Resetピンに 0 を出力
    HAL_GPIO_WritePin(def_GPIOx_LCD_Reset,
                      def_GPIO_PIN_x_LCD_Reset,
                      GPIO_PIN_RESET);


    STC_uint8_JobNum_Time = 0;  // Time_Interval処理番号初期化
    STC_structParam_Time_Interval.uint32_Interval = (uint32_t)10;
                                // 待ち時間セット : 10mSec


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

  case 2:
    //----------------------------------------------------------
    // 時間待ち : 10mSec
    //----------------------------------------------------------
    int16_Return = Time_Interval(&STC_uint8_JobNum_Time,
                                 &STC_structParam_Time_Interval);
    if(int16_Return == -1){
      // 処理中 : 時間が経過していない。
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    // LCD : Resetピンに 1 を出力
    HAL_GPIO_WritePin(def_GPIOx_LCD_Reset,
                      def_GPIO_PIN_x_LCD_Reset,
                      GPIO_PIN_SET);


    STC_uint8_JobNum_Time = 0;  // Time_Interval処理番号初期化
    STC_structParam_Time_Interval.uint32_Interval = (uint32_t)100;
                                // 待ち時間セット : 100mSec


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

  case 3:
    //----------------------------------------------------------
    // 時間待ち : 100mSec
    //----------------------------------------------------------
    int16_Return = Time_Interval(&STC_uint8_JobNum_Time,
                                 &STC_structParam_Time_Interval);
    if(int16_Return == -1){
      // 処理中 : 時間が経過していない。
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------------------
    // LCD初期化
    //----------------------------------------------------------

    //----------------------------------------------
    // C0 レジスタ : Power Control 1
    //----------------------------------------------
    STC_uint8_Address = 0xC0;
    STC_uint16_DataLength = 2;
    STC_uint8_aData[0] = 0x23;
    STC_uint8_aData[1] = 0x00;


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

  case 4:
    //----------------------------------------------------------
    // ILI9341のRegister設定
    //----------------------------------------------------------
    // 引数;
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // int16_t int16_NSS_OnOff :
    //                      設定データ送信終了時NSS ON/OFF選択
    //    0 : 送信後 NSSをOFFにする。
    //    1 : 送信後 NSSをONのままにする。

    // uint8_t uint8_Address : Address of Register
    // uint16_t uint16_DataLength : 書き込みデータ数
    // uint8_t *puint8_aData :
    //          書き込みデータが格納されているBufferのポインタ

    // 戻り値;
    //   -1 : 処理中
    //    0 : OK
    //    1 : NG
    //----------------------------------------------------------
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------
    // C1 レジスタ : Power Control 2
    //----------------------------------------------
    STC_uint8_Address = 0xC1;
    STC_uint16_DataLength = 1;
    STC_uint8_aData[0] = 0x10;


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

  case 5:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------
    // C5 レジスタ : VCOM Control
    //----------------------------------------------
    STC_uint8_Address = 0xC5;
    STC_uint16_DataLength = 2;
    STC_uint8_aData[0] = 0x3E;
    STC_uint8_aData[1] = 0x28;


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

  case 6:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------
    // C7 レジスタ : VCOM Control 2
    //----------------------------------------------
    STC_uint8_Address = 0xC7;
    STC_uint16_DataLength = 1;
    STC_uint8_aData[0] = 0x86;


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

  case 7:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------
    // F7 レジスタ : Pump ratio control
    //----------------------------------------------
    STC_uint8_Address = 0xF7;
    STC_uint16_DataLength = 1;
    STC_uint8_aData[0] = 0x20;


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

  case 8:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------
    // 36 レジスタ : Memory Access Control
    //----------------------------------------------
    STC_uint8_Address = 0x36;
    STC_uint16_DataLength = 1;
    STC_uint8_aData[0] = 0xA0;  // WidthwiseLの場合


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

  case 9:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------
    // 3A レジスタ : Interface Pixel Format
    //----------------------------------------------
    STC_uint8_Address = 0x3A;
    STC_uint16_DataLength = 1;
    STC_uint8_aData[0] = 0x55;  // 16bits/pixel


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

  case 10:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------
    // B1 レジスタ : Frame Rate Control
    //----------------------------------------------
    STC_uint8_Address = 0xB1;
    STC_uint16_DataLength = 2;
    STC_uint8_aData[0] = 0x00;
    STC_uint8_aData[1] = 0x1A;


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

  case 11:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------
    // B6 レジスタ : Display Function Control
    //----------------------------------------------
    STC_uint8_Address = 0xB6;
    STC_uint16_DataLength = 3;
    STC_uint8_aData[0] = 0x0A;
    STC_uint8_aData[1] = 0x82;
    STC_uint8_aData[2] = 0x27;


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

  case 12:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------
    // F2 レジスタ : Enable 3G
    //----------------------------------------------
    STC_uint8_Address = 0xF2;
    STC_uint16_DataLength = 1;
    STC_uint8_aData[0] = 0x00;  // 3 gamma control disable


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

  case 13:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------
    // 26 レジスタ : Gamma Set
    //----------------------------------------------
    STC_uint8_Address = 0x26;
    STC_uint16_DataLength = 1;
    STC_uint8_aData[0] = 0x01;


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

  case 14:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //----------------------------------------------
    // 20 レジスタ : Display Inversion OFF
    //----------------------------------------------
    // 書き込みデータなし
    STC_uint8_Address = 0x20;
    STC_uint16_DataLength = 0;


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

  case 15:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //------------------------------------------------------
    // E0 レジスタ : PGAM CTRL(Positive Gamma Correction)
    //------------------------------------------------------
    STC_uint8_Address = 0xE0;
    STC_uint16_DataLength = 15;
    STC_uint8_aData[0] = 0x0F;
    STC_uint8_aData[1] = 0x2A;
    STC_uint8_aData[2] = 0x28;
    STC_uint8_aData[3] = 0x08;
    STC_uint8_aData[4] = 0x0E;
    STC_uint8_aData[5] = 0x08;
    STC_uint8_aData[6] = 0x54;
    STC_uint8_aData[7] = 0xA9;
    STC_uint8_aData[8] = 0x43;
    STC_uint8_aData[9] = 0x0A;
    STC_uint8_aData[10] = 0x0F;
    STC_uint8_aData[11] = 0x00;
    STC_uint8_aData[12] = 0x00;
    STC_uint8_aData[13] = 0x00;
    STC_uint8_aData[14] = 0x00;


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

  case 16:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    //------------------------------------------------------
    // E1 レジスタ : NGAM CTRL(Negative Gamma CorrectionE)
    //------------------------------------------------------
    STC_uint8_Address = 0xE1;
    STC_uint16_DataLength = 15;
    STC_uint8_aData[0] = 0x00;
    STC_uint8_aData[1] = 0x15;
    STC_uint8_aData[2] = 0x17;
    STC_uint8_aData[3] = 0x07;
    STC_uint8_aData[4] = 0x11;
    STC_uint8_aData[5] = 0x06;
    STC_uint8_aData[6] = 0x2B;
    STC_uint8_aData[7] = 0x56;
    STC_uint8_aData[8] = 0x3C;
    STC_uint8_aData[9] = 0x05;
    STC_uint8_aData[10] = 0x10;
    STC_uint8_aData[11] = 0x0F;
    STC_uint8_aData[12] = 0x3F;
    STC_uint8_aData[13] = 0x3F;
    STC_uint8_aData[14] = 0x0F;

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

  case 17:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


  //------------------------------------------------
  // 11 レジスタ : Exit Sleep
  //------------------------------------------------
  // 書き込みデータなし
    STC_uint8_Address = 0x11;
    STC_uint16_DataLength = 0;


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

  case 18:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    STC_uint8_JobNum_Time = 0;  // Time_Interval処理番号初期化
    STC_structParam_Time_Interval.uint32_Interval = (uint32_t)100;
                                // 待ち時間セット : 100mSec


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

  case 19:
    //----------------------------------------------------------
    // 時間待ち : 100mSec
    //----------------------------------------------------------
    int16_Return = Time_Interval(&STC_uint8_JobNum_Time,
                                 &STC_structParam_Time_Interval);
    if(int16_Return == -1){
      // 処理中 : 時間が経過していない。
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


  //------------------------------------------------
  // 29 レジスタ : Display ON
  //------------------------------------------------
  // 書き込みデータなし
    STC_uint8_Address = 0x29;
    STC_uint16_DataLength = 0;


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

  case 20:
    int16_Return = ILI9341_SPI_WriteRegisteer(
                                        &STC_uint8_JobNum_Ini,
                                        0,
                                        STC_uint8_Address,
                                        STC_uint16_DataLength,
                                        STC_uint8_aData);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : 現在の処理番号をループ
    }


    *puint8_JobNum = 0;  // 処理番号初期化
    // int16_Return : 結果
    break;

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

  return(int16_Return);
}
