?login_element?

Subversion Repositories NedoOS

Rev

Rev 8 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <mem.h>
  4. #include <string.h>
  5.  
  6. #include <vcl.h>
  7. #include <NMHttp.hpp>
  8. #include <NMUDP.hpp>
  9. TNMUDP *NMUDP1;
  10.  
  11. #define BYTE unsigned char
  12. #define FILESIZE 1048576
  13. #define MAXLINESIZE 16
  14.  
  15. BYTE filebuf[FILESIZE];
  16.  
  17. unsigned short cycle;
  18.  
  19. //╧хЁхфрЄ№ фрээ√х (UDP ёюъхЄ)
  20. void __fastcall PeredUDP(AnsiString adr,int nLport,int nRport,unsigned char *Buf,int kol)
  21. //   adr   - рфЁхё ёхЄш Ethernet фы  ┴╙
  22. //   nport - эюьхЁ яюЁЄр
  23. {
  24.     int j=kol;
  25. //  UDP_send=-1;
  26.   NMUDP1->RemoteHost = adr;
  27.   NMUDP1->ReportLevel = 2/*Status_Basic*/;
  28.   NMUDP1->RemotePort = nRport;
  29.   NMUDP1->LocalPort = nLport;
  30. //  kolEthUDP=kol;
  31.   NMUDP1->SendBuffer(Buf,kol,j);   // яхЁхфрЄ№ срщЄ√
  32. }
  33.  
  34. int call_armmon(BYTE* msg, int len)
  35. {
  36.  int VZ;
  37.  int i;
  38.  //int b=0xd0;
  39.  //if (len<15) for(i=len;i<15;i++)msg[i]=0x00;
  40.  //fwrite(msg,15,1,fout);
  41.  //fwrite(&b,1,1,fout);
  42. // try {;
  43. // Form1->UDP_read=0;
  44.   PeredUDP("192.168.1.87",39000,39000,msg,len);
  45. // VZ=Form1->UDP_send;
  46. // } catch (const Exception &e) {
  47. // VZ=-1;
  48. // };
  49.  //Form6->Obr_ZO("0555");
  50.  return(VZ);
  51. }
  52. /*
  53. int read_armmon(BYTE* msg, int len)
  54. {
  55.  int VZ,oldVZ,i;
  56.  double begtime,curtime;
  57.  int b=0x0d;
  58.  begtime=Form6->Read_ots_Vrem();
  59.  do {
  60.   Form6->Obr_ZO("0777");
  61.   curtime=Form6->Read_ots_Vrem();
  62.   VZ=Form1->UDP_cycle;
  63.   if(VZ!=oldVZ) { //яюыєўхэю эютюх ёююс∙хэшх
  64.    oldVZ=VZ;
  65.    for(i=0;i<len;i++) {
  66.     msg[i]=Form1->BufEthUDP[i];
  67.     globmsg[i]=Form1->BufEthUDP[i];
  68.    }
  69.    if (len<15) for(i=len;i<15;i++)msg[i]=0x00;
  70.    fwrite(msg,15,1,fout);
  71.    fwrite(&b,1,1,fout);
  72.    if((byte)(msg[1]&0xff)==(byte)(cycle&0xff))break;
  73.   }
  74.  }while((curtime-begtime)<0.1);
  75.  return(VZ);
  76. }
  77. */
  78. int writetoarm(unsigned int addr, BYTE* mas, int bytes_in_line)
  79. {
  80. int i;
  81. byte msg[300];
  82.  cycle++;
  83.         msg[0]=cycle>>8;
  84.         msg[1]=cycle;
  85.         msg[2]=0; //фышэр сєЇхЁр Єхъє∙хую ёюёЄю эш 
  86.         msg[3]=0x04;
  87.         msg[4]=bytes_in_line>>8;//0x00;
  88.         msg[5]=bytes_in_line;//0x01;
  89.         msg[6]=addr>>24;
  90.         msg[7]=addr>>16;
  91.         msg[8]=addr>>8;
  92.         msg[9]=addr;
  93. for(i=0;i<bytes_in_line;i++) {
  94.         msg[10+i]=mas[i];
  95. };
  96.         call_armmon(msg,10+bytes_in_line);
  97.         //read_armmon(msg,10);
  98.         addr++;
  99. return(0);
  100. }
  101.  
  102. int runprogram(unsigned int addr)
  103. {
  104. byte msg[300];
  105.  cycle++;
  106.         msg[0]=cycle>>8;
  107.         msg[1]=cycle;
  108.         msg[2]=0; //фышэр сєЇхЁр Єхъє∙хую ёюёЄю эш 
  109.         msg[3]=0xf0; //0x10;
  110.         msg[4]=addr>>24;
  111.         msg[5]=addr>>16;
  112.         msg[6]=addr>>8;
  113.         msg[7]=addr;
  114. //msg[4]=n;
  115. call_armmon(msg,8/*5*/);
  116. //read_armmon(msg,10);
  117. return(0);
  118. }
  119.  
  120. void loadfile(unsigned int startaddr, char * filename)
  121. {
  122. FILE* file;
  123. int size, wrsize;
  124. unsigned int index;
  125.   file = fopen(filename, "rb");
  126.   if (file) {
  127.     printf("opened file: %s\n",filename);
  128.     size = fread(filebuf, 1, FILESIZE, file);
  129.     fclose(file);
  130.  
  131.     index = 0;
  132.     while (size > 0) {
  133.  
  134.       if (size > MAXLINESIZE) {
  135.         wrsize = MAXLINESIZE;
  136.       }else {
  137.         wrsize = size;
  138.       };
  139.       writetoarm(startaddr + index, &filebuf[index], wrsize);
  140.       size = size - wrsize;
  141.       index = index + wrsize;
  142.     };
  143.   }else {
  144.     printf("file not found: %s\n",filename);
  145.   };
  146. }
  147.  
  148. unsigned int hexatoi(char* s)
  149. {
  150. unsigned int res;
  151. int i;
  152. BYTE c;
  153.   if (s[0] == '0') {
  154.     if (s[1] != 'x') goto nohex;
  155.     res = 0;
  156.     i = 2;
  157.     while (s[i] != '\0') {
  158.       res = res << 4;
  159.       c = (BYTE)s[i];
  160.       if       (c >= (BYTE)'a') {
  161.         c = c - (BYTE)'a' + 10;
  162.       }else if (c >= (BYTE)'A') {
  163.         c = c - (BYTE)'A' + 10;
  164.       }else {
  165.         c = c - (BYTE)'0';
  166.       };
  167.       res = res + c;
  168.       i++;
  169.     };
  170.   }else {
  171.     nohex:
  172.     res = atoi(s);
  173.   };
  174. return res;
  175. }
  176.  
  177. int main(int argc,char* argv[])
  178. {
  179. int i;
  180. unsigned int startaddr;
  181. char *filename;
  182.   startaddr = 0;//0x20100000;
  183.   filename = "_tokarm.bin";
  184.  
  185.   if (argc<2) {
  186.     printf(
  187.       "NedoLoader\n"
  188.       "load file(s) at given address(es) and run from given address:\n"
  189.       "\tloader.exe -l 0x60000000 filename.bin -r 0x60000001\n"
  190.     );
  191.   };
  192.  
  193.   NMUDP1 = new TNMUDP(0);
  194.  
  195.   cycle = 0;
  196.  
  197.   for (i=1; i<argc; i++) {
  198.     if       (!strcmp(argv[i],"-l")) { //set load address
  199.       i++;
  200.       startaddr = hexatoi(argv[i]);
  201.     }else if (!strcmp(argv[i],"-r")) { //run from address
  202.       i++;
  203.       startaddr = hexatoi(argv[i]);
  204.       runprogram(startaddr);
  205.     }else {
  206.       filename = argv[i];
  207.       loadfile(startaddr, filename);
  208.     };
  209.   }
  210. /*  i=1;
  211.   while (i<argc) {
  212.     filename = argv[i];
  213.     i++;
  214.     if (i<argc) {
  215.       startaddr = hexatoi(argv[i]);
  216.       i++;
  217.       loadfile(startaddr, filename);
  218.     };
  219.     //startaddr = 0x50000000;
  220.   };
  221.  
  222.   runprogram(0x20100001);*/
  223. return 0;
  224. }