Specifications

A.2. ANALOG OUT FILE
19
A.2 Analog Out file
/*
Analog output S-function for:
United Electronic Industries
PowerDAQ board type: PD2-AO-16/16
Output Fifo size: 2048 samples
Mfg. date: 01-Oct-2003
Cal. date: 24-Nov-2003
Firmware type: AO rev: 3.31/30819
(c) Maurice Schneiders, September 2004
(c) Frederik Klomp, Februari 2005
*/
#define S_FUNCTION_NAME uei_pd2ao_ao #define S_FUNCTION_LEVEL 2
#include "simstruc.h" #include <math.h>
#define NPARAMS 2 #define BoardID ssGetSFcnParam(S,0) #define ChannelList
ssGetSFcnParam(S,1)
#ifndef MATLAB_MEX_FILE #include <stdio.h> #include <stdlib.h> #include <stdint.h>
#include <fcntl.h> #include <sys/io.h> #include <sys/mman.h> #include <sys/types.h>
#include <sys/time.h> #include <unistd.h> #include "win_sdk_types.h" #include
"powerdaq.h" #include "powerdaq32.h" #endif
static int i;
#ifndef MATLAB_MEX_FILE
static void* bar0Address; static int mem_fd; static int Handle; static int retVal = 0;
static DWORD value; static DWORD aoCfg = 0; static PWRDAQ_PCI_CONFIG pciConfig;
inline void PdUModeDrvWrite(unsigned long offset, unsigned long data) {
unsigned long *reg = (unsigned long*)(bar0Address + offset);
*reg = data;}
inline unsigned long PdUModeDrvRead(unsigned long offset) {
unsigned long *reg = (unsigned long*)(bar0Address + offset);
return *reg;}
int PdUModeDrvDSPWrite(unsigned long data) {
PdUModeDrvWrite(PCI_HTXR, data);
return 0;}
int PdUModeDrvDSPCmd(int command) {
PdUModeDrvWrite(PCI_HCVR, (1L | command));
return 0;}
unsigned long PdUModeDrvDSPRead() {
return PdUModeDrvRead(PCI_HRXS);}
int PdUModeDrvDIO256Write(int cmd, unsigned long val) {
unsigned long ret;
// Send write command and receive acknowledge
PdUModeDrvDSPCmd(PD_DI0256WR);
ret = PdUModeDrvDSPRead();
if (ret != 1) return 0;
// Write command
PdUModeDrvDSPWrite(cmd);
// Write parameter and rcv ack
PdUModeDrvDSPWrite(val);
ret = PdUModeDrvDSPRead();
return (ret)?1:0;}
int PdUModeAO32Write(unsigned short wChannel, unsigned short wValue) {
return PdUModeDrvDIO256Write((wChannel & 0x7F)|AO32_WRPR|AO32_BASE, wValue);}
#endif
static void mdlInitializeSizes(SimStruct *S) {
ssSetNumSFcnParams(S,NPARAMS);
ssSetNumContStates(S,0);
ssSetNumDiscStates(S,0);
ssSetNumOutputPorts(S,0);