- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2021-12-05T16:28:15+09:00","default:Real2Virtual202111","Real2Virtual202111")
#author("2021-12-05T23:20:55+09:00","default:Real2Virtual202111","Real2Virtual202111")
[[Real2Virtual202111]]
#code(c){{
#include "Initialize.h"
#include "mbed.h"
DigitalInOut pe0(p27);
DigitalInOut pe1(p28);
DigitalInOut pe2(p29);
DigitalInOut pe3(p30);
DigitalInOut pe4(p26);
DigitalInOut pe5(p25);
DigitalInOut pe6(p24);
DigitalInOut pe7(p23);
DigitalInOut pe8(p22);
DigitalInOut pe9(p21);
DigitalInOut pea(p20);
DigitalInOut peb(p19);
DigitalInOut pec(p18);
DigitalInOut ped(p17);
DigitalInOut pee(p16);
DigitalInOut pef(p15);
/* */
#define PXMAX 16
#define PBMAX 6
unsigned char (*getPEX[PXMAX])(void);
unsigned char (*getPMEX[PXMAX])(void);
void (*setPEX[PXMAX])(unsigned char);
void (*setPMEX[PXMAX])(unsigned char);
unsigned char (*getPBX[PBMAX])(void);
unsigned char (*getPMBX[PBMAX])(void);
void (*setPBX[PBMAX])(unsigned char);
void (*setPMBX[PBMAX])(unsigned char);
/* */
//#include "CommandBuffer.h"
#include "InBuffer.h"
//#include <string.h>
//CommandBuffer::ackReturned( int faceID);
unsigned char getPEX_i(int i){
if(i<0) return (unsigned char)(-1);
if(i>PXMAX) return (unsigned char)(-1);
return (*getPEX[i])();
}
unsigned char setIthBit(unsigned char i, unsigned char x);
unsigned char getPMEX_i(int i){
if(i<0) return(unsigned char)(-1);
return (*getPMEX[i])();
void InBuffer::setPortConf( unsigned char (*getfun)(void), void (*modefun)(unsigned char x)){
getPort=getfun;
setPortMode=modefun;
setPortMode((unsigned char)0); /* input ... for sh7125 */
}
void setPEX_i(int i, unsigned char c){
if(i>PXMAX) return;
(*setPEX[i])(c);
}
//void trg_putc(unsigned char c);
unsigned char setIthBit(unsigned char i, unsigned char x);
void setPMEX_i(int i, unsigned char c){
if(i<0) return;
if(i>PXMAX) return;
(*setPMEX[i])(c);
void InBuffer::setCommand(CommandBuffer *com){
command=com;
}
unsigned char getPBX_i(int i){
if(i<0) return (unsigned char)(-1);
if(i>PBMAX) return (unsigned char)(-1);
return (*getPBX[i])();
}
void InBuffer::intrProcess(void){
volatile unsigned char cx;
volatile unsigned char i,j;
// volatile unsigned char sbi; // p % 8 = p & 0x07... for access bs
// volatile unsigned char sbj; // p/8 = p >>3... for access bits
// volatile unsigned char cs;
i=getPort();
if(i==0) now=0;
else now=1;
// xputc(' '+i);
unsigned char getPMBX_i(int i){
return (*getPMBX[i])();
}
if(status==0){ /* waiting */
if(last==0 && now==1){ /* some thing was happen */
// printf("f=%d\n",(int)((*this).faceID));
/* start reading */
status=1;
// trg_puts("status 0->1 - ");trg_putc((*this).channelID+'0');trg_puts("\n");
// (*this).sampleIntervalCounter=0;
p=0;
for(j=0;j<MaxBits;j++){
bits[j]=0x00;
}
}
}
else
if(status==1){ /* reading bits sequence */
// if((*this).sampleIntervalCounter==0){
/**/
// xputc(' '+i);
bits[p]=now;
p++;
/**/
/*
if((*this).now!=0){
sbj=(*this).p>>3;
cs=(*this).bits[sbj];
sbi=(*this).p & 0x07;
cs=setIthBit(sbi,cs);
(*this).bits[sbj]=cs;
void setPBX_i(int i, unsigned char c){
if(i>PBMAX) return;
if(i<0) return;
(*setPBX[i])(c);
}
(*this).p++;
*/
if(p>=ReceiveBits){
// xputs("\n\r");
p=0;
now=0;
last=0;
cx=decode();
if(cx==0xff){
status=0;
}
else
if(cx==0x00){
status=0;
}
else{
// trg_puts("--");
// trg_putc(cx);trg_puts("\n");
// xputc(cx); xputs("]n");
// xputs("bits=");
// for(j=0;j<ReceiveBits;j++) xputc('0'+bits[j]);
// xputs("\n\r");
// printf("cx=%d %c\n\r",0+cx,cx);
status=2;
cin=cx;
parse(cx);
}
}
/*
}
else{
}
(*this).sampleIntervalCounter++;
if((*this).sampleIntervalCounter>=(*this).sampleInterval){
(*this).sampleIntervalCounter=0;
}
*/
}
else
if(status==2) {
status=0;
}
last=now;
return;
}
void setPMBX_i(int i, unsigned char c){
if(i>PBMAX) return;
if(i<0) return;
(*setPMBX[i])(c);
/*
unsigned char startWithForInBit(struct inbit *this, char *c){
unsigned char p;
p=0;
while(c[p]!=0){
if(c[p]!=(*this).inputBuffer[p]) return 0;
p++;
}
return 1;
}
int pinIO[16];
void setPE0(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO0->DATA |= (1<<8);
// else
// LPC_GPIO0->DATA &= ~(1<<8);
pe0=s;
void shiftLeftForInBit(struct inbit *this, unsigned char i){
unsigned j,k;
k=0;
for(j=i;j<(*this).cbp;j++){
(*this).inputBuffer[k]=(*this).inputBuffer[j];
k++;
}
(*this).cbp=(*this).cbp-i;
}
void setPE1(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO0->DATA |= (1<<9);
// else
// LPC_GPIO0->DATA &= ~(1<<9);
pe1=s;
*/
unsigned char setIthBit(unsigned char i, unsigned char x){
unsigned char j;
unsigned char mask;
unsigned char r;
mask=0x80;
for(j=0;j<i;j++){
mask=mask>>1;
}
r=x | mask;
return r;
}
void setPE2(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO0->DATA |= (1<<11);
// else
// LPC_GPIO0->DATA &= ~(1<<11);
pe2=s;
unsigned char getIthBit(unsigned char i,unsigned char x){
unsigned char j;
unsigned char mask;
unsigned char r;
mask=0x80;
for(j=0;j<i;j++){
mask=mask>>1;
}
r=x & mask;
if(r==0x00){
return r;
}
else{
return 0x01;
}
}
void setPE3(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO1->DATA |= (1<<5);
// else
// LPC_GPIO1->DATA &= ~(1<<5);
pe3=s;
void printHexChar(char c){
int ch,cl;
ch=c;
ch=ch>>4;
cl=c & 0x0f;
if(ch<10)
// printf("%d",ch);
xputd(ch);
else
// printf("%c",ch-10+'a');
xputd(ch-10+'a');
if(cl<10)
// printf("%d",cl);
xputd(cl);
else
// printf("%c",cl-10+'a');
xputd(cl-10+'a');
}
void setPE4(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO0->DATA |= (1<<6);
// else
// LPC_GPIO0->DATA &= ~(1<<6);
pe4=s;
}
void setPE5(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO0->DATA |= (1<<7);
// else
// LPC_GPIO0->DATA &= ~(1<<7);
pe5=s;
}
void setPE6(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO0->DATA |= (1<<4);
// else
// LPC_GPIO0->DATA &= ~(1<<4);
pe6=s;
}
void setPE7(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO0->DATA |= (1<<3);
// else
// LPC_GPIO0->DATA &= ~(1<<3);
pe7=s;
}
void setPE8(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO0->DATA |= (1<<2);
// else
// LPC_GPIO0->DATA &= ~(1<<2);
pe8=s;
}
void setPE9(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO1->DATA |= (1<<0);
// else
// LPC_GPIO1->DATA &= ~(1<<0);
pe9=s;
}
void setPEA(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO1->DATA |= (1<<1);
// else
// LPC_GPIO1->DATA &= ~(1<<1);
pea=s;
void printHexArray(int size, char x[]){
int i;
// unsigned int ch,cl;
for(i=0;i<size;i++){
printHexChar(x[i]);
}
// printf("\n");
xputs("\n");
}
void setPEB(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO1->DATA |= (1<<2);
// else
// LPC_GPIO1->DATA &= ~(1<<2);
peb=s;
}
void setPEC(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO1->DATA |= (1<<4);
// else
// LPC_GPIO1->DATA &= ~(1<<4);
pec=s;
}
void setPED(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO1->DATA |= (1<<5);
// else
// LPC_GPIO1->DATA &= ~(1<<5);
ped=s;
}
void setPEE(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO1->DATA |= (1<<8);
// else
// LPC_GPIO1->DATA &= ~(1<<8);
pee=s;
}
void setPEF(unsigned char s){
//LPC_GPIO0->DATA |= (1<<7); //PIO0-7 high led 1 on
// LPC_GPIO0->DATA &= ~(1<<7); //PIO0-7 low
//LPC_GPIO1->DATA |= (1<<5); //PIO0-5 high led 2 off
// if(s==1)
// LPC_GPIO1->DATA |= (1<<9);
// else
// LPC_GPIO1->DATA &= ~(1<<9);
pef=s;
}
/*
// 1. port initialize
LPC_IOCON->PIO0_7 = 0xd0;
LPC_IOCON->PIO1_5 = 0xd0;
LPC_IOCON->PIO0_1 = 0xd0;
// 2. port direction
LPC_GPIO0->DIR |= (1<<7); //PIO0-7 to output
LPC_GPIO1->DIR |= (1<<5); //PIO0-5 to output
LPC_GPIO0->DIR &= ~(1<<1); //PIO0-1 to input
*/
unsigned char InBuffer::decode(void){
volatile unsigned char startp;
volatile unsigned char c,i;
// volatile unsigned char sbi;
// volatile unsigned char sbj;
// volatile unsigned char cs;
// unsigned char s[3];
void setPME0(unsigned char s){
// LPC_IOCON->PIO0_8 = 0xd0;
pinIO[0]=s;
if(s==1)
// LPC_GPIO0->DIR |= (1<<8); // output
pe0.output();
else
// LPC_GPIO0->DIR &= ~(1<<8); // input
pe0.input();
// trg_putHexArray((*this).bits,MaxBits);
// printHexArray(bitsParChar,(*this).bits);
startp=sampleInterval>>1;
startp=startp+sampleInterval;
c=0x00;
for(i=0;i<8;i++){
// trg_puts(" startp=");hex2str(startp,s);trg_puts(s);trg_puts("\n");
c=c<<1;
/* */
if(bits[startp]==1){
c=c|0x01;
}
/* */
/*
sbi=startp & 0x07;
sbj=startp >> 3;
cs=(*this).bits[sbj];
c=c|getIthBit(sbi,cs);
*/
startp=startp+sampleInterval;
}
// printf("decode c="); printHexChar(c); printf("\n");
return c;
}
void setPME1(unsigned char s){
// LPC_IOCON->PIO0_9 = 0xd0;
pinIO[1]=s;
if(s==1)
// LPC_GPIO0->DIR |= (1<<9); // output
pe1.output();
else
// LPC_GPIO0->DIR &= ~(1<<9); // input
pe1.input();
}
//void setPME2(unsigned char s){ PD.DDR.BIT.B2 = s; PMD.RM.B2=s;}
void setPME2(unsigned char s){
// LPC_IOCON->R_PIO0_11 = 0xd0;
pinIO[2]=s;
if(s==1)
// LPC_GPIO0->DIR |= (1<<11); // output
pe2.output();
else
// LPC_GPIO0->DIR &= ~(1<<11); // input
pe2.input();
}
//void setPME3(unsigned char s){ PD.DDR.BIT.B3 = s; PMD.RM.B3=s;}
void setPME3(unsigned char s){
// LPC_IOCON->PIO0_5 = 0xd0;
pinIO[3]=s;
if(s==1)
// LPC_GPIO0->DIR |= (1<<5); // output
pe3.output();
else
// LPC_GPIO0->DIR &= ~(1<<5); // input
pe3.input();
}
//void setPME4(unsigned char s){ PD.DDR.BIT.B4 = s; PMD.RM.B4=s;}
void setPME4(unsigned char s){
// LPC_IOCON->PIO0_6 = 0xd0;
pinIO[4]=s;
if(s==1)
pe4.output();
// LPC_GPIO0->DIR |= (1<<6); // output
else
// LPC_GPIO0->DIR &= ~(1<<6); // input
pe4.input();
}
//void setPME5(unsigned char s){ PD.DDR.BIT.B5 = s; PMD.RM.B5=s;}
void setPME5(unsigned char s){
// LPC_IOCON->PIO0_7 = 0xd0;
pinIO[5]=s;
if(s==1)
// LPC_GPIO0->DIR |= (1<<7); // output
pe5.output();
else
// LPC_GPIO0->DIR &= ~(1<<7); // input
pe5.input();
}
//void setPME6(unsigned char s){ PD.DDR.BIT.B6 = s; PMD.RM.B6=s;}
void setPME6(unsigned char s){
// LPC_IOCON->PIO0_4 = 0xd0;
pinIO[6]=s;
if(s==1)
// LPC_GPIO0->DIR |= (1<<4); // output
pe6.output();
else
// LPC_GPIO0->DIR &= ~(1<<4); // input
pe6.input();
}
//void setPME7(unsigned char s){ PD.DDR.BIT.B7 = s; PMD.RM.B7=s;}
void setPME7(unsigned char s){
// LPC_IOCON->PIO0_3 = 0xd0;
pinIO[7]=s;
if(s==1)
// LPC_GPIO0->DIR |= (1<<3); // output
pe7.output();
else
// LPC_GPIO0->DIR &= ~(1<<3); // input
pe7.input();
}
void setPME8(unsigned char s){
// LPC_IOCON->PIO0_2 = 0xd0;
pinIO[8]=s;
if(s==1)
// LPC_GPIO0->DIR |= (1<<2); // output
pe8.output();
else
// LPC_GPIO0->DIR &= ~(1<<2); // input
pe8.input();
}
void setPME9(unsigned char s){
// LPC_IOCON->PIO1_0 = 0xd0;
pinIO[9]=s;
if(s==1)
// LPC_GPIO1->DIR |= (1<<0); // output
pe9.output();
else
// LPC_GPIO1->DIR &= ~(1<<0); // input
pe9.input();
}
//void setPME2(unsigned char s){ PD.DDR.BIT.B2 = s; PMD.RM.B2=s;}
void setPMEA(unsigned char s){
// LPC_IOCON->PIO1_1 = 0xd0;
pinIO[10]=s;
if(s==1)
// LPC_GPIO1->DIR |= (1<<1); // output
pea.output();
else
// LPC_GPIO1->DIR &= ~(1<<1); // input
pea.input();
}
//void setPME3(unsigned char s){ PD.DDR.BIT.B3 = s; PMD.RM.B3=s;}
void setPMEB(unsigned char s){
// LPC_IOCON->PIO1_2 = 0xd0;
pinIO[11]=s;
if(s==1)
// LPC_GPIO1->DIR |= (1<<2); // output
peb.output();
else
// LPC_GPIO1->DIR &= ~(1<<2); // input
peb.input();
}
//void setPME4(unsigned char s){ PD.DDR.BIT.B4 = s; PMD.RM.B4=s;}
void setPMEC(unsigned char s){
// LPC_IOCON->PIO1_4 = 0xd0;
pinIO[12]=s;
if(s==1)
// LPC_GPIO1->DIR |= (1<<4); // output
pec.output();
else
// LPC_GPIO1->DIR &= ~(1<<4); // input
pec.input();
}
//void setPME5(unsigned char s){ PD.DDR.BIT.B5 = s; PMD.RM.B5=s;}
void setPMED(unsigned char s){
// LPC_IOCON->PIO1_5 = 0xd0;
pinIO[13]=s;
if(s==1)
// LPC_GPIO1->DIR |= (1<<5); // output
ped.output();
else
// LPC_GPIO1->DIR &= ~(1<<5); // input
ped.input();
}
//void setPME6(unsigned char s){ PD.DDR.BIT.B6 = s; PMD.RM.B6=s;}
void setPMEE(unsigned char s){
// LPC_IOCON->PIO1_8 = 0xd0;
pinIO[14]=s;
if(s==1)
// LPC_GPIO1->DIR |= (1<<8); // output
pee.output();
else
// LPC_GPIO1->DIR &= ~(1<<8); // input
pee.input();
}
//void setPME7(unsigned char s){ PD.DDR.BIT.B7 = s; PMD.RM.B7=s;}
void setPMEF(unsigned char s){
// LPC_IOCON->PIO1_9 = 0xd0;
pinIO[15]=s;
if(s==1)
// LPC_GPIO1->DIR |= (1<<9); // output
pef.output();
else
// LPC_GPIO1->DIR &= ~(1<<9); // input
pef.input();
}
unsigned char getPE0(void){
// unsigned char rtn;
// rtn = LPC_GPIO0-> MASKED_ACCESS[(1<<8)] >> 8;
// return rtn;
return pe0;
unsigned char InBuffer::getChar(void){
unsigned char rtn;
if(status==0) return 0x00;
if(status==1) return 0x00;
// trg_puts(" getChar"); trg_putc((*this).cin); trg_puts("\n");
rtn=cin;
status=0;
cin=0;
return rtn;
}
unsigned char getPE1(void){
// unsigned char rtn;
// rtn = LPC_GPIO0-> MASKED_ACCESS[(1<<9)] >> 9;
// return rtn;
return pe1;
}
unsigned char getPE2(void){
// unsigned char rtn;
// rtn = LPC_GPIO0-> MASKED_ACCESS[(1<<11)] >> 11;
return pe2;
}
unsigned char getPE3(void){
// unsigned char rtn;
// rtn = LPC_GPIO0-> MASKED_ACCESS[(1<<5)] >> 5;
return pe3;
}
unsigned char getPE4(void){
// unsigned char rtn;
// rtn = LPC_GPIO0-> MASKED_ACCESS[(1<<6)] >> 6;
return pe4;
}
unsigned char getPE5(void){
// unsigned char rtn;
// rtn = LPC_GPIO0-> MASKED_ACCESS[(1<<7)] >> 7;
return pe5;
}
unsigned char getPE6(void){
// unsigned char rtn;
// rtn = LPC_GPIO0-> MASKED_ACCESS[(1<<4)] >> 4;
return pe6;
}
unsigned char getPE7(void){
// unsigned char rtn;
// rtn = LPC_GPIO0-> MASKED_ACCESS[(1<<3)] >> 3;
return pe7;
}
unsigned char getPE8(void){
// unsigned char rtn;
// rtn = LPC_GPIO0-> MASKED_ACCESS[(1<<5)] >> 5;
return pe8;
}
unsigned char getPE9(void){
// unsigned char rtn;
// rtn = LPC_GPIO1-> MASKED_ACCESS[(1<<0)] >> 0;
return pe9;
}
unsigned char getPEA(void){
// unsigned char rtn;
// rtn = LPC_GPIO1-> MASKED_ACCESS[(1<<1)] >> 1;
return pea;
}
unsigned char getPEB(void){
// unsigned char rtn;
// rtn = LPC_GPIO1-> MASKED_ACCESS[(1<<2)] >> 2;
return peb;
}
unsigned char getPEC(void){
// unsigned char rtn;
// rtn = LPC_GPIO1-> MASKED_ACCESS[(1<<4)] >> 4;
return pec;
}
unsigned char getPED(void){
// unsigned char rtn;
// rtn = LPC_GPIO1-> MASKED_ACCESS[(1<<5)] >> 5;
return ped;
}
unsigned char getPEE(void){
// unsigned char rtn;
// rtn = LPC_GPIO1-> MASKED_ACCESS[(1<<8)] >> 8;
return pee;
}
unsigned char getPEF(void){
// unsigned char rtn;
// rtn = LPC_GPIO1-> MASKED_ACCESS[(1<<9)] >> 9;
return pef;
}
unsigned char getPME0(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO0->DIR;
// rtn=(unsigned char) ((d & (1<<8))>>8);
return pinIO[0];
void InBuffer::setStatus( unsigned char s){
status=s;
}
unsigned char getPME1(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO0->DIR;
// rtn=(unsigned char) ((d & (1<<9))>>9);
return pinIO[1];
unsigned char InBuffer::getStatus(void){
return status;
}
unsigned char getPME2(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO0->DIR;
// rtn=(unsigned char) ((d & (1<<11))>>11);
return pinIO[2];
}
unsigned char getPME3(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO0->DIR;
// rtn=(unsigned char) ((d & (1<<5))>>5);
return pinIO[3];
}
unsigned char getPME4(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO0->DIR;
// rtn=(unsigned char) ((d & (1<<6))>>6);
return pinIO[4];
}
unsigned char getPME5(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO0->DIR;
// rtn=(unsigned char) ((d & (1<<7))>>7);
return pinIO[5];
}
unsigned char getPME6(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO0->DIR;
// rtn=(unsigned char) ((d & (1<<4))>>4);
return pinIO[6];
}
unsigned char getPME7(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO0->DIR;
// rtn=(unsigned char) ((d & (1<<3))>>3);
return pinIO[7];
}
unsigned char getPME8(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO0->DIR;
// rtn=(unsigned char) ((d & (1<<2))>>2);
return pinIO[8];
}
unsigned char getPME9(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO1->DIR;
// rtn=(unsigned char) ((d & (1<<0))>>0);
return pinIO[9];
}
unsigned char getPMEA(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO1->DIR;
// rtn=(unsigned char) ((d & (1<<1))>>1);
return pinIO[10];
}
unsigned char getPMEB(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO1->DIR;
// rtn=(unsigned char) ((d & (1<<2))>>2);
return pinIO[11];
}
unsigned char getPMEC(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO1->DIR;
// rtn=(unsigned char) ((d & (1<<4))>>4);
return pinIO[12];
}
unsigned char getPMED(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO1->DIR;
// rtn=(unsigned char) ((d & (1<<5))>>5);
return pinIO[13];
}
unsigned char getPMEE(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO1->DIR;
// rtn=(unsigned char) ((d & (1<<8))>>8);
return pinIO[14];
}
unsigned char getPMEF(void){
// unsigned char rtn;
// uint32_t d=LPC_GPIO1->DIR;
// rtn=(unsigned char) ((d & (1<<9))>>9);
return pinIO[15];
}
void setPortFunctions(){
/*
unsigned char (*getPEX[16])()={
getPE0, getPE1, getPE2, getPE3,
getPE4, getPE5, getPE6, getPE7,
getPE8, getPE9, getPEA, getPEB,
getPEC, getPED, getPEE, getPEF
};
*/
getPEX[0]=getPE0;
getPEX[1]=getPE1;
getPEX[2]=getPE2;
getPEX[3]=getPE3;
getPEX[4]=getPE4;
getPEX[5]=getPE5;
getPEX[6]=getPE6;
getPEX[7]=getPE7;
getPEX[8]=getPE8;
getPEX[9]=getPE9;
getPEX[10]=getPEA;
getPEX[11]=getPEB;
getPEX[12]=getPEC;
getPEX[13]=getPED;
getPEX[14]=getPEE;
getPEX[15]=getPEF;
//void parseForInBit(struct inbit *this, unsigned char c);
getPBX[0]=getPEA;
getPBX[1]=getPEB;
getPBX[2]=getPEC;
getPBX[3]=getPED;
getPBX[4]=getPEE;
getPBX[5]=getPEF;
InBuffer::InBuffer(unsigned char id, CommandBuffer *com ){
faceID=id;
sampleInterval=SampleInterval0*SampleIntForDecode0;
sampleIntForDecode=SampleIntForDecode0;
status=2;
setConnected((unsigned char)0);
cin=0;
command=com;
cbp=0;
}
setPEX[0]=setPE0;
setPEX[1]=setPE1;
setPEX[2]=setPE2;
setPEX[3]=setPE3;
setPEX[4]=setPE4;
setPEX[5]=setPE5;
setPEX[6]=setPE6;
setPEX[7]=setPE7;
setPEX[8]=setPE8;
setPEX[9]=setPE9;
setPEX[10]=setPEA;
setPEX[11]=setPEB;
setPEX[12]=setPEC;
setPEX[13]=setPED;
setPEX[14]=setPEE;
setPEX[15]=setPEF;
void InBuffer::parse( unsigned char c){
// unsigned char cx;
// unsigned char p;
// unsigned char s[3];
CommandBuffer *com;
com=command;
// printf("face-%d char:%c is inputed.\n\r",faceID, c);
// trg_puts("parseForInBit-1-");trg_putc(c); trg_puts("\n");
// hex2str(c,s);
// trg_puts(" codeHex="); trg_puts(s); trg_puts("\n");
if(cbp>MaxInterFaceStrLen) {
cbp=0;
}
if(cbp==0){
if(c=='p'){
cbp++;
return;
}
else
if(c=='a'){
cbp=0;
(*com).ackReturned(faceID);
return;
}
}
else
if(cbp==1){
inlen=h2i1(c);
cbp++;
return;
}
else
if(cbp==2){
inlen=inlen*16+h2i1(c);
cbp++;
return;
}
else{
inputBuffer[cbp-3]=c;
cbp++;
if(inlen<cbp-3){
inputBuffer[cbp-2]=0;
// returnAck();
return;
}
if(inlen> cbp-3){
return;
}
// trg_puts("parseForInBit-2"); trg_putc(c); trg_puts("\n");
inputBuffer[cbp-3]=0;
int clen=xstrlen(inputBuffer);
while(1){
if(((*com).putQueue)(faceID, inputBuffer,clen)==1){
cbp=0;
returnAck();
return;
}
wait(100);
}
}
setPBX[0]=setPEA;
setPBX[1]=setPEB;
setPBX[2]=setPEC;
setPBX[3]=setPED;
setPBX[4]=setPEE;
setPBX[5]=setPEF;
// trg_puts("parseForInBit-3");;trg_putc(c); trg_puts("\n");
getPMEX[0]=getPME0;
getPMEX[1]=getPME1;
getPMEX[2]=getPME2;
getPMEX[3]=getPME3;
getPMEX[4]=getPME4;
getPMEX[5]=getPME5;
getPMEX[6]=getPME6;
getPMEX[7]=getPME7;
getPMEX[8]=getPME8;
getPMEX[9]=getPME9;
getPMEX[10]=getPMEA;
getPMEX[11]=getPMEB;
getPMEX[12]=getPMEC;
getPMEX[13]=getPMED;
getPMEX[14]=getPMEE;
getPMEX[15]=getPMEF;
}
getPMBX[0]=getPMEA;
getPMBX[1]=getPMEB;
getPMBX[2]=getPMEC;
getPMBX[3]=getPMED;
getPMBX[4]=getPMEE;
getPMBX[5]=getPMEF;
void InBuffer::returnAck(void){
// (*command).putChar(faceID,'a');
}
int InBuffer::getNextDoorDirection(void){
return nextDoorDirection;
}
setPMEX[0]=setPME0;
setPMEX[1]=setPME1;
setPMEX[2]=setPME2;
setPMEX[3]=setPME3;
setPMEX[4]=setPME4;
setPMEX[5]=setPME5;
setPMEX[6]=setPME6;
setPMEX[7]=setPME7;
setPMEX[8]=setPME8;
setPMEX[9]=setPME9;
unsigned char InBuffer::getConnected(void){
// printf("face-%d getConnected=%d\n\r",(int)faceID,(int)connected);
return connected;
}
setPMEX[10]=setPMEA;
setPMEX[11]=setPMEB;
setPMEX[12]=setPMEC;
setPMEX[13]=setPMED;
setPMEX[14]=setPMEE;
setPMEX[15]=setPMEF;
setPMBX[0]=setPMEA;
setPMBX[1]=setPMEB;
setPMBX[2]=setPMEC;
setPMBX[3]=setPMED;
setPMBX[4]=setPMEE;
setPMBX[5]=setPMEF;
void InBuffer::setConnected(unsigned char x){
connected=x;
// printf("face-%d setConnected=%d\n\r",(int)faceID,(int)x);
}
}}
----
#counter