122 lines
2.1 KiB
C
122 lines
2.1 KiB
C
#include "xc_hal.h"
|
|
#include "uart.h"
|
|
#include "radar.h"
|
|
|
|
uint8_t rad_txbuff[16] = {0};
|
|
uint8_t rad_rxbuff[16] = {0};
|
|
|
|
uint8_t rad_flag = 1;
|
|
uint8_t rad_ccc = 1;
|
|
uint16_t rad_aaa = 100;
|
|
uint32_t rad_bbb = 30;
|
|
|
|
static uint8_t cmd_setval(uint32_t setval, uint8_t save)
|
|
{
|
|
rad_txbuff[0] = 0xA1;
|
|
rad_txbuff[1] = 0x07;
|
|
rad_txbuff[2] = setval >> 8;
|
|
rad_txbuff[3] = setval & 0xFF;
|
|
rad_txbuff[4] = 0x00;
|
|
rad_txbuff[5] = 0x02;
|
|
rad_txbuff[6] = 0x00;
|
|
rad_txbuff[7] = 0x00;
|
|
rad_txbuff[8] = (save!=0)?1:0;
|
|
return uart_trx(rad_txbuff, rad_rxbuff);
|
|
}
|
|
|
|
static uint8_t cmd_getval(uint32_t *getval)
|
|
{
|
|
rad_txbuff[0] = 0xA2;
|
|
rad_txbuff[1] = 0x00;
|
|
if(uart_trx(rad_txbuff, rad_rxbuff))
|
|
{
|
|
*getval = rad_rxbuff[2]<<8|rad_rxbuff[3];
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static uint8_t cmd_setflag(uint8_t flag)
|
|
{
|
|
rad_txbuff[0] = 0xA3;
|
|
rad_txbuff[1] = 0x01;
|
|
rad_txbuff[2] = flag;
|
|
return uart_trx(rad_txbuff, rad_rxbuff);
|
|
}
|
|
|
|
static uint8_t cmd_getflag(uint8_t *data)
|
|
{
|
|
rad_txbuff[0] = 0xA4;
|
|
rad_txbuff[1] = 0x00;
|
|
if(uart_trx(rad_txbuff, rad_rxbuff))
|
|
{
|
|
*data = rad_rxbuff[2];
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//À×´ï³õʼ»¯
|
|
uint8_t radar_init(uint32_t setbase, uint16_t setper, uint8_t save)
|
|
{
|
|
uint8_t enable = 0;
|
|
uint32_t setval = 0;
|
|
|
|
rad_flag = save;
|
|
if(setper & 0x8000)
|
|
{
|
|
enable = 0;
|
|
setval = 255;
|
|
}
|
|
else
|
|
{
|
|
enable = 1;
|
|
setval = (uint64_t)(setbase * setper) / 100;
|
|
if(setval > 255) setval = 255;
|
|
}
|
|
if(!cmd_setflag(enable))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
rad_ccc = enable;
|
|
delay_ms(40);
|
|
if(!cmd_setval(setval, save))
|
|
{
|
|
return 0;
|
|
}
|
|
rad_bbb = setval;
|
|
rad_aaa = setper;
|
|
|
|
return 1;
|
|
}
|
|
|
|
uint8_t radar_setbase(uint32_t setbase)
|
|
{
|
|
return radar_init(setbase, rad_aaa, rad_flag);
|
|
}
|
|
|
|
void radar_readval(uint16_t *data)
|
|
{
|
|
data[0] = (hal_rad_get())?1023:0;
|
|
data[1] = data[0];
|
|
}
|
|
|
|
void radar_getper(uint8_t *data)
|
|
{
|
|
data[0] = rad_aaa & 0xFF;
|
|
data[1] = rad_aaa >> 8;
|
|
}
|
|
|
|
void radar_getcfg(uint8_t *data)
|
|
{
|
|
cmd_getval(&rad_bbb);
|
|
cmd_getflag(&rad_ccc);
|
|
data[0] = rad_ccc;
|
|
data[1] = (rad_bbb >> 0) & 0xFF;
|
|
data[2] = (rad_bbb >> 8) & 0xFF;
|
|
data[3] = (rad_bbb >> 16) & 0xFF;
|
|
data[4] = (rad_bbb >> 24) & 0xFF;
|
|
}
|
|
|