293 lines
6.0 KiB
C
293 lines
6.0 KiB
C
|
|
#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*)®ister_write , (uint8_t*)®ister_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( ®ister_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 );
|
|||
|
|
}
|
|||
|
|
|