Subversion Repositories Kolibri OS

Rev

Rev 9012 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include <sys/ksys.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. char* drv_name = NULL;
  6.  
  7. struct{
  8.     int a;
  9.     int b;
  10. }add_struct;
  11.  
  12. int sum=0;
  13. ksys_drv_hand_t drv = 0;
  14.  
  15. #define DRV_ADD_FUNC 0
  16.  
  17. int main(int argc, char** argv){
  18.     puts("Which driver?");
  19.     puts("1 - asm_drv.sys\n2 - c_drv.dll");
  20.     int num_drv = (char)getchar()-'0';
  21.     switch (num_drv) {
  22.         case 1 :
  23.             drv_name = "asm_drv";
  24.             drv = _ksys_load_driver(drv_name);
  25.             break;
  26.         case 2 :
  27.             drv_name = "/rd/1/drivers/c_drv.dll";
  28.             drv = _ksys_load_pe_driver(drv_name, NULL);
  29.             break;
  30.         default:
  31.             printf("No driver selected!\n");
  32.             exit(0);
  33.     }
  34.  
  35.     if(!drv){
  36.         printf("'%s' driver not load!\n", drv_name);
  37.         exit(0);
  38.     }else{
  39.         printf("'%s' driver is load!\n", drv_name);
  40.     }
  41.    
  42.  
  43.     add_struct.a = 43;
  44.     add_struct.b = 532;
  45.    
  46.     ksys_drv_ctl_t ioctl;
  47.     ioctl.func_num = DRV_ADD_FUNC;
  48.     ioctl.handler = drv;
  49.     ioctl.in_data_ptr = &add_struct;
  50.     ioctl.in_data_size = sizeof(add_struct);
  51.     ioctl.out_data_ptr = &sum;
  52.     ioctl.out_data_size = sizeof(sum);
  53.  
  54.     unsigned status =_ksys_work_driver(&ioctl);
  55.     if(status==-1){
  56.         puts("Error!");
  57.     }else {
  58.         printf("%d + %d  = %d\n", add_struct.a, add_struct.b, sum);
  59.         if(sum == add_struct.a + add_struct.b){
  60.             puts("True!");
  61.         }else{
  62.             puts("False!");
  63.         }
  64.     }
  65.     exit(0);
  66. }
  67.