boop/betty_scart/trunk/main.c
2017-07-01 21:56:25 +02:00

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);
}
}
}
}