// timer6k.h

#include <dos.h>
#include <stdio.h>
#include <bios.h>
#include "outcnt6k.h" // defines output control structure
#include "extern6a.h"

struct OC *OutputControl[24];

// 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 portselect
,double ontime, double ForwardOfftime);

// 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(void);

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

// end timer6k.h

