107 lines
3.6 KiB
C
107 lines
3.6 KiB
C
|
#ifndef PIBOT_BOARD_H_
|
||
|
#define PIBOT_BOARD_H_
|
||
|
|
||
|
//class Queue;
|
||
|
#include "queue.h"
|
||
|
enum USART_NUMBER
|
||
|
{
|
||
|
USART_1 = 1,
|
||
|
USART_2,
|
||
|
USART_3,
|
||
|
USART_4,
|
||
|
USART_5,
|
||
|
USART_6,
|
||
|
};
|
||
|
|
||
|
enum MOTOR_ID
|
||
|
{
|
||
|
MOTOR_1 = 0,
|
||
|
MOTOR_2,
|
||
|
MOTOR_3,
|
||
|
MOTOR_4
|
||
|
};
|
||
|
|
||
|
#define PIN_MODE_INPUT 0x0
|
||
|
#define PIN_MODE_OUTPUT 0x1
|
||
|
#define PIN_MODE_INPUT_PULLUP 0x2
|
||
|
|
||
|
//output
|
||
|
#define _RUN_LED 0
|
||
|
#define _JS_CMD 1
|
||
|
#define _JS_CS 2
|
||
|
#define _JS_CLK 3
|
||
|
|
||
|
//input
|
||
|
#define _JS_DAT 0
|
||
|
|
||
|
class Board
|
||
|
{
|
||
|
public:
|
||
|
virtual void init()=0;
|
||
|
virtual void enable_irq()=0;
|
||
|
virtual void disable_irq()=0;
|
||
|
virtual void usart_debug_init()=0;
|
||
|
virtual void usart_init(unsigned char num, unsigned long buad)=0;
|
||
|
virtual Queue* usart_getDataQueue(unsigned char num)=0;
|
||
|
|
||
|
virtual void usart_write(unsigned char num, unsigned char ch)=0;
|
||
|
virtual void usart_write(unsigned char num, unsigned char* data, unsigned char len)=0;
|
||
|
|
||
|
virtual void set_config(unsigned char* data, unsigned short len)=0;
|
||
|
virtual void get_config(unsigned char* data, unsigned short len)=0;
|
||
|
|
||
|
virtual unsigned long getTickCount()=0;
|
||
|
|
||
|
virtual void setDOState(unsigned char led_id, unsigned char operation) = 0;
|
||
|
virtual bool getDIState(unsigned char id) = 0;
|
||
|
|
||
|
virtual void motor_init(unsigned char num, unsigned long period)=0;
|
||
|
virtual void motor_pwm(unsigned char num, long pwm_value)=0;
|
||
|
|
||
|
virtual void encoder_init(unsigned char motor_id) = 0;
|
||
|
virtual long getEncoderCount(unsigned char motor_id) = 0;
|
||
|
|
||
|
virtual void i2c_init() = 0;
|
||
|
virtual unsigned char i2c_write_byte(unsigned char equipment_address, unsigned char reg_address , unsigned char pt_char)=0;
|
||
|
virtual unsigned char i2c_write_buf(unsigned char equipment_address, unsigned char reg_address , unsigned char* pt_char , unsigned char size) = 0;
|
||
|
virtual unsigned char i2c_read_byte(unsigned char equipment_address, unsigned char reg_address , unsigned char* pt_char) = 0;
|
||
|
virtual unsigned char i2c_read_buf(unsigned char equipment_address, unsigned char reg_address , unsigned char* pt_char , unsigned char size) = 0;
|
||
|
|
||
|
unsigned char i2c_write_bit(unsigned char equipment_address, unsigned char reg_address, unsigned char bitNum, unsigned char data){
|
||
|
unsigned char b=0;
|
||
|
i2c_read_byte(equipment_address, reg_address, &b);
|
||
|
b = (data != 0) ? (b | (1 << bitNum)) : (b & ~(1 << bitNum));
|
||
|
return i2c_write_byte(equipment_address, reg_address, b);
|
||
|
}
|
||
|
|
||
|
unsigned char i2c_write_bits(unsigned char devAddr, unsigned char regAddr, unsigned char bitStart, unsigned char length, unsigned char data) {
|
||
|
unsigned char b;
|
||
|
if (i2c_read_byte(devAddr, regAddr, &b) != 0) {
|
||
|
unsigned char mask = ((1 << length) - 1) << (bitStart - length + 1);
|
||
|
data <<= (bitStart - length + 1); // shift data into correct position
|
||
|
data &= mask; // zero all non-important bits in data
|
||
|
b &= ~(mask); // zero all important bits in existing byte
|
||
|
b |= data; // combine data with existing byte
|
||
|
return i2c_write_byte(devAddr, regAddr, b);
|
||
|
} else {
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int i2c_read_bits(unsigned char devAddr, unsigned char regAddr, unsigned char bitStart, unsigned char length, unsigned char *data) {
|
||
|
unsigned char count, b;
|
||
|
if ((count = i2c_read_byte(devAddr, regAddr, &b)) != 0) {
|
||
|
unsigned char mask = ((1 << length) - 1) << (bitStart - length + 1);
|
||
|
b &= mask;
|
||
|
b >>= (bitStart - length + 1);
|
||
|
*data = b;
|
||
|
}
|
||
|
return count;
|
||
|
}
|
||
|
|
||
|
|
||
|
static Board* get();
|
||
|
};
|
||
|
|
||
|
#endif
|