LCOV - code coverage report
Current view: top level - drivers/bus - null.cxx (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 106 0
Test Date: 2025-11-11 10:26:08 Functions: 0.0 % 8 0

            Line data    Source code
       1              : /********************************************************************\
       2              : 
       3              :   Name:         null.c
       4              :   Created by:   Stefan Ritt
       5              : 
       6              :   Contents:     NULL bus driver
       7              : 
       8              :   $Id$
       9              : 
      10              : \********************************************************************/
      11              : 
      12              : #include <stdio.h>
      13              : #include <stdlib.h>
      14              : #include <stdarg.h>
      15              : #include <string.h>
      16              : #include "midas.h"
      17              : 
      18              : static int debug_flag = 0;
      19              : 
      20              : typedef struct {
      21              :    char device[NAME_LENGTH];
      22              : } NULL_SETTINGS;
      23              : 
      24              : #define NULL_SETTINGS_STR "\
      25              : Device = STRING : [32] com1\n\
      26              : "
      27              : 
      28              : typedef struct {
      29              :    NULL_SETTINGS settings;
      30              :    int fd;                      /* device handle for NULL device */
      31              : } NULL_INFO;
      32              : 
      33              : /*------------------------------------------------------------------*/
      34              : 
      35            0 : int null_open(char *device)
      36              : {
      37              :    int fd;
      38              : 
      39              :    /* open device using device name, like
      40              : 
      41              :       fd = open(device);
      42              :       if (fd == -1)
      43              :       return -1;
      44              : 
      45              :     */
      46              : 
      47              :    /* simulate open */
      48            0 :    fd = 1;
      49              : 
      50            0 :    return fd;
      51              : }
      52              : 
      53              : /*----------------------------------------------------------------------------*/
      54              : 
      55            0 : INT null_exit(NULL_INFO * info)
      56              : {
      57              :    /* something like
      58              : 
      59              :       close(info->fd);
      60              : 
      61              :     */
      62              : 
      63            0 :    return SUCCESS;
      64              : }
      65              : 
      66              : /*----------------------------------------------------------------------------*/
      67              : 
      68            0 : int null_write(NULL_INFO * info, char *data, int size)
      69              : {
      70              :    DWORD written, i;
      71              : 
      72            0 :    if (debug_flag) {
      73              :       FILE *f;
      74              : 
      75            0 :       f = fopen("null.log", "a");
      76            0 :       fprintf(f, "write: ");
      77            0 :       for (i = 0; (int) i < size; i++)
      78            0 :          fprintf(f, "%X ", data[i]);
      79            0 :       fprintf(f, "\n");
      80            0 :       fclose(f);
      81              :    }
      82              : 
      83              :    /* something like
      84              :       write(info->fd, data, size, &written);
      85              : 
      86              :     */
      87              : 
      88              :    /* simulate writing */
      89            0 :    written = size;
      90              : 
      91            0 :    return written;
      92              : }
      93              : 
      94              : /*----------------------------------------------------------------------------*/
      95              : 
      96            0 : int null_read(NULL_INFO * info, char *data, int size, int timeout)
      97              : {
      98              :    int i, l;
      99              : 
     100              :    /* somethng like
     101              : 
     102              :       memset(data, 0, size);
     103              :       for (l=0 ; l<size ; l++)
     104              :       {
     105              :       status = read(info->fd, data+l, 1, &i);
     106              :       if (!status || i == 0)
     107              :       break;
     108              :       }
     109              :     */
     110              : 
     111              :    /* simulate reading */
     112            0 :    ss_sleep(10);
     113            0 :    l = 0;
     114              : 
     115            0 :    if (debug_flag && l > 0) {
     116              :       FILE *f;
     117              : 
     118            0 :       f = fopen("null.log", "a");
     119            0 :       fprintf(f, "read: ");
     120            0 :       for (i = 0; i < l; i++)
     121            0 :          fprintf(f, "%X ", data[i]);
     122            0 :       fprintf(f, "\n");
     123            0 :       fclose(f);
     124              :    }
     125              : 
     126            0 :    return l;
     127              : }
     128              : 
     129              : /*----------------------------------------------------------------------------*/
     130              : 
     131            0 : int null_puts(NULL_INFO * info, char *str)
     132              : {
     133              :    DWORD written;
     134              : 
     135            0 :    if (debug_flag) {
     136              :       FILE *f;
     137              : 
     138            0 :       f = fopen("null.log", "a");
     139            0 :       fprintf(f, "puts: %s\n", str);
     140            0 :       fclose(f);
     141              :    }
     142              : 
     143              :    /* something like
     144              :       write(info->fd, str, strlen(str), &written);
     145              : 
     146              :     */
     147              : 
     148              :    /* simulate writing */
     149            0 :    written = strlen(str);
     150              : 
     151            0 :    return written;
     152              : }
     153              : 
     154              : /*----------------------------------------------------------------------------*/
     155              : 
     156            0 : int null_gets(NULL_INFO * info, char *str, int size, char *pattern, int timeout)
     157              : {
     158              :    int l;
     159              : 
     160              :    /* something like 
     161              : 
     162              :       memset(str, 0, size);
     163              :       for (l=0 ; l<size-1 ; l++)
     164              :       {
     165              :       status = read(info->fd, str+l, 1, &i);
     166              :       if (!status || i == 0)
     167              :       {
     168              :       if (pattern && pattern[0])
     169              :       return 0;
     170              :       break;
     171              :       }
     172              : 
     173              :       if (pattern && pattern[0])
     174              :       if (strstr(str, pattern) != NULL)
     175              :       break;
     176              :       }
     177              :     */
     178              : 
     179              :    /* simulate reading */
     180            0 :    ss_sleep(10);
     181            0 :    l = 0;
     182            0 :    str[0] = 0;
     183              : 
     184            0 :    if (debug_flag && l > 0) {
     185              :       FILE *f;
     186              : 
     187            0 :       f = fopen("null.log", "a");
     188            0 :       fprintf(f, "gets %s: %s\n", pattern, str);
     189            0 :       fclose(f);
     190              :    }
     191              : 
     192            0 :    return l;
     193              : }
     194              : 
     195              : /*----------------------------------------------------------------------------*/
     196              : 
     197            0 : int null_init(HNDLE hkey, NULL_INFO **pinfo)
     198              : {
     199              :    HNDLE hDB, hkeybd;
     200              :    INT size, status;
     201              :    NULL_INFO *info;
     202              : 
     203              :    /* allocate info structure */
     204            0 :    info = (NULL_INFO*) calloc(1, sizeof(NULL_INFO));
     205            0 :    *pinfo = info;
     206              : 
     207            0 :    cm_get_experiment_database(&hDB, NULL);
     208              : 
     209              :    /* create NULL settings record */
     210            0 :    status = db_create_record(hDB, hkey, "BD", NULL_SETTINGS_STR);
     211            0 :    if (status != DB_SUCCESS)
     212            0 :       return FE_ERR_ODB;
     213              : 
     214            0 :    db_find_key(hDB, hkey, "BD", &hkeybd);
     215            0 :    size = sizeof(info->settings);
     216            0 :    db_get_record(hDB, hkeybd, &info->settings, &size, 0);
     217              : 
     218              :    /* open port */
     219            0 :    info->fd = null_open(info->settings.device);
     220              : 
     221            0 :    if (info->fd < 0)
     222            0 :       return FE_ERR_HW;
     223              : 
     224            0 :    return SUCCESS;
     225              : }
     226              : 
     227              : /*----------------------------------------------------------------------------*/
     228              : 
     229            0 : INT null(INT cmd, ...)
     230              : {
     231              :    va_list argptr;
     232              :    HNDLE hkey;
     233              :    INT status, size, timeout;
     234              :    NULL_INFO *info;
     235              :    char *str, *pattern;
     236              : 
     237            0 :    va_start(argptr, cmd);
     238            0 :    status = FE_SUCCESS;
     239              : 
     240            0 :    switch (cmd) {
     241            0 :    case CMD_INIT: {
     242            0 :       hkey = va_arg(argptr, HNDLE);
     243            0 :       NULL_INFO **pinfo = va_arg(argptr, NULL_INFO **);
     244            0 :       status = null_init(hkey, pinfo);
     245            0 :       break;
     246              :    }
     247            0 :    case CMD_EXIT:
     248            0 :       info = va_arg(argptr, NULL_INFO *);
     249            0 :       status = null_exit(info);
     250            0 :       break;
     251              : 
     252            0 :    case CMD_NAME:
     253            0 :       info = va_arg(argptr, NULL_INFO *);
     254            0 :       str = va_arg(argptr, char *);
     255            0 :       strcpy(str, "null");
     256            0 :       break;
     257              : 
     258            0 :    case CMD_WRITE:
     259            0 :       info = va_arg(argptr, NULL_INFO *);
     260            0 :       str = va_arg(argptr, char *);
     261            0 :       size = va_arg(argptr, int);
     262            0 :       status = null_write(info, str, size);
     263            0 :       break;
     264              : 
     265            0 :    case CMD_READ:
     266            0 :       info = va_arg(argptr, NULL_INFO *);
     267            0 :       str = va_arg(argptr, char *);
     268            0 :       size = va_arg(argptr, INT);
     269            0 :       timeout = va_arg(argptr, INT);
     270            0 :       status = null_read(info, str, size, timeout);
     271            0 :       break;
     272              : 
     273            0 :    case CMD_PUTS:
     274            0 :       info = va_arg(argptr, NULL_INFO *);
     275            0 :       str = va_arg(argptr, char *);
     276            0 :       status = null_puts(info, str);
     277            0 :       break;
     278              : 
     279            0 :    case CMD_GETS:
     280            0 :       info = va_arg(argptr, NULL_INFO *);
     281            0 :       str = va_arg(argptr, char *);
     282            0 :       size = va_arg(argptr, INT);
     283            0 :       pattern = va_arg(argptr, char *);
     284            0 :       timeout = va_arg(argptr, INT);
     285            0 :       status = null_gets(info, str, size, pattern, timeout);
     286            0 :       break;
     287              : 
     288            0 :    case CMD_DEBUG:
     289            0 :       status = va_arg(argptr, INT);
     290            0 :       debug_flag = status;
     291            0 :       break;
     292              :    }
     293              : 
     294            0 :    va_end(argptr);
     295              : 
     296            0 :    return status;
     297              : }
        

Generated by: LCOV version 2.0-1