bosko lekovic
/
EthTCPclient_05_03
p1
Diff: PGSdisplay.cpp
- Revision:
- 7:be56cf51685d
- Parent:
- 6:19e7658575fe
--- a/PGSdisplay.cpp Mon Feb 24 17:14:44 2020 +0000 +++ b/PGSdisplay.cpp Thu Jun 18 15:23:39 2020 +0000 @@ -9,49 +9,82 @@ #define DISP_ADR 40 DigitalOut tast(PTB19,0); +DigitalOut proba(PTB18,0); ////RawSerial rs485(PTC17,PTC16); -RawSerial rs485(PTD3,PTD2); +//Serial rs485(PTD3,PTD2); +UARTSerial rs485(PTD3,PTD2); +DigitalOut led(LED2,1); + + +void printT(char *s, char *tel, int duzina); + +char urxbuf[100]; +int urb=0; -void ev(int) +void rec( void ) { - tast=0; + int i = 0, j = 0; + while(true) + { +proba = 1; + int k; + // if( rs485.readable() ) + { + urb = rs485.read((uint8_t*)&urxbuf[0],100/*,NULL,NULL*/); + +// printf("k=%x\n\r",k); + printT("prijem", urxbuf, urb); + } +proba = 0; + thread_sleep_for(1); + } } -uint8_t rs[100]; -void init_disp( void) + +int dispGetResponce( void ) { - rs485.format(8,RawSerial::Even,1); - while(rs485.readable()) - { - rs485.read(rs,1,NULL); - } - putOnDisp("elcom", 3); - int i =0; - //while(rs485.readable()==0); - wait(0.5); - if(rs485.readable()) - { - - rs485.read(rs+i,1,NULL); - i++; - } - printf("ODGOVOR: %X - %d\n\r",rs[0],i); - //int i=0; -// -// printf("%d\n\r",rs485.readable()); -// if(rs485.readable()) -// { -// printf("\n\rRECEIVE: "); -// while(rs485.readable()) -// { -// rs[i++] = rs485.getc(); -// } -// printf("%X: RECEIVED %d: \n\r",rs[0], i); -// } + urb = 0; + thread_sleep_for(100); + if(urb && (urxbuf[0] == 0xe5)) return 1; + return 0; } unsigned char buf_tel[100] = {0x71,0x00,0x0D,0x71,0x43,DISP_ADR,0x1B,0x4A,0x01,0x01, /*0x1b,0x45,0x1,*/ 0x1B,0x43,1,0x33,0xD5,0x16}; + +void init_disp( void) +{ + rs485.set_format(8,SerialBase::Even,1); +// rs485.attach( tast_off, Serial::TxIrq ); +// rs485.attach( rc, Serial::RxIrq ); + + Thread *Ttast = new Thread; + extern void tast_fun(void); + Ttast->start( (tast_fun )); + + + Thread *Trec = new Thread; + Trec->start( rec ); + + + while( true ) + { + extern void putOnDispNo( int i, char boja); + static int i=1; + buf_tel[5] = i; + putOnDispNo(i, 1); + + char *r; + if( dispGetResponce( ) ) { printf( "adresa je %d\n\r", i); break;} + i++; + if(i==0) i++; + else if(i == 254) {i = 1; break;} + } + +} + + + #define NO_BEFORE_DATA 13 #define NO_WITH_DATA (NO_BEFORE_DATA + strlen(s)) @@ -71,10 +104,15 @@ buf_tel[1]=ubb>>8; buf_tel[2]=ubb; + +// Thread *t = new Thread; +// extern void tast_fun(Thread* t); +// t->start( callback(tast_fun, t )); +// thread_sleep_for(1); - tast=1; - rs485.write(buf_tel, NO_WITH_DATA+2+2,ev); - + tast = 1; + rs485.write((const void*)buf_tel, (size_t)(NO_WITH_DATA+2+2)); +// for(int i=0; i< NO_WITH_DATA+2+2; i++ ) rs485.putc(buf_tel[i]); } void putOnDispNo(int broj, char boja) @@ -101,6 +139,39 @@ } + +int rs485tastovanje( int tast ) +{ +static int start = 0; +int ret = -1; + if( tast == 0 ) { start = 0; } + else + { + if( start == 0) { start = 1; ret = 0; thread_sleep_for(1);} + else + { + volatile char c = UART2->S1; + if ( c & UART_S1_TC_MASK) {ret = 1; start = 0; } + } + } + return ret; +} + + +void tast_fun( /*Thread *t*/void ) +{ + while( true ) + { + extern int rs485tastovanje( int ); + int ret; + if( (ret = rs485tastovanje( tast )) == 1 ) { tast = 0; } + } +// kos = t; +// printf("___istastovanje %d tast = %d thr=%d \n\r", brb, (int)tast, t); +// fflush(stdout); +} + + char * extract_string( char delimiter, char *ulazni_str, int n_str ) { int br_str=0; @@ -122,3 +193,14 @@ return NULL; } + +void printT(char *s, char *tel, int duzina){ + int i=0; + printf("%s duzina = %d: ",s,duzina); + while(i<duzina){ + printf("%02X ", tel[i]); + i++; + } + printf("\n\r"); + fflush(stdout); +}