/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.h
  * @brief          : Header for main.c file.
  *                   This file contains the common defines of the application.
  ******************************************************************************
  ** This notice applies to any and all portions of this file
  * that are not between comment pairs USER CODE BEGIN and
  * USER CODE END. Other portions of this file, whether 
  * inserted by the user or by software development tools
  * are owned by their respective copyright owners.
  *
  * COPYRIGHT(c) 2019 STMicroelectronics
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *   1. Redistributions of source code must retain the above copyright notice,
  *      this list of conditions and the following disclaimer.
  *   2. Redistributions in binary form must reproduce the above copyright notice,
  *      this list of conditions and the following disclaimer in the documentation
  *      and/or other materials provided with the distribution.
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
  *      may be used to endorse or promote products derived from this software
  *      without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "sth30_crc.h"
#include <string.h>
#include "RGB_Controller.h"
#include "core_cm3.h"
#include <stdint.h>
#include "SX1276.h"
/* USER CODE END Includes */

/* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET */

typedef enum{ //LIMIT SET enum
    bluecell_stx = 0,
    bluecell_type,
    bluecell_length,
    bluecell_srcid,
    bluecell_red_H,
    bluecell_red_L,    
    bluecell_green_H,
    bluecell_green_L,    
    bluecell_blue_H,
    bluecell_blue_L,    
    bluecell_dstid,
    bluecell_crc,
    bluecell_etx,
}RGB_Protocol_t;    
typedef enum{ //LIMIT SET enum
    Location_stx = 0,
    Location_type,
    Location_length,
    Location_srcid,
    Location_Data,
}RGB_Location_Protocol_t;    
/* USER CODE END ET */

/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */

/* USER CODE END EC */

/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */
extern void Uart3_Data_Send(uint8_t* data,uint8_t size);
extern void RGB_SensorIDAutoSet(uint8_t set);
extern uint8_t RGB_SensorIDAutoGet(void);
extern void Flash_write(uint8_t*);
extern void LoraDataSendSet(uint8_t val);
extern uint8_t LoraDataSendGet(void);
extern void Uart2_Data_Send(uint8_t* data,uint8_t size);
extern void Uart1_Data_Send(uint8_t* data,uint8_t size);

/* USER CODE END EM */

/* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void);

/* USER CODE BEGIN EFP */

extern uint8_t MyControllerID;
extern uint8_t  SensorID;
extern uint8_t Lora_Buf[100];
extern I2C_HandleTypeDef hi2c2;

typedef enum{
    RGB_Status_Data_Request = 0x01,
    RGB_ControllerID_SET ,          //2
    RGB_SensorID_SET ,              //3
    RGB_SensorID_SET_Success,       //4
    RGB_Status_Data_Response ,      //5
    RGB_ControllerLimitSet ,        //6
    RGB_Sensor_Start ,              //7
    RGB_Sensor_Check ,              //8
    RGB_Sensor_Ack,                 //9
    RGB_Reset,                      //10
    RGB_BootStart,                  //11
    RGB_ID_Allocate_Request,        //12
    RGB_Lora_Data_Report,           //13
    RGB_Location_Report,           //14
    RGB_Location_Response,           //15
    RGB_ControllerID_GET,           //16
    RGB_Controller_Update_Ack,      //17
    RGB_ControllerLimitGet ,        //18    
}RGB_CMD_T;
#define     RGB_ControllerID_SET_Length         10 
#define     RGB_SensorID_SET_Length             10 
#define     RGB_SensorDataRequest_Length        7
#define     RGB_SensorIDAutoSetRequest_Length   7
#define     RGB_SensorIDCheckSetRequest_Length  4


#define     RGB_SensorDataResponse_Length       15
#define     RGB_SensorDataResponseData_Length   RGB_SensorDataResponse_Length - 3
#define     Lora_Max_Amount                     5
#define     LORA_MAX_DATA_CNT                   Lora_Max_Amount + 3

/*ID 정보  */

#define MY_ID_ADDRESS               0x0000

