初始版本
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
#include "ADS1231.h"
|
||||
|
||||
extern float Temperature;
|
||||
|
||||
|
||||
void ADS1231_Open(void)
|
||||
{
|
||||
PDWN1_SET();
|
||||
PDWN2_SET();
|
||||
PDWN3_SET();
|
||||
PDWN4_SET();
|
||||
}
|
||||
|
||||
void ADS1231_HighSpeedSet(void)
|
||||
{
|
||||
SPEED1_SET();
|
||||
SPEED2_SET();
|
||||
SPEED3_SET();
|
||||
SPEED4_SET();
|
||||
}
|
||||
|
||||
void ADS1231_LowSpeedSet(void)
|
||||
{
|
||||
SPEED1_RESET();
|
||||
SPEED2_RESET();
|
||||
SPEED3_RESET();
|
||||
SPEED4_RESET();
|
||||
}
|
||||
|
||||
uint32_t GpioAGetDout(en_pin_t enPin)
|
||||
{
|
||||
return *(uint32_t *)((uint32_t)(&M4_PORT->PIDRA)) & (enPin);
|
||||
}
|
||||
|
||||
uint32_t GpioBGetDout(en_pin_t enPin)
|
||||
{
|
||||
return *(uint32_t *)((uint32_t)(&M4_PORT->PIDRB)) & (enPin);
|
||||
}
|
||||
|
||||
bool ADS1231_Read(uint32_t *r_data, uint8_t channel) {
|
||||
uint8_t i;
|
||||
uint32_t data = 0;
|
||||
|
||||
switch(channel) {
|
||||
case 0:
|
||||
if(GpioAGetDout(DRDY_DOUT1_PIN) != 0)
|
||||
return false;
|
||||
|
||||
for(i = 0; i < 24; i++) {
|
||||
SCLK1_SET();
|
||||
data <<= 0x01;
|
||||
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
|
||||
SCLK1_RESET();
|
||||
|
||||
if(GpioAGetDout(DRDY_DOUT1_PIN) != 0)
|
||||
data |= 0x01;
|
||||
}
|
||||
SCLK1_SET();
|
||||
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
|
||||
SCLK1_RESET();
|
||||
break;
|
||||
case 1:
|
||||
if(GpioAGetDout(DRDY_DOUT2_PIN) != 0)
|
||||
return false;
|
||||
|
||||
for(i = 0; i < 24; i++) {
|
||||
SCLK2_SET();
|
||||
data <<= 0x01;
|
||||
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
|
||||
SCLK2_RESET();
|
||||
__NOP(); __NOP();
|
||||
if(GpioAGetDout(DRDY_DOUT2_PIN) != 0)
|
||||
data |= 0x01;
|
||||
}
|
||||
SCLK2_SET();
|
||||
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
|
||||
SCLK2_RESET();
|
||||
break;
|
||||
case 2:
|
||||
if(GpioBGetDout(DRDY_DOUT3_PIN) != 0)
|
||||
return false;
|
||||
|
||||
for(i = 0; i < 24; i++) {
|
||||
SCLK3_SET();
|
||||
data <<= 0x01;
|
||||
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
|
||||
SCLK3_RESET();
|
||||
if(GpioBGetDout(DRDY_DOUT3_PIN) != 0 )
|
||||
data |= 0x01;
|
||||
}
|
||||
SCLK3_SET();
|
||||
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
|
||||
SCLK3_RESET();
|
||||
break;
|
||||
case 3:
|
||||
if(GpioBGetDout(DRDY_DOUT4_PIN) != 0 )
|
||||
return false;
|
||||
|
||||
for(i = 0; i < 24; i++) {
|
||||
SCLK4_SET();
|
||||
data <<= 0x01;
|
||||
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
|
||||
SCLK4_RESET();
|
||||
if(GpioBGetDout(DRDY_DOUT4_PIN) != 0 )
|
||||
data |= 0x01;
|
||||
}
|
||||
SCLK4_SET();
|
||||
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
|
||||
SCLK4_RESET();
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
if(data <= 0x00ffffff) {
|
||||
if(data > 0x007fffff)
|
||||
*r_data = data|0xff000000;
|
||||
else
|
||||
*r_data = data;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,405 @@
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "Debug.h"
|
||||
#include "main.h"
|
||||
#include "bsp.h"
|
||||
#include "dc_motor.h"
|
||||
|
||||
#if (USE_DEBUG != 0)
|
||||
#define DEBUG_CMD_CNT 8
|
||||
const DBGFunType DebugFun[DEBUG_CMD_CNT];
|
||||
|
||||
static char buff[BUFSIZE];
|
||||
volatile uint16_t iw=0; /* buffer write index*/
|
||||
static uint16_t ir=0; /* buffer read index*/
|
||||
static uint16_t DebugRxTimeOut1mSCnt;
|
||||
static char RxBuff[128];
|
||||
static uint8_t RxLen = 0;
|
||||
|
||||
void vcom_Print(uint8_t sLen);
|
||||
|
||||
void vcom_Send( char *format, ... )
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
uint8_t len;
|
||||
char tempBuff[DEBUG_BUFF_SIZE_MAX];
|
||||
//uint32_t primask_bit;
|
||||
uint8_t offset = 0;
|
||||
//primask_bit = __get_PRIMASK();
|
||||
//__disable_irq();
|
||||
|
||||
/*convert into string at buff[0] of length iw*/
|
||||
len = vsprintf(&tempBuff[0], format, args);
|
||||
|
||||
while(offset < len) {
|
||||
if((len - offset) < BUFSIZE) {
|
||||
memcpy(&buff[0], &tempBuff[offset], len - offset);
|
||||
vcom_Print(len - offset);
|
||||
offset = len;
|
||||
}
|
||||
else {
|
||||
memcpy(&buff[0], &tempBuff[offset], BUFSIZE);
|
||||
offset += BUFSIZE;
|
||||
vcom_Print(BUFSIZE);
|
||||
}
|
||||
}
|
||||
|
||||
//__set_PRIMASK(primask_bit);
|
||||
//__enable_irq();
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
// 定义一个函数vcom_Print,用于打印字符串
|
||||
void vcom_Print(uint8_t sLen)
|
||||
{
|
||||
// 定义一个字符指针CurChar
|
||||
char* CurChar;
|
||||
// 初始化ir
|
||||
ir = 0;
|
||||
// 当ir小于sLen时,循环执行
|
||||
while(ir < sLen)
|
||||
{
|
||||
// 获取字符指针CurChar
|
||||
CurChar = &buff[ir++];
|
||||
// 调用DebugUartSend函数,发送CurChar指向的字符,次数为1
|
||||
DebugUartSend((uint8_t*)CurChar, 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 定义一个函数vcom_Send2,用于发送字符串
|
||||
void vcom_Send2(uint8_t *sData, uint16_t len)
|
||||
{
|
||||
// 遍历sData,将每个元素发送到DebugUartSend
|
||||
for(int i = 0; i < len; i++) {
|
||||
DebugUartSend(&sData[i], 1);
|
||||
}
|
||||
}
|
||||
|
||||
void DebugLoopHandler(void)
|
||||
{
|
||||
int argc = 0;
|
||||
char *argv[10], *argp;
|
||||
|
||||
if(DebugRxTimeOut1mSCnt > 0 || RxLen == 0)
|
||||
return;
|
||||
|
||||
//for(argv[argc] = strtok(RxBuff, " "); argv[argc] != NULL; argv[++argc] = strtok(NULL, " "));
|
||||
// 解析字符串,将参数放入argv数组中
|
||||
argp = strtok(RxBuff, " ");
|
||||
for(int i = 0; i < 10; i++) {
|
||||
if(argp != NULL) {
|
||||
argv[argc++] = argp;
|
||||
argp = strtok(NULL, " ");
|
||||
}
|
||||
else if(argc > 0){
|
||||
argc--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取第一个参数,并将其赋值给argp
|
||||
argp = strtok(argv[argc], "'\r'");
|
||||
// 如果argp不为空,则将argp的值赋值给argv[argc],并将argc加1
|
||||
if(argp != NULL) {
|
||||
argv[argc++] = argp;
|
||||
}
|
||||
// 否则,将RxLen设置为0,并返回
|
||||
else {
|
||||
RxLen = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// 遍历DebugFun数组,查找argv[0]是否与DBGCmd匹配,若匹配则调用DBGExec函数
|
||||
for(int i = 0; i < DEBUG_CMD_CNT; i++) {
|
||||
if(strcmp(argv[0], DebugFun[i].DBGCmd) == 0)
|
||||
DebugFun[i].DBGExec(argc, argv);
|
||||
}
|
||||
|
||||
memset(RxBuff, 0x00, 128);
|
||||
RxLen = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint32_t RxTimeCurrent;
|
||||
uint32_t RxTimeLast = 0;
|
||||
|
||||
// 函数:Dbg1msRoutine
|
||||
// 功能:1ms调试时钟routine
|
||||
void Dbg1msRoutine(void)
|
||||
{
|
||||
// 如果1ms调试时钟计数器大于0
|
||||
if(DebugRxTimeOut1mSCnt > 0)
|
||||
// 1ms调试时钟计数器减1
|
||||
DebugRxTimeOut1mSCnt--;
|
||||
}
|
||||
|
||||
// 定义函数DbgUsartRxIrqCallback,用于处理串口接收中断
|
||||
void DbgUsartRxIrqCallback(void)
|
||||
{
|
||||
// 如果1分钟超时计数器为0,则清空RxLen
|
||||
if(DebugRxTimeOut1mSCnt == 0)
|
||||
RxLen = 0;
|
||||
|
||||
// 重置1分钟超时计数器
|
||||
DebugRxTimeOut1mSCnt = 3;
|
||||
// 读取串口接收到的数据
|
||||
uint8_t Data = DbgUartRec();
|
||||
// 如果RxLen小于128,则将数据添加到RxBuff中
|
||||
if(RxLen < 128) {
|
||||
RxBuff[RxLen++] = Data;
|
||||
}
|
||||
// DBG_LOG("RxBuff = %s\n", RxBuff);
|
||||
// RS485_Flag=1;//接收标志为置1
|
||||
}
|
||||
|
||||
void DebugTest(int argc, char *argv[])
|
||||
{
|
||||
// 如果参数个数小于2,则返回
|
||||
if(argc < 2)
|
||||
return;
|
||||
// 如果参数为“?”,则打印帮助信息
|
||||
if(strcmp(argv[1], "?") == 0)
|
||||
{
|
||||
DBG_LOG("Debug Cmd:\r\n\
|
||||
disp task on/off -->Open the task display.\r\n");
|
||||
return;
|
||||
}
|
||||
// 如果参数为“on”,则打印“Test ON”
|
||||
if(strcmp(argv[1], "on") == 0)
|
||||
{
|
||||
// TestOn();
|
||||
DBG_LOG("Test ON\r\n");
|
||||
}
|
||||
// 如果参数为“off”,则打印“Test OFF”
|
||||
else if(strcmp(argv[1], "off") == 0)
|
||||
{
|
||||
// TestOFF();
|
||||
DBG_LOG("Test OFF\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
void DebugCmdGps(int argc, char *argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
return;
|
||||
|
||||
if(strcmp(argv[1], "?") == 0) {
|
||||
DBG_LOG("Debug Cmd:\r\n\
|
||||
gps on/off -->Turn the gps on or off.\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if(strcmp(argv[1], "on") == 0) {
|
||||
GPSStart();
|
||||
}
|
||||
else if(strcmp(argv[1], "off") == 0) {
|
||||
GPSStop();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void DebugCmdHelp(int argc, char *argv[])
|
||||
{
|
||||
DBG_LOG("Debug Cmd:\r\n\
|
||||
disp task on/off -->Open the task display.\r\n\
|
||||
help\
|
||||
motor\
|
||||
level\
|
||||
wave\
|
||||
");
|
||||
}
|
||||
|
||||
#if 0
|
||||
//// 定义一个无参函数DebugReadData,用于读取数据
|
||||
//void DebugReadData(int argc, char *argv[])
|
||||
//{
|
||||
// // 定义一个无符号32位整数ADReadStart,初始值为0
|
||||
// uint32_t ADReadStart = 0;
|
||||
// // 定义一个ADData_t类型的数组ADBuff,大小为640
|
||||
// ADData_t ADBuff[640];
|
||||
//
|
||||
// // 当ADReadStart小于SDCARD_BLOCK_MAX时,循环执行
|
||||
// while(ADReadStart < SDCARD_BLOCK_MAX) {
|
||||
// // 使用SDCardReadBlocks函数读取数据,从ADReadStart开始,读取10个块,数据存储在ADBuff中
|
||||
// SDCardReadBlocks(ADReadStart, 10, (uint8_t *)ADBuff);
|
||||
// // 遍历ADBuff数组,将每个元素打印出来
|
||||
// for(int i = 0; i < 640; i++) {
|
||||
// DBG_LOG("%d\t%d\t%d\t%d\r\n", ADBuff[i].AD0, ADBuff[i].AD1, ADBuff[i].AD2, ADBuff[i].AD3);
|
||||
// }
|
||||
// // ADReadStart加10
|
||||
// ADReadStart += 10;
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
|
||||
//// 定义一个函数SetTime,参数为int argc和char *argv[]
|
||||
//void SetTime(int argc, char *argv[])
|
||||
//{
|
||||
// // 定义一个字符数组test,并初始化为0
|
||||
// char test[10] = 0;
|
||||
// // 定义一个整数num,并初始化为0
|
||||
// int num = 0;
|
||||
// // 如果argc小于2,则返回
|
||||
// if(argc < 2)
|
||||
// return;
|
||||
// // 如果argv[1]等于"?",则打印提示信息
|
||||
// if(strcmp(argv[1], "?") == 0)
|
||||
// {
|
||||
// DBG_LOG("SetTime Cmd:\r\n\
|
||||
// disp task on/off -->Open the task display.\r\n");
|
||||
// return;
|
||||
// }
|
||||
// // 将argv[1]的值复制到test
|
||||
// memcpy(test, (char *)argv[1], 10);
|
||||
// // 将test转换为整数
|
||||
// num = atoi(test);
|
||||
// // 调用TimeSync函数,并将num作为参数传入
|
||||
// TimeSync(num);
|
||||
//}
|
||||
#endif
|
||||
extern uint8_t KeyASta;
|
||||
extern uint8_t KeyBSta;
|
||||
extern uint8_t RunSta;
|
||||
void MotorSwitch(int argc, char *argv[])
|
||||
{
|
||||
// 如果参数个数小于2,则返回
|
||||
if(argc < 2)
|
||||
return;
|
||||
// 如果第一个参数为?,则打印帮助信息
|
||||
if(strcmp(argv[1], "?") == 0)
|
||||
{
|
||||
DBG_LOG("DCMotor Cmd:\r\n\
|
||||
motor F/R/S -->Turn the motor on or off.\r\n");
|
||||
return;
|
||||
}
|
||||
// 如果第一个参数为on,则开启SonarWork
|
||||
if(strcmp(argv[1], "R") == 0)
|
||||
{
|
||||
KeyASta = true;
|
||||
Motor_Control(MOTOR_CMD_REVERSE);
|
||||
DBG_LOG("Motor FORWARD\r\n");
|
||||
}
|
||||
// 如果第一个参数为off,则关闭SonarWork
|
||||
else if(strcmp(argv[1], "F") == 0)
|
||||
{
|
||||
KeyBSta = true;
|
||||
Motor_Control(MOTOR_CMD_FORWARD);
|
||||
DBG_LOG("Motor REVERSE\r\n");
|
||||
}
|
||||
else if(strcmp(argv[1], "S") == 0)
|
||||
{
|
||||
KeyASta = false;
|
||||
KeyBSta = false;
|
||||
Motor_Control(MOTOR_CMD_STOP);
|
||||
DBG_LOG("Motor OFF\r\n");
|
||||
}
|
||||
}
|
||||
extern void GradeControl(ControlLevel_m level);
|
||||
void LevelSwitch(int argc, char *argv[])
|
||||
{
|
||||
// 如果参数个数小于2,则返回
|
||||
if(argc < 2)
|
||||
return;
|
||||
// 如果参数为“?”,则打印帮助信息
|
||||
if(strcmp(argv[1], "?") == 0)
|
||||
{
|
||||
DBG_LOG("level Cmd:\r\n\
|
||||
level 1/2/3/4/5 -->Select control level.\r\n");
|
||||
return;
|
||||
}
|
||||
// 如果参数为“1”,则打印“Set control level: 1”
|
||||
if(strcmp(argv[1], "1") == 0)
|
||||
{
|
||||
App.Para.Layout.ControlLevel = LEVEL_1;//等级1
|
||||
SAVE_APP_PARA((uint32_t *)&App.Para);
|
||||
DBG_LOG("Set control level: 1\r\n");
|
||||
DBG_LOG("SystemReset...\r\n");
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
// 如果参数为“2”,则打印“Set control level: 2”
|
||||
else if(strcmp(argv[1], "2") == 0)
|
||||
{
|
||||
App.Para.Layout.ControlLevel = LEVEL_2;//等级2
|
||||
SAVE_APP_PARA((uint32_t *)&App.Para);
|
||||
DBG_LOG("Set control level: 2\r\n");
|
||||
DBG_LOG("SystemReset...\r\n");
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
// 如果参数为“3”,则打印“Set control level: 1”
|
||||
else if(strcmp(argv[1], "3") == 0)
|
||||
{
|
||||
App.Para.Layout.ControlLevel = LEVEL_3;//等级3
|
||||
SAVE_APP_PARA((uint32_t *)&App.Para);
|
||||
DBG_LOG("Set control level: 3\r\n");
|
||||
DBG_LOG("SystemReset...\r\n");
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
// 如果参数为“4”,则打印“Set control level: 4”
|
||||
else if(strcmp(argv[1], "4") == 0)
|
||||
{
|
||||
App.Para.Layout.ControlLevel = LEVEL_4;//等级4
|
||||
SAVE_APP_PARA((uint32_t *)&App.Para);
|
||||
DBG_LOG("Set control level: 4\r\n");
|
||||
DBG_LOG("SystemReset...\r\n");
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
// 如果参数为“5”,则打印“Set control level: 5”
|
||||
else if(strcmp(argv[1], "5") == 0)
|
||||
{
|
||||
App.Para.Layout.ControlLevel = LEVEL_5;//等级5
|
||||
SAVE_APP_PARA((uint32_t *)&App.Para);
|
||||
DBG_LOG("Set control level: 5\r\n");
|
||||
DBG_LOG("SystemReset...\r\n");
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
}
|
||||
|
||||
void DBGWave_on_off(int argc, char *argv[])
|
||||
{
|
||||
// 如果参数个数小于2,则返回
|
||||
if(argc < 2)
|
||||
return;
|
||||
// 如果参数为“?”,则打印帮助信息
|
||||
if(strcmp(argv[1], "?") == 0)
|
||||
{
|
||||
DBG_LOG("wave Cmd:\r\n\
|
||||
wave on/off -->Turn on or off waveform output.\r\n");
|
||||
return;
|
||||
}
|
||||
// 如果参数为“on”,则打印“Test ON”
|
||||
if(strcmp(argv[1], "on") == 0)
|
||||
{
|
||||
App.Para.Layout.DBGWaveOut = true;
|
||||
SAVE_APP_PARA((uint32_t *)&App.Para);
|
||||
DBG_LOG("Waveform output on.\r\n");
|
||||
}
|
||||
// 如果参数为“off”,则打印“Test OFF”
|
||||
else if(strcmp(argv[1], "off") == 0)
|
||||
{
|
||||
App.Para.Layout.DBGWaveOut = false;
|
||||
SAVE_APP_PARA((uint32_t *)&App.Para);
|
||||
DBG_LOG("Waveform output off.\r\n");
|
||||
}
|
||||
}
|
||||
const DBGFunType DebugFun[DEBUG_CMD_CNT] = {
|
||||
"help", DebugCmdHelp,
|
||||
"motor", MotorSwitch,
|
||||
"level", LevelSwitch,
|
||||
"wave", DBGWave_on_off,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
#include "Encryption.h"
|
||||
|
||||
//从机加密表
|
||||
const unsigned char EPT_Table[32][6] = {
|
||||
{1, 6, 4, 2, 3, 5}, {2, 4, 6, 3, 5, 1}, {3, 5, 6, 2, 1, 4}, {5, 3, 2, 1, 4, 6},
|
||||
{4, 2, 3, 1, 5, 6}, {6, 3, 5, 1, 4, 2}, {3, 5, 2, 6, 4, 1}, {2, 5, 4, 3, 1, 6},
|
||||
{2, 4, 1, 5, 3, 6}, {4, 6, 1, 3, 2, 5}, {4, 2, 1, 5, 6, 3}, {3, 2, 6, 5, 1, 4},
|
||||
{2, 6, 5, 1, 4, 3}, {6, 4, 3, 1, 2, 5}, {1, 6, 3, 2, 4, 5}, {5, 3, 4, 6, 2, 1},
|
||||
{5, 3, 1, 2, 6, 4}, {1, 4, 2, 6, 5, 3}, {3, 5, 2, 1, 4, 6}, {6, 1, 4, 2, 3, 5},
|
||||
{4, 1, 2, 5, 3, 6}, {4, 2, 6, 3, 5, 1}, {2, 6, 1, 4, 3, 5}, {4, 3, 1, 5, 6, 2},
|
||||
{5, 1, 2, 4, 6, 3}, {6, 5, 1, 3, 4, 2}, {2, 1, 6, 3, 5, 4}, {1, 5, 6, 3, 4, 2},
|
||||
{3, 6, 5, 4, 2, 1}, {1, 2, 6, 3, 5, 4}, {4, 6, 5, 3, 2, 1}, {5, 3, 4, 2, 6, 1}
|
||||
};
|
||||
|
||||
//从机解密表:
|
||||
const unsigned char DPT_Table[32][5] ={
|
||||
{1, 4, 2, 3, 5}, {2, 4, 3, 5, 1}, {3, 5, 2, 1, 4}, {5, 3, 2, 1, 4},
|
||||
{4, 2, 3, 1, 5}, {3, 5, 1, 4, 2}, {3, 5, 2, 4, 1}, {2, 5, 4, 3, 1},
|
||||
{2, 4, 1, 5, 3}, {4, 1, 3, 2, 5}, {4, 2, 1, 5, 3}, {3, 2, 5, 1, 4},
|
||||
{2, 5, 1, 4, 3}, {4, 3, 1, 2, 5}, {1, 3, 2, 4, 5}, {5, 3, 4, 2, 1},
|
||||
{5, 3, 1, 2, 4}, {1, 4, 2, 5, 3}, {3, 2, 1, 4, 5}, {1, 4, 5, 2, 3},
|
||||
{4, 1, 2, 5, 3}, {4, 2, 3, 5, 1}, {2, 1, 4, 3, 5}, {4, 3, 1, 5, 2},
|
||||
{5, 1, 2, 4, 3}, {5, 1, 3, 4, 2}, {2, 1, 3, 5, 4}, {1, 5, 3, 4, 2},
|
||||
{3, 5, 4, 2, 1}, {1, 2, 3, 5, 4}, {4, 5, 3, 2, 1}, {5, 3, 4, 2, 1}
|
||||
};
|
||||
|
||||
//数据位加密表:
|
||||
const unsigned char EPT_D[32] = {
|
||||
0x23, 0x4c, 0x92, 0x38, 0x52, 0xa4, 0x9a, 0x61,
|
||||
0x86, 0xc8, 0x70, 0x16, 0x32, 0x58, 0x62, 0x83,
|
||||
0xa5, 0x16, 0x1c, 0x49, 0x48, 0xc1, 0x8c, 0x91,
|
||||
0xd0, 0x2c, 0x49, 0x42, 0xc1, 0x8c, 0x98, 0xd0
|
||||
};
|
||||
|
||||
/****************************************************************/
|
||||
/* 加密函数 */
|
||||
/* */
|
||||
/*函数入口: *data,未加密的普通协议数据 */
|
||||
/* */
|
||||
/*函数出口: *EPT_data,生成的加密协议 */
|
||||
/****************************************************************/
|
||||
void Encrypt_Code(unsigned char *data, unsigned char *EPT_data) {
|
||||
unsigned char Edata[6];
|
||||
unsigned char i = 0;
|
||||
unsigned char check;
|
||||
unsigned char ept_byte;
|
||||
|
||||
check = (data[0]+data[1]+data[2]+data[3]+data[4]+data[5]) % 0xff;
|
||||
ept_byte = check % 32;
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
Edata[i] = ((~(data[i] & EPT_D[ept_byte])) & EPT_D[ept_byte]) | (data[i] & (~EPT_D[ept_byte]));
|
||||
}
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
EPT_data[i] = Edata[EPT_Table[ept_byte][i]-1];
|
||||
}
|
||||
|
||||
EPT_data[6] = ((~(check & 0xaa)) & 0xaa) | (check & 0x55);
|
||||
}
|
||||
|
||||
/****************************************************************/
|
||||
/* 解密函数 */
|
||||
/* */
|
||||
/*函数入口: *EPT_data,需要解密的加密协议 */
|
||||
/* */
|
||||
/*函数出口: *DPT_data,生成的普通协议 */
|
||||
/****************************************************************/
|
||||
void Decrypt_Code(unsigned char *EPT_data,unsigned char *DPT_data) {
|
||||
unsigned char data[5];
|
||||
unsigned char i = 0;
|
||||
unsigned char check;
|
||||
unsigned char ept_byte;
|
||||
|
||||
check = ((~(EPT_data[5]&0xaa))&0xaa)|(EPT_data[5]&0x55);
|
||||
ept_byte = check % 32;
|
||||
|
||||
for(i=0;i<5;i++) {
|
||||
data[i] = ((~(EPT_data[i]&EPT_D[ept_byte]))&EPT_D[ept_byte])|(EPT_data[i]&(~EPT_D[ept_byte]));
|
||||
}
|
||||
for(i=0;i<5;i++) {
|
||||
DPT_data[DPT_Table[ept_byte][i]-1] = data[i];
|
||||
}
|
||||
DPT_data[5] = check;
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user