autoack-tx.c
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include <mc1322x.h>
00037 #include <board.h>
00038 #include <stdio.h>
00039
00040 #include "tests.h"
00041 #include "config.h"
00042
00043 #define LED LED_RED
00044
00045
00046
00047
00048 #define PAYLOAD_LEN 16
00049 #define DELAY 100000
00050
00051 void fill_packet(volatile packet_t *p) {
00052 static volatile uint8_t count=0;
00053
00054 p->length = 16;
00055 p->offset = 0;
00056 p->data[0] = 0x71;
00057 p->data[1] = 0x98;
00058 p->data[2] = count++;
00059 p->data[3] = 0xaa;
00060 p->data[4] = 0xaa;
00061 p->data[5] = 0x11;
00062 p->data[6] = 0x11;
00063 p->data[7] = 0x22;
00064 p->data[8] = 0x22;
00065
00066
00067 p->data[9] = 'a';
00068 p->data[10] = 'c';
00069 p->data[11] = 'k';
00070 p->data[12] = 't';
00071 p->data[13] = 'e';
00072 p->data[14] = 's';
00073 p->data[15] = 't';
00074
00075 }
00076
00077 void maca_tx_callback(volatile packet_t *p) {
00078 switch(p->status) {
00079 case 0:
00080 printf("TX OK\n\r");
00081 break;
00082 case 3:
00083 printf("CRC ERR\n\r");
00084 break;
00085 case 5:
00086 printf("NO ACK\n\r");
00087 break;
00088 default:
00089 printf("unknown status: %d\n", (int)p->status);
00090 }
00091 }
00092
00093 void main(void) {
00094 volatile packet_t *p;
00095 char c;
00096 uint16_t r=30;
00097 uint16_t end=180;
00098
00099
00100 trim_xtal();
00101
00102 uart_init(INC, MOD, SAMP);
00103
00104 vreg_init();
00105
00106 maca_init();
00107
00108 set_channel(0);
00109
00110
00111 set_power(0x12);
00112
00113
00114 GPIO->FUNC_SEL_44 = 1;
00115 GPIO->PAD_DIR_SET_44 = 1;
00116
00117 GPIO->FUNC_SEL_45 = 2;
00118 GPIO->PAD_DIR_SET_45 = 1;
00119
00120 *MACA_RXACKDELAY = r;
00121
00122 printf("rx warmup: %d\n\r", (int)(*MACA_WARMUP & 0xfff));
00123
00124 *MACA_RXEND = end;
00125
00126 printf("rx end: %d\n\r", (int)(*MACA_RXEND & 0xfff));
00127
00128 set_prm_mode(AUTOACK);
00129
00130 print_welcome("rftest-tx");
00131
00132 while(1) {
00133
00134
00135
00136 check_maca();
00137
00138 while((p = rx_packet())) {
00139 if(p) {
00140 printf("RX: ");
00141 print_packet(p);
00142 free_packet(p);
00143 }
00144 }
00145
00146 if(uart1_can_get()) {
00147 c = uart1_getc();
00148
00149 switch(c) {
00150 case 'z':
00151 r++;
00152 if(r > 4095) { r = 0; }
00153 *MACA_RXACKDELAY = r;
00154 printf("rx ack delay: %d\n\r", r);
00155 break;
00156 case 'x':
00157 if(r == 0) { r = 4095; } else { r--; }
00158 *MACA_RXACKDELAY = r;
00159 printf("rx ack delay: %d\n\r", r);
00160 break;
00161 case 'q':
00162 end++;
00163 if(r > 4095) { r = 0; }
00164 *MACA_RXEND = end;
00165 printf("rx end: %d\n\r", end);
00166 break;
00167 case 'w':
00168 end--;
00169 if(r == 0) { r = 4095; } else { r--; }
00170 *MACA_RXEND = end;
00171 printf("rx end: %d\n\r", end);
00172 break;
00173 default:
00174 p = get_free_packet();
00175 if(p) {
00176 fill_packet(p);
00177
00178 printf("autoack-tx --- ");
00179 print_packet(p);
00180
00181 tx_packet(p);
00182 }
00183 break;
00184 }
00185 }
00186
00187 }
00188
00189 }