// timer8b.h

#include <dos.h>
#include <stdio.h>
#include <bios.h>
#include "outcont.h" // defines output control structure
#include "extern.h"

// DA structures, prototypes & variables
unsigned eoc;
extern unsigned base;
int DA_Enabled = 0;
int CurrentChannel = 0;

struct anachan
{
  int data;
  int status;
} AnnalogChannel[8];

enum anastat
{
  INACTIVE,
  START_CONVERSION,
  DATA_READY
};

unsigned InitializeAnalog(void);
int TurnOnAnalog(int channel);
int TurnOffAnalog(int channel);
int GetChannelValue(int channel);


// pwm prototypes & variables
long get_timer_counter(void);
int set_up_new_timer(double freq);
void wait(double seconds);
void restore_old_timer(void);
double get_frequency(void);
double get_mintime(void);
double get_maxtime(void);
int pwm(int arraynumber, int type,
		int ForwardPortNumber, int ReversePortNumber,
		int DirectionPortNumber, int BrakePortNumber,
		double ForwardOnTime, double ForwardOffTime,
		double ReverseOnTime, double ReverseOffTime,
		int StartDirection);

// set up a uni-directioanl pwm channel
int UniPwm(int arraynumber, int ForwardPortNumber,
		double ForwardOnTime, double ForwardOffTime);

// set up a uni-directioanl pwm channel using duty cycle
int UniPwmDuty(int arraynumber, int ForwardPortNumber,
		double ForwardDutycycle);

// set up a dual pwm channel using duty cycle
int DualPwmDuty(int arraynumber, int StartDirection,
    int ForwardPortNumber, double ForwardDutycycle,
    int ReversePortNumber, double ReverseDutycycle);

// set up a channel with a pwm line and a direction line -- no brake
// using duty cycle
int PwmAndDirectionDuty(int arraynumber, int StartDirection,
                        int PwmPortNumber,
                        int DirectionPortNumber,
                        double ForwardDutycycle,
                        double ReverseDutycycle);

// set up an L289
int L289PwmDuty(int arraynumber, int StartDirection,
    int PwmPortNumber, double ForwardDutycycle,
    double ReverseDutycycle, int Direction1Port, int Direction2Port);

// go forward
int Forward(int arraynumber);

// go in reverse
int Reverse(int arraynumber);

// stop
int Stop(int arraynumber);

// brake a dual pwm channel
// taking both lines high brakes
int BrakeDualPwm(int arraynumber);

// brale am L298
int BrakeL298(int arraynumber);

Blink(int arraynumber, int BlinkPort, double BlinkOnTime, double BlinkOffTime);

void interrupt new_timer();
void interrupt (far *old_timer)();

void showall(void);
void show(int location);

unsigned long timer_counter;
double frequency;
int OutputControlActive = 0;
double MinTime;
double MaxTime;
double minpulse; // minimum pwm pulse
double oldfreq;

// end timer8b.h



