/*
 * Draw_Buffer_ASCII_8x8.c
 *
 *  Created on: 2025/02/24
 *      Author: egaono-electronics
 */

#include "Draw_Buffer_ASCII_8x8.h"

#include "ILI9341_SPI_Draw.h"



//----------------------------------------------------------
// 描画Bufferに Font 8 x 8 文字をセット : ASCII
//----------------------------------------------------------
// 引数;
//  int16_t int16_Type :
//      0 : 通常表示
//      1 : 反転表示

// uint8_t *puint8_Address_font : フォント配列のポインタ

//  uint16_t uint16_Length : 文字数
//  uint16_t *puint16_aCode :
//                  文字コードが格納されたBufferのポインタ
//  uint8_t *puint8_aBuffer : 描画Bufferのポインタ


// 戻り値:
//  なし
//----------------------------------------------------------
void Draw_Buffer_ASCII_8x8(int16_t int16_Type,
                           uint8_t *puint8_Address_font,
                           uint16_t uint16_Length,
                           uint16_t *puint16_aCode,
                           uint8_t *puint8_aBuffer)
{
  uint32_t uint32_AddressFont;

  uint32_t uint32_Position;

  uint32_t uint32_I;
  uint32_t uint32_J;


  // 指定された文字数分、処理する。
  for(uint32_I = 0;
        uint32_I < (uint32_t)uint16_Length; uint32_I++){
    // フォントの位置を計算
    uint32_AddressFont
                = (uint32_t)puint16_aCode[uint32_I] * 8;

    // 1文字分のフォントデータをバッファにセットする。
    for(uint32_J = 0;
        uint32_J < (uint32_t)def_DotLengthwise_Font8x8;
        uint32_J++){
      // フォントデータをセットするバッファの位置を計算
      uint32_Position
            = (uint32_t)uint16_Length * uint32_J + uint32_I;

      // バッファにフォントデータをセットする。
      if(int16_Type == 0){
        // 通常表示
        puint8_aBuffer[uint32_Position]
            = puint8_Address_font[
                          uint32_AddressFont + uint32_J];
      }
      else{
        // 反転表示
        puint8_aBuffer[uint32_Position]
            = ~puint8_Address_font[
                          uint32_AddressFont + uint32_J];
      }
    }
  }
}
