📄 command.c
字号:
#include <iom128.h>
#include "rw910.h"
#include "command.h"
#include "crc.h"
void select_cmd(unsigned char target, unsigned char action, unsigned char membank,
unsigned char maskadr,unsigned char masklen,unsigned char *maskstr,
unsigned char truncate)
{
unsigned int crc16,totalen,len,rmd;
unsigned char send[20];
maskadr = 0;masklen = 0;*maskstr = 0;
totalen = 29+(unsigned int)masklen;
len = totalen/(sizeof(char))+1;
rmd = totalen%(sizeof(char));
send[0] = (SELECT<<4) | (target<<1) | (action>>2);
send[1] = (action<<6) | (membank<<4)| (maskadr>>4);
send[2] = (maskadr<<4)| (masklen>>4);
send[3] = (masklen<<4)| (truncate<<3);
crc16 = caculate_crc16(send,len,rmd);
send[3] = send[3]|((unsigned char)(crc16>>8))<<(sizeof(char)-rmd);
send[4] = (unsigned char)(crc16>>8)<<rmd | (unsigned char)crc16>>rmd;
send[5] = (unsigned char)crc16>>(sizeof(char)-rmd);
txoutdata(send,len+2,rmd);
}
/*
数据放在字节的低5位
*/
void query_cmd(unsigned char dr, unsigned char m, unsigned char trext,
unsigned char sel,unsigned char session,unsigned char targ, unsigned char q)
{
unsigned char i,j,crc5,send[6];
send[0] = (QUERY<<1) | dr;
send[1] = (m<<3) | (trext<<2) | sel;
send[2] = (session<<3) | (targ<<2) | (q>>2);
send[3] = (q&0x03)<<3;
crc5 = caculate_crc5(send);
r_tPreamble();
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
if(send[i]&0x10)txoutDataCode(1);
else txoutDataCode(0);
send[i] = send[i]<<1;
}
}
for(j=0;j<2;j++)
{
if(send[3]&0x10)txoutDataCode(1);
else txoutDataCode(0);
send[3] = send[3]<<1;
}
for(j=0;j<5;j++)
{
if(crc5&0x10)txoutDataCode(1);
else txoutDataCode(0);
crc5 = crc5<<1;
}
}
void queryAdjust_cmd(unsigned char session,unsigned char updn)
{
unsigned char send[5];
send[0] = (QUERYADJUST<<4) | (session<<2) | (updn>>1);
send[1] = (updn&0x01)<<7;
txoutdata(send,2,1);
}
void queryRep_cmd(unsigned char session)
{
unsigned char send[3];
send[0] = (QUERREP<<6) | (session<<4);
txoutdata(send,1,4);
}
/*
*str为需要发送的字符串;
byLen为整个字符串的长度;
rmd为字符串最后一个字节的有效位数长度
*/
void txoutdata(unsigned char *str,unsigned int bylen,unsigned int rmd)
{
unsigned int i,j;
r_tFrameSync();
for(i=0;i<bylen-1;i++)
{
for(j=0;j<8;j++)
{
if(*str&0x80) txoutDataCode(1);
else txoutDataCode(0);
*str = *str<<1;
}
str ++;
}
for(j=0;j<rmd;j++)
{
if(*str&0x80) txoutDataCode(1);
else txoutDataCode(0);
*str = *str<<1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -