/[H8]/trunk/PIC/Demo trimmet/TFTPcDemo.c
ViewVC logotype

Diff of /trunk/PIC/Demo trimmet/TFTPcDemo.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 93 by hedin, Wed May 16 15:46:08 2007 UTC revision 111 by hedin, Mon May 28 15:00:55 2007 UTC
# Line 1  Line 1 
1  #define THIS_IS_STACK_APPLICATION  #define THIS_IS_STACK_APPLICATION
2    
3  #include "stacktsk.h"  #include "stacktsk.h"
 #include "dhcp.h"  
 #include "xlcd.h"  
4  #include "tick.h"  #include "tick.h"
5  #include "delay.h"  #include "delay.h"
6  #include "udp.h"  #include "network.h"
7  #include "arp.h"  #include "barcode.h"
8  #include "arptsk.h"  #include "keyboard.h"
9  #include "tcp.h"  #include "MyI2C.h"
10    #include "xlcd.h"
11    #include <string.h>
 // All TFTP command statuts display will be done on first line of LCD.  
 #define TFTP_COMMAND_DISPLAY_LINE       0  
   
 // Result will be displayed at y = 15.  
 #define TFTP_COMMAND_RESULT_POSITION    15  
   
   
 #define STARTUP_MSG "G1_Build_0x00"  
   
 ROM char StartupMsg[] = STARTUP_MSG;  
   
 #if defined(STACK_USE_DHCP) || defined(STACK_USE_IP_GLEANING)  
 ROM char DHCPMsg[] = "DHCP/Gleaning...";  
 #endif  
   
 ROM char SetupMsg[] = "Board Setup...";  
   
 //                         1234567890123456  
 ROM char blankLCDLine[] = "                ";  
12    
13  /*  /*
14   * This is used by other stack elements.   * This is used by other stack elements.
# Line 66  __CONFIG(2, PWRTEN & BORDIS & WDTDIS); Line 45  __CONFIG(2, PWRTEN & BORDIS & WDTDIS);
45   */   */
46  static void InitAppConfig(void);  static void InitAppConfig(void);
47  static void InitializeBoard(void);  static void InitializeBoard(void);
 static void DisplayIPValue(IP_ADDR *IPVal, BOOL bToLCD);  
48  static void SetConfig(void);  static void SetConfig(void);
49    
50  /*void network_send_hello( unsigned char termid )  // Skal fjernes
51  {  #define LCD_IC 0x74
52             if (DHCPIsBound())  void mylcd_write_byte(unsigned char data)
53          {  {
54                  RA3 =0;          StartI2C(LCD_IC);
55                  if (sock_open == 0)          WriteI2CByte( data );
56                  {          StopI2C();
57                          if (ARPIsTxReady())          Delay10us(1); //I2C spec's siger min 4.7 uSec mellem stop og næste start
                         {  
                                 if (is_resolved == 0)  
                                 {  
                                         ARPResolve( &rnode.IPAddr);  
                                         is_resolved = 1;  
                                 }  
                                 else  
                                 {  
                                         if (ARPIsResolved( &rnode.IPAddr, &rnode.MACAddr))  
                                         //if (MyArp( &rnode))  
                                         {  
                                                 usock1=UDPOpen(2000,&rnode,3000); // socket to send UDP  
                                                 sock_open=1;  
                                         }  
                                 }        
                         }  
                 }  
                   
                 if (UDPIsPutReady(usock1) && datagrams_to_send>0)  
                 {  
                         UDPPut( rnode.MACAddr.v[0] );  
                         UDPPut( rnode.MACAddr.v[1] );  
                         UDPPut( rnode.MACAddr.v[2] );  
                         UDPPut( rnode.MACAddr.v[3] );  
                         UDPPut( rnode.MACAddr.v[4] );  
                         UDPPut( rnode.MACAddr.v[5] );  
                         UDPPut('D');  
                         UDPPut('a');  
                         UDPPut('w');  
                         UDPPut(0);  
                         UDPFlush();  
                         datagrams_to_send--;  
                 }  
                 }  
58  }  }
 */  
