#ifndef __SCANNER_LIB_H__
#define __SCANNER_LIB_H__

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_usart.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_exti.h"
#include "stm32f4xx_syscfg.h"
#include "misc.h"

/*definice konstant STX a ETX*/
#define stx 0x02
#define etx 0x03
/*definice příkazů pro nastavení skeneru a načítání potřebných dat
 * při změně potřebných příkazů NEZAPOMENTE na konec přidat znak '<'
 */
#define state "sRN LCMstate<" /*zjistí zda skener funguje */
#define login "sMN SetAccessMode 03 F4724744<" /*přihlášení do skeneru jako Athorized Client*/
#define logout "sMN Run<" /*odhlásit a spustit*/
#define set_freq_and_res "sMN mLMPsetscancfg +5000 1 +5000 -450000 +2250000<" /*nastavení frekvence skenování(50hz) a úhlového rozlišení(0,5°) scanovaný úhel zde musí být zapsán ale nelze ho měnit*/
#define output_conf "sWN LMDscandatacfg 01 00 0 1 0 00 00  0 0 0 0 +1<" /*nastevení výstupních hodnot*/
#define set_angle "sWN LMPoutputRange 1 1388 -450000 +2250000<" /* nastaveni snímaného úhlu na -45° až +225° */
#define get_meas_data "sRN LMDscandata<" /*příkaz pro získání posledních naměřených dat*/
#define readok "sRA" /*cteni ze scanneru proběhlo v pořádku, zde nejsou <, nejsou potřeba*/
#define writeok "sWA" /*nastaveni scanneru proběhlo v pořádku, zde nejsou <, nejsou potřeba*/
#define methok "sAN" /*nastaveni scanneru proběhlo v pořádku, zde nejsou <, nejsou potřeba*/






#define askmax 100
#define ansmax 10000



uint8_t k;
uint8_t *c, *p;

typedef struct
{
	unsigned char CmdType[3];
	unsigned char Cmd[11];
	unsigned char VerNum[2];
	unsigned char DevNum[2];
	unsigned char SerialNum[8];
	unsigned char DeviceStatus1;
	unsigned char DeviceStatus2;
	unsigned char TelegramCnt[4];
	unsigned char ScanCnt[4];
	unsigned char TimeElapsed[8];
	unsigned char TimeTrans[8];
	unsigned char InputStatus[2];
	unsigned char OutputStatus[2];
	unsigned char Reserved[2];
	unsigned char ScanFreq[4];
	unsigned char MeasFreq[4];
	unsigned char EncoderData[2];
	unsigned char ChannelsNum[2];
	unsigned char Content[5];
	unsigned char ScaleFactor[8];
	unsigned char ScaleFactorOffset[8];
	unsigned char StartAngle[8];
	unsigned char Steps[4];
	unsigned char AmountOfData[5];
	unsigned char AmountOfBitChannels;
	unsigned char Position;
	unsigned char Name;
	unsigned char Comment;
	unsigned char Time;
	unsigned char Event;
	unsigned short int *MeasuredDistances;
} sdata;

typedef struct
{
	float Distance;
	unsigned short AbsAngle;
}CORNER;

typedef struct
{
	float space;
	float midlength;
	unsigned short startangle;
	unsigned short endangle;
}WAY;

typedef struct
{
	float LineLength;
	float StartDist;
	float EndDist;

	unsigned short StartAngle;
	unsigned short EndAngle;
	float AlfaAngle;
	float BetaAngle;
}LINE;

GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;


/*funkcni prototypy*/
void usartInit(uint32_t);
unsigned char *taskInit(char* );
unsigned char *sendTask_getAns(unsigned char*);
unsigned char ansCheck(unsigned char* );
void dataCooker(unsigned char*, sdata* );
unsigned short int fast(unsigned char[]);
unsigned short int dataprocessing(unsigned char p_ans[]);
uint8_t scannerSetup(void);
void answerInit(void);


#endif /*__SCANNER_LIB_H__*/
