176 lines
3.2 KiB
C
176 lines
3.2 KiB
C
/*
|
|
main.c
|
|
Copyright (C) 2007
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <P89LPC932.h> // special function register declarations
|
|
// for the Philips P89C931 device
|
|
|
|
#include "rf.h"
|
|
#include "serial.h"
|
|
#include "cmd.h"
|
|
#include "cc1100.h"
|
|
#include "timer.h"
|
|
|
|
volatile bit terminal;
|
|
volatile bit redirector;
|
|
|
|
__sfr __at (0xAD) CMP2_ ;
|
|
|
|
void main(void) {
|
|
|
|
unsigned char x;
|
|
unsigned char len;
|
|
|
|
P0M1 &= 0x6c;
|
|
P0M2 |= 0x92;
|
|
P0 = 0x83;
|
|
|
|
P1M1 &= 0x3e;
|
|
P1M2 |= 0xcd;
|
|
P1 = 0xcd;
|
|
|
|
P3M1 &= 0xfe;
|
|
P3M2 |= 0x01;
|
|
P3 = 0;
|
|
|
|
/*PT0AD = 0x24;
|
|
TMOD = 0x22;
|
|
TAMOD = 0x10;
|
|
TCON = 0x50;
|
|
AUXR1 = 0x20;
|
|
TH0 = 0x22;
|
|
TH1 = 0x80;
|
|
CMP2_ = 0x24;
|
|
*/
|
|
|
|
initTimer0();
|
|
initSerial();
|
|
RF_init();
|
|
RF_startIRQ();
|
|
|
|
EA = 1;
|
|
|
|
send_string(crlf);
|
|
send_string("Ready");
|
|
send_string(crlf);
|
|
|
|
terminal = 1;
|
|
//redirector = 1;
|
|
len =0;
|
|
|
|
while (1) {
|
|
if(redirector) {
|
|
if(inbuflen >= 58) {
|
|
transmitRedir(58,redir_dest);
|
|
}
|
|
else if(inbuflen && TF0) {
|
|
transmitRedir(inbuflen,redir_dest);
|
|
}
|
|
}
|
|
else if (terminal) {
|
|
if(len < inbuflen) {
|
|
x=get_inbuf_index(len++);
|
|
if (x == 0x0d) {
|
|
send_string(crlf);
|
|
inbuf[(inbufindex + len-1) & 0x3F] = 0;
|
|
x=get_inbuf();
|
|
len--;
|
|
if(len) {
|
|
switch(x) {
|
|
case 't':
|
|
if (inbuflen) {
|
|
transmit(len);
|
|
len = 0;
|
|
send_string(crlf);
|
|
}
|
|
break;
|
|
case 'r':
|
|
if (inbuflen) {
|
|
transmitRedir(len,0);
|
|
len = 0;
|
|
send_string("TX Done");
|
|
}
|
|
break;
|
|
case 's':
|
|
print_cc1100status();
|
|
break;
|
|
case 'c':
|
|
print_cc1100confi();
|
|
break;
|
|
case 'b':
|
|
terminal = 0;
|
|
send_byte(0x01);
|
|
break;
|
|
case 'w':
|
|
sendWOR(0x00);
|
|
break;
|
|
default:
|
|
send_string("Syntax error");
|
|
}
|
|
while(len) {
|
|
get_inbuf();
|
|
len--;
|
|
}
|
|
}
|
|
else {
|
|
send_string("Ready");
|
|
}
|
|
send_string(crlf);
|
|
}
|
|
else {
|
|
send_byte(x);
|
|
}
|
|
}
|
|
}
|
|
|
|
else {
|
|
if (inbuflen) {
|
|
x=get_inbuf();
|
|
switch(x) {
|
|
case 0x00:
|
|
|
|
break;
|
|
case 0x01:
|
|
transmitB();
|
|
break;
|
|
case 0x02:
|
|
cmd_strobeB();
|
|
break;
|
|
case 0x03:
|
|
read_byteB();
|
|
break;
|
|
case 0x04:
|
|
write_byteB();
|
|
break;
|
|
case 0x05:
|
|
read_burst_byteB();
|
|
break;
|
|
case 0x06:
|
|
write_burst_byteB();
|
|
break;
|
|
case 0x07:
|
|
send_WORb();
|
|
break;
|
|
default:
|
|
send_byte(0x00);
|
|
}
|
|
if (!terminal)
|
|
send_byte(0x01);
|
|
}
|
|
}
|
|
}
|
|
}
|