📄 ex_zmd.c
字号:
ZMac_GetMyShortAddress()
);
printf("(press space to exit)\r\n\n");
while(TRUE) {
restart_wdt();
if(bkbhit()) {
if (bgetc()==' ') break;
}
count=ZMac_GetPacket(&remoteNode, &data, sizeof(data), 200);
if (count)
{
if (showPercent == 'n')
lcd_putd(data);
else
{
if (!first) {
good++;
bad+=GetAbsDiff(data, lastdata)-1;
percent=(int32)100*good/(good+bad);
if (showPercent=='1')
lcd_putd(percent / 10);
else
lcd_putd(percent);
printf("\r\n%LU %LU %LU %U", data, good, bad, percent);
}
lastdata=data;
first=0;
}
}
}
}
void serial_test(void)
{
char c=' ';
printf("\r\n\nZRS232 Test CHAN=%U PAN=%LX ME=%LX DEST=%LX\r\n",
ZPhy_GetChannel(),
ZMac_GetMyPanId(),
ZMac_GetMyShortAddress(),
read_eeprom16(EE_DEST_ADDR)
);
printf("(press '!' to exit)\r\n\n");
ZRS232Init();
ZRS232Connect(read_eeprom16(EE_DEST_ADDR));
do
{
restart_wdt();
ZRS232Task();
while (ZRS232kbhit())
{
c=ZRS232getc();
putc(c);
}
while (bkbhit())
{
c=bgetc();
if (c=='!')
break;
else
ZRS232putc(c);
}
} while (c!='!');
ZRS232Stop();
}
void write_test(void)
{
ZMAC_NODE_INFO remoteNode;
ZMD_EC ec;
int16 good=0,total=0;
int16 to;
int16 count=0;
int8 percent;
char showPercent;
ZMac_StartListen(); //temp
showPercent=read_eeprom(EE_SHOW_PERCENT);
remoteNode.panId=ZMac_GetMyPanId();
remoteNode.shortAddress=read_eeprom16(EE_DEST_ADDR);
remoteNode.addressMode=ZMAC_ADDRESS_MODE_SHORT;
printf("\r\n\nWriting Packets CHAN=%U PAN=%LX ME=%LX DEST=%LX\r\n",
ZPhy_GetChannel(),
ZMac_GetMyPanId(),
ZMac_GetMyShortAddress(),
remoteNode.shortAddress.w
);
printf("(press space to exit)\r\n\n");
to=1000;
while(TRUE) {
restart_wdt();
delay_ms(1);
if(bkbhit()) {
if (bgetc()==' ') break;
}
to--;
if (!to) {
to=1000;
count++;
if (count>=999) {count=0;}
ec=ZMac_PutPacket(&remoteNode, &count, sizeof(count));
printf("%X\r\n",ec);
if (showPercent=='n')
lcd_putd(count);
else
{
total++;
if (!ec)
good++;
percent=(int32)100*good/total;
if (showPercent=='1')
lcd_putd(percent / 10);
else
lcd_putd(percent);
}
}
}
}
void show_settings(void)
{
printf("\r\n");
printf("\r\nRF Channel: %U", ZPhy_GetChannel());
printf("\r\nRF Power (0=max, 3=min): %U", read_eeprom(EE_POWER));
printf("\r\nRF CSMA (1=yes, 2=direct): %U", read_eeprom(EE_CSMA));
printf("\r\nPAN ID: 0x%LX", read_eeprom16(EE_PAN));
printf("\r\nMY ADDRESS: 0x%LX", read_eeprom16(EE_MY_ADDR));
printf("\r\nDEST ADDRESS: 0x%LX", read_eeprom16(EE_DEST_ADDR));
printf("\r\nDisplay: %C", read_eeprom(EE_SHOW_PERCENT));
}
void configure(void)
{
int16 v;
char c;
printf("\r\n");
printf("\r\nRF Channel (0-10): ");
c=bget_int();
write_eeprom(EE_CHAN,c);
ZPhy_SetChannel(c);
printf("\r\nRF Power (0=max, 3=min): ");
do
{
c=bgetc();
} while ((c>'3')&&(c<'0'));
putc(c);
c-='0';
ZPhy_SetTX(ZPHY_TX_MODE_NORMAL, c);
write_eeprom(EE_POWER, c);
printf("\r\nRF CSMA (1=yes, 2=direct): ");
do
{
c=bgetc();
} while ((c!='1')&&(c!='2'));
putc(c);
c-='0';
write_eeprom(EE_CSMA, c);
ZMac_SetTX(c, ZMAC_TX_SLOTTED_DISABLE);
printf("\r\nPAN ID: ");
v=bget_long();
write_eeprom16(EE_PAN,v);
ZMac_SetMyPanId(v);
printf("\r\nMY ADDRESS: ");
v=bget_long();
write_eeprom16(EE_MY_ADDR,v);
ZMac_SetMyShortAddress(v);
printf("\r\nDEST ADDRESS: ");
v=bget_long();
write_eeprom16(EE_DEST_ADDR,v);
printf("\r\nShow Percent (3, 1, or N): ");
do
{
c=bgetc();
c=tolower(c);
} while ((c!='3')&&(c!='1')&&(c!='n'));
write_eeprom(EE_SHOW_PERCENT,c);
}
void lcd_test(void) {
int16 to;
int16 temp;
to=1000;
temp=123;
printf("\r\n\nLCD Test\r\n(press space to exit)\r\n\n");
while (TRUE) {
restart_wdt();
if (bkbhit()) {
if (bgetc()==' ') break;
}
delay_ms(1);
to--;
if (!to) {
to=1000;
lcd_putd(temp);
temp+=111;
if (temp>999) {temp=123;}
}
}
lcd_clear();
}
void led_test(void) {
int16 to;
char c;
to=1000;
c=0;
printf("\r\n\nTesting LEDs\r\n(press space to exit)\r\n\n");
while(TRUE) {
delay_ms(1);
restart_wdt();
to--;
if(bkbhit()) {
if (bgetc()==' ') break;
}
if (!to) {
to=1000;
if (bit_test(c,0)) output_low(PIN_LED1); else output_high(PIN_LED1);
if (bit_test(c,1)) output_low(PIN_LED2); else output_high(PIN_LED2);
if (bit_test(c,2)) output_low(PIN_LED3); else output_high(PIN_LED3);
c++;
if (c>=8) {c=0;}
}
}
}
void handle_command(char command) {
switch(command) {
case 'u': //unmod carrier
printf("\r\n\nGenerating unmodulated carrier wave on channel %U\r\n", read_eeprom(EE_CHAN));
zmd_generate_cw(read_eeprom(EE_CHAN), 0);
break;
case 'm':
printf("\r\n\nGenerating modulated carrier wave on channel %U\r\n", read_eeprom(EE_CHAN));
zmd_generate_cw(read_eeprom(EE_CHAN), 1);
break;
case '?':
show_settings();
break;
case 's':
serial_test();
break;
case 'r':
read_test();
break;
case 'p':
packet_sniff();
break;
case 'c':
configure();
break;
case 't':
zmd_spi_test();
break;
case 'w':
write_test();
break;
case 'l':
lcd_test();
break;
case 'b':
led_test();
break;
}
}
char menu(void) {
char mode;
printf("\r\n\nZIGBEE TEST\r\n\n");
printf("?) Settings C)onfigure\r\n");
printf("U)nmod carrier M)od carrier\r\n");
printf("L)CD test B)link LEDs\r\n");
printf("R)ead test W)rite test\r\n");
printf("S)erial test P)acket sniffer\r\n");
printf("T)est SPI/Parallel\r\n");
printf("Command: ");
do {
restart_wdt();
} while (!bkbhit());
mode=tolower(bgetc());
putc(mode);
return(mode);
}
void init(void)
{
delay_ms(72);
ZMac_Init();
ZPhy_SetTX(ZPHY_TX_MODE_NORMAL, read_eeprom(EE_POWER));
ZMac_SetTX(read_eeprom(EE_CSMA), ZMAC_TX_SLOTTED_DISABLE);
lcd_clear();
setup_adc_ports(NO_ANALOGS);
LED_ON(PIN_LED1);
LED_OFF(PIN_LED2);
LED_OFF(PIN_LED3);
if (read_eeprom(EE_MAGIC)!=0x58) {
write_eeprom(EE_MAGIC,0x58);
write_eeprom(EE_LAST_MODE,0);
write_eeprom(EE_CHAN, 6);
write_eeprom16(EE_PAN, 1);
write_eeprom16(EE_MY_ADDR, 1);
write_eeprom16(EE_DEST_ADDR, 2);
write_eeprom(EE_POWER, 0);
write_eeprom(EE_SHOW_PERCENT, 'n');
write_eeprom(EE_CSMA, 1);
}
ZPhy_SetChannel(read_eeprom(EE_CHAN));
ZMac_SetMyShortAddress(read_eeprom16(EE_MY_ADDR));
ZMac_SetMyPanId(read_eeprom16(EE_PAN));
ZMac_UseMyShortAddress();
printf("\r\n\nED0: %U", zmd_read_reg(ZMD_ED0));
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
}
void main(void) {
char mode;
init();
while (TRUE) {
if (read_eeprom(EE_LAST_MODE)==0) {
mode=menu();
write_eeprom(EE_LAST_MODE, mode);
}
else {
mode=read_eeprom(EE_LAST_MODE);
}
handle_command(mode);
write_eeprom(EE_LAST_MODE, 0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -