Linux Beispiele für USBWDOG1

Um USBWDOG1 unter Linux ansprechen zu können, ist einerseits ein Kernel Modul und andererseits die QLIB vonnöten. Das Kernel Modul stellt nur die absolut notwendige Kommunikationschicht zur Verfügung, die QLIB hingegen macht die eigentliche Arbeit.

Installation

Nachdem man sich das Linux Archiv (in unserem Beispiel quancom_usb-1.2.0.tar.gz) runtergeladen hat, muss man es auspacken

>>tar xvzf quancom_usb-1.2.0.tar.gz

Nachdem man in das entstandene Verzeichnis gewechselt ist geht es weiter mit dem Kernel Modul. Danach muss man die QLIB bauen.

Befehle

Folgende Befehle sind unter Linux verfügbar:

Die Verwendung illustriert folgendes Programm.

 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/select.h>
#include <asm/page.h>

#include "qlib.h"

#define MEM_BLOCK 1024*1024*2

int kbhit(void)
{
  struct timeval tv;
  fd_set read_fd;

  /* Do not wait at all, not even a microsecond */
  tv.tv_sec=0;
  tv.tv_usec=0;

  /* Must be done first to initialize read_fd */
  FD_ZERO(&read_fd);

  /* Makes select() ask if input is ready:
   * 0 is the file descriptor for stdin    */
  FD_SET(0,&read_fd);

  /* The first parameter is the number of the
   * largest file descriptor to check + 1. */
  if(select(1, &read_fd, NULL, NULL, &tv) == -1)
    return 0;   /* An error occured */

  /*    read_fd now holds a bit map of files that are
   * readable. We test the entry for the standard
   * input (file 0). */
  if(FD_ISSET(0,&read_fd))
    /* Character pending on stdin */
    return 1;

  /* no characters were pending */
  return 0;
}

int main(int argc, char **argv)
{
        ULONG handle;
	ULONG result;
        char ch;
	int j;
	unsigned char *memory;

	//
        // This sample works for USBWDOGx Modules
        //

        //
        // Open the USB Module
        //

        handle = QAPIExtOpenCard(USBWDOG1,0);

        if ( handle == 0 )
           {
              handle = QAPIExtOpenCard(USBWDOG2,0);

	      if ( handle == 0 )
           	{

             	 handle = QAPIExtOpenCard(USBWDOG3,0);

           	}

           }

        //
        // If there are no modules terminate application
        //

        if ( handle == 0 )
           {
            printf("No QUANCOM USB Watchog Modules found!\n");
            return FALSE;
           }

        // Ok, we found a QUANCOM USB Module

	// Read status ( REBOOT BY WD ? ) and enable it

	result = QAPIExtSpecial(handle, JOB_STATUS_WATCHDOG, 0, 0);

	if ( result == 0)
	   {
	     printf("Watchdog has rebooted your system!\n");
	   }

	QAPIExtSpecial(handle, JOB_DISABLE_WATCHDOG, 0, 0);
	QAPIExtSpecial(handle, JOB_ENABLE_WATCHDOG, 0, 0);

	while(1)
	{
		sleep(5);
		memory = (unsigned char*) malloc( MEM_BLOCK );
		if ( memory )
		   {
			int i;
			for ( i=0 ; i < MEM_BLOCK ; i += PAGE_SIZE)
				memory[i]=0;

			free ( memory );
			QAPIExtSpecial(handle, JOB_RETRIGGER_WATCHDOG, 0, 0);
		}
		else
		   {
			printf("Out of memory\n");
		   }
	}

       // never reached lines

       QAPIExtCloseCard(handle);

  return 0;
}