//********************************************************************* // Simple RSS reader for FOX board // Read RSS news and show them on a 20x2 PLED display // with standard Hitachi HD44780 4 bits interfaces // // More info on: http://www.acmesystems.it/?id=15 // Author: Sergio Tanzilli // Web site: http://www.acmesystems.it //********************************************************************* #include "stdio.h" #include "stdlib.h" #include "unistd.h" #include "sys/ioctl.h" #include "fcntl.h" #include "asm/etraxgpio.h" #include "stdarg.h" #include "string.h" // Software delay in ms void msDelay(int ms) { int i,a; int delayvar=10; for (a=0;a>4)&0x000F; lcd_put_nibble(fd,a); lcd_e_strobe(fd); a=data&0x000F; lcd_put_nibble(fd,a); lcd_e_strobe(fd); } // Lcd initialization void lcd_init(int fd) { unsigned long data, mask; data = mask = 0xFF << 8; ioctl(fd, _IO(ETRAXGPIO_IOCTYPE, 0x13), &mask); if ((mask & data) != data) printf("Check your kernel config\n"); lcd_rs_lo(fd); lcd_e_lo(fd); msDelay(15); lcd_put_nibble(fd,0x03); lcd_e_strobe(fd); msDelay(4); lcd_e_strobe(fd); msDelay(2); lcd_e_strobe(fd); msDelay(2); lcd_put_nibble(fd,0x02); lcd_e_strobe(fd); msDelay(1); lcd_putc(fd,0x28,0); msDelay(1); lcd_putc(fd,0x06,0); msDelay(1); lcd_putc(fd,0x0C,0); msDelay(1); lcd_putc(fd,0x01,0); msDelay(2); } // Locate cursor on LCD // row (0-2) // col (1-39) void lcd_locate(int fd, int row, int col) { lcd_putc(fd,0x80+row*0x40+col,0); usDelay(35); } // Clear LCD void lcd_clear(int fd) { lcd_putc(fd,0x01,0); msDelay(2); } // Lcd version of printf void lcd_printf(int fd,char *format, ...) { int i; va_list argptr; char buffer[1024]; va_start(argptr,format); vsprintf(buffer,format,argptr); va_end(argptr); for (i=0;i0) { contentsbuffer[p]=0; if (strcmp(tagbuffer,"title")==0) { printf("%s\n",contentsbuffer); sprintf(lcdbuffer,"%20.20s%s%20.20s"," ",contentsbuffer," "); for (i=0;i<(strlen(lcdbuffer)-20+1);i++) { lcd_locate(fd,1,0); lcd_printf(fd,"%-20.20s",lcdbuffer+i); msDelay(90); msDelay(90); msDelay(90); } } } rxstate=RX_TAG; p=0; continue; } if (rxstate==RX_TAG) { tagbuffer[p]=ch; if (ch=='>') { tagbuffer[p]=0; rxstate=RX_CONTENTS; p=0; //printf("<%s>\n",tagbuffer); continue; } p++; continue; } if (rxstate==RX_CONTENTS) { contentsbuffer[p]=ch; p++; continue; } } close(rss_fd); } close(fd); exit(0); }