/*색깔 제한 정보 */
/*SENSOR 1  ADDRESS*/
#define RGB1_LIMIT_RED_H_ADDRESS     0x0001
#define RGB1_LIMIT_RED_L_ADDRESS     0x0002
#define RGB1_LIMIT_GREEN_H_ADDRESS   0x0003
#define RGB1_LIMIT_GREEN_L_ADDRESS   0x0004
#define RGB1_LIMIT_BLUE_H_ADDRESS    0x0005
#define RGB1_LIMIT_BLUE_L_ADDRESS    0x0006
/*SENSOR 2  ADDRESS*/
#define RGB2_LIMIT_RED_H_ADDRESS     0x0007
#define RGB2_LIMIT_RED_L_ADDRESS     0x0008
#define RGB2_LIMIT_GREEN_H_ADDRESS   0x0009
#define RGB2_LIMIT_GREEN_L_ADDRESS   0x000A
#define RGB2_LIMIT_BLUE_H_ADDRESS    0x000B
#define RGB2_LIMIT_BLUE_L_ADDRESS    0x000C
/*SENSOR 3  ADDRESS*/
#define RGB3_LIMIT_RED_H_ADDRESS     0x000D
#define RGB3_LIMIT_RED_L_ADDRESS     0x000E
#define RGB3_LIMIT_GREEN_H_ADDRESS   0x000F
#define RGB3_LIMIT_GREEN_L_ADDRESS   0x0010
#define RGB3_LIMIT_BLUE_H_ADDRESS    0x0011
#define RGB3_LIMIT_BLUE_L_ADDRESS    0x0012
/*SENSOR 4  ADDRESS*/
#define RGB4_LIMIT_RED_H_ADDRESS     0x0013
#define RGB4_LIMIT_RED_L_ADDRESS     0x0014
#define RGB4_LIMIT_GREEN_H_ADDRESS   0x0015
#define RGB4_LIMIT_GREEN_L_ADDRESS   0x0016
#define RGB4_LIMIT_BLUE_H_ADDRESS    0x0017
#define RGB4_LIMIT_BLUE_L_ADDRESS    0x0018
/*SENSOR 5  ADDRESS*/
#define RGB5_LIMIT_RED_H_ADDRESS     0x0019
#define RGB5_LIMIT_RED_L_ADDRESS     0x001A
#define RGB5_LIMIT_GREEN_H_ADDRESS   0x001B
#define RGB5_LIMIT_GREEN_L_ADDRESS   0x001C
#define RGB5_LIMIT_BLUE_H_ADDRESS    0x001D
#define RGB5_LIMIT_BLUE_L_ADDRESS    0x001E
/*SENSOR 6  ADDRESS*/
#define RGB6_LIMIT_RED_H_ADDRESS     0x001F
#define RGB6_LIMIT_RED_L_ADDRESS     0x0020
#define RGB6_LIMIT_GREEN_H_ADDRESS   0x0021
#define RGB6_LIMIT_GREEN_L_ADDRESS   0x0022
#define RGB6_LIMIT_BLUE_H_ADDRESS    0x0023
#define RGB6_LIMIT_BLUE_L_ADDRESS    0x0024
/*SENSOR 7  ADDRESS*/
#define RGB7_LIMIT_RED_H_ADDRESS     0x0025
#define RGB7_LIMIT_RED_L_ADDRESS     0x0036
#define RGB7_LIMIT_GREEN_H_ADDRESS   0x0027
#define RGB7_LIMIT_GREEN_L_ADDRESS   0x0028
#define RGB7_LIMIT_BLUE_H_ADDRESS    0x0029
#define RGB7_LIMIT_BLUE_L_ADDRESS    0x002A
/*SENSOR 8  ADDRESS*/
#define RGB8_LIMIT_RED_H_ADDRESS     0x002B
#define RGB8_LIMIT_RED_L_ADDRESS     0x002C
#define RGB8_LIMIT_GREEN_H_ADDRESS   0x002D
#define RGB8_LIMIT_GREEN_L_ADDRESS   0x002E
#define RGB8_LIMIT_BLUE_H_ADDRESS    0x002F
#define RGB8_LIMIT_BLUE_L_ADDRESS    0x0031
/*위치 정보 */
#define RGB1_LOCATION_ADDRESS        0x0032
#define RGB2_LOCATION_ADDRESS        RGB1_LOCATION_ADDRESS + 50
#define RGB3_LOCATION_ADDRESS        RGB2_LOCATION_ADDRESS + 50
#define RGB4_LOCATION_ADDRESS        RGB3_LOCATION_ADDRESS + 50
#define RGB5_LOCATION_ADDRESS        RGB4_LOCATION_ADDRESS + 50
#define RGB6_LOCATION_ADDRESS        RGB5_LOCATION_ADDRESS + 50
#define RGB7_LOCATION_ADDRESS        RGB6_LOCATION_ADDRESS + 50
#define RGB8_LOCATION_ADDRESS        RGB7_LOCATION_ADDRESS + 50
/*reserved*/
#define RESERVED_ADDRESS             RGB8_LOCATION_ADDRESS + 50





















