/// \file main.c VSOS3 Audio Device Driver with input/output (AUDIO.DL3)
/// \author Henrik Herranen, VLSI Solution Oy
// For further instructions on how to use the audio driver can be found
// in the VS1005 VSOS Programmer's Guide, available at
// http://www.vlsi.fi/en/support/software/vside.html

/* For free support for VSIDE, please visit www.vsdsp-forum.com */

// Starting point template for creating VSOS3 libraries and device drivers.
// This will create a <projectname>.DL3 file, which you can copy to 
// your VS1005 Developer Board's system disk's SYS subdirectory.

// DL3 files require VSOS3 kernel version 0.3x to run.


// If you add the libary name to S:CONFIG.TXT, and put the library 
// to S:SYS, it will be loaded and run during boot-up. 

/*
  NOTE!
  This driver is specific to VS1005g.
 */
#include <vo_stdio.h>
#include <volink.h>     // Linker directives like DLLENTRY
#include <apploader.h>  // RunLibraryFunction etc
#include <string.h>
#include <mutex.h>
#include <kernel.h>
#include <aucommon.h>
#include <imem.h>
#include "bfxspi.h"



//void (*RomStart)(void) = (void (*)(void)) 0x8000;

char driveNum;

DLLENTRY(init)
ioresult init(char *paramStr) {
  char driveChar = *paramStr | 0x20;
  if (driveChar < 'a' || driveChar > 'z') driveChar = 'p';
  driveNum = driveChar - 'a';

  vo_pdevices[driveNum] = &spiDevice;
  DevSpiIoctl(&spiDevice, IOCTL_RESTART, NULL);
  
  return S_OK;
}


DLLENTRY(fini)
void fini(void) {
  // Add code here to force release of resources such as 
  // memory allocated with malloc, entry points, 
  // hardware locks or interrupt handler vectors.
  PERIP(INT_ENABLE0_LP) &= ~INTF_SPI1;
  PERIP(INT_ENABLE0_HP) &= ~INTF_SPI1;
  WriteIMem(0x20+INTV_SPI1, NULL);
  vo_pdevices[driveNum] = NULL;
}
