Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 734 → Rev 735

/shark/trunk/ports/servo/servo.c
43,10 → 43,10
 
#include "servo.h"
 
//#define SERVO_DEBUG
#define SERVO_DEBUG
 
#define SERVO_SPEED 19200
#define SERVO_PARITY NONE
#define SERVO_PARITY EVEN
#define SERVO_LEN 8
#define SERVO_STOP 1
 
155,10 → 155,10
115200,
-1};
 
void servo_rx_error(unsigned port, unsigned type) {
void servo_rx_error(unsigned port, unsigned type, unsigned data) {
 
#ifdef SERVO_DEBUG
kern_printf("(SERVO: BUFFER ERROR PORT:%d ERR:%d)",port,type);
kern_printf("(SERVO: BUFFER ERROR PORT:%d ERR:%d DATA:%02x)",port,type,data);
#endif
 
}
166,8 → 166,8
void servo_indication(unsigned port, BYTE data) {
 
if (RXTX_addr[port][RX_position[port]] == NULL) {
if (data != RXTX_buff[port][RX_position[port]])
servo_rx_error(port,1);
if (data != 0)
servo_rx_error(port,1,data);
 
RXTX_addr[port][RX_position[port]] = SERVO_SKIP;
 
179,7 → 179,7
}
if ((RX_cycle[port] == TX_cycle[port] && RX_position[port] > TX_position[port]) ||
(RX_cycle[port] > TX_cycle[port]))
servo_rx_error(port,2);
servo_rx_error(port,2,data);
 
} else {
 
198,7 → 198,7
}
if ((RX_cycle[port] == TX_cycle[port] && RX_position[port] > TX_position[port]) ||
(RX_cycle[port] > TX_cycle[port]))
servo_rx_error(port,3);
servo_rx_error(port,3,data);
 
} else {
 
210,7 → 210,7
}
if ((RX_cycle[port] == TX_cycle[port] && RX_position[port] > TX_position[port]) ||
(RX_cycle[port] > TX_cycle[port]))
servo_rx_error(port,3);
servo_rx_error(port,3,data);
 
servo_indication(port, data);
 
249,7 → 249,6
kern_printf("(SERVO: TIMEOUT SEND)");
#endif
 
lock_write[port] = 0;
return -1;
}
 
/shark/trunk/drivers/serial/scomirq.c
68,16 → 68,18
 
void com_irq_sel(int no)
{
BYTE b;
BYTE b, v;
unsigned i;
 
for(i=0;i<4;i++)
if (com_irq[i] == no) break;
 
b = DECODE(com_read(i, IIR));
while(PENDIRQ(v = com_read(i, IIR))) {
 
switch (b)
{
b = DECODE(v);
 
switch (b)
{
case LS_CHANGED:
LSR_handler(i);
break;
89,7 → 91,10
case TX_EMPTY:
THRE_handler(i);
break;
}
 
}
 
}
 
void com_irq_enable(unsigned port, unsigned irq)
191,9 → 196,12
 
void THRE_handler (unsigned port) /* Transmit Data Register Ready for next byte */
{
if (SCom_TX_data[port].ptr < SCom_TX_data[port].len)
com_write(port, THR, SCom_TX_data[port].buf[SCom_TX_data[port].ptr++]);
else SCom_Access.confirm(port, COM_OK);
if (SCom_TX_data[port].ptr < SCom_TX_data[port].len) {
com_write(port, THR, SCom_TX_data[port].buf[SCom_TX_data[port].ptr++]);
} else {
SCom_Access.confirm(port, COM_OK);
}
 
}
 
void RBRF_handler (unsigned port) /* Receive Data Register Full */
204,6 → 212,6
void LSR_handler (unsigned port) /* break = 8, frame = 4, parity = 2, RBR overrun = 1*/
{
SCom_Error[port] = (com_read(port, LSR) & (bit4|bit3|bit2|bit1) ) >> 1;
SCom_Access.confirm(port, COM_ERROR);
SCom_Access.confirm(port, COM_ERROR);
}