网络自适应
This commit is contained in:
1 parent
a589e89e33
commit
0f40dd8b17
68 files changed
+7062
-2678
No files matched your search
@@ -9,6 +9,7 @@
|
|||||||
#include "data.h"
|
#include "data.h"
|
||||||
#include "easyflash.h"
|
#include "easyflash.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <elog.h>
|
||||||
|
|
||||||
|
|
||||||
ALIGN (RT_ALIGN_SIZE)
|
ALIGN (RT_ALIGN_SIZE)
|
||||||
@@ -28,6 +29,7 @@ static void thread_entry (void * argument)
|
|||||||
g_DebugDrv.rxdone = cfg_rx_done;
|
g_DebugDrv.rxdone = cfg_rx_done;
|
||||||
rt_kprintf ("%s was start!\r\n", __FILE__);
|
rt_kprintf ("%s was start!\r\n", __FILE__);
|
||||||
rt_kprintf ("config input\r\n");
|
rt_kprintf ("config input\r\n");
|
||||||
|
elog_stop();
|
||||||
g_ifconfig = 1;
|
g_ifconfig = 1;
|
||||||
char * p;
|
char * p;
|
||||||
char key[32], value[32];
|
char key[32], value[32];
|
||||||
@@ -95,7 +97,7 @@ static void thread_entry (void * argument)
|
|||||||
rt_thread_delay (10);
|
rt_thread_delay (10);
|
||||||
}
|
}
|
||||||
shell_recover();
|
shell_recover();
|
||||||
g_ifconfig = 0;
|
elog_start();
|
||||||
rt_kprintf ("config exit\r\n");
|
rt_kprintf ("config exit\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+17
-12
@@ -16,11 +16,13 @@
|
|||||||
#define DIS_CASCII_IP 0x1080 // 远程地址
|
#define DIS_CASCII_IP 0x1080 // 远程地址
|
||||||
#define DIS_CASCII_PORT 0x1090 // 远程端口
|
#define DIS_CASCII_PORT 0x1090 // 远程端口
|
||||||
#define DIS_CASCII_PASS 0x10A0 // 登录密码
|
#define DIS_CASCII_PASS 0x10A0 // 登录密码
|
||||||
#define DIS_CASCII_SLTYPE 0x10B0 // 闸门类型
|
|
||||||
#define DIS_CNUM_SLSPEED 0x10C0 // 闸门速度
|
#define DIS_CNUM_1PROT 0x10B0 // 一级保护
|
||||||
|
#define DIS_CNUM_2PROT 0x10C0 // 二级保护
|
||||||
#define DIS_CNUM_SLHEIGHT 0x10D0 // 闸门高度
|
#define DIS_CNUM_SLHEIGHT 0x10D0 // 闸门高度
|
||||||
#define DIS_CNUM_SLLOAD 0x10E0 // 荷重仪类型
|
#define DIS_CNUM_PROTK 0x10E0 // 荷重仪类型
|
||||||
#define DIS_CNUM_SLLOADKEY 0x10F0 //荷重仪
|
|
||||||
|
#define DIS_CNUM_SLLOADKEY 0x10F0 // 闸门荷重
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -35,11 +37,12 @@
|
|||||||
|
|
||||||
|
|
||||||
// 调试界面
|
// 调试界面
|
||||||
#define DIS_CNUM_DBG_ECODE 0x1180 //当前编码
|
#define DIS_CNUM_DBG_ECODE 0x1180 //当前编码
|
||||||
#define DIS_CNUM_DBG_OPEN 0x1190 //闸门开度
|
#define DIS_CNUM_DBG_OPEN 0x1190 //闸门开度
|
||||||
#define DIS_CNUM_DBG_VOL 0x11A0 //母线电压
|
#define DIS_CNUM_DBG_VOL 0x11A0 //母线电压
|
||||||
#define DIS_CNUM_DBG_CUR 0x11B0 //当前电流
|
#define DIS_CNUM_DBG_CUR 0x11B0 //当前电流
|
||||||
#define DIS_CNUM_DBG_ERR 0x11C0 //报警代码
|
#define DIS_CNUM_DBG_ERR 0x11C0 //报警代码
|
||||||
|
#define DIS_CNUM_MAX_OPEN 0x11D0 // 开度提闸界面 最大开度
|
||||||
|
|
||||||
|
|
||||||
// 按钮
|
// 按钮
|
||||||
@@ -51,7 +54,7 @@
|
|||||||
#define DIS_CMD_BTN_PA 0X2050 // 菜单 参数设置
|
#define DIS_CMD_BTN_PA 0X2050 // 菜单 参数设置
|
||||||
#define DIS_CMD_BTN_DB 0X2070 // 菜单 设备调试
|
#define DIS_CMD_BTN_DB 0X2070 // 菜单 设备调试
|
||||||
#define DIS_CMD_BTN_ST 0X2080 // 菜单 设备状态
|
#define DIS_CMD_BTN_ST 0X2080 // 菜单 设备状态
|
||||||
// #define DIS_CMD_BTN_STOP 0X2090 // 急停
|
|
||||||
|
|
||||||
#define DIS_CMD_BTN_DUP 0X20B0 // 调试 上
|
#define DIS_CMD_BTN_DUP 0X20B0 // 调试 上
|
||||||
#define DIS_CMD_BTN_DDOWN 0X20C0 // 调试 下
|
#define DIS_CMD_BTN_DDOWN 0X20C0 // 调试 下
|
||||||
@@ -60,7 +63,8 @@
|
|||||||
#define DIS_CMD_BTN_SETMAX 0X20F0 // 菜单 设为最大
|
#define DIS_CMD_BTN_SETMAX 0X20F0 // 菜单 设为最大
|
||||||
#define DIS_CMD_BTN_FACT 0X2100 // 菜单 恢复出厂设置
|
#define DIS_CMD_BTN_FACT 0X2100 // 菜单 恢复出厂设置
|
||||||
#define DIS_CMD_BTN_REST 0X2110 // 菜单 重启
|
#define DIS_CMD_BTN_REST 0X2110 // 菜单 重启
|
||||||
#define DIS_CMD_BTN_SETMIN 0X2120 // 菜单 设为最小
|
#define DIS_CMD_BTN_SETMIN 0X2120 // 菜单 设为最
|
||||||
|
#define DIS_CMD_BTN_CLREXC 0X2130 // 菜单 解除报警
|
||||||
|
|
||||||
// 动态图标
|
// 动态图标
|
||||||
|
|
||||||
@@ -68,7 +72,7 @@
|
|||||||
#define DIS_CSTE_LOAD 0X3010 // 荷重仪状态
|
#define DIS_CSTE_LOAD 0X3010 // 荷重仪状态
|
||||||
#define DIS_CSTE_PLUS 0X3020 // 编码器状态
|
#define DIS_CSTE_PLUS 0X3020 // 编码器状态
|
||||||
#define DIS_CSTE_NET 0X3030 // 网络状态
|
#define DIS_CSTE_NET 0X3030 // 网络状态
|
||||||
#define DIS_CSTE_MOTOR 0X3040 // 电机状态
|
#define DIS_CSTE_MOTOR 0X3040 // 电机状态
|
||||||
|
|
||||||
#define DIS_CMD_DOW_SUCC 0X4F4A // "OK"
|
#define DIS_CMD_DOW_SUCC 0X4F4A // "OK"
|
||||||
|
|
||||||
@@ -84,6 +88,7 @@
|
|||||||
#define DIS_TYPE_SWPAGE 0x03
|
#define DIS_TYPE_SWPAGE 0x03
|
||||||
#define DIS_TYPE_WD_BYTES 0x04
|
#define DIS_TYPE_WD_BYTES 0x04
|
||||||
#define DIS_TYPE_WD_ICON 0x05
|
#define DIS_TYPE_WD_ICON 0x05
|
||||||
|
#define DIS_TYPE_WD_AUDIO 0x06
|
||||||
|
|
||||||
#define DIS_STE_INVALID 0 // 无效的
|
#define DIS_STE_INVALID 0 // 无效的
|
||||||
#define DIS_STE_SUCCSEE 1 // 成功 绿色
|
#define DIS_STE_SUCCSEE 1 // 成功 绿色
|
||||||
|
|||||||
+262
-30
@@ -15,6 +15,10 @@ ALIGN (RT_ALIGN_SIZE)
|
|||||||
static char thread_stack[4096];
|
static char thread_stack[4096];
|
||||||
static struct rt_thread display_thread;
|
static struct rt_thread display_thread;
|
||||||
|
|
||||||
|
#if !defined(LOG_TAG)
|
||||||
|
#define LOG_TAG "lcd"
|
||||||
|
#endif
|
||||||
|
#include <elog.h>
|
||||||
|
|
||||||
static rt_timer_t timer;
|
static rt_timer_t timer;
|
||||||
|
|
||||||
@@ -26,6 +30,8 @@ static struct
|
|||||||
int identity;
|
int identity;
|
||||||
} s_driver;
|
} s_driver;
|
||||||
|
|
||||||
|
|
||||||
|
static void dis_write_usrpwd (char *pass);
|
||||||
static void view_rx_done (void)
|
static void view_rx_done (void)
|
||||||
{
|
{
|
||||||
rt_event_send (gUartEvents, EVENT_UART_VIEW_RX);
|
rt_event_send (gUartEvents, EVENT_UART_VIEW_RX);
|
||||||
@@ -126,6 +132,18 @@ static int DisPreparePacket (DisDataType_t ddtt, char *buf, int maxLen)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
case DIS_TYPE_WD_AUDIO:
|
||||||
|
{
|
||||||
|
buf[tx_size++] = 0x82;
|
||||||
|
buf[tx_size++] = 0x00; // 寄存器地址高位
|
||||||
|
buf[tx_size++] = 0xA0; // 寄存器地址高位
|
||||||
|
|
||||||
|
buf[tx_size++] = (char)ddtt.Int.Int; // 寄存器数据高位
|
||||||
|
buf[tx_size++] = 0x01; // 寄存器数据高位
|
||||||
|
buf[tx_size++] = 0x40; // 寄存器数据高位
|
||||||
|
buf[tx_size++] = 0x00; // 寄存器数据高位
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -164,6 +182,10 @@ static void disctrl_handle (char *data, int length)
|
|||||||
}
|
}
|
||||||
case DIS_CMD_BTN_DUP: // 调试界面上升
|
case DIS_CMD_BTN_DUP: // 调试界面上升
|
||||||
{
|
{
|
||||||
|
if (s_driver.identity == 0) // 用户无此权限
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
mail.Type = MAIL_SLUICE_SUP;
|
mail.Type = MAIL_SLUICE_SUP;
|
||||||
mail.index = 0;
|
mail.index = 0;
|
||||||
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||||
@@ -171,6 +193,10 @@ static void disctrl_handle (char *data, int length)
|
|||||||
}
|
}
|
||||||
case DIS_CMD_BTN_DDOWN: // 调试界面下降
|
case DIS_CMD_BTN_DDOWN: // 调试界面下降
|
||||||
{
|
{
|
||||||
|
if (s_driver.identity == 0) // 用户无此权限
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
mail.Type = MAIL_SLUICE_SDW;
|
mail.Type = MAIL_SLUICE_SDW;
|
||||||
mail.index = 0;
|
mail.index = 0;
|
||||||
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||||
@@ -178,9 +204,10 @@ static void disctrl_handle (char *data, int length)
|
|||||||
}
|
}
|
||||||
case DIS_CMD_BTN_DSTOP: // 调试界面停止
|
case DIS_CMD_BTN_DSTOP: // 调试界面停止
|
||||||
{
|
{
|
||||||
mail.Type = MAIL_SLUICE_STP;
|
OsSendMail(gSluiceMail,MAIL_SLUICE_STP,0);
|
||||||
mail.index = 0;
|
// mail.Type = MAIL_SLUICE_STP;
|
||||||
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
// mail.index = 0;
|
||||||
|
// rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DIS_CMD_BTN_DUNLOCK: // 调试界面解锁
|
case DIS_CMD_BTN_DUNLOCK: // 调试界面解锁
|
||||||
@@ -226,7 +253,7 @@ static void disctrl_handle (char *data, int length)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// 5A A5 0A 83 10 30 03 30 31 32 33 FF FF
|
// 5A A5 0A 83 10 30 03 30 31 32 33 FF FF
|
||||||
case DIS_CNUM_PASS:
|
case DIS_CNUM_PASS: // 登录成功
|
||||||
{
|
{
|
||||||
if ( (rt_memcmp (&data[index], (char *) s_driver.userpwd, 6) == 0)) // 用户密码
|
if ( (rt_memcmp (&data[index], (char *) s_driver.userpwd, 6) == 0)) // 用户密码
|
||||||
{
|
{
|
||||||
@@ -235,18 +262,24 @@ static void disctrl_handle (char *data, int length)
|
|||||||
ddtt.Int.Int = 0x0004;
|
ddtt.Int.Int = 0x0004;
|
||||||
tx_size = DisPreparePacket (ddtt, txbuf, 100);
|
tx_size = DisPreparePacket (ddtt, txbuf, 100);
|
||||||
MX_UART_PutBuffer (&g_ViewDrv, txbuf, tx_size);
|
MX_UART_PutBuffer (&g_ViewDrv, txbuf, tx_size);
|
||||||
|
OsSendMail(gViewMail,MAIL_VIEW_AUDIO,MAIL_AUDIO_LOGIN_SUC) ;
|
||||||
}
|
}
|
||||||
if ( (rt_memcmp (&data[index], (char *) s_driver.syspwd, 6) == 0)) // 用户密码
|
else if ( (rt_memcmp (&data[index], (char *) s_driver.syspwd, 6) == 0)) // 用户密码
|
||||||
{
|
{
|
||||||
s_driver.identity = 1;
|
s_driver.identity = 1;
|
||||||
ddtt.type = DIS_TYPE_SWPAGE;
|
ddtt.type = DIS_TYPE_SWPAGE;
|
||||||
ddtt.Int.Int = 0x0004;
|
ddtt.Int.Int = 0x0004;
|
||||||
tx_size = DisPreparePacket (ddtt, txbuf, 100);
|
tx_size = DisPreparePacket (ddtt, txbuf, 100);
|
||||||
MX_UART_PutBuffer (&g_ViewDrv, txbuf, tx_size);
|
MX_UART_PutBuffer (&g_ViewDrv, txbuf, tx_size);
|
||||||
|
OsSendMail(gViewMail,MAIL_VIEW_AUDIO,MAIL_AUDIO_LOGIN_ADM) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OsSendMail(gViewMail,MAIL_VIEW_AUDIO,MAIL_AUDIO_LOGIN_FIL) ;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// 设置提闸开度
|
// 输入提闸开度
|
||||||
case DIS_CNUM_SLSET:
|
case DIS_CNUM_SLSET:
|
||||||
{
|
{
|
||||||
a = (uint16_t) data[index + 2] * 256 + (uint16_t) data[index + 3];
|
a = (uint16_t) data[index + 2] * 256 + (uint16_t) data[index + 3];
|
||||||
@@ -258,6 +291,17 @@ static void disctrl_handle (char *data, int length)
|
|||||||
//rt_event_send (gCtrlEvents, EVENT_CTRL_SET_OPT_SLU);
|
//rt_event_send (gCtrlEvents, EVENT_CTRL_SET_OPT_SLU);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// case DIS_CNUM_SLSET:
|
||||||
|
// {
|
||||||
|
// a = (uint16_t) data[index + 2] * 256 + (uint16_t) data[index + 3];
|
||||||
|
// SluiceData[0].sopen = a * 10;
|
||||||
|
// //SluiceData[gMqttDrv.rx_index].sopen = datak / 10;
|
||||||
|
// mail.Type = MAIL_SLUICE_OPT;
|
||||||
|
// mail.index = 0;
|
||||||
|
// rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||||
|
// //rt_event_send (gCtrlEvents, EVENT_CTRL_SET_OPT_SLU);
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
// 83 10 70 05 30 30 30 31 30 30 30 31 FF FF
|
// 83 10 70 05 30 30 30 31 30 30 30 31 FF FF
|
||||||
case DIS_CASCII_DEVID: // 设置设备编码
|
case DIS_CASCII_DEVID: // 设置设备编码
|
||||||
{
|
{
|
||||||
@@ -272,27 +316,29 @@ static void disctrl_handle (char *data, int length)
|
|||||||
}
|
}
|
||||||
case DIS_CASCII_PASS:
|
case DIS_CASCII_PASS:
|
||||||
{
|
{
|
||||||
|
char password[7] = {0};
|
||||||
if (s_driver.identity == 0)
|
if (s_driver.identity == 0)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// if (s_user_role != 1)
|
|
||||||
// break;
|
if (length != 12)
|
||||||
// if (length != 12)
|
{
|
||||||
// {
|
// DisWritePass (SysInfo.LoginPass, QUEUE);
|
||||||
// DisWritePass (SysInfo.LoginPass, QUEUE);
|
return;
|
||||||
// return;
|
}
|
||||||
// }
|
|
||||||
// // 校验密码的合法性,只能出现数字
|
// // 校验密码的合法性,只能出现数字
|
||||||
// for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
// {
|
{
|
||||||
// if (data[index + i] > '9' || data[index + i] < '0')
|
if (data[index + i] > '9' || data[index + i] < '0')
|
||||||
// {
|
{
|
||||||
// DisWritePass (SysInfo.LoginPass, QUEUE);
|
//DisWritePass (SysInfo.LoginPass, QUEUE);
|
||||||
// return;
|
return;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// SysSetLoginPass ( (char *) &data[index], length - 6);
|
rt_memcpy(password,&data[index],6);
|
||||||
|
ef_set_env("user_pass",password) ;
|
||||||
|
dis_write_usrpwd(password);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,6 +365,63 @@ static void disctrl_handle (char *data, int length)
|
|||||||
ef_set_env ("max_open", setstr);
|
ef_set_env ("max_open", setstr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case DIS_CNUM_1PROT: // 修改1级保护
|
||||||
|
{
|
||||||
|
if (s_driver.identity == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
union
|
||||||
|
{
|
||||||
|
uint32_t Int;
|
||||||
|
uint8_t Byte[4];
|
||||||
|
} Int;
|
||||||
|
Int.Byte[3] = data[index++];
|
||||||
|
Int.Byte[2] = data[index++];
|
||||||
|
Int.Byte[1] = data[index++];
|
||||||
|
Int.Byte[0] = data[index++];
|
||||||
|
rt_sprintf (setstr, "%d", Int.Int);
|
||||||
|
ef_set_env ("curr1", setstr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DIS_CNUM_2PROT: // 修改1级保护
|
||||||
|
{
|
||||||
|
if (s_driver.identity == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
union
|
||||||
|
{
|
||||||
|
uint32_t Int;
|
||||||
|
uint8_t Byte[4];
|
||||||
|
} Int;
|
||||||
|
Int.Byte[3] = data[index++];
|
||||||
|
Int.Byte[2] = data[index++];
|
||||||
|
Int.Byte[1] = data[index++];
|
||||||
|
Int.Byte[0] = data[index++];
|
||||||
|
rt_sprintf (setstr, "%d", Int.Int);
|
||||||
|
ef_set_env ("curr2", setstr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DIS_CNUM_PROTK: // 修改1级保护
|
||||||
|
{
|
||||||
|
if (s_driver.identity == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
union
|
||||||
|
{
|
||||||
|
uint32_t Int;
|
||||||
|
uint8_t Byte[4];
|
||||||
|
} Int;
|
||||||
|
Int.Byte[3] = data[index++];
|
||||||
|
Int.Byte[2] = data[index++];
|
||||||
|
Int.Byte[1] = data[index++];
|
||||||
|
Int.Byte[0] = data[index++];
|
||||||
|
rt_sprintf (setstr, "%d", Int.Int);
|
||||||
|
ef_set_env ("openk", setstr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -353,6 +456,18 @@ static void dis_write_ttflow (uint32_t ttflow)
|
|||||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 更新电流
|
||||||
|
static void dis_write_current (float current)
|
||||||
|
{
|
||||||
|
DisDataType_t ddtt;
|
||||||
|
char tx_buf[128], p;
|
||||||
|
ddtt.Addr.addr = DIS_CNUM_DBG_CUR;
|
||||||
|
ddtt.type = DIS_TYPE_WD_FLOAT;
|
||||||
|
ddtt.Float.Float = current;
|
||||||
|
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||||
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
|
}
|
||||||
|
|
||||||
// 更新瞬时流量
|
// 更新瞬时流量
|
||||||
static void dis_write_mmflow (float mmFlow)
|
static void dis_write_mmflow (float mmFlow)
|
||||||
{
|
{
|
||||||
@@ -389,6 +504,33 @@ void dis_write_open (float open)
|
|||||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 更新闸门开度 到调试界面
|
||||||
|
void dis_write_open2debug (int open)
|
||||||
|
{
|
||||||
|
DisDataType_t ddtt;
|
||||||
|
char tx_buf[128], p;
|
||||||
|
ddtt.Addr.addr = DIS_CNUM_DBG_OPEN;
|
||||||
|
ddtt.type = DIS_TYPE_WD_INT;
|
||||||
|
ddtt.Int.Int = open;
|
||||||
|
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||||
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 播报语音 参数,第几段音频
|
||||||
|
|
||||||
|
void dis_write_audio (int k)
|
||||||
|
{
|
||||||
|
DisDataType_t ddtt;
|
||||||
|
char tx_buf[128], p;
|
||||||
|
//ddtt.Addr.addr = DIS_CNUM_SLGET;
|
||||||
|
ddtt.type = DIS_TYPE_WD_AUDIO;
|
||||||
|
ddtt.Int.Int = k;
|
||||||
|
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||||
|
elog_hexdump("lcd",16,tx_buf,p);
|
||||||
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
|
}
|
||||||
|
|
||||||
// 更新闸门荷重
|
// 更新闸门荷重
|
||||||
void dis_write_load (float load)
|
void dis_write_load (float load)
|
||||||
{
|
{
|
||||||
@@ -426,9 +568,52 @@ void dis_write_slmaxopen (uint32_t ecode)
|
|||||||
ddtt.Int.Int = ecode;
|
ddtt.Int.Int = ecode;
|
||||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
|
|
||||||
|
ddtt.Addr.addr = DIS_CNUM_MAX_OPEN;
|
||||||
|
ddtt.type = DIS_TYPE_WD_INT;
|
||||||
|
ddtt.Int.Int = ecode/10;
|
||||||
|
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||||
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
|
//DIS_CNUM_MAX_OPEN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 更新一级保护
|
||||||
|
void dis_write_1prot (uint32_t data)
|
||||||
|
{
|
||||||
|
DisDataType_t ddtt;
|
||||||
|
char tx_buf[128], p;
|
||||||
|
ddtt.Addr.addr = DIS_CNUM_1PROT;
|
||||||
|
ddtt.type = DIS_TYPE_WD_INT;
|
||||||
|
ddtt.Int.Int = data;
|
||||||
|
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||||
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新二级保护
|
||||||
|
void dis_write_2prot (uint32_t data)
|
||||||
|
{
|
||||||
|
DisDataType_t ddtt;
|
||||||
|
char tx_buf[128], p;
|
||||||
|
ddtt.Addr.addr = DIS_CNUM_2PROT;
|
||||||
|
ddtt.type = DIS_TYPE_WD_INT;
|
||||||
|
ddtt.Int.Int = data;
|
||||||
|
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||||
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新二级保护
|
||||||
|
void dis_write_openk (uint32_t data)
|
||||||
|
{
|
||||||
|
DisDataType_t ddtt;
|
||||||
|
char tx_buf[128], p;
|
||||||
|
ddtt.Addr.addr = DIS_CNUM_PROTK;
|
||||||
|
ddtt.type = DIS_TYPE_WD_INT;
|
||||||
|
ddtt.Int.Int = data;
|
||||||
|
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||||
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
|
}
|
||||||
|
|
||||||
// 发送给屏幕设备编号
|
// 发送给屏幕设备编号
|
||||||
// 参数1:设备编号
|
// 参数1:设备编号
|
||||||
// 参数2:是否通过队列写入
|
// 参数2:是否通过队列写入
|
||||||
@@ -503,7 +688,7 @@ void dis_write_net_ste (int ste)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 修改电机状态
|
// 修改电机状态
|
||||||
void dis_write_motor_ste (int ste, int isqueue)
|
void dis_write_motor_ste (int ste)
|
||||||
{
|
{
|
||||||
DisDataType_t ddtt;
|
DisDataType_t ddtt;
|
||||||
char tx_buf[128], p;
|
char tx_buf[128], p;
|
||||||
@@ -551,12 +736,24 @@ void diw_write_load_ste (int ste)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void dis_write_err (int err)
|
||||||
|
{
|
||||||
|
DisDataType_t ddtt;
|
||||||
|
char tx_buf[128], p;
|
||||||
|
ddtt.type = DIS_TYPE_WD_INT;
|
||||||
|
ddtt.Addr.addr = DIS_CNUM_DBG_ERR;
|
||||||
|
ddtt.Int.Int = err;
|
||||||
|
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||||
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void thread_entry (void * argument)
|
static void thread_entry (void * argument)
|
||||||
{
|
{
|
||||||
char tx_buf[128], p;
|
char tx_buf[128], p;
|
||||||
DisDataType_t ddtt;
|
DisDataType_t ddtt;
|
||||||
rt_kprintf ("%s was start!\r\n", __FILE__);
|
log_i ("display was start!");
|
||||||
g_ViewDrv.rxdone = view_rx_done;
|
g_ViewDrv.rxdone = view_rx_done;
|
||||||
g_ViewDrv.BaudRate = 115200;
|
g_ViewDrv.BaudRate = 115200;
|
||||||
MX_UART_Init (&g_ViewDrv);
|
MX_UART_Init (&g_ViewDrv);
|
||||||
@@ -571,6 +768,15 @@ static void thread_entry (void * argument)
|
|||||||
s_driver.identity = 0;
|
s_driver.identity = 0;
|
||||||
s = ef_get_env ("max_open");
|
s = ef_get_env ("max_open");
|
||||||
int32_t max_open = atoi (s);
|
int32_t max_open = atoi (s);
|
||||||
|
|
||||||
|
s = ef_get_env ("curr1");
|
||||||
|
int32_t curr1 = atoi (s);
|
||||||
|
|
||||||
|
s = ef_get_env ("curr2");
|
||||||
|
int32_t curr2 = atoi (s);
|
||||||
|
|
||||||
|
s = ef_get_env ("openk");
|
||||||
|
int32_t openk = atoi (s);
|
||||||
// 载入参数
|
// 载入参数
|
||||||
dis_write_divice_id ( (char *) s_driver.device_id);
|
dis_write_divice_id ( (char *) s_driver.device_id);
|
||||||
dis_write_ipaddr ("mqtt.zyjzjs.cn");
|
dis_write_ipaddr ("mqtt.zyjzjs.cn");
|
||||||
@@ -582,6 +788,14 @@ static void thread_entry (void * argument)
|
|||||||
dis_write_net_ste (0);
|
dis_write_net_ste (0);
|
||||||
dis_write_load (0);
|
dis_write_load (0);
|
||||||
dis_write_code (SluiceData[0].ecode);
|
dis_write_code (SluiceData[0].ecode);
|
||||||
|
dis_write_audio(0);
|
||||||
|
|
||||||
|
dis_write_1prot (curr1);
|
||||||
|
|
||||||
|
// 更新二级保护
|
||||||
|
dis_write_2prot (curr2);
|
||||||
|
// 更新二级保护
|
||||||
|
dis_write_openk (openk) ;
|
||||||
rt_timer_start (timer);
|
rt_timer_start (timer);
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
@@ -591,14 +805,26 @@ static void thread_entry (void * argument)
|
|||||||
{
|
{
|
||||||
case MAIL_VIEW_FLUSH:
|
case MAIL_VIEW_FLUSH:
|
||||||
// 刷新闸门开度
|
// 刷新闸门开度
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
dis_write_open ( (float) SluiceData[0].gopen / 10);
|
dis_write_open ( (float) SluiceData[0].gopen / 10);
|
||||||
dis_write_load (0);
|
// dis_write_load ((float)WaterData[0].thisLevel/10); // 荷重或者压力
|
||||||
dis_write_mmflow (0);
|
dis_write_mmflow ((float)WaterData[0].thisFlow/100/3600);
|
||||||
dis_write_mmspeed (0);
|
dis_write_mmspeed ((float)WaterData[0].thisLevel/100);
|
||||||
dis_write_ttflow (0);
|
dis_write_ttflow (WaterData[0].ttWater/100);
|
||||||
dis_write_code (SluiceData[0].ecode);
|
dis_write_code (SluiceData[0].ecode);
|
||||||
|
dis_write_motor_ste(1);
|
||||||
|
dis_write_current ((float)SluiceData[0].currt/100);
|
||||||
|
dis_write_open2debug(SluiceData[0].gopen);
|
||||||
|
dis_write_load((float)SluiceData[0].lload/1000);
|
||||||
|
dis_write_err(SluiceData[0].error); // SluiceData[i].error
|
||||||
|
// dis_write_open ( (float)WaterData[0].thisLevel/1000);
|
||||||
|
// dis_write_load ((float)WaterData[1].thisLevel/1000); // 荷重或者压力
|
||||||
|
// dis_write_mmspeed ((float)WaterData[2].thisLevel/1000);
|
||||||
|
// dis_write_audio(2);
|
||||||
break;
|
break;
|
||||||
case MAIL_VIEW_READSL:
|
case MAIL_VIEW_READSL: // 读取闸门开度
|
||||||
ddtt.type = DIS_TYPE_RD;
|
ddtt.type = DIS_TYPE_RD;
|
||||||
ddtt.Addr.addr = DIS_CNUM_SLSET;
|
ddtt.Addr.addr = DIS_CNUM_SLSET;
|
||||||
ddtt.Len = 2;
|
ddtt.Len = 2;
|
||||||
@@ -608,14 +834,19 @@ static void thread_entry (void * argument)
|
|||||||
case MAIL_VIEW_LOGIN: // 登录
|
case MAIL_VIEW_LOGIN: // 登录
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case MAIL_VIEW_NET_STE:
|
case MAIL_VIEW_NET_STE: // 刷新网络状态
|
||||||
ddtt.type = DIS_TYPE_WD_ICON;
|
ddtt.type = DIS_TYPE_WD_ICON;
|
||||||
ddtt.Addr.addr = DIS_CSTE_NET;
|
ddtt.Addr.addr = DIS_CSTE_NET;
|
||||||
ddtt.Int.Int = mail.index;
|
ddtt.Int.Int = mail.index;
|
||||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||||
break;
|
break;
|
||||||
|
case MAIL_VIEW_AUDIO:
|
||||||
|
dis_write_audio(mail.index);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -625,6 +856,7 @@ static void thread_entry (void * argument)
|
|||||||
|
|
||||||
if (RT_EOK == rt_event_recv (gUartEvents, EVENT_UART_VIEW_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 300, RT_NULL)) // 数据接受失败,上报异常状态
|
if (RT_EOK == rt_event_recv (gUartEvents, EVENT_UART_VIEW_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 300, RT_NULL)) // 数据接受失败,上报异常状态
|
||||||
{
|
{
|
||||||
|
elog_hexdump("lcd",16,g_ViewDrv.rx_buffer,g_ViewDrv.rx_size);
|
||||||
for (int i = 0; i < g_ViewDrv.rx_size; i++)
|
for (int i = 0; i < g_ViewDrv.rx_size; i++)
|
||||||
{
|
{
|
||||||
if (g_ViewDrv.rx_buffer[i] == 0x5A)
|
if (g_ViewDrv.rx_buffer[i] == 0x5A)
|
||||||
|
|||||||
+19
-4
@@ -35,6 +35,11 @@ ALIGN (RT_ALIGN_SIZE)
|
|||||||
static char thread_stack[2048];
|
static char thread_stack[2048];
|
||||||
static struct rt_thread os_app;
|
static struct rt_thread os_app;
|
||||||
|
|
||||||
|
#if !defined(LOG_TAG)
|
||||||
|
#define LOG_TAG "os_app"
|
||||||
|
#endif
|
||||||
|
#include <elog.h>
|
||||||
|
|
||||||
static rt_timer_t locktimer;
|
static rt_timer_t locktimer;
|
||||||
static void locktimerouter (void* parameter)
|
static void locktimerouter (void* parameter)
|
||||||
{
|
{
|
||||||
@@ -81,10 +86,10 @@ static void thread_entry (void *parameter)
|
|||||||
uint32_t id1 = HAL_GetUIDw0();
|
uint32_t id1 = HAL_GetUIDw0();
|
||||||
uint32_t id2 = HAL_GetUIDw1();
|
uint32_t id2 = HAL_GetUIDw1();
|
||||||
uint32_t id3 = HAL_GetUIDw2();
|
uint32_t id3 = HAL_GetUIDw2();
|
||||||
rt_kprintf ("ID:%X %X %X\r\n", id1, id2, id3);
|
log_i ("ID:%08X %08X %08X", id1, id2, id3);
|
||||||
rt_kprintf ("Version:%s,%s\r\n",__DATE__,__TIME__);
|
log_i ("Version:%s,%s",__DATE__,__TIME__);
|
||||||
rt_kprintf ("os-app running !\r\n");
|
log_i ("os-app running !");
|
||||||
|
//netWorkAesInit();
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
rt_thread_mdelay (500);
|
rt_thread_mdelay (500);
|
||||||
@@ -127,4 +132,14 @@ void OsShellTask (void * argument)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void OsSendMail(rt_mailbox_t box,uint16_t type,uint16_t index)
|
||||||
|
{
|
||||||
|
TypeIndexMail_t mail;
|
||||||
|
mail.Type = type;
|
||||||
|
mail.index = index;
|
||||||
|
rt_mb_send (box, * ( (uint32_t*) &mail));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
+29
-10
@@ -90,6 +90,9 @@ void MJEth1ThreadStart (void);
|
|||||||
void UpgradeThreadStart (void);
|
void UpgradeThreadStart (void);
|
||||||
void RtcThreadStart (void);
|
void RtcThreadStart (void);
|
||||||
|
|
||||||
|
|
||||||
|
void OsSendMail(rt_mailbox_t box,uint16_t type,uint16_t index);
|
||||||
|
|
||||||
#define EVENT_CTRL_SET_OPT_SLU (1U<< 0) // 发送开度控制到提闸线程
|
#define EVENT_CTRL_SET_OPT_SLU (1U<< 0) // 发送开度控制到提闸线程
|
||||||
#define EVENT_CTRL_SET_STP_SLU (1U<< 1) // 发送停止控制到提闸线程
|
#define EVENT_CTRL_SET_STP_SLU (1U<< 1) // 发送停止控制到提闸线程
|
||||||
#define EVENT_CTRL_SET_SUP_SLU (1U<< 2) // 发送上升控制到提闸线程
|
#define EVENT_CTRL_SET_SUP_SLU (1U<< 2) // 发送上升控制到提闸线程
|
||||||
@@ -124,16 +127,19 @@ void RtcThreadStart (void);
|
|||||||
#define EVENT_TRIG_COMM_RST (1U << 7) // MQTT 发送数据
|
#define EVENT_TRIG_COMM_RST (1U << 7) // MQTT 发送数据
|
||||||
#define EVENT_TRIG_UPGRADE_RX (1U << 8) // MQTT 接受到数据
|
#define EVENT_TRIG_UPGRADE_RX (1U << 8) // MQTT 接受到数据
|
||||||
#define EVENT_TRIG_NETMODE_TX2 (1U << 9) // 通过网络模块向通道2发送数据
|
#define EVENT_TRIG_NETMODE_TX2 (1U << 9) // 通过网络模块向通道2发送数据
|
||||||
|
#define EVENT_TRIG_CAT1_SHUT (1U << 10) // 通过4G 模块关机
|
||||||
|
#define EVENT_TRIG_ETH_SHUT (1U << 11) // 通过Eth 模块关机
|
||||||
|
|
||||||
|
|
||||||
#define MAIL_COMM_HEART 0
|
#define MAIL_COMM_HEART 0
|
||||||
#define MAIL_COMM_REGIST 1
|
#define MAIL_COMM_REGIST 1
|
||||||
#define MAIL_COMM_STAND 2
|
#define MAIL_COMM_STAND 2
|
||||||
#define MAIL_COMM_SLUICE 3
|
#define MAIL_COMM_SLUICE 3
|
||||||
#define MAIL_COMM_UPACK 4 // 提闸的ACK
|
#define MAIL_COMM_READPARA 4 // 读取参数
|
||||||
#define MAIL_COMM_SLACK 5 // 其他的ACK
|
#define MAIL_COMM_UPACK 5 // 升级的ACK
|
||||||
#define MAIL_COMM_READPARA 6 // 读取参数
|
#define MAIL_COMM_SLACK 6 // 提闸的ACK
|
||||||
#define MAIL_COMM_ACK 7 // 读取参数
|
#define MAIL_COMM_WRACK 7 // 修改参数ACK
|
||||||
|
#define MAIL_COMM_FACACK 8 // 出厂设置ACK
|
||||||
|
|
||||||
#define MAIL_SLUICE_OPT 0
|
#define MAIL_SLUICE_OPT 0
|
||||||
#define MAIL_SLUICE_STP 1
|
#define MAIL_SLUICE_STP 1
|
||||||
@@ -146,12 +152,25 @@ void RtcThreadStart (void);
|
|||||||
#define MAIL_CT_SDW 2 // 下降
|
#define MAIL_CT_SDW 2 // 下降
|
||||||
#define MAIL_CT_STP 3 // 停止
|
#define MAIL_CT_STP 3 // 停止
|
||||||
|
|
||||||
#define MAIL_VIEW_LOGIN 1 // 登录成功 需要跳转页面
|
#define MAIL_AUDIO_WEL 0 // 执行
|
||||||
#define MAIL_VIEW_FLUSH 2 // 刷新界面显示
|
#define MAIL_AUDIO_LOAD 1 // 下降
|
||||||
#define MAIL_VIEW_READSL 3 // 读取闸门开度
|
#define MAIL_AUDIO_OPEN 2 // 上升
|
||||||
#define MAIL_VIEW_COD_STE 4 // 更新编码器状态
|
#define MAIL_AUDIO_UP 3 // 停止
|
||||||
#define MAIL_VIEW_NET_STE 5 // 更新网络状态
|
#define MAIL_AUDIO_DOWN 4 // 停止
|
||||||
#define MAIL_VIEW_SLU_STE 6 // 更新闸门状态
|
#define MAIL_AUDIO_STOP 5 // 停止
|
||||||
|
#define MAIL_AUDIO_LOGIN_SUC 6 // 停止
|
||||||
|
#define MAIL_AUDIO_LOGIN_FIL 7 // 停止
|
||||||
|
#define MAIL_AUDIO_LOGIN_ADM 8 // 停止
|
||||||
|
|
||||||
|
|
||||||
|
#define MAIL_VIEW_LOGIN 1 // 登录成功 需要跳转页面
|
||||||
|
#define MAIL_VIEW_FLUSH 2 // 刷新界面显示
|
||||||
|
#define MAIL_VIEW_READSL 3 // 读取闸门开度
|
||||||
|
#define MAIL_VIEW_COD_STE 4 // 更新编码器状态
|
||||||
|
#define MAIL_VIEW_NET_STE 5 // 更新网络状态
|
||||||
|
#define MAIL_VIEW_SLU_STE 6 // 更新闸门状态
|
||||||
|
#define MAIL_VIEW_AUDIO 7 // 播放语音
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+156
-35
@@ -2,54 +2,175 @@
|
|||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "easyflash.h"
|
#include "easyflash.h"
|
||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
|
#include "cjson.h"
|
||||||
|
#include "rtthread.h"
|
||||||
|
#include "user_config.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(LOG_TAG)
|
||||||
|
#define LOG_TAG "simu"
|
||||||
|
#endif
|
||||||
|
#include <elog.h>
|
||||||
|
|
||||||
|
static const ParShallInfo_t ParShallTale[] =
|
||||||
|
{
|
||||||
|
{.w = 0, .c = 0, .m = 0},
|
||||||
|
{.w = 0.152, .c = 0.381, .m = 1.58 , .minLeve = 0.03, .maxLeve = 0.45, .minFlow = 1.5 / 1000, .maxFlow = 100 / 1000},
|
||||||
|
{.w = 0.25, .c = 0.561, .m = 1.513 , .minLeve = 0.03, .maxLeve = 0.60, .minFlow = 3.0 / 1000, .maxFlow = 250 / 1000},
|
||||||
|
{.w = 0.30, .c = 0.679, .m = 1.521 , .minLeve = 0.03, .maxLeve = 0.75, .minFlow = 3.5 / 1000, .maxFlow = 400 / 1000},
|
||||||
|
{.w = 0.45, .c = 1.038, .m = 1.537 , .minLeve = 0.03, .maxLeve = 0.75, .minFlow = 4.5 / 1000, .maxFlow = 630 / 1000},
|
||||||
|
{.w = 0.60, .c = 1.403, .m = 1.548 , .minLeve = 0.05, .maxLeve = 0.75, .minFlow = 12.5 / 1000, .maxFlow = 850 / 1000},
|
||||||
|
{.w = 0.75, .c = 1.772, .m = 1.557 , .minLeve = 0.06, .maxLeve = 0.75, .minFlow = 25.0 / 1000, .maxFlow = 1100 / 1000},
|
||||||
|
{.w = 0.90, .c = 2.147, .m = 1.565 , .minLeve = 0.06, .maxLeve = 0.75, .minFlow = 30.0 / 1000, .maxFlow = 1250 / 1000},
|
||||||
|
{.w = 1.00, .c = 2.397, .m = 1.569 , .minLeve = 0.06, .maxLeve = 0.80, .minFlow = 30.0 / 1000, .maxFlow = 1500 / 1000},
|
||||||
|
{.w = 1.20, .c = 2.904, .m = 1.577 , .minLeve = 0.06, .maxLeve = 0.80, .minFlow = 35.0 / 1000, .maxFlow = 2000 / 1000},
|
||||||
|
{.w = 1.50, .c = 3.668, .m = 1.586 , .minLeve = 0.06, .maxLeve = 0.80, .minFlow = 45.0 / 1000, .maxFlow = 2500 / 1000},
|
||||||
|
{.w = 1.80, .c = 4.440, .m = 1.593 , .minLeve = 0.08, .maxLeve = 0.80, .minFlow = 80.0 / 1000, .maxFlow = 3000 / 1000},
|
||||||
|
{.w = 2.10, .c = 5.222, .m = 1.599 , .minLeve = 0.08, .maxLeve = 0.80, .minFlow = 95.0 / 1000, .maxFlow = 3600 / 1000},
|
||||||
|
{.w = 2.40, .c = 6.004, .m = 1.605 , .minLeve = 0.08, .maxLeve = 0.80, .minFlow = 100.0 / 1000,.maxFlow = 4000 / 1000},
|
||||||
|
|
||||||
|
{.w = 3.05, .c = 7.463, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.07, .minFlow = 0.16, .maxFlow = 8.28},
|
||||||
|
{.w = 3.66, .c = 8.859, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.37, .minFlow = 0.19, .maxFlow = 14.68},
|
||||||
|
{.w = 4.57, .c = 10.96, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.67, .minFlow = 0.23, .maxFlow = 25.04},
|
||||||
|
{.w = 6.10, .c = 14.45, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.31, .maxFlow = 37.97},
|
||||||
|
|
||||||
|
{.w = 7.62, .c = 17.94, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.38, .maxFlow = 47.16},
|
||||||
|
{.w = 9.14, .c = 21.44, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.46, .maxFlow = 56.33},
|
||||||
|
{.w = 12.19, .c = 28.43, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.60, .maxFlow = 74.70},
|
||||||
|
{.w = 15.24, .c = 35.41, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.75, .maxFlow = 93.04},
|
||||||
|
|
||||||
|
} ;
|
||||||
|
|
||||||
// 两点法计算k,b
|
// 两点法计算k,b
|
||||||
//uint16_t math_k(uint32_t x0,uint32_t y0,uint32_t x1,uint32_t y1)
|
double math_k(double x0,double y0,double x1,double y1)
|
||||||
//{
|
{
|
||||||
// uint16_t k;
|
double k;
|
||||||
// k = (y0-x0)/(y1-x1);
|
k = (y1-y0)/(x1-x0);
|
||||||
// return k;
|
return k;
|
||||||
//}
|
}
|
||||||
|
|
||||||
//uint16_t math_k(uint32_t x0,uint32_t y0,uint32_t x1,uint32_t y1)
|
double math_b(double k,double x,double y)
|
||||||
//{
|
{
|
||||||
// uint16_t k;
|
double b;
|
||||||
// k = (y0-x0)/(y1-x1);
|
b = y - (k*x);
|
||||||
// return k;
|
return b;
|
||||||
//}
|
}
|
||||||
|
|
||||||
//WaterLeveInfo_t Info = {
|
//WaterLeveInfo_t Info = {
|
||||||
// .Y[0] = 2,
|
// .Y[0] = 2,
|
||||||
//};
|
//};
|
||||||
|
|
||||||
|
// k=(y2-y1)/(x2-x1)
|
||||||
|
|
||||||
|
typedef struct SimflowPara_t
|
||||||
|
{
|
||||||
|
double leve[11];
|
||||||
|
double flow[11];
|
||||||
|
int pallid ;
|
||||||
|
}SimflowPara_t;
|
||||||
|
|
||||||
// 水位流量关系表
|
// 水位流量关系表
|
||||||
//uint16_t WaterLeveCalc(int leve,int Open)
|
static SimflowPara_t g_para = {
|
||||||
//{
|
.leve = {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1},
|
||||||
// for (int i =0;i< 100;i++)
|
.flow = {0,0.036,0.105,0.200,0.317,0.454,0.713,0.897,0.955,1.015,1.025},
|
||||||
// {
|
.pallid = 7
|
||||||
// if (LeveInfo.X[i] > Open)
|
};
|
||||||
// {
|
|
||||||
// for (int j =0;j < 100;i++)
|
|
||||||
// {
|
|
||||||
// if (LeveInfo.Key[i].Y[j] >leve)
|
|
||||||
// {
|
|
||||||
// return LeveInfo.Key[i].Key[j];
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return 0;
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
|
// 水位流量关系表初始化
|
||||||
int32_t ParShallCalc(int index,double leve)
|
void SimuFlowInit(void)
|
||||||
{
|
{
|
||||||
char * p;
|
char *p ;
|
||||||
double flow = 0;
|
p = ef_get_env ("parshall");
|
||||||
flow = ParShallTale[index].c * pow(leve,ParShallTale[index].m);
|
g_para.pallid = atoi (p); // 巴歇尔流量计槽号
|
||||||
return (int32_t )(flow *100);
|
|
||||||
|
rt_kprintf("parshall:%d\r\n",g_para.pallid);
|
||||||
|
|
||||||
|
#ifdef SYK_06_18_SM
|
||||||
|
ef_set_env ("simu_flow","1");
|
||||||
|
ef_set_env("level","[0.1,0.18,0.26,0.34,0.42,0.5,0.58,0.66,0.74,0.8]");
|
||||||
|
ef_set_env("flow","[0.031,0.081,0.149,0.233,0.33,0.44,0.562,0.695,0.84,0.955]");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SYK_08_18_SM
|
||||||
|
ef_set_env ("simu_flow","1");
|
||||||
|
ef_set_env("level","[0.1,0.18,0.26,0.34,0.42,0.5,0.58,0.66,0.74,0.8]");
|
||||||
|
ef_set_env("flow","[0.043,0.113,0.206,0.32,0.453,0.603,0.769,0.951,1.147,1.304]");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SYK_10_18_SM
|
||||||
|
ef_set_env ("simu_flow","1");
|
||||||
|
ef_set_env("level","[0.1,0.18,0.26,0.34,0.42,0.5,0.58,0.66,0.74,0.8]");
|
||||||
|
ef_set_env("flow","[0.058,0.146,0.261,0.397,0.553,0.728,0.918,1.125,1.346,1.522]");
|
||||||
|
#endif
|
||||||
|
cJSON *root = NULL;
|
||||||
|
// 水位表
|
||||||
|
p = ef_get_env ("level") ;
|
||||||
|
root = cJSON_Parse (p);
|
||||||
|
int size = cJSON_GetArraySize (root);
|
||||||
|
if(size != 10)
|
||||||
|
{
|
||||||
|
cJSON_Delete (root);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
for (int i = 1; i < 11; i++)
|
||||||
|
{
|
||||||
|
g_para.leve[i] = cJSON_GetNumberValue (cJSON_GetArrayItem (root, i-1)); // 接入设备类型
|
||||||
|
}
|
||||||
|
// 流量表
|
||||||
|
p = ef_get_env ("flow") ;
|
||||||
|
root = cJSON_Parse (p);
|
||||||
|
size = cJSON_GetArraySize (root);
|
||||||
|
if(size != 10)
|
||||||
|
{
|
||||||
|
cJSON_Delete (root);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
for (int i = 1; i < 11; i++)
|
||||||
|
{
|
||||||
|
g_para.flow[i] = cJSON_GetNumberValue (cJSON_GetArrayItem (root, i-1)); // 接入设备类型
|
||||||
|
}
|
||||||
|
cJSON_Delete (root);
|
||||||
|
rt_kprintf("leve( mm):");
|
||||||
|
for (int i =0; i< 11;i++)
|
||||||
|
{
|
||||||
|
rt_kprintf("%6d,",(int)(g_para.leve[i] * 1000));
|
||||||
|
}
|
||||||
|
rt_kprintf("\r\nflow(dm3):");
|
||||||
|
for (int i =0; i< 11;i++)
|
||||||
|
{
|
||||||
|
rt_kprintf("%6d,",(int)(g_para.flow[i]*1000));
|
||||||
|
}
|
||||||
|
rt_kprintf("\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 水位流量关系表 单位cm
|
||||||
|
int32_t WaterLeveCalc(double leve)
|
||||||
|
{
|
||||||
|
double k,b;
|
||||||
|
double flow;
|
||||||
|
if((leve == 0) ||(leve >= g_para.leve[10]) )
|
||||||
|
return 0;
|
||||||
|
for (int i =0;i< 11;i++)
|
||||||
|
{
|
||||||
|
if (leve < g_para.leve[i])
|
||||||
|
{
|
||||||
|
k = math_k((double)g_para.leve[i-1],(double)g_para.flow[i-1],(double)g_para.leve[i],(double)g_para.flow[i]) ;
|
||||||
|
b = math_b(k,(double)g_para.leve[i],(double)g_para.flow[i]);
|
||||||
|
flow = k *leve +b;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (int32_t )(flow *1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int32_t ParShallCalc(double leve)
|
||||||
|
{
|
||||||
|
char * p;
|
||||||
|
double flow = 0;
|
||||||
|
flow = ParShallTale[g_para.pallid].c * pow(leve,ParShallTale[g_para.pallid].m);
|
||||||
|
return (int32_t )(flow *1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
#ifndef _SIM_FLOW_H
|
#ifndef _SIM_FLOW_H
|
||||||
#define _SIM_FLOW_H
|
#define _SIM_FLOW_H
|
||||||
int32_t ParShallCalc(int index,double leve);
|
|
||||||
|
void SimuFlowInit(void);
|
||||||
|
int32_t ParShallCalc(double leve);
|
||||||
|
int32_t WaterLeveCalc(double leve);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
+19
-99
@@ -1,5 +1,6 @@
|
|||||||
#include "data.h"
|
#include "data.h"
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -9,28 +10,19 @@
|
|||||||
******************************************/
|
******************************************/
|
||||||
volatile const char _makeData[] = __DATE__; //12字节,编译日期
|
volatile const char _makeData[] = __DATE__; //12字节,编译日期
|
||||||
volatile const char _makeTime[] = __TIME__; //9字节
|
volatile const char _makeTime[] = __TIME__; //9字节
|
||||||
volatile const char cBootv[] = "Ver3.0.0"; //获取时添加上面两个时间信息,最大长度64字节
|
//第一个字节环境变量修改时增加序号 第二个字节
|
||||||
|
volatile const char cBootv[] = "Ver5.0.11"; //
|
||||||
char _versionTemp[64];
|
char _versionTemp[64];
|
||||||
|
int g_cat1_log_enable = 0 ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
const StrIndex_t cDownDataType[] =
|
const StrIndex_t cDownDataType[] =
|
||||||
{
|
{
|
||||||
{"run", DownRun},
|
|
||||||
{"stop", DownStop},
|
|
||||||
{"open", DownOpen},
|
|
||||||
{"close", DownClose},
|
|
||||||
{"reg_ans", DownRegistAns},
|
|
||||||
{"heart_ans", DownHeartAns},
|
|
||||||
{"update", DownUpdate},
|
|
||||||
{"reboot", DownReboot},
|
|
||||||
{"config", DownConfig},
|
|
||||||
{"read", DownRead},
|
|
||||||
{"fact", DownFact}
|
|
||||||
=======
|
|
||||||
const StrIndex_t cDownDataType[] =
|
|
||||||
{
|
|
||||||
{"run",DownRun} ,
|
{"run",DownRun} ,
|
||||||
{"stop",DownStop} ,
|
{"stop",DownStop} ,
|
||||||
{"open",DownOpen} ,
|
{"open",DownOpen} ,
|
||||||
@@ -42,22 +34,13 @@ const StrIndex_t cDownDataType[] =
|
|||||||
{"config",DownConfig},
|
{"config",DownConfig},
|
||||||
{"read",DownRead} ,
|
{"read",DownRead} ,
|
||||||
{"fact",DownFact}
|
{"fact",DownFact}
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const StrIndex_t cSiteType[] =
|
const StrIndex_t cSiteType[] =
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
{"sluice", SiteSluice},
|
|
||||||
{"flow", SiteFlow},
|
|
||||||
{"press", SiteSee},
|
|
||||||
{"auto", SiteColl}, // 自动化采集站
|
|
||||||
{"trans", SiteServer},
|
|
||||||
{"level", SiteLevel},
|
|
||||||
{"skew", SiteSkew} //测斜仪
|
|
||||||
=======
|
|
||||||
{"sluice",SiteSluice} ,
|
{"sluice",SiteSluice} ,
|
||||||
{"flow",SiteFlow} ,
|
{"flow",SiteFlow} ,
|
||||||
{"press",SiteSee} ,
|
{"press",SiteSee} ,
|
||||||
@@ -65,25 +48,17 @@ const StrIndex_t cSiteType[] =
|
|||||||
{"trans",SiteServer} ,
|
{"trans",SiteServer} ,
|
||||||
{"level",SiteLevel},
|
{"level",SiteLevel},
|
||||||
{"skew",SiteSkew} //测斜仪
|
{"skew",SiteSkew} //测斜仪
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const StrIndex_t cMotorType[] =
|
const StrIndex_t cMotorType[] =
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
{"mg1000", MT_MG_1000},
|
|
||||||
{"qh100", MT_QH_V100},
|
|
||||||
{"qh200", MT_QH_V200},
|
|
||||||
{"zs100", MT_ZS_V100},
|
|
||||||
{"jz200", MT_JZ_V200}, // 金志 4-20 ma
|
|
||||||
=======
|
|
||||||
{"mg1000",MT_MG_1000} ,
|
{"mg1000",MT_MG_1000} ,
|
||||||
{"qh100", MT_QH_V100} ,
|
{"qh100", MT_QH_V100} ,
|
||||||
{"qh200", MT_QH_V200} ,
|
{"qh200", MT_QH_V200} ,
|
||||||
{"zs100", MT_ZS_V100} ,
|
{"zs100", MT_ZS_V100} ,
|
||||||
{"jz200", MT_JZ_V200} , // 金志 4-20 ma
|
{"jz200", MT_JZ_V200} , // 金志 4-20 ma
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
{"dy100", MT_DY_V100}, // 大禹锥型阀
|
{"dy100", MT_DY_V100}, // 大禹锥型阀
|
||||||
{"kg100", MT_KG_V100}, // 开关量模块
|
{"kg100", MT_KG_V100}, // 开关量模块
|
||||||
{"kr100", MT_KR_V100}, // 闸位计
|
{"kr100", MT_KR_V100}, // 闸位计
|
||||||
@@ -93,7 +68,7 @@ const StrIndex_t cMotorType[] =
|
|||||||
|
|
||||||
const StrIndex_t c4851Type[] =
|
const StrIndex_t c4851Type[] =
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
{"mg1000", ST_MG_1000},
|
{"mg1000", ST_MG_1000},
|
||||||
{"qh100", ST_QH_V100},
|
{"qh100", ST_QH_V100},
|
||||||
{"qh200", ST_QH_V200},
|
{"qh200", ST_QH_V200},
|
||||||
@@ -102,14 +77,7 @@ const StrIndex_t c4851Type[] =
|
|||||||
{"kg100", ST_KG_V100},
|
{"kg100", ST_KG_V100},
|
||||||
{"at100", ST_AT_V100},
|
{"at100", ST_AT_V100},
|
||||||
{"kr100", ST_KR_V100},
|
{"kr100", ST_KR_V100},
|
||||||
=======
|
|
||||||
{"mg1000",ST_MG_1000} ,
|
|
||||||
{"qh100",ST_QH_V100} ,
|
|
||||||
{"qh200",ST_QH_V200} ,
|
|
||||||
{"dy100",ST_DY_V100} ,
|
|
||||||
{"kg100",ST_KG_V100} ,
|
|
||||||
{"at100",ST_AT_V100} ,
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const StrIndex_t cU485Type[] =
|
const StrIndex_t cU485Type[] =
|
||||||
@@ -118,7 +86,7 @@ const StrIndex_t cU485Type[] =
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 485 2 通道
|
// 485 2 通道
|
||||||
<<<<<<< HEAD
|
|
||||||
const StrIndex_t c4852Type[] =
|
const StrIndex_t c4852Type[] =
|
||||||
{
|
{
|
||||||
{"rds600", ST_RDS_600},
|
{"rds600", ST_RDS_600},
|
||||||
@@ -127,49 +95,12 @@ const StrIndex_t c4852Type[] =
|
|||||||
{"zkjszk", ST_ZK_JSZK},
|
{"zkjszk", ST_ZK_JSZK},
|
||||||
{"djx100", ST_DJX_100},
|
{"djx100", ST_DJX_100},
|
||||||
{"rds300", ST_RDS_300},
|
{"rds300", ST_RDS_300},
|
||||||
{"mi600", ST_MI_600} // 测斜仪
|
{"mi600", ST_MI_600}, // 测斜仪
|
||||||
=======
|
{"ht200", ST_HT_V200} // 华天压力计
|
||||||
const StrIndex_t c4852Type[] =
|
|
||||||
{
|
|
||||||
{"rds600",ST_RDS_600} ,
|
|
||||||
{"tds300",ST_TDS_300} ,
|
|
||||||
{"ht100",ST_HT_V100} ,
|
|
||||||
{"zkjszk",ST_ZK_JSZK},
|
|
||||||
{"djx100",ST_DJX_100},
|
|
||||||
{"rds300",ST_RDS_300},
|
|
||||||
{"mi600",ST_MI_600} // 测斜仪
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const ParShallInfo_t ParShallTale[] =
|
|
||||||
{
|
|
||||||
{.w = 0, .c = 0, .m = 0},
|
|
||||||
{.w = 0.152, .c = 0.381, .m = 1.58 , .minLeve = 0.03, .maxLeve = 0.45, .minFlow = 1.5 / 1000, .maxFlow = 100 / 1000},
|
|
||||||
{.w = 0.25, .c = 0.561, .m = 1.513 , .minLeve = 0.03, .maxLeve = 0.60, .minFlow = 3.0 / 1000, .maxFlow = 250 / 1000},
|
|
||||||
{.w = 0.30, .c = 0.679, .m = 1.521 , .minLeve = 0.03, .maxLeve = 0.75, .minFlow = 3.5 / 1000, .maxFlow = 400 / 1000},
|
|
||||||
{.w = 0.45, .c = 1.038, .m = 1.537 , .minLeve = 0.03, .maxLeve = 0.75, .minFlow = 4.5 / 1000, .maxFlow = 630 / 1000},
|
|
||||||
{.w = 0.60, .c = 1.403, .m = 1.548 , .minLeve = 0.05, .maxLeve = 0.75, .minFlow = 12.5 / 1000, .maxFlow = 850 / 1000},
|
|
||||||
{.w = 0.75, .c = 1.772, .m = 1.557 , .minLeve = 0.06, .maxLeve = 0.75, .minFlow = 25.0 / 1000, .maxFlow = 1100 / 1000},
|
|
||||||
{.w = 0.90, .c = 2.147, .m = 1.565 , .minLeve = 0.06, .maxLeve = 0.75, .minFlow = 30.0 / 1000, .maxFlow = 1250 / 1000},
|
|
||||||
{.w = 1.00, .c = 2.397, .m = 1.569 , .minLeve = 0.06, .maxLeve = 0.80, .minFlow = 30.0 / 1000, .maxFlow = 1500 / 1000},
|
|
||||||
{.w = 1.20, .c = 2.904, .m = 1.577 , .minLeve = 0.06, .maxLeve = 0.80, .minFlow = 35.0 / 1000, .maxFlow = 2000 / 1000},
|
|
||||||
{.w = 1.50, .c = 3.668, .m = 1.586 , .minLeve = 0.06, .maxLeve = 0.80, .minFlow = 45.0 / 1000, .maxFlow = 2500 / 1000},
|
|
||||||
{.w = 1.80, .c = 4.440, .m = 1.593 , .minLeve = 0.08, .maxLeve = 0.80, .minFlow = 80.0 / 1000, .maxFlow = 3000 / 1000},
|
|
||||||
{.w = 2.10, .c = 5.222, .m = 1.599 , .minLeve = 0.08, .maxLeve = 0.80, .minFlow = 95.0 / 1000, .maxFlow = 3600 / 1000},
|
|
||||||
{.w = 2.40, .c = 6.004, .m = 1.605 , .minLeve = 0.08, .maxLeve = 0.80, .minFlow = 100.0 / 1000, .maxFlow = 4000 / 1000},
|
|
||||||
|
|
||||||
{.w = 3.05, .c = 7.463, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.07, .minFlow = 0.16, .maxFlow = 8.28},
|
|
||||||
{.w = 3.66, .c = 8.859, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.37, .minFlow = 0.19, .maxFlow = 14.68},
|
|
||||||
{.w = 4.57, .c = 10.96, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.67, .minFlow = 0.23, .maxFlow = 25.04},
|
|
||||||
{.w = 6.10, .c = 14.45, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.31, .maxFlow = 37.97},
|
|
||||||
|
|
||||||
{.w = 7.62, .c = 17.94, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.38, .maxFlow = 47.16},
|
|
||||||
{.w = 9.14, .c = 21.44, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.46, .maxFlow = 56.33},
|
|
||||||
{.w = 12.19, .c = 28.43, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.60, .maxFlow = 74.70},
|
|
||||||
{.w = 15.24, .c = 35.41, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.75, .maxFlow = 93.04},
|
|
||||||
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -179,14 +110,11 @@ WaterData_t WaterData[WATER_COUTN];
|
|||||||
InclinometerData_t IncData[6]; // 测斜仪数据
|
InclinometerData_t IncData[6]; // 测斜仪数据
|
||||||
|
|
||||||
SysData_t SysData;
|
SysData_t SysData;
|
||||||
<<<<<<< HEAD
|
|
||||||
SOFTRTC_t g_SoftRtc =
|
SOFTRTC_t g_SoftRtc =
|
||||||
{
|
{
|
||||||
23, 10, 1, 0, 0, 0
|
23, 10, 1, 0, 0, 0
|
||||||
=======
|
|
||||||
SOFTRTC_t g_SoftRtc = {
|
|
||||||
23,10,1,0,0,0
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t g_ifconfig = 0;
|
uint32_t g_ifconfig = 0;
|
||||||
@@ -208,10 +136,8 @@ int cMotorGetType (char * str)
|
|||||||
|
|
||||||
int c4851GetType (char * str)
|
int c4851GetType (char * str)
|
||||||
{
|
{
|
||||||
rt_kprintf ("485 option count:%d\r\n", sizeof (c4851Type) / sizeof (StrIndex_t)) ;
|
|
||||||
for (int i = 0; i < sizeof (c4851Type) / sizeof (StrIndex_t); i++)
|
for (int i = 0; i < sizeof (c4851Type) / sizeof (StrIndex_t); i++)
|
||||||
{
|
{
|
||||||
rt_kprintf ("%s,%s\r\n", str, c4851Type[i].str) ;
|
|
||||||
if (rt_memcmp (str, c4851Type[i].str, rt_strlen (str)) == 0)
|
if (rt_memcmp (str, c4851Type[i].str, rt_strlen (str)) == 0)
|
||||||
{
|
{
|
||||||
return c4851Type[i].index;
|
return c4851Type[i].index;
|
||||||
@@ -278,19 +204,13 @@ int cSiteType2Index (char * str)
|
|||||||
/**********************************************
|
/**********************************************
|
||||||
获取boot版本信息
|
获取boot版本信息
|
||||||
**********************************************/
|
**********************************************/
|
||||||
<<<<<<< HEAD
|
|
||||||
void *GetVersion (void)
|
|
||||||
{
|
|
||||||
int i = rt_sprintf (_versionTemp, "%s-%s %s", cBootv, _makeData, _makeTime);
|
|
||||||
_versionTemp[i] = 0;
|
|
||||||
return (void*) _versionTemp;
|
|
||||||
=======
|
|
||||||
void *GetVersion(void)
|
void *GetVersion(void)
|
||||||
{
|
{
|
||||||
int i = rt_sprintf(_versionTemp,"%s-%s %s",cBootv, _makeData, _makeTime);
|
int i = rt_sprintf(_versionTemp,"%s-%s %s",cBootv, _makeData, _makeTime);
|
||||||
_versionTemp[i] = 0;
|
_versionTemp[i] = 0;
|
||||||
return (void*)_versionTemp;
|
return (void*)_versionTemp;
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+29
-29
@@ -1,13 +1,26 @@
|
|||||||
#ifndef _DATA_H
|
#ifndef _DATA_H
|
||||||
#define _DATA_H
|
#define _DATA_H
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "user_config.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef USER_MINLE_CHAN2
|
||||||
|
|
||||||
|
|
||||||
#define SLUICE_COUTN 1// 当前处理几口闸
|
#define SLUICE_COUTN 1// 当前处理几口闸
|
||||||
|
#define SUBTOPIC_COUNT 2 // 订阅topic 数量
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define SLUICE_COUTN 1// 当前处理几口闸
|
||||||
|
#define SUBTOPIC_COUNT 1 // 订阅topic 数量
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define WATER_COUTN 6// 当前接入n个流量计
|
#define WATER_COUTN 6// 当前接入n个流量计
|
||||||
|
|
||||||
#define SUBTOPIC_COUNT 1 // 订阅topic 数量
|
|
||||||
#define SLUCIE_EXEC_COUNT 20// 闸门异常时间
|
#define SLUCIE_EXEC_COUNT 20// 闸门异常时间
|
||||||
|
|
||||||
|
|
||||||
@@ -25,6 +38,7 @@
|
|||||||
|
|
||||||
extern uint32_t g_ifconfig;
|
extern uint32_t g_ifconfig;
|
||||||
extern uint32_t g_ifupdate;
|
extern uint32_t g_ifupdate;
|
||||||
|
extern int g_cat1_log_enable ;
|
||||||
|
|
||||||
typedef struct StrIndex_t
|
typedef struct StrIndex_t
|
||||||
{
|
{
|
||||||
@@ -70,6 +84,8 @@ typedef struct SluiceData_t
|
|||||||
int32_t rload; // 右荷重 单位 kg
|
int32_t rload; // 右荷重 单位 kg
|
||||||
int32_t ecode; // 编码器原始数据
|
int32_t ecode; // 编码器原始数据
|
||||||
int32_t currt; // 设备电流
|
int32_t currt; // 设备电流
|
||||||
|
int32_t error; // 错误编码
|
||||||
|
int32_t state; // 状态
|
||||||
} SluiceData_t;
|
} SluiceData_t;
|
||||||
|
|
||||||
|
|
||||||
@@ -86,6 +102,7 @@ typedef struct SysData_t
|
|||||||
int scram; // 急停被按下
|
int scram; // 急停被按下
|
||||||
char fileName[64]; // 文件名
|
char fileName[64]; // 文件名
|
||||||
int fileSize; // 文件大小
|
int fileSize; // 文件大小
|
||||||
|
|
||||||
} SysData_t;
|
} SysData_t;
|
||||||
|
|
||||||
typedef struct SOFTRTC_t
|
typedef struct SOFTRTC_t
|
||||||
@@ -96,11 +113,9 @@ typedef struct SOFTRTC_t
|
|||||||
uint8_t hour;
|
uint8_t hour;
|
||||||
uint8_t minutes;
|
uint8_t minutes;
|
||||||
uint8_t second;
|
uint8_t second;
|
||||||
<<<<<<< HEAD
|
|
||||||
} SOFTRTC_t;
|
|
||||||
=======
|
|
||||||
}SOFTRTC_t;
|
}SOFTRTC_t;
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -122,11 +137,9 @@ typedef struct WaterData_t
|
|||||||
int32_t thisSpeed; // 流速
|
int32_t thisSpeed; // 流速
|
||||||
int32_t thisPress; // 压力
|
int32_t thisPress; // 压力
|
||||||
int32_t thisTemp; // 温度
|
int32_t thisTemp; // 温度
|
||||||
<<<<<<< HEAD
|
|
||||||
int retry ; // 重试次数
|
int retry ; // 重试次数
|
||||||
=======
|
|
||||||
int retry ; // 重试次数
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
} WaterData_t;
|
} WaterData_t;
|
||||||
|
|
||||||
|
|
||||||
@@ -173,6 +186,7 @@ typedef enum S4852Type_t
|
|||||||
ST_DJX_100, // 丁家峡闸门 读取开度
|
ST_DJX_100, // 丁家峡闸门 读取开度
|
||||||
ST_RDS_300, // 雷达流量计
|
ST_RDS_300, // 雷达流量计
|
||||||
ST_MI_600, // 鹦鸽嘴测斜仪
|
ST_MI_600, // 鹦鸽嘴测斜仪
|
||||||
|
ST_HT_V200, // 华天压力计
|
||||||
} S4852Type_t;
|
} S4852Type_t;
|
||||||
|
|
||||||
|
|
||||||
@@ -194,11 +208,9 @@ typedef enum SiteType_t
|
|||||||
SiteServer, // 串口服务器
|
SiteServer, // 串口服务器
|
||||||
SiteLevel, // 水位站
|
SiteLevel, // 水位站
|
||||||
SiteSkew // 测斜仪
|
SiteSkew // 测斜仪
|
||||||
<<<<<<< HEAD
|
|
||||||
} SiteType_t;
|
} SiteType_t;
|
||||||
=======
|
|
||||||
}SiteType_t;
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum DownDataType_t
|
typedef enum DownDataType_t
|
||||||
@@ -214,11 +226,8 @@ typedef enum DownDataType_t
|
|||||||
DownConfig = 8, // 修改参数
|
DownConfig = 8, // 修改参数
|
||||||
DownRead = 9, // 读取参数
|
DownRead = 9, // 读取参数
|
||||||
DownFact = 10, // 读取参数
|
DownFact = 10, // 读取参数
|
||||||
<<<<<<< HEAD
|
|
||||||
} DownDataType_t;
|
} DownDataType_t;
|
||||||
=======
|
|
||||||
}DownDataType_t;
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -236,19 +245,13 @@ typedef struct TypeIndexMail_t
|
|||||||
|
|
||||||
extern SluiceData_t SluiceData[SLUICE_COUTN];
|
extern SluiceData_t SluiceData[SLUICE_COUTN];
|
||||||
extern WaterData_t WaterData[WATER_COUTN];
|
extern WaterData_t WaterData[WATER_COUTN];
|
||||||
<<<<<<< HEAD
|
|
||||||
extern InclinometerData_t IncData[6];
|
extern InclinometerData_t IncData[6];
|
||||||
extern SysData_t SysData;
|
extern SysData_t SysData;
|
||||||
extern const WaterLeveInfo_t LeveInfo;
|
extern const WaterLeveInfo_t LeveInfo;
|
||||||
extern const ParShallInfo_t ParShallTale[];
|
extern const ParShallInfo_t ParShallTale[];
|
||||||
extern SOFTRTC_t g_SoftRtc;
|
extern SOFTRTC_t g_SoftRtc;
|
||||||
=======
|
|
||||||
extern InclinometerData_t IncData[6];
|
|
||||||
extern SysData_t SysData;
|
|
||||||
extern const WaterLeveInfo_t LeveInfo;
|
|
||||||
extern const ParShallInfo_t ParShallTale[];
|
|
||||||
extern SOFTRTC_t g_SoftRtc;
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
|
|
||||||
|
|
||||||
int cMotorGetType (char * str);
|
int cMotorGetType (char * str);
|
||||||
@@ -269,11 +272,8 @@ int cDownType2Index (char * str);
|
|||||||
int cSiteType2Index (char * str);
|
int cSiteType2Index (char * str);
|
||||||
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
void *GetVersion (void);
|
void *GetVersion (void);
|
||||||
=======
|
|
||||||
void *GetVersion(void);
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+10
-20
@@ -14,38 +14,30 @@ DIState_t MX_Din_Pull (int chann)
|
|||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
ret = (DIState_t) HAL_GPIO_ReadPin (DI2_GPIO_Port, DI2_Pin);
|
ret = (DIState_t) HAL_GPIO_ReadPin (DI2_GPIO_Port, DI2_Pin);
|
||||||
=======
|
|
||||||
ret = (DIState_t)HAL_GPIO_ReadPin (DI2_GPIO_Port, DI2_Pin);
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
ret = (DIState_t) HAL_GPIO_ReadPin (DI3_GPIO_Port, DI3_Pin);
|
ret = (DIState_t) HAL_GPIO_ReadPin (DI3_GPIO_Port, DI3_Pin);
|
||||||
=======
|
|
||||||
ret = (DIState_t)HAL_GPIO_ReadPin (DI3_GPIO_Port, DI3_Pin);
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
ret = (DIState_t) HAL_GPIO_ReadPin (DI4_GPIO_Port, DI4_Pin);
|
ret = (DIState_t) HAL_GPIO_ReadPin (DI4_GPIO_Port, DI4_Pin);
|
||||||
=======
|
break;
|
||||||
ret = (DIState_t)HAL_GPIO_ReadPin (DI4_GPIO_Port, DI4_Pin);
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case 5:
|
case 5:
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
ret = (DIState_t) HAL_GPIO_ReadPin (DI5_GPIO_Port, DI5_Pin);
|
ret = (DIState_t) HAL_GPIO_ReadPin (DI5_GPIO_Port, DI5_Pin);
|
||||||
=======
|
|
||||||
ret = (DIState_t)HAL_GPIO_ReadPin (DI5_GPIO_Port, DI5_Pin);
|
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 6:
|
case 6:
|
||||||
@@ -55,6 +47,4 @@ DIState_t MX_Din_Pull (int chann)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
+1
-4
@@ -5,11 +5,8 @@ typedef enum DIState_t
|
|||||||
{
|
{
|
||||||
DI_HIGH = 1,
|
DI_HIGH = 1,
|
||||||
DI_LOW = 0
|
DI_LOW = 0
|
||||||
<<<<<<< HEAD
|
|
||||||
} DIState_t;
|
|
||||||
=======
|
|
||||||
}DIState_t;
|
}DIState_t;
|
||||||
>>>>>>> 3a537f633c99d30fa3fe5d01105f6525a48d3d72
|
|
||||||
|
|
||||||
void DiInit (void);
|
void DiInit (void);
|
||||||
DIState_t MX_Din_Pull (int chann);
|
DIState_t MX_Din_Pull (int chann);
|
||||||
|
|||||||
+2
-1
@@ -3,4 +3,5 @@
|
|||||||
|
|
||||||
void MX_Dout_Push (int index, int pwm);
|
void MX_Dout_Push (int index, int pwm);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
+58
-27
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#if !defined(LOG_TAG)
|
#if !defined(LOG_TAG)
|
||||||
#define LOG_TAG "CAT1"
|
#define LOG_TAG "cat1"
|
||||||
#endif
|
#endif
|
||||||
#include <elog.h>
|
#include <elog.h>
|
||||||
|
|
||||||
@@ -26,15 +26,19 @@ static char tcprxbbuff[1200];
|
|||||||
static char tcptxbbuff[1200];
|
static char tcptxbbuff[1200];
|
||||||
|
|
||||||
|
|
||||||
netDrv_t g_cat1Drv =
|
|
||||||
|
|
||||||
|
|
||||||
|
netDrvInfo_t g_cat1Drv =
|
||||||
{
|
{
|
||||||
0, // 信号值
|
.Csq = 0, // 信号值
|
||||||
"", // iccid
|
.Iccid = "", // iccid
|
||||||
Init, // 状态
|
.State = Init, // 状态
|
||||||
tcprxbbuff, // 接受缓存
|
.rxbuff = tcprxbbuff, // 接受缓存
|
||||||
0, // 接受数据长度
|
.rx_size = 0, // 接受数据长度
|
||||||
tcptxbbuff, // 发送数据缓存
|
.txbuff = tcptxbbuff, // 发送数据缓存
|
||||||
0, // 发送数据长度
|
.tx_size = 0,
|
||||||
|
.IsEnable = 1, // 发送数据长度
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -48,7 +52,7 @@ static void ec200_resp_csq_callback (char * data, uint16_t length)
|
|||||||
p = strstr (data, "+CSQ:");
|
p = strstr (data, "+CSQ:");
|
||||||
p = p + 6;
|
p = p + 6;
|
||||||
g_cat1Drv.Csq = atoi (p);
|
g_cat1Drv.Csq = atoi (p);
|
||||||
rt_kprintf ("CSQ: <<< <%d>\r\n", g_cat1Drv.Csq);
|
log_i ("CSQ: <<< <%d>", g_cat1Drv.Csq);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 校准时间程序
|
// 校准时间程序
|
||||||
@@ -75,7 +79,7 @@ static void ec200_resp_qlts_callback (char * data, uint16_t length)
|
|||||||
p = p + 3; // p
|
p = p + 3; // p
|
||||||
k[5] = atoi (p); // 秒
|
k[5] = atoi (p); // 秒
|
||||||
k[5] = (k[5] + (k[5] / 10) * 6) ;
|
k[5] = (k[5] + (k[5] / 10) * 6) ;
|
||||||
rt_kprintf ("20%02x-%02x-%02x %02x:%02x:%02x\r\n", k[0], k[1], k[2], k[3], k[4], k[5]);
|
log_i ("DateTime:20%02x-%02x-%02x %02x:%02x:%02x", k[0], k[1], k[2], k[3], k[4], k[5]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +91,7 @@ static void ec200_resp_iccid_callback (char * data, uint16_t length)
|
|||||||
p = p + 8;
|
p = p + 8;
|
||||||
rt_memset (SysData.iccid, 0, 32);
|
rt_memset (SysData.iccid, 0, 32);
|
||||||
rt_memcpy (SysData.iccid, p, 20);
|
rt_memcpy (SysData.iccid, p, 20);
|
||||||
rt_kprintf ("ICCID: <<< <%d> [%s]\r\n", length, SysData.iccid);
|
log_i ("ICCID: [%s]", SysData.iccid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ec200_resp_qird_callback (char * data, uint16_t length)
|
static void ec200_resp_qird_callback (char * data, uint16_t length)
|
||||||
@@ -115,6 +119,9 @@ static void ec200_resp_qird_callback (char * data, uint16_t length)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// type 0 无需打包 1 需要重新打包
|
// type 0 无需打包 1 需要重新打包
|
||||||
const struct
|
const struct
|
||||||
{
|
{
|
||||||
@@ -158,14 +165,20 @@ static CommRet_T cat1_sendcmd_and_responce (int time, char * tx, int size, char
|
|||||||
{
|
{
|
||||||
MX_UART_Clear (&g_GSMDrv);
|
MX_UART_Clear (&g_GSMDrv);
|
||||||
MX_UART_PutBuffer (&g_GSMDrv, tx, size);
|
MX_UART_PutBuffer (&g_GSMDrv, tx, size);
|
||||||
//rt_kprintf ("%.*s", size, tx) ;
|
if (g_cat1_log_enable == 1)
|
||||||
|
{
|
||||||
|
elog_hexdump ("cat1tx", 16, tx, size);
|
||||||
|
}
|
||||||
//timeout = cat1list[i].waitms;
|
//timeout = cat1list[i].waitms;
|
||||||
int timeout = time;
|
int timeout = time;
|
||||||
while (timeout--)
|
while (timeout--)
|
||||||
{
|
{
|
||||||
if (RT_EOK == rt_event_recv (gUartEvents, EVENT_UART_GSM_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 0, RT_NULL))
|
if (RT_EOK == rt_event_recv (gUartEvents, EVENT_UART_GSM_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 3, RT_NULL))
|
||||||
{
|
{
|
||||||
//rt_kprintf ("[%.*s]", g_GSMDrv.rx_size, g_GSMDrv.rx_buffer) ;
|
if (g_cat1_log_enable == 1)
|
||||||
|
{
|
||||||
|
elog_hexdump ("cat1rx", 16, g_GSMDrv.rx_buffer, g_GSMDrv.rx_size) ;
|
||||||
|
}
|
||||||
if (NULL != rt_strstr ( (char *) g_GSMDrv.rx_buffer, ack))
|
if (NULL != rt_strstr ( (char *) g_GSMDrv.rx_buffer, ack))
|
||||||
{
|
{
|
||||||
if (call != NULL)
|
if (call != NULL)
|
||||||
@@ -176,7 +189,7 @@ static CommRet_T cat1_sendcmd_and_responce (int time, char * tx, int size, char
|
|||||||
}
|
}
|
||||||
MX_UART_Clear (&g_GSMDrv);
|
MX_UART_Clear (&g_GSMDrv);
|
||||||
}
|
}
|
||||||
rt_thread_mdelay (1);
|
//rt_thread_mdelay (3);
|
||||||
}
|
}
|
||||||
return RetErr; // 超时
|
return RetErr; // 超时
|
||||||
}
|
}
|
||||||
@@ -200,15 +213,22 @@ static void thread_entry (void * argument)
|
|||||||
rt_sprintf (at_cmd, "AT+QIOPEN=1,0,\"TCP\",\"%s\",%d,0,0\r", ipaddr, ipport);
|
rt_sprintf (at_cmd, "AT+QIOPEN=1,0,\"TCP\",\"%s\",%d,0,0\r", ipaddr, ipport);
|
||||||
g_GSMDrv.rxdone = cat1_rx_done;
|
g_GSMDrv.rxdone = cat1_rx_done;
|
||||||
g_GSMDrv.BaudRate = 115200;
|
g_GSMDrv.BaudRate = 115200;
|
||||||
|
MX_UART_Init (&g_GSMDrv);
|
||||||
// 启动4G 模块电源
|
// 启动4G 模块电源
|
||||||
// 拉高4G 模块复位
|
// 拉高4G 模块复位
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
CAT1RST:
|
CAT1RST:
|
||||||
|
HAL_GPIO_WritePin (GSM_PW_GPIO_Port, GSM_PW_Pin, GPIO_PIN_RESET); // 关闭4G 模块电源
|
||||||
// 初始化串口,打开模块电源
|
// 初始化串口,打开模块电源
|
||||||
g_cat1Drv.State = Init;
|
g_cat1Drv.State = Init;
|
||||||
MX_UART_Init (&g_GSMDrv);
|
if (g_cat1Drv.IsEnable == false)
|
||||||
HAL_GPIO_WritePin (GSM_PW_GPIO_Port, GSM_PW_Pin, GPIO_PIN_RESET); // 关闭4G 模块电源
|
{
|
||||||
|
rt_thread_delay (3000);
|
||||||
|
goto CAT1RST;
|
||||||
|
}
|
||||||
|
//MX_UART_Init (&g_GSMDrv);
|
||||||
|
|
||||||
rt_thread_mdelay (3000);
|
rt_thread_mdelay (3000);
|
||||||
HAL_GPIO_WritePin (GSM_PW_GPIO_Port, GSM_PW_Pin, GPIO_PIN_SET); // 开启4G
|
HAL_GPIO_WritePin (GSM_PW_GPIO_Port, GSM_PW_Pin, GPIO_PIN_SET); // 开启4G
|
||||||
rt_thread_mdelay (100);
|
rt_thread_mdelay (100);
|
||||||
@@ -216,7 +236,8 @@ CAT1RST:
|
|||||||
HAL_GPIO_WritePin (GSM_RST_GPIO_Port, GSM_RST_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin (GSM_RST_GPIO_Port, GSM_RST_Pin, GPIO_PIN_RESET);
|
||||||
rt_thread_mdelay (100);
|
rt_thread_mdelay (100);
|
||||||
HAL_GPIO_WritePin (GSM_RST_GPIO_Port, GSM_RST_Pin, GPIO_PIN_SET);
|
HAL_GPIO_WritePin (GSM_RST_GPIO_Port, GSM_RST_Pin, GPIO_PIN_SET);
|
||||||
rt_thread_mdelay (8000);
|
rt_thread_mdelay (10000);
|
||||||
|
log_d ("cat.1 init complete");
|
||||||
for (int i = 0; i < MAXSETP; i++)
|
for (int i = 0; i < MAXSETP; i++)
|
||||||
{
|
{
|
||||||
retry = cat1list[i].retry;
|
retry = cat1list[i].retry;
|
||||||
@@ -231,22 +252,27 @@ CAT1RST:
|
|||||||
retry--;
|
retry--;
|
||||||
if (retry <= 0)
|
if (retry <= 0)
|
||||||
{
|
{
|
||||||
rt_kprintf ("Join Faild%d \r\n", i);
|
log_i ("Join Faild");
|
||||||
goto CAT1RST;
|
goto CAT1RST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 关机
|
||||||
|
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_CAT1_SHUT, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL)) // 需要发
|
||||||
|
{
|
||||||
|
goto CAT1RST;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rt_kprintf ("Join Success \r\n");
|
log_i ("Join Success ");
|
||||||
rt_sprintf (at_cmd, "AT+QIOPEN=1,0,\"TCP\",\"%s\",%d,0,0\r", ipaddr, ipport);
|
rt_sprintf (at_cmd, "AT+QIOPEN=1,0,\"TCP\",\"%s\",%d,0,0\r", ipaddr, ipport);
|
||||||
if (cat1_sendcmd_and_responce (15000, at_cmd, strlen (at_cmd), "+QIOPEN: 0,0", NULL) == RetSucc)
|
if (cat1_sendcmd_and_responce (15000, at_cmd, strlen (at_cmd), "+QIOPEN: 0,0", NULL) == RetSucc)
|
||||||
{
|
{
|
||||||
g_cat1Drv.State = Conn;
|
g_cat1Drv.State = Conn;
|
||||||
rt_kprintf ("Net is ready \r\n");
|
log_i ("connected %s:%d success", ipaddr, ipport);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rt_kprintf ("Net is Error \r\n");
|
log_i ("connected server error");
|
||||||
goto CAT1RST;
|
goto CAT1RST;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,12 +287,12 @@ CAT1RST:
|
|||||||
rt_thread_mdelay (10);
|
rt_thread_mdelay (10);
|
||||||
if (cat1_sendcmd_and_responce (1000, at_cmd, strlen (at_cmd), ">", NULL) != RetSucc)
|
if (cat1_sendcmd_and_responce (1000, at_cmd, strlen (at_cmd), ">", NULL) != RetSucc)
|
||||||
{
|
{
|
||||||
rt_kprintf ("NET:+CME:ERROR QISEND\r\n");
|
log_i ("NET:+CME:ERROR QISEND\r\n");
|
||||||
goto CAT1RST;
|
goto CAT1RST;
|
||||||
}
|
}
|
||||||
if (cat1_sendcmd_and_responce (3000, g_cat1Drv.txbuff, g_cat1Drv.tx_size, "SEND OK", NULL) != RetSucc)
|
if (cat1_sendcmd_and_responce (3000, g_cat1Drv.txbuff, g_cat1Drv.tx_size, "SEND OK", NULL) != RetSucc)
|
||||||
{
|
{
|
||||||
rt_kprintf ("NET:+CME:ERROR QPUSH\r\n");
|
log_i ("NET:+CME:ERROR QPUSH\r\n");
|
||||||
goto CAT1RST;
|
goto CAT1RST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -275,7 +301,12 @@ CAT1RST:
|
|||||||
rt_thread_mdelay (300);
|
rt_thread_mdelay (300);
|
||||||
if (cat1_sendcmd_and_responce (1000, "AT+QIRD=0,1500\r\n", strlen ("AT+QIRD=0,1500\r\n"), "+QIRD:", ec200_resp_qird_callback) != RetSucc)
|
if (cat1_sendcmd_and_responce (1000, "AT+QIRD=0,1500\r\n", strlen ("AT+QIRD=0,1500\r\n"), "+QIRD:", ec200_resp_qird_callback) != RetSucc)
|
||||||
{
|
{
|
||||||
rt_kprintf ("NET:+CME:ERROR QIRD\r\n");
|
log_i ("NET:+CME:ERROR QIRD\r\n");
|
||||||
|
goto CAT1RST;
|
||||||
|
}
|
||||||
|
// 关机
|
||||||
|
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_CAT1_SHUT, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL)) // 需要发
|
||||||
|
{
|
||||||
goto CAT1RST;
|
goto CAT1RST;
|
||||||
}
|
}
|
||||||
// // 通过通道2上报数据
|
// // 通过通道2上报数据
|
||||||
@@ -297,7 +328,7 @@ CAT1RST:
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
rt_thread_mdelay (3000);
|
rt_thread_mdelay (3000);
|
||||||
}
|
}
|
||||||
|
|||||||
+24
-25
@@ -28,23 +28,24 @@ static char tx_buffer[512];
|
|||||||
static char rx_buffer[512];
|
static char rx_buffer[512];
|
||||||
|
|
||||||
|
|
||||||
|
// static int isenable = 0;
|
||||||
|
|
||||||
netDrv_t g_dtuDrv =
|
|
||||||
|
netDrvInfo_t g_dtuDrv =
|
||||||
{
|
{
|
||||||
0, // 信号值
|
.Csq = 0, // 信号值
|
||||||
"", // iccid
|
.Iccid = "", // iccid
|
||||||
Init, // 状态
|
.State = Init, // 状态
|
||||||
tx_buffer, // 接受缓存
|
.txbuff = tx_buffer, // 接受缓存
|
||||||
0, // 接受数据长度
|
.rx_size = 0, // 接受数据长度
|
||||||
rx_buffer, // 发送数据缓存
|
.rxbuff = rx_buffer, // 发送数据缓存
|
||||||
0, // 发送数据长度
|
.IsEnable = 0, // 发送数据长度
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static void net_data_rxdone (void)
|
static void net_data_rxdone (void)
|
||||||
{
|
{
|
||||||
rt_event_send (gUartEvents, EVENT_UART_ETH1_RX);
|
rt_event_send (gUartEvents, EVENT_UART_ETH1_RX);
|
||||||
//rt_kprintf("net_data_rxdone\r\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -52,13 +53,19 @@ static void thread_entry (void * argument)
|
|||||||
{
|
{
|
||||||
rt_kprintf ("%s was start!\r\n", __FILE__);
|
rt_kprintf ("%s was start!\r\n", __FILE__);
|
||||||
g_ETH1Drv.rxdone = net_data_rxdone;
|
g_ETH1Drv.rxdone = net_data_rxdone;
|
||||||
// MX_UART_Init(&g_ETH1Drv);
|
MX_UART_Init (&g_ETH1Drv);
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
MODE_RST:
|
MODE_RST:
|
||||||
g_dtuDrv.State = Init;
|
|
||||||
MX_UART_Init (&g_ETH1Drv);
|
|
||||||
HAL_GPIO_WritePin (ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin (ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_RESET);
|
||||||
|
g_dtuDrv.State = Init;
|
||||||
|
if (g_dtuDrv.IsEnable == 0)
|
||||||
|
{
|
||||||
|
rt_thread_delay (3000);
|
||||||
|
goto MODE_RST;
|
||||||
|
}
|
||||||
|
//MX_UART_Init (&g_ETH1Drv);
|
||||||
|
// HAL_GPIO_WritePin (ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_RESET);
|
||||||
rt_thread_mdelay (1000);
|
rt_thread_mdelay (1000);
|
||||||
HAL_GPIO_WritePin (ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_SET);
|
HAL_GPIO_WritePin (ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_SET);
|
||||||
rt_thread_mdelay (1000);
|
rt_thread_mdelay (1000);
|
||||||
@@ -70,24 +77,12 @@ MODE_RST:
|
|||||||
// 准备要上报数据
|
// 准备要上报数据
|
||||||
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_NETMODE_TX1, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL)) //
|
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_NETMODE_TX1, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL)) //
|
||||||
{
|
{
|
||||||
//rt_kprintf("MODE_RST\r\n");
|
|
||||||
MX_UART_PutBuffer (&g_ETH1Drv, g_dtuDrv.txbuff, g_dtuDrv.tx_size);
|
MX_UART_PutBuffer (&g_ETH1Drv, g_dtuDrv.txbuff, g_dtuDrv.tx_size);
|
||||||
// rt_kprintf("tx\r\n");
|
|
||||||
// for(int i =0; i <g_dtuDrv.tx_size;i++ )
|
|
||||||
// {
|
|
||||||
// rt_kprintf("%02X ",g_dtuDrv.txbuff[i]);
|
|
||||||
// }
|
|
||||||
// rt_kprintf("\r\n");
|
|
||||||
}
|
}
|
||||||
// 接受到数据
|
// 接受到数据
|
||||||
if (RT_EOK == rt_event_recv (gUartEvents, EVENT_UART_ETH1_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 0, RT_NULL))
|
if (RT_EOK == rt_event_recv (gUartEvents, EVENT_UART_ETH1_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 0, RT_NULL))
|
||||||
{
|
{
|
||||||
// rt_kprintf ("ETH1Rx:%d\r\n", g_ETH1Drv.rx_size);
|
|
||||||
// for (int i = 0; i < g_ETH1Drv.rx_size; i++)
|
|
||||||
// {
|
|
||||||
// rt_kprintf ("%02X ", g_ETH1Drv.rx_buffer[i]);
|
|
||||||
// }
|
|
||||||
// rt_kprintf ("\r\n");
|
|
||||||
rt_memcpy (g_dtuDrv.rxbuff, g_ETH1Drv.rx_buffer, g_ETH1Drv.rx_size);
|
rt_memcpy (g_dtuDrv.rxbuff, g_ETH1Drv.rx_buffer, g_ETH1Drv.rx_size);
|
||||||
g_dtuDrv.rx_size = g_ETH1Drv.rx_size;
|
g_dtuDrv.rx_size = g_ETH1Drv.rx_size;
|
||||||
rt_event_send (gTrigEvents, EVENT_TRIG_NETMODE_RX1) ;
|
rt_event_send (gTrigEvents, EVENT_TRIG_NETMODE_RX1) ;
|
||||||
@@ -97,6 +92,10 @@ MODE_RST:
|
|||||||
{
|
{
|
||||||
goto MODE_RST;
|
goto MODE_RST;
|
||||||
}
|
}
|
||||||
|
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_ETH_SHUT, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
|
||||||
|
{
|
||||||
|
goto MODE_RST;
|
||||||
|
}
|
||||||
rt_thread_delay (100);
|
rt_thread_delay (100);
|
||||||
// 读取IO 状态
|
// 读取IO 状态
|
||||||
}
|
}
|
||||||
|
|||||||
+188
-74
@@ -1,26 +1,63 @@
|
|||||||
#include "jsonpacket.h"
|
|
||||||
#include "cjson.h"
|
#include "cjson.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
#include "data.h"
|
#include "data.h"
|
||||||
|
#include "jsonpacket.h"
|
||||||
#include <easyflash.h>
|
#include <easyflash.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include "netdrv.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#define PROTO_VER "FF_V3.0"
|
#define PROTO_VER "FF_V3.0"
|
||||||
|
|
||||||
extern char config_list[16][32];
|
extern char config_list[16][32];
|
||||||
extern int config_list_size;
|
extern int config_list_size;
|
||||||
|
static char number_str[32];
|
||||||
|
|
||||||
|
|
||||||
|
void * GetNumber (double k, int s)
|
||||||
|
{
|
||||||
|
//static char buff[32] = {0};
|
||||||
|
rt_memset (number_str, 0, 32);
|
||||||
|
switch (s)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
sprintf (number_str, "%f", k);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
sprintf (number_str, "%.1f", k);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
sprintf (number_str, "%.2f", k);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
sprintf (number_str, "%.3f", k);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
sprintf (number_str, "%.4f", k);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
sprintf (number_str, "%.5f", k);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
sprintf (number_str, "%.6f", k);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return (void*) number_str;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 5 分钟流量站数据上报
|
// 5 分钟流量站数据上报
|
||||||
int Json5MinFlowDataPacket (uint8_t * buffer)
|
int Json5MinFlowDataPacket (uint8_t * buffer)
|
||||||
{
|
{
|
||||||
char *result, * packMsg = (char *) buffer;
|
char *json, * packMsg = (char *) buffer;
|
||||||
cJSON *root = NULL;
|
cJSON *root = NULL , *result = NULL;
|
||||||
double dbl[6] = {3.14, 3.12, 3.33, 3.20, 3.12, 3.20};
|
double dbl[6] = {3.14, 3.12, 3.33, 3.20, 3.12, 3.20};
|
||||||
int length;
|
int length;
|
||||||
char * p;
|
char * p;
|
||||||
root = cJSON_CreateObject();
|
root = cJSON_CreateObject();
|
||||||
|
result = cJSON_CreateObject();
|
||||||
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("stand")); // 功能码
|
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("stand")); // 功能码
|
||||||
p = ef_get_env ("site_type");
|
p = ef_get_env ("site_type");
|
||||||
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
||||||
@@ -42,7 +79,7 @@ int Json5MinFlowDataPacket (uint8_t * buffer)
|
|||||||
dbl[i] = WaterData[i].thisSpeed;
|
dbl[i] = WaterData[i].thisSpeed;
|
||||||
}
|
}
|
||||||
cJSON * ArrNumSpeed = cJSON_CreateDoubleArray (dbl, 6);
|
cJSON * ArrNumSpeed = cJSON_CreateDoubleArray (dbl, 6);
|
||||||
cJSON_AddItemToObject (root, "thisspeed", ArrNumSpeed);
|
cJSON_AddItemToObject (result, "thisspeed", ArrNumSpeed);
|
||||||
|
|
||||||
// 瞬时流量
|
// 瞬时流量
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
@@ -50,7 +87,7 @@ int Json5MinFlowDataPacket (uint8_t * buffer)
|
|||||||
dbl[i] = WaterData[i].thisFlow;
|
dbl[i] = WaterData[i].thisFlow;
|
||||||
}
|
}
|
||||||
cJSON * ArrNumFlow = cJSON_CreateDoubleArray (dbl, 6);
|
cJSON * ArrNumFlow = cJSON_CreateDoubleArray (dbl, 6);
|
||||||
cJSON_AddItemToObject (root, "thisflow", ArrNumFlow);
|
cJSON_AddItemToObject (result, "thisflow", ArrNumFlow);
|
||||||
|
|
||||||
// 累计流量
|
// 累计流量
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
@@ -58,22 +95,22 @@ int Json5MinFlowDataPacket (uint8_t * buffer)
|
|||||||
dbl[i] = WaterData[i].ttWater;
|
dbl[i] = WaterData[i].ttWater;
|
||||||
}
|
}
|
||||||
cJSON * ArrNumTtflow = cJSON_CreateDoubleArray (dbl, 6);
|
cJSON * ArrNumTtflow = cJSON_CreateDoubleArray (dbl, 6);
|
||||||
cJSON_AddItemToObject (root, "ttflow", ArrNumTtflow);
|
cJSON_AddItemToObject (result, "ttflow", ArrNumTtflow);
|
||||||
|
|
||||||
// 当前水位
|
// 当前水位
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
dbl[i] = (double)WaterData[i].thisLevel/100;
|
dbl[i] = (double) WaterData[i].thisLevel / 100;
|
||||||
}
|
}
|
||||||
cJSON * ArrNumLeve = cJSON_CreateDoubleArray (dbl, 6);
|
cJSON * ArrNumLeve = cJSON_CreateDoubleArray (dbl, 6);
|
||||||
cJSON_AddItemToObject (root, "thisLeve", ArrNumLeve);
|
cJSON_AddItemToObject (result, "thisLeve", ArrNumLeve);
|
||||||
// 当前压力
|
// 当前压力
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
dbl[i] = WaterData[i].thisPress;
|
dbl[i] = WaterData[i].thisPress;
|
||||||
}
|
}
|
||||||
cJSON * ArrNumPress = cJSON_CreateDoubleArray (dbl, 6);
|
cJSON * ArrNumPress = cJSON_CreateDoubleArray (dbl, 6);
|
||||||
cJSON_AddItemToObject (root, "thispress", ArrNumPress);
|
cJSON_AddItemToObject (result, "thispress", ArrNumPress);
|
||||||
|
|
||||||
// 当前温度
|
// 当前温度
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
@@ -81,136 +118,155 @@ int Json5MinFlowDataPacket (uint8_t * buffer)
|
|||||||
dbl[i] = WaterData[i].ttWater;
|
dbl[i] = WaterData[i].ttWater;
|
||||||
}
|
}
|
||||||
cJSON * ArrNumTemp = cJSON_CreateDoubleArray (dbl, 6);
|
cJSON * ArrNumTemp = cJSON_CreateDoubleArray (dbl, 6);
|
||||||
cJSON_AddItemToObject (root, "thistemp", ArrNumTemp);
|
cJSON_AddItemToObject (result, "thistemp", ArrNumTemp);
|
||||||
|
|
||||||
// 当前测斜方向
|
// 当前测斜方向
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
dbl[i] = IncData[i].dir;
|
dbl[i] = IncData[i].dir;
|
||||||
}
|
}
|
||||||
cJSON * ArrNumIncDir = cJSON_CreateDoubleArray (dbl, 6);
|
cJSON * ArrNumIncDir = cJSON_CreateDoubleArray (dbl, 6);
|
||||||
cJSON_AddItemToObject (root, "thisincdir", ArrNumIncDir);
|
cJSON_AddItemToObject (result, "thisincdir", ArrNumIncDir);
|
||||||
|
|
||||||
// 当前测斜数据
|
// 当前测斜数据
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
dbl[i] = IncData[i].data;
|
dbl[i] = IncData[i].data;
|
||||||
}
|
}
|
||||||
cJSON * ArrNumIncData = cJSON_CreateDoubleArray (dbl, 6);
|
cJSON * ArrNumIncData = cJSON_CreateDoubleArray (dbl, 6);
|
||||||
cJSON_AddItemToObject (root, "thisincdata", ArrNumIncData);
|
cJSON_AddItemToObject (result, "thisincdata", ArrNumIncData);
|
||||||
|
cJSON_AddItemToObject (root, "result", result);
|
||||||
//---------------------------------------------以下不准修改
|
//---------------------------------------------以下不准修改
|
||||||
result = cJSON_PrintUnformatted (root);
|
json = cJSON_PrintUnformatted (root);
|
||||||
strcpy (packMsg, result);
|
strcpy (packMsg, json);
|
||||||
cJSON_free (result);
|
cJSON_free (json);
|
||||||
cJSON_Delete (root);
|
cJSON_Delete (root);
|
||||||
length = rt_strlen (packMsg);
|
length = rt_strlen (packMsg);
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
// 5分钟闸门站数据上报
|
//// 闸门站注册包上报
|
||||||
int JsonRegistDataPacket (uint8_t * buffer)
|
//int JsonRegistDataPacket (uint8_t * buffer)
|
||||||
{
|
//{
|
||||||
char *result, * packMsg = (char *) buffer;
|
// char *result, * packMsg = (char *) buffer;
|
||||||
cJSON *root = NULL;
|
// cJSON *root = NULL;
|
||||||
char * p;
|
// char * p;
|
||||||
int length;
|
// int length;
|
||||||
root = cJSON_CreateObject();
|
// root = cJSON_CreateObject();
|
||||||
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("regist")); // 功能码
|
// cJSON_AddItemToObject (root, "func", cJSON_CreateString ("regist")); // 功能码
|
||||||
p = ef_get_env ("site_type");
|
// p = ef_get_env ("site_type");
|
||||||
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
// cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
||||||
cJSON_AddItemToObject (root, "pver", cJSON_CreateString (PROTO_VER)); // 表示流量计
|
// cJSON_AddItemToObject (root, "pver", cJSON_CreateString (PROTO_VER)); // 表示流量计
|
||||||
cJSON_AddItemToObject (root, "iccid", cJSON_CreateString (SysData.iccid)); // 表示流量计
|
// cJSON_AddItemToObject (root, "iccid", cJSON_CreateString (SysData.iccid)); // 表示流量计
|
||||||
cJSON_AddItemToObject (root, "ver", cJSON_CreateString (VERSION)); // 表示流量计
|
// cJSON_AddItemToObject (root, "ver", cJSON_CreateString (VERSION)); // 表示流量计
|
||||||
p = ef_get_env ("net_drv");
|
// p = ef_get_env ("net_drv");
|
||||||
cJSON_AddItemToObject (root, "netdrv", cJSON_CreateString (p)); // 表示流量计
|
// cJSON_AddItemToObject (root, "netdrv", cJSON_CreateString (p)); // 表示流量计
|
||||||
p = ef_get_env ("iap_app_filename");
|
// p = ef_get_env ("iap_app_filename");
|
||||||
//uint32_t max_open = atoi (p);
|
// //uint32_t max_open = atoi (p);
|
||||||
cJSON_AddItemToObject (root, "filename", cJSON_CreateString (p)); // 表示电池电压
|
// cJSON_AddItemToObject (root, "filename", cJSON_CreateString (p)); // 表示电池电压
|
||||||
|
|
||||||
//---------------------------------------------以下不准修改
|
// //---------------------------------------------以下不准修改
|
||||||
result = cJSON_PrintUnformatted (root);
|
// result = cJSON_PrintUnformatted (root);
|
||||||
strcpy (packMsg, result);
|
// strcpy (packMsg, result);
|
||||||
cJSON_free (result);
|
// cJSON_free (result);
|
||||||
cJSON_Delete (root);
|
// cJSON_Delete (root);
|
||||||
length = rt_strlen (packMsg);
|
// length = rt_strlen (packMsg);
|
||||||
return length;
|
// return length;
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
// 5分钟闸门站数据上报
|
// 一、均匀时段报(上行)
|
||||||
int Json5MinSluiceDataPacket (uint8_t * buffer)
|
int Json5MinSluiceDataPacket (uint8_t * buffer)
|
||||||
{
|
{
|
||||||
char *result, * packMsg = (char *) buffer;
|
char *json, * packMsg = (char *) buffer;
|
||||||
cJSON *root = NULL;
|
cJSON *root = NULL, *result = NULL;
|
||||||
char * p;
|
char * p;
|
||||||
int length;
|
int length;
|
||||||
root = cJSON_CreateObject();
|
root = cJSON_CreateObject();
|
||||||
|
result = cJSON_CreateObject();
|
||||||
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("stand")); // 功能码
|
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("stand")); // 功能码
|
||||||
p = ef_get_env ("site_type");
|
p = ef_get_env ("site_type");
|
||||||
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
||||||
cJSON_AddItemToObject (root, "pver", cJSON_CreateString (PROTO_VER)); // 表示流量计
|
cJSON_AddItemToObject (root, "pver", cJSON_CreateString (PROTO_VER)); // 表示流量计
|
||||||
cJSON_AddItemToObject (root, "iccid", cJSON_CreateString (SysData.iccid)); // 表示流量计
|
cJSON_AddItemToObject (root, "iccid", cJSON_CreateString (SysData.iccid)); // 表示流量计
|
||||||
cJSON_AddItemToObject (root, "ver", cJSON_CreateString (VERSION)); // 表示流量计
|
cJSON_AddItemToObject (root, "ver", cJSON_CreateString (GetVersion())); // 表示流量计
|
||||||
p = ef_get_env ("net_drv");
|
//p = ef_get_env ("net_drv");
|
||||||
cJSON_AddItemToObject (root, "netdrv", cJSON_CreateString (p)); // 表示流量计
|
if (g_net_drv == Cat1) //
|
||||||
|
{
|
||||||
|
cJSON_AddItemToObject (root, "netdrv", cJSON_CreateString ("gsm")); // 表示流量计
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cJSON_AddItemToObject (root, "netdrv", cJSON_CreateString ("eth")); // 表示流量计
|
||||||
|
}
|
||||||
p = ef_get_env ("iap_app_filename");
|
p = ef_get_env ("iap_app_filename");
|
||||||
//uint32_t max_open = atoi (p);
|
//uint32_t max_open = atoi (p);
|
||||||
cJSON_AddItemToObject (root, "filename", cJSON_CreateString (p)); // 表示电池电压
|
cJSON_AddItemToObject (root, "filename", cJSON_CreateString (p)); // 表示电池电压
|
||||||
|
|
||||||
// 添加闸门相关数据
|
// 添加闸门相关数据
|
||||||
// 闸门当前开度
|
// 闸门当前开度
|
||||||
cJSON_AddItemToObject (root, "thisopen", cJSON_CreateNumber (SluiceData[0].gopen)); // 表示电池电压
|
cJSON_AddItemToObject (result, "thisopen", cJSON_CreateNumber (SluiceData[0].gopen)); // 表示电池电压
|
||||||
// 闸门最大开度
|
// 闸门最大开度
|
||||||
p = ef_get_env ("max_open");
|
p = ef_get_env ("max_open");
|
||||||
uint32_t max_open = atoi (p);
|
uint32_t max_open = atoi (p);
|
||||||
cJSON_AddItemToObject (root, "maxopen", cJSON_CreateNumber (max_open));
|
cJSON_AddItemToObject (result, "maxopen", cJSON_CreateNumber (max_open));
|
||||||
// 闸门A路荷重
|
// 闸门A路荷重
|
||||||
cJSON_AddItemToObject (root, "aload", cJSON_CreateNumber (SluiceData[0].lload));
|
cJSON_AddItemToObject (result, "aload", cJSON_CreateNumber (SluiceData[0].lload));
|
||||||
// 闸门B路荷重
|
// 闸门B路荷重
|
||||||
cJSON_AddItemToObject (root, "bload", cJSON_CreateNumber (SluiceData[0].rload));
|
cJSON_AddItemToObject (result, "bload", cJSON_CreateNumber (SluiceData[0].rload));
|
||||||
// 闸前水位
|
// 闸前水位
|
||||||
cJSON_AddItemToObject (root, "thisleve", cJSON_CreateNumber (WaterData[0].thisLevel));
|
cJSON_AddItemToObject (result, "thisleve", cJSON_CreateString (GetNumber ( (float) WaterData[0].thisLevel / 100, 2)));
|
||||||
// 闸门瞬时流速
|
// 闸门瞬时流速
|
||||||
cJSON_AddItemToObject (root, "thisspeed", cJSON_CreateNumber (WaterData[0].thisSpeed));
|
cJSON_AddItemToObject (result, "thisspeed", cJSON_CreateString (GetNumber ( (float) WaterData[0].thisSpeed / 100, 2)));
|
||||||
// 闸门累计流量
|
// 闸门累计流量
|
||||||
cJSON_AddItemToObject (root, "thisflow", cJSON_CreateNumber (WaterData[0].thisFlow));
|
cJSON_AddItemToObject (result, "thisflow", cJSON_CreateString (GetNumber ( (float) WaterData[0].thisFlow / 100, 2)));
|
||||||
// 闸门瞬时流量
|
// 闸门瞬时流量
|
||||||
cJSON_AddItemToObject (root, "ttflow", cJSON_CreateNumber (WaterData[0].ttWater));
|
cJSON_AddItemToObject (result, "ttflow", cJSON_CreateString (GetNumber ( (float) WaterData[0].ttWater / 100, 2)));
|
||||||
// 闸门启动电流
|
// 闸门启动电流
|
||||||
cJSON_AddItemToObject (root, "current", cJSON_CreateNumber (SluiceData[0].currt));
|
cJSON_AddItemToObject (result, "current", cJSON_CreateNumber (SluiceData[0].currt));
|
||||||
// 闸门编码器最大值
|
// 闸门编码器最大值
|
||||||
p = ef_get_env ("max_ecode");
|
p = ef_get_env ("max_ecode");
|
||||||
uint32_t max_code = atoi (p);
|
uint32_t max_code = atoi (p);
|
||||||
|
|
||||||
cJSON_AddItemToObject (root, "maxecode", cJSON_CreateNumber (max_code));
|
cJSON_AddItemToObject (result, "maxecode", cJSON_CreateNumber (max_code));
|
||||||
p = ef_get_env ("min_ecode");
|
p = ef_get_env ("min_ecode");
|
||||||
uint32_t min_code = atoi (p);
|
uint32_t min_code = atoi (p);
|
||||||
// 闸门编码器最小值
|
// 闸门编码器最小值
|
||||||
cJSON_AddItemToObject (root, "minecode", cJSON_CreateNumber (min_code));
|
cJSON_AddItemToObject (result, "minecode", cJSON_CreateNumber (min_code));
|
||||||
|
cJSON_AddItemToObject (root, "result", result);
|
||||||
//---------------------------------------------以下不准修改
|
//---------------------------------------------以下不准修改
|
||||||
result = cJSON_PrintUnformatted (root);
|
json = cJSON_PrintUnformatted (root);
|
||||||
strcpy (packMsg, result);
|
strcpy (packMsg, json);
|
||||||
cJSON_free (result);
|
cJSON_free (json);
|
||||||
|
//cJSON_Delete (result);
|
||||||
cJSON_Delete (root);
|
cJSON_Delete (root);
|
||||||
|
|
||||||
length = rt_strlen (packMsg);
|
length = rt_strlen (packMsg);
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 心跳包,需要应答
|
// 二、心跳数据上报(上行)
|
||||||
int JsonHeartDatapacket (uint8_t * buffer)
|
int JsonHeartDatapacket (uint8_t * buffer)
|
||||||
{
|
{
|
||||||
char *result, * packMsg = (char *) buffer;
|
char *result, * packMsg = (char *) buffer;
|
||||||
cJSON *root = NULL;
|
cJSON *root = NULL;
|
||||||
int length;
|
int length;
|
||||||
char *p;
|
char *p;
|
||||||
|
int state[4];
|
||||||
root = cJSON_CreateObject();
|
root = cJSON_CreateObject();
|
||||||
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("heart")); // 功能码
|
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("heart")); // 功能码
|
||||||
p = ef_get_env ("site_type");
|
p = ef_get_env ("site_type");
|
||||||
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
||||||
cJSON_AddItemToObject (root, "ecdState", cJSON_CreateNumber (SysData.ecdState)); // 编码器状态
|
state[0] = SluiceData[0].error;
|
||||||
cJSON_AddItemToObject (root, "flowState", cJSON_CreateNumber (SysData.flowState)); // 流量计状态
|
state[1] = SluiceData[0].state;
|
||||||
cJSON_AddItemToObject (root, "ldState", cJSON_CreateNumber (SysData.ldState)); // 荷重仪状态
|
state[2] = 0;
|
||||||
cJSON_AddItemToObject (root, "scram", cJSON_CreateNumber (SysData.scram)); // 荷重仪状态
|
state[3] = 0;
|
||||||
|
cJSON * ArrNumPress = cJSON_CreateIntArray (state, 4);
|
||||||
|
cJSON_AddItemToObject (root, "state", ArrNumPress);
|
||||||
|
|
||||||
|
//cJSON_AddItemToObject (root, "state", cJSON_CreateNumber (SysData.ecdState)); // 编码器状态
|
||||||
|
// cJSON_AddItemToObject (root, "flowState", cJSON_CreateNumber (SysData.flowState)); // 流量计状态
|
||||||
|
// cJSON_AddItemToObject (root, "ldState", cJSON_CreateNumber (SysData.ldState)); // 荷重仪状态
|
||||||
|
// cJSON_AddItemToObject (root, "scram", cJSON_CreateNumber (SysData.scram)); // 荷重仪状态
|
||||||
//---------------------------------------------以下不准修改
|
//---------------------------------------------以下不准修改
|
||||||
result = cJSON_PrintUnformatted (root);
|
result = cJSON_PrintUnformatted (root);
|
||||||
strcpy (packMsg, result);
|
strcpy (packMsg, result);
|
||||||
@@ -220,8 +276,48 @@ int JsonHeartDatapacket (uint8_t * buffer)
|
|||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 四、下行命令应答(上行)
|
||||||
|
|
||||||
int JsonConfigReadDataPacket(uint8_t* buffer)
|
int JsonAckDownload (uint8_t* buffer, DownDataType_t dn)
|
||||||
|
{
|
||||||
|
char *result, * packMsg = (char *) buffer;
|
||||||
|
cJSON *root = NULL;
|
||||||
|
int length;
|
||||||
|
char *p;
|
||||||
|
root = cJSON_CreateObject();
|
||||||
|
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("ack")); // 功能码
|
||||||
|
switch (dn)
|
||||||
|
{
|
||||||
|
case DownUpdate:
|
||||||
|
cJSON_AddItemToObject (root, "type", cJSON_CreateString ("update")); // 表示流量计
|
||||||
|
cJSON_AddItemToObject (root, "state", cJSON_CreateString ("ok")); // 表示流量计
|
||||||
|
break;
|
||||||
|
case DownConfig:
|
||||||
|
cJSON_AddItemToObject (root, "type", cJSON_CreateString ("config")); // 表示流量计
|
||||||
|
cJSON_AddItemToObject (root, "state", cJSON_CreateString ("ok")); // 表示流量计
|
||||||
|
break;
|
||||||
|
case DownRun:
|
||||||
|
cJSON_AddItemToObject (root, "type", cJSON_CreateString ("run")); // 表示流量计
|
||||||
|
cJSON_AddItemToObject (root, "state", cJSON_CreateString ("ok")); // 表示流量计
|
||||||
|
break;
|
||||||
|
case DownFact:
|
||||||
|
cJSON_AddItemToObject (root, "type", cJSON_CreateString ("fact")); // 表示流量计
|
||||||
|
cJSON_AddItemToObject (root, "state", cJSON_CreateString ("ok")); // 表示流量计
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//---------------------------------------------以下不准修改
|
||||||
|
result = cJSON_PrintUnformatted (root);
|
||||||
|
strcpy (packMsg, result);
|
||||||
|
cJSON_free (result);
|
||||||
|
cJSON_Delete (root);
|
||||||
|
length = rt_strlen (packMsg);
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 十一、读取参数应答(上行)
|
||||||
|
int JsonConfigReadDataPacket (uint8_t* buffer)
|
||||||
{
|
{
|
||||||
char *result, * packMsg = (char *) buffer;
|
char *result, * packMsg = (char *) buffer;
|
||||||
cJSON *root = NULL;
|
cJSON *root = NULL;
|
||||||
@@ -232,7 +328,7 @@ int JsonConfigReadDataPacket(uint8_t* buffer)
|
|||||||
p = ef_get_env ("site_type");
|
p = ef_get_env ("site_type");
|
||||||
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
||||||
|
|
||||||
for (int i =0 ;i < config_list_size;i++)
|
for (int i = 0 ; i < config_list_size; i++)
|
||||||
{
|
{
|
||||||
p = ef_get_env (config_list[i]);
|
p = ef_get_env (config_list[i]);
|
||||||
cJSON_AddItemToObject (root, config_list[i], cJSON_CreateString (p)); // 表示流量计
|
cJSON_AddItemToObject (root, config_list[i], cJSON_CreateString (p)); // 表示流量计
|
||||||
@@ -246,8 +342,26 @@ int JsonConfigReadDataPacket(uint8_t* buffer)
|
|||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
int JsonAckSuccPacket(char * buffer)
|
|
||||||
|
|
||||||
|
// 十四 、设备预警(上行)
|
||||||
|
// shangbao
|
||||||
|
int JsonWarning (char * buffer, char * type, int k)
|
||||||
{
|
{
|
||||||
rt_sprintf(buffer,"{\"state\":\"ok\"}");
|
char *result, * packMsg = (char *) buffer;
|
||||||
|
cJSON *root = NULL;
|
||||||
|
int length;
|
||||||
|
char *p;
|
||||||
|
root = cJSON_CreateObject();
|
||||||
|
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("warn")); // 功能码
|
||||||
|
cJSON_AddItemToObject (root, "type", cJSON_CreateString ("load")); // 表示流量计
|
||||||
|
cJSON_AddItemToObject (root, "data", cJSON_CreateNumber (k)); // 表示流量计
|
||||||
|
//---------------------------------------------以下不准修改
|
||||||
|
result = cJSON_PrintUnformatted (root);
|
||||||
|
strcpy (packMsg, result);
|
||||||
|
cJSON_free (result);
|
||||||
|
cJSON_Delete (root);
|
||||||
|
length = rt_strlen (packMsg);
|
||||||
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3,16 +3,52 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
// 5 分钟数据上报
|
|
||||||
|
////typedef enum AckType_t
|
||||||
|
////{
|
||||||
|
//// AckUpdate = 0,
|
||||||
|
//// AckRun = 0,
|
||||||
|
////}
|
||||||
|
|
||||||
|
|
||||||
|
//// 5 分钟数据上报
|
||||||
|
//int Json5MinFlowDataPacket (uint8_t * buffer);
|
||||||
|
|
||||||
|
//// 注册包数据 需要应答
|
||||||
|
//int JsonRegistDataPacket (uint8_t * buffer);
|
||||||
|
//// 心跳包,需要应答
|
||||||
|
//int JsonHeartDatapacket (uint8_t * buffer);
|
||||||
|
|
||||||
|
//int Json5MinSluiceDataPacket (uint8_t * buffer);
|
||||||
|
|
||||||
|
//int JsonConfigReadDataPacket (uint8_t* buffer);
|
||||||
|
|
||||||
|
//int JsonAckSuccPacket (char * buffer,char * type,int k);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 5 分钟流量站数据上报
|
||||||
int Json5MinFlowDataPacket (uint8_t * buffer);
|
int Json5MinFlowDataPacket (uint8_t * buffer);
|
||||||
|
|
||||||
// 注册包数据 需要应答
|
|
||||||
int JsonRegistDataPacket (uint8_t * buffer);
|
|
||||||
// 心跳包,需要应答
|
|
||||||
int JsonHeartDatapacket (uint8_t * buffer);
|
|
||||||
|
|
||||||
|
// 一、均匀时段报(上行)
|
||||||
int Json5MinSluiceDataPacket (uint8_t * buffer);
|
int Json5MinSluiceDataPacket (uint8_t * buffer);
|
||||||
|
|
||||||
int JsonConfigReadDataPacket(uint8_t* buffer);
|
// 二、心跳数据上报(上行)
|
||||||
int JsonAckSuccPacket(char * buffer);
|
int JsonHeartDatapacket (uint8_t * buffer);
|
||||||
|
|
||||||
|
// 四、下行命令应答(上行)
|
||||||
|
|
||||||
|
int JsonAckDownload (uint8_t* buffer, DownDataType_t dn);
|
||||||
|
|
||||||
|
// 十一、读取参数应答(上行)
|
||||||
|
int JsonConfigReadDataPacket (uint8_t* buffer);
|
||||||
|
|
||||||
|
|
||||||
|
// 十四 、设备预警(上行)
|
||||||
|
// shangbao
|
||||||
|
int JsonWarning (char * buffer, char * type, int k);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
+43
-34
@@ -1,3 +1,4 @@
|
|||||||
|
#include "data.h"
|
||||||
#include "jsonunpack.h"
|
#include "jsonunpack.h"
|
||||||
#include "cjson.h"
|
#include "cjson.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -5,10 +6,17 @@
|
|||||||
#include "data.h"
|
#include "data.h"
|
||||||
#include <easyflash.h>
|
#include <easyflash.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "data.h"
|
|
||||||
#include "os-app.h"
|
#include "os-app.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(LOG_TAG)
|
||||||
|
#define LOG_TAG "json"
|
||||||
|
#endif
|
||||||
|
#include <elog.h>
|
||||||
|
|
||||||
char config_list[16][32] = {NULL};
|
char config_list[16][32] = {NULL};
|
||||||
int config_list_size = 0;
|
int config_list_size = 0;
|
||||||
// 用于远程出厂设置时保留配置
|
// 用于远程出厂设置时保留配置
|
||||||
@@ -25,29 +33,21 @@ void JsonUnPacket (int index, char *buff)
|
|||||||
root = cJSON_Parse (packMsg);
|
root = cJSON_Parse (packMsg);
|
||||||
DownDataType_t type = (DownDataType_t) 0;
|
DownDataType_t type = (DownDataType_t) 0;
|
||||||
char * p, *key, *value;
|
char * p, *key, *value;
|
||||||
int list_size;
|
int list_size, data;
|
||||||
TypeIndexMail_t mail;
|
TypeIndexMail_t mail;
|
||||||
p = cJSON_GetStringValue (cJSON_GetObjectItem (root, "type"));
|
p = cJSON_GetStringValue (cJSON_GetObjectItem (root, "type"));
|
||||||
type = (DownDataType_t) cDownType2Index (p);
|
type = (DownDataType_t) cDownType2Index (p);
|
||||||
rt_kprintf("down :%s<%d>\r\n",p,type);
|
log_i ("down :%s<%d>\r\n", p, type);
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case DownRun : // 开度提闸
|
case DownRun : // 开度提闸
|
||||||
|
data = cJSON_GetNumberValue (cJSON_GetObjectItem (root, "data"));
|
||||||
// rt_kprintf ("open:%u mm/10\r\n", datak);
|
SluiceData[0].sopen = data; // 执行操作闸门
|
||||||
|
OsSendMail (gSluiceMail, MAIL_SLUICE_OPT, 0); // 操作0号闸门
|
||||||
// //SluiceData[gMqttDrv.rx_index].opt = 1; // 执行操作闸门
|
OsSendMail (gTCommMail, MAIL_COMM_SLACK, 0); // 操作0号闸门
|
||||||
// SluiceData[gMqttDrv.rx_index - 1].sopen = datak / 10;
|
|
||||||
// mail.Type = MAIL_SLUICE_OPT;
|
|
||||||
// mail.index = gMqttDrv.rx_index - 1;
|
|
||||||
// rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
|
||||||
|
|
||||||
// // 回复应答
|
|
||||||
// mail.Type = MAIL_COMM_SLACK;
|
|
||||||
// mail.index = gMqttDrv.rx_index;
|
|
||||||
// rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
|
|
||||||
break;
|
break;
|
||||||
case DownStop :
|
case DownStop :
|
||||||
|
OsSendMail (gSluiceMail, MAIL_SLUICE_STP, 0);
|
||||||
break;
|
break;
|
||||||
case DownOpen :
|
case DownOpen :
|
||||||
break;
|
break;
|
||||||
@@ -58,21 +58,26 @@ void JsonUnPacket (int index, char *buff)
|
|||||||
case DownHeartAns :
|
case DownHeartAns :
|
||||||
break;
|
break;
|
||||||
case DownUpdate :
|
case DownUpdate :
|
||||||
|
if (index != 0)
|
||||||
|
break;
|
||||||
rt_memset (SysData.fileName, 0, 32);
|
rt_memset (SysData.fileName, 0, 32);
|
||||||
p = cJSON_GetStringValue (cJSON_GetObjectItem (root, "file"));
|
p = cJSON_GetStringValue (cJSON_GetObjectItem (root, "file"));
|
||||||
rt_sprintf (SysData.fileName, "%s", p) ;
|
rt_sprintf (SysData.fileName, "%s", p) ;
|
||||||
// 启动升级线程
|
// 启动升级线程
|
||||||
// 回复应答
|
// 回复应答
|
||||||
mail.Type = MAIL_COMM_UPACK;
|
OsSendMail (gTCommMail, MAIL_COMM_UPACK, index + 1); // 操作0号闸门
|
||||||
mail.index = index + 1; // 0通道用来升级的通道
|
|
||||||
rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
|
rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
|
||||||
rt_thread_mdelay (2000); // 等待2s 进入升级线程
|
rt_thread_mdelay (2000); // 等待2s 进入升级线程
|
||||||
UpgradeThreadStart();
|
UpgradeThreadStart();
|
||||||
break;
|
break;
|
||||||
case DownReboot :
|
case DownReboot :
|
||||||
|
if (index != 0)
|
||||||
|
break;
|
||||||
HAL_NVIC_SystemReset();
|
HAL_NVIC_SystemReset();
|
||||||
break;
|
break;
|
||||||
case DownConfig: // 设置参数
|
case DownConfig: // 设置参数
|
||||||
|
if (index != 0)
|
||||||
|
break;
|
||||||
// 读取参数列表
|
// 读取参数列表
|
||||||
list = cJSON_GetObjectItem (root, "list");
|
list = cJSON_GetObjectItem (root, "list");
|
||||||
list_size = cJSON_GetArraySize (list);
|
list_size = cJSON_GetArraySize (list);
|
||||||
@@ -85,34 +90,38 @@ void JsonUnPacket (int index, char *buff)
|
|||||||
ef_set_env (key, value);
|
ef_set_env (key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mail.Type = MAIL_COMM_ACK;
|
OsSendMail (gTCommMail, MAIL_COMM_WRACK, index + 1); // 操作0号闸门
|
||||||
mail.index = index + 1; // 0通道用来升级的通道
|
// mail.Type = MAIL_COMM_ACK;
|
||||||
rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
|
// mail.index = index + 1; // 0通道用来升级的通道
|
||||||
|
// rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
|
||||||
break;
|
break;
|
||||||
case DownRead: // 读取参数
|
case DownRead: // 读取参数
|
||||||
|
if (index != 0)
|
||||||
|
break;
|
||||||
list = cJSON_GetObjectItem (root, "list");
|
list = cJSON_GetObjectItem (root, "list");
|
||||||
config_list_size = cJSON_GetArraySize (list);
|
config_list_size = cJSON_GetArraySize (list);
|
||||||
for (int i = 0; i < config_list_size; i++)
|
for (int i = 0; i < config_list_size; i++)
|
||||||
{
|
{
|
||||||
key = cJSON_GetStringValue (cJSON_GetArrayItem (list, i));
|
key = cJSON_GetStringValue (cJSON_GetArrayItem (list, i));
|
||||||
rt_sprintf(config_list[i],"%s",key);
|
rt_sprintf (config_list[i], "%s", key);
|
||||||
}
|
}
|
||||||
mail.Type = MAIL_COMM_READPARA;
|
OsSendMail (gTCommMail, MAIL_COMM_READPARA, index + 1); // 操作0号闸门
|
||||||
mail.index = index + 1; // 0通道用来升级的通道
|
// mail.Type = MAIL_COMM_READPARA;
|
||||||
rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
|
// mail.index = index + 1; // 0通道用来升级的通道
|
||||||
|
// rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
|
||||||
// 读取参数列表
|
// 读取参数列表
|
||||||
break;
|
break;
|
||||||
case DownFact:
|
case DownFact:
|
||||||
p = ef_get_env("device_id");
|
if (index != 0)
|
||||||
rt_sprintf(backdevice_id,"%s",p);
|
break;
|
||||||
p = ef_get_env("net_drv") ;
|
p = ef_get_env ("device_id");
|
||||||
rt_sprintf(backnetdrv,"%s",p);
|
rt_sprintf (backdevice_id, "%s", p);
|
||||||
|
p = ef_get_env ("net_drv") ;
|
||||||
|
rt_sprintf (backnetdrv, "%s", p);
|
||||||
ef_env_set_default();
|
ef_env_set_default();
|
||||||
ef_set_env("device_id",backdevice_id) ;
|
ef_set_env ("device_id", backdevice_id) ;
|
||||||
ef_set_env("net_drv",backnetdrv) ;
|
ef_set_env ("net_drv", backnetdrv) ;
|
||||||
mail.Type = MAIL_COMM_ACK;
|
OsSendMail (gTCommMail, MAIL_COMM_FACACK, index + 1); // 操作0号闸门
|
||||||
mail.index = index + 1; // 0通道用来升级的通道
|
|
||||||
rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
+48
-28
@@ -79,19 +79,23 @@ char client_id_str[64] = {NULL};
|
|||||||
static char device_id[32] = {NULL}; // 设备编码
|
static char device_id[32] = {NULL}; // 设备编码
|
||||||
static char user_topic[32] = {NULL}; // topic
|
static char user_topic[32] = {NULL}; // topic
|
||||||
|
|
||||||
|
static char mqtt_user[32] = {NULL}; // 设备编码
|
||||||
|
static char mqtt_pass[32] = {NULL}; // topic
|
||||||
|
|
||||||
static void net_data_rxdone (void)
|
static void net_data_rxdone (void)
|
||||||
{
|
{
|
||||||
rt_event_send (gUartEvents, EVENT_UART_ETH1_RX);
|
rt_event_send (gUartEvents, EVENT_UART_ETH1_RX);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int timerout_timer = 0;
|
static int MQTT_timerout_timer = 0;
|
||||||
static void timerouter (void * parameter)
|
static void timerouter (void * parameter)
|
||||||
{
|
{
|
||||||
timerout_timer ++;
|
MQTT_timerout_timer ++;
|
||||||
if (timerout_timer > 90) // 超过90s 没有收到数据,重启网络
|
if (MQTT_timerout_timer > 90) // 超过90s 没有收到数据,重启网络
|
||||||
{
|
{
|
||||||
rt_event_send (gTrigEvents, EVENT_TRIG_MQTT_RST);
|
rt_event_send (gTrigEvents, EVENT_TRIG_MQTT_RST);//WXY 此处加切换网络
|
||||||
timerout_timer = 0;
|
netdrv_switch();
|
||||||
|
MQTT_timerout_timer = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,7 +105,7 @@ static void thread_entry (void * argument)
|
|||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
// 初始化串口驱动
|
// 初始化串口驱动
|
||||||
rt_kprintf ("%s was start!\r\n", __FILE__);
|
log_i ("mqtt was start!");
|
||||||
timer = rt_timer_create ("timer", timerouter, RT_NULL, 1000, RT_TIMER_FLAG_PERIODIC); // 异常检测定时器
|
timer = rt_timer_create ("timer", timerouter, RT_NULL, 1000, RT_TIMER_FLAG_PERIODIC); // 异常检测定时器
|
||||||
// 读取配置文件
|
// 读取配置文件
|
||||||
char * p = ef_get_env ("device_id");
|
char * p = ef_get_env ("device_id");
|
||||||
@@ -109,22 +113,29 @@ static void thread_entry (void * argument)
|
|||||||
p = ef_get_env ("mqtt_topic");
|
p = ef_get_env ("mqtt_topic");
|
||||||
rt_memcpy (user_topic, p, strlen (p));
|
rt_memcpy (user_topic, p, strlen (p));
|
||||||
|
|
||||||
int id = rand() % 1000;
|
//int id = rand() % 1000;
|
||||||
rt_sprintf (client_id_str, "GID_SLUICE_V2_220000%s", device_id) ;
|
rt_sprintf (client_id_str, "GID_SLUICE_V2_220000%s", device_id) ;
|
||||||
rt_kprintf ("clinet:%s\r\n", client_id_str);
|
log_i ("client_id:%s", client_id_str);
|
||||||
connectData.clientID.cstring = client_id_str;
|
connectData.clientID.cstring = client_id_str;
|
||||||
connectData.keepAliveInterval = 120;
|
connectData.keepAliveInterval = 120;
|
||||||
connectData.cleansession = 1;
|
connectData.cleansession = 1;
|
||||||
connectData.username.cstring = "admin";
|
|
||||||
connectData.password.cstring = "admin";
|
p = ef_get_env ("mqtt_user");
|
||||||
|
rt_memcpy (mqtt_user, p, strlen (p));
|
||||||
|
|
||||||
|
p = ef_get_env ("mqtt_pass");
|
||||||
|
rt_memcpy (mqtt_pass, p, strlen (p));
|
||||||
|
|
||||||
|
connectData.username.cstring = mqtt_user;
|
||||||
|
connectData.password.cstring = mqtt_pass;
|
||||||
rt_sprintf (sub_topic_str[0], "device/%s/tx/220000%s", "update", device_id);
|
rt_sprintf (sub_topic_str[0], "device/%s/tx/220000%s", "update", device_id);
|
||||||
rt_sprintf (pub_topic_str[0], "device/%s/rx/220000%s", "update", device_id);
|
rt_sprintf (pub_topic_str[0], "device/%s/rx/220000%s", "update", device_id);
|
||||||
// 读取设备编码
|
// 读取设备编码
|
||||||
rt_sprintf (sub_topic_str[1], "device/%s/tx/220000%s", user_topic, device_id);
|
rt_sprintf (sub_topic_str[1], "device/%s/tx/220000%s", user_topic, device_id);
|
||||||
rt_sprintf (pub_topic_str[1], "device/%s/rx/220000%s", user_topic, device_id);
|
rt_sprintf (pub_topic_str[1], "device/%s/rx/220000%s", user_topic, device_id);
|
||||||
#if (SUBTOPIC_COUNT > 1)
|
#if (SUBTOPIC_COUNT > 1)
|
||||||
rt_sprintf (sub_topic_str[2], "device/%s/tx/2200002308170002", user_topic);
|
rt_sprintf (sub_topic_str[2], "device/%s/tx/220000%s", "minle",device_id);
|
||||||
rt_sprintf (pub_topic_str[2], "device/%s/rx/2200002308170002", user_topic);
|
rt_sprintf (pub_topic_str[2], "device/%s/rx/220000%s", "minle",device_id);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < SUBTOPIC_COUNT + 1; i++)
|
for (int i = 0; i < SUBTOPIC_COUNT + 1; i++)
|
||||||
@@ -137,18 +148,20 @@ static void thread_entry (void * argument)
|
|||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
MQTTINIT:
|
MQTTINIT:
|
||||||
if (g_netDrv->State != Conn)
|
|
||||||
|
if (g_netDrv->State != Conn) // 等待网络模块注册成功
|
||||||
{
|
{
|
||||||
//rt_kprintf ("mqtt tcp-connected fail\r\n");
|
//rt_kprintf ("mqtt tcp-connected fail\r\n");
|
||||||
rt_thread_delay (1000); // 延迟3s 等待模块连接TCP 服务成功
|
rt_thread_delay (1000); // 延迟3s 等待模块连接TCP 服务成功
|
||||||
goto MQTTINIT;
|
goto MQTTINIT;
|
||||||
}
|
}
|
||||||
// 链接MQTT 服务器
|
// 链接MQTT 服务器
|
||||||
rt_kprintf ("mqtt connected\r\n");
|
log_i ("connect to mqtt server");
|
||||||
mqtt_buflen = MQTTSerialize_connect (mqtt_buffer, MQTT_BUFF_LENGTH, &connectData);
|
mqtt_buflen = MQTTSerialize_connect (mqtt_buffer, MQTT_BUFF_LENGTH, &connectData);
|
||||||
netdrv_service_tx (mqtt_buffer, mqtt_buflen);
|
netdrv_service_tx (mqtt_buffer, mqtt_buflen);
|
||||||
if (RT_EOK != rt_event_recv (gTrigEvents, EVENT_TRIG_NETMODE_RX1, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 10000, RT_NULL))
|
if (RT_EOK != rt_event_recv (gTrigEvents, EVENT_TRIG_NETMODE_RX1, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 10000, RT_NULL))
|
||||||
{
|
{
|
||||||
|
netdrv_reset();// 切换到mqtt 驱动
|
||||||
goto MQTTINIT;
|
goto MQTTINIT;
|
||||||
}
|
}
|
||||||
rt_thread_mdelay (10);
|
rt_thread_mdelay (10);
|
||||||
@@ -157,26 +170,31 @@ MQTTINIT:
|
|||||||
unsigned char sessionPresent, connack_rc;
|
unsigned char sessionPresent, connack_rc;
|
||||||
if (MQTTDeserialize_connack (&sessionPresent, &connack_rc, mqtt_buffer, MQTT_BUFF_LENGTH) != 1 || connack_rc != 0)
|
if (MQTTDeserialize_connack (&sessionPresent, &connack_rc, mqtt_buffer, MQTT_BUFF_LENGTH) != 1 || connack_rc != 0)
|
||||||
{
|
{
|
||||||
rt_kprintf ("Unable to connect, return code %d\n", connack_rc);
|
log_i ("Unable to connect, return code %d\n", connack_rc);
|
||||||
rt_thread_delay (3000);
|
rt_thread_delay (3000);
|
||||||
netdrv_clear();
|
netdrv_clear();
|
||||||
|
netdrv_reset();// 切换到mqtt 驱动
|
||||||
goto MQTTINIT;
|
goto MQTTINIT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rt_kprintf ("mqtt error");
|
log_i ("mqtt error");
|
||||||
netdrv_clear();
|
netdrv_clear();
|
||||||
|
rt_thread_mdelay (3000);
|
||||||
|
// netdrv_switch();// 切换到mqtt 驱动
|
||||||
goto MQTTINIT;
|
goto MQTTINIT;
|
||||||
}
|
}
|
||||||
netdrv_clear();
|
netdrv_clear();
|
||||||
rt_kprintf ("connect to mqtt successful\n");
|
log_i ("connect to mqtt successful");
|
||||||
// 订阅topic
|
// 订阅topic
|
||||||
mqtt_buflen = MQTTSerialize_subscribe (mqtt_buffer, MQTT_BUFF_LENGTH, 0, message_id++, SUBTOPIC_COUNT + 1, subtopic, qos);
|
mqtt_buflen = MQTTSerialize_subscribe (mqtt_buffer, MQTT_BUFF_LENGTH, 0, message_id++, SUBTOPIC_COUNT + 1, subtopic, qos);
|
||||||
netdrv_service_tx (mqtt_buffer, mqtt_buflen);
|
netdrv_service_tx (mqtt_buffer, mqtt_buflen);
|
||||||
if (RT_EOK != rt_event_recv (gTrigEvents, EVENT_TRIG_NETMODE_RX1, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 10000, RT_NULL))
|
if (RT_EOK != rt_event_recv (gTrigEvents, EVENT_TRIG_NETMODE_RX1, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 10000, RT_NULL))
|
||||||
{
|
{
|
||||||
netdrv_clear();
|
netdrv_clear();
|
||||||
|
netdrv_reset();// 切换到mqtt 驱动
|
||||||
|
rt_thread_mdelay (3000);
|
||||||
goto MQTTINIT;
|
goto MQTTINIT;
|
||||||
}
|
}
|
||||||
if (MQTTPacket_read (mqtt_buffer, MQTT_BUFF_LENGTH, netdrv_getdata) == SUBACK) /* wait for suback */
|
if (MQTTPacket_read (mqtt_buffer, MQTT_BUFF_LENGTH, netdrv_getdata) == SUBACK) /* wait for suback */
|
||||||
@@ -187,8 +205,10 @@ MQTTINIT:
|
|||||||
MQTTDeserialize_suback (&submsgid, 1, &subcount, &granted_qos, mqtt_buffer, MQTT_BUFF_LENGTH);
|
MQTTDeserialize_suback (&submsgid, 1, &subcount, &granted_qos, mqtt_buffer, MQTT_BUFF_LENGTH);
|
||||||
if (granted_qos != 0)
|
if (granted_qos != 0)
|
||||||
{
|
{
|
||||||
rt_kprintf ("granted qos != 0, %d\n", granted_qos);
|
log_i ("granted qos != 0, %d\n", granted_qos);
|
||||||
netdrv_clear();
|
netdrv_clear();
|
||||||
|
netdrv_reset();// 切换到mqtt 驱动
|
||||||
|
rt_thread_mdelay (3000);
|
||||||
goto MQTTINIT;
|
goto MQTTINIT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -197,11 +217,12 @@ MQTTINIT:
|
|||||||
rt_kprintf ("sub topic faild\r\n");
|
rt_kprintf ("sub topic faild\r\n");
|
||||||
rt_thread_delay (1000);
|
rt_thread_delay (1000);
|
||||||
netdrv_clear();
|
netdrv_clear();
|
||||||
|
netdrv_reset();
|
||||||
goto MQTTINIT;
|
goto MQTTINIT;
|
||||||
}
|
}
|
||||||
netdrv_clear();
|
netdrv_clear();
|
||||||
|
|
||||||
rt_kprintf ("subtopic topic %s\r\n", subtopic[0].cstring);
|
log_i ("subtopic topic [%s]", subtopic[1].cstring);
|
||||||
rt_event_send (gTrigEvents, EVENT_TRIG_MQTT_SUB);
|
rt_event_send (gTrigEvents, EVENT_TRIG_MQTT_SUB);
|
||||||
netdrv_clear();
|
netdrv_clear();
|
||||||
rt_thread_delay (500);
|
rt_thread_delay (500);
|
||||||
@@ -226,16 +247,14 @@ MQTTINIT:
|
|||||||
&payload_in, &payloadlen_in, mqtt_buffer, MQTT_BUFF_LENGTH);
|
&payload_in, &payloadlen_in, mqtt_buffer, MQTT_BUFF_LENGTH);
|
||||||
rt_memcpy (gMqttDrv.rxbuff, payload_in, payloadlen_in) ;
|
rt_memcpy (gMqttDrv.rxbuff, payload_in, payloadlen_in) ;
|
||||||
gMqttDrv.rx_size = payloadlen_in;
|
gMqttDrv.rx_size = payloadlen_in;
|
||||||
//rt_memcpy(gMqttDrv.topic,receivedTopic.lenstring.data,receivedTopic.lenstring.len);
|
|
||||||
|
|
||||||
|
|
||||||
for (int var = 0; var < SUBTOPIC_COUNT + 1; ++var)
|
for (int var = 0; var < SUBTOPIC_COUNT + 1; ++var)
|
||||||
{
|
{
|
||||||
if (rt_memcmp (subtopic[var].cstring, receivedTopic.lenstring.data, receivedTopic.lenstring.len) == 0)
|
if (rt_memcmp (subtopic[var].cstring, receivedTopic.lenstring.data, receivedTopic.lenstring.len) == 0)
|
||||||
{
|
{
|
||||||
gMqttDrv.rx_index = var;
|
gMqttDrv.rx_index = var;
|
||||||
rt_kprintf ("recv from :%d,%*.s\r\n", gMqttDrv.rx_index, receivedTopic.lenstring.len, receivedTopic.lenstring.data);
|
log_i ("recv from :%d", gMqttDrv.rx_index);
|
||||||
break;
|
// break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (gMqttDrv.rx_index == 0) // 0 通道为升级通道
|
if (gMqttDrv.rx_index == 0) // 0 通道为升级通道
|
||||||
@@ -246,7 +265,7 @@ MQTTINIT:
|
|||||||
{
|
{
|
||||||
rt_event_send (gTrigEvents, EVENT_TRIG_COMM_RX);
|
rt_event_send (gTrigEvents, EVENT_TRIG_COMM_RX);
|
||||||
}
|
}
|
||||||
timerout_timer = 0;
|
MQTT_timerout_timer = 0;
|
||||||
}
|
}
|
||||||
netdrv_clear();
|
netdrv_clear();
|
||||||
}
|
}
|
||||||
@@ -258,7 +277,8 @@ MQTTINIT:
|
|||||||
}
|
}
|
||||||
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_MQTT_RST, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 0, RT_NULL))
|
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_MQTT_RST, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 0, RT_NULL))
|
||||||
{
|
{
|
||||||
rt_kprintf ("mqtt conn lost\r\n");
|
log_i ("mqtt conn lost by timeout");
|
||||||
|
//netdrv_switch();// 切换到mqtt 驱动
|
||||||
netdrv_reset();
|
netdrv_reset();
|
||||||
State = DISC;
|
State = DISC;
|
||||||
rt_event_send (gTrigEvents, EVENT_TRIG_COMM_RST);
|
rt_event_send (gTrigEvents, EVENT_TRIG_COMM_RST);
|
||||||
@@ -267,7 +287,8 @@ MQTTINIT:
|
|||||||
// 网络链接丢失
|
// 网络链接丢失
|
||||||
if (g_netDrv->State != Conn)
|
if (g_netDrv->State != Conn)
|
||||||
{
|
{
|
||||||
rt_kprintf ("mqtt conn lost\r\n");
|
log_i ("mqtt conn lost by network\r\n");
|
||||||
|
//netdrv_switch();// 切换到mqtt 驱动
|
||||||
netdrv_reset();
|
netdrv_reset();
|
||||||
State = DISC;
|
State = DISC;
|
||||||
rt_event_send (gTrigEvents, EVENT_TRIG_COMM_RST);
|
rt_event_send (gTrigEvents, EVENT_TRIG_COMM_RST);
|
||||||
@@ -283,7 +304,6 @@ MQTTINIT:
|
|||||||
|
|
||||||
void MQTT_SendData (void)
|
void MQTT_SendData (void)
|
||||||
{
|
{
|
||||||
|
|
||||||
// topic_index = index;
|
// topic_index = index;
|
||||||
//// rt_memcpy(mqtt_payload,data,size);
|
//// rt_memcpy(mqtt_payload,data,size);
|
||||||
//// mqtt_payload_size = size ;
|
//// mqtt_payload_size = size ;
|
||||||
@@ -313,7 +333,7 @@ void MQTTThreadStart (void)
|
|||||||
|
|
||||||
void shell_mqtt_time (void)
|
void shell_mqtt_time (void)
|
||||||
{
|
{
|
||||||
rt_kprintf ("lost_timer:%u\r\n", timerout_timer) ;
|
rt_kprintf ("lost_timer:%u\r\n", MQTT_timerout_timer) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+142
-68
@@ -9,80 +9,116 @@
|
|||||||
#include "netdrv.h"
|
#include "netdrv.h"
|
||||||
#include "dtu-board.h"
|
#include "dtu-board.h"
|
||||||
|
|
||||||
extern netDrv_t g_cat1Drv;
|
|
||||||
extern netDrv_t g_MJEth1Drv;
|
#if !defined(LOG_TAG)
|
||||||
extern netDrv_t g_dtuDrv;
|
#define LOG_TAG "netdrv"
|
||||||
|
#endif
|
||||||
|
#include <elog.h>
|
||||||
|
|
||||||
|
extern netDrvInfo_t g_cat1Drv;
|
||||||
|
extern netDrvInfo_t g_MJEth1Drv;
|
||||||
|
extern netDrvInfo_t g_dtuDrv;
|
||||||
|
|
||||||
|
|
||||||
netDrv_t * g_netDrv;
|
netDrvInfo_t * g_netDrv;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int mysock = 0;
|
static int mysock = 0;
|
||||||
static int offset = 0;
|
static int offset = 0;
|
||||||
|
netDrv_t g_net_drv = Cat1;// 0选择4G 上网 1:选择eth上网
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 使用4G 模块上网
|
||||||
|
static void netdrv_openCat1 (void)
|
||||||
|
{
|
||||||
|
g_dtuDrv.IsEnable = 0; // 打开4G
|
||||||
|
g_cat1Drv.IsEnable = 1;
|
||||||
|
g_netDrv = &g_cat1Drv; // 0 选择 dtu 上网
|
||||||
|
rt_event_send (gTrigEvents, EVENT_TRIG_ETH_SHUT) ;
|
||||||
|
}
|
||||||
|
// 使用Eth 模块上网
|
||||||
|
static void netdrv_openDtu (void)
|
||||||
|
{
|
||||||
|
g_dtuDrv.IsEnable = 1; // 打开4G
|
||||||
|
g_cat1Drv.IsEnable = 0;
|
||||||
|
g_netDrv = &g_dtuDrv; // 0 选择 dtu 上网
|
||||||
|
// 通知4g模块关机
|
||||||
|
rt_event_send (gTrigEvents, EVENT_TRIG_CAT1_SHUT) ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void netdrv_init (void)
|
void netdrv_init (void)
|
||||||
{
|
{
|
||||||
char * drv = ef_get_env ("net_drv"); // 读取网络类型
|
|
||||||
if (rt_memcmp ("dtu", drv, 3) == 0) // 驱动程序位DTU模式,就是不通过本地配置,直接透传
|
|
||||||
{
|
|
||||||
g_netDrv = &g_dtuDrv;
|
|
||||||
DTUThreadStart();
|
|
||||||
}
|
|
||||||
else if (rt_memcmp ("ec200", drv, 4) == 0)
|
|
||||||
{
|
|
||||||
g_netDrv = &g_cat1Drv;
|
|
||||||
|
|
||||||
CAT1ThreadStart();
|
if (g_net_drv == Dtu) // 4G 模块
|
||||||
|
{
|
||||||
|
netdrv_openDtu();
|
||||||
}
|
}
|
||||||
// else if (rt_memcmp ("eth", drv, 3) == 0)
|
|
||||||
// {
|
|
||||||
// g_netDrv = &g_MJEth1Drv;
|
|
||||||
// MJEth1ThreadStart();
|
|
||||||
// }
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
netdrv_openCat1();
|
||||||
}
|
}
|
||||||
|
DTUThreadStart(); // 启动线程
|
||||||
|
CAT1ThreadStart(); // 启动线程
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void netdrv_service_tx (uint8_t * data, int length)
|
void netdrv_service_tx (uint8_t * data, int length)
|
||||||
{
|
{
|
||||||
char * drv = ef_get_env ("net_drv"); // 读取网络类型
|
|
||||||
if (rt_memcmp ("dtu", drv, 3) == 0) // 驱动程序位DTU模式,就是不通过本地配置,直接透传
|
if (g_net_drv == Dtu)
|
||||||
{
|
{
|
||||||
dtu_service_tx ( (char *) data, length);
|
dtu_service_tx ( (char *) data, length);
|
||||||
}
|
}
|
||||||
else if (rt_memcmp ("ec200", drv, 4) == 0)
|
else
|
||||||
{
|
{
|
||||||
cat1_service_tx ( (char *) data, length);
|
cat1_service_tx ( (char *) data, length);
|
||||||
}
|
}
|
||||||
else if (rt_memcmp ("eth", drv, 3) == 0)
|
}
|
||||||
{
|
|
||||||
|
|
||||||
|
// 切换网络驱动
|
||||||
|
void netdrv_switch (void)
|
||||||
|
{
|
||||||
|
if (g_net_drv == Dtu)
|
||||||
|
{
|
||||||
|
log_i ("net work drv switch to cat1");
|
||||||
|
netdrv_openCat1();
|
||||||
|
g_net_drv = Cat1 ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
log_i ("net work drv switch to dtu");
|
||||||
|
netdrv_openDtu();
|
||||||
|
g_net_drv = Dtu ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void netdrv_reset (void)
|
void netdrv_reset (void)
|
||||||
{
|
{
|
||||||
char * drv = ef_get_env ("net_drv"); // 读取网络类型
|
// char * drv = ef_get_env ("net_drv"); // 读取网络类型
|
||||||
if (rt_memcmp ("dtu", drv, 3) == 0) // 驱动程序位DTU模式,就是不通过本地配置,直接透传
|
// if (rt_memcmp ("dtu", drv, 3) == 0) // 驱动程序位DTU模式,就是不通过本地配置,直接透传
|
||||||
|
// {
|
||||||
|
// dtu_netreset();
|
||||||
|
// }
|
||||||
|
// else if (rt_memcmp ("ec200", drv, 4) == 0)
|
||||||
|
// {
|
||||||
|
// //cat1_service_tx ( (char *) data, length);
|
||||||
|
// }
|
||||||
|
// else if (rt_memcmp ("eth", drv, 3) == 0)
|
||||||
|
// {
|
||||||
|
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (g_net_drv == Dtu)
|
||||||
{
|
{
|
||||||
dtu_netreset();
|
dtu_netreset();
|
||||||
}
|
|
||||||
else if (rt_memcmp ("ec200", drv, 4) == 0)
|
|
||||||
{
|
|
||||||
//cat1_service_tx ( (char *) data, length);
|
|
||||||
}
|
|
||||||
else if (rt_memcmp ("eth", drv, 3) == 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -94,9 +130,47 @@ void netdrv_reset (void)
|
|||||||
int netdrv_getdata (unsigned char* buf, int count)
|
int netdrv_getdata (unsigned char* buf, int count)
|
||||||
{
|
{
|
||||||
int tsize = 0;
|
int tsize = 0;
|
||||||
char * drv = ef_get_env ("net_drv"); // 读取网络类型
|
// char * drv = ef_get_env ("net_drv"); // 读取网络类型
|
||||||
if (rt_memcmp ("dtu", drv, 3) == 0) // 驱动程序位DTU模式,就是不通过本地配置,直接透传
|
// if (rt_memcmp ("dtu", drv, 3) == 0) // 驱动程序位DTU模式,就是不通过本地配置,直接透传
|
||||||
|
// {
|
||||||
|
// if (offset + count > g_netDrv->rx_size)
|
||||||
|
// {
|
||||||
|
// tsize = g_netDrv->rx_size - offset;
|
||||||
|
// rt_memcpy (buf, &g_netDrv->rxbuff[offset], tsize);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// tsize = count;
|
||||||
|
// rt_memcpy (buf, &g_netDrv->rxbuff[offset], tsize);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// }
|
||||||
|
// else if (rt_memcmp ("ec200", drv, 4) == 0)
|
||||||
|
// {
|
||||||
|
// if (offset + count > g_netDrv->rx_size)
|
||||||
|
// {
|
||||||
|
// tsize = g_netDrv->rx_size - offset;
|
||||||
|
// rt_memcpy (buf, &g_netDrv->rxbuff[offset], tsize);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// tsize = count;
|
||||||
|
// rt_memcpy (buf, &g_netDrv->rxbuff[offset], tsize);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else if (rt_memcmp ("eth", drv, 3) == 0)
|
||||||
|
// {
|
||||||
|
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
if (g_net_drv == Dtu)
|
||||||
{
|
{
|
||||||
|
//dtu_netreset();
|
||||||
if (offset + count > g_netDrv->rx_size)
|
if (offset + count > g_netDrv->rx_size)
|
||||||
{
|
{
|
||||||
tsize = g_netDrv->rx_size - offset;
|
tsize = g_netDrv->rx_size - offset;
|
||||||
@@ -107,28 +181,19 @@ int netdrv_getdata (unsigned char* buf, int count)
|
|||||||
tsize = count;
|
tsize = count;
|
||||||
rt_memcpy (buf, &g_netDrv->rxbuff[offset], tsize);
|
rt_memcpy (buf, &g_netDrv->rxbuff[offset], tsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
else if (rt_memcmp ("ec200", drv, 4) == 0)
|
|
||||||
{
|
|
||||||
if (offset + count > g_netDrv->rx_size)
|
|
||||||
{
|
|
||||||
tsize = g_netDrv->rx_size - offset;
|
|
||||||
rt_memcpy (buf, &g_netDrv->rxbuff[offset], tsize);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tsize = count;
|
|
||||||
rt_memcpy (buf, &g_netDrv->rxbuff[offset], tsize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (rt_memcmp ("eth", drv, 3) == 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (offset + count > g_netDrv->rx_size)
|
||||||
|
{
|
||||||
|
tsize = g_netDrv->rx_size - offset;
|
||||||
|
rt_memcpy (buf, &g_netDrv->rxbuff[offset], tsize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tsize = count;
|
||||||
|
rt_memcpy (buf, &g_netDrv->rxbuff[offset], tsize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
offset += count;
|
offset += count;
|
||||||
return tsize;
|
return tsize;
|
||||||
@@ -138,19 +203,28 @@ int netdrv_getdata (unsigned char* buf, int count)
|
|||||||
int netdrv_clear (void)
|
int netdrv_clear (void)
|
||||||
{
|
{
|
||||||
|
|
||||||
char * drv = ef_get_env ("net_drv"); // 读取网络类型
|
// char * drv = ef_get_env ("net_drv"); // 读取网络类型
|
||||||
if (rt_memcmp ("dtu", drv, 3) == 0) // 驱动程序位DTU模式,就是不通过本地配置,直接透传
|
// if (rt_memcmp ("dtu", drv, 3) == 0) // 驱动程序位DTU模式,就是不通过本地配置,直接透传
|
||||||
|
// {
|
||||||
|
// MX_UART_Clear (&g_ETH1Drv);
|
||||||
|
|
||||||
|
// }
|
||||||
|
// else if (rt_memcmp ("ec200", drv, 4) == 0)
|
||||||
|
// {
|
||||||
|
// //rt_memcpy(buf, &g_cat1Drv.rxbuff[offset], count);
|
||||||
|
// }
|
||||||
|
// else if (rt_memcmp ("eth", drv, 3) == 0)
|
||||||
|
// {
|
||||||
|
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (g_net_drv == Dtu)
|
||||||
{
|
{
|
||||||
MX_UART_Clear (&g_ETH1Drv);
|
MX_UART_Clear (&g_ETH1Drv);
|
||||||
|
|
||||||
}
|
|
||||||
else if (rt_memcmp ("ec200", drv, 4) == 0)
|
|
||||||
{
|
|
||||||
//rt_memcpy(buf, &g_cat1Drv.rxbuff[offset], count);
|
|
||||||
}
|
|
||||||
else if (rt_memcmp ("eth", drv, 3) == 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-8
@@ -10,7 +10,13 @@ typedef enum netDrvState_t
|
|||||||
Idle // 空闲
|
Idle // 空闲
|
||||||
} netDrvState_t;
|
} netDrvState_t;
|
||||||
|
|
||||||
typedef struct netDrv_t
|
typedef enum netDrv_t
|
||||||
|
{
|
||||||
|
Dtu = 0,
|
||||||
|
Cat1 = 1
|
||||||
|
} netDrv_t;
|
||||||
|
|
||||||
|
typedef struct netDrvInfo_t
|
||||||
{
|
{
|
||||||
int Csq;
|
int Csq;
|
||||||
char Iccid[20];
|
char Iccid[20];
|
||||||
@@ -19,7 +25,10 @@ typedef struct netDrv_t
|
|||||||
int rx_size; // 接受到的tcp 数据缓存
|
int rx_size; // 接受到的tcp 数据缓存
|
||||||
char * txbuff; // 发送的TCP 数据缓存
|
char * txbuff; // 发送的TCP 数据缓存
|
||||||
int tx_size;
|
int tx_size;
|
||||||
} netDrv_t;
|
int IsEnable;
|
||||||
|
} netDrvInfo_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum CommRet_T
|
typedef enum CommRet_T
|
||||||
@@ -28,14 +37,16 @@ typedef enum CommRet_T
|
|||||||
RetErr
|
RetErr
|
||||||
} CommRet_T;
|
} CommRet_T;
|
||||||
|
|
||||||
extern netDrv_t * g_netDrv;;
|
extern netDrvInfo_t * g_netDrv;
|
||||||
|
extern netDrv_t g_net_drv ;// 0选择4G 上网 1:选择eth上网
|
||||||
|
|
||||||
|
|
||||||
void netdrv_service_tx (uint8_t * data, int length);
|
extern void netdrv_service_tx (uint8_t * data, int length);
|
||||||
int netdrv_getdata (uint8_t* buf, int count);
|
extern int netdrv_getdata (uint8_t* buf, int count);
|
||||||
int netdrv_clear (void);
|
extern int netdrv_clear (void);
|
||||||
void netdrv_init (void);
|
extern void netdrv_init (void);
|
||||||
void netdrv_reset (void); // 网络链接失败,通知驱动重新启动网络模块
|
extern void netdrv_reset (void); // 网络链接失败,通知驱动重新启动网络模块
|
||||||
|
extern void netdrv_switch (void);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include "aes.h"
|
||||||
|
#include <rtthread.h>
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* AES computation context variable
|
||||||
|
*/
|
||||||
|
static aes_context AesContext;
|
||||||
|
/*!
|
||||||
|
* Encryption aBlock and sBlock
|
||||||
|
*/
|
||||||
|
static uint8_t aBlock[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
static uint8_t sBlock[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void LoRaMacPayloadEncrypt (const uint8_t *buffer, uint16_t size, const uint8_t *key, uint8_t *encBuffer)
|
||||||
|
{
|
||||||
|
uint16_t i;
|
||||||
|
uint8_t bufferIndex = 0;
|
||||||
|
uint16_t ctr = 1;
|
||||||
|
|
||||||
|
rt_memset (AesContext.ksch, '\0', 240);
|
||||||
|
aes_set_key (key, 16, &AesContext);
|
||||||
|
|
||||||
|
// aBlock[5] = dir;
|
||||||
|
|
||||||
|
// aBlock[6] = ( address ) & 0xFF;
|
||||||
|
// aBlock[7] = ( address >> 8 ) & 0xFF;
|
||||||
|
// aBlock[8] = ( address >> 16 ) & 0xFF;
|
||||||
|
// aBlock[9] = ( address >> 24 ) & 0xFF;
|
||||||
|
|
||||||
|
// aBlock[10] = ( sequenceCounter ) & 0xFF;
|
||||||
|
// aBlock[11] = ( sequenceCounter >> 8 ) & 0xFF;
|
||||||
|
// aBlock[12] = ( sequenceCounter >> 16 ) & 0xFF;
|
||||||
|
// aBlock[13] = ( sequenceCounter >> 24 ) & 0xFF;
|
||||||
|
|
||||||
|
while (size >= 16)
|
||||||
|
{
|
||||||
|
aBlock[15] = ( (ctr) & 0xFF);
|
||||||
|
ctr++;
|
||||||
|
aes_encrypt (aBlock, sBlock, &AesContext);
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
encBuffer[bufferIndex + i] = buffer[bufferIndex + i] ^ sBlock[i];
|
||||||
|
}
|
||||||
|
size -= 16;
|
||||||
|
bufferIndex += 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size > 0)
|
||||||
|
{
|
||||||
|
aBlock[15] = ( (ctr) & 0xFF);
|
||||||
|
aes_encrypt (aBlock, sBlock, &AesContext);
|
||||||
|
for (i = 0; i < size; i++)
|
||||||
|
{
|
||||||
|
encBuffer[bufferIndex + i] = buffer[bufferIndex + i] ^ sBlock[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoRaMacPayloadDecrypt (const uint8_t *buffer, uint16_t size, const uint8_t *key, uint32_t address, uint8_t dir, uint32_t sequenceCounter, uint8_t *decBuffer)
|
||||||
|
{
|
||||||
|
LoRaMacPayloadEncrypt (buffer, size, key, decBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void netWorkAesInit (void)
|
||||||
|
{
|
||||||
|
char data[128] = {"8989098989098989"}, data1[128];
|
||||||
|
char key[] = {"8989098989890989"};
|
||||||
|
aes_set_key (key, 16, &AesContext);
|
||||||
|
LoRaMacPayloadEncrypt (data, 16, key, data1) ;
|
||||||
|
for (int i = 0; i < 32; i++)
|
||||||
|
{
|
||||||
|
rt_kprintf ("%02x", data1[i]);
|
||||||
|
}
|
||||||
|
rt_kprintf ("\r\n");
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#ifndef _NEETWORK_CRYPTO_H
|
||||||
|
#define _NEETWORK_CRYPTO_H
|
||||||
|
|
||||||
|
void netWorkAesInit (void);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
+14
-7
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int g_syn_number = 0;
|
static int g_syn_number = 0;
|
||||||
|
|
||||||
|
|
||||||
@@ -35,7 +36,6 @@ int PacketHeader (uint8_t func, char * data, int length, char * txbuff)
|
|||||||
txbuff[tx_size++] = 0x00;
|
txbuff[tx_size++] = 0x00;
|
||||||
txbuff[tx_size++] = length;// 长度
|
txbuff[tx_size++] = length;// 长度
|
||||||
txbuff[tx_size++] = _651_STX;
|
txbuff[tx_size++] = _651_STX;
|
||||||
//dbg_printf ("sizeof (_651_U_Header_t):%d\r\n", tx_size);
|
|
||||||
|
|
||||||
for (int i = 0; i < length; i++)
|
for (int i = 0; i < length; i++)
|
||||||
{
|
{
|
||||||
@@ -99,6 +99,14 @@ int PakcetTimerUp (int k, char * tx_data)
|
|||||||
|
|
||||||
tx_data[tx_size++] = 0xFF; // 要素1 闸前水位
|
tx_data[tx_size++] = 0xFF; // 要素1 闸前水位
|
||||||
tx_data[tx_size++] = 0x39; // 要素1 闸前水位
|
tx_data[tx_size++] = 0x39; // 要素1 闸前水位
|
||||||
|
#ifdef USER_UNREAL_DATA // 使用虚拟数据上报
|
||||||
|
WaterData[0].thisSpeed = rand() % 36 / 10;
|
||||||
|
WaterData[0].thisFlow = rand() % 36 / 10;
|
||||||
|
WaterData[0].ttWater = 32567;
|
||||||
|
SluiceData[0].gopen = 835;
|
||||||
|
SluiceData[0].lload = 250;
|
||||||
|
WaterData[0].thisLevel = rand() % 36 / 10;
|
||||||
|
#endif
|
||||||
|
|
||||||
intk.data = WaterData[0].thisSpeed * 100;
|
intk.data = WaterData[0].thisSpeed * 100;
|
||||||
tx_data[tx_size++] = intk.byte[3];
|
tx_data[tx_size++] = intk.byte[3];
|
||||||
@@ -117,13 +125,13 @@ int PakcetTimerUp (int k, char * tx_data)
|
|||||||
tx_data[tx_size++] = intk.byte[2];
|
tx_data[tx_size++] = intk.byte[2];
|
||||||
tx_data[tx_size++] = intk.byte[1];
|
tx_data[tx_size++] = intk.byte[1];
|
||||||
tx_data[tx_size++] = intk.byte[0];
|
tx_data[tx_size++] = intk.byte[0];
|
||||||
intk.data = SluiceData[k].gopen * 10;
|
intk.data = SluiceData[0].gopen * 10;
|
||||||
tx_data[tx_size++] = intk.byte[3];
|
tx_data[tx_size++] = intk.byte[3];
|
||||||
tx_data[tx_size++] = intk.byte[2];
|
tx_data[tx_size++] = intk.byte[2];
|
||||||
tx_data[tx_size++] = intk.byte[1];
|
tx_data[tx_size++] = intk.byte[1];
|
||||||
tx_data[tx_size++] = intk.byte[0];
|
tx_data[tx_size++] = intk.byte[0];
|
||||||
|
|
||||||
intk.data = (SluiceData[k].lload + SluiceData[k].rload) * 10;
|
intk.data = (SluiceData[0].lload + SluiceData[0].rload) * 10;
|
||||||
tx_data[tx_size++] = intk.byte[3];
|
tx_data[tx_size++] = intk.byte[3];
|
||||||
tx_data[tx_size++] = intk.byte[2];
|
tx_data[tx_size++] = intk.byte[2];
|
||||||
tx_data[tx_size++] = intk.byte[1];
|
tx_data[tx_size++] = intk.byte[1];
|
||||||
@@ -137,14 +145,14 @@ int PakcetTimerUp (int k, char * tx_data)
|
|||||||
tx_data[tx_size++] = intk.byte[0];
|
tx_data[tx_size++] = intk.byte[0];
|
||||||
|
|
||||||
// 要素7 电池电压
|
// 要素7 电池电压
|
||||||
intk.data = 0 * 100;
|
intk.data = 12.3 * 100;
|
||||||
tx_data[tx_size++] = intk.byte[3];
|
tx_data[tx_size++] = intk.byte[3];
|
||||||
tx_data[tx_size++] = intk.byte[2];
|
tx_data[tx_size++] = intk.byte[2];
|
||||||
tx_data[tx_size++] = intk.byte[1];
|
tx_data[tx_size++] = intk.byte[1];
|
||||||
tx_data[tx_size++] = intk.byte[0];
|
tx_data[tx_size++] = intk.byte[0];
|
||||||
|
|
||||||
// 要素8 机箱温度
|
// 要素8 机箱温度
|
||||||
intk.data = 0 * 100;
|
intk.data = 25.6 * 100;
|
||||||
tx_data[tx_size++] = intk.byte[3];
|
tx_data[tx_size++] = intk.byte[3];
|
||||||
tx_data[tx_size++] = intk.byte[2];
|
tx_data[tx_size++] = intk.byte[2];
|
||||||
tx_data[tx_size++] = intk.byte[1];
|
tx_data[tx_size++] = intk.byte[1];
|
||||||
@@ -171,8 +179,7 @@ int PacketSluiceUp (int k, char * tx_data)
|
|||||||
tx_data[tx_size++] = 0x01;
|
tx_data[tx_size++] = 0x01;
|
||||||
tx_data[tx_size++] = 0x01;
|
tx_data[tx_size++] = 0x01;
|
||||||
// // 闸门开度
|
// // 闸门开度
|
||||||
intk.data = SluiceData[k].gopen * 10;
|
intk.data = SluiceData[0].gopen * 10;
|
||||||
rt_kprintf("gopen:%d\r\n");
|
|
||||||
tx_data[tx_size++] = intk.byte[3];
|
tx_data[tx_size++] = intk.byte[3];
|
||||||
tx_data[tx_size++] = intk.byte[2];
|
tx_data[tx_size++] = intk.byte[2];
|
||||||
tx_data[tx_size++] = intk.byte[1];
|
tx_data[tx_size++] = intk.byte[1];
|
||||||
|
|||||||
+191
-37
@@ -1,6 +1,10 @@
|
|||||||
#include "usart-board.h"
|
#include "usart-board.h"
|
||||||
#include "usart.h"
|
#include "usart.h"
|
||||||
|
#include <rtthread.h>
|
||||||
|
#if !defined(LOG_TAG)
|
||||||
|
#define LOG_TAG "uart"
|
||||||
|
#endif
|
||||||
|
#include <elog.h>
|
||||||
|
|
||||||
#define UART_LPUART1_BUFF_SIZE 256 // 4853
|
#define UART_LPUART1_BUFF_SIZE 256 // 4853
|
||||||
#define UART_LPUART2_BUFF_SIZE 2400 // gsm
|
#define UART_LPUART2_BUFF_SIZE 2400 // gsm
|
||||||
@@ -23,6 +27,11 @@ static char s_uart5_buff[UART_UART5_BUFF_SIZE];
|
|||||||
static char s_uart6_buff[UART_UART6_BUFF_SIZE];
|
static char s_uart6_buff[UART_UART6_BUFF_SIZE];
|
||||||
|
|
||||||
|
|
||||||
|
#define RXBUFFERSIZE 2400
|
||||||
|
uint8_t aDmaLp2RxBuffer[RXBUFFERSIZE];
|
||||||
|
uint8_t aDmaU4RxBuffer [RXBUFFERSIZE];
|
||||||
|
|
||||||
|
|
||||||
extern UART_HandleTypeDef hlpuart1;
|
extern UART_HandleTypeDef hlpuart1;
|
||||||
extern UART_HandleTypeDef hlpuart2;
|
extern UART_HandleTypeDef hlpuart2;
|
||||||
extern UART_HandleTypeDef huart1;
|
extern UART_HandleTypeDef huart1;
|
||||||
@@ -208,6 +217,7 @@ void MX_UART_Init (UartDrv_t *drv)
|
|||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
__HAL_UART_ENABLE_IT (&hlpuart1, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT (&hlpuart1, UART_IT_RXNE);
|
||||||
|
__HAL_UART_ENABLE_IT (&hlpuart1, UART_IT_ORE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case G0_LPUART2 : // GSM
|
case G0_LPUART2 : // GSM
|
||||||
@@ -238,7 +248,16 @@ void MX_UART_Init (UartDrv_t *drv)
|
|||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
__HAL_UART_ENABLE_IT (&hlpuart2, UART_IT_RXNE);
|
|
||||||
|
//__HAL_UART_ENABLE_IT (&hlpuart2, UART_IT_RXNE);
|
||||||
|
__HAL_UART_ENABLE_IT(&hlpuart2, UART_IT_IDLE);
|
||||||
|
__HAL_UART_ENABLE_IT (&hlpuart2, UART_IT_ORE);
|
||||||
|
// __HAL_UART_ENABLE_IT (&hlpuart2, UART_IT_NE);
|
||||||
|
// __HAL_UART_ENABLE_IT (&hlpuart2, UART_IT_FE);
|
||||||
|
if (HAL_UART_Receive_DMA (&hlpuart2, (uint8_t *) aDmaLp2RxBuffer, RXBUFFERSIZE) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case G0_UART1 : // 4853
|
case G0_UART1 : // 4853
|
||||||
huart1.Instance = USART1;
|
huart1.Instance = USART1;
|
||||||
@@ -300,6 +319,7 @@ void MX_UART_Init (UartDrv_t *drv)
|
|||||||
}
|
}
|
||||||
// 使能串口接受中断,用于接受数据
|
// 使能串口接受中断,用于接受数据
|
||||||
__HAL_UART_ENABLE_IT (&huart2, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT (&huart2, UART_IT_RXNE);
|
||||||
|
__HAL_UART_ENABLE_IT (&huart2, UART_IT_ORE);
|
||||||
break;
|
break;
|
||||||
case G0_UART3: // 4852
|
case G0_UART3: // 4852
|
||||||
huart3.Instance = USART3;
|
huart3.Instance = USART3;
|
||||||
@@ -329,6 +349,7 @@ void MX_UART_Init (UartDrv_t *drv)
|
|||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
__HAL_UART_ENABLE_IT (&huart3, UART_IT_ORE);
|
||||||
__HAL_UART_ENABLE_IT (&huart3, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT (&huart3, UART_IT_RXNE);
|
||||||
break;
|
break;
|
||||||
case G0_UART4: // ETH1
|
case G0_UART4: // ETH1
|
||||||
@@ -348,7 +369,13 @@ void MX_UART_Init (UartDrv_t *drv)
|
|||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN USART4_Init 2 */
|
/* USER CODE BEGIN USART4_Init 2 */
|
||||||
__HAL_UART_ENABLE_IT (&huart4, UART_IT_RXNE);
|
//__HAL_UART_ENABLE_IT (&huart4, UART_IT_RXNE);
|
||||||
|
__HAL_UART_ENABLE_IT(&huart4, UART_IT_IDLE);
|
||||||
|
__HAL_UART_ENABLE_IT (&huart4, UART_IT_ORE);
|
||||||
|
if (HAL_UART_Receive_DMA (&huart4, (uint8_t *) aDmaU4RxBuffer, RXBUFFERSIZE) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case G0_UART5: // 4851
|
case G0_UART5: // 4851
|
||||||
huart5.Instance = USART5;
|
huart5.Instance = USART5;
|
||||||
@@ -367,6 +394,7 @@ void MX_UART_Init (UartDrv_t *drv)
|
|||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN USART5_Init 2 */
|
/* USER CODE BEGIN USART5_Init 2 */
|
||||||
|
__HAL_UART_ENABLE_IT (&huart5, UART_IT_ORE);
|
||||||
__HAL_UART_ENABLE_IT (&huart5, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT (&huart5, UART_IT_RXNE);
|
||||||
break;
|
break;
|
||||||
case G0_UART6: // View
|
case G0_UART6: // View
|
||||||
@@ -386,6 +414,7 @@ void MX_UART_Init (UartDrv_t *drv)
|
|||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
__HAL_UART_ENABLE_IT (&huart6, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT (&huart6, UART_IT_RXNE);
|
||||||
|
__HAL_UART_ENABLE_IT (&huart6, UART_IT_ORE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -393,22 +422,34 @@ void MX_UART_Init (UartDrv_t *drv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MX_UART2_LPUART2_IRQHandle (void)
|
||||||
void MX_UART_IRQHandle (void)
|
|
||||||
{
|
{
|
||||||
uint8_t ret;
|
uint8_t ret;
|
||||||
if (USART3->ISR & (1 << 5)) // 串口2
|
// if (LPUART2->ISR & USART_ISR_RXNE_RXFNE)
|
||||||
|
// {
|
||||||
|
//
|
||||||
|
// ret = LPUART2->RDR;
|
||||||
|
// if (g_GSMDrv.rx_buffer != NULL)
|
||||||
|
// {
|
||||||
|
// g_GSMDrv.rx_buffer[g_GSMDrv.rx_size++] = ret;
|
||||||
|
// g_GSMDrv.rx_timer = 30; // 30ms
|
||||||
|
// if (g_GSMDrv.rx_size > UART_LPUART2_BUFF_SIZE)
|
||||||
|
// g_GSMDrv.rx_size = 0;
|
||||||
|
// }
|
||||||
|
// } debug
|
||||||
|
|
||||||
|
if (LPUART2->ISR & USART_ISR_ORE)
|
||||||
{
|
{
|
||||||
ret = USART3->RDR;
|
// rt_kprintf("ore:l2\r\n");
|
||||||
if (g_U4852Drv.rx_buffer != NULL)
|
__HAL_UART_CLEAR_FLAG(&hlpuart2, UART_CLEAR_OREF);
|
||||||
{
|
|
||||||
g_U4852Drv.rx_buffer[g_U4852Drv.rx_size++] = ret;
|
|
||||||
g_U4852Drv.rx_timer = 30; // 30ms
|
|
||||||
if (g_U4852Drv.rx_size > UART_UART3_BUFF_SIZE)
|
|
||||||
g_U4852Drv.rx_size = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (USART2->ISR & (1 << 5)) // 串口2
|
if (USART2->ISR & USART_ISR_ORE)
|
||||||
|
{
|
||||||
|
//rt_kprintf("ore:2\r\n");
|
||||||
|
__HAL_UART_CLEAR_FLAG(&huart2, UART_CLEAR_OREF);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (USART2->ISR & USART_ISR_RXNE_RXFNE) // 串口2
|
||||||
{
|
{
|
||||||
ret = USART2->RDR;
|
ret = USART2->RDR;
|
||||||
if (g_DebugDrv.rx_buffer != NULL)
|
if (g_DebugDrv.rx_buffer != NULL)
|
||||||
@@ -419,18 +460,87 @@ void MX_UART_IRQHandle (void)
|
|||||||
g_DebugDrv.rx_size = 0;
|
g_DebugDrv.rx_size = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (USART4->ISR & (1 << 5))
|
}
|
||||||
|
|
||||||
|
// 串口空闲终端处理函数
|
||||||
|
void MX_UART2_LPUART2_IDLE_IRQHandle(void)
|
||||||
|
{
|
||||||
|
uint16_t ret;
|
||||||
|
|
||||||
|
if (LPUART2->ISR & USART_ISR_IDLE) // 串口空闲中断
|
||||||
{
|
{
|
||||||
ret = USART4->RDR;
|
ret = UART_LPUART2_BUFF_SIZE - __HAL_DMA_GET_COUNTER(hlpuart2.hdmarx); // 接收到数据的长度
|
||||||
if (g_ETH1Drv.rx_buffer != NULL)
|
if (ret > 0)
|
||||||
{
|
{
|
||||||
g_ETH1Drv.rx_buffer[g_ETH1Drv.rx_size++] = ret;
|
rt_memcpy(g_GSMDrv.rx_buffer,aDmaLp2RxBuffer,ret);
|
||||||
g_ETH1Drv.rx_timer = 30; // 30ms
|
g_GSMDrv.rx_size = ret;
|
||||||
if (g_ETH1Drv.rx_size > UART_UART4_BUFF_SIZE)
|
//g_GSMDrv.rxdone();
|
||||||
g_ETH1Drv.rx_size = 0;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_GSMDrv.rx_size = 0;
|
||||||
|
}
|
||||||
|
g_GSMDrv.rxdone();
|
||||||
|
__HAL_UART_CLEAR_FLAG(&hlpuart2, UART_CLEAR_IDLEF);
|
||||||
|
// 处理DMA 数据
|
||||||
|
}
|
||||||
|
// 处理DMA 数据
|
||||||
|
}
|
||||||
|
|
||||||
|
void MX_UART_IDLE_IRQHandle(void)
|
||||||
|
{
|
||||||
|
uint16_t ret;
|
||||||
|
|
||||||
|
if (USART4->ISR & USART_ISR_IDLE) // 串口空闲中断
|
||||||
|
{
|
||||||
|
|
||||||
|
ret = UART_UART4_BUFF_SIZE - __HAL_DMA_GET_COUNTER(huart4.hdmarx); // 接收到数据的长度
|
||||||
|
//log_i("MX_UART_IDLE_IRQHandle:%d",ret);
|
||||||
|
if (ret > 0)
|
||||||
|
{
|
||||||
|
rt_memcpy(g_ETH1Drv.rx_buffer,aDmaU4RxBuffer,ret);
|
||||||
|
g_ETH1Drv.rx_size = ret;
|
||||||
|
//g_ETH1Drv.rxdone();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_ETH1Drv.rx_size = 0;
|
||||||
|
}
|
||||||
|
g_ETH1Drv.rxdone();
|
||||||
|
__HAL_UART_CLEAR_FLAG(&huart4, UART_CLEAR_IDLEF);
|
||||||
|
// 处理DMA 数据
|
||||||
|
}
|
||||||
|
// 处理DMA 数据
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MX_UART_IRQHandle (void)
|
||||||
|
{
|
||||||
|
uint8_t ret;
|
||||||
|
|
||||||
|
if (USART3->ISR & USART_ISR_RXNE_RXFNE) // 串口2
|
||||||
|
{
|
||||||
|
ret = USART3->RDR;
|
||||||
|
if (g_U4852Drv.rx_buffer != NULL)
|
||||||
|
{
|
||||||
|
g_U4852Drv.rx_buffer[g_U4852Drv.rx_size++] = ret;
|
||||||
|
g_U4852Drv.rx_timer = 30; // 30ms
|
||||||
|
if (g_U4852Drv.rx_size > UART_UART3_BUFF_SIZE)
|
||||||
|
g_U4852Drv.rx_size = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (USART5->ISR & (1 << 5))
|
// if (USART4->ISR & USART_ISR_RXNE_RXFNE)
|
||||||
|
// {
|
||||||
|
// ret = USART4->RDR;
|
||||||
|
// if (g_ETH1Drv.rx_buffer != NULL)
|
||||||
|
// {
|
||||||
|
// g_ETH1Drv.rx_buffer[g_ETH1Drv.rx_size++] = ret;
|
||||||
|
// g_ETH1Drv.rx_timer = 30; // 30ms
|
||||||
|
// if (g_ETH1Drv.rx_size > UART_UART4_BUFF_SIZE)
|
||||||
|
// g_ETH1Drv.rx_size = 0;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
if (USART5->ISR & USART_ISR_RXNE_RXFNE)
|
||||||
{
|
{
|
||||||
ret = USART5->RDR;
|
ret = USART5->RDR;
|
||||||
if (g_U4851Drv.rx_buffer != NULL)
|
if (g_U4851Drv.rx_buffer != NULL)
|
||||||
@@ -441,9 +551,10 @@ void MX_UART_IRQHandle (void)
|
|||||||
g_U4851Drv.rx_size = 0;
|
g_U4851Drv.rx_size = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (USART6->ISR & (1 << 5))
|
if (USART6->ISR & USART_ISR_RXNE_RXFNE)
|
||||||
{
|
{
|
||||||
ret = USART6->RDR;
|
ret = USART6->RDR;
|
||||||
|
|
||||||
if (g_ViewDrv.rx_buffer != NULL)
|
if (g_ViewDrv.rx_buffer != NULL)
|
||||||
{
|
{
|
||||||
g_ViewDrv.rx_buffer[g_ViewDrv.rx_size++] = ret;
|
g_ViewDrv.rx_buffer[g_ViewDrv.rx_size++] = ret;
|
||||||
@@ -452,8 +563,9 @@ void MX_UART_IRQHandle (void)
|
|||||||
g_ViewDrv.rx_size = 0;
|
g_ViewDrv.rx_size = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (LPUART1->ISR & (1 << 5))
|
if (LPUART1->ISR & USART_ISR_RXNE_RXFNE)
|
||||||
{
|
{
|
||||||
ret = LPUART1->RDR;
|
ret = LPUART1->RDR;
|
||||||
if (g_ETH2Drv.rx_buffer != NULL)
|
if (g_ETH2Drv.rx_buffer != NULL)
|
||||||
@@ -464,25 +576,64 @@ void MX_UART_IRQHandle (void)
|
|||||||
g_ETH2Drv.rx_size = 0;
|
g_ETH2Drv.rx_size = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (USART3->ISR & USART_ISR_ORE)
|
||||||
if (LPUART2->ISR & (1 << 5))
|
|
||||||
{
|
{
|
||||||
ret = LPUART2->RDR;
|
//rt_kprintf("ore:3\r\n");
|
||||||
if (g_GSMDrv.rx_buffer != NULL)
|
__HAL_UART_CLEAR_FLAG(&huart3, UART_CLEAR_OREF);
|
||||||
{
|
|
||||||
g_GSMDrv.rx_buffer[g_GSMDrv.rx_size++] = ret;
|
|
||||||
g_GSMDrv.rx_timer = 30; // 30ms
|
|
||||||
if (g_GSMDrv.rx_size > UART_LPUART2_BUFF_SIZE)
|
|
||||||
g_GSMDrv.rx_size = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (USART4->ISR & USART_ISR_ORE)
|
||||||
|
{
|
||||||
|
//rt_kprintf("ore:4\r\n");
|
||||||
|
__HAL_UART_CLEAR_FLAG(&huart4, UART_CLEAR_OREF);
|
||||||
|
}
|
||||||
|
if (USART6->ISR & USART_ISR_ORE)
|
||||||
|
{
|
||||||
|
//rt_kprintf("ore:6\r\n");
|
||||||
|
__HAL_UART_CLEAR_FLAG(&huart6, UART_CLEAR_OREF);
|
||||||
|
}
|
||||||
|
if (USART5->ISR & USART_ISR_ORE)
|
||||||
|
{
|
||||||
|
//rt_kprintf("ore:5\r\n");
|
||||||
|
__HAL_UART_CLEAR_FLAG(&huart5, UART_CLEAR_OREF);
|
||||||
|
}
|
||||||
|
if (LPUART1->ISR & USART_ISR_ORE)
|
||||||
|
{
|
||||||
|
//rt_kprintf("ore:l1\r\n");
|
||||||
|
__HAL_UART_CLEAR_FLAG(&hlpuart1, UART_CLEAR_OREF);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MX_UART_Clear (UartDrv_t * drv)
|
void MX_UART_Clear (UartDrv_t * drv)
|
||||||
{
|
{
|
||||||
drv->rx_size = 0;
|
if (drv->Id == G0_LPUART2)
|
||||||
drv->rx_timer = 0;
|
{
|
||||||
|
if (HAL_UART_AbortReceive(&hlpuart2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_UART_Receive_DMA (&hlpuart2, (uint8_t *) aDmaLp2RxBuffer, RXBUFFERSIZE) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (drv->Id == G0_UART4)
|
||||||
|
{
|
||||||
|
if (HAL_UART_AbortReceive(&huart4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_UART_Receive_DMA (&huart4, (uint8_t *) aDmaU4RxBuffer, RXBUFFERSIZE) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
drv->rx_size = 0;
|
||||||
|
drv->rx_timer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MX_UART_PutChar (UartDrv_t * drv, char ch)
|
void MX_UART_PutChar (UartDrv_t * drv, char ch)
|
||||||
@@ -518,6 +669,9 @@ void MX_UART_PutChar (UartDrv_t * drv, char ch)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void MX_UART_PutBuffer (UartDrv_t * drv, char *buff, int size)
|
void MX_UART_PutBuffer (UartDrv_t * drv, char *buff, int size)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
|
|||||||
+87
-46
@@ -20,8 +20,14 @@
|
|||||||
#include "jsonpacket.h"
|
#include "jsonpacket.h"
|
||||||
#include "jsonunpack.h"
|
#include "jsonunpack.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include "user_config.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(LOG_TAG)
|
||||||
|
#define LOG_TAG "network"
|
||||||
|
#endif
|
||||||
|
#include <elog.h>
|
||||||
|
|
||||||
ALIGN (RT_ALIGN_SIZE)
|
ALIGN (RT_ALIGN_SIZE)
|
||||||
static char thread_stack[4096];
|
static char thread_stack[4096];
|
||||||
static struct rt_thread netapp_thread;
|
static struct rt_thread netapp_thread;
|
||||||
@@ -35,14 +41,14 @@ extern MqttDrv_t gMqttDrv;
|
|||||||
static rt_timer_t timer;
|
static rt_timer_t timer;
|
||||||
|
|
||||||
|
|
||||||
static uint32_t g_net_5min_timer[SLUICE_COUTN] = {0};
|
static uint32_t g_net_5min_timer[SUBTOPIC_COUNT] = {0};
|
||||||
static uint32_t g_net_1min_timer[SLUICE_COUTN] = {0};
|
static uint32_t g_net_1min_timer[SUBTOPIC_COUNT] = {0};
|
||||||
|
|
||||||
|
|
||||||
static void timerouter (void * parameter)
|
static void timerouter (void * parameter)
|
||||||
{
|
{
|
||||||
TypeIndexMail_t mail;
|
TypeIndexMail_t mail;
|
||||||
for (int i = 0; i < SLUICE_COUTN; i++)
|
for (int i = 0; i < SUBTOPIC_COUNT; i++)
|
||||||
{
|
{
|
||||||
if (g_net_1min_timer[i] == 1)
|
if (g_net_1min_timer[i] == 1)
|
||||||
{
|
{
|
||||||
@@ -71,7 +77,7 @@ const static char upinfo[][10] = {"heart", "regist", "stand", "sluice", "upack",
|
|||||||
|
|
||||||
static void thread_entry (void * argument)
|
static void thread_entry (void * argument)
|
||||||
{
|
{
|
||||||
rt_kprintf ("%s was start!\r\n", __FILE__);
|
log_i ("network was start!");
|
||||||
TypeIndexMail_t mail;
|
TypeIndexMail_t mail;
|
||||||
timer = rt_timer_create ("timer", timerouter, RT_NULL, 1000, RT_TIMER_FLAG_PERIODIC);
|
timer = rt_timer_create ("timer", timerouter, RT_NULL, 1000, RT_TIMER_FLAG_PERIODIC);
|
||||||
// 读取网络驱动类型
|
// 读取网络驱动类型
|
||||||
@@ -89,18 +95,17 @@ static void thread_entry (void * argument)
|
|||||||
//site_type
|
//site_type
|
||||||
char * p = ef_get_env ("site_type") ;
|
char * p = ef_get_env ("site_type") ;
|
||||||
int site_type = cSiteType2Index(p);
|
int site_type = cSiteType2Index(p);
|
||||||
rt_kprintf ("site_type:%d\r\n", site_type);
|
log_i ("site_type:%d", site_type);
|
||||||
|
|
||||||
//CommTMail_t mail;
|
//CommTMail_t mail;
|
||||||
// 注册网络驱动
|
// 注册网络驱动
|
||||||
// 注册网络驱动
|
// 注册网络驱动
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
|
||||||
INIT:
|
INIT:
|
||||||
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_COMM_RST, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
|
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_COMM_RST, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
|
||||||
{
|
{
|
||||||
rt_kprintf ("net work lost\r\n");
|
log_i ("net work lost");
|
||||||
mail.Type = MAIL_VIEW_NET_STE;
|
mail.Type = MAIL_VIEW_NET_STE;
|
||||||
mail.index = DIS_STE_ERROR;
|
mail.index = DIS_STE_ERROR;
|
||||||
rt_mb_send (gViewMail, * ( (uint32_t*) &mail));
|
rt_mb_send (gViewMail, * ( (uint32_t*) &mail));
|
||||||
@@ -115,12 +120,12 @@ INIT:
|
|||||||
// 订阅成功
|
// 订阅成功
|
||||||
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_MQTT_SUB, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
|
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_MQTT_SUB, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
|
||||||
{
|
{
|
||||||
rt_kprintf ("netWork Sub Success\r\n");
|
log_i ("sub Success");
|
||||||
// 发送注册报
|
// // 发送注册报
|
||||||
mail.Type = MAIL_COMM_REGIST;
|
// mail.Type = MAIL_COMM_REGIST;
|
||||||
mail.index = 1;
|
// mail.index = 1;
|
||||||
rt_mb_send (gTCommMail, * ( (uint32_t *) &mail));
|
// rt_mb_send (gTCommMail, * ( (uint32_t *) &mail));
|
||||||
for (int i = 0; i < SLUICE_COUTN; i++)
|
for (int i = 0; i < SUBTOPIC_COUNT; i++)
|
||||||
{
|
{
|
||||||
rt_timer_start (timer);
|
rt_timer_start (timer);
|
||||||
g_net_1min_timer[i] = i * 10 + 5;
|
g_net_1min_timer[i] = i * 10 + 5;
|
||||||
@@ -132,7 +137,7 @@ INIT:
|
|||||||
}
|
}
|
||||||
if (rt_mb_recv (gTCommMail, (rt_ubase_t *) &mail, RT_WAITING_NO) == RT_EOK)
|
if (rt_mb_recv (gTCommMail, (rt_ubase_t *) &mail, RT_WAITING_NO) == RT_EOK)
|
||||||
{
|
{
|
||||||
rt_kprintf ("recv send mail: type:%s,index:%d\n", upinfo[mail.Type], mail.index);
|
log_i ("send packet: type:%s,index:%d", upinfo[mail.Type], mail.index);
|
||||||
if (g_ifupdate != 1)
|
if (g_ifupdate != 1)
|
||||||
{
|
{
|
||||||
switch (mail.Type)
|
switch (mail.Type)
|
||||||
@@ -152,8 +157,8 @@ INIT:
|
|||||||
case MAIL_COMM_REGIST: // 注册报
|
case MAIL_COMM_REGIST: // 注册报
|
||||||
|
|
||||||
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||||
gMqttDrv.tx_size = JsonRegistDataPacket ((uint8_t *) gMqttDrv.txbuff);
|
// gMqttDrv.tx_size = JsonRegistDataPacket ((uint8_t *) gMqttDrv.txbuff);
|
||||||
gMqttDrv.tx_index = mail.index;
|
// gMqttDrv.tx_index = mail.index; // 通道号
|
||||||
#else
|
#else
|
||||||
// 心跳数据
|
// 心跳数据
|
||||||
tx_size = PacketUpRegist (data);
|
tx_size = PacketUpRegist (data);
|
||||||
@@ -163,11 +168,13 @@ INIT:
|
|||||||
MQTT_SendData () ;
|
MQTT_SendData () ;
|
||||||
break;
|
break;
|
||||||
case MAIL_COMM_SLUICE: // 闸门状态自报
|
case MAIL_COMM_SLUICE: // 闸门状态自报
|
||||||
|
#ifndef USER_JSON_PACKET // 使用Json格式数据包
|
||||||
tx_size = PacketSluiceUp (mail.index - 1, data);
|
tx_size = PacketSluiceUp (mail.index - 1, data);
|
||||||
gMqttDrv.tx_size = PacketHeader (0x4E, data, tx_size, gMqttDrv.txbuff);
|
gMqttDrv.tx_size = PacketHeader (0x4E, data, tx_size, gMqttDrv.txbuff);
|
||||||
gMqttDrv.tx_index = mail.index;
|
gMqttDrv.tx_index = mail.index;
|
||||||
MQTT_SendData () ;
|
MQTT_SendData () ;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case MAIL_COMM_STAND: // 5分钟标准包上报
|
case MAIL_COMM_STAND: // 5分钟标准包上报
|
||||||
|
|
||||||
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||||
@@ -198,27 +205,17 @@ INIT:
|
|||||||
|
|
||||||
MQTT_SendData () ;
|
MQTT_SendData () ;
|
||||||
break;
|
break;
|
||||||
case MAIL_COMM_SLACK: // 提闸的应答
|
// case MAIL_COMM_SLACK: // 提闸的应答
|
||||||
tx_size = PacketSluiceAck (data);
|
// tx_size = PacketSluiceAck (data);
|
||||||
gMqttDrv.tx_size = PacketHeader (0x4E, data, tx_size, gMqttDrv.txbuff);
|
// gMqttDrv.tx_size = PacketHeader (0x4E, data, tx_size, gMqttDrv.txbuff);
|
||||||
gMqttDrv.tx_index = mail.index;
|
// gMqttDrv.tx_index = mail.index;
|
||||||
MQTT_SendData();
|
// MQTT_SendData();
|
||||||
break;
|
// break;
|
||||||
case MAIL_COMM_UPACK: // 升级的应答
|
|
||||||
|
|
||||||
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
|
||||||
gMqttDrv.tx_size = JsonAckSuccPacket ((uint8_t *) gMqttDrv.txbuff);
|
|
||||||
gMqttDrv.tx_index = mail.index;
|
|
||||||
#else
|
|
||||||
// 心跳数据
|
|
||||||
tx_size = PacketAnsAck (data);
|
|
||||||
gMqttDrv.tx_size = PacketHeader (0xE0, data, tx_size, gMqttDrv.txbuff);
|
|
||||||
gMqttDrv.tx_index = mail.index;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
MQTT_SendData();
|
// MQTT_SendData();
|
||||||
break;
|
// break;
|
||||||
case MAIL_COMM_READPARA:
|
case MAIL_COMM_READPARA:
|
||||||
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||||
gMqttDrv.tx_size = JsonConfigReadDataPacket ((uint8_t *) gMqttDrv.txbuff);
|
gMqttDrv.tx_size = JsonConfigReadDataPacket ((uint8_t *) gMqttDrv.txbuff);
|
||||||
@@ -231,6 +228,54 @@ INIT:
|
|||||||
#endif
|
#endif
|
||||||
MQTT_SendData();
|
MQTT_SendData();
|
||||||
break;
|
break;
|
||||||
|
case MAIL_COMM_UPACK: // 升级的应答
|
||||||
|
|
||||||
|
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||||
|
gMqttDrv.tx_size = JsonAckDownload ((uint8_t *) gMqttDrv.txbuff,DownUpdate);
|
||||||
|
gMqttDrv.tx_index = mail.index;
|
||||||
|
#else
|
||||||
|
// 心跳数据
|
||||||
|
tx_size = PacketAnsAck (data);
|
||||||
|
gMqttDrv.tx_size = PacketHeader (0xE0, data, tx_size, gMqttDrv.txbuff);
|
||||||
|
gMqttDrv.tx_index = mail.index;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case MAIL_COMM_SLACK: // 升级的应答
|
||||||
|
|
||||||
|
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||||
|
gMqttDrv.tx_size = JsonAckDownload ((uint8_t *) gMqttDrv.txbuff,DownRun);
|
||||||
|
gMqttDrv.tx_index = mail.index;
|
||||||
|
#else
|
||||||
|
// 心跳数据
|
||||||
|
tx_size = PacketAnsAck (data);
|
||||||
|
gMqttDrv.tx_size = PacketHeader (0xE0, data, tx_size, gMqttDrv.txbuff);
|
||||||
|
gMqttDrv.tx_index = mail.index;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case MAIL_COMM_WRACK: // 升级的应答
|
||||||
|
|
||||||
|
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||||
|
gMqttDrv.tx_size = JsonAckDownload ((uint8_t *) gMqttDrv.txbuff,DownConfig);
|
||||||
|
gMqttDrv.tx_index = mail.index;
|
||||||
|
#else
|
||||||
|
// 心跳数据
|
||||||
|
tx_size = PacketAnsAck (data);
|
||||||
|
gMqttDrv.tx_size = PacketHeader (0xE0, data, tx_size, gMqttDrv.txbuff);
|
||||||
|
gMqttDrv.tx_index = mail.index;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case MAIL_COMM_FACACK: // 升级的应答
|
||||||
|
|
||||||
|
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||||
|
gMqttDrv.tx_size = JsonAckDownload ((uint8_t *) gMqttDrv.txbuff,DownFact);
|
||||||
|
gMqttDrv.tx_index = mail.index;
|
||||||
|
#else
|
||||||
|
// 心跳数据
|
||||||
|
tx_size = PacketAnsAck (data);
|
||||||
|
gMqttDrv.tx_size = PacketHeader (0xE0, data, tx_size, gMqttDrv.txbuff);
|
||||||
|
gMqttDrv.tx_index = mail.index;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -242,17 +287,12 @@ INIT:
|
|||||||
{
|
{
|
||||||
|
|
||||||
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||||
|
// 这里-1的作用是将通道0 作为升级通道
|
||||||
JsonUnPacket(gMqttDrv.rx_index - 1,gMqttDrv.rxbuff); // 第n个通道过来的数据
|
JsonUnPacket(gMqttDrv.rx_index - 1,gMqttDrv.rxbuff); // 第n个通道过来的数据
|
||||||
// 解析数据
|
// 解析数据
|
||||||
#else
|
#else
|
||||||
|
|
||||||
rxdata_decode_size = hexstr_to_hexbyte (gMqttDrv.rxbuff, rxdata_decode, gMqttDrv.rx_size);
|
rxdata_decode_size = hexstr_to_hexbyte (gMqttDrv.rxbuff, rxdata_decode, gMqttDrv.rx_size);
|
||||||
rt_kprintf ("<<<<<<<<<<<<rx_size:%d\r\n", rxdata_decode_size);
|
elog_hexdump("recv",16,rxdata_decode,rxdata_decode_size);
|
||||||
for (int i = 0; i < rxdata_decode_size; i++)
|
|
||||||
{
|
|
||||||
rt_kprintf ("%02X ", rxdata_decode[i]);
|
|
||||||
}
|
|
||||||
rt_kprintf ("\r\n");
|
|
||||||
switch ( (int) rxdata_decode[10])
|
switch ( (int) rxdata_decode[10])
|
||||||
{
|
{
|
||||||
case 0x4E: // 控制闸门操作
|
case 0x4E: // 控制闸门操作
|
||||||
@@ -260,14 +300,14 @@ INIT:
|
|||||||
// 远程提闸
|
// 远程提闸
|
||||||
datak = rxdata_decode[18];
|
datak = rxdata_decode[18];
|
||||||
datak = (datak << 8) + rxdata_decode[19];
|
datak = (datak << 8) + rxdata_decode[19];
|
||||||
rt_kprintf ("open:%u mm/10\r\n", datak);
|
log_i ("chann: %d,open:%u mm\r\n",gMqttDrv.rx_index, datak/10);
|
||||||
|
|
||||||
//SluiceData[gMqttDrv.rx_index].opt = 1; // 执行操作闸门
|
//SluiceData[gMqttDrv.rx_index].opt = 1; // 执行操作闸门
|
||||||
SluiceData[gMqttDrv.rx_index - 1].sopen = datak / 10;
|
SluiceData[0].sopen = datak / 10;
|
||||||
mail.Type = MAIL_SLUICE_OPT;
|
mail.Type = MAIL_SLUICE_OPT;
|
||||||
mail.index = gMqttDrv.rx_index - 1;
|
mail.index = gMqttDrv.rx_index-1; // 获取是从哪个通道来的数据
|
||||||
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||||
|
log_i ("index:%u\r\n", mail.index);
|
||||||
// 回复应答
|
// 回复应答
|
||||||
mail.Type = MAIL_COMM_SLACK;
|
mail.Type = MAIL_COMM_SLACK;
|
||||||
mail.index = gMqttDrv.rx_index;
|
mail.index = gMqttDrv.rx_index;
|
||||||
@@ -313,6 +353,7 @@ INIT:
|
|||||||
// 网络连接丢失
|
// 网络连接丢失
|
||||||
rt_thread_mdelay (10);
|
rt_thread_mdelay (10);
|
||||||
}
|
}
|
||||||
|
//NETWORKEXIT:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-6
@@ -19,6 +19,10 @@ static char thread_stack[4096];
|
|||||||
static struct rt_thread probus_thread;
|
static struct rt_thread probus_thread;
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(LOG_TAG)
|
||||||
|
#define LOG_TAG "pbus"
|
||||||
|
#endif
|
||||||
|
#include <elog.h>
|
||||||
|
|
||||||
|
|
||||||
//uint16_t REG_DATA[REG_MAX] = {0x00};
|
//uint16_t REG_DATA[REG_MAX] = {0x00};
|
||||||
@@ -85,7 +89,7 @@ static void thread_entry (void * argument)
|
|||||||
int k = 0;
|
int k = 0;
|
||||||
uint8_t txbuff[128] = {0};
|
uint8_t txbuff[128] = {0};
|
||||||
int tx_size = 0;
|
int tx_size = 0;
|
||||||
rt_kprintf ("%s was start!\r\n", __FILE__);
|
log_i ("probus was start!");
|
||||||
|
|
||||||
g_ETH2Drv.rxdone = eth2_data_rxdone;
|
g_ETH2Drv.rxdone = eth2_data_rxdone;
|
||||||
g_ETH2Drv.BaudRate = 115200;
|
g_ETH2Drv.BaudRate = 115200;
|
||||||
@@ -103,15 +107,15 @@ static void thread_entry (void * argument)
|
|||||||
//reg_data.bload = SluiceData[0].rload;
|
//reg_data.bload = SluiceData[0].rload;
|
||||||
if (RT_EOK == rt_event_recv (gUartEvents, EVENT_UART_ETH2_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
|
if (RT_EOK == rt_event_recv (gUartEvents, EVENT_UART_ETH2_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
|
||||||
{
|
{
|
||||||
for (int i = 0; i < g_ETH2Drv.rx_size; i++)
|
// for (int i = 0; i < g_ETH2Drv.rx_size; i++)
|
||||||
{
|
// {
|
||||||
rt_kprintf ("%02x", g_ETH2Drv.rx_buffer[i]);
|
// rt_kprintf ("%02x", g_ETH2Drv.rx_buffer[i]);
|
||||||
}
|
// }
|
||||||
if (g_ETH2Drv.rx_size > 4)
|
if (g_ETH2Drv.rx_size > 4)
|
||||||
{
|
{
|
||||||
k = ModbusSlaveHandle (&modbus_slave, (uint8_t *) g_ETH2Drv.rx_buffer, g_ETH2Drv.rx_size);
|
k = ModbusSlaveHandle (&modbus_slave, (uint8_t *) g_ETH2Drv.rx_buffer, g_ETH2Drv.rx_size);
|
||||||
//k = 2;
|
//k = 2;
|
||||||
rt_kprintf ("k:%d\r\n", k);
|
//rt_kprintf ("k:%d\r\n", k);
|
||||||
if (k == 0)
|
if (k == 0)
|
||||||
{
|
{
|
||||||
switch (modbus_slave.func)
|
switch (modbus_slave.func)
|
||||||
|
|||||||
+120
-120
@@ -31,81 +31,81 @@ ADC_HandleTypeDef hadc1;
|
|||||||
DMA_HandleTypeDef hdma_adc1;
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
/* ADC1 init function */
|
/* ADC1 init function */
|
||||||
void MX_ADC1_Init (void)
|
void MX_ADC1_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN ADC1_Init 0 */
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END ADC1_Init 0 */
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
ADC_ChannelConfTypeDef sConfig = {0};
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
/* USER CODE BEGIN ADC1_Init 1 */
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END ADC1_Init 1 */
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
/** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
|
/** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
|
||||||
*/
|
*/
|
||||||
hadc1.Instance = ADC1;
|
hadc1.Instance = ADC1;
|
||||||
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
|
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
|
||||||
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
|
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
|
||||||
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
||||||
hadc1.Init.LowPowerAutoWait = DISABLE;
|
hadc1.Init.LowPowerAutoWait = DISABLE;
|
||||||
hadc1.Init.LowPowerAutoPowerOff = DISABLE;
|
hadc1.Init.LowPowerAutoPowerOff = DISABLE;
|
||||||
hadc1.Init.ContinuousConvMode = ENABLE;
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
hadc1.Init.NbrOfConversion = 4;
|
hadc1.Init.NbrOfConversion = 4;
|
||||||
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
|
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
|
||||||
hadc1.Init.DMAContinuousRequests = ENABLE;
|
hadc1.Init.DMAContinuousRequests = ENABLE;
|
||||||
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
|
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
|
||||||
hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_160CYCLES_5;
|
hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_160CYCLES_5;
|
||||||
hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_160CYCLES_5;
|
hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_160CYCLES_5;
|
||||||
hadc1.Init.OversamplingMode = DISABLE;
|
hadc1.Init.OversamplingMode = DISABLE;
|
||||||
hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
|
hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
|
||||||
if (HAL_ADC_Init (&hadc1) != HAL_OK)
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Configure Regular Channel
|
/** Configure Regular Channel
|
||||||
*/
|
*/
|
||||||
sConfig.Channel = ADC_CHANNEL_0;
|
sConfig.Channel = ADC_CHANNEL_0;
|
||||||
sConfig.Rank = ADC_REGULAR_RANK_1;
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
|
sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
|
||||||
if (HAL_ADC_ConfigChannel (&hadc1, &sConfig) != HAL_OK)
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Configure Regular Channel
|
/** Configure Regular Channel
|
||||||
*/
|
*/
|
||||||
sConfig.Channel = ADC_CHANNEL_1;
|
sConfig.Channel = ADC_CHANNEL_1;
|
||||||
sConfig.Rank = ADC_REGULAR_RANK_2;
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
if (HAL_ADC_ConfigChannel (&hadc1, &sConfig) != HAL_OK)
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Configure Regular Channel
|
/** Configure Regular Channel
|
||||||
*/
|
*/
|
||||||
sConfig.Channel = ADC_CHANNEL_7;
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
sConfig.Rank = ADC_REGULAR_RANK_3;
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
if (HAL_ADC_ConfigChannel (&hadc1, &sConfig) != HAL_OK)
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Configure Regular Channel
|
/** Configure Regular Channel
|
||||||
*/
|
*/
|
||||||
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
|
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
|
||||||
sConfig.Rank = ADC_REGULAR_RANK_4;
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
if (HAL_ADC_ConfigChannel (&hadc1, &sConfig) != HAL_OK)
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN ADC1_Init 2 */
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
//HAL_ADCEx_Calibration_Start
|
//HAL_ADCEx_Calibration_Start
|
||||||
if (HAL_ADCEx_Calibration_Start (&hadc1) != HAL_OK)
|
if (HAL_ADCEx_Calibration_Start (&hadc1) != HAL_OK)
|
||||||
@@ -123,81 +123,81 @@ void MX_ADC1_Init (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* USER CODE END ADC1_Init 2 */
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_ADC_MspInit (ADC_HandleTypeDef* adcHandle)
|
void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
if (adcHandle->Instance == ADC1)
|
if(adcHandle->Instance==ADC1)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN ADC1_MspInit 0 */
|
/* USER CODE BEGIN ADC1_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END ADC1_MspInit 0 */
|
/* USER CODE END ADC1_MspInit 0 */
|
||||||
/* ADC1 clock enable */
|
/* ADC1 clock enable */
|
||||||
__HAL_RCC_ADC_CLK_ENABLE();
|
__HAL_RCC_ADC_CLK_ENABLE();
|
||||||
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
/**ADC1 GPIO Configuration
|
/**ADC1 GPIO Configuration
|
||||||
PA0 ------> ADC1_IN0
|
PA0 ------> ADC1_IN0
|
||||||
PA1 ------> ADC1_IN1
|
PA1 ------> ADC1_IN1
|
||||||
PA7 ------> ADC1_IN7
|
PA7 ------> ADC1_IN7
|
||||||
*/
|
*/
|
||||||
GPIO_InitStruct.Pin = ADC1_Pin | ADC2_Pin | ADCPW_Pin;
|
GPIO_InitStruct.Pin = ADC1_Pin|ADC2_Pin|ADCPW_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
HAL_GPIO_Init (GPIOA, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* ADC1 DMA Init */
|
/* ADC1 DMA Init */
|
||||||
/* ADC1 Init */
|
/* ADC1 Init */
|
||||||
hdma_adc1.Instance = DMA1_Channel1;
|
hdma_adc1.Instance = DMA1_Channel1;
|
||||||
hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
|
hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
|
||||||
hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||||
hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
|
hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||||
hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
|
hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
|
||||||
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
|
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
|
||||||
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
||||||
hdma_adc1.Init.Mode = DMA_CIRCULAR;
|
hdma_adc1.Init.Mode = DMA_CIRCULAR;
|
||||||
hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
|
hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
|
||||||
if (HAL_DMA_Init (&hdma_adc1) != HAL_OK)
|
if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
__HAL_LINKDMA (adcHandle, DMA_Handle, hdma_adc1);
|
__HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
|
||||||
|
|
||||||
/* USER CODE BEGIN ADC1_MspInit 1 */
|
/* USER CODE BEGIN ADC1_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END ADC1_MspInit 1 */
|
/* USER CODE END ADC1_MspInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_ADC_MspDeInit (ADC_HandleTypeDef* adcHandle)
|
void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (adcHandle->Instance == ADC1)
|
if(adcHandle->Instance==ADC1)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN ADC1_MspDeInit 0 */
|
/* USER CODE BEGIN ADC1_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END ADC1_MspDeInit 0 */
|
/* USER CODE END ADC1_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_ADC_CLK_DISABLE();
|
__HAL_RCC_ADC_CLK_DISABLE();
|
||||||
|
|
||||||
/**ADC1 GPIO Configuration
|
/**ADC1 GPIO Configuration
|
||||||
PA0 ------> ADC1_IN0
|
PA0 ------> ADC1_IN0
|
||||||
PA1 ------> ADC1_IN1
|
PA1 ------> ADC1_IN1
|
||||||
PA7 ------> ADC1_IN7
|
PA7 ------> ADC1_IN7
|
||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit (GPIOA, ADC1_Pin | ADC2_Pin | ADCPW_Pin);
|
HAL_GPIO_DeInit(GPIOA, ADC1_Pin|ADC2_Pin|ADCPW_Pin);
|
||||||
|
|
||||||
/* ADC1 DMA DeInit */
|
/* ADC1 DMA DeInit */
|
||||||
HAL_DMA_DeInit (adcHandle->DMA_Handle);
|
HAL_DMA_DeInit(adcHandle->DMA_Handle);
|
||||||
/* USER CODE BEGIN ADC1_MspDeInit 1 */
|
/* USER CODE BEGIN ADC1_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END ADC1_MspDeInit 1 */
|
/* USER CODE END ADC1_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|||||||
+40
-40
@@ -27,64 +27,64 @@
|
|||||||
CRC_HandleTypeDef hcrc;
|
CRC_HandleTypeDef hcrc;
|
||||||
|
|
||||||
/* CRC init function */
|
/* CRC init function */
|
||||||
void MX_CRC_Init (void)
|
void MX_CRC_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN CRC_Init 0 */
|
/* USER CODE BEGIN CRC_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END CRC_Init 0 */
|
/* USER CODE END CRC_Init 0 */
|
||||||
|
|
||||||
/* USER CODE BEGIN CRC_Init 1 */
|
/* USER CODE BEGIN CRC_Init 1 */
|
||||||
/* USER CODE END CRC_Init 1 */
|
/* USER CODE END CRC_Init 1 */
|
||||||
hcrc.Instance = CRC;
|
hcrc.Instance = CRC;
|
||||||
hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
|
hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
|
||||||
hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_DISABLE;
|
hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_DISABLE;
|
||||||
hcrc.Init.GeneratingPolynomial = 0x8005;
|
hcrc.Init.GeneratingPolynomial = 0x8005;
|
||||||
hcrc.Init.CRCLength = CRC_POLYLENGTH_16B;
|
hcrc.Init.CRCLength = CRC_POLYLENGTH_16B;
|
||||||
hcrc.Init.InitValue = 0xFFFF;
|
hcrc.Init.InitValue = 0xFFFF;
|
||||||
hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_BYTE;
|
hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_BYTE;
|
||||||
hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_ENABLE;
|
hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_ENABLE;
|
||||||
hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
|
hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
|
||||||
if (HAL_CRC_Init (&hcrc) != HAL_OK)
|
if (HAL_CRC_Init(&hcrc) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN CRC_Init 2 */
|
/* USER CODE BEGIN CRC_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END CRC_Init 2 */
|
/* USER CODE END CRC_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_CRC_MspInit (CRC_HandleTypeDef* crcHandle)
|
void HAL_CRC_MspInit(CRC_HandleTypeDef* crcHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (crcHandle->Instance == CRC)
|
if(crcHandle->Instance==CRC)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN CRC_MspInit 0 */
|
/* USER CODE BEGIN CRC_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END CRC_MspInit 0 */
|
/* USER CODE END CRC_MspInit 0 */
|
||||||
/* CRC clock enable */
|
/* CRC clock enable */
|
||||||
__HAL_RCC_CRC_CLK_ENABLE();
|
__HAL_RCC_CRC_CLK_ENABLE();
|
||||||
/* USER CODE BEGIN CRC_MspInit 1 */
|
/* USER CODE BEGIN CRC_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END CRC_MspInit 1 */
|
/* USER CODE END CRC_MspInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_CRC_MspDeInit (CRC_HandleTypeDef* crcHandle)
|
void HAL_CRC_MspDeInit(CRC_HandleTypeDef* crcHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (crcHandle->Instance == CRC)
|
if(crcHandle->Instance==CRC)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN CRC_MspDeInit 0 */
|
/* USER CODE BEGIN CRC_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END CRC_MspDeInit 0 */
|
/* USER CODE END CRC_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_CRC_CLK_DISABLE();
|
__HAL_RCC_CRC_CLK_DISABLE();
|
||||||
/* USER CODE BEGIN CRC_MspDeInit 1 */
|
/* USER CODE BEGIN CRC_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END CRC_MspDeInit 1 */
|
/* USER CODE END CRC_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|||||||
+13
-13
@@ -36,22 +36,22 @@
|
|||||||
/**
|
/**
|
||||||
* Enable DMA controller clock
|
* Enable DMA controller clock
|
||||||
*/
|
*/
|
||||||
void MX_DMA_Init (void)
|
void MX_DMA_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* DMA controller clock enable */
|
/* DMA controller clock enable */
|
||||||
__HAL_RCC_DMA1_CLK_ENABLE();
|
__HAL_RCC_DMA1_CLK_ENABLE();
|
||||||
|
|
||||||
/* DMA interrupt init */
|
/* DMA interrupt init */
|
||||||
/* DMA1_Channel1_IRQn interrupt configuration */
|
/* DMA1_Channel1_IRQn interrupt configuration */
|
||||||
HAL_NVIC_SetPriority (DMA1_Channel1_IRQn, 0, 0);
|
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ (DMA1_Channel1_IRQn);
|
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
|
||||||
/* DMA1_Channel2_3_IRQn interrupt configuration */
|
/* DMA1_Channel2_3_IRQn interrupt configuration */
|
||||||
HAL_NVIC_SetPriority (DMA1_Channel2_3_IRQn, 0, 0);
|
HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ (DMA1_Channel2_3_IRQn);
|
HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
|
||||||
/* DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn interrupt configuration */
|
/* DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn interrupt configuration */
|
||||||
HAL_NVIC_SetPriority (DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn, 0, 0);
|
HAL_NVIC_SetPriority(DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ (DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn);
|
HAL_NVIC_EnableIRQ(DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+75
-90
@@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
#include <rtthread.h>
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 0 */
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
@@ -41,112 +40,98 @@
|
|||||||
* EXTI
|
* EXTI
|
||||||
PA5 ------> COMP_DAC12_group
|
PA5 ------> COMP_DAC12_group
|
||||||
*/
|
*/
|
||||||
void MX_GPIO_Init (void)
|
void MX_GPIO_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
|
||||||
/* GPIO Ports Clock Enable */
|
/* GPIO Ports Clock Enable */
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOF_CLK_ENABLE();
|
__HAL_RCC_GPIOF_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin (ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin (GPIOA, ETH_PW_Pin | GSM_PW_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(GPIOA, ETH_PW_Pin|GSM_PW_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin (GPIOB, U485_RT_Pin | LORA_TX_Pin | LORA_RX_Pin | SPI2_NSS_Pin
|
HAL_GPIO_WritePin(GPIOB, U485_RT_Pin|LORA_TX_Pin|LORA_RX_Pin|SPI2_NSS_Pin
|
||||||
| LOCK_Pin, GPIO_PIN_RESET);
|
|LOCK_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin (GPIOE, LORA_M1_Pin | RELAY1_Pin | RELAY2_Pin | S4851_RT_Pin
|
HAL_GPIO_WritePin(GPIOE, LORA_M1_Pin|RELAY1_Pin|RELAY2_Pin|S4851_RT_Pin
|
||||||
| S4852_RT_Pin, GPIO_PIN_RESET);
|
|S4852_RT_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin (GSM_RST_GPIO_Port, GSM_RST_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(GSM_RST_GPIO_Port, GSM_RST_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pin : PtPin */
|
/*Configure GPIO pin : PtPin */
|
||||||
GPIO_InitStruct.Pin = ETH_RST_Pin;
|
GPIO_InitStruct.Pin = ETH_RST_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
HAL_GPIO_Init (ETH_RST_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(ETH_RST_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pin : PtPin */
|
/*Configure GPIO pin : PtPin */
|
||||||
GPIO_InitStruct.Pin = ETH_STA_Pin;
|
GPIO_InitStruct.Pin = ETH_STA_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
HAL_GPIO_Init (ETH_STA_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(ETH_STA_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pins : PAPin PAPin */
|
/*Configure GPIO pins : PAPin PAPin */
|
||||||
GPIO_InitStruct.Pin = ETH_PW_Pin | GSM_PW_Pin;
|
GPIO_InitStruct.Pin = ETH_PW_Pin|GSM_PW_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
HAL_GPIO_Init (GPIOA, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pin : PtPin */
|
/*Configure GPIO pin : PtPin */
|
||||||
GPIO_InitStruct.Pin = DAC2_Pin;
|
GPIO_InitStruct.Pin = DAC2_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
HAL_GPIO_Init (DAC2_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(DAC2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pins : PBPin PBPin PBPin PBPin
|
/*Configure GPIO pins : PBPin PBPin PBPin PBPin
|
||||||
PBPin */
|
PBPin */
|
||||||
GPIO_InitStruct.Pin = U485_RT_Pin | LORA_TX_Pin | LORA_RX_Pin | SPI2_NSS_Pin
|
GPIO_InitStruct.Pin = U485_RT_Pin|LORA_TX_Pin|LORA_RX_Pin|SPI2_NSS_Pin
|
||||||
| LOCK_Pin;
|
|LOCK_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
HAL_GPIO_Init (GPIOB, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pins : PEPin PEPin PEPin PEPin
|
/*Configure GPIO pins : PEPin PEPin PEPin PEPin
|
||||||
PEPin */
|
PEPin */
|
||||||
GPIO_InitStruct.Pin = LORA_M1_Pin | RELAY1_Pin | RELAY2_Pin | S4851_RT_Pin
|
GPIO_InitStruct.Pin = LORA_M1_Pin|RELAY1_Pin|RELAY2_Pin|S4851_RT_Pin
|
||||||
| S4852_RT_Pin;
|
|S4852_RT_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
HAL_GPIO_Init (GPIOE, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pin : PtPin */
|
/*Configure GPIO pin : PtPin */
|
||||||
GPIO_InitStruct.Pin = LORA_DI0_Pin;
|
GPIO_InitStruct.Pin = LORA_DI0_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
HAL_GPIO_Init (LORA_DI0_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(LORA_DI0_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pin : PtPin */
|
/*Configure GPIO pin : PtPin */
|
||||||
GPIO_InitStruct.Pin = GSM_RST_Pin;
|
GPIO_InitStruct.Pin = GSM_RST_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
HAL_GPIO_Init (GSM_RST_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(GSM_RST_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pins : PDPin PDPin PDPin PDPin */
|
|
||||||
GPIO_InitStruct.Pin = DI3_Pin | DI4_Pin | DI5_Pin | DI6_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
HAL_GPIO_Init (GPIOD, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
// HAL_GPIO_WritePin (S4851_RT_GPIO_Port, S4851_RT_Pin, GPIO_PIN_SET);
|
|
||||||
|
|
||||||
//HAL_GPIO_WritePin(GPIOB, LOCK_Pin, GPIO_PIN_SET);
|
|
||||||
|
|
||||||
// HAL_GPIO_WritePin(ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_SET);
|
|
||||||
// rt_kprintf("+++++++++++++++++++++\r\n");
|
|
||||||
//// /*Configure GPIO pin Output Level */
|
|
||||||
//HAL_GPIO_WritePin(GPIOA, ETH_PW_Pin|GSM_PW_Pin, GPIO_PIN_SET);
|
|
||||||
HAL_GPIO_WritePin (GPIOA, ETH_PW_Pin | GSM_PW_Pin, GPIO_PIN_RESET);
|
|
||||||
|
|
||||||
//
|
|
||||||
/*Configure GPIO pin Output Level */
|
|
||||||
|
|
||||||
|
/*Configure GPIO pins : PDPin PDPin PDPin PDPin */
|
||||||
|
GPIO_InitStruct.Pin = DI3_Pin|DI4_Pin|DI5_Pin|DI6_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+15
-15
@@ -27,27 +27,27 @@
|
|||||||
IWDG_HandleTypeDef hiwdg;
|
IWDG_HandleTypeDef hiwdg;
|
||||||
|
|
||||||
/* IWDG init function */
|
/* IWDG init function */
|
||||||
void MX_IWDG_Init (void)
|
void MX_IWDG_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN IWDG_Init 0 */
|
/* USER CODE BEGIN IWDG_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END IWDG_Init 0 */
|
/* USER CODE END IWDG_Init 0 */
|
||||||
|
|
||||||
/* USER CODE BEGIN IWDG_Init 1 */
|
/* USER CODE BEGIN IWDG_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END IWDG_Init 1 */
|
/* USER CODE END IWDG_Init 1 */
|
||||||
hiwdg.Instance = IWDG;
|
hiwdg.Instance = IWDG;
|
||||||
hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
|
hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
|
||||||
hiwdg.Init.Window = 4095;
|
hiwdg.Init.Window = 4095;
|
||||||
hiwdg.Init.Reload = 4095;
|
hiwdg.Init.Reload = 4095;
|
||||||
if (HAL_IWDG_Init (&hiwdg) != HAL_OK)
|
if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN IWDG_Init 2 */
|
/* USER CODE BEGIN IWDG_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END IWDG_Init 2 */
|
/* USER CODE END IWDG_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+91
-92
@@ -55,7 +55,7 @@
|
|||||||
/* USER CODE END PV */
|
/* USER CODE END PV */
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
void SystemClock_Config (void);
|
void SystemClock_Config(void);
|
||||||
/* USER CODE BEGIN PFP */
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
/* USER CODE END PFP */
|
/* USER CODE END PFP */
|
||||||
@@ -69,109 +69,109 @@ void SystemClock_Config (void);
|
|||||||
* @brief The application entry point.
|
* @brief The application entry point.
|
||||||
* @retval int
|
* @retval int
|
||||||
*/
|
*/
|
||||||
int main (void)
|
int main(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
/* MCU Configuration--------------------------------------------------------*/
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
HAL_Init();
|
HAL_Init();
|
||||||
|
|
||||||
/* USER CODE BEGIN Init */
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
/* USER CODE END Init */
|
/* USER CODE END Init */
|
||||||
|
|
||||||
/* Configure the system clock */
|
/* Configure the system clock */
|
||||||
SystemClock_Config();
|
SystemClock_Config();
|
||||||
|
|
||||||
/* USER CODE BEGIN SysInit */
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
/* USER CODE END SysInit */
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
/* Initialize all configured peripherals */
|
/* Initialize all configured peripherals */
|
||||||
MX_GPIO_Init();
|
MX_GPIO_Init();
|
||||||
MX_DMA_Init();
|
MX_DMA_Init();
|
||||||
MX_ADC1_Init();
|
MX_ADC1_Init();
|
||||||
MX_CRC_Init();
|
MX_CRC_Init();
|
||||||
MX_IWDG_Init();
|
MX_IWDG_Init();
|
||||||
MX_LPUART1_UART_Init();
|
MX_LPUART1_UART_Init();
|
||||||
MX_LPUART2_UART_Init();
|
MX_LPUART2_UART_Init();
|
||||||
MX_USART1_UART_Init();
|
MX_USART1_UART_Init();
|
||||||
MX_USART2_UART_Init();
|
MX_USART2_UART_Init();
|
||||||
MX_USART3_UART_Init();
|
MX_USART3_UART_Init();
|
||||||
MX_USART4_UART_Init();
|
MX_USART4_UART_Init();
|
||||||
MX_USART5_UART_Init();
|
MX_USART5_UART_Init();
|
||||||
MX_USART6_UART_Init();
|
MX_USART6_UART_Init();
|
||||||
MX_RTC_Init();
|
MX_RTC_Init();
|
||||||
MX_TIM1_Init();
|
MX_TIM1_Init();
|
||||||
MX_TIM3_Init();
|
MX_TIM3_Init();
|
||||||
MX_WWDG_Init();
|
MX_WWDG_Init();
|
||||||
MX_TIM6_Init();
|
MX_TIM6_Init();
|
||||||
MX_TIM7_Init();
|
MX_TIM7_Init();
|
||||||
MX_TIM14_Init();
|
MX_TIM14_Init();
|
||||||
MX_SPI2_Init();
|
MX_SPI2_Init();
|
||||||
MX_TIM15_Init();
|
MX_TIM15_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
// ³õʼÍê³É ͨ¹ýÏÖ³É
|
// ³õʼÍê³É ͨ¹ýÏÖ³É
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
/* USER CODE BEGIN WHILE */
|
/* USER CODE BEGIN WHILE */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
/* USER CODE END WHILE */
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
/* USER CODE BEGIN 3 */
|
/* USER CODE BEGIN 3 */
|
||||||
}
|
}
|
||||||
/* USER CODE END 3 */
|
/* USER CODE END 3 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System Clock Configuration
|
* @brief System Clock Configuration
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void SystemClock_Config (void)
|
void SystemClock_Config(void)
|
||||||
{
|
{
|
||||||
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
|
||||||
/** Configure the main internal regulator output voltage
|
/** Configure the main internal regulator output voltage
|
||||||
*/
|
*/
|
||||||
HAL_PWREx_ControlVoltageScaling (PWR_REGULATOR_VOLTAGE_SCALE1);
|
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
|
||||||
|
|
||||||
/** Initializes the RCC Oscillators according to the specified parameters
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
* in the RCC_OscInitTypeDef structure.
|
* in the RCC_OscInitTypeDef structure.
|
||||||
*/
|
*/
|
||||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_HSE;
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
|
||||||
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
|
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
|
||||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1;
|
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1;
|
||||||
RCC_OscInitStruct.PLL.PLLN = 16;
|
RCC_OscInitStruct.PLL.PLLN = 16;
|
||||||
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
||||||
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
|
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
|
||||||
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
|
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
|
||||||
if (HAL_RCC_OscConfig (&RCC_OscInitStruct) != HAL_OK)
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Initializes the CPU, AHB and APB buses clocks
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
*/
|
*/
|
||||||
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
| RCC_CLOCKTYPE_PCLK1;
|
|RCC_CLOCKTYPE_PCLK1;
|
||||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
if (HAL_RCC_ClockConfig (&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 4 */
|
/* USER CODE BEGIN 4 */
|
||||||
@@ -186,33 +186,32 @@ void SystemClock_Config (void)
|
|||||||
* @param htim : TIM handle
|
* @param htim : TIM handle
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim)
|
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN Callback 0 */
|
/* USER CODE BEGIN Callback 0 */
|
||||||
|
|
||||||
/* USER CODE END Callback 0 */
|
/* USER CODE END Callback 0 */
|
||||||
if (htim->Instance == TIM2)
|
if (htim->Instance == TIM2) {
|
||||||
{
|
HAL_IncTick();
|
||||||
HAL_IncTick();
|
}
|
||||||
}
|
/* USER CODE BEGIN Callback 1 */
|
||||||
/* USER CODE BEGIN Callback 1 */
|
|
||||||
|
|
||||||
/* USER CODE END Callback 1 */
|
/* USER CODE END Callback 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function is executed in case of error occurrence.
|
* @brief This function is executed in case of error occurrence.
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void Error_Handler (void)
|
void Error_Handler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN Error_Handler_Debug */
|
/* USER CODE BEGIN Error_Handler_Debug */
|
||||||
/* User can add his own implementation to report the HAL error return state */
|
/* User can add his own implementation to report the HAL error return state */
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
/* USER CODE END Error_Handler_Debug */
|
/* USER CODE END Error_Handler_Debug */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_FULL_ASSERT
|
#ifdef USE_FULL_ASSERT
|
||||||
@@ -223,11 +222,11 @@ void Error_Handler (void)
|
|||||||
* @param line: assert_param error line source number
|
* @param line: assert_param error line source number
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void assert_failed (uint8_t *file, uint32_t line)
|
void assert_failed(uint8_t *file, uint32_t line)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN 6 */
|
/* USER CODE BEGIN 6 */
|
||||||
/* User can add his own implementation to report the file name and line number,
|
/* User can add his own implementation to report the file name and line number,
|
||||||
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
||||||
/* USER CODE END 6 */
|
/* USER CODE END 6 */
|
||||||
}
|
}
|
||||||
#endif /* USE_FULL_ASSERT */
|
#endif /* USE_FULL_ASSERT */
|
||||||
+53
-53
@@ -27,81 +27,81 @@
|
|||||||
RTC_HandleTypeDef hrtc;
|
RTC_HandleTypeDef hrtc;
|
||||||
|
|
||||||
/* RTC init function */
|
/* RTC init function */
|
||||||
void MX_RTC_Init (void)
|
void MX_RTC_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN RTC_Init 0 */
|
/* USER CODE BEGIN RTC_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END RTC_Init 0 */
|
/* USER CODE END RTC_Init 0 */
|
||||||
|
|
||||||
/* USER CODE BEGIN RTC_Init 1 */
|
/* USER CODE BEGIN RTC_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END RTC_Init 1 */
|
/* USER CODE END RTC_Init 1 */
|
||||||
|
|
||||||
/** Initialize RTC Only
|
/** Initialize RTC Only
|
||||||
*/
|
*/
|
||||||
hrtc.Instance = RTC;
|
hrtc.Instance = RTC;
|
||||||
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
|
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
|
||||||
hrtc.Init.AsynchPrediv = 127;
|
hrtc.Init.AsynchPrediv = 127;
|
||||||
hrtc.Init.SynchPrediv = 255;
|
hrtc.Init.SynchPrediv = 255;
|
||||||
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
|
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
|
||||||
hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
|
hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
|
||||||
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
|
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
|
||||||
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
|
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
|
||||||
hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE;
|
hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE;
|
||||||
if (HAL_RTC_Init (&hrtc) != HAL_OK)
|
if (HAL_RTC_Init(&hrtc) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN RTC_Init 2 */
|
/* USER CODE BEGIN RTC_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END RTC_Init 2 */
|
/* USER CODE END RTC_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_RTC_MspInit (RTC_HandleTypeDef* rtcHandle)
|
void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
if (rtcHandle->Instance == RTC)
|
if(rtcHandle->Instance==RTC)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN RTC_MspInit 0 */
|
/* USER CODE BEGIN RTC_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END RTC_MspInit 0 */
|
/* USER CODE END RTC_MspInit 0 */
|
||||||
|
|
||||||
/** Initializes the peripherals clocks
|
/** Initializes the peripherals clocks
|
||||||
*/
|
*/
|
||||||
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
|
||||||
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
|
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
|
||||||
if (HAL_RCCEx_PeriphCLKConfig (&PeriphClkInit) != HAL_OK)
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* RTC clock enable */
|
/* RTC clock enable */
|
||||||
__HAL_RCC_RTC_ENABLE();
|
__HAL_RCC_RTC_ENABLE();
|
||||||
__HAL_RCC_RTCAPB_CLK_ENABLE();
|
__HAL_RCC_RTCAPB_CLK_ENABLE();
|
||||||
/* USER CODE BEGIN RTC_MspInit 1 */
|
/* USER CODE BEGIN RTC_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END RTC_MspInit 1 */
|
/* USER CODE END RTC_MspInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_RTC_MspDeInit (RTC_HandleTypeDef* rtcHandle)
|
void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (rtcHandle->Instance == RTC)
|
if(rtcHandle->Instance==RTC)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN RTC_MspDeInit 0 */
|
/* USER CODE BEGIN RTC_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END RTC_MspDeInit 0 */
|
/* USER CODE END RTC_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_RTC_DISABLE();
|
__HAL_RCC_RTC_DISABLE();
|
||||||
__HAL_RCC_RTCAPB_CLK_DISABLE();
|
__HAL_RCC_RTCAPB_CLK_DISABLE();
|
||||||
/* USER CODE BEGIN RTC_MspDeInit 1 */
|
/* USER CODE BEGIN RTC_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END RTC_MspDeInit 1 */
|
/* USER CODE END RTC_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|||||||
+69
-69
@@ -27,48 +27,48 @@
|
|||||||
SPI_HandleTypeDef hspi2;
|
SPI_HandleTypeDef hspi2;
|
||||||
|
|
||||||
/* SPI2 init function */
|
/* SPI2 init function */
|
||||||
void MX_SPI2_Init (void)
|
void MX_SPI2_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI2_Init 0 */
|
/* USER CODE BEGIN SPI2_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END SPI2_Init 0 */
|
/* USER CODE END SPI2_Init 0 */
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI2_Init 1 */
|
/* USER CODE BEGIN SPI2_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END SPI2_Init 1 */
|
/* USER CODE END SPI2_Init 1 */
|
||||||
hspi2.Instance = SPI2;
|
hspi2.Instance = SPI2;
|
||||||
hspi2.Init.Mode = SPI_MODE_MASTER;
|
hspi2.Init.Mode = SPI_MODE_MASTER;
|
||||||
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
|
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
|
||||||
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
|
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||||
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||||
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||||
hspi2.Init.NSS = SPI_NSS_SOFT;
|
hspi2.Init.NSS = SPI_NSS_SOFT;
|
||||||
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
|
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
|
||||||
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||||
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
|
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||||
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||||
hspi2.Init.CRCPolynomial = 7;
|
hspi2.Init.CRCPolynomial = 7;
|
||||||
hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
|
hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
|
||||||
hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
|
hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
|
||||||
if (HAL_SPI_Init (&hspi2) != HAL_OK)
|
if (HAL_SPI_Init(&hspi2) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN SPI2_Init 2 */
|
/* USER CODE BEGIN SPI2_Init 2 */
|
||||||
__HAL_SPI_ENABLE (&hspi2);
|
__HAL_SPI_ENABLE (&hspi2);
|
||||||
|
|
||||||
/* USER CODE END SPI2_Init 2 */
|
/* USER CODE END SPI2_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_SPI_MspInit (SPI_HandleTypeDef* spiHandle)
|
void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
if (spiHandle->Instance == SPI2)
|
if(spiHandle->Instance==SPI2)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN SPI2_MspInit 0 */
|
/* USER CODE BEGIN SPI2_MspInit 0 */
|
||||||
|
|
||||||
//#define SPI2_NSS_Pin GPIO_PIN_12
|
//#define SPI2_NSS_Pin GPIO_PIN_12
|
||||||
//#define SPI2_NSS_GPIO_Port GPIOB
|
//#define SPI2_NSS_GPIO_Port GPIOB
|
||||||
@@ -78,57 +78,57 @@ void HAL_SPI_MspInit (SPI_HandleTypeDef* spiHandle)
|
|||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
//GPIO_InitStruct.Alternate = GPIO_AF0_SPI2;
|
//GPIO_InitStruct.Alternate = GPIO_AF0_SPI2;
|
||||||
HAL_GPIO_Init (SPI2_NSS_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init (SPI2_NSS_GPIO_Port, &GPIO_InitStruct);
|
||||||
/* USER CODE END SPI2_MspInit 0 */
|
/* USER CODE END SPI2_MspInit 0 */
|
||||||
/* SPI2 clock enable */
|
/* SPI2 clock enable */
|
||||||
__HAL_RCC_SPI2_CLK_ENABLE();
|
__HAL_RCC_SPI2_CLK_ENABLE();
|
||||||
|
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
/**SPI2 GPIO Configuration
|
/**SPI2 GPIO Configuration
|
||||||
PB13 ------> SPI2_SCK
|
PB13 ------> SPI2_SCK
|
||||||
PB14 ------> SPI2_MISO
|
PB14 ------> SPI2_MISO
|
||||||
PB15 ------> SPI2_MOSI
|
PB15 ------> SPI2_MOSI
|
||||||
*/
|
*/
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
|
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF0_SPI2;
|
GPIO_InitStruct.Alternate = GPIO_AF0_SPI2;
|
||||||
HAL_GPIO_Init (GPIOB, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* SPI2 interrupt Init */
|
/* SPI2 interrupt Init */
|
||||||
HAL_NVIC_SetPriority (SPI2_3_IRQn, 0, 0);
|
HAL_NVIC_SetPriority(SPI2_3_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ (SPI2_3_IRQn);
|
HAL_NVIC_EnableIRQ(SPI2_3_IRQn);
|
||||||
/* USER CODE BEGIN SPI2_MspInit 1 */
|
/* USER CODE BEGIN SPI2_MspInit 1 */
|
||||||
|
|
||||||
|
|
||||||
/* USER CODE END SPI2_MspInit 1 */
|
/* USER CODE END SPI2_MspInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_SPI_MspDeInit (SPI_HandleTypeDef* spiHandle)
|
void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (spiHandle->Instance == SPI2)
|
if(spiHandle->Instance==SPI2)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN SPI2_MspDeInit 0 */
|
/* USER CODE BEGIN SPI2_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END SPI2_MspDeInit 0 */
|
/* USER CODE END SPI2_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_SPI2_CLK_DISABLE();
|
__HAL_RCC_SPI2_CLK_DISABLE();
|
||||||
|
|
||||||
/**SPI2 GPIO Configuration
|
/**SPI2 GPIO Configuration
|
||||||
PB13 ------> SPI2_SCK
|
PB13 ------> SPI2_SCK
|
||||||
PB14 ------> SPI2_MISO
|
PB14 ------> SPI2_MISO
|
||||||
PB15 ------> SPI2_MOSI
|
PB15 ------> SPI2_MOSI
|
||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit (GPIOB, GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);
|
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
|
||||||
|
|
||||||
/* SPI2 interrupt Deinit */
|
/* SPI2 interrupt Deinit */
|
||||||
HAL_NVIC_DisableIRQ (SPI2_3_IRQn);
|
HAL_NVIC_DisableIRQ(SPI2_3_IRQn);
|
||||||
/* USER CODE BEGIN SPI2_MspDeInit 1 */
|
/* USER CODE BEGIN SPI2_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END SPI2_MspDeInit 1 */
|
/* USER CODE END SPI2_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|||||||
@@ -60,24 +60,24 @@
|
|||||||
/**
|
/**
|
||||||
* Initializes the Global MSP.
|
* Initializes the Global MSP.
|
||||||
*/
|
*/
|
||||||
void HAL_MspInit (void)
|
void HAL_MspInit(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN MspInit 0 */
|
/* USER CODE BEGIN MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END MspInit 0 */
|
/* USER CODE END MspInit 0 */
|
||||||
|
|
||||||
__HAL_RCC_SYSCFG_CLK_ENABLE();
|
__HAL_RCC_SYSCFG_CLK_ENABLE();
|
||||||
__HAL_RCC_PWR_CLK_ENABLE();
|
__HAL_RCC_PWR_CLK_ENABLE();
|
||||||
|
|
||||||
/* System interrupt init*/
|
/* System interrupt init*/
|
||||||
|
|
||||||
/** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
|
/** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
|
||||||
*/
|
*/
|
||||||
HAL_SYSCFG_StrobeDBattpinsConfig (SYSCFG_CFGR1_UCPD1_STROBE | SYSCFG_CFGR1_UCPD2_STROBE);
|
HAL_SYSCFG_StrobeDBattpinsConfig(SYSCFG_CFGR1_UCPD1_STROBE | SYSCFG_CFGR1_UCPD2_STROBE);
|
||||||
|
|
||||||
/* USER CODE BEGIN MspInit 1 */
|
/* USER CODE BEGIN MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END MspInit 1 */
|
/* USER CODE END MspInit 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|||||||
@@ -38,76 +38,76 @@ TIM_HandleTypeDef htim2;
|
|||||||
* @param TickPriority: Tick interrupt priority.
|
* @param TickPriority: Tick interrupt priority.
|
||||||
* @retval HAL status
|
* @retval HAL status
|
||||||
*/
|
*/
|
||||||
HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority)
|
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
|
||||||
{
|
{
|
||||||
RCC_ClkInitTypeDef clkconfig;
|
RCC_ClkInitTypeDef clkconfig;
|
||||||
uint32_t uwTimclock, uwAPB1Prescaler;
|
uint32_t uwTimclock, uwAPB1Prescaler;
|
||||||
|
|
||||||
uint32_t uwPrescalerValue;
|
uint32_t uwPrescalerValue;
|
||||||
uint32_t pFLatency;
|
uint32_t pFLatency;
|
||||||
HAL_StatusTypeDef status = HAL_OK;
|
HAL_StatusTypeDef status = HAL_OK;
|
||||||
|
|
||||||
/* Enable TIM2 clock */
|
/* Enable TIM2 clock */
|
||||||
__HAL_RCC_TIM2_CLK_ENABLE();
|
__HAL_RCC_TIM2_CLK_ENABLE();
|
||||||
|
|
||||||
/* Get clock configuration */
|
/* Get clock configuration */
|
||||||
HAL_RCC_GetClockConfig (&clkconfig, &pFLatency);
|
HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);
|
||||||
|
|
||||||
/* Get APB1 prescaler */
|
/* Get APB1 prescaler */
|
||||||
uwAPB1Prescaler = clkconfig.APB1CLKDivider;
|
uwAPB1Prescaler = clkconfig.APB1CLKDivider;
|
||||||
/* Compute TIM2 clock */
|
/* Compute TIM2 clock */
|
||||||
if (uwAPB1Prescaler == RCC_HCLK_DIV1)
|
if (uwAPB1Prescaler == RCC_HCLK_DIV1)
|
||||||
{
|
{
|
||||||
uwTimclock = HAL_RCC_GetPCLK1Freq();
|
uwTimclock = HAL_RCC_GetPCLK1Freq();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq();
|
uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compute the prescaler value to have TIM2 counter clock equal to 1MHz */
|
/* Compute the prescaler value to have TIM2 counter clock equal to 1MHz */
|
||||||
uwPrescalerValue = (uint32_t) ( (uwTimclock / 1000000U) - 1U);
|
uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);
|
||||||
|
|
||||||
/* Initialize TIM2 */
|
/* Initialize TIM2 */
|
||||||
htim2.Instance = TIM2;
|
htim2.Instance = TIM2;
|
||||||
|
|
||||||
/* Initialize TIMx peripheral as follow:
|
/* Initialize TIMx peripheral as follow:
|
||||||
+ Period = [(TIM2CLK/1000) - 1]. to have a (1/1000) s time base.
|
+ Period = [(TIM2CLK/1000) - 1]. to have a (1/1000) s time base.
|
||||||
+ Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
|
+ Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
|
||||||
+ ClockDivision = 0
|
+ ClockDivision = 0
|
||||||
+ Counter direction = Up
|
+ Counter direction = Up
|
||||||
*/
|
*/
|
||||||
htim2.Init.Period = (1000000U / 1000U) - 1U;
|
htim2.Init.Period = (1000000U / 1000U) - 1U;
|
||||||
htim2.Init.Prescaler = uwPrescalerValue;
|
htim2.Init.Prescaler = uwPrescalerValue;
|
||||||
htim2.Init.ClockDivision = 0;
|
htim2.Init.ClockDivision = 0;
|
||||||
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
|
||||||
status = HAL_TIM_Base_Init (&htim2);
|
status = HAL_TIM_Base_Init(&htim2);
|
||||||
if (status == HAL_OK)
|
if (status == HAL_OK)
|
||||||
{
|
{
|
||||||
/* Start the TIM time Base generation in interrupt mode */
|
/* Start the TIM time Base generation in interrupt mode */
|
||||||
status = HAL_TIM_Base_Start_IT (&htim2);
|
status = HAL_TIM_Base_Start_IT(&htim2);
|
||||||
if (status == HAL_OK)
|
if (status == HAL_OK)
|
||||||
{
|
{
|
||||||
/* Enable the TIM2 global Interrupt */
|
/* Enable the TIM2 global Interrupt */
|
||||||
HAL_NVIC_EnableIRQ (TIM2_IRQn);
|
HAL_NVIC_EnableIRQ(TIM2_IRQn);
|
||||||
/* Configure the SysTick IRQ priority */
|
/* Configure the SysTick IRQ priority */
|
||||||
if (TickPriority < (1UL << __NVIC_PRIO_BITS))
|
if (TickPriority < (1UL << __NVIC_PRIO_BITS))
|
||||||
{
|
{
|
||||||
/* Configure the TIM IRQ priority */
|
/* Configure the TIM IRQ priority */
|
||||||
HAL_NVIC_SetPriority (TIM2_IRQn, TickPriority, 0U);
|
HAL_NVIC_SetPriority(TIM2_IRQn, TickPriority, 0U);
|
||||||
uwTickPrio = TickPriority;
|
uwTickPrio = TickPriority;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
status = HAL_ERROR;
|
status = HAL_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return function status */
|
/* Return function status */
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -116,10 +116,10 @@ HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority)
|
|||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void HAL_SuspendTick (void)
|
void HAL_SuspendTick(void)
|
||||||
{
|
{
|
||||||
/* Disable TIM2 update Interrupt */
|
/* Disable TIM2 update Interrupt */
|
||||||
__HAL_TIM_DISABLE_IT (&htim2, TIM_IT_UPDATE);
|
__HAL_TIM_DISABLE_IT(&htim2, TIM_IT_UPDATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -128,9 +128,9 @@ void HAL_SuspendTick (void)
|
|||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void HAL_ResumeTick (void)
|
void HAL_ResumeTick(void)
|
||||||
{
|
{
|
||||||
/* Enable TIM2 Update interrupt */
|
/* Enable TIM2 Update interrupt */
|
||||||
__HAL_TIM_ENABLE_IT (&htim2, TIM_IT_UPDATE);
|
__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_UPDATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
+87
-74
@@ -58,7 +58,8 @@
|
|||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
/* External variables --------------------------------------------------------*/
|
||||||
extern DMA_HandleTypeDef hdma_adc1;
|
extern DMA_HandleTypeDef hdma_adc1;
|
||||||
extern DMA_HandleTypeDef hdma_lpuart1_rx;
|
extern DMA_HandleTypeDef hdma_lpuart2_rx;
|
||||||
|
extern DMA_HandleTypeDef hdma_usart4_rx;
|
||||||
extern UART_HandleTypeDef hlpuart1;
|
extern UART_HandleTypeDef hlpuart1;
|
||||||
extern UART_HandleTypeDef hlpuart2;
|
extern UART_HandleTypeDef hlpuart2;
|
||||||
extern UART_HandleTypeDef huart1;
|
extern UART_HandleTypeDef huart1;
|
||||||
@@ -74,8 +75,13 @@ extern TIM_HandleTypeDef htim2;
|
|||||||
|
|
||||||
/* USER CODE BEGIN EV */
|
/* USER CODE BEGIN EV */
|
||||||
extern void MX_UART_IRQHandle (void);
|
extern void MX_UART_IRQHandle (void);
|
||||||
|
extern void MX_UART2_LPUART2_IRQHandle (void);
|
||||||
extern void MX_UART_TickHandle (void);
|
extern void MX_UART_TickHandle (void);
|
||||||
extern void main_Systick (void);
|
extern void main_Systick (void);
|
||||||
|
void USART_ClearOtherIT(UART_HandleTypeDef *huart);
|
||||||
|
void MX_UART2_LPUART2_IDLE_IRQHandle(void);
|
||||||
|
|
||||||
|
void MX_UART_IDLE_IRQHandle(void);
|
||||||
/* USER CODE END EV */
|
/* USER CODE END EV */
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
@@ -84,16 +90,16 @@ extern void main_Systick (void);
|
|||||||
/**
|
/**
|
||||||
* @brief This function handles Non maskable interrupt.
|
* @brief This function handles Non maskable interrupt.
|
||||||
*/
|
*/
|
||||||
void NMI_Handler (void)
|
void NMI_Handler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
|
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
|
||||||
|
|
||||||
/* USER CODE END NonMaskableInt_IRQn 0 */
|
/* USER CODE END NonMaskableInt_IRQn 0 */
|
||||||
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
|
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
/* USER CODE END NonMaskableInt_IRQn 1 */
|
/* USER CODE END NonMaskableInt_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
@@ -106,157 +112,164 @@ void NMI_Handler (void)
|
|||||||
/**
|
/**
|
||||||
* @brief This function handles DMA1 channel 1 interrupt.
|
* @brief This function handles DMA1 channel 1 interrupt.
|
||||||
*/
|
*/
|
||||||
void DMA1_Channel1_IRQHandler (void)
|
void DMA1_Channel1_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
|
/* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel1_IRQn 0 */
|
/* USER CODE END DMA1_Channel1_IRQn 0 */
|
||||||
HAL_DMA_IRQHandler (&hdma_adc1);
|
HAL_DMA_IRQHandler(&hdma_adc1);
|
||||||
/* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
|
/* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel1_IRQn 1 */
|
/* USER CODE END DMA1_Channel1_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles DMA1 channel 2 and channel 3 interrupts.
|
* @brief This function handles DMA1 channel 2 and channel 3 interrupts.
|
||||||
*/
|
*/
|
||||||
void DMA1_Channel2_3_IRQHandler (void)
|
void DMA1_Channel2_3_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN DMA1_Channel2_3_IRQn 0 */
|
/* USER CODE BEGIN DMA1_Channel2_3_IRQn 0 */
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel2_3_IRQn 0 */
|
/* USER CODE END DMA1_Channel2_3_IRQn 0 */
|
||||||
HAL_DMA_IRQHandler (&hdma_lpuart1_rx);
|
HAL_DMA_IRQHandler(&hdma_usart4_rx);
|
||||||
/* USER CODE BEGIN DMA1_Channel2_3_IRQn 1 */
|
HAL_DMA_IRQHandler(&hdma_lpuart2_rx);
|
||||||
|
/* USER CODE BEGIN DMA1_Channel2_3_IRQn 1 */
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel2_3_IRQn 1 */
|
/* USER CODE END DMA1_Channel2_3_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles DMA1 Ch4 to Ch7, DMA2 Ch1 to Ch5 and DMAMUX1 Overrun Interrupts.
|
* @brief This function handles DMA1 Ch4 to Ch7, DMA2 Ch1 to Ch5 and DMAMUX1 Overrun Interrupts.
|
||||||
*/
|
*/
|
||||||
void DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQHandler (void)
|
void DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 0 */
|
/* USER CODE BEGIN DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 0 */
|
||||||
|
|
||||||
/* USER CODE END DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 0 */
|
/* USER CODE END DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 0 */
|
||||||
// Handle DMAMUX
|
// Handle DMAMUX
|
||||||
// Handle DMA1_Channel1
|
// Handle DMA1_Channel1
|
||||||
HAL_DMAEx_MUX_IRQHandler (&hdma_adc1);
|
HAL_DMAEx_MUX_IRQHandler(&hdma_adc1);
|
||||||
/* USER CODE BEGIN DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 1 */
|
/* USER CODE BEGIN DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 1 */
|
||||||
|
|
||||||
/* USER CODE END DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 1 */
|
/* USER CODE END DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles TIM2 global interrupt.
|
* @brief This function handles TIM2 global interrupt.
|
||||||
*/
|
*/
|
||||||
void TIM2_IRQHandler (void)
|
void TIM2_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM2_IRQn 0 */
|
/* USER CODE BEGIN TIM2_IRQn 0 */
|
||||||
MX_UART_TickHandle();
|
MX_UART_TickHandle();
|
||||||
main_Systick();
|
main_Systick();
|
||||||
#ifdef USE_APP_SLUICE
|
#ifdef USE_APP_SLUICE
|
||||||
MX_IWDG_Reload();
|
MX_IWDG_Reload();
|
||||||
//MX_WWDG_Relad();
|
//MX_WWDG_Relad();
|
||||||
#endif
|
#endif
|
||||||
/* USER CODE END TIM2_IRQn 0 */
|
/* USER CODE END TIM2_IRQn 0 */
|
||||||
HAL_TIM_IRQHandler (&htim2);
|
HAL_TIM_IRQHandler(&htim2);
|
||||||
/* USER CODE BEGIN TIM2_IRQn 1 */
|
/* USER CODE BEGIN TIM2_IRQn 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM2_IRQn 1 */
|
/* USER CODE END TIM2_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles TIM7 and LPTIM2 global Interrupt.
|
* @brief This function handles TIM7 and LPTIM2 global Interrupt.
|
||||||
*/
|
*/
|
||||||
void TIM7_LPTIM2_IRQHandler (void)
|
void TIM7_LPTIM2_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM7_LPTIM2_IRQn 0 */
|
/* USER CODE BEGIN TIM7_LPTIM2_IRQn 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM7_LPTIM2_IRQn 0 */
|
/* USER CODE END TIM7_LPTIM2_IRQn 0 */
|
||||||
HAL_TIM_IRQHandler (&htim7);
|
HAL_TIM_IRQHandler(&htim7);
|
||||||
/* USER CODE BEGIN TIM7_LPTIM2_IRQn 1 */
|
/* USER CODE BEGIN TIM7_LPTIM2_IRQn 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM7_LPTIM2_IRQn 1 */
|
/* USER CODE END TIM7_LPTIM2_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles TIM14 global interrupt.
|
* @brief This function handles TIM14 global interrupt.
|
||||||
*/
|
*/
|
||||||
void TIM14_IRQHandler (void)
|
void TIM14_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM14_IRQn 0 */
|
/* USER CODE BEGIN TIM14_IRQn 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM14_IRQn 0 */
|
/* USER CODE END TIM14_IRQn 0 */
|
||||||
HAL_TIM_IRQHandler (&htim14);
|
HAL_TIM_IRQHandler(&htim14);
|
||||||
/* USER CODE BEGIN TIM14_IRQn 1 */
|
/* USER CODE BEGIN TIM14_IRQn 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM14_IRQn 1 */
|
/* USER CODE END TIM14_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles SPI2/I2S2, SPI3/I2S3 Interrupt.
|
* @brief This function handles SPI2/I2S2, SPI3/I2S3 Interrupt.
|
||||||
*/
|
*/
|
||||||
void SPI2_3_IRQHandler (void)
|
void SPI2_3_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN SPI2_3_IRQn 0 */
|
/* USER CODE BEGIN SPI2_3_IRQn 0 */
|
||||||
|
|
||||||
/* USER CODE END SPI2_3_IRQn 0 */
|
/* USER CODE END SPI2_3_IRQn 0 */
|
||||||
HAL_SPI_IRQHandler (&hspi2);
|
HAL_SPI_IRQHandler(&hspi2);
|
||||||
/* USER CODE BEGIN SPI2_3_IRQn 1 */
|
/* USER CODE BEGIN SPI2_3_IRQn 1 */
|
||||||
|
|
||||||
/* USER CODE END SPI2_3_IRQn 1 */
|
/* USER CODE END SPI2_3_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles USART1 global interrupt / USART1 wake-up interrupt through EXTI line 25.
|
* @brief This function handles USART1 global interrupt / USART1 wake-up interrupt through EXTI line 25.
|
||||||
*/
|
*/
|
||||||
void USART1_IRQHandler (void)
|
void USART1_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN USART1_IRQn 0 */
|
/* USER CODE BEGIN USART1_IRQn 0 */
|
||||||
|
|
||||||
/* USER CODE END USART1_IRQn 0 */
|
/* USER CODE END USART1_IRQn 0 */
|
||||||
HAL_UART_IRQHandler (&huart1);
|
HAL_UART_IRQHandler(&huart1);
|
||||||
/* USER CODE BEGIN USART1_IRQn 1 */
|
/* USER CODE BEGIN USART1_IRQn 1 */
|
||||||
|
|
||||||
/* USER CODE END USART1_IRQn 1 */
|
/* USER CODE END USART1_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles USART2 + LPUART2 Interrupt.
|
* @brief This function handles USART2 + LPUART2 Interrupt.
|
||||||
*/
|
*/
|
||||||
void USART2_LPUART2_IRQHandler (void)
|
void USART2_LPUART2_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN USART2_LPUART2_IRQn 0 */
|
/* USER CODE BEGIN USART2_LPUART2_IRQn 0 */
|
||||||
|
|
||||||
|
|
||||||
MX_UART_IRQHandle();
|
MX_UART2_LPUART2_IRQHandle();
|
||||||
/* USER CODE END USART2_LPUART2_IRQn 0 */
|
MX_UART2_LPUART2_IDLE_IRQHandle();
|
||||||
HAL_UART_IRQHandler (&huart2);
|
|
||||||
HAL_UART_IRQHandler (&hlpuart2);
|
|
||||||
/* USER CODE BEGIN USART2_LPUART2_IRQn 1 */
|
|
||||||
|
|
||||||
/* USER CODE END USART2_LPUART2_IRQn 1 */
|
// MX_UART_IDLE_IRQHandle();
|
||||||
|
/* USER CODE END USART2_LPUART2_IRQn 0 */
|
||||||
|
HAL_UART_IRQHandler(&huart2);
|
||||||
|
HAL_UART_IRQHandler(&hlpuart2);
|
||||||
|
/* USER CODE BEGIN USART2_LPUART2_IRQn 1 */
|
||||||
|
|
||||||
|
/* USER CODE END USART2_LPUART2_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles USART3, USART4, USART5, USART6, LPUART1 globlal Interrupts (combined with EXTI 28).
|
* @brief This function handles USART3, USART4, USART5, USART6, LPUART1 globlal Interrupts (combined with EXTI 28).
|
||||||
*/
|
*/
|
||||||
void USART3_4_5_6_LPUART1_IRQHandler (void)
|
void USART3_4_5_6_LPUART1_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN USART3_4_5_6_LPUART1_IRQn 0 */
|
/* USER CODE BEGIN USART3_4_5_6_LPUART1_IRQn 0 */
|
||||||
MX_UART_IRQHandle();
|
MX_UART_IRQHandle();
|
||||||
/* USER CODE END USART3_4_5_6_LPUART1_IRQn 0 */
|
MX_UART_IDLE_IRQHandle();
|
||||||
HAL_UART_IRQHandler (&huart3);
|
/* USER CODE END USART3_4_5_6_LPUART1_IRQn 0 */
|
||||||
HAL_UART_IRQHandler (&huart4);
|
HAL_UART_IRQHandler(&huart3);
|
||||||
HAL_UART_IRQHandler (&huart5);
|
HAL_UART_IRQHandler(&huart4);
|
||||||
HAL_UART_IRQHandler (&huart6);
|
HAL_UART_IRQHandler(&huart5);
|
||||||
HAL_UART_IRQHandler (&hlpuart1);
|
HAL_UART_IRQHandler(&huart6);
|
||||||
/* USER CODE BEGIN USART3_4_5_6_LPUART1_IRQn 1 */
|
HAL_UART_IRQHandler(&hlpuart1);
|
||||||
|
/* USER CODE BEGIN USART3_4_5_6_LPUART1_IRQn 1 */
|
||||||
|
|
||||||
/* USER CODE END USART3_4_5_6_LPUART1_IRQn 1 */
|
/* USER CODE END USART3_4_5_6_LPUART1_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
+410
-412
@@ -32,554 +32,552 @@ TIM_HandleTypeDef htim14;
|
|||||||
TIM_HandleTypeDef htim15;
|
TIM_HandleTypeDef htim15;
|
||||||
|
|
||||||
/* TIM1 init function */
|
/* TIM1 init function */
|
||||||
void MX_TIM1_Init (void)
|
void MX_TIM1_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM1_Init 0 */
|
/* USER CODE BEGIN TIM1_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM1_Init 0 */
|
/* USER CODE END TIM1_Init 0 */
|
||||||
|
|
||||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
TIM_IC_InitTypeDef sConfigIC = {0};
|
TIM_IC_InitTypeDef sConfigIC = {0};
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM1_Init 1 */
|
/* USER CODE BEGIN TIM1_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM1_Init 1 */
|
/* USER CODE END TIM1_Init 1 */
|
||||||
htim1.Instance = TIM1;
|
htim1.Instance = TIM1;
|
||||||
htim1.Init.Prescaler = 0;
|
htim1.Init.Prescaler = 0;
|
||||||
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
htim1.Init.Period = 65535;
|
htim1.Init.Period = 65535;
|
||||||
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
htim1.Init.RepetitionCounter = 0;
|
htim1.Init.RepetitionCounter = 0;
|
||||||
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
if (HAL_TIM_IC_Init (&htim1) != HAL_OK)
|
if (HAL_TIM_IC_Init(&htim1) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
|
sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
|
||||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
if (HAL_TIMEx_MasterConfigSynchronization (&htim1, &sMasterConfig) != HAL_OK)
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
|
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
|
||||||
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
|
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
|
||||||
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
|
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
|
||||||
sConfigIC.ICFilter = 0;
|
sConfigIC.ICFilter = 0;
|
||||||
if (HAL_TIM_IC_ConfigChannel (&htim1, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
|
if (HAL_TIM_IC_ConfigChannel(&htim1, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
if (HAL_TIM_IC_ConfigChannel (&htim1, &sConfigIC, TIM_CHANNEL_2) != HAL_OK)
|
if (HAL_TIM_IC_ConfigChannel(&htim1, &sConfigIC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN TIM1_Init 2 */
|
/* USER CODE BEGIN TIM1_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END TIM1_Init 2 */
|
/* USER CODE END TIM1_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
/* TIM3 init function */
|
/* TIM3 init function */
|
||||||
void MX_TIM3_Init (void)
|
void MX_TIM3_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM3_Init 0 */
|
/* USER CODE BEGIN TIM3_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM3_Init 0 */
|
/* USER CODE END TIM3_Init 0 */
|
||||||
|
|
||||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
TIM_OC_InitTypeDef sConfigOC = {0};
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM3_Init 1 */
|
/* USER CODE BEGIN TIM3_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM3_Init 1 */
|
/* USER CODE END TIM3_Init 1 */
|
||||||
htim3.Instance = TIM3;
|
htim3.Instance = TIM3;
|
||||||
htim3.Init.Prescaler = 0;
|
htim3.Init.Prescaler = 0;
|
||||||
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
|
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
htim3.Init.Period = 640;
|
htim3.Init.Period = 640;
|
||||||
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
if (HAL_TIM_PWM_Init (&htim3) != HAL_OK)
|
if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
if (HAL_TIMEx_MasterConfigSynchronization (&htim3, &sMasterConfig) != HAL_OK)
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
sConfigOC.Pulse = 0;
|
sConfigOC.Pulse = 0;
|
||||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
if (HAL_TIM_PWM_ConfigChannel (&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
if (HAL_TIM_PWM_ConfigChannel (&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
if (HAL_TIM_PWM_ConfigChannel (&htim3, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
if (HAL_TIM_PWM_ConfigChannel (&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN TIM3_Init 2 */
|
/* USER CODE BEGIN TIM3_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END TIM3_Init 2 */
|
|
||||||
HAL_TIM_MspPostInit (&htim3);
|
|
||||||
HAL_TIM_PWM_Start (&htim3, TIM_CHANNEL_1);
|
HAL_TIM_PWM_Start (&htim3, TIM_CHANNEL_1);
|
||||||
HAL_TIM_PWM_Start (&htim3, TIM_CHANNEL_2);
|
HAL_TIM_PWM_Start (&htim3, TIM_CHANNEL_2);
|
||||||
HAL_TIM_PWM_Start (&htim3, TIM_CHANNEL_3);
|
HAL_TIM_PWM_Start (&htim3, TIM_CHANNEL_3);
|
||||||
HAL_TIM_PWM_Start (&htim3, TIM_CHANNEL_4);
|
HAL_TIM_PWM_Start (&htim3, TIM_CHANNEL_4);
|
||||||
|
/* USER CODE END TIM3_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim3);
|
||||||
|
|
||||||
}
|
}
|
||||||
/* TIM6 init function */
|
/* TIM6 init function */
|
||||||
void MX_TIM6_Init (void)
|
void MX_TIM6_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM6_Init 0 */
|
/* USER CODE BEGIN TIM6_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM6_Init 0 */
|
/* USER CODE END TIM6_Init 0 */
|
||||||
|
|
||||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM6_Init 1 */
|
/* USER CODE BEGIN TIM6_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM6_Init 1 */
|
/* USER CODE END TIM6_Init 1 */
|
||||||
htim6.Instance = TIM6;
|
htim6.Instance = TIM6;
|
||||||
htim6.Init.Prescaler = 64;
|
htim6.Init.Prescaler = 64;
|
||||||
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
|
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
htim6.Init.Period = 10000;
|
htim6.Init.Period = 10000;
|
||||||
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
||||||
if (HAL_TIM_Base_Init (&htim6) != HAL_OK)
|
if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
if (HAL_TIMEx_MasterConfigSynchronization (&htim6, &sMasterConfig) != HAL_OK)
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN TIM6_Init 2 */
|
/* USER CODE BEGIN TIM6_Init 2 */
|
||||||
HAL_TIM_Base_Start_IT (&htim6);
|
HAL_TIM_Base_Start_IT (&htim6);
|
||||||
/* USER CODE END TIM6_Init 2 */
|
/* USER CODE END TIM6_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
/* TIM7 init function */
|
/* TIM7 init function */
|
||||||
void MX_TIM7_Init (void)
|
void MX_TIM7_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM7_Init 0 */
|
/* USER CODE BEGIN TIM7_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM7_Init 0 */
|
/* USER CODE END TIM7_Init 0 */
|
||||||
|
|
||||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM7_Init 1 */
|
/* USER CODE BEGIN TIM7_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM7_Init 1 */
|
/* USER CODE END TIM7_Init 1 */
|
||||||
htim7.Instance = TIM7;
|
htim7.Instance = TIM7;
|
||||||
htim7.Init.Prescaler = 640;
|
htim7.Init.Prescaler = 640;
|
||||||
htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
|
htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
htim7.Init.Period = 10000;
|
htim7.Init.Period = 10000;
|
||||||
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
||||||
if (HAL_TIM_Base_Init (&htim7) != HAL_OK)
|
if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
if (HAL_TIMEx_MasterConfigSynchronization (&htim7, &sMasterConfig) != HAL_OK)
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN TIM7_Init 2 */
|
/* USER CODE BEGIN TIM7_Init 2 */
|
||||||
HAL_TIM_Base_Start_IT (&htim7);
|
HAL_TIM_Base_Start_IT (&htim7);
|
||||||
/* USER CODE END TIM7_Init 2 */
|
/* USER CODE END TIM7_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
/* TIM14 init function */
|
/* TIM14 init function */
|
||||||
void MX_TIM14_Init (void)
|
void MX_TIM14_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM14_Init 0 */
|
/* USER CODE BEGIN TIM14_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM14_Init 0 */
|
/* USER CODE END TIM14_Init 0 */
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM14_Init 1 */
|
/* USER CODE BEGIN TIM14_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM14_Init 1 */
|
/* USER CODE END TIM14_Init 1 */
|
||||||
htim14.Instance = TIM14;
|
htim14.Instance = TIM14;
|
||||||
htim14.Init.Prescaler = 6400;
|
htim14.Init.Prescaler = 6400;
|
||||||
htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
|
htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
htim14.Init.Period = 10000;
|
htim14.Init.Period = 10000;
|
||||||
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
||||||
if (HAL_TIM_Base_Init (&htim14) != HAL_OK)
|
if (HAL_TIM_Base_Init(&htim14) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN TIM14_Init 2 */
|
/* USER CODE BEGIN TIM14_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END TIM14_Init 2 */
|
/* USER CODE END TIM14_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
/* TIM15 init function */
|
/* TIM15 init function */
|
||||||
void MX_TIM15_Init (void)
|
void MX_TIM15_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM15_Init 0 */
|
/* USER CODE BEGIN TIM15_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM15_Init 0 */
|
/* USER CODE END TIM15_Init 0 */
|
||||||
|
|
||||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
TIM_OC_InitTypeDef sConfigOC = {0};
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
|
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM15_Init 1 */
|
/* USER CODE BEGIN TIM15_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM15_Init 1 */
|
/* USER CODE END TIM15_Init 1 */
|
||||||
htim15.Instance = TIM15;
|
htim15.Instance = TIM15;
|
||||||
htim15.Init.Prescaler = 0;
|
htim15.Init.Prescaler = 0;
|
||||||
htim15.Init.CounterMode = TIM_COUNTERMODE_UP;
|
htim15.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
htim15.Init.Period = 65535;
|
htim15.Init.Period = 65535;
|
||||||
htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4 ;
|
htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
htim15.Init.RepetitionCounter = 0;
|
htim15.Init.RepetitionCounter = 0;
|
||||||
htim15.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
htim15.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
if (HAL_TIM_PWM_Init (&htim15) != HAL_OK)
|
if (HAL_TIM_PWM_Init(&htim15) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
if (HAL_TIMEx_MasterConfigSynchronization (&htim15, &sMasterConfig) != HAL_OK)
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim15, &sMasterConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
sConfigOC.Pulse = 3000;
|
sConfigOC.Pulse = 0;
|
||||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
||||||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
|
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
|
||||||
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
||||||
if (HAL_TIM_PWM_ConfigChannel (&htim15, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
if (HAL_TIM_PWM_ConfigChannel(&htim15, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
if (HAL_TIM_PWM_ConfigChannel (&htim15, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
if (HAL_TIM_PWM_ConfigChannel(&htim15, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
|
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
|
||||||
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
|
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
|
||||||
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
|
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
|
||||||
sBreakDeadTimeConfig.DeadTime = 0;
|
sBreakDeadTimeConfig.DeadTime = 0;
|
||||||
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
|
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
|
||||||
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
|
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
|
||||||
sBreakDeadTimeConfig.BreakFilter = 0;
|
sBreakDeadTimeConfig.BreakFilter = 0;
|
||||||
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
|
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
|
||||||
if (HAL_TIMEx_ConfigBreakDeadTime (&htim15, &sBreakDeadTimeConfig) != HAL_OK)
|
if (HAL_TIMEx_ConfigBreakDeadTime(&htim15, &sBreakDeadTimeConfig) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN TIM15_Init 2 */
|
/* USER CODE BEGIN TIM15_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END TIM15_Init 2 */
|
/* USER CODE END TIM15_Init 2 */
|
||||||
HAL_TIM_MspPostInit (&htim15);
|
HAL_TIM_MspPostInit(&htim15);
|
||||||
HAL_TIM_PWM_Start (&htim15, TIM_CHANNEL_1);
|
|
||||||
HAL_TIM_PWM_Start (&htim15, TIM_CHANNEL_2);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_IC_MspInit (TIM_HandleTypeDef* tim_icHandle)
|
void HAL_TIM_IC_MspInit(TIM_HandleTypeDef* tim_icHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
if (tim_icHandle->Instance == TIM1)
|
if(tim_icHandle->Instance==TIM1)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM1_MspInit 0 */
|
/* USER CODE BEGIN TIM1_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM1_MspInit 0 */
|
/* USER CODE END TIM1_MspInit 0 */
|
||||||
|
|
||||||
/** Initializes the peripherals clocks
|
/** Initializes the peripherals clocks
|
||||||
*/
|
*/
|
||||||
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_TIM1;
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_TIM1;
|
||||||
PeriphClkInit.Tim1ClockSelection = RCC_TIM1CLKSOURCE_PCLK1;
|
PeriphClkInit.Tim1ClockSelection = RCC_TIM1CLKSOURCE_PCLK1;
|
||||||
if (HAL_RCCEx_PeriphCLKConfig (&PeriphClkInit) != HAL_OK)
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TIM1 clock enable */
|
/* TIM1 clock enable */
|
||||||
__HAL_RCC_TIM1_CLK_ENABLE();
|
__HAL_RCC_TIM1_CLK_ENABLE();
|
||||||
|
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
/**TIM1 GPIO Configuration
|
/**TIM1 GPIO Configuration
|
||||||
PC8 ------> TIM1_CH1
|
PC8 ------> TIM1_CH1
|
||||||
PC9 ------> TIM1_CH2
|
PC9 ------> TIM1_CH2
|
||||||
*/
|
*/
|
||||||
GPIO_InitStruct.Pin = DI1_Pin | DI2_Pin;
|
GPIO_InitStruct.Pin = DI1_Pin|DI2_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;
|
GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;
|
||||||
HAL_GPIO_Init (GPIOC, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM1_MspInit 1 */
|
/* USER CODE BEGIN TIM1_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM1_MspInit 1 */
|
/* USER CODE END TIM1_MspInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_PWM_MspInit (TIM_HandleTypeDef* tim_pwmHandle)
|
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
if (tim_pwmHandle->Instance == TIM3)
|
if(tim_pwmHandle->Instance==TIM3)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM3_MspInit 0 */
|
/* USER CODE BEGIN TIM3_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM3_MspInit 0 */
|
/* USER CODE END TIM3_MspInit 0 */
|
||||||
|
|
||||||
/* TIM3 clock enable */
|
/* TIM3 clock enable */
|
||||||
__HAL_RCC_TIM3_CLK_ENABLE();
|
__HAL_RCC_TIM3_CLK_ENABLE();
|
||||||
/* USER CODE BEGIN TIM3_MspInit 1 */
|
/* USER CODE BEGIN TIM3_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM3_MspInit 1 */
|
/* USER CODE END TIM3_MspInit 1 */
|
||||||
}
|
}
|
||||||
else if (tim_pwmHandle->Instance == TIM15)
|
else if(tim_pwmHandle->Instance==TIM15)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM15_MspInit 0 */
|
/* USER CODE BEGIN TIM15_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM15_MspInit 0 */
|
/* USER CODE END TIM15_MspInit 0 */
|
||||||
|
|
||||||
/** Initializes the peripherals clocks
|
/** Initializes the peripherals clocks
|
||||||
*/
|
*/
|
||||||
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_TIM15;
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_TIM15;
|
||||||
PeriphClkInit.Tim15ClockSelection = RCC_TIM15CLKSOURCE_PCLK1;
|
PeriphClkInit.Tim15ClockSelection = RCC_TIM15CLKSOURCE_PCLK1;
|
||||||
if (HAL_RCCEx_PeriphCLKConfig (&PeriphClkInit) != HAL_OK)
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TIM15 clock enable */
|
/* TIM15 clock enable */
|
||||||
__HAL_RCC_TIM15_CLK_ENABLE();
|
__HAL_RCC_TIM15_CLK_ENABLE();
|
||||||
/* USER CODE BEGIN TIM15_MspInit 1 */
|
/* USER CODE BEGIN TIM15_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM15_MspInit 1 */
|
/* USER CODE END TIM15_MspInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_Base_MspInit (TIM_HandleTypeDef* tim_baseHandle)
|
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (tim_baseHandle->Instance == TIM6)
|
if(tim_baseHandle->Instance==TIM6)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM6_MspInit 0 */
|
/* USER CODE BEGIN TIM6_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM6_MspInit 0 */
|
/* USER CODE END TIM6_MspInit 0 */
|
||||||
|
|
||||||
/* TIM6 clock enable */
|
/* TIM6 clock enable */
|
||||||
__HAL_RCC_TIM6_CLK_ENABLE();
|
__HAL_RCC_TIM6_CLK_ENABLE();
|
||||||
/* USER CODE BEGIN TIM6_MspInit 1 */
|
/* USER CODE BEGIN TIM6_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM6_MspInit 1 */
|
/* USER CODE END TIM6_MspInit 1 */
|
||||||
}
|
}
|
||||||
else if (tim_baseHandle->Instance == TIM7)
|
else if(tim_baseHandle->Instance==TIM7)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM7_MspInit 0 */
|
/* USER CODE BEGIN TIM7_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM7_MspInit 0 */
|
/* USER CODE END TIM7_MspInit 0 */
|
||||||
|
|
||||||
/* TIM7 clock enable */
|
/* TIM7 clock enable */
|
||||||
__HAL_RCC_TIM7_CLK_ENABLE();
|
__HAL_RCC_TIM7_CLK_ENABLE();
|
||||||
|
|
||||||
/* TIM7 interrupt Init */
|
/* TIM7 interrupt Init */
|
||||||
HAL_NVIC_SetPriority (TIM7_LPTIM2_IRQn, 0, 0);
|
HAL_NVIC_SetPriority(TIM7_LPTIM2_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ (TIM7_LPTIM2_IRQn);
|
HAL_NVIC_EnableIRQ(TIM7_LPTIM2_IRQn);
|
||||||
/* USER CODE BEGIN TIM7_MspInit 1 */
|
/* USER CODE BEGIN TIM7_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM7_MspInit 1 */
|
/* USER CODE END TIM7_MspInit 1 */
|
||||||
}
|
}
|
||||||
else if (tim_baseHandle->Instance == TIM14)
|
else if(tim_baseHandle->Instance==TIM14)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM14_MspInit 0 */
|
/* USER CODE BEGIN TIM14_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM14_MspInit 0 */
|
/* USER CODE END TIM14_MspInit 0 */
|
||||||
|
|
||||||
/* TIM14 clock enable */
|
/* TIM14 clock enable */
|
||||||
__HAL_RCC_TIM14_CLK_ENABLE();
|
__HAL_RCC_TIM14_CLK_ENABLE();
|
||||||
|
|
||||||
/* TIM14 interrupt Init */
|
/* TIM14 interrupt Init */
|
||||||
HAL_NVIC_SetPriority (TIM14_IRQn, 0, 0);
|
HAL_NVIC_SetPriority(TIM14_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ (TIM14_IRQn);
|
HAL_NVIC_EnableIRQ(TIM14_IRQn);
|
||||||
/* USER CODE BEGIN TIM14_MspInit 1 */
|
/* USER CODE BEGIN TIM14_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM14_MspInit 1 */
|
/* USER CODE END TIM14_MspInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void HAL_TIM_MspPostInit (TIM_HandleTypeDef* timHandle)
|
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
if (timHandle->Instance == TIM3)
|
if(timHandle->Instance==TIM3)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM3_MspPostInit 0 */
|
/* USER CODE BEGIN TIM3_MspPostInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM3_MspPostInit 0 */
|
/* USER CODE END TIM3_MspPostInit 0 */
|
||||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
/**TIM3 GPIO Configuration
|
/**TIM3 GPIO Configuration
|
||||||
PE4 ------> TIM3_CH2
|
PE4 ------> TIM3_CH2
|
||||||
PE5 ------> TIM3_CH3
|
PE5 ------> TIM3_CH3
|
||||||
PE6 ------> TIM3_CH4
|
PE6 ------> TIM3_CH4
|
||||||
PB4 ------> TIM3_CH1
|
PB4 ------> TIM3_CH1
|
||||||
*/
|
*/
|
||||||
GPIO_InitStruct.Pin = PWM_CH2_Pin | PWM_CH3_Pin | PWM_CH4_Pin;
|
GPIO_InitStruct.Pin = PWM_CH2_Pin|PWM_CH3_Pin|PWM_CH4_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
|
GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
|
||||||
HAL_GPIO_Init (GPIOE, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
|
||||||
|
|
||||||
GPIO_InitStruct.Pin = PWM_CH1_Pin;
|
GPIO_InitStruct.Pin = PWM_CH1_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
|
GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
|
||||||
HAL_GPIO_Init (PWM_CH1_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(PWM_CH1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM3_MspPostInit 1 */
|
/* USER CODE BEGIN TIM3_MspPostInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM3_MspPostInit 1 */
|
/* USER CODE END TIM3_MspPostInit 1 */
|
||||||
}
|
}
|
||||||
else if (timHandle->Instance == TIM15)
|
else if(timHandle->Instance==TIM15)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM15_MspPostInit 0 */
|
/* USER CODE BEGIN TIM15_MspPostInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM15_MspPostInit 0 */
|
/* USER CODE END TIM15_MspPostInit 0 */
|
||||||
|
|
||||||
__HAL_RCC_GPIOF_CLK_ENABLE();
|
__HAL_RCC_GPIOF_CLK_ENABLE();
|
||||||
/**TIM15 GPIO Configuration
|
/**TIM15 GPIO Configuration
|
||||||
PF12 ------> TIM15_CH1
|
PF12 ------> TIM15_CH1
|
||||||
PF13 ------> TIM15_CH2
|
PF13 ------> TIM15_CH2
|
||||||
*/
|
*/
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13;
|
GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF0_TIM15;
|
GPIO_InitStruct.Alternate = GPIO_AF0_TIM15;
|
||||||
HAL_GPIO_Init (GPIOF, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM15_MspPostInit 1 */
|
/* USER CODE BEGIN TIM15_MspPostInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM15_MspPostInit 1 */
|
/* USER CODE END TIM15_MspPostInit 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_IC_MspDeInit (TIM_HandleTypeDef* tim_icHandle)
|
void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef* tim_icHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (tim_icHandle->Instance == TIM1)
|
if(tim_icHandle->Instance==TIM1)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM1_MspDeInit 0 */
|
/* USER CODE BEGIN TIM1_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM1_MspDeInit 0 */
|
/* USER CODE END TIM1_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_TIM1_CLK_DISABLE();
|
__HAL_RCC_TIM1_CLK_DISABLE();
|
||||||
|
|
||||||
/**TIM1 GPIO Configuration
|
/**TIM1 GPIO Configuration
|
||||||
PC8 ------> TIM1_CH1
|
PC8 ------> TIM1_CH1
|
||||||
PC9 ------> TIM1_CH2
|
PC9 ------> TIM1_CH2
|
||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit (GPIOC, DI1_Pin | DI2_Pin);
|
HAL_GPIO_DeInit(GPIOC, DI1_Pin|DI2_Pin);
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM1_MspDeInit 1 */
|
/* USER CODE BEGIN TIM1_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM1_MspDeInit 1 */
|
/* USER CODE END TIM1_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_PWM_MspDeInit (TIM_HandleTypeDef* tim_pwmHandle)
|
void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* tim_pwmHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (tim_pwmHandle->Instance == TIM3)
|
if(tim_pwmHandle->Instance==TIM3)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM3_MspDeInit 0 */
|
/* USER CODE BEGIN TIM3_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM3_MspDeInit 0 */
|
/* USER CODE END TIM3_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_TIM3_CLK_DISABLE();
|
__HAL_RCC_TIM3_CLK_DISABLE();
|
||||||
/* USER CODE BEGIN TIM3_MspDeInit 1 */
|
/* USER CODE BEGIN TIM3_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM3_MspDeInit 1 */
|
/* USER CODE END TIM3_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
else if (tim_pwmHandle->Instance == TIM15)
|
else if(tim_pwmHandle->Instance==TIM15)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM15_MspDeInit 0 */
|
/* USER CODE BEGIN TIM15_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM15_MspDeInit 0 */
|
/* USER CODE END TIM15_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_TIM15_CLK_DISABLE();
|
__HAL_RCC_TIM15_CLK_DISABLE();
|
||||||
/* USER CODE BEGIN TIM15_MspDeInit 1 */
|
/* USER CODE BEGIN TIM15_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM15_MspDeInit 1 */
|
/* USER CODE END TIM15_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_Base_MspDeInit (TIM_HandleTypeDef* tim_baseHandle)
|
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (tim_baseHandle->Instance == TIM6)
|
if(tim_baseHandle->Instance==TIM6)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM6_MspDeInit 0 */
|
/* USER CODE BEGIN TIM6_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM6_MspDeInit 0 */
|
/* USER CODE END TIM6_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_TIM6_CLK_DISABLE();
|
__HAL_RCC_TIM6_CLK_DISABLE();
|
||||||
/* USER CODE BEGIN TIM6_MspDeInit 1 */
|
/* USER CODE BEGIN TIM6_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM6_MspDeInit 1 */
|
/* USER CODE END TIM6_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
else if (tim_baseHandle->Instance == TIM7)
|
else if(tim_baseHandle->Instance==TIM7)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM7_MspDeInit 0 */
|
/* USER CODE BEGIN TIM7_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM7_MspDeInit 0 */
|
/* USER CODE END TIM7_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_TIM7_CLK_DISABLE();
|
__HAL_RCC_TIM7_CLK_DISABLE();
|
||||||
|
|
||||||
/* TIM7 interrupt Deinit */
|
/* TIM7 interrupt Deinit */
|
||||||
HAL_NVIC_DisableIRQ (TIM7_LPTIM2_IRQn);
|
HAL_NVIC_DisableIRQ(TIM7_LPTIM2_IRQn);
|
||||||
/* USER CODE BEGIN TIM7_MspDeInit 1 */
|
/* USER CODE BEGIN TIM7_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM7_MspDeInit 1 */
|
/* USER CODE END TIM7_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
else if (tim_baseHandle->Instance == TIM14)
|
else if(tim_baseHandle->Instance==TIM14)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM14_MspDeInit 0 */
|
/* USER CODE BEGIN TIM14_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM14_MspDeInit 0 */
|
/* USER CODE END TIM14_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_TIM14_CLK_DISABLE();
|
__HAL_RCC_TIM14_CLK_DISABLE();
|
||||||
|
|
||||||
/* TIM14 interrupt Deinit */
|
/* TIM14 interrupt Deinit */
|
||||||
HAL_NVIC_DisableIRQ (TIM14_IRQn);
|
HAL_NVIC_DisableIRQ(TIM14_IRQn);
|
||||||
/* USER CODE BEGIN TIM14_MspDeInit 1 */
|
/* USER CODE BEGIN TIM14_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM14_MspDeInit 1 */
|
/* USER CODE END TIM14_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|||||||
+655
-619
File diff suppressed because it is too large.
Load diff
+26
-26
@@ -27,45 +27,45 @@
|
|||||||
WWDG_HandleTypeDef hwwdg;
|
WWDG_HandleTypeDef hwwdg;
|
||||||
|
|
||||||
/* WWDG init function */
|
/* WWDG init function */
|
||||||
void MX_WWDG_Init (void)
|
void MX_WWDG_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN WWDG_Init 0 */
|
/* USER CODE BEGIN WWDG_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END WWDG_Init 0 */
|
/* USER CODE END WWDG_Init 0 */
|
||||||
|
|
||||||
/* USER CODE BEGIN WWDG_Init 1 */
|
/* USER CODE BEGIN WWDG_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END WWDG_Init 1 */
|
/* USER CODE END WWDG_Init 1 */
|
||||||
hwwdg.Instance = WWDG;
|
hwwdg.Instance = WWDG;
|
||||||
hwwdg.Init.Prescaler = WWDG_PRESCALER_1;
|
hwwdg.Init.Prescaler = WWDG_PRESCALER_1;
|
||||||
hwwdg.Init.Window = 64;
|
hwwdg.Init.Window = 64;
|
||||||
hwwdg.Init.Counter = 64;
|
hwwdg.Init.Counter = 64;
|
||||||
hwwdg.Init.EWIMode = WWDG_EWI_DISABLE;
|
hwwdg.Init.EWIMode = WWDG_EWI_DISABLE;
|
||||||
if (HAL_WWDG_Init (&hwwdg) != HAL_OK)
|
if (HAL_WWDG_Init(&hwwdg) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN WWDG_Init 2 */
|
/* USER CODE BEGIN WWDG_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END WWDG_Init 2 */
|
/* USER CODE END WWDG_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_WWDG_MspInit (WWDG_HandleTypeDef* wwdgHandle)
|
void HAL_WWDG_MspInit(WWDG_HandleTypeDef* wwdgHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (wwdgHandle->Instance == WWDG)
|
if(wwdgHandle->Instance==WWDG)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN WWDG_MspInit 0 */
|
/* USER CODE BEGIN WWDG_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END WWDG_MspInit 0 */
|
/* USER CODE END WWDG_MspInit 0 */
|
||||||
/* WWDG clock enable */
|
/* WWDG clock enable */
|
||||||
__HAL_RCC_WWDG_CLK_ENABLE();
|
__HAL_RCC_WWDG_CLK_ENABLE();
|
||||||
/* USER CODE BEGIN WWDG_MspInit 1 */
|
/* USER CODE BEGIN WWDG_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END WWDG_MspInit 1 */
|
/* USER CODE END WWDG_MspInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
||||||
+42
-23
@@ -47,26 +47,44 @@ Dma.ADC1.0.SyncEnable=ENABLE
|
|||||||
Dma.ADC1.0.SyncPolarity=HAL_DMAMUX_SYNC_RISING
|
Dma.ADC1.0.SyncPolarity=HAL_DMAMUX_SYNC_RISING
|
||||||
Dma.ADC1.0.SyncRequestNumber=1
|
Dma.ADC1.0.SyncRequestNumber=1
|
||||||
Dma.ADC1.0.SyncSignalID=NONE
|
Dma.ADC1.0.SyncSignalID=NONE
|
||||||
Dma.LPUART1_RX.1.Direction=DMA_PERIPH_TO_MEMORY
|
Dma.LPUART2_RX.1.Direction=DMA_PERIPH_TO_MEMORY
|
||||||
Dma.LPUART1_RX.1.EventEnable=DISABLE
|
Dma.LPUART2_RX.1.EventEnable=DISABLE
|
||||||
Dma.LPUART1_RX.1.Instance=DMA1_Channel2
|
Dma.LPUART2_RX.1.Instance=DMA1_Channel3
|
||||||
Dma.LPUART1_RX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
Dma.LPUART2_RX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||||
Dma.LPUART1_RX.1.MemInc=DMA_MINC_ENABLE
|
Dma.LPUART2_RX.1.MemInc=DMA_MINC_ENABLE
|
||||||
Dma.LPUART1_RX.1.Mode=DMA_NORMAL
|
Dma.LPUART2_RX.1.Mode=DMA_NORMAL
|
||||||
Dma.LPUART1_RX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
Dma.LPUART2_RX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
||||||
Dma.LPUART1_RX.1.PeriphInc=DMA_PINC_DISABLE
|
Dma.LPUART2_RX.1.PeriphInc=DMA_PINC_DISABLE
|
||||||
Dma.LPUART1_RX.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING
|
Dma.LPUART2_RX.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING
|
||||||
Dma.LPUART1_RX.1.Priority=DMA_PRIORITY_LOW
|
Dma.LPUART2_RX.1.Priority=DMA_PRIORITY_HIGH
|
||||||
Dma.LPUART1_RX.1.RequestNumber=1
|
Dma.LPUART2_RX.1.RequestNumber=1
|
||||||
Dma.LPUART1_RX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
|
Dma.LPUART2_RX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
|
||||||
Dma.LPUART1_RX.1.SignalID=NONE
|
Dma.LPUART2_RX.1.SignalID=NONE
|
||||||
Dma.LPUART1_RX.1.SyncEnable=DISABLE
|
Dma.LPUART2_RX.1.SyncEnable=DISABLE
|
||||||
Dma.LPUART1_RX.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
|
Dma.LPUART2_RX.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
|
||||||
Dma.LPUART1_RX.1.SyncRequestNumber=1
|
Dma.LPUART2_RX.1.SyncRequestNumber=1
|
||||||
Dma.LPUART1_RX.1.SyncSignalID=NONE
|
Dma.LPUART2_RX.1.SyncSignalID=NONE
|
||||||
Dma.Request0=ADC1
|
Dma.Request0=ADC1
|
||||||
Dma.Request1=LPUART1_RX
|
Dma.Request1=LPUART2_RX
|
||||||
Dma.RequestsNb=2
|
Dma.Request2=USART4_RX
|
||||||
|
Dma.RequestsNb=3
|
||||||
|
Dma.USART4_RX.2.Direction=DMA_PERIPH_TO_MEMORY
|
||||||
|
Dma.USART4_RX.2.EventEnable=DISABLE
|
||||||
|
Dma.USART4_RX.2.Instance=DMA1_Channel2
|
||||||
|
Dma.USART4_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||||
|
Dma.USART4_RX.2.MemInc=DMA_MINC_ENABLE
|
||||||
|
Dma.USART4_RX.2.Mode=DMA_NORMAL
|
||||||
|
Dma.USART4_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
||||||
|
Dma.USART4_RX.2.PeriphInc=DMA_PINC_DISABLE
|
||||||
|
Dma.USART4_RX.2.Polarity=HAL_DMAMUX_REQ_GEN_RISING
|
||||||
|
Dma.USART4_RX.2.Priority=DMA_PRIORITY_LOW
|
||||||
|
Dma.USART4_RX.2.RequestNumber=1
|
||||||
|
Dma.USART4_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
|
||||||
|
Dma.USART4_RX.2.SignalID=NONE
|
||||||
|
Dma.USART4_RX.2.SyncEnable=DISABLE
|
||||||
|
Dma.USART4_RX.2.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
|
||||||
|
Dma.USART4_RX.2.SyncRequestNumber=1
|
||||||
|
Dma.USART4_RX.2.SyncSignalID=NONE
|
||||||
File.Version=6
|
File.Version=6
|
||||||
GPIO.groupedBy=Group By Peripherals
|
GPIO.groupedBy=Group By Peripherals
|
||||||
KeepUserPlacement=false
|
KeepUserPlacement=false
|
||||||
@@ -177,7 +195,7 @@ MxCube.Version=6.7.0
|
|||||||
MxDb.Version=DB.6.0.70
|
MxDb.Version=DB.6.0.70
|
||||||
NVIC.DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true\:true
|
NVIC.DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true\:true
|
||||||
NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true\:true
|
NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true\:true
|
||||||
NVIC.DMA1_Channel2_3_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true\:true
|
NVIC.DMA1_Channel2_3_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:true\:true
|
||||||
NVIC.ForceEnableDMAVector=true
|
NVIC.ForceEnableDMAVector=true
|
||||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false
|
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false
|
||||||
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
||||||
@@ -194,7 +212,7 @@ NVIC.TIM7_LPTIM2_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
|
|||||||
NVIC.TimeBase=TIM2_IRQn
|
NVIC.TimeBase=TIM2_IRQn
|
||||||
NVIC.TimeBaseIP=TIM2
|
NVIC.TimeBaseIP=TIM2
|
||||||
NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
|
NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
|
||||||
NVIC.USART2_LPUART2_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
|
NVIC.USART2_LPUART2_IRQn=true\:0\:0\:true\:false\:true\:false\:true\:true\:true
|
||||||
NVIC.USART3_4_5_6_LPUART1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
|
NVIC.USART3_4_5_6_LPUART1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
|
||||||
PA0.GPIOParameters=GPIO_Label
|
PA0.GPIOParameters=GPIO_Label
|
||||||
PA0.GPIO_Label=ADC1
|
PA0.GPIO_Label=ADC1
|
||||||
@@ -443,7 +461,7 @@ ProjectManager.FreePins=false
|
|||||||
ProjectManager.HalAssertFull=true
|
ProjectManager.HalAssertFull=true
|
||||||
ProjectManager.HeapSize=0x2000
|
ProjectManager.HeapSize=0x2000
|
||||||
ProjectManager.KeepUserCode=true
|
ProjectManager.KeepUserCode=true
|
||||||
ProjectManager.LastFirmware=true
|
ProjectManager.LastFirmware=false
|
||||||
ProjectManager.LibraryCopy=0
|
ProjectManager.LibraryCopy=0
|
||||||
ProjectManager.MainLocation=Core/Src
|
ProjectManager.MainLocation=Core/Src
|
||||||
ProjectManager.NoMain=false
|
ProjectManager.NoMain=false
|
||||||
@@ -553,7 +571,8 @@ TIM3.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
|||||||
TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
||||||
TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
|
TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
|
||||||
TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
||||||
TIM3.IPParameters=Channel-PWM Generation4 CH4,Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3
|
TIM3.IPParameters=Channel-PWM Generation4 CH4,Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3,Period
|
||||||
|
TIM3.Period=640
|
||||||
TIM6.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
|
TIM6.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
|
||||||
TIM6.IPParameters=Prescaler,AutoReloadPreload,Period
|
TIM6.IPParameters=Prescaler,AutoReloadPreload,Period
|
||||||
TIM6.Period=10000
|
TIM6.Period=10000
|
||||||
|
|||||||
@@ -0,0 +1,189 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||||
|
<cconfiguration id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.553091094">
|
||||||
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.553091094" moduleId="org.eclipse.cdt.core.settings" name="Debug">
|
||||||
|
<externalSettings/>
|
||||||
|
<extensions>
|
||||||
|
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
</extensions>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<configuration artifactName="rtthread" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="${cross_rm} -rf" description="" id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.553091094" name="Debug" parent="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug">
|
||||||
|
<folderInfo id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.553091094." name="/" resourcePath="">
|
||||||
|
<toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug.1201710416" name="ARM Cross GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.251260409" name="Create flash image" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting.1365878149" name="Create extended listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting" useByScannerDiscovery="false"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.709136944" name="Print size" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.1986446770" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.none" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.1312975261" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength" useByScannerDiscovery="true" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.1538128212" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar" useByScannerDiscovery="true" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.2136804218" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.244767666" name="Data sections (-fdata-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.1055848773" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.default" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.501941135" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.dwarf2" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name.1696308067" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name" useByScannerDiscovery="false" value="GNU Tools for ARM Embedded Processors" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.1558403188" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.architecture" useByScannerDiscovery="false" value="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.arm" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family.749415257" name="ARM family" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family" useByScannerDiscovery="false" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcpu.cortex-m4" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.2114153533" name="Instruction set" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset" useByScannerDiscovery="false" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.thumb" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix.1600865811" name="Prefix" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.c.1109963929" name="C compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.c" useByScannerDiscovery="false" value="gcc" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp.1040883831" name="C++ compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp" useByScannerDiscovery="false" value="g++" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar.1678200391" name="Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar" useByScannerDiscovery="false" value="ar" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy.1171840296" name="Hex/Bin converter" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy" useByScannerDiscovery="false" value="objcopy" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump.342604837" name="Listing generator" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump" useByScannerDiscovery="false" value="objdump" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.size.898269225" name="Size command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.size" useByScannerDiscovery="false" value="size" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.make.2016398076" name="Build command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.make" useByScannerDiscovery="false" value="make" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm.1606171496" name="Remove command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm" useByScannerDiscovery="false" value="rm" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.id.540792084" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.id" useByScannerDiscovery="false" value="1287942917" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture.430121817" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture" useByScannerDiscovery="false" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.arch.none" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.966735324" name="Float ABI" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.hard" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn.1381561249" name="Enable all common warnings (-Wall)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.target.other.2041717463" name="Other target flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.target.other" useByScannerDiscovery="true" value="" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.1463655269" name="FPU Type" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.fpv4spd16" valueType="enumerated"/>
|
||||||
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform.1798638225" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/>
|
||||||
|
<builder buildPath="${workspace_loc:/qemu-vexpress-a9}/Debug" cleanBuildTarget="mdk_clean" id="ilg.gnuarmeclipse.managedbuild.cross.builder.1736709688" incrementalBuildTarget="mdk_all" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="ilg.gnuarmeclipse.managedbuild.cross.builder"/>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.1810966071" name="GNU ARM Cross Assembler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor.1072524326" name="Use preprocessor" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths.161242639" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}}""/>
|
||||||
|
</option>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.defs.1521934876" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.defs" useByScannerDiscovery="true"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.flags.1325367962" name="Assembler flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.flags" useByScannerDiscovery="false" valueType="stringList">
|
||||||
|
<listOptionValue builtIn="false" value="-mimplicit-it=thumb"/>
|
||||||
|
</option>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input.1843333483" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.1570350559" name="GNU ARM Cross C Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler">
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths.634882052" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/drivers}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/libraries//CMSIS//Device//ST//STM32F4xx//Include}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/libraries//CMSIS//Include}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/libraries//CMSIS//RTOS//Template}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/libraries//STM32F4xx_HAL_Driver//Inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/libraries//STM32F4xx_HAL_Driver//Inc//Legacy}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/applications}""/>
|
||||||
|
</option>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs.100549972" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
|
||||||
|
<listOptionValue builtIn="false" value="SOC_FAMILY_STM32"/>
|
||||||
|
<listOptionValue builtIn="false" value="SOC_SERIES_STM32F4"/>
|
||||||
|
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
|
||||||
|
<listOptionValue builtIn="false" value="STM32F411xE"/>
|
||||||
|
</option>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.other.2133065240" name="Other compiler flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.other" useByScannerDiscovery="true" value="" valueType="string"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.files.714348818" name="Include files (-include)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.files" useByScannerDiscovery="true" valueType="includeFiles"/>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.992053063" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.869072473" name="Cross ARM C Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections.1167322178" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.nostart.351692886" name="Do not use standard start files (-nostartfiles)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.nostart" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.nostdlibs.1009243715" name="No startup or default libs (-nostdlib)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.nodeflibs.2016026082" name="Do not use default libraries (-nodefaultlibs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.nodeflibs" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnano.923990336" name="Use newlib-nano (--specs=nano.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnano" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option defaultValue="true" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.shared.548869459" name="Shared (-shared)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.shared" useByScannerDiscovery="false" valueType="boolean"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.scriptfile.1818777301" name="Script files (-T)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.scriptfile" useByScannerDiscovery="false" valueType="stringList">
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//linkscripts//STM32F411RE//link.lds}""/>
|
||||||
|
</option>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.libs.1135656995" name="Libraries (-l)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.libs" useByScannerDiscovery="false"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.paths.36884122" name="Library search path (-L)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.paths" useByScannerDiscovery="false"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.other.396049466" name="Other linker flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.other" useByScannerDiscovery="false" value="" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.cref.1645737861" name="Cross reference (-Xlinker --cref)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.cref" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.input.334732222" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.input">
|
||||||
|
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||||
|
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||||
|
</inputType>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.1601059928" name="GNU ARM Cross C++ Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.437759352" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" value="true" valueType="boolean"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.scriptfile.1101974459" name="Script files (-T)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.scriptfile" useByScannerDiscovery="false" valueType="stringList">
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}//linkscripts//STM32F411RE//link.lds}""/>
|
||||||
|
</option>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.cref.2007675975" name="Cross reference (-Xlinker --cref)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.cref" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnano.2105838438" name="Use newlib-nano (--specs=nano.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnano" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.libs.934137837" name="Libraries (-l)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.libs" useByScannerDiscovery="false"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostart.2118356996" name="Do not use standard start files (-nostartfiles)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostart" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nodeflibs.1427884346" name="Do not use default libraries (-nodefaultlibs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nodeflibs" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostdlibs.1433863653" name="No startup or default libs (-nostdlib)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.printgcsections.1387745410" name="Print removed sections (-Xlinker --print-gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.printgcsections" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.strip.1230158061" name="Omit all symbol information (-s)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.strip" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.printmap.1307581821" name="Print link map (-Xlinker --print-map)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.printmap" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.useprintffloat.960778920" name="Use float with nano printf (-u _printf_float)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.useprintffloat" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usescanffloat.637205035" name="Use float with nano scanf (-u _scanf_float)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usescanffloat" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnosys.1948314201" name="Do not use syscalls (--specs=nosys.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnosys" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.verbose.273162112" name="Verbose (-v)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.paths.1399535143" name="Library search path (-L)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.paths" useByScannerDiscovery="false"/>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input.262373798" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input">
|
||||||
|
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||||
|
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||||
|
</inputType>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver.506412204" name="GNU ARM Cross Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver"/>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash.1461589245" name="GNU ARM Cross Create Flash Image" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createflash.choice.1937707052" name="Output file format (-O)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createflash.choice" useByScannerDiscovery="false" value="ilg.gnuarmeclipse.managedbuild.cross.option.createflash.choice.binary" valueType="enumerated"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting.82359725" name="GNU ARM Cross Create Listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.source.601724476" name="Display source (--source|-S)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.source" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.allheaders.692505279" name="Display all headers (--all-headers|-x)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.allheaders" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.demangle.97345172" name="Demangle names (--demangle|-C)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.demangle" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.linenumbers.1342893377" name="Display line numbers (--line-numbers|-l)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.linenumbers" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.wide.1533725981" name="Wide lines (--wide|-w)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.wide" value="true" valueType="boolean"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize.1073550295" name="GNU ARM Cross Print Size" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format.946451386" name="Size format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format" useByScannerDiscovery="false"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.1302177015" name="GNU ARM Cross C++ Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler">
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.defs.704468062" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
|
||||||
|
<listOptionValue builtIn="false" value="SOC_FAMILY_STM32"/>
|
||||||
|
<listOptionValue builtIn="false" value="SOC_SERIES_STM32F4"/>
|
||||||
|
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
|
||||||
|
<listOptionValue builtIn="false" value="STM32F411xE"/>
|
||||||
|
</option>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths.302877723" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/drivers}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/libraries//CMSIS//Device//ST//STM32F4xx//Include}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/libraries//CMSIS//Include}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/libraries//CMSIS//RTOS//Template}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/libraries//STM32F4xx_HAL_Driver//Inc}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/libraries//STM32F4xx_HAL_Driver//Inc//Legacy}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc://${ProjName}/applications}""/>
|
||||||
|
</option>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.files.343249373" name="Include files (-include)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.files" useByScannerDiscovery="true"/>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input.45918001" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input"/>
|
||||||
|
</tool>
|
||||||
|
</toolChain>
|
||||||
|
</folderInfo>
|
||||||
|
<sourceEntries>
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
||||||
|
</sourceEntries>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
|
</cconfiguration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<project id="qemu-vexpress-a9.ilg.gnuarmeclipse.managedbuild.cross.target.elf.860020518" name="Executable" projectType="ilg.gnuarmeclipse.managedbuild.cross.target.elf"/>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="scannerConfiguration">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
<scannerConfigBuildInfo instanceId="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.553091094;ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.553091094.;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.1570350559;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.992053063">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
|
<storageModule moduleId="refreshScope" versionNumber="2">
|
||||||
|
<configuration configurationName="Debug">
|
||||||
|
<resource resourceType="PROJECT" workspacePath="/123"/>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings">
|
||||||
|
<doc-comment-owner id="org.eclipse.cdt.ui.doxygen">
|
||||||
|
<path value=""/>
|
||||||
|
</doc-comment-owner>
|
||||||
|
</storageModule>
|
||||||
|
</cproject>
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<?fileVersion 4.0.0?><projectDescription>
|
||||||
|
<name>BareMetal</name>
|
||||||
|
<comment />
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||||
|
<triggers>clean,full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||||
|
<triggers>full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||||
|
<nature>org.rt-thread.studio.rttnature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
|
</natures>
|
||||||
|
<name>411_dap_demo</name>
|
||||||
|
</projectDescription>
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="ilg.gnumcueclipse.debug.gdbjtag.pyocd.launchConfigurationType">
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.adapterName" value="DAP-LINK"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.binFlashStartAddress" value=""/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.doContinue" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.doDebugInRam" value="false"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.doFirstReset" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.doGdbServerAllocateConsole" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.doSecondReset" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.doStartGdbServer" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.enableSemihosting" value="true"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.firstResetType" value="init"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.gdbClientOtherCommands" value="set mem inaccessible-by-default off"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.gdbClientOtherOptions" value=""/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.gdbServerBusSpeed" value="1000000"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.gdbServerConnectionAddress" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.gdbServerDeviceName" value="unknown"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.gdbServerEnableSemihosting" value="false"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.gdbServerExecutable" value="${debugger_install_path}/${daplink_debugger_relative_path}\pyocd.exe"/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.gdbServerFlashMode" value="0"/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.gdbServerGdbPortNumber" value="3333"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.gdbServerOther" value=""/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.gdbServerTelnetPortNumber" value="4444"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.otherInitCommands" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.otherRunCommands" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.programMode" value="BIN"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.pyocd.secondResetType" value="halt"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU MCU PyOCD"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useRemoteTarget" value="false"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${rtt_gnu_gcc}/arm-none-eabi-gdb.exe"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
|
||||||
|
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="0"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="Debug/rtthread.elf"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="411_dap_demo"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
|
<listEntry value="/411_dap_demo"/>
|
||||||
|
</listAttribute>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
|
<listEntry value="4"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.cdt.debug.core.sourceLocator"/>
|
||||||
|
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;default/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> "/>
|
||||||
|
<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="GBK"/>
|
||||||
|
<booleanAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_OUTPUT_ON" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="true"/>
|
||||||
|
</launchConfiguration>
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="ilg.gnumcueclipse.debug.gdbjtag.jlink.launchConfigurationType">
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.adapterName" value="J-Link"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.binFileStartAddress" value=""/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doConnectToRunning" value="false"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doContinue" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doDebugInRam" value="false"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doFirstReset" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doGdbServerAllocateConsole" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doGdbServerAllocateSemihostingConsole" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doGdbServerInitRegs" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doGdbServerLocalOnly" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doGdbServerSilent" value="false"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doGdbServerVerifyDownload" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doSecondReset" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.doStartGdbServer" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.enableFlashBreakpoints" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.enableSemihosting" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.enableSemihostingIoclientGdbClient" value="false"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.enableSemihostingIoclientTelnet" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.enableSwo" value="true"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.eraseEndAddress" value=""/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.eraseMode" value="0"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.eraseStartAddress" value=""/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.firstResetSpeed" value="1000"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.firstResetType" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.flashDeviceName" value="unknown"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.flashDownloadHex" value="false"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbClientOtherCommands" value="set mem inaccessible-by-default off"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbClientOtherOptions" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerConnection" value="usb"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerConnectionAddress" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerDebugInterface" value="swd"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerDeviceEndianness" value="little"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerDeviceName" value="unknown"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerDeviceSpeed" value="1000"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerExecutable" value="${debugger_install_path}/${jlink_debugger_relative_path}\JLinkGDBServerCL.exe"/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerGdbPortNumber" value="2331"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerLog" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerOther" value="-singlerun"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerRunAfterStopDebug" value="true"/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerSwoPortNumber" value="2332"/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.gdbServerTelnetPortNumber" value="2333"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.interfaceSpeed" value="auto"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.jlinkExecutable" value="${debugger_install_path}/${jlink_debugger_relative_path}\JLink.exe"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.otherInitCommands" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.otherRunCommands" value=""/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.runAfterDownload" value="true"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.secondResetType" value=""/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.swoEnableTargetCpuFreq" value="0"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.swoEnableTargetPortMask" value="0x1"/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.jlink.swoEnableTargetSwoFreq" value="0"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU MCU J-Link"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/>
|
||||||
|
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="2331"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useRemoteTarget" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${rtt_gnu_gcc}/arm-none-eabi-gdb.exe"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
|
||||||
|
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="0"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="Debug/rtthread.elf"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="411_dap_demo"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
|
<listEntry value="/411_dap_demo"/>
|
||||||
|
</listAttribute>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
|
<listEntry value="4"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.cdt.debug.core.sourceLocator"/>
|
||||||
|
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;default/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> "/>
|
||||||
|
<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="GBK"/>
|
||||||
|
<booleanAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_OUTPUT_ON" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="true"/>
|
||||||
|
</launchConfiguration>
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="ilg.gnumcueclipse.debug.gdbjtag.qemu.launchConfigurationType">
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.doContinue" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.doDebugInRam" value="false"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.doFirstReset" value="false"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.doSecondReset" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.doStartGdbServer" value="true"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.enableSemihosting" value="true"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.gdbClientOtherCommands" value="set mem inaccessible-by-default off "/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.gdbClientOtherOptions" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.gdbServerBoardModel" value="?"/>
|
||||||
|
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.gdbServerCpuQuantity" value="1"/>
|
||||||
|
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.gdbServerEnableNetwork" value="false"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.gdbServerExecutable" value="${debugger_install_path}/${qemu_debugger_relative_path}\qemu-system-arm.exe"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.gdbServerExtraQemuCmd" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.gdbServerSdcardMemory" value="64.0"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.gdbServerSerialPort" value="COM1"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.gdbServerStartup" value="${studio_install_path}/repo/Extract/Debugger_Support_Packages/RealThread/QEMU/4.2.0.4/qemu-system-arm.exe -M ? -sd sd.bin -nographic -S -s"/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.gdbServerTapName" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.otherInitCommands" value=""/>
|
||||||
|
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.qemu.otherRunCommands" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU MCU QEMU"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/>
|
||||||
|
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="1234"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useRemoteTarget" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${cross_prefix}gdb${cross_suffix}"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
|
||||||
|
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="0"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="Debug/rtthread.elf"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="411_dap_demo"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
|
<listEntry value="/411_dap_demo"/>
|
||||||
|
</listAttribute>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
|
<listEntry value="4"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.cdt.debug.core.sourceLocator"/>
|
||||||
|
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;default/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> "/>
|
||||||
|
<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="GBK"/>
|
||||||
|
<booleanAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_OUTPUT_ON" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="true"/>
|
||||||
|
</launchConfiguration>
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="org.rtthread.studio.debug.gdbjtag.stlink.launchConfigurationType">
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.connectMode" value="NORMAL"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.debugInterface" value="SWD"/>
|
||||||
|
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.delay" value="3"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doHalt" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.flashVerify" value="false"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDeviceId" value="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.genericDevice"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.otherDownloadOption" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.otherGdbserverOption" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/>
|
||||||
|
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="61235"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.resetMode" value=" -hardRst"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.resetRun" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.runCommands" value=""/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${rtt_gnu_gcc}/arm-none-eabi-gdb.exe"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
|
||||||
|
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="0"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="remote"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="Debug/rtthread.elf"/>
|
||||||
|
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="411_dap_demo"/>
|
||||||
|
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
|
<listEntry value="/411_dap_demo"/>
|
||||||
|
</listAttribute>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
|
<listEntry value="4"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.cdt.debug.core.sourceLocator"/>
|
||||||
|
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;default/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> "/>
|
||||||
|
<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="GBK"/>
|
||||||
|
<booleanAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_OUTPUT_ON" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="true"/>
|
||||||
|
<stringAttribute key="org.rtthread.studio.debug.gdbjtag.stlink.adapterName" value="ST-LINK"/>
|
||||||
|
<booleanAttribute key="org.rtthread.studio.debug.gdbjtag.stlink.doContinue" value="true"/>
|
||||||
|
<stringAttribute key="org.rtthread.studio.debug.gdbjtag.stlink.gdbServerDeviceName" value="unknown"/>
|
||||||
|
<stringAttribute key="org.rtthread.studio.debug.gdbjtag.stlink.gdbServerExecutable" value="${debugger_install_path}/${stlink_debugger_relative_path}/ST-LINK_gdbserver.exe"/>
|
||||||
|
<stringAttribute key="org.rtthread.studio.debug.gdbjtag.stlink.stlinkGdbServer" value="${debugger_install_path}/${stlink_debugger_relative_path}/tools/bin/STM32_Programmer_CLI.exe"/>
|
||||||
|
<booleanAttribute key="org.rtthread.studio.debug.gdbjtag.stlink.useRemoteTarget" value="true"/>
|
||||||
|
</launchConfiguration>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<project>
|
||||||
|
<configuration id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.553091094" name="Debug">
|
||||||
|
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||||
|
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||||
|
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
|
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
|
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-1248840411375756638" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT ARM Cross GCC Built-in Compiler Settings " parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||||
|
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||||
|
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||||
|
</provider>
|
||||||
|
</extension>
|
||||||
|
</configuration>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
{
|
||||||
|
"global":{
|
||||||
|
"use-micro-lib":true,
|
||||||
|
"output-debug-info":true,
|
||||||
|
"build-output-dir":"GB01VETx\\","list-output-dir":"./GB01VETx/\\",
|
||||||
|
"mem-layout":{
|
||||||
|
"rom":[
|
||||||
|
{
|
||||||
|
"name":"rom1",
|
||||||
|
"checked":false,
|
||||||
|
"address":"0x0",
|
||||||
|
"size":"0x0",
|
||||||
|
"is_entry":false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"rom2",
|
||||||
|
"checked":false,
|
||||||
|
"address":"0x0",
|
||||||
|
"size":"0x0",
|
||||||
|
"is_entry":false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"rom3",
|
||||||
|
"checked":false,
|
||||||
|
"address":"0x0",
|
||||||
|
"size":"0x0",
|
||||||
|
"is_entry":false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"irom1",
|
||||||
|
"checked":true,
|
||||||
|
"address":"0x8000000",
|
||||||
|
"size":"0x80000",
|
||||||
|
"is_entry":true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"irom2",
|
||||||
|
"checked":false,
|
||||||
|
"address":"0x0",
|
||||||
|
"size":"0x0",
|
||||||
|
"is_entry":false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"ram":[
|
||||||
|
{
|
||||||
|
"name":"ram1",
|
||||||
|
"checked":false,
|
||||||
|
"noInit":false,
|
||||||
|
"address":"0x0",
|
||||||
|
"size":"0x0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"ram2",
|
||||||
|
"checked":false,
|
||||||
|
"noInit":false,
|
||||||
|
"address":"0x0",
|
||||||
|
"size":"0x0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"ram3",
|
||||||
|
"checked":false,
|
||||||
|
"noInit":false,
|
||||||
|
"address":"0x0",
|
||||||
|
"size":"0x0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"iram1",
|
||||||
|
"checked":true,
|
||||||
|
"noInit":false,
|
||||||
|
"address":"0x20000000",
|
||||||
|
"size":"0x24000"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"iram2",
|
||||||
|
"checked":false,
|
||||||
|
"noInit":false,
|
||||||
|
"address":"0x0",
|
||||||
|
"size":"0x0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"c/cpp":{
|
||||||
|
"misc-controls":"",
|
||||||
|
"optimization":4,
|
||||||
|
"warnings":2,
|
||||||
|
"include-list":[
|
||||||
|
"../Core/Inc",
|
||||||
|
"../Drivers/STM32G0xx_HAL_Driver/Inc",
|
||||||
|
"../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy",
|
||||||
|
"../Drivers/CMSIS/Device/ST/STM32G0xx/Include",
|
||||||
|
"../Drivers/CMSIS/Include",
|
||||||
|
"../middleware/sfud/inc",
|
||||||
|
"../middleware/nr_micro_shell/inc",
|
||||||
|
"../middleware/xcmd/inc",
|
||||||
|
"../middleware/easyflash/inc",
|
||||||
|
"../App",
|
||||||
|
"../middleware/easylogger/inc",
|
||||||
|
"../Comm",
|
||||||
|
"../middleware/fifo",
|
||||||
|
"../middleware/at-command/include",
|
||||||
|
"../middleware/softimer",
|
||||||
|
"../RT-Thread",
|
||||||
|
"../Middlewares/Third_Party/RealThread_RTOS/include/",
|
||||||
|
"../Middlewares/Third_Party/RealThread_RTOS/bsp/_template/cubemx_config"
|
||||||
|
],
|
||||||
|
"define-list":[
|
||||||
|
"USE_HAL_DRIVER",
|
||||||
|
"STM32G0B1xx"
|
||||||
|
],
|
||||||
|
"split-load-and-store-multiple":false,
|
||||||
|
"strict-ansi-c":false,
|
||||||
|
"gnu-extensions":false,
|
||||||
|
"c99-mode":true,
|
||||||
|
"read-write-position-independent":false,
|
||||||
|
"enum-container-always-int":false,
|
||||||
|
"optimize-for-time":false,
|
||||||
|
"read-only-position-independent":false,
|
||||||
|
"one-elf-section-per-function":true,
|
||||||
|
"execute-only-code":false,
|
||||||
|
"plain-char-is-signed":false
|
||||||
|
},
|
||||||
|
"asm":{
|
||||||
|
"misc-controls":"",
|
||||||
|
"include-list":[
|
||||||
|
|
||||||
|
],
|
||||||
|
"define-list":[
|
||||||
|
|
||||||
|
],
|
||||||
|
"split-load-and-store-multiple":false,
|
||||||
|
"thumb-mode":false,
|
||||||
|
"no-warnings":false,
|
||||||
|
"read-write-position-independent":false,
|
||||||
|
"read-only-position-independent":false,
|
||||||
|
"execute-only-code":false
|
||||||
|
},
|
||||||
|
"linker":{
|
||||||
|
"linker-scatter-file":"",
|
||||||
|
"misc-controls":"",
|
||||||
|
"read-write-position-independent":false,
|
||||||
|
"auto-gen-scatter-file":true,
|
||||||
|
"read-only-position-independent":false,
|
||||||
|
"not-search-std-libs":false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
eclipse.preferences.project.mdk.projectRoot="J\:\\add_by_zhangpeng\\Project\\SLUICE\\Sluice\\GB0VETx\\g0b1vetx-board\\MDK-ARM\\.rtt-studio"
|
||||||
|
eclipse.preferences.project.mdk.uvprojxPath="J\:\\add_by_zhangpeng\\Project\\SLUICE\\Sluice\\GB0VETx\\g0b1vetx-board\\MDK-ARM\\GB01VETx.uvprojx"
|
||||||
|
eclipse.preferences.version=1
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#RT-Thread Studio Project Configuration
|
||||||
|
#Fri May 26 08:53:27 CST 2023
|
||||||
|
project_type=mdk
|
||||||
|
output_project_path=J\:add_by_zhangpengProjectSLUICESluiceGB0VETxg0b1vetx-boardMDK-ARM.rtt-studio
|
||||||
|
hardware_adapter=J-Link
|
||||||
|
chip_name=STM32G0B1VE
|
||||||
|
import_project_name=GB01VETx.uvprojx
|
||||||
|
project_name=G0B1VETX_APP
|
||||||
|
cfg_version=v3.0
|
||||||
+23
-23
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
|
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
|
||||||
|
|
||||||
<SchemaVersion>1.0</SchemaVersion>
|
<SchemaVersion>1.0</SchemaVersion>
|
||||||
@@ -104,16 +104,16 @@
|
|||||||
<bSchkAxf>0</bSchkAxf>
|
<bSchkAxf>0</bSchkAxf>
|
||||||
<bTchkAxf>0</bTchkAxf>
|
<bTchkAxf>0</bTchkAxf>
|
||||||
<nTsel>3</nTsel>
|
<nTsel>3</nTsel>
|
||||||
<sDll></sDll>
|
<sDll />
|
||||||
<sDllPa></sDllPa>
|
<sDllPa />
|
||||||
<sDlgDll></sDlgDll>
|
<sDlgDll />
|
||||||
<sDlgPa></sDlgPa>
|
<sDlgPa />
|
||||||
<sIfile></sIfile>
|
<sIfile />
|
||||||
<tDll></tDll>
|
<tDll />
|
||||||
<tDllPa></tDllPa>
|
<tDllPa />
|
||||||
<tDlgDll></tDlgDll>
|
<tDlgDll />
|
||||||
<tDlgPa></tDlgPa>
|
<tDlgPa />
|
||||||
<tIfile></tIfile>
|
<tIfile />
|
||||||
<pMon>BIN\CMSIS_AGDI.dll</pMon>
|
<pMon>BIN\CMSIS_AGDI.dll</pMon>
|
||||||
</DebugOpt>
|
</DebugOpt>
|
||||||
<TargetDriverDllRegistry>
|
<TargetDriverDllRegistry>
|
||||||
@@ -145,7 +145,7 @@
|
|||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>ARMDBGFLAGS</Key>
|
<Key>ARMDBGFLAGS</Key>
|
||||||
<Name></Name>
|
<Name />
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
@@ -167,7 +167,7 @@
|
|||||||
<BreakByAccess>0</BreakByAccess>
|
<BreakByAccess>0</BreakByAccess>
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
<BreakIfRCount>1</BreakIfRCount>
|
||||||
<Filename>D:\Project\娴嬫帶涓€浣撻椄\GB01V\g0b1vetx-board\Core\Src\main.c</Filename>
|
<Filename>D:\Project\娴嬫帶涓€浣撻椄\GB01V\g0b1vetx-board\Core\Src\main.c</Filename>
|
||||||
<ExecCommand></ExecCommand>
|
<ExecCommand />
|
||||||
<Expression>\\GB01VETx\../Core/Src/main.c\88</Expression>
|
<Expression>\\GB01VETx\../Core/Src/main.c\88</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
</Breakpoint>
|
</Breakpoint>
|
||||||
@@ -200,19 +200,19 @@
|
|||||||
<newCpu>0</newCpu>
|
<newCpu>0</newCpu>
|
||||||
<uProt>0</uProt>
|
<uProt>0</uProt>
|
||||||
</DebugFlag>
|
</DebugFlag>
|
||||||
<LintExecutable></LintExecutable>
|
<LintExecutable />
|
||||||
<LintConfigFile></LintConfigFile>
|
<LintConfigFile />
|
||||||
<bLintAuto>0</bLintAuto>
|
<bLintAuto>0</bLintAuto>
|
||||||
<bAutoGenD>0</bAutoGenD>
|
<bAutoGenD>0</bAutoGenD>
|
||||||
<LntExFlags>0</LntExFlags>
|
<LntExFlags>0</LntExFlags>
|
||||||
<pMisraName></pMisraName>
|
<pMisraName />
|
||||||
<pszMrule></pszMrule>
|
<pszMrule />
|
||||||
<pSingCmds></pSingCmds>
|
<pSingCmds />
|
||||||
<pMultCmds></pMultCmds>
|
<pMultCmds />
|
||||||
<pMisraNamep></pMisraNamep>
|
<pMisraNamep />
|
||||||
<pszMrulep></pszMrulep>
|
<pszMrulep />
|
||||||
<pSingCmdsp></pSingCmdsp>
|
<pSingCmdsp />
|
||||||
<pMultCmdsp></pMultCmdsp>
|
<pMultCmdsp />
|
||||||
<DebugDescription>
|
<DebugDescription>
|
||||||
<Enable>1</Enable>
|
<Enable>1</Enable>
|
||||||
<EnableFlashSeq>0</EnableFlashSeq>
|
<EnableFlashSeq>0</EnableFlashSeq>
|
||||||
|
|||||||
+421
-290
File diff suppressed because it is too large.
Load diff
+1
-8
@@ -12,14 +12,13 @@
|
|||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "data.h"
|
|
||||||
|
|
||||||
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
|
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
|
||||||
/*
|
/*
|
||||||
* Please modify RT_HEAP_SIZE if you enable RT_USING_HEAP
|
* Please modify RT_HEAP_SIZE if you enable RT_USING_HEAP
|
||||||
* the RT_HEAP_SIZE max value = (sram size - ZI size), 1024 means 1024 bytes
|
* the RT_HEAP_SIZE max value = (sram size - ZI size), 1024 means 1024 bytes
|
||||||
*/
|
*/
|
||||||
#define RT_HEAP_SIZE (30*1024)
|
#define RT_HEAP_SIZE (15*1024)
|
||||||
static rt_uint8_t rt_heap[RT_HEAP_SIZE];
|
static rt_uint8_t rt_heap[RT_HEAP_SIZE];
|
||||||
|
|
||||||
RT_WEAK void *rt_heap_begin_get(void)
|
RT_WEAK void *rt_heap_begin_get(void)
|
||||||
@@ -94,11 +93,6 @@ INIT_BOARD_EXPORT(uart_init);
|
|||||||
|
|
||||||
void rt_hw_console_output(const char *str)
|
void rt_hw_console_output(const char *str)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (g_ifconfig == 1)
|
|
||||||
{
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
rt_size_t i = 0, size = 0;
|
rt_size_t i = 0, size = 0;
|
||||||
char a = '\r';
|
char a = '\r';
|
||||||
|
|
||||||
@@ -114,7 +108,6 @@ void rt_hw_console_output(const char *str)
|
|||||||
}
|
}
|
||||||
HAL_UART_Transmit(&UartHandle, (uint8_t *)(str + i), 1, 1);
|
HAL_UART_Transmit(&UartHandle, (uint8_t *)(str + i), 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
/* RT-Thread config file */
|
/* RT-Thread config file */
|
||||||
|
|
||||||
#ifndef __RTTHREAD_CFG_H__
|
#ifndef __RTTHREAD_CFG_H__
|
||||||
@@ -156,4 +155,3 @@
|
|||||||
// <<< end of configuration section >>>
|
// <<< end of configuration section >>>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -20,6 +20,23 @@ typedef union{
|
|||||||
char byte[2];
|
char byte[2];
|
||||||
}Int16Tobyte;
|
}Int16Tobyte;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
uint32_t val;
|
||||||
|
uint8_t valBuf[4];
|
||||||
|
} DSH_INT_U;
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
float val;
|
||||||
|
uint8_t valBuf[4];
|
||||||
|
} DSH_FLOAT_U;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
float Bytes2Float (char * data);
|
float Bytes2Float (char * data);
|
||||||
uint32_t Bytes2Int (char * data);
|
uint32_t Bytes2Int (char * data);
|
||||||
int hexstr_to_hexbyte (char *src, char *obj, uint16_t length);
|
int hexstr_to_hexbyte (char *src, char *obj, uint16_t length);
|
||||||
|
|||||||
@@ -0,0 +1,936 @@
|
|||||||
|
/*
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved.
|
||||||
|
|
||||||
|
LICENSE TERMS
|
||||||
|
|
||||||
|
The redistribution and use of this software (with or without changes)
|
||||||
|
is allowed without the payment of fees or royalties provided that:
|
||||||
|
|
||||||
|
1. source code distributions include the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer;
|
||||||
|
|
||||||
|
2. binary distributions include the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer in their documentation;
|
||||||
|
|
||||||
|
3. the name of the copyright holder is not used to endorse products
|
||||||
|
built using this software without specific written permission.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
|
||||||
|
This software is provided 'as is' with no explicit or implied warranties
|
||||||
|
in respect of its properties, including, but not limited to, correctness
|
||||||
|
and/or fitness for purpose.
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
Issue 09/09/2006
|
||||||
|
|
||||||
|
This is an AES implementation that uses only 8-bit byte operations on the
|
||||||
|
cipher state (there are options to use 32-bit types if available).
|
||||||
|
|
||||||
|
The combination of mix columns and byte substitution used here is based on
|
||||||
|
that developed by Karl Malbrain. His contribution is acknowledged.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* define if you have a fast memcpy function on your system */
|
||||||
|
#if 0
|
||||||
|
# define HAVE_MEMCPY
|
||||||
|
# include <string.h>
|
||||||
|
# if defined( _MSC_VER )
|
||||||
|
# include <intrin.h>
|
||||||
|
# pragma intrinsic( memcpy )
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* define if you have fast 32-bit types on your system */
|
||||||
|
#if ( __CORTEX_M != 0 ) // if Cortex is different from M0/M0+
|
||||||
|
# define HAVE_UINT_32T
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* define if you don't want any tables */
|
||||||
|
#if 1
|
||||||
|
# define USE_TABLES
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* On Intel Core 2 duo VERSION_1 is faster */
|
||||||
|
|
||||||
|
/* alternative versions (test for performance on your system) */
|
||||||
|
#if 1
|
||||||
|
# define VERSION_1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
|
||||||
|
//#if defined( HAVE_UINT_32T )
|
||||||
|
// typedef unsigned long uint32_t;
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
/* functions for finite field multiplication in the AES Galois field */
|
||||||
|
|
||||||
|
#define WPOLY 0x011b
|
||||||
|
#define BPOLY 0x1b
|
||||||
|
#define DPOLY 0x008d
|
||||||
|
|
||||||
|
#define f1(x) (x)
|
||||||
|
#define f2(x) ((x << 1) ^ (((x >> 7) & 1) * WPOLY))
|
||||||
|
#define f4(x) ((x << 2) ^ (((x >> 6) & 1) * WPOLY) ^ (((x >> 6) & 2) * WPOLY))
|
||||||
|
#define f8(x) ((x << 3) ^ (((x >> 5) & 1) * WPOLY) ^ (((x >> 5) & 2) * WPOLY) \
|
||||||
|
^ (((x >> 5) & 4) * WPOLY))
|
||||||
|
#define d2(x) (((x) >> 1) ^ ((x) & 1 ? DPOLY : 0))
|
||||||
|
|
||||||
|
#define f3(x) (f2(x) ^ x)
|
||||||
|
#define f9(x) (f8(x) ^ x)
|
||||||
|
#define fb(x) (f8(x) ^ f2(x) ^ x)
|
||||||
|
#define fd(x) (f8(x) ^ f4(x) ^ x)
|
||||||
|
#define fe(x) (f8(x) ^ f4(x) ^ f2(x))
|
||||||
|
|
||||||
|
#if defined( USE_TABLES )
|
||||||
|
|
||||||
|
#define sb_data(w) { /* S Box data values */ \
|
||||||
|
w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), w(0xc5),\
|
||||||
|
w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), w(0xab), w(0x76),\
|
||||||
|
w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), w(0x59), w(0x47), w(0xf0),\
|
||||||
|
w(0xad), w(0xd4), w(0xa2), w(0xaf), w(0x9c), w(0xa4), w(0x72), w(0xc0),\
|
||||||
|
w(0xb7), w(0xfd), w(0x93), w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc),\
|
||||||
|
w(0x34), w(0xa5), w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15),\
|
||||||
|
w(0x04), w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a),\
|
||||||
|
w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), w(0x75),\
|
||||||
|
w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), w(0x5a), w(0xa0),\
|
||||||
|
w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), w(0xe3), w(0x2f), w(0x84),\
|
||||||
|
w(0x53), w(0xd1), w(0x00), w(0xed), w(0x20), w(0xfc), w(0xb1), w(0x5b),\
|
||||||
|
w(0x6a), w(0xcb), w(0xbe), w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf),\
|
||||||
|
w(0xd0), w(0xef), w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85),\
|
||||||
|
w(0x45), w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8),\
|
||||||
|
w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), w(0xf5),\
|
||||||
|
w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), w(0xf3), w(0xd2),\
|
||||||
|
w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), w(0x97), w(0x44), w(0x17),\
|
||||||
|
w(0xc4), w(0xa7), w(0x7e), w(0x3d), w(0x64), w(0x5d), w(0x19), w(0x73),\
|
||||||
|
w(0x60), w(0x81), w(0x4f), w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88),\
|
||||||
|
w(0x46), w(0xee), w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb),\
|
||||||
|
w(0xe0), w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c),\
|
||||||
|
w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), w(0x79),\
|
||||||
|
w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), w(0x4e), w(0xa9),\
|
||||||
|
w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), w(0x7a), w(0xae), w(0x08),\
|
||||||
|
w(0xba), w(0x78), w(0x25), w(0x2e), w(0x1c), w(0xa6), w(0xb4), w(0xc6),\
|
||||||
|
w(0xe8), w(0xdd), w(0x74), w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a),\
|
||||||
|
w(0x70), w(0x3e), w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e),\
|
||||||
|
w(0x61), w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e),\
|
||||||
|
w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), w(0x94),\
|
||||||
|
w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), w(0x28), w(0xdf),\
|
||||||
|
w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), w(0xe6), w(0x42), w(0x68),\
|
||||||
|
w(0x41), w(0x99), w(0x2d), w(0x0f), w(0xb0), w(0x54), w(0xbb), w(0x16) }
|
||||||
|
|
||||||
|
#define isb_data(w) { /* inverse S Box data values */ \
|
||||||
|
w(0x52), w(0x09), w(0x6a), w(0xd5), w(0x30), w(0x36), w(0xa5), w(0x38),\
|
||||||
|
w(0xbf), w(0x40), w(0xa3), w(0x9e), w(0x81), w(0xf3), w(0xd7), w(0xfb),\
|
||||||
|
w(0x7c), w(0xe3), w(0x39), w(0x82), w(0x9b), w(0x2f), w(0xff), w(0x87),\
|
||||||
|
w(0x34), w(0x8e), w(0x43), w(0x44), w(0xc4), w(0xde), w(0xe9), w(0xcb),\
|
||||||
|
w(0x54), w(0x7b), w(0x94), w(0x32), w(0xa6), w(0xc2), w(0x23), w(0x3d),\
|
||||||
|
w(0xee), w(0x4c), w(0x95), w(0x0b), w(0x42), w(0xfa), w(0xc3), w(0x4e),\
|
||||||
|
w(0x08), w(0x2e), w(0xa1), w(0x66), w(0x28), w(0xd9), w(0x24), w(0xb2),\
|
||||||
|
w(0x76), w(0x5b), w(0xa2), w(0x49), w(0x6d), w(0x8b), w(0xd1), w(0x25),\
|
||||||
|
w(0x72), w(0xf8), w(0xf6), w(0x64), w(0x86), w(0x68), w(0x98), w(0x16),\
|
||||||
|
w(0xd4), w(0xa4), w(0x5c), w(0xcc), w(0x5d), w(0x65), w(0xb6), w(0x92),\
|
||||||
|
w(0x6c), w(0x70), w(0x48), w(0x50), w(0xfd), w(0xed), w(0xb9), w(0xda),\
|
||||||
|
w(0x5e), w(0x15), w(0x46), w(0x57), w(0xa7), w(0x8d), w(0x9d), w(0x84),\
|
||||||
|
w(0x90), w(0xd8), w(0xab), w(0x00), w(0x8c), w(0xbc), w(0xd3), w(0x0a),\
|
||||||
|
w(0xf7), w(0xe4), w(0x58), w(0x05), w(0xb8), w(0xb3), w(0x45), w(0x06),\
|
||||||
|
w(0xd0), w(0x2c), w(0x1e), w(0x8f), w(0xca), w(0x3f), w(0x0f), w(0x02),\
|
||||||
|
w(0xc1), w(0xaf), w(0xbd), w(0x03), w(0x01), w(0x13), w(0x8a), w(0x6b),\
|
||||||
|
w(0x3a), w(0x91), w(0x11), w(0x41), w(0x4f), w(0x67), w(0xdc), w(0xea),\
|
||||||
|
w(0x97), w(0xf2), w(0xcf), w(0xce), w(0xf0), w(0xb4), w(0xe6), w(0x73),\
|
||||||
|
w(0x96), w(0xac), w(0x74), w(0x22), w(0xe7), w(0xad), w(0x35), w(0x85),\
|
||||||
|
w(0xe2), w(0xf9), w(0x37), w(0xe8), w(0x1c), w(0x75), w(0xdf), w(0x6e),\
|
||||||
|
w(0x47), w(0xf1), w(0x1a), w(0x71), w(0x1d), w(0x29), w(0xc5), w(0x89),\
|
||||||
|
w(0x6f), w(0xb7), w(0x62), w(0x0e), w(0xaa), w(0x18), w(0xbe), w(0x1b),\
|
||||||
|
w(0xfc), w(0x56), w(0x3e), w(0x4b), w(0xc6), w(0xd2), w(0x79), w(0x20),\
|
||||||
|
w(0x9a), w(0xdb), w(0xc0), w(0xfe), w(0x78), w(0xcd), w(0x5a), w(0xf4),\
|
||||||
|
w(0x1f), w(0xdd), w(0xa8), w(0x33), w(0x88), w(0x07), w(0xc7), w(0x31),\
|
||||||
|
w(0xb1), w(0x12), w(0x10), w(0x59), w(0x27), w(0x80), w(0xec), w(0x5f),\
|
||||||
|
w(0x60), w(0x51), w(0x7f), w(0xa9), w(0x19), w(0xb5), w(0x4a), w(0x0d),\
|
||||||
|
w(0x2d), w(0xe5), w(0x7a), w(0x9f), w(0x93), w(0xc9), w(0x9c), w(0xef),\
|
||||||
|
w(0xa0), w(0xe0), w(0x3b), w(0x4d), w(0xae), w(0x2a), w(0xf5), w(0xb0),\
|
||||||
|
w(0xc8), w(0xeb), w(0xbb), w(0x3c), w(0x83), w(0x53), w(0x99), w(0x61),\
|
||||||
|
w(0x17), w(0x2b), w(0x04), w(0x7e), w(0xba), w(0x77), w(0xd6), w(0x26),\
|
||||||
|
w(0xe1), w(0x69), w(0x14), w(0x63), w(0x55), w(0x21), w(0x0c), w(0x7d) }
|
||||||
|
|
||||||
|
#define mm_data(w) { /* basic data for forming finite field tables */ \
|
||||||
|
w(0x00), w(0x01), w(0x02), w(0x03), w(0x04), w(0x05), w(0x06), w(0x07),\
|
||||||
|
w(0x08), w(0x09), w(0x0a), w(0x0b), w(0x0c), w(0x0d), w(0x0e), w(0x0f),\
|
||||||
|
w(0x10), w(0x11), w(0x12), w(0x13), w(0x14), w(0x15), w(0x16), w(0x17),\
|
||||||
|
w(0x18), w(0x19), w(0x1a), w(0x1b), w(0x1c), w(0x1d), w(0x1e), w(0x1f),\
|
||||||
|
w(0x20), w(0x21), w(0x22), w(0x23), w(0x24), w(0x25), w(0x26), w(0x27),\
|
||||||
|
w(0x28), w(0x29), w(0x2a), w(0x2b), w(0x2c), w(0x2d), w(0x2e), w(0x2f),\
|
||||||
|
w(0x30), w(0x31), w(0x32), w(0x33), w(0x34), w(0x35), w(0x36), w(0x37),\
|
||||||
|
w(0x38), w(0x39), w(0x3a), w(0x3b), w(0x3c), w(0x3d), w(0x3e), w(0x3f),\
|
||||||
|
w(0x40), w(0x41), w(0x42), w(0x43), w(0x44), w(0x45), w(0x46), w(0x47),\
|
||||||
|
w(0x48), w(0x49), w(0x4a), w(0x4b), w(0x4c), w(0x4d), w(0x4e), w(0x4f),\
|
||||||
|
w(0x50), w(0x51), w(0x52), w(0x53), w(0x54), w(0x55), w(0x56), w(0x57),\
|
||||||
|
w(0x58), w(0x59), w(0x5a), w(0x5b), w(0x5c), w(0x5d), w(0x5e), w(0x5f),\
|
||||||
|
w(0x60), w(0x61), w(0x62), w(0x63), w(0x64), w(0x65), w(0x66), w(0x67),\
|
||||||
|
w(0x68), w(0x69), w(0x6a), w(0x6b), w(0x6c), w(0x6d), w(0x6e), w(0x6f),\
|
||||||
|
w(0x70), w(0x71), w(0x72), w(0x73), w(0x74), w(0x75), w(0x76), w(0x77),\
|
||||||
|
w(0x78), w(0x79), w(0x7a), w(0x7b), w(0x7c), w(0x7d), w(0x7e), w(0x7f),\
|
||||||
|
w(0x80), w(0x81), w(0x82), w(0x83), w(0x84), w(0x85), w(0x86), w(0x87),\
|
||||||
|
w(0x88), w(0x89), w(0x8a), w(0x8b), w(0x8c), w(0x8d), w(0x8e), w(0x8f),\
|
||||||
|
w(0x90), w(0x91), w(0x92), w(0x93), w(0x94), w(0x95), w(0x96), w(0x97),\
|
||||||
|
w(0x98), w(0x99), w(0x9a), w(0x9b), w(0x9c), w(0x9d), w(0x9e), w(0x9f),\
|
||||||
|
w(0xa0), w(0xa1), w(0xa2), w(0xa3), w(0xa4), w(0xa5), w(0xa6), w(0xa7),\
|
||||||
|
w(0xa8), w(0xa9), w(0xaa), w(0xab), w(0xac), w(0xad), w(0xae), w(0xaf),\
|
||||||
|
w(0xb0), w(0xb1), w(0xb2), w(0xb3), w(0xb4), w(0xb5), w(0xb6), w(0xb7),\
|
||||||
|
w(0xb8), w(0xb9), w(0xba), w(0xbb), w(0xbc), w(0xbd), w(0xbe), w(0xbf),\
|
||||||
|
w(0xc0), w(0xc1), w(0xc2), w(0xc3), w(0xc4), w(0xc5), w(0xc6), w(0xc7),\
|
||||||
|
w(0xc8), w(0xc9), w(0xca), w(0xcb), w(0xcc), w(0xcd), w(0xce), w(0xcf),\
|
||||||
|
w(0xd0), w(0xd1), w(0xd2), w(0xd3), w(0xd4), w(0xd5), w(0xd6), w(0xd7),\
|
||||||
|
w(0xd8), w(0xd9), w(0xda), w(0xdb), w(0xdc), w(0xdd), w(0xde), w(0xdf),\
|
||||||
|
w(0xe0), w(0xe1), w(0xe2), w(0xe3), w(0xe4), w(0xe5), w(0xe6), w(0xe7),\
|
||||||
|
w(0xe8), w(0xe9), w(0xea), w(0xeb), w(0xec), w(0xed), w(0xee), w(0xef),\
|
||||||
|
w(0xf0), w(0xf1), w(0xf2), w(0xf3), w(0xf4), w(0xf5), w(0xf6), w(0xf7),\
|
||||||
|
w(0xf8), w(0xf9), w(0xfa), w(0xfb), w(0xfc), w(0xfd), w(0xfe), w(0xff) }
|
||||||
|
|
||||||
|
static const uint8_t sbox[256] = sb_data(f1);
|
||||||
|
|
||||||
|
#if defined( AES_DEC_PREKEYED )
|
||||||
|
static const uint8_t isbox[256] = isb_data(f1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const uint8_t gfm2_sbox[256] = sb_data(f2);
|
||||||
|
static const uint8_t gfm3_sbox[256] = sb_data(f3);
|
||||||
|
|
||||||
|
#if defined( AES_DEC_PREKEYED )
|
||||||
|
static const uint8_t gfmul_9[256] = mm_data(f9);
|
||||||
|
static const uint8_t gfmul_b[256] = mm_data(fb);
|
||||||
|
static const uint8_t gfmul_d[256] = mm_data(fd);
|
||||||
|
static const uint8_t gfmul_e[256] = mm_data(fe);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define s_box(x) sbox[(x)]
|
||||||
|
#if defined( AES_DEC_PREKEYED )
|
||||||
|
#define is_box(x) isbox[(x)]
|
||||||
|
#endif
|
||||||
|
#define gfm2_sb(x) gfm2_sbox[(x)]
|
||||||
|
#define gfm3_sb(x) gfm3_sbox[(x)]
|
||||||
|
#if defined( AES_DEC_PREKEYED )
|
||||||
|
#define gfm_9(x) gfmul_9[(x)]
|
||||||
|
#define gfm_b(x) gfmul_b[(x)]
|
||||||
|
#define gfm_d(x) gfmul_d[(x)]
|
||||||
|
#define gfm_e(x) gfmul_e[(x)]
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* this is the high bit of x right shifted by 1 */
|
||||||
|
/* position. Since the starting polynomial has */
|
||||||
|
/* 9 bits (0x11b), this right shift keeps the */
|
||||||
|
/* values of all top bits within a byte */
|
||||||
|
|
||||||
|
static uint8_t hibit(const uint8_t x)
|
||||||
|
{ uint8_t r = (uint8_t)((x >> 1) | (x >> 2));
|
||||||
|
|
||||||
|
r |= (r >> 2);
|
||||||
|
r |= (r >> 4);
|
||||||
|
return (r + 1) >> 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* return the inverse of the finite field element x */
|
||||||
|
|
||||||
|
static uint8_t gf_inv(const uint8_t x)
|
||||||
|
{ uint8_t p1 = x, p2 = BPOLY, n1 = hibit(x), n2 = 0x80, v1 = 1, v2 = 0;
|
||||||
|
|
||||||
|
if(x < 2)
|
||||||
|
return x;
|
||||||
|
|
||||||
|
for( ; ; )
|
||||||
|
{
|
||||||
|
if(n1)
|
||||||
|
while(n2 >= n1) /* divide polynomial p2 by p1 */
|
||||||
|
{
|
||||||
|
n2 /= n1; /* shift smaller polynomial left */
|
||||||
|
p2 ^= (p1 * n2) & 0xff; /* and remove from larger one */
|
||||||
|
v2 ^= (v1 * n2); /* shift accumulated value and */
|
||||||
|
n2 = hibit(p2); /* add into result */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return v1;
|
||||||
|
|
||||||
|
if(n2) /* repeat with values swapped */
|
||||||
|
while(n1 >= n2)
|
||||||
|
{
|
||||||
|
n1 /= n2;
|
||||||
|
p1 ^= p2 * n1;
|
||||||
|
v1 ^= v2 * n1;
|
||||||
|
n1 = hibit(p1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return v2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The forward and inverse affine transformations used in the S-box */
|
||||||
|
uint8_t fwd_affine(const uint8_t x)
|
||||||
|
{
|
||||||
|
#if defined( HAVE_UINT_32T )
|
||||||
|
uint32_t w = x;
|
||||||
|
w ^= (w << 1) ^ (w << 2) ^ (w << 3) ^ (w << 4);
|
||||||
|
return 0x63 ^ ((w ^ (w >> 8)) & 0xff);
|
||||||
|
#else
|
||||||
|
return 0x63 ^ x ^ (x << 1) ^ (x << 2) ^ (x << 3) ^ (x << 4)
|
||||||
|
^ (x >> 7) ^ (x >> 6) ^ (x >> 5) ^ (x >> 4);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t inv_affine(const uint8_t x)
|
||||||
|
{
|
||||||
|
#if defined( HAVE_UINT_32T )
|
||||||
|
uint32_t w = x;
|
||||||
|
w = (w << 1) ^ (w << 3) ^ (w << 6);
|
||||||
|
return 0x05 ^ ((w ^ (w >> 8)) & 0xff);
|
||||||
|
#else
|
||||||
|
return 0x05 ^ (x << 1) ^ (x << 3) ^ (x << 6)
|
||||||
|
^ (x >> 7) ^ (x >> 5) ^ (x >> 2);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#define s_box(x) fwd_affine(gf_inv(x))
|
||||||
|
#define is_box(x) gf_inv(inv_affine(x))
|
||||||
|
#define gfm2_sb(x) f2(s_box(x))
|
||||||
|
#define gfm3_sb(x) f3(s_box(x))
|
||||||
|
#define gfm_9(x) f9(x)
|
||||||
|
#define gfm_b(x) fb(x)
|
||||||
|
#define gfm_d(x) fd(x)
|
||||||
|
#define gfm_e(x) fe(x)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( HAVE_MEMCPY )
|
||||||
|
# define block_copy_nn(d, s, l) memcpy(d, s, l)
|
||||||
|
# define block_copy(d, s) memcpy(d, s, N_BLOCK)
|
||||||
|
#else
|
||||||
|
# define block_copy_nn(d, s, l) copy_block_nn(d, s, l)
|
||||||
|
# define block_copy(d, s) copy_block(d, s)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void copy_block( void *d, const void *s )
|
||||||
|
{
|
||||||
|
#if defined( HAVE_UINT_32T )
|
||||||
|
((uint32_t*)d)[ 0] = ((uint32_t*)s)[ 0];
|
||||||
|
((uint32_t*)d)[ 1] = ((uint32_t*)s)[ 1];
|
||||||
|
((uint32_t*)d)[ 2] = ((uint32_t*)s)[ 2];
|
||||||
|
((uint32_t*)d)[ 3] = ((uint32_t*)s)[ 3];
|
||||||
|
#else
|
||||||
|
((uint8_t*)d)[ 0] = ((uint8_t*)s)[ 0];
|
||||||
|
((uint8_t*)d)[ 1] = ((uint8_t*)s)[ 1];
|
||||||
|
((uint8_t*)d)[ 2] = ((uint8_t*)s)[ 2];
|
||||||
|
((uint8_t*)d)[ 3] = ((uint8_t*)s)[ 3];
|
||||||
|
((uint8_t*)d)[ 4] = ((uint8_t*)s)[ 4];
|
||||||
|
((uint8_t*)d)[ 5] = ((uint8_t*)s)[ 5];
|
||||||
|
((uint8_t*)d)[ 6] = ((uint8_t*)s)[ 6];
|
||||||
|
((uint8_t*)d)[ 7] = ((uint8_t*)s)[ 7];
|
||||||
|
((uint8_t*)d)[ 8] = ((uint8_t*)s)[ 8];
|
||||||
|
((uint8_t*)d)[ 9] = ((uint8_t*)s)[ 9];
|
||||||
|
((uint8_t*)d)[10] = ((uint8_t*)s)[10];
|
||||||
|
((uint8_t*)d)[11] = ((uint8_t*)s)[11];
|
||||||
|
((uint8_t*)d)[12] = ((uint8_t*)s)[12];
|
||||||
|
((uint8_t*)d)[13] = ((uint8_t*)s)[13];
|
||||||
|
((uint8_t*)d)[14] = ((uint8_t*)s)[14];
|
||||||
|
((uint8_t*)d)[15] = ((uint8_t*)s)[15];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void copy_block_nn( uint8_t * d, const uint8_t *s, uint8_t nn )
|
||||||
|
{
|
||||||
|
while( nn-- )
|
||||||
|
//*((uint8_t*)d)++ = *((uint8_t*)s)++;
|
||||||
|
*d++ = *s++;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void xor_block( void *d, const void *s )
|
||||||
|
{
|
||||||
|
#if defined( HAVE_UINT_32T )
|
||||||
|
((uint32_t*)d)[ 0] ^= ((uint32_t*)s)[ 0];
|
||||||
|
((uint32_t*)d)[ 1] ^= ((uint32_t*)s)[ 1];
|
||||||
|
((uint32_t*)d)[ 2] ^= ((uint32_t*)s)[ 2];
|
||||||
|
((uint32_t*)d)[ 3] ^= ((uint32_t*)s)[ 3];
|
||||||
|
#else
|
||||||
|
((uint8_t*)d)[ 0] ^= ((uint8_t*)s)[ 0];
|
||||||
|
((uint8_t*)d)[ 1] ^= ((uint8_t*)s)[ 1];
|
||||||
|
((uint8_t*)d)[ 2] ^= ((uint8_t*)s)[ 2];
|
||||||
|
((uint8_t*)d)[ 3] ^= ((uint8_t*)s)[ 3];
|
||||||
|
((uint8_t*)d)[ 4] ^= ((uint8_t*)s)[ 4];
|
||||||
|
((uint8_t*)d)[ 5] ^= ((uint8_t*)s)[ 5];
|
||||||
|
((uint8_t*)d)[ 6] ^= ((uint8_t*)s)[ 6];
|
||||||
|
((uint8_t*)d)[ 7] ^= ((uint8_t*)s)[ 7];
|
||||||
|
((uint8_t*)d)[ 8] ^= ((uint8_t*)s)[ 8];
|
||||||
|
((uint8_t*)d)[ 9] ^= ((uint8_t*)s)[ 9];
|
||||||
|
((uint8_t*)d)[10] ^= ((uint8_t*)s)[10];
|
||||||
|
((uint8_t*)d)[11] ^= ((uint8_t*)s)[11];
|
||||||
|
((uint8_t*)d)[12] ^= ((uint8_t*)s)[12];
|
||||||
|
((uint8_t*)d)[13] ^= ((uint8_t*)s)[13];
|
||||||
|
((uint8_t*)d)[14] ^= ((uint8_t*)s)[14];
|
||||||
|
((uint8_t*)d)[15] ^= ((uint8_t*)s)[15];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void copy_and_key( void *d, const void *s, const void *k )
|
||||||
|
{
|
||||||
|
#if defined( HAVE_UINT_32T )
|
||||||
|
((uint32_t*)d)[ 0] = ((uint32_t*)s)[ 0] ^ ((uint32_t*)k)[ 0];
|
||||||
|
((uint32_t*)d)[ 1] = ((uint32_t*)s)[ 1] ^ ((uint32_t*)k)[ 1];
|
||||||
|
((uint32_t*)d)[ 2] = ((uint32_t*)s)[ 2] ^ ((uint32_t*)k)[ 2];
|
||||||
|
((uint32_t*)d)[ 3] = ((uint32_t*)s)[ 3] ^ ((uint32_t*)k)[ 3];
|
||||||
|
#elif 1
|
||||||
|
((uint8_t*)d)[ 0] = ((uint8_t*)s)[ 0] ^ ((uint8_t*)k)[ 0];
|
||||||
|
((uint8_t*)d)[ 1] = ((uint8_t*)s)[ 1] ^ ((uint8_t*)k)[ 1];
|
||||||
|
((uint8_t*)d)[ 2] = ((uint8_t*)s)[ 2] ^ ((uint8_t*)k)[ 2];
|
||||||
|
((uint8_t*)d)[ 3] = ((uint8_t*)s)[ 3] ^ ((uint8_t*)k)[ 3];
|
||||||
|
((uint8_t*)d)[ 4] = ((uint8_t*)s)[ 4] ^ ((uint8_t*)k)[ 4];
|
||||||
|
((uint8_t*)d)[ 5] = ((uint8_t*)s)[ 5] ^ ((uint8_t*)k)[ 5];
|
||||||
|
((uint8_t*)d)[ 6] = ((uint8_t*)s)[ 6] ^ ((uint8_t*)k)[ 6];
|
||||||
|
((uint8_t*)d)[ 7] = ((uint8_t*)s)[ 7] ^ ((uint8_t*)k)[ 7];
|
||||||
|
((uint8_t*)d)[ 8] = ((uint8_t*)s)[ 8] ^ ((uint8_t*)k)[ 8];
|
||||||
|
((uint8_t*)d)[ 9] = ((uint8_t*)s)[ 9] ^ ((uint8_t*)k)[ 9];
|
||||||
|
((uint8_t*)d)[10] = ((uint8_t*)s)[10] ^ ((uint8_t*)k)[10];
|
||||||
|
((uint8_t*)d)[11] = ((uint8_t*)s)[11] ^ ((uint8_t*)k)[11];
|
||||||
|
((uint8_t*)d)[12] = ((uint8_t*)s)[12] ^ ((uint8_t*)k)[12];
|
||||||
|
((uint8_t*)d)[13] = ((uint8_t*)s)[13] ^ ((uint8_t*)k)[13];
|
||||||
|
((uint8_t*)d)[14] = ((uint8_t*)s)[14] ^ ((uint8_t*)k)[14];
|
||||||
|
((uint8_t*)d)[15] = ((uint8_t*)s)[15] ^ ((uint8_t*)k)[15];
|
||||||
|
#else
|
||||||
|
block_copy(d, s);
|
||||||
|
xor_block(d, k);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void add_round_key( uint8_t d[N_BLOCK], const uint8_t k[N_BLOCK] )
|
||||||
|
{
|
||||||
|
xor_block(d, k);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void shift_sub_rows( uint8_t st[N_BLOCK] )
|
||||||
|
{ uint8_t tt;
|
||||||
|
|
||||||
|
st[ 0] = s_box(st[ 0]); st[ 4] = s_box(st[ 4]);
|
||||||
|
st[ 8] = s_box(st[ 8]); st[12] = s_box(st[12]);
|
||||||
|
|
||||||
|
tt = st[1]; st[ 1] = s_box(st[ 5]); st[ 5] = s_box(st[ 9]);
|
||||||
|
st[ 9] = s_box(st[13]); st[13] = s_box( tt );
|
||||||
|
|
||||||
|
tt = st[2]; st[ 2] = s_box(st[10]); st[10] = s_box( tt );
|
||||||
|
tt = st[6]; st[ 6] = s_box(st[14]); st[14] = s_box( tt );
|
||||||
|
|
||||||
|
tt = st[15]; st[15] = s_box(st[11]); st[11] = s_box(st[ 7]);
|
||||||
|
st[ 7] = s_box(st[ 3]); st[ 3] = s_box( tt );
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined( AES_DEC_PREKEYED )
|
||||||
|
|
||||||
|
static void inv_shift_sub_rows( uint8_t st[N_BLOCK] )
|
||||||
|
{ uint8_t tt;
|
||||||
|
|
||||||
|
st[ 0] = is_box(st[ 0]); st[ 4] = is_box(st[ 4]);
|
||||||
|
st[ 8] = is_box(st[ 8]); st[12] = is_box(st[12]);
|
||||||
|
|
||||||
|
tt = st[13]; st[13] = is_box(st[9]); st[ 9] = is_box(st[5]);
|
||||||
|
st[ 5] = is_box(st[1]); st[ 1] = is_box( tt );
|
||||||
|
|
||||||
|
tt = st[2]; st[ 2] = is_box(st[10]); st[10] = is_box( tt );
|
||||||
|
tt = st[6]; st[ 6] = is_box(st[14]); st[14] = is_box( tt );
|
||||||
|
|
||||||
|
tt = st[3]; st[ 3] = is_box(st[ 7]); st[ 7] = is_box(st[11]);
|
||||||
|
st[11] = is_box(st[15]); st[15] = is_box( tt );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( VERSION_1 )
|
||||||
|
static void mix_sub_columns( uint8_t dt[N_BLOCK] )
|
||||||
|
{ uint8_t st[N_BLOCK];
|
||||||
|
block_copy(st, dt);
|
||||||
|
#else
|
||||||
|
static void mix_sub_columns( uint8_t dt[N_BLOCK], uint8_t st[N_BLOCK] )
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
dt[ 0] = gfm2_sb(st[0]) ^ gfm3_sb(st[5]) ^ s_box(st[10]) ^ s_box(st[15]);
|
||||||
|
dt[ 1] = s_box(st[0]) ^ gfm2_sb(st[5]) ^ gfm3_sb(st[10]) ^ s_box(st[15]);
|
||||||
|
dt[ 2] = s_box(st[0]) ^ s_box(st[5]) ^ gfm2_sb(st[10]) ^ gfm3_sb(st[15]);
|
||||||
|
dt[ 3] = gfm3_sb(st[0]) ^ s_box(st[5]) ^ s_box(st[10]) ^ gfm2_sb(st[15]);
|
||||||
|
|
||||||
|
dt[ 4] = gfm2_sb(st[4]) ^ gfm3_sb(st[9]) ^ s_box(st[14]) ^ s_box(st[3]);
|
||||||
|
dt[ 5] = s_box(st[4]) ^ gfm2_sb(st[9]) ^ gfm3_sb(st[14]) ^ s_box(st[3]);
|
||||||
|
dt[ 6] = s_box(st[4]) ^ s_box(st[9]) ^ gfm2_sb(st[14]) ^ gfm3_sb(st[3]);
|
||||||
|
dt[ 7] = gfm3_sb(st[4]) ^ s_box(st[9]) ^ s_box(st[14]) ^ gfm2_sb(st[3]);
|
||||||
|
|
||||||
|
dt[ 8] = gfm2_sb(st[8]) ^ gfm3_sb(st[13]) ^ s_box(st[2]) ^ s_box(st[7]);
|
||||||
|
dt[ 9] = s_box(st[8]) ^ gfm2_sb(st[13]) ^ gfm3_sb(st[2]) ^ s_box(st[7]);
|
||||||
|
dt[10] = s_box(st[8]) ^ s_box(st[13]) ^ gfm2_sb(st[2]) ^ gfm3_sb(st[7]);
|
||||||
|
dt[11] = gfm3_sb(st[8]) ^ s_box(st[13]) ^ s_box(st[2]) ^ gfm2_sb(st[7]);
|
||||||
|
|
||||||
|
dt[12] = gfm2_sb(st[12]) ^ gfm3_sb(st[1]) ^ s_box(st[6]) ^ s_box(st[11]);
|
||||||
|
dt[13] = s_box(st[12]) ^ gfm2_sb(st[1]) ^ gfm3_sb(st[6]) ^ s_box(st[11]);
|
||||||
|
dt[14] = s_box(st[12]) ^ s_box(st[1]) ^ gfm2_sb(st[6]) ^ gfm3_sb(st[11]);
|
||||||
|
dt[15] = gfm3_sb(st[12]) ^ s_box(st[1]) ^ s_box(st[6]) ^ gfm2_sb(st[11]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined( AES_DEC_PREKEYED )
|
||||||
|
|
||||||
|
#if defined( VERSION_1 )
|
||||||
|
static void inv_mix_sub_columns( uint8_t dt[N_BLOCK] )
|
||||||
|
{ uint8_t st[N_BLOCK];
|
||||||
|
block_copy(st, dt);
|
||||||
|
#else
|
||||||
|
static void inv_mix_sub_columns( uint8_t dt[N_BLOCK], uint8_t st[N_BLOCK] )
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
dt[ 0] = is_box(gfm_e(st[ 0]) ^ gfm_b(st[ 1]) ^ gfm_d(st[ 2]) ^ gfm_9(st[ 3]));
|
||||||
|
dt[ 5] = is_box(gfm_9(st[ 0]) ^ gfm_e(st[ 1]) ^ gfm_b(st[ 2]) ^ gfm_d(st[ 3]));
|
||||||
|
dt[10] = is_box(gfm_d(st[ 0]) ^ gfm_9(st[ 1]) ^ gfm_e(st[ 2]) ^ gfm_b(st[ 3]));
|
||||||
|
dt[15] = is_box(gfm_b(st[ 0]) ^ gfm_d(st[ 1]) ^ gfm_9(st[ 2]) ^ gfm_e(st[ 3]));
|
||||||
|
|
||||||
|
dt[ 4] = is_box(gfm_e(st[ 4]) ^ gfm_b(st[ 5]) ^ gfm_d(st[ 6]) ^ gfm_9(st[ 7]));
|
||||||
|
dt[ 9] = is_box(gfm_9(st[ 4]) ^ gfm_e(st[ 5]) ^ gfm_b(st[ 6]) ^ gfm_d(st[ 7]));
|
||||||
|
dt[14] = is_box(gfm_d(st[ 4]) ^ gfm_9(st[ 5]) ^ gfm_e(st[ 6]) ^ gfm_b(st[ 7]));
|
||||||
|
dt[ 3] = is_box(gfm_b(st[ 4]) ^ gfm_d(st[ 5]) ^ gfm_9(st[ 6]) ^ gfm_e(st[ 7]));
|
||||||
|
|
||||||
|
dt[ 8] = is_box(gfm_e(st[ 8]) ^ gfm_b(st[ 9]) ^ gfm_d(st[10]) ^ gfm_9(st[11]));
|
||||||
|
dt[13] = is_box(gfm_9(st[ 8]) ^ gfm_e(st[ 9]) ^ gfm_b(st[10]) ^ gfm_d(st[11]));
|
||||||
|
dt[ 2] = is_box(gfm_d(st[ 8]) ^ gfm_9(st[ 9]) ^ gfm_e(st[10]) ^ gfm_b(st[11]));
|
||||||
|
dt[ 7] = is_box(gfm_b(st[ 8]) ^ gfm_d(st[ 9]) ^ gfm_9(st[10]) ^ gfm_e(st[11]));
|
||||||
|
|
||||||
|
dt[12] = is_box(gfm_e(st[12]) ^ gfm_b(st[13]) ^ gfm_d(st[14]) ^ gfm_9(st[15]));
|
||||||
|
dt[ 1] = is_box(gfm_9(st[12]) ^ gfm_e(st[13]) ^ gfm_b(st[14]) ^ gfm_d(st[15]));
|
||||||
|
dt[ 6] = is_box(gfm_d(st[12]) ^ gfm_9(st[13]) ^ gfm_e(st[14]) ^ gfm_b(st[15]));
|
||||||
|
dt[11] = is_box(gfm_b(st[12]) ^ gfm_d(st[13]) ^ gfm_9(st[14]) ^ gfm_e(st[15]));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_ENC_PREKEYED ) || defined( AES_DEC_PREKEYED )
|
||||||
|
|
||||||
|
/* Set the cipher key for the pre-keyed version */
|
||||||
|
|
||||||
|
return_type aes_set_key( const uint8_t key[], length_type keylen, aes_context ctx[1] )
|
||||||
|
{
|
||||||
|
uint8_t cc, rc, hi;
|
||||||
|
|
||||||
|
switch( keylen )
|
||||||
|
{
|
||||||
|
case 16:
|
||||||
|
case 24:
|
||||||
|
case 32:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ctx->rnd = 0;
|
||||||
|
return ( uint8_t )-1;
|
||||||
|
}
|
||||||
|
block_copy_nn(ctx->ksch, key, keylen);
|
||||||
|
hi = (keylen + 28) << 2;
|
||||||
|
ctx->rnd = (hi >> 4) - 1;
|
||||||
|
for( cc = keylen, rc = 1; cc < hi; cc += 4 )
|
||||||
|
{ uint8_t tt, t0, t1, t2, t3;
|
||||||
|
|
||||||
|
t0 = ctx->ksch[cc - 4];
|
||||||
|
t1 = ctx->ksch[cc - 3];
|
||||||
|
t2 = ctx->ksch[cc - 2];
|
||||||
|
t3 = ctx->ksch[cc - 1];
|
||||||
|
if( cc % keylen == 0 )
|
||||||
|
{
|
||||||
|
tt = t0;
|
||||||
|
t0 = s_box(t1) ^ rc;
|
||||||
|
t1 = s_box(t2);
|
||||||
|
t2 = s_box(t3);
|
||||||
|
t3 = s_box(tt);
|
||||||
|
rc = f2(rc);
|
||||||
|
}
|
||||||
|
else if( keylen > 24 && cc % keylen == 16 )
|
||||||
|
{
|
||||||
|
t0 = s_box(t0);
|
||||||
|
t1 = s_box(t1);
|
||||||
|
t2 = s_box(t2);
|
||||||
|
t3 = s_box(t3);
|
||||||
|
}
|
||||||
|
tt = cc - keylen;
|
||||||
|
ctx->ksch[cc + 0] = ctx->ksch[tt + 0] ^ t0;
|
||||||
|
ctx->ksch[cc + 1] = ctx->ksch[tt + 1] ^ t1;
|
||||||
|
ctx->ksch[cc + 2] = ctx->ksch[tt + 2] ^ t2;
|
||||||
|
ctx->ksch[cc + 3] = ctx->ksch[tt + 3] ^ t3;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_ENC_PREKEYED )
|
||||||
|
|
||||||
|
/* Encrypt a single block of 16 bytes */
|
||||||
|
|
||||||
|
return_type aes_encrypt( const uint8_t in[N_BLOCK], uint8_t out[N_BLOCK], const aes_context ctx[1] )
|
||||||
|
{
|
||||||
|
if( ctx->rnd )
|
||||||
|
{
|
||||||
|
uint8_t s1[N_BLOCK], r;
|
||||||
|
copy_and_key( s1, in, ctx->ksch );
|
||||||
|
|
||||||
|
for( r = 1 ; r < ctx->rnd ; ++r )
|
||||||
|
#if defined( VERSION_1 )
|
||||||
|
{
|
||||||
|
mix_sub_columns( s1 );
|
||||||
|
add_round_key( s1, ctx->ksch + r * N_BLOCK);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
{ uint8_t s2[N_BLOCK];
|
||||||
|
mix_sub_columns( s2, s1 );
|
||||||
|
copy_and_key( s1, s2, ctx->ksch + r * N_BLOCK);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
shift_sub_rows( s1 );
|
||||||
|
copy_and_key( out, s1, ctx->ksch + r * N_BLOCK );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return ( uint8_t )-1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CBC encrypt a number of blocks (input and return an IV) */
|
||||||
|
|
||||||
|
return_type aes_cbc_encrypt( const uint8_t *in, uint8_t *out,
|
||||||
|
int32_t n_block, uint8_t iv[N_BLOCK], const aes_context ctx[1] )
|
||||||
|
{
|
||||||
|
|
||||||
|
while(n_block--)
|
||||||
|
{
|
||||||
|
xor_block(iv, in);
|
||||||
|
if(aes_encrypt(iv, iv, ctx) != EXIT_SUCCESS)
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
//memcpy(out, iv, N_BLOCK);
|
||||||
|
block_copy(out, iv);
|
||||||
|
in += N_BLOCK;
|
||||||
|
out += N_BLOCK;
|
||||||
|
}
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_DEC_PREKEYED )
|
||||||
|
|
||||||
|
/* Decrypt a single block of 16 bytes */
|
||||||
|
|
||||||
|
return_type aes_decrypt( const uint8_t in[N_BLOCK], uint8_t out[N_BLOCK], const aes_context ctx[1] )
|
||||||
|
{
|
||||||
|
if( ctx->rnd )
|
||||||
|
{
|
||||||
|
uint8_t s1[N_BLOCK], r;
|
||||||
|
copy_and_key( s1, in, ctx->ksch + ctx->rnd * N_BLOCK );
|
||||||
|
inv_shift_sub_rows( s1 );
|
||||||
|
|
||||||
|
for( r = ctx->rnd ; --r ; )
|
||||||
|
#if defined( VERSION_1 )
|
||||||
|
{
|
||||||
|
add_round_key( s1, ctx->ksch + r * N_BLOCK );
|
||||||
|
inv_mix_sub_columns( s1 );
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
{ uint8_t s2[N_BLOCK];
|
||||||
|
copy_and_key( s2, s1, ctx->ksch + r * N_BLOCK );
|
||||||
|
inv_mix_sub_columns( s1, s2 );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
copy_and_key( out, s1, ctx->ksch );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CBC decrypt a number of blocks (input and return an IV) */
|
||||||
|
|
||||||
|
return_type aes_cbc_decrypt( const uint8_t *in, uint8_t *out,
|
||||||
|
int32_t n_block, uint8_t iv[N_BLOCK], const aes_context ctx[1] )
|
||||||
|
{
|
||||||
|
while(n_block--)
|
||||||
|
{ uint8_t tmp[N_BLOCK];
|
||||||
|
|
||||||
|
//memcpy(tmp, in, N_BLOCK);
|
||||||
|
block_copy(tmp, in);
|
||||||
|
if(aes_decrypt(in, out, ctx) != EXIT_SUCCESS)
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
xor_block(out, iv);
|
||||||
|
//memcpy(iv, tmp, N_BLOCK);
|
||||||
|
block_copy(iv, tmp);
|
||||||
|
in += N_BLOCK;
|
||||||
|
out += N_BLOCK;
|
||||||
|
}
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_ENC_128_OTFK )
|
||||||
|
|
||||||
|
/* The 'on the fly' encryption key update for for 128 bit keys */
|
||||||
|
|
||||||
|
static void update_encrypt_key_128( uint8_t k[N_BLOCK], uint8_t *rc )
|
||||||
|
{ uint8_t cc;
|
||||||
|
|
||||||
|
k[0] ^= s_box(k[13]) ^ *rc;
|
||||||
|
k[1] ^= s_box(k[14]);
|
||||||
|
k[2] ^= s_box(k[15]);
|
||||||
|
k[3] ^= s_box(k[12]);
|
||||||
|
*rc = f2( *rc );
|
||||||
|
|
||||||
|
for(cc = 4; cc < 16; cc += 4 )
|
||||||
|
{
|
||||||
|
k[cc + 0] ^= k[cc - 4];
|
||||||
|
k[cc + 1] ^= k[cc - 3];
|
||||||
|
k[cc + 2] ^= k[cc - 2];
|
||||||
|
k[cc + 3] ^= k[cc - 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Encrypt a single block of 16 bytes with 'on the fly' 128 bit keying */
|
||||||
|
|
||||||
|
void aes_encrypt_128( const uint8_t in[N_BLOCK], uint8_t out[N_BLOCK],
|
||||||
|
const uint8_t key[N_BLOCK], uint8_t o_key[N_BLOCK] )
|
||||||
|
{ uint8_t s1[N_BLOCK], r, rc = 1;
|
||||||
|
|
||||||
|
if(o_key != key)
|
||||||
|
block_copy( o_key, key );
|
||||||
|
copy_and_key( s1, in, o_key );
|
||||||
|
|
||||||
|
for( r = 1 ; r < 10 ; ++r )
|
||||||
|
#if defined( VERSION_1 )
|
||||||
|
{
|
||||||
|
mix_sub_columns( s1 );
|
||||||
|
update_encrypt_key_128( o_key, &rc );
|
||||||
|
add_round_key( s1, o_key );
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
{ uint8_t s2[N_BLOCK];
|
||||||
|
mix_sub_columns( s2, s1 );
|
||||||
|
update_encrypt_key_128( o_key, &rc );
|
||||||
|
copy_and_key( s1, s2, o_key );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
shift_sub_rows( s1 );
|
||||||
|
update_encrypt_key_128( o_key, &rc );
|
||||||
|
copy_and_key( out, s1, o_key );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_DEC_128_OTFK )
|
||||||
|
|
||||||
|
/* The 'on the fly' decryption key update for for 128 bit keys */
|
||||||
|
|
||||||
|
static void update_decrypt_key_128( uint8_t k[N_BLOCK], uint8_t *rc )
|
||||||
|
{ uint8_t cc;
|
||||||
|
|
||||||
|
for( cc = 12; cc > 0; cc -= 4 )
|
||||||
|
{
|
||||||
|
k[cc + 0] ^= k[cc - 4];
|
||||||
|
k[cc + 1] ^= k[cc - 3];
|
||||||
|
k[cc + 2] ^= k[cc - 2];
|
||||||
|
k[cc + 3] ^= k[cc - 1];
|
||||||
|
}
|
||||||
|
*rc = d2(*rc);
|
||||||
|
k[0] ^= s_box(k[13]) ^ *rc;
|
||||||
|
k[1] ^= s_box(k[14]);
|
||||||
|
k[2] ^= s_box(k[15]);
|
||||||
|
k[3] ^= s_box(k[12]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Decrypt a single block of 16 bytes with 'on the fly' 128 bit keying */
|
||||||
|
|
||||||
|
void aes_decrypt_128( const uint8_t in[N_BLOCK], uint8_t out[N_BLOCK],
|
||||||
|
const uint8_t key[N_BLOCK], uint8_t o_key[N_BLOCK] )
|
||||||
|
{
|
||||||
|
uint8_t s1[N_BLOCK], r, rc = 0x6c;
|
||||||
|
if(o_key != key)
|
||||||
|
block_copy( o_key, key );
|
||||||
|
|
||||||
|
copy_and_key( s1, in, o_key );
|
||||||
|
inv_shift_sub_rows( s1 );
|
||||||
|
|
||||||
|
for( r = 10 ; --r ; )
|
||||||
|
#if defined( VERSION_1 )
|
||||||
|
{
|
||||||
|
update_decrypt_key_128( o_key, &rc );
|
||||||
|
add_round_key( s1, o_key );
|
||||||
|
inv_mix_sub_columns( s1 );
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
{ uint8_t s2[N_BLOCK];
|
||||||
|
update_decrypt_key_128( o_key, &rc );
|
||||||
|
copy_and_key( s2, s1, o_key );
|
||||||
|
inv_mix_sub_columns( s1, s2 );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
update_decrypt_key_128( o_key, &rc );
|
||||||
|
copy_and_key( out, s1, o_key );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_ENC_256_OTFK )
|
||||||
|
|
||||||
|
/* The 'on the fly' encryption key update for for 256 bit keys */
|
||||||
|
|
||||||
|
static void update_encrypt_key_256( uint8_t k[2 * N_BLOCK], uint8_t *rc )
|
||||||
|
{ uint8_t cc;
|
||||||
|
|
||||||
|
k[0] ^= s_box(k[29]) ^ *rc;
|
||||||
|
k[1] ^= s_box(k[30]);
|
||||||
|
k[2] ^= s_box(k[31]);
|
||||||
|
k[3] ^= s_box(k[28]);
|
||||||
|
*rc = f2( *rc );
|
||||||
|
|
||||||
|
for(cc = 4; cc < 16; cc += 4)
|
||||||
|
{
|
||||||
|
k[cc + 0] ^= k[cc - 4];
|
||||||
|
k[cc + 1] ^= k[cc - 3];
|
||||||
|
k[cc + 2] ^= k[cc - 2];
|
||||||
|
k[cc + 3] ^= k[cc - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
k[16] ^= s_box(k[12]);
|
||||||
|
k[17] ^= s_box(k[13]);
|
||||||
|
k[18] ^= s_box(k[14]);
|
||||||
|
k[19] ^= s_box(k[15]);
|
||||||
|
|
||||||
|
for( cc = 20; cc < 32; cc += 4 )
|
||||||
|
{
|
||||||
|
k[cc + 0] ^= k[cc - 4];
|
||||||
|
k[cc + 1] ^= k[cc - 3];
|
||||||
|
k[cc + 2] ^= k[cc - 2];
|
||||||
|
k[cc + 3] ^= k[cc - 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Encrypt a single block of 16 bytes with 'on the fly' 256 bit keying */
|
||||||
|
|
||||||
|
void aes_encrypt_256( const uint8_t in[N_BLOCK], uint8_t out[N_BLOCK],
|
||||||
|
const uint8_t key[2 * N_BLOCK], uint8_t o_key[2 * N_BLOCK] )
|
||||||
|
{
|
||||||
|
uint8_t s1[N_BLOCK], r, rc = 1;
|
||||||
|
if(o_key != key)
|
||||||
|
{
|
||||||
|
block_copy( o_key, key );
|
||||||
|
block_copy( o_key + 16, key + 16 );
|
||||||
|
}
|
||||||
|
copy_and_key( s1, in, o_key );
|
||||||
|
|
||||||
|
for( r = 1 ; r < 14 ; ++r )
|
||||||
|
#if defined( VERSION_1 )
|
||||||
|
{
|
||||||
|
mix_sub_columns(s1);
|
||||||
|
if( r & 1 )
|
||||||
|
add_round_key( s1, o_key + 16 );
|
||||||
|
else
|
||||||
|
{
|
||||||
|
update_encrypt_key_256( o_key, &rc );
|
||||||
|
add_round_key( s1, o_key );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
{ uint8_t s2[N_BLOCK];
|
||||||
|
mix_sub_columns( s2, s1 );
|
||||||
|
if( r & 1 )
|
||||||
|
copy_and_key( s1, s2, o_key + 16 );
|
||||||
|
else
|
||||||
|
{
|
||||||
|
update_encrypt_key_256( o_key, &rc );
|
||||||
|
copy_and_key( s1, s2, o_key );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
shift_sub_rows( s1 );
|
||||||
|
update_encrypt_key_256( o_key, &rc );
|
||||||
|
copy_and_key( out, s1, o_key );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_DEC_256_OTFK )
|
||||||
|
|
||||||
|
/* The 'on the fly' encryption key update for for 256 bit keys */
|
||||||
|
|
||||||
|
static void update_decrypt_key_256( uint8_t k[2 * N_BLOCK], uint8_t *rc )
|
||||||
|
{ uint8_t cc;
|
||||||
|
|
||||||
|
for(cc = 28; cc > 16; cc -= 4)
|
||||||
|
{
|
||||||
|
k[cc + 0] ^= k[cc - 4];
|
||||||
|
k[cc + 1] ^= k[cc - 3];
|
||||||
|
k[cc + 2] ^= k[cc - 2];
|
||||||
|
k[cc + 3] ^= k[cc - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
k[16] ^= s_box(k[12]);
|
||||||
|
k[17] ^= s_box(k[13]);
|
||||||
|
k[18] ^= s_box(k[14]);
|
||||||
|
k[19] ^= s_box(k[15]);
|
||||||
|
|
||||||
|
for(cc = 12; cc > 0; cc -= 4)
|
||||||
|
{
|
||||||
|
k[cc + 0] ^= k[cc - 4];
|
||||||
|
k[cc + 1] ^= k[cc - 3];
|
||||||
|
k[cc + 2] ^= k[cc - 2];
|
||||||
|
k[cc + 3] ^= k[cc - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
*rc = d2(*rc);
|
||||||
|
k[0] ^= s_box(k[29]) ^ *rc;
|
||||||
|
k[1] ^= s_box(k[30]);
|
||||||
|
k[2] ^= s_box(k[31]);
|
||||||
|
k[3] ^= s_box(k[28]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Decrypt a single block of 16 bytes with 'on the fly'
|
||||||
|
256 bit keying
|
||||||
|
*/
|
||||||
|
void aes_decrypt_256( const uint8_t in[N_BLOCK], uint8_t out[N_BLOCK],
|
||||||
|
const uint8_t key[2 * N_BLOCK], uint8_t o_key[2 * N_BLOCK] )
|
||||||
|
{
|
||||||
|
uint8_t s1[N_BLOCK], r, rc = 0x80;
|
||||||
|
|
||||||
|
if(o_key != key)
|
||||||
|
{
|
||||||
|
block_copy( o_key, key );
|
||||||
|
block_copy( o_key + 16, key + 16 );
|
||||||
|
}
|
||||||
|
|
||||||
|
copy_and_key( s1, in, o_key );
|
||||||
|
inv_shift_sub_rows( s1 );
|
||||||
|
|
||||||
|
for( r = 14 ; --r ; )
|
||||||
|
#if defined( VERSION_1 )
|
||||||
|
{
|
||||||
|
if( ( r & 1 ) )
|
||||||
|
{
|
||||||
|
update_decrypt_key_256( o_key, &rc );
|
||||||
|
add_round_key( s1, o_key + 16 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
add_round_key( s1, o_key );
|
||||||
|
inv_mix_sub_columns( s1 );
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
{ uint8_t s2[N_BLOCK];
|
||||||
|
if( ( r & 1 ) )
|
||||||
|
{
|
||||||
|
update_decrypt_key_256( o_key, &rc );
|
||||||
|
copy_and_key( s2, s1, o_key + 16 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
copy_and_key( s2, s1, o_key );
|
||||||
|
inv_mix_sub_columns( s1, s2 );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
copy_and_key( out, s1, o_key );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,160 @@
|
|||||||
|
/*
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved.
|
||||||
|
|
||||||
|
LICENSE TERMS
|
||||||
|
|
||||||
|
The redistribution and use of this software (with or without changes)
|
||||||
|
is allowed without the payment of fees or royalties provided that:
|
||||||
|
|
||||||
|
1. source code distributions include the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer;
|
||||||
|
|
||||||
|
2. binary distributions include the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer in their documentation;
|
||||||
|
|
||||||
|
3. the name of the copyright holder is not used to endorse products
|
||||||
|
built using this software without specific written permission.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
|
||||||
|
This software is provided 'as is' with no explicit or implied warranties
|
||||||
|
in respect of its properties, including, but not limited to, correctness
|
||||||
|
and/or fitness for purpose.
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
Issue 09/09/2006
|
||||||
|
|
||||||
|
This is an AES implementation that uses only 8-bit byte operations on the
|
||||||
|
cipher state.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AES_H
|
||||||
|
#define AES_H
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
# define AES_ENC_PREKEYED /* AES encryption with a precomputed key schedule */
|
||||||
|
#endif
|
||||||
|
#if 1
|
||||||
|
# define AES_DEC_PREKEYED /* AES decryption with a precomputed key schedule */
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
# define AES_ENC_128_OTFK /* AES encryption with 'on the fly' 128 bit keying */
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
# define AES_DEC_128_OTFK /* AES decryption with 'on the fly' 128 bit keying */
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
# define AES_ENC_256_OTFK /* AES encryption with 'on the fly' 256 bit keying */
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
# define AES_DEC_256_OTFK /* AES decryption with 'on the fly' 256 bit keying */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define N_ROW 4
|
||||||
|
#define N_COL 4
|
||||||
|
#define N_BLOCK (N_ROW * N_COL)
|
||||||
|
#define N_MAX_ROUNDS 14
|
||||||
|
|
||||||
|
typedef uint8_t return_type;
|
||||||
|
|
||||||
|
/* Warning: The key length for 256 bit keys overflows a byte
|
||||||
|
(see comment below)
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef uint8_t length_type;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{ uint8_t ksch[(N_MAX_ROUNDS + 1) * N_BLOCK];
|
||||||
|
uint8_t rnd;
|
||||||
|
} aes_context;
|
||||||
|
|
||||||
|
/* The following calls are for a precomputed key schedule
|
||||||
|
|
||||||
|
NOTE: If the length_type used for the key length is an
|
||||||
|
unsigned 8-bit character, a key length of 256 bits must
|
||||||
|
be entered as a length in bytes (valid inputs are hence
|
||||||
|
128, 192, 16, 24 and 32).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined( AES_ENC_PREKEYED ) || defined( AES_DEC_PREKEYED )
|
||||||
|
|
||||||
|
return_type aes_set_key( const uint8_t key[],
|
||||||
|
length_type keylen,
|
||||||
|
aes_context ctx[1] );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_ENC_PREKEYED )
|
||||||
|
|
||||||
|
return_type aes_encrypt( const uint8_t in[N_BLOCK],
|
||||||
|
uint8_t out[N_BLOCK],
|
||||||
|
const aes_context ctx[1] );
|
||||||
|
|
||||||
|
return_type aes_cbc_encrypt( const uint8_t *in,
|
||||||
|
uint8_t *out,
|
||||||
|
int32_t n_block,
|
||||||
|
uint8_t iv[N_BLOCK],
|
||||||
|
const aes_context ctx[1] );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_DEC_PREKEYED )
|
||||||
|
|
||||||
|
return_type aes_decrypt( const uint8_t in[N_BLOCK],
|
||||||
|
uint8_t out[N_BLOCK],
|
||||||
|
const aes_context ctx[1] );
|
||||||
|
|
||||||
|
return_type aes_cbc_decrypt( const uint8_t *in,
|
||||||
|
uint8_t *out,
|
||||||
|
int32_t n_block,
|
||||||
|
uint8_t iv[N_BLOCK],
|
||||||
|
const aes_context ctx[1] );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The following calls are for 'on the fly' keying. In this case the
|
||||||
|
encryption and decryption keys are different.
|
||||||
|
|
||||||
|
The encryption subroutines take a key in an array of bytes in
|
||||||
|
key[L] where L is 16, 24 or 32 bytes for key lengths of 128,
|
||||||
|
192, and 256 bits respectively. They then encrypts the input
|
||||||
|
data, in[] with this key and put the reult in the output array
|
||||||
|
out[]. In addition, the second key array, o_key[L], is used
|
||||||
|
to output the key that is needed by the decryption subroutine
|
||||||
|
to reverse the encryption operation. The two key arrays can
|
||||||
|
be the same array but in this case the original key will be
|
||||||
|
overwritten.
|
||||||
|
|
||||||
|
In the same way, the decryption subroutines output keys that
|
||||||
|
can be used to reverse their effect when used for encryption.
|
||||||
|
|
||||||
|
Only 128 and 256 bit keys are supported in these 'on the fly'
|
||||||
|
modes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined( AES_ENC_128_OTFK )
|
||||||
|
void aes_encrypt_128( const uint8_t in[N_BLOCK],
|
||||||
|
uint8_t out[N_BLOCK],
|
||||||
|
const uint8_t key[N_BLOCK],
|
||||||
|
uint8_t o_key[N_BLOCK] );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_DEC_128_OTFK )
|
||||||
|
void aes_decrypt_128( const uint8_t in[N_BLOCK],
|
||||||
|
uint8_t out[N_BLOCK],
|
||||||
|
const uint8_t key[N_BLOCK],
|
||||||
|
uint8_t o_key[N_BLOCK] );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_ENC_256_OTFK )
|
||||||
|
void aes_encrypt_256( const uint8_t in[N_BLOCK],
|
||||||
|
uint8_t out[N_BLOCK],
|
||||||
|
const uint8_t key[2 * N_BLOCK],
|
||||||
|
uint8_t o_key[2 * N_BLOCK] );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( AES_DEC_256_OTFK )
|
||||||
|
void aes_decrypt_256( const uint8_t in[N_BLOCK],
|
||||||
|
uint8_t out[N_BLOCK],
|
||||||
|
const uint8_t key[2 * N_BLOCK],
|
||||||
|
uint8_t o_key[2 * N_BLOCK] );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
Copyright (C) 2009 Lander Casado, Philippas Tsigas
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files
|
||||||
|
(the "Software"), to deal with the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimers. Redistributions in
|
||||||
|
binary form must reproduce the above copyright notice, this list of
|
||||||
|
conditions and the following disclaimers in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
In no event shall the authors or copyright holders be liable for any special,
|
||||||
|
incidental, indirect or consequential damages of any kind, or any damages
|
||||||
|
whatsoever resulting from loss of use, data or profits, whether or not
|
||||||
|
advised of the possibility of damage, and on any theory of liability,
|
||||||
|
arising out of or in connection with the use or performance of this software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS WITH THE SOFTWARE
|
||||||
|
|
||||||
|
*****************************************************************************/
|
||||||
|
//#include <sys/param.h>
|
||||||
|
//#include <sys/systm.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "aes.h"
|
||||||
|
#include "cmac.h"
|
||||||
|
#include "utilities.h"
|
||||||
|
|
||||||
|
#define LSHIFT(v, r) do { \
|
||||||
|
int32_t i; \
|
||||||
|
for (i = 0; i < 15; i++) \
|
||||||
|
(r)[i] = (v)[i] << 1 | (v)[i + 1] >> 7; \
|
||||||
|
(r)[15] = (v)[15] << 1; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define XOR(v, r) do { \
|
||||||
|
int32_t i; \
|
||||||
|
for (i = 0; i < 16; i++) \
|
||||||
|
{ \
|
||||||
|
(r)[i] = (r)[i] ^ (v)[i]; \
|
||||||
|
} \
|
||||||
|
} while (0) \
|
||||||
|
|
||||||
|
|
||||||
|
void AES_CMAC_Init(AES_CMAC_CTX *ctx)
|
||||||
|
{
|
||||||
|
memset1(ctx->X, 0, sizeof ctx->X);
|
||||||
|
ctx->M_n = 0;
|
||||||
|
memset1(ctx->rijndael.ksch, '\0', 240);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AES_CMAC_SetKey(AES_CMAC_CTX *ctx, const uint8_t key[AES_CMAC_KEY_LENGTH])
|
||||||
|
{
|
||||||
|
//rijndael_set_key_enc_only(&ctx->rijndael, key, 128);
|
||||||
|
aes_set_key( key, AES_CMAC_KEY_LENGTH, &ctx->rijndael);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AES_CMAC_Update(AES_CMAC_CTX *ctx, const uint8_t *data, uint32_t len)
|
||||||
|
{
|
||||||
|
uint32_t mlen;
|
||||||
|
uint8_t in[16];
|
||||||
|
|
||||||
|
if (ctx->M_n > 0) {
|
||||||
|
mlen = MIN(16 - ctx->M_n, len);
|
||||||
|
memcpy1(ctx->M_last + ctx->M_n, data, mlen);
|
||||||
|
ctx->M_n += mlen;
|
||||||
|
if (ctx->M_n < 16 || len == mlen)
|
||||||
|
return;
|
||||||
|
XOR(ctx->M_last, ctx->X);
|
||||||
|
//rijndael_encrypt(&ctx->rijndael, ctx->X, ctx->X);
|
||||||
|
aes_encrypt( ctx->X, ctx->X, &ctx->rijndael);
|
||||||
|
data += mlen;
|
||||||
|
len -= mlen;
|
||||||
|
}
|
||||||
|
while (len > 16) { /* not last block */
|
||||||
|
|
||||||
|
XOR(data, ctx->X);
|
||||||
|
//rijndael_encrypt(&ctx->rijndael, ctx->X, ctx->X);
|
||||||
|
|
||||||
|
memcpy1(in, &ctx->X[0], 16); //Bestela ez du ondo iten
|
||||||
|
aes_encrypt( in, in, &ctx->rijndael);
|
||||||
|
memcpy1(&ctx->X[0], in, 16);
|
||||||
|
|
||||||
|
data += 16;
|
||||||
|
len -= 16;
|
||||||
|
}
|
||||||
|
/* potential last block, save it */
|
||||||
|
memcpy1(ctx->M_last, data, len);
|
||||||
|
ctx->M_n = len;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AES_CMAC_Final(uint8_t digest[AES_CMAC_DIGEST_LENGTH], AES_CMAC_CTX *ctx)
|
||||||
|
{
|
||||||
|
uint8_t K[16];
|
||||||
|
uint8_t in[16];
|
||||||
|
/* generate subkey K1 */
|
||||||
|
memset1(K, '\0', 16);
|
||||||
|
|
||||||
|
//rijndael_encrypt(&ctx->rijndael, K, K);
|
||||||
|
|
||||||
|
aes_encrypt( K, K, &ctx->rijndael);
|
||||||
|
|
||||||
|
if (K[0] & 0x80) {
|
||||||
|
LSHIFT(K, K);
|
||||||
|
K[15] ^= 0x87;
|
||||||
|
} else
|
||||||
|
LSHIFT(K, K);
|
||||||
|
|
||||||
|
|
||||||
|
if (ctx->M_n == 16) {
|
||||||
|
/* last block was a complete block */
|
||||||
|
XOR(K, ctx->M_last);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* generate subkey K2 */
|
||||||
|
if (K[0] & 0x80) {
|
||||||
|
LSHIFT(K, K);
|
||||||
|
K[15] ^= 0x87;
|
||||||
|
} else
|
||||||
|
LSHIFT(K, K);
|
||||||
|
|
||||||
|
/* padding(M_last) */
|
||||||
|
ctx->M_last[ctx->M_n] = 0x80;
|
||||||
|
while (++ctx->M_n < 16)
|
||||||
|
ctx->M_last[ctx->M_n] = 0;
|
||||||
|
|
||||||
|
XOR(K, ctx->M_last);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
XOR(ctx->M_last, ctx->X);
|
||||||
|
|
||||||
|
//rijndael_encrypt(&ctx->rijndael, ctx->X, digest);
|
||||||
|
|
||||||
|
memcpy1(in, &ctx->X[0], 16); //Bestela ez du ondo iten
|
||||||
|
aes_encrypt(in, digest, &ctx->rijndael);
|
||||||
|
memset1(K, 0, sizeof K);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
Copyright (C) 2009 Lander Casado, Philippas Tsigas
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files
|
||||||
|
(the "Software"), to deal with the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimers. Redistributions in
|
||||||
|
binary form must reproduce the above copyright notice, this list of
|
||||||
|
conditions and the following disclaimers in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
In no event shall the authors or copyright holders be liable for any special,
|
||||||
|
incidental, indirect or consequential damages of any kind, or any damages
|
||||||
|
whatsoever resulting from loss of use, data or profits, whether or not
|
||||||
|
advised of the possibility of damage, and on any theory of liability,
|
||||||
|
arising out of or in connection with the use or performance of this software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS WITH THE SOFTWARE
|
||||||
|
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _CMAC_H_
|
||||||
|
#define _CMAC_H_
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
|
||||||
|
#define AES_CMAC_KEY_LENGTH 16
|
||||||
|
#define AES_CMAC_DIGEST_LENGTH 16
|
||||||
|
|
||||||
|
typedef struct _AES_CMAC_CTX {
|
||||||
|
aes_context rijndael;
|
||||||
|
uint8_t X[16];
|
||||||
|
uint8_t M_last[16];
|
||||||
|
uint32_t M_n;
|
||||||
|
} AES_CMAC_CTX;
|
||||||
|
|
||||||
|
//#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
//__BEGIN_DECLS
|
||||||
|
void AES_CMAC_Init(AES_CMAC_CTX * ctx);
|
||||||
|
void AES_CMAC_SetKey(AES_CMAC_CTX * ctx, const uint8_t key[AES_CMAC_KEY_LENGTH]);
|
||||||
|
void AES_CMAC_Update(AES_CMAC_CTX * ctx, const uint8_t * data, uint32_t len);
|
||||||
|
// __attribute__((__bounded__(__string__,2,3)));
|
||||||
|
void AES_CMAC_Final(uint8_t digest[AES_CMAC_DIGEST_LENGTH], AES_CMAC_CTX * ctx);
|
||||||
|
// __attribute__((__bounded__(__minbytes__,1,AES_CMAC_DIGEST_LENGTH)));
|
||||||
|
//__END_DECLS
|
||||||
|
|
||||||
|
#endif /* _CMAC_H_ */
|
||||||
|
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
/ _____) _ | |
|
||||||
|
( (____ _____ ____ _| |_ _____ ____| |__
|
||||||
|
\____ \| ___ | (_ _) ___ |/ ___) _ \
|
||||||
|
_____) ) ____| | | || |_| ____( (___| | | |
|
||||||
|
(______/|_____)_|_|_| \__)_____)\____)_| |_|
|
||||||
|
(C)2013 Semtech
|
||||||
|
|
||||||
|
Description: Helper functions implementation
|
||||||
|
|
||||||
|
License: Revised BSD License, see LICENSE.TXT file include in the project
|
||||||
|
|
||||||
|
Maintainer: Miguel Luis and Gregory Cristian
|
||||||
|
*/
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
//#include "board.h"
|
||||||
|
#include "utilities.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Redefinition of rand() and srand() standard C functions.
|
||||||
|
* These functions are redefined in order to get the same behavior across
|
||||||
|
* different compiler toolchains implementations.
|
||||||
|
*/
|
||||||
|
// Standard random functions redefinition start
|
||||||
|
#define RAND_LOCAL_MAX 2147483647L
|
||||||
|
|
||||||
|
static uint32_t next = 1;
|
||||||
|
|
||||||
|
int32_t rand1( void )
|
||||||
|
{
|
||||||
|
return ( ( next = next * 1103515245L + 12345L ) % RAND_LOCAL_MAX );
|
||||||
|
}
|
||||||
|
|
||||||
|
void srand1( uint32_t seed )
|
||||||
|
{
|
||||||
|
next = seed;
|
||||||
|
}
|
||||||
|
// Standard random functions redefinition end
|
||||||
|
|
||||||
|
int32_t randr( int32_t min, int32_t max )
|
||||||
|
{
|
||||||
|
return ( int32_t )rand1( ) % ( max - min + 1 ) + min;
|
||||||
|
}
|
||||||
|
|
||||||
|
void memcpy1( uint8_t *dst, const uint8_t *src, uint16_t size )
|
||||||
|
{
|
||||||
|
while( size-- )
|
||||||
|
{
|
||||||
|
*dst++ = *src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void memcpyr( uint8_t *dst, const uint8_t *src, uint16_t size )
|
||||||
|
{
|
||||||
|
dst = dst + ( size - 1 );
|
||||||
|
while( size-- )
|
||||||
|
{
|
||||||
|
*dst-- = *src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void memset1( uint8_t *dst, uint8_t value, uint16_t size )
|
||||||
|
{
|
||||||
|
while( size-- )
|
||||||
|
{
|
||||||
|
*dst++ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int8_t Nibble2HexChar( uint8_t a )
|
||||||
|
{
|
||||||
|
if( a < 10 )
|
||||||
|
{
|
||||||
|
return '0' + a;
|
||||||
|
}
|
||||||
|
else if( a < 16 )
|
||||||
|
{
|
||||||
|
return 'A' + ( a - 10 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return '?';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
/ _____) _ | |
|
||||||
|
( (____ _____ ____ _| |_ _____ ____| |__
|
||||||
|
\____ \| ___ | (_ _) ___ |/ ___) _ \
|
||||||
|
_____) ) ____| | | || |_| ____( (___| | | |
|
||||||
|
(______/|_____)_|_|_| \__)_____)\____)_| |_|
|
||||||
|
(C)2013 Semtech
|
||||||
|
|
||||||
|
Description: Helper functions implementation
|
||||||
|
|
||||||
|
License: Revised BSD License, see LICENSE.TXT file include in the project
|
||||||
|
|
||||||
|
Maintainer: Miguel Luis and Gregory Cristian
|
||||||
|
*/
|
||||||
|
#ifndef __UTILITIES_H__
|
||||||
|
#define __UTILITIES_H__
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the minimum value between a and b
|
||||||
|
*
|
||||||
|
* \param [IN] a 1st value
|
||||||
|
* \param [IN] b 2nd value
|
||||||
|
* \retval minValue Minimum value
|
||||||
|
*/
|
||||||
|
#define MIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) )
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the maximum value between a and b
|
||||||
|
*
|
||||||
|
* \param [IN] a 1st value
|
||||||
|
* \param [IN] b 2nd value
|
||||||
|
* \retval maxValue Maximum value
|
||||||
|
*/
|
||||||
|
#define MAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) )
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns 2 raised to the power of n
|
||||||
|
*
|
||||||
|
* \param [IN] n power value
|
||||||
|
* \retval result of raising 2 to the power n
|
||||||
|
*/
|
||||||
|
#define POW2( n ) ( 1 << n )
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Initializes the pseudo random generator initial value
|
||||||
|
*
|
||||||
|
* \param [IN] seed Pseudo random generator initial value
|
||||||
|
*/
|
||||||
|
void srand1( uint32_t seed );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Computes a random number between min and max
|
||||||
|
*
|
||||||
|
* \param [IN] min range minimum value
|
||||||
|
* \param [IN] max range maximum value
|
||||||
|
* \retval random random value in range min..max
|
||||||
|
*/
|
||||||
|
int32_t randr( int32_t min, int32_t max );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Copies size elements of src array to dst array
|
||||||
|
*
|
||||||
|
* \remark STM32 Standard memcpy function only works on pointers that are aligned
|
||||||
|
*
|
||||||
|
* \param [OUT] dst Destination array
|
||||||
|
* \param [IN] src Source array
|
||||||
|
* \param [IN] size Number of bytes to be copied
|
||||||
|
*/
|
||||||
|
void memcpy1( uint8_t *dst, const uint8_t *src, uint16_t size );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Copies size elements of src array to dst array reversing the byte order
|
||||||
|
*
|
||||||
|
* \param [OUT] dst Destination array
|
||||||
|
* \param [IN] src Source array
|
||||||
|
* \param [IN] size Number of bytes to be copied
|
||||||
|
*/
|
||||||
|
void memcpyr( uint8_t *dst, const uint8_t *src, uint16_t size );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Set size elements of dst array with value
|
||||||
|
*
|
||||||
|
* \remark STM32 Standard memset function only works on pointers that are aligned
|
||||||
|
*
|
||||||
|
* \param [OUT] dst Destination array
|
||||||
|
* \param [IN] value Default value
|
||||||
|
* \param [IN] size Number of bytes to be copied
|
||||||
|
*/
|
||||||
|
void memset1( uint8_t *dst, uint8_t value, uint16_t size );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Converts a nibble to an hexadecimal character
|
||||||
|
*
|
||||||
|
* \param [IN] a Nibble to be converted
|
||||||
|
* \retval hexChar Converted hexadecimal character
|
||||||
|
*/
|
||||||
|
int8_t Nibble2HexChar( uint8_t a );
|
||||||
|
|
||||||
|
#endif // __UTILITIES_H__
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
* ENV version number defined by user.
|
* ENV version number defined by user.
|
||||||
* Please change it when your firmware add a new ENV to default_env_set.
|
* Please change it when your firmware add a new ENV to default_env_set.
|
||||||
*/
|
*/
|
||||||
#define EF_ENV_VER_NUM 3 /* @note you must define it for a value, such as 0 */
|
#define EF_ENV_VER_NUM 5 /* @note you must define it for a value, such as 0 */
|
||||||
|
|
||||||
/* MCU Endian Configuration, default is Little Endian Order. */
|
/* MCU Endian Configuration, default is Little Endian Order. */
|
||||||
/* #define EF_BIG_ENDIAN */
|
/* #define EF_BIG_ENDIAN */
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <sfud.h>
|
#include <sfud.h>
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
|
#include "user_config.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -43,17 +44,23 @@ static const ef_env default_env_set[] = {
|
|||||||
{"boot_times", "0"},
|
{"boot_times", "0"},
|
||||||
{"jump_boot_time", "10"}, // BOOT 等待时间 10s
|
{"jump_boot_time", "10"}, // BOOT 等待时间 10s
|
||||||
// 基础参数设置
|
// 基础参数设置
|
||||||
{"device_id", "7322070012"},
|
{"device_id", "0000000003"},
|
||||||
{"app_id", "220000"}, // 业务ID
|
{"app_id", "220000"}, // 业务ID
|
||||||
{"user_pass", "123456"},
|
{"user_pass", "123456"},
|
||||||
{"sys_pass", "898909"},
|
{"sys_pass", "898909"},
|
||||||
{"mqtt_user", "admin"},
|
{"mqtt_user", "admin"},
|
||||||
{"mqtt_pass", "admin"},
|
{"mqtt_pass", "admin"},
|
||||||
{"mqtt_addr", "mqtt.zyjzjs.cn"},
|
#ifdef USER_MINLE_CHAN2
|
||||||
|
{"mqtt_addr", "minle.zyjzjs.cn"},
|
||||||
|
{"mqtt_port", "8102"},
|
||||||
|
#else
|
||||||
|
|
||||||
|
{"mqtt_addr", "mqtt.zyjzjs.cn"},
|
||||||
{"mqtt_port", "1883"},
|
{"mqtt_port", "1883"},
|
||||||
{"mqtt_topic", "syksk"}, //订阅topic
|
#endif
|
||||||
|
{"mqtt_topic", "sluice"}, //订阅topic
|
||||||
|
|
||||||
{"net_drv", "dtu"}, // mqtt dtu ec200 eth
|
{"net_drv", "ec200"}, // mqtt dtu ec200 eth
|
||||||
{"eth2_chann", "0"}, //以太网通道2 支持modbus
|
{"eth2_chann", "0"}, //以太网通道2 支持modbus
|
||||||
|
|
||||||
// 传感器基础参数配置
|
// 传感器基础参数配置
|
||||||
@@ -85,7 +92,7 @@ static const ef_env default_env_set[] = {
|
|||||||
{"max_open", "1600"}, // 最大开度
|
{"max_open", "1600"}, // 最大开度
|
||||||
{"max_ecode", "25712"}, // 编码器最大编码
|
{"max_ecode", "25712"}, // 编码器最大编码
|
||||||
{"min_ecode", "31770"}, // 编码器最小编码
|
{"min_ecode", "31770"}, // 编码器最小编码
|
||||||
{"exec_time", "50"}, // 异常检测时间 单位100ms 50 就是 5s
|
{"exec_time", "50"}, // 开度异常监测 异常检测时间 单位100ms 50 就是 5s
|
||||||
|
|
||||||
// 闸门参数设置
|
// 闸门参数设置
|
||||||
{"ctrl_mode", "0"}, // 控制模式 // 1 直接开度控制,0 反馈开度控制
|
{"ctrl_mode", "0"}, // 控制模式 // 1 直接开度控制,0 反馈开度控制
|
||||||
@@ -93,20 +100,25 @@ static const ef_env default_env_set[] = {
|
|||||||
{"simu_flow", "0"}, // 0 未启动 1 水位流量关系表 2巴歇尔槽启动流量关系表
|
{"simu_flow", "0"}, // 0 未启动 1 水位流量关系表 2巴歇尔槽启动流量关系表
|
||||||
{"parshall", "7"}, // 巴歇尔槽规格
|
{"parshall", "7"}, // 巴歇尔槽规格
|
||||||
// 流量数据存储
|
// 流量数据存储
|
||||||
{"ttflow", "0"}, // 累计流量
|
{"ttflow", "[0,0,0,0,0,0]"}, // 累计流量
|
||||||
{"chancnt", "1"}, // 流量计通道数
|
{"chancnt", "1"}, // 流量计通道数
|
||||||
{"site_type", "sluice"}, // 0,闸门站,1,流量站,2,渗流渗压站,3,自动化采集站,4,串口服务器
|
{"site_type", "sluice"}, // 0,闸门站,1,流量站,2,渗流渗压站,3,自动化采集站,4,串口服务器
|
||||||
{"level","[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]"},
|
{"level","[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]"},
|
||||||
{"flow", "[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]"},
|
{"flow", "[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]"},
|
||||||
{"wsid","[1,2,3,4,5,6]"},
|
{"wsid","[128,2,3,4,5,6]"},
|
||||||
{"sl427ip","116.176.77.72"},
|
|
||||||
{"sl427port","6200"},
|
|
||||||
{"sl427code","0000000002"},
|
|
||||||
|
|
||||||
|
//EF_ENV_VER_NUM 4
|
||||||
|
{"curr1","0.6"}, // 保护电流1 开度 > openk 时的保护电流 // V4
|
||||||
|
{"curr2","3"}, // 保护电流2 开度 < openk 时的保护电流 // V4
|
||||||
|
{"openk","50"}, // 开度限制,开度 < 50mm 不限制荷重 V5
|
||||||
|
{"curr_count","3"}, // 电流三次报警,就停止,除非重启设备 V5
|
||||||
|
{"sl427open","0"}, // 是否打开427 配置 V5
|
||||||
|
{"sl427ip","116.176.77.72"}, // V4
|
||||||
|
{"sl427port","6200"}, // V4
|
||||||
|
{"sl427code","0000000002"}, // V4
|
||||||
|
//EF_ENV_VER_NUM 5
|
||||||
|
{"loadp","2600"}, // 荷重系数,电流*k = load 单位kg V5
|
||||||
// 水位流量关系表 配置10 个点
|
// 水位流量关系表 配置10 个点
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -863,7 +863,7 @@ void elog_hexdump(const char *name, uint8_t width, const void *buf, uint16_t siz
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* level filter */
|
/* level filter */
|
||||||
if (ELOG_LVL_DEBUG > elog.filter.level) {
|
if (ELOG_LVL_VERBOSE > elog.filter.level) {
|
||||||
return;
|
return;
|
||||||
} else if (!strstr(name, elog.filter.tag)) { /* tag filter */
|
} else if (!strstr(name, elog.filter.tag)) { /* tag filter */
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
#*******************************************************************************
|
||||||
|
# Copyright (c) 2017 IBM Corp.
|
||||||
|
#
|
||||||
|
# All rights reserved. This program and the accompanying materials
|
||||||
|
# are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
# and Eclipse Distribution License v1.0 which accompany this distribution.
|
||||||
|
#
|
||||||
|
# The Eclipse Public License is available at
|
||||||
|
# http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
# and the Eclipse Distribution License is available at
|
||||||
|
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||||
|
#
|
||||||
|
# Contributors:
|
||||||
|
# Ian Craggs - initial version
|
||||||
|
#*******************************************************************************/
|
||||||
|
|
||||||
|
# MQTTPacket Library
|
||||||
|
file(GLOB SOURCES "*.c")
|
||||||
|
add_library(paho-embed-mqtt3c SHARED ${SOURCES})
|
||||||
|
install(TARGETS paho-embed-mqtt3c DESTINATION /usr/lib)
|
||||||
|
target_compile_definitions(paho-embed-mqtt3c PRIVATE MQTT_SERVER MQTT_CLIENT)
|
||||||
|
|
||||||
|
add_library(MQTTPacketClient SHARED MQTTFormat MQTTPacket
|
||||||
|
MQTTSerializePublish MQTTDeserializePublish
|
||||||
|
MQTTConnectClient MQTTSubscribeClient MQTTUnsubscribeClient)
|
||||||
|
target_compile_definitions(MQTTPacketClient PRIVATE MQTT_CLIENT)
|
||||||
|
|
||||||
|
add_library(MQTTPacketServer SHARED MQTTFormat MQTTPacket
|
||||||
|
MQTTSerializePublish MQTTDeserializePublish
|
||||||
|
MQTTConnectServer MQTTSubscribeServer MQTTUnsubscribeServer)
|
||||||
|
target_compile_definitions(MQTTPacketServer PRIVATE MQTT_SERVER)
|
||||||
Reference in new issue
Block a user