/* USER CODE END EFP */

/* Private defines -----------------------------------------------------------*/
#define BOOT_LED_Pin GPIO_PIN_15
#define BOOT_LED_GPIO_Port GPIOC
#define SX1276_DIO0_Pin GPIO_PIN_4
#define SX1276_DIO0_GPIO_Port GPIOA
#define SX1276_DIO1_Pin GPIO_PIN_5
#define SX1276_DIO1_GPIO_Port GPIOA
#define SX1276_DIO2_Pin GPIO_PIN_6
#define SX1276_DIO2_GPIO_Port GPIOA
#define SX1276_DIO3_Pin GPIO_PIN_7
#define SX1276_DIO3_GPIO_Port GPIOA
#define SX1276_DIO4_Pin GPIO_PIN_4
#define SX1276_DIO4_GPIO_Port GPIOC
#define SX1276_DIO5_Pin GPIO_PIN_5
#define SX1276_DIO5_GPIO_Port GPIOC
#define SX1276_RESET_Pin GPIO_PIN_0
#define SX1276_RESET_GPIO_Port GPIOB
#define LED_ALARM_Pin GPIO_PIN_12
#define LED_ALARM_GPIO_Port GPIOB
#define SENSOR_EN1_Pin GPIO_PIN_13
#define SENSOR_EN1_GPIO_Port GPIOB
#define SENSOR_EN2_Pin GPIO_PIN_14
#define SENSOR_EN2_GPIO_Port GPIOB
#define SENSOR_EN3_Pin GPIO_PIN_15
#define SENSOR_EN3_GPIO_Port GPIOB
#define SENSOR_EN4_Pin GPIO_PIN_6
#define SENSOR_EN4_GPIO_Port GPIOC
#define SENSOR_EN5_Pin GPIO_PIN_7
#define SENSOR_EN5_GPIO_Port GPIOC
#define SENSOR_EN6_Pin GPIO_PIN_8
#define SENSOR_EN6_GPIO_Port GPIOC
#define SENSOR_EN7_Pin GPIO_PIN_9
#define SENSOR_EN7_GPIO_Port GPIOC
#define SENSOR_EN8_Pin GPIO_PIN_8
#define SENSOR_EN8_GPIO_Port GPIOA
#define SX1276_NSS_Pin GPIO_PIN_15
#define SX1276_NSS_GPIO_Port GPIOA
#define LED_CH1_Pin GPIO_PIN_10
#define LED_CH1_GPIO_Port GPIOC
#define LED_CH2_Pin GPIO_PIN_11
#define LED_CH2_GPIO_Port GPIOC
#define LED_CH3_Pin GPIO_PIN_12
#define LED_CH3_GPIO_Port GPIOC
#define LED_CH4_Pin GPIO_PIN_2
#define LED_CH4_GPIO_Port GPIOD
#define SX1276_CLK_Pin GPIO_PIN_3
#define SX1276_CLK_GPIO_Port GPIOB
#define SX1276_MISO_Pin GPIO_PIN_4
#define SX1276_MISO_GPIO_Port GPIOB
#define SX1276_MOSI_Pin GPIO_PIN_5
#define SX1276_MOSI_GPIO_Port GPIOB
#define LED_CH5_Pin GPIO_PIN_6
#define LED_CH5_GPIO_Port GPIOB
#define LED_CH6_Pin GPIO_PIN_7
#define LED_CH6_GPIO_Port GPIOB
#define LED_CH7_Pin GPIO_PIN_8
#define LED_CH7_GPIO_Port GPIOB
#define LED_CH8_Pin GPIO_PIN_9
#define LED_CH8_GPIO_Port GPIOB
/* USER CODE BEGIN Private defines */
#define buf_size 100

/* USER CODE END Private defines */

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
