Files
433_STM32/Core/Src/e32_demo.c

293 lines
6.0 KiB
C
Raw Normal View History

#include "e32_demo.h"
#include "main.h"
#include "application.h"
#include <string.h>
/**
* ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
static e32_opt_buffer_t e32_buffer;
/**
* ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD>
*/
static const uint8_t request_config[3]={0xC1,0xC1,0xC1};
/**
* ATָ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>
*/
static const char request_name[]="AT+DEVTYPE=?";
/**
* ATָ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȡ<EFBFBD>̼<EFBFBD><EFBFBD>
*/
static const char request_version[]="AT+FWCODE=?";
/**
* E32-433T30S Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>
*/
static const e32_register_t register_default =
{
.register_1 = {
.address_h = 0x00,
},
.register_2 = {
.address_l = 0x00,
},
.register_3.field = {
.radio_rate = RADIO_RATE_2400,
.uart_baud_rate = UART_RATE_9600,
.uart_parity = UART_8N1,
},
.register_4 = {
.channel = 0x17,
},
.register_5.field = {
.tx_power = TX_POWER_DBM_30,
.packet_fec = ON,
.wake_on_radio_period = WOR_PERIOD_250MS,
.reserve = OFF,
.specify_target = OFF,
},
};
/**
* @brief <EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
*
* @param config <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
*/
static void e32_send_config_command( const e32_register_t *config )
{
/* <20><>1<EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
C0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
e32_buffer.hex_cmd.command = 0xC0;
/* <20><>2~6<>ֽڿ<D6BD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD> */
memcpy( e32_buffer.hex_cmd.config , (uint8_t*)config , sizeof(e32_register_t));
/* <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4> */
e32_hal_uart_tx( (uint8_t*)&e32_buffer, sizeof(e32_register_t) + 1);
}
/**
* @brief <EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯָ<EFBFBD><EFBFBD>
*
* @param cmd <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
static void e32_send_request_command( request_cmd_t cmd )
{
switch( cmd )
{
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> */
case REQUEST_CMD_CONFIG:
e32_hal_uart_tx( (uint8_t*)request_config, sizeof(request_config));
break;
/* <20><>ȡ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> */
case REQUEST_CMD_NAME:
e32_hal_uart_tx( (uint8_t*)request_name, strlen(request_name));
break;
/* <20><>ȡ<EFBFBD>̼<EFBFBD><CCBC>汾 */
case REQUEST_CMD_VERSION:
e32_hal_uart_tx( (uint8_t*)request_version, strlen(request_version));
break;
}
}
/**
* @brief (<EFBFBD><EFBFBD>ѯָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)ģ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD><EFBFBD>
*
* @param cmd <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param buffer ָ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD>
* @param length Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
* @return bool <EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>true; <EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD>false<EFBFBD><EFBFBD>
*/
static bool e32_response_command_check( request_cmd_t cmd , uint8_t *buffer , uint8_t length )
{
bool ret = false;
switch( cmd )
{
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> */
case REQUEST_CMD_CONFIG:
/* <20><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6<EFBFBD>ֽ<EFBFBD>*/
if( length == 6 )
{
/* <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> ֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD>Ϊ0xC1 */
if( buffer[0] == 0xC1)
{
ret = true;
}
}
break;
/* <20><>ȡ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> */
case REQUEST_CMD_NAME:
/* <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> */
if( strncmp( "DEVTYPE=", (char*)buffer, 8) == 0 )
{
ret = true;
}
break;
/* <20><>ȡ<EFBFBD>̼<EFBFBD><CCBC>汾 */
case REQUEST_CMD_VERSION:
/* <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> */
if( strncmp( "FWCODE=", (char*)buffer, 7) == 0 )
{
ret = true;
}
break;
}
return ret;
}
/**
* @brief <EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* @note <EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>ģʽ
* @param buffer ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD>
* @param length д<EFBFBD><EFBFBD><EFBFBD>
*/
void e32_demo_transmit( uint8_t *buffer , uint16_t length )
{
/* <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4> */
e32_hal_uart_tx( buffer, length);
}
/**
* @brief (<EFBFBD><EFBFBD>ѡ) ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* @note ģ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @param buffer ģ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param length ģ<EFBFBD><EFBFBD>Ӧ<EFBFBD>𳤶<EFBFBD>
*/
void e32_demo_read_device_name( char *buffer , uint8_t *length )
{
uint16_t opt_length;
/* <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>֧<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>9600<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uart1_reconfig(9600);
/* <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
e32_hal_work_mode( WORK_MODE_CONFIG_AND_SLEEP );
/* <20><><EFBFBD>Ͳ<EFBFBD>ѯָ<D1AF><D6B8> <20><>ȡ<EFBFBD><EFBFBD><E8B1B8> */
e32_send_request_command( REQUEST_CMD_NAME );
/* <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3>Ӧ<EFBFBD><D3A6> */
uart1_wait_response_blocked( (uint8_t*)buffer , &opt_length );
/* Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> */
if( e32_response_command_check( REQUEST_CMD_NAME, (uint8_t*)buffer , opt_length ) != true )
{
/* Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>ȷ */
while(1);
}
*length = opt_length;
}
/**
* @brief (<EFBFBD><EFBFBD>ѡ) ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD>ȡ<EFBFBD><EFBFBD>̼<EFBFBD><EFBFBD>
*
* @note ģ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @param buffer ģ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param length ģ<EFBFBD><EFBFBD>Ӧ<EFBFBD>𳤶<EFBFBD>
*/
void e32_demo_read_fireware_version( char *buffer , uint8_t *length )
{
uint16_t opt_length;
/* <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>֧<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>9600<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uart1_reconfig(9600);
/* <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
e32_hal_work_mode( WORK_MODE_CONFIG_AND_SLEEP );
/* <20><><EFBFBD>Ͳ<EFBFBD>ѯָ<D1AF><D6B8> <20><>ȡ<EFBFBD><EFBFBD><E8B1B8> */
e32_send_request_command( REQUEST_CMD_VERSION );
/* <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3>Ӧ<EFBFBD><D3A6> */
uart1_wait_response_blocked( (uint8_t*)buffer , &opt_length );
/* Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> */
if( e32_response_command_check( REQUEST_CMD_VERSION, (uint8_t*)buffer , opt_length ) != true )
{
/* Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>ȷ */
while(1);
}
*length = opt_length;
}
/**
* @brief ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>˵<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>
*
* @param config <EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
*/
void e32_demo_menu_config( menu_config_t *config )
{
uint16_t opt_length;
e32_register_t register_write;
transmit_power_t power_select;
/* <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϼĴ<CFBC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
memcpy( (uint8_t*)&register_write , (uint8_t*)&register_default , sizeof(e32_register_t) );
/* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA> */
switch( config->tx_power )
{
case 27:
power_select = TX_POWER_DBM_27;
break;
case 24:
power_select = TX_POWER_DBM_24;
break;
case 21:
power_select = TX_POWER_DBM_21;
break;
default:
power_select = TX_POWER_DBM_30;
break;
}
/* <20>޸<EFBFBD><DEB8>û<EFBFBD><C3BB><EFBFBD><EFBFBD>õIJ<C3B5><C4B2><EFBFBD> */
register_write.register_5.field.tx_power = power_select; //<2F><><EFBFBD><EFBFBD>
register_write.register_3.field.radio_rate = (radio_rate_t)config->rate_mode; //<2F><><EFBFBD><EFBFBD>
register_write.register_4.channel = config->channel; //<2F>ŵ<EFBFBD>
/* <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>֧<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>9600<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uart1_reconfig(9600);
/* <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
e32_hal_work_mode( WORK_MODE_CONFIG_AND_SLEEP );
/* <20><>ģ<EFBFBD><EFBFBD><E9B4AE>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
e32_send_config_command( &register_write );
/* <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3>Ӧ<EFBFBD><D3A6> */
uart1_wait_response_blocked( e32_buffer.opt_buffer , &opt_length );
// /* Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> ָ<><D6B8>ͷ<EFBFBD><CDB7>ΪC1 */
// if( e32_buffer.opt_buffer[0] != 0xC1 )
// {
// /* ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>FF FF FF <20><>ʾָ<CABE><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
// while(1);
// }
///@todo <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
/* <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>õ<EFBFBD>͸<EFBFBD><CDB8>ģʽ<C4A3><CABD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> */
uart1_reconfig(9600);
/* <20>ص<EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
e32_hal_work_mode( WORK_MODE_TRANSPARENT );
}