59    
60  void WriteTcpStatus(char status)  
 {  
         XLCDGoto(0,0);  
         status += 'a';  
         XLCDPut(status);  
           
 }  
61    
62  void main(void)  void main(void)
63  {  {
64      // Tick to blink SYSTEM led.      // Tick to blink SYSTEM led.
65      static TICK t = 0;      static TICK t = 0;
66      TCP_SOCKET usock1;      char i;
67      NODE_INFO rnode;      unsigned char numbers[20];
68      char sock_state = 0;      unsigned long amount;
69      char is_resolved = 0;      unsigned char lcd_buffer[21];
70      char has_arp = 0;          short number_count = 0;
71            short produkt_amount = 0;
72            static bit hello = 0;
73            short varetal = 1;
74                    
75      TICK tick;      TICK tick;
76      TICK lastTick;      TICK lastTick;
# Line 154  void main(void) Line 94  void main(void)
94      InitAppConfig();      InitAppConfig();
95    
96      StackInit();      StackInit();
97        
98  #if defined(STACK_USE_DHCP) || defined(STACK_USE_IP_GLEANING)      network_init();
99      if ( AppConfig.Flags.bIsDHCPEnabled )      barcode_init();
100      {      InitI2C();
101          XLCDGoto(1, 0);      XLCDInit();
102          XLCDPutROMString(DHCPMsg);          
     }  
     else  
     {  
         /*  
          * Force IP address display update.  
          */  
         myDHCPBindCount = 1;  
 #if defined(STACK_USE_DHCP)  
         DHCPDisable();  
 #endif  
     }  
 #endif  
103    
104    
105      /*      /*
# Line 188  void main(void) Line 116  void main(void)
116       */       */
117            
118    
119          // Defines the IP add. on the server machine          // Defines the IP add. on the server machine (rnode is defined in network.h)
120          rnode.IPAddr.v[0] = 192;          rnode.IPAddr.v[0] = 192;
121          rnode.IPAddr.v[1] = 168;          rnode.IPAddr.v[1] = 168;
122          rnode.IPAddr.v[2] = 1;          rnode.IPAddr.v[2] = 1;
123          rnode.IPAddr.v[3] = 20;          rnode.IPAddr.v[3] = 20;
         /*rnode.MACAddr.v[0] = 0x00;  
         rnode.MACAddr.v[1] = 0x16;  
         rnode.MACAddr.v[2] = 0x76;  
         rnode.MACAddr.v[3] = 0x9F;  
         rnode.MACAddr.v[4] = 0xFE;  
         rnode.MACAddr.v[5] = 0xDA;*/  
           
           
124    
       
125      while(1)      while(1)
126      {      {
127                char keyboard_entered;
128                char network_error;
129    
130    
131          /*          /*
132           * Blink SYSTEM LED every second.           * Blink SYSTEM LED every second.
133           */           */
# Line 225  void main(void) Line 148  void main(void)
148           * For DHCP information, display how many times we have renewed the IP           * For DHCP information, display how many times we have renewed the IP
149           * configuration since last reset.           * configuration since last reset.
150           */           */
           
         if ( DHCPBindCount != myDHCPBindCount )  
         {  
             DisplayIPValue(&AppConfig.MyIPAddr, TRUE);  
             myDHCPBindCount = DHCPBindCount;  
151    
152              if ( AppConfig.Flags.bIsDHCPEnabled )                          //mylcd_write_byte(0b10100101);
             {  
                 XLCDGoto(1, 14);  
                 if ( myDHCPBindCount < 0x0a )  
                     XLCDPut(myDHCPBindCount + '0');  
                 else  
                     XLCDPut(myDHCPBindCount + 'A');  
             }  
         }  
           
         WriteTcpStatus( TCB[usock1].smState );  
           
         if (DHCPIsBound())  
         {  
                 RA3 =0;  
                 if (has_arp == 0)  
                 {  
                         if (ARPIsTxReady())  
                         {  
                                 if (is_resolved == 0)  
                                 {  
                                         ARPResolve( &rnode.IPAddr);  
                                         is_resolved = 1;  
                                 }  
                                 else  
                                 {  
                                         if (ARPIsResolved( &rnode.IPAddr, &rnode.MACAddr))  
                                         {  
                                                         has_arp = 1;  
                                         }  
                                 }  
           
                         }  
                 }  
                   
                 if (has_arp == 1)  
                 {  
                         if (sock_state == 0)  
                         {  
                         usock1=TCPConnect(&rnode,3000);  
                                 sock_state = 1;  
                         }  
                         if (sock_state ==1 && TCPIsConnected(usock1) && TCPIsPutReady(usock1))  
                         {  
                                 TCPPut(usock1,'D');  
                                 TCPPut(usock1,'a');  
                                 TCPPut(usock1,'w');  
                                 TCPPut(usock1,0);  
                         TCPFlush(usock1);  
                                 sock_state = 2;  
                         }  
                   
                         if (sock_state == 2 && TCPIsPutReady(usock1))  
                     {  
                                 TCPDisconnect(usock1);  
                                 lastTick = TickGet();  
                                 sock_state =3;  
                         }  
                         tick = TickGet();  
                         diffTicks = TickGetDiff(tick, lastTick);  
                           
                         if ( sock_state == 3 && diffTicks > ((TICK)TICK_SECOND * (TICK)2) )  
                                 sock_state = 0;  
                                   
                     }  
         }  
     }  
 }  
153    
154  #if defined(MCHP_C18)                          if( (barcode_is_ready() || keyboard_entered) && !hello){
155      #pragma interrupt HighISR save=section(".tmpdata")                                  network_send_hello(0x01);
156      void HighISR(void)                                  hello = 1;
157  #elif defined(HITECH_C18)                          }
158      #if defined(STACK_USE_SLIP)                          if (barcode_is_ready())
159          extern void MACISR(void);                          {
160      #endif                                  for (i=0;i< barcode_get_length(); i++)
161      void interrupt HighISR(void)                                  {
162  #endif                                          global_network_char[i] = global_barcode_buffer[i];
163  {                                          global_network_charlen = barcode_get_length();
164      TickUpdate();                                  }
165                                    barcode_reset();
166                                    network_send_scan_frame( varetal, global_network_charlen );
167                                    varetal = 1;
168  /*  /*
169  #if defined(STACK_USE_SLIP)                                  XLCDClear();
170      MACISR();                                  XLCDGoto(1,0);
171  #endif                                  for (i=0;i< barcode_get_length(); i++)
172                                    {
173                                            XLCDPut(global_barcode_buffer[i]);
174                                    }
175  */  */
176  }                          }
177                            
178                            keyboard_entered = keyboard_read_safe();
179                            if( keyboard_entered )
180                            {
181                                    switch( keyboard_entered )
182                                    {
183                                            case 'A':
184                                            network_send_calc_total();
185                                            XLCDClear();
186                                            XLCDGoto(0,0);
187                                            for( i=0; i<global_network_charlen; i++ )
188                                            {
189                                                    XLCDPut(global_network_char[i]);
190                                            }
191                                            break;
192                                            
193                                            case 'B':
194                                            amount = atoi(numbers);
195                                            number_count = 0;
196                                            
197                                            network_send_cash_payed(amount);
198                                            network_send_goodbye();
199                                            hello = 0;
200                                            
201                                            sprintf(lcd_buffer,"%-5d", global_network_amount);
202                                            XLCDGoto(0,0);
203                                            XLCDPutString(lcd_buffer);
204                                            break;
205                                            
206                                            case 'C':
207                                            network_send_cancel_last();
208                                            break;
209                                            
210                                            case 'D':
211                                            network_send_cancel_all();                                      
212                                            break;
213                                            
214                                            case 'E':
215                                            for( i=0; i<number_count;i++ )
216                                            {
217                                                    global_network_char[i] = numbers[i];
218                                            }
219                                            network_send_scan_frame( varetal, number_count );
220                                            varetal = 1;
221                                            number_count = 0;
222                                            break;
223                                            
224                                            case 'F':
225                                            numbers[number_count] = 0; //nulterminering inden brug af atoi
226                                            varetal = atoi(numbers);
227                                            number_count = 0;
228                                            break;
229    
230                                            default:
231                                            numbers[number_count] = keyboard_entered;
232                                            
233                                            //numbers; // got to catch 0-9; 20 byte array.
234                                            number_count++; // amount of used bytes in numbers.
235                                    }
236                                    
237                            }
238    /*
239                            network_send_hello( 0x01 );
240    
241  #if defined(MCHP_C18)                          strncpy(global_network_char, "12345678", 8);
242  #pragma code highVector=0x08                          network_send_scan_frame( 1, 8 ); //1x vare, stregkodelængde=8
243  void HighVector (void)                          
244  {                          strncpy(global_network_char, "87654444", 8);
245      _asm goto HighISR _endasm                          network_send_scan_frame( 1, 8 ); //1x vare, stregkodelængde=8
246    
247                            network_send_calc_total();
248                            
249                            network_send_cash_payed(50000);
250                            
251                            network_send_cancel_last();
252                            
253                            network_send_cancel_all();
254                                                    
255                            network_send_goodbye();
256     */
257        }
258  }  }
 #pragma code /* return to default code section */  
 #endif  
259    
260  static void DisplayIPValue(IP_ADDR *IPVal, BOOL bToLCD)  void interrupt HighISR(void)
261  {  {
262      char IPDigit[8];          if (RCIF == 1)
263                    barcode_interrupt();
264      if ( bToLCD )          else
265      {          TickUpdate();
266          /*  }
          * Erase second line.  
          */  
         XLCDGoto(1, 0);  
         XLCDPutROMString(blankLCDLine);  
   
     }  
   
     /*  
      * Rewrite the second line.  
      */  
     XLCDGoto(1, 0);  
   
     itoa(IPVal->v[0], IPDigit);  
     if ( bToLCD )  
     {  
         XLCDPutString(IPDigit);  
         XLCDPut('.');  
     }  
   
     itoa(IPVal->v[1], IPDigit);  
     if ( bToLCD )  
     {  
         XLCDPutString(IPDigit);  
         XLCDPut('.');  
     }  
267    
     itoa(IPVal->v[2], IPDigit);  
     if ( bToLCD )  
     {  
         XLCDPutString(IPDigit);  
         XLCDPut('.');  
     }  
268    
     itoa(IPVal->v[3], IPDigit);  
     if ( bToLCD )  
         XLCDPutString(IPDigit);  
 }  
269    
270  /*********************************************************************  /*********************************************************************
271   * Function:        void InitializeBoard(void)   * Function:        void InitializeBoard(void)
# Line 399  static void InitializeBoard(void) Line 294  static void InitializeBoard(void)
294      /*      /*
295       * LCD is enabled using RA5.       * LCD is enabled using RA5.
296       */       */
297      PORTA_RA5 = 0;          // Disable LCD.  //    PORTA_RA5 = 0;          // Disable LCD.
298    
299      /*      /*
300       * Turn off the LED's.       * Turn off the LED's.
# Line 413  static void InitializeBoard(void) Line 308  static void InitializeBoard(void)
308       */       */
309      INTCON2_RBPU = 0;      INTCON2_RBPU = 0;
310    
     XLCDInit();  
     XLCDGoto(0, 0);  
     XLCDPutROMString(StartupMsg);  
   
311      T0CON = 0;      T0CON = 0;
312      INTCON_GIEH = 1;      INTCON_GIEH = 1;
313      INTCON_GIEL = 1;      INTCON_GIEL = 1;
# Line 500  BOOL StringToIPAddress(char *str, IP_ADD Line 391  BOOL StringToIPAddress(char *str, IP_ADD
391      return (byteIndex == 3);      return (byteIndex == 3);
392  }  }
393    
   
394  void XLCDDelay15ms(void)  void XLCDDelay15ms(void)
395  {  {
396      DelayMs(15);      DelayMs(15);
# Line 516  void XLCDDelay100us(void) Line 406  void XLCDDelay100us(void)
406      Delay10us(1);      Delay10us(1);
407      INTCON_GIEH = 1;      INTCON_GIEH = 1;
408  }  }
   
   

Legend:
Removed from v.93  
changed lines
  Added in v.111

  ViewVC Help
Powered by ViewVC 1.1.20