AlcapDAQ  1
CAENVMEDemoVme.c
Go to the documentation of this file.
1 /*
2  -----------------------------------------------------------------------------
3 
4  --- CAEN SpA - Computing Systems Division ---
5 
6  -----------------------------------------------------------------------------
7 
8  Name : CAENVMEDemoVme.c
9 
10  Project : CaenVmeDemo
11 
12  Description : Example program for V1718 & V2718 control.
13 
14  Date : November 2004
15  Release : 1.0
16  Author : C.Landi
17 
18  Date : August 2006
19  Release : 1.1
20  Author : NDA
21  Description : 64 bit porting (CAENVMElib rev >= 2.5)
22 
23  -----------------------------------------------------------------------------
24 
25 
26  -----------------------------------------------------------------------------
27 */
28 
29 
30 #include <stdlib.h>
31 #include <stdio.h>
32 #ifdef LINUX
33  #include <inttypes.h>
34  #include <stdint.h>
35 #else
36  // From /usr/include/inttypes.h kernel 2.6.15
37  #define PRIX32 "X"
38  #define PRIu32 "u"
39  #define SCNx32 "x"
40  #define SCNu32 "u"
41 #endif
42 
43 #include <math.h>
44 #include <string.h>
45 #include <ctype.h>
46 
47 #include <stdarg.h>
48 #include "CAENVMElib.h"
49 #include "console.h"
50 
51 
52 // -----------------------------------------------------------------------------
53 
54 // ---------------------------------------
55 // X,Y Position for Field display
56 // ---------------------------------------
57 
58 #define X_ADDR 32
59 #define Y_ADDR 9
60 #define X_BADDR 32
61 #define Y_BADDR 10
62 #define X_DSIZE 32
63 #define Y_DSIZE 11
64 #define X_AM 32
65 #define Y_AM 12
66 #define X_BLTSIZE 32
67 #define Y_BLTSIZE 13
68 #define X_AUTOINC 32
69 #define Y_AUTOINC 14
70 #define X_NCYCLES 32
71 #define Y_NCYCLES 15
72 #define X_COMM 1
73 #define Y_COMM 21
74 
75 // ---------------------------------------
76 
77 
78 typedef struct man_par
79 {
80 uint32_t addr ; // Address
81 uint32_t data ; // Data
82 ushort level ; // Interrupt level
83 uchar irqstat; // IRQ status
84 ushort am ; // Addressing Mode
85 CVDataWidth dtsize ; // Data Format
86 uint32_t basaddr ; // Base Address
87 uint32_t blts ; // Block size for blt (bytes)
88 ushort ncyc ; // Number of cycles
89 ushort autoinc ; // Auto increment address
90 uint32_t *buff ; // Mmemory buffer for blt
91 } man_par_t ;
92 
93 
94 // ---------------------------------------
95 // Prototype Functions Declaration
96 // ---------------------------------------
97 
98 void CaenVmeIrqCheck(int32_t, man_par_t *) ;
99 void CaenVmeWriteBlt(int32_t, man_par_t *) ;
100 void CaenVmeReadBlt(int32_t, man_par_t *) ;
101 void CaenVmeWrite(int32_t, man_par_t *) ;
102 void CaenVmeRead(int32_t, man_par_t *) ;
103 void ViewReadBltData(man_par_t *) ;
104 void CaenVmeManual(int32_t, short) ;
105 
106 
107 // -----------------------------------------------------------------------------
108 
109 
110 
111 /*
112  -----------------------------------------------------------------------------
113 
114  Name : CaenVmeIrqCheck
115  Description : Interrupt Check
116 
117  Input : BHandle -> Board Id (V1718,V2718)
118  man -> pointer to 'man' structure
119  Output : None
120  Release : 1.0
121 
122  -----------------------------------------------------------------------------
123 */
124 
125 void CaenVmeIrqCheck(int32_t BHandle, man_par_t *man)
126 {
127 CVErrorCodes ret ;
128 
129 con_printf(" CHECK IRQ\n");
130 
131 CAENVME_IRQCheck(BHandle,&man->irqstat); // Check IRQ Status
132 
133 con_printf(" IRQ status: %02X\n",man->irqstat);
134 con_printf(" Interrupt Level to Acknowledge (0 to exit) : "); // Get the int level
135 con_scanf("%x",&man->level);
136 
137 if (man->level == 0)
138  {
140  clear_line(Y_COMM+1);
141  clear_line(Y_COMM+2);
142  return ;
143  }
144 
145 con_printf_xy(X_COMM,Y_COMM+2," Waiting for interrupt ... Press any key to stop.");
146 
147 while (!(man->irqstat & (1<<(man->level-1))) && !con_kbhit()) // Check Int loop
148  CAENVME_IRQCheck(BHandle,&man->irqstat);
149 
151 
152 if(man->irqstat & (1<<(man->level-1)))
153  {
154  CVIRQLevels level;
155  switch (man->level) {
156  case 1:
157  level = cvIRQ1;
158  break;
159  case 2:
160  level = cvIRQ2;
161  break;
162  case 3:
163  level = cvIRQ3;
164  break;
165  case 4:
166  level = cvIRQ4;
167  break;
168  case 5:
169  level = cvIRQ5;
170  break;
171  case 6:
172  level = cvIRQ6;
173  break;
174  case 7:
175  level = cvIRQ7;
176  break;
177  default:
178  level = cvIRQ1;
179  break;
180  }
181  ret = CAENVME_IACKCycle(BHandle,level,&man->data,man->dtsize);
182 
183  switch (ret)
184  {
185  case cvSuccess : con_printf(" Cycle completed normally\n");
186  con_printf(" Int. Ack. on IRQ%d: StatusID = %0X",man->level,man->data);
187  break ;
188  case cvBusError : con_printf(" Bus Error !!!");
189  break ;
190  case cvCommError : con_printf(" Communication Error !!!");
191  break ;
192  default : con_printf(" Unknown Error !!!");
193  break ;
194 
195 
196  }
197  }
198 else
199  con_printf(" Interrupt request IRQ%d not active",man->level);
200 
201 }
202 
203 
204 
205 /*
206  -----------------------------------------------------------------------------
207 
208  Name : CaenVmeWriteBlt
209  Description : Vme Block Transfer Write
210 
211  Input : BHandle -> Board Id (V1718,V2718)
212  man -> pointer to 'man' structure
213  Output : None
214  Release : 1.0
215 
216  -----------------------------------------------------------------------------
217 */
218 
219 void CaenVmeWriteBlt(int32_t BHandle, man_par_t *man)
220 {
221 int nb;
222 uint32_t i,incr ;
224 CVErrorCodes ret,old_ret=cvSuccess;
225 
226 
227 if(man->am == cvA16_U)
228  {
229  con_printf(" Can't execute a A16 BLT Write Cycle");
230  return ;
231  }
232 if(man->am == cvCR_CSR)
233  {
234  con_printf(" Can't execute a CR/CSR BLT Write Cycle");
235  return ;
236  }
237 
238 con_printf_xy(X_COMM,Y_COMM+2," First Data [hex] : ") ;
239 con_scanf("%x",&man->data); // Get data to write
240 clear_line(Y_COMM+2) ;
241 con_printf_xy(X_COMM,Y_COMM+2," Data Increment [hex] : ") ; // Get increment for data
242 con_scanf("%x",&incr);
243 for(i=0; i<(man->blts/4); i++) // Fill the data buffer
244  man->buff[i] = man->data+incr*i;
245 
246 if (man->dtsize == cvD64)
247  {
248  if (man->am == cvA24_U_DATA)
249  am = cvA24_U_MBLT;
250  else
251  am = cvA32_U_MBLT;
252  }
253 else
254  {
255  if (man->am == cvA24_U_DATA)
256  am = cvA24_U_BLT;
257  else
258  am = cvA32_U_BLT;
259  }
260 
261 if(man->ncyc == 0) // Infinite Loop
262  con_printf_xy(X_COMM,Y_COMM+2," Running ... Press any key to stop.");
263 
264 for (i=0; ((man->ncyc==0) || (i<man->ncyc)) && !con_kbhit(); i++)
265  {
266 
267  ret = CAENVME_BLTWriteCycle(BHandle,man->addr,(char *)man->buff,man->blts,am,man->dtsize,&nb);
268 
269  if((i==0) || (ret != old_ret))
270  {
271  gotoxy(X_COMM,Y_COMM) ;
272 
273  switch (ret)
274  {
275  case cvSuccess : con_printf(" Cycle(s) completed normally\n");
276  con_printf(" Written %u bytes",nb);
277  break ;
278  case cvBusError : con_printf(" Bus Error !!!\n");
279  con_printf(" Written %u bytes",nb);
280  break ;
281  case cvCommError : con_printf(" Communication Error !!!");
282  break ;
283  default : con_printf(" Unknown Error !!!");
284  break ;
285  }
286  }
287 
288  old_ret = ret;
289 
290  }
291 
292 if(man->ncyc == 0)
293  clear_line(Y_COMM+2);
294 }
295 
296 
297 /*
298  -----------------------------------------------------------------------------
299 
300  Name : CaenVmeReadBlt
301  Description : Vme Block Transfer Read
302 
303  Input : BHandle -> Board Id (V1718,V2718)
304  man -> pointer to 'man' structure
305  Output : None
306  Release : 1.0
307 
308  -----------------------------------------------------------------------------
309 */
310 
311 void CaenVmeReadBlt(int32_t BHandle, man_par_t *man)
312 {
313 int nb;
314 uint32_t i,j ;
316 CVErrorCodes ret,old_ret=cvSuccess;
317 
318 
319 if(man->am == cvA16_U)
320  {
321  con_printf(" Can't execute a A16 BLT Read Cycle");
322  return ;
323  }
324 if(man->am == cvCR_CSR)
325  {
326  con_printf(" Can't execute a CR/CSR BLT Read Cycle");
327  return ;
328  }
329 
330 if (man->dtsize == cvD64)
331  {
332  if (man->am == cvA24_U_DATA)
333  am = cvA24_U_MBLT;
334  else
335  am = cvA32_U_MBLT;
336  }
337 else
338  {
339  if (man->am == cvA24_U_DATA)
340  am = cvA24_U_BLT;
341  else
342  am = cvA32_U_BLT;
343  }
344 
345 if(man->ncyc == 0) // Infinite Loop
346  con_printf_xy(X_COMM,Y_COMM+2," Running ... Press any key to stop.");
347 
348 for (i=0; ((man->ncyc==0) || (i<man->ncyc)) && !con_kbhit(); i++)
349  {
350  for (j=0;j<(man->blts/4);j++)
351  man->buff[j]=0;
352 
353  ret = CAENVME_BLTReadCycle(BHandle,man->addr,(char *)man->buff,man->blts,am,man->dtsize,&nb);
354 
355  if((i==0) || (ret != old_ret))
356  {
357  gotoxy(X_COMM,Y_COMM) ;
358 
359  switch (ret)
360  {
361  case cvSuccess : con_printf(" Cycle(s) completed normally\n");
362  con_printf(" Read %u bytes",nb);
363  break ;
364  case cvBusError : con_printf(" Bus Error !!!\n");
365  con_printf(" Read %u bytes",nb);
366  break ;
367  case cvCommError : con_printf(" Communication Error !!!");
368  break ;
369  default : con_printf(" Unknown Error !!!");
370  break ;
371  }
372  }
373 
374  old_ret = ret;
375 
376  }
377 
378 if(man->ncyc == 0)
379  clear_line(Y_COMM+2);
380 }
381 
382 
383 /*
384  -----------------------------------------------------------------------------
385 
386  Name : CaenVmeWrite
387  Description : Vme Write access
388 
389  Input : BHandle -> Board Id (V1718,V2718)
390  man -> pointer to 'man' structure
391  Output : None
392  Release : 1.0
393 
394  -----------------------------------------------------------------------------
395 */
396 
397 void CaenVmeWrite(int32_t BHandle, man_par_t *man)
398 {
399 uint32_t i ;
400 CVErrorCodes ret,old_ret=cvSuccess;
401 
402 
403 if(man->dtsize == cvD64)
404  {
405  con_printf(" Can't execute a D64 Write Cycle");
406  return ;
407  }
408 
409 con_printf_xy(X_COMM,Y_COMM+1," Write Data [hex] : ") ;
410 con_scanf("%x",&man->data) ;
411 
412 if(man->ncyc == 0) // Infinite Loop
413  con_printf_xy(X_COMM,Y_COMM+2," Running ... Press any key to stop.");
414 
415 
416 for (i=0; ((man->ncyc==0) || (i<man->ncyc)) && !con_kbhit(); i++)
417  {
418 
419  ret = CAENVME_WriteCycle(BHandle,man->addr,&man->data,man->am,man->dtsize);
420 
421  if((i==0) || (ret != old_ret))
422  {
423  gotoxy(X_COMM,Y_COMM) ;
424 
425  switch (ret)
426  {
427  case cvSuccess : con_printf(" Cycle(s) completed normally\n");
428  break ;
429  case cvBusError : con_printf(" Bus Error !!!");
430  break ;
431  case cvCommError : con_printf(" Communication Error !!!");
432  break ;
433  default : con_printf(" Unknown Error !!!");
434  break ;
435  }
436  }
437 
438  old_ret = ret;
439 
440  if(man->autoinc)
441  {
442  man->addr += man->dtsize; // Increment address (+1 or +2 or +4)
443  con_printf_xy(X_ADDR,Y_ADDR,"%08X]",man->addr); // Update the screen
444  }
445  }
446 
447 if(man->ncyc == 0)
448  clear_line(Y_COMM+2);
449 }
450 
451 
452 
453 /*
454  -----------------------------------------------------------------------------
455 
456  Name : CaenVmeRead
457  Description : Vme Read access
458 
459  Input : BHandle -> Board Id (V1718,V2718)
460  man -> pointer to 'man' structure
461  Output : None
462  Release : 1.0
463 
464  -----------------------------------------------------------------------------
465 */
466 
467 void CaenVmeRead(int32_t BHandle, man_par_t *man)
468 {
469 uint32_t i,old_data=0 ;
470 CVErrorCodes ret,old_ret=cvSuccess;
471 
472 
473 if(man->dtsize == cvD64)
474  {
475  con_printf(" Can't execute a D64 Read Cycle");
476  return ;
477  }
478 
479 if(man->ncyc == 0) // Infinite Loop
480  con_printf_xy(X_COMM,Y_COMM+2," Running ... Press any key to stop.");
481 
482 for (i=0; ((man->ncyc==0) || (i<man->ncyc)) && !con_kbhit(); i++)
483  {
484 
485  ret = CAENVME_ReadCycle(BHandle,man->addr,&man->data,man->am,man->dtsize);
486 
487  if((i==0) || (ret != old_ret))
488  {
489  gotoxy(X_COMM,Y_COMM) ;
490 
491  switch (ret)
492  {
493  case cvSuccess : con_printf(" Cycle(s) completed normally\n");
494  if((i==0) || (old_data != man->data))
495  {
496  if( man->dtsize == cvD32 )
497  con_printf(" Data Read : %08X",man->data);
498  if( man->dtsize == cvD16 )
499  con_printf(" Data Read : %04X",man->data & 0xffff);
500  if( man->dtsize == cvD8 )
501  con_printf(" Data Read : %02X",man->data & 0xff);
502  }
503  break ;
504  case cvBusError : con_printf(" Bus Error !!!");
505  break ;
506  case cvCommError : con_printf(" Communication Error !!!");
507  break ;
508  default : con_printf(" Unknown Error !!!");
509  break ;
510  }
511  }
512 
513  old_data = man->data;
514  old_ret = ret;
515 
516  if(man->autoinc)
517  {
518  man->addr += man->dtsize; // Increment address (+1 or +2 or +4)
519  con_printf_xy(X_ADDR,Y_ADDR,"%08X]",man->addr); // Update the screen
520  }
521  }
522 
523 if(man->ncyc == 0)
524  clear_line(Y_COMM+2);
525 }
526 
527 
528 
529 /*
530  -----------------------------------------------------------------------------
531 
532  Name : ViewReadBltData
533  Description : Display the content of 'man->buff' buffer
534 
535  Input : man -> pointer to 'man' structure
536  Output : None
537  Release : 1.0
538 
539  -----------------------------------------------------------------------------
540 */
541 
543 {
544 ushort i,j,line, page=0, gotow, dtsize ;
545 uint32_t ndata;
546 uint32_t *d32;
547 ushort *d16;
548 uchar *d8;
549 char key = 0;
550 char msg[80];
551 FILE *fsave;
552 
553 d32 = man->buff ;
554 d16 = (ushort *)man->buff ;
555 d8 = (uchar *)man->buff ;
556 
557 dtsize = man->dtsize ;
558 
559 while( key != 'Q' ) // Loop. Exit if 'Q' is pressed
560  {
561  ndata = man->blts / dtsize;
562 
563  clrscr() ;
564  con_printf("\n VIEW BUFFER\n\n") ;
565  con_printf(" Num. Addr Hex Dec \n\n");
566 
567  // Write a page
568  for( line=0, i=page * 16; (line<16) && (i<ndata); line++, i++)
569  {
570  if( dtsize == cvD32 || dtsize == cvD64)
571  con_printf(" %05u %04X %08X %-10d \n",i,i*4,d32[i],d32[i]);
572 
573  if( dtsize == cvD16)
574  con_printf(" %05u %04X %04X %-6d \n",i,i*2,d16[i],d16[i]);
575 
576  if( dtsize == cvD8)
577  con_printf(" %05u %04X %02X %-4d \n",i,i,d8[i],d8[i]);
578  }
579 
580  // Print the line menu
581  con_printf("\n[Q] Quit [D] Data_size [S] Save [G] Goto");
582  if( page != 0 )
583  con_printf(" [P] Previous");
584  if( i != ndata )
585  con_printf(" [N] Next");
586 
587  key=toupper(con_getch()) ; // Wait for command
588 
589  clear_line(22);
590 
591  switch (key)
592  {
593  case 'N' : if(i<ndata) // Next page
594  page++;
595  break ;
596  case 'P' : if(page>0) // Previous page
597  page--;
598  break ;
599  case 'D' : dtsize = dtsize * 2; // Change data size (8,16,32)
600  if(dtsize > 4)
601  dtsize = 1;
602  page = 0;
603  break ;
604  case 'G' : con_printf("Insert data number (dec) : ") ; // Go to data
605  con_scanf("%d",(ushort *)&gotow) ;
606 
607  if(gotow>ndata)
608  {
609  clear_line(22) ;
610  con_printf(" Invalid data number ");
611  }
612  else
613  page=gotow/16;
614  break ;
615 
616  case 'S' : clear_line(23) ;
617  con_printf_xy(1,23," File Name : ") ; // Save buffer to file
618  if (con_scanf("%s",msg) == EOF)
619  break ;
620 
621  if((fsave=fopen(msg,"w")) == NULL)
622  {
623  clear_line(23) ;
624  con_printf_xy(1,23," Can't open file ");
625  }
626  else
627  {
628  for(j=0;j<ndata;j++)
629  {
630  if( dtsize == cvD32 || dtsize == cvD64)
631  fprintf(fsave,"%05u\t%08X\t%-10d\n",j,d32[j],d32[j]);
632  if( dtsize == cvD16)
633  fprintf(fsave,"%05u\t%04X\t%-6d\n",j,d16[j],d16[j]);
634  if( dtsize == cvD8)
635  fprintf(fsave,"%05u\t%02X\t%-4d\n",j,d8[j],d8[j]);
636  }
637 
638  fclose(fsave);
639  }
640  break ;
641  default : break ;
642 
643  }
644  }
645 }
646 
647 
648 
649 
650 /*
651  -----------------------------------------------------------------------------
652 
653  Name : CaenVmeManual
654  Description : V1718 & v2718 manual controller
655 
656  Input : BHandle -> Board Id (V1718,V2718)
657  first_call -> flag for default settings
658  Output : None
659  Release : 1.0
660 
661  -----------------------------------------------------------------------------
662 */
663 
664 void CaenVmeManual(int32_t BHandle, short first_call)
665 {
666 
667 static man_par_t man ;
668 char key,dis_main_menu ;
669 uint32_t value ;
670 
671 
672 if (first_call)
673  { // Default Value
674  man.addr = 0xEE000000 ;
675  man.level = 1 ;
676  man.am = cvA32_U_DATA ;
677  man.dtsize = cvD16 ;
678  man.basaddr = 0xEE000000 ;
679  man.blts = 256 ;
680  man.ncyc = 1 ;
681  man.autoinc = 0 ;
682 
683  // Allocate 32K for the software buffer containing data for blt
684 
685  man.buff = (uint32_t *)malloc(16*1024*1024);
686  if (man.buff == NULL)
687  {
688  con_printf(" !!! Error. Can't allocate memory for BLT buffer. ");
689  exit(-1);
690  }
691  }
692 
693 for (;;)
694  {
695  dis_main_menu = 0 ;
696 
697  clrscr() ;
698 
699  dis_main_menu = 0 ;
700 
701  con_printf("\n CAEN VME Manual Controller \n\n") ;
702 
703  con_printf(" R - READ\n") ;
704  con_printf(" W - WRITE\n") ;
705  con_printf(" B - BLOCK TRANSFER READ\n") ;
706  con_printf(" T - BLOCK TRANSFER WRITE\n") ;
707  con_printf(" I - CHECK INTERRUPT\n") ;
708  con_printf(" 1 - ADDRESS [%08"PRIX32"]\n",man.addr) ;
709  con_printf(" 2 - BASE ADDRESS [%08"PRIX32"]\n",man.basaddr) ;
710  con_printf(" 3 - DATA FORMAT [") ;
711  if (man.dtsize == cvD8)
712  con_printf("D8]\n") ;
713  if (man.dtsize == cvD16)
714  con_printf("D16]\n") ;
715  if (man.dtsize == cvD32)
716  con_printf("D32]\n") ;
717  if (man.dtsize == cvD64)
718  con_printf("D64]\n") ;
719 
720  con_printf(" 4 - ADDRESSING MODE [") ;
721  if (man.am == cvA16_U)
722  con_printf("A16]\n") ;
723  if (man.am == cvA24_U_DATA)
724  con_printf("A124]\n") ;
725  if (man.am == cvA32_U_DATA)
726  con_printf("A32]\n") ;
727  if (man.am == cvCR_CSR)
728  con_printf("CR/CSR]\n") ;
729 
730  con_printf(" 5 - BLOCK TRANSFER SIZE [%"PRIu32"]\n",man.blts) ;
731  con_printf(" 6 - AUTO INCREMENT ADDRESS [") ;
732  if (man.autoinc)
733  con_printf("ON] \n") ;
734  else
735  con_printf("OFF]\n") ;
736 
737  con_printf(" 7 - NUMBER OF CYCLES [") ;
738  if (man.ncyc)
739  con_printf("%d]\n",man.ncyc) ;
740  else
741  con_printf("Infinite\n") ;
742 
743  con_printf(" 8 - VIEW BLT DATA\n") ;
744  con_printf(" F - FRONT PANEL I/O\n") ;
745  con_printf(" Q - QUIT MANUAL CONTROLLER\n") ;
746 
747 
748  do
749  {
750  gotoxy(X_COMM,Y_COMM) ;
751 
752  key = toupper(con_getch()) ;
753 
754  clear_line(Y_COMM) ;
755  clear_line(Y_COMM+1) ;
756  clear_line(Y_COMM+2) ;
757  gotoxy(X_COMM,Y_COMM) ;
758 
759  switch (key)
760  {
761  case 'R' : CaenVmeRead(BHandle, &man) ;
762  break ;
763 
764  case 'W' : CaenVmeWrite(BHandle, &man) ;
765  break ;
766 
767  case 'B' : CaenVmeReadBlt(BHandle, &man) ;
768  break ;
769 
770  case 'T' : CaenVmeWriteBlt(BHandle, &man) ;
771  break ;
772 
773  case 'I' : CaenVmeIrqCheck(BHandle, &man) ;
774  break ;
775 
776  case '1' : con_printf(" Please enter new Address : ") ;
777 
778  if (con_scanf("%"SCNx32,&value) != EOF)
779  man.addr = man.basaddr + value ;
780 
782  clear_line(Y_COMM) ;
783 
784  break ;
785 
786  case '2' : con_printf(" Please enter new Base Address : ") ;
787 
788  if (con_scanf("%"SCNx32,&value) != EOF)
789  {
790  man.addr -= man.basaddr ;
791  man.basaddr = value ;
792  man.addr += man.basaddr ;
793  }
794 
797 
798  clear_line(Y_COMM) ;
799 
800  break ;
801 
802  case '3' : gotoxy(X_DSIZE,Y_DSIZE) ;
803 
804  switch(man.dtsize)
805  {
806  case cvD8 : man.dtsize = cvD16 ;
807  con_printf("D16]\n") ;
808  break ;
809  case cvD16 : man.dtsize = cvD32 ;
810  con_printf("D32]\n") ;
811  break ;
812  case cvD32 : man.dtsize = cvD64 ;
813  con_printf("D64]\n") ;
814  break ;
815  case cvD64 : man.dtsize = cvD8 ;
816  con_printf("D8] \n") ;
817  break ;
818 
819  case cvD16_swapped :
820  case cvD32_swapped :
821  case cvD64_swapped :
822  default :
823  break;
824  }
825 
826  break ;
827 
828  case '4' : gotoxy(X_AM,Y_AM) ;
829 
830  switch(man.am)
831  {
832  case cvA16_U : man.am = cvA24_U_DATA ;
833  con_printf("A24]\n") ;
834  break ;
835  case cvA24_U_DATA : man.am = cvA32_U_DATA ;
836  con_printf("A32]\n") ;
837  break ;
838  case cvA32_U_DATA : man.am = cvCR_CSR ;
839  con_printf("CR/SCR]\n") ;
840  break ;
841  case cvCR_CSR : man.am = cvA16_U ;
842  con_printf("A16] \n") ;
843  break ;
844  }
845 
846  break ;
847 
848  case '5' : con_printf(" Please enter Block Transfer Size : ") ;
849 
850  if (con_scanf("%"SCNu32,&value) != EOF)
851  man.blts = value ;
853 
854  clear_line(Y_COMM) ;
855 
856  break ;
857 
858  case '6' : gotoxy(X_AUTOINC,Y_AUTOINC) ;
859 
860  man.autoinc ^= 1 ;
861  if (man.autoinc)
862  con_printf("ON] \n") ;
863  else
864  con_printf("OFF]\n") ;
865 
866  break ;
867 
868  case '7' : con_printf(" Please enter Number of Cycles : ") ;
869 
870  if (con_scanf("%"SCNu32,&value) != EOF)
871  man.ncyc = (ushort)value ;
873  if (man.ncyc)
874  con_printf("%"PRIu32"] \n",man.ncyc) ;
875  else
876  con_printf("Infinite]\n",man.ncyc) ;
877 
878  clear_line(Y_COMM) ;
879 
880  break ;
881 
882  case '8' : ViewReadBltData(&man);
883  dis_main_menu = 1; // Display Main Menu
884  break ;
885 
886  case 'Q' : free(man.buff); // Release the memory buffer for BLT
887  return ;
888 
889  default : break ;
890  }
891 
892  }
893  while (!dis_main_menu) ;
894 
895  } // End 'for(;;)'
896 }
897 
898 
899