printer: avr: Extend test program to test main printer code
Also, cleanup.
This commit is contained in:
parent
14216b3888
commit
b23252df95
@ -6,8 +6,6 @@
|
|||||||
|
|
||||||
#define BAUDRATE 19200
|
#define BAUDRATE 19200
|
||||||
|
|
||||||
inline void spi_process_data();
|
|
||||||
|
|
||||||
/* System functions */
|
/* System functions */
|
||||||
/* Timers */
|
/* Timers */
|
||||||
enum TIMERS{TIM_CARRIAGE,
|
enum TIMERS{TIM_CARRIAGE,
|
||||||
@ -40,6 +38,65 @@ ISR (TIMER1_COMPA_vect)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Hardware Functions */
|
||||||
|
static inline void uart_irq_enable() {
|
||||||
|
UCSRB |= (1 << RXCIE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void uart_irq_disable() {
|
||||||
|
UCSRB &= ~(1 << RXCIE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void uart_putc(char c)
|
||||||
|
{
|
||||||
|
while (!(UCSRA & (1 << UDRE)));
|
||||||
|
UDR = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ENABLE_SERIAL_DEBUG
|
||||||
|
#ifdef ENABLE_SERIAL_DEBUG
|
||||||
|
void debug_putc(char c) {
|
||||||
|
uart_putc(c);
|
||||||
|
};
|
||||||
|
|
||||||
|
void debug_write(char *c)
|
||||||
|
{
|
||||||
|
while (*c) {
|
||||||
|
uart_putc(*c);
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int debug_printf(char *format,...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
unsigned int i;
|
||||||
|
char printbuffer[64];
|
||||||
|
|
||||||
|
va_start (args, format);
|
||||||
|
|
||||||
|
i = vsprintf (printbuffer, format, args);
|
||||||
|
va_end (args);
|
||||||
|
|
||||||
|
debug_write(printbuffer);
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void debug_write(char *c) {};
|
||||||
|
void debug_putc(char c) {};
|
||||||
|
unsigned int debug_printf(char *format,...) {return 0;};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void hardfault() {
|
||||||
|
cli();
|
||||||
|
debug_write("HARDFAULT!\r\n");
|
||||||
|
PORTB = 0;
|
||||||
|
PORTC = 0;
|
||||||
|
PORTD = 0;
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
|
||||||
/* Look-up-tables */
|
/* Look-up-tables */
|
||||||
/* Daisy wheel */
|
/* Daisy wheel */
|
||||||
#define PRINTER_CONTROL_CHAR 56
|
#define PRINTER_CONTROL_CHAR 56
|
||||||
@ -201,50 +258,6 @@ const uint8_t ascii_translation_table[ASCII_TRANSLATION_TABLE_SIZE] PROGMEM = {
|
|||||||
55, // Ä
|
55, // Ä
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Hardware functions */
|
|
||||||
|
|
||||||
void uart_putc(char c)
|
|
||||||
{
|
|
||||||
while (!(UCSRA & (1 << UDRE)));
|
|
||||||
UDR = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define ENABLE_SERIAL_DEBUG
|
|
||||||
#ifdef ENABLE_SERIAL_DEBUG
|
|
||||||
void debug_putc(char c) {
|
|
||||||
uart_putc(c);
|
|
||||||
};
|
|
||||||
|
|
||||||
void debug_write(char *c)
|
|
||||||
{
|
|
||||||
while (*c) {
|
|
||||||
uart_putc(*c);
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int debug_printf(char *format,...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
unsigned int i;
|
|
||||||
char printbuffer[64];
|
|
||||||
|
|
||||||
va_start (args, format);
|
|
||||||
|
|
||||||
i = vsprintf (printbuffer, format, args);
|
|
||||||
va_end (args);
|
|
||||||
|
|
||||||
debug_write(printbuffer);
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
void debug_write(char *c) {};
|
|
||||||
void debug_putc(char c) {};
|
|
||||||
unsigned int debug_printf(char *format,...) {return 0;};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DC drive */
|
/* DC drive */
|
||||||
#define MOTLIM(t) t##C
|
#define MOTLIM(t) t##C
|
||||||
#define PIN_DCMOTOR (1 << 4)
|
#define PIN_DCMOTOR (1 << 4)
|
||||||
@ -551,7 +564,7 @@ void arm_correction()
|
|||||||
#define LIMITSWITCH (!(MOTLIM(PIN) & PIN_LIMITSWITCH))
|
#define LIMITSWITCH (!(MOTLIM(PIN) & PIN_LIMITSWITCH))
|
||||||
|
|
||||||
|
|
||||||
/* Main program code */
|
/* Initialization Functions */
|
||||||
|
|
||||||
void move_carriage_to_far_left(uint8_t reset)
|
void move_carriage_to_far_left(uint8_t reset)
|
||||||
{
|
{
|
||||||
@ -673,149 +686,22 @@ void initialize_paperfeed()
|
|||||||
debug_write("[lfd] Initialization completed.\r\n");
|
debug_write("[lfd] Initialization completed.\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
//void printer_test()
|
/* Printer Functions */
|
||||||
//{
|
|
||||||
// uint8_t buf[80] = {0};
|
|
||||||
// uint8_t *ptr = buf;
|
|
||||||
// uint8_t *rdptr = buf;
|
|
||||||
// uint8_t translated = 0;
|
|
||||||
// int state = 0;
|
|
||||||
|
|
||||||
// debug_write("[sys] Entering printer test mode\r\n");
|
|
||||||
|
|
||||||
// while(1) {
|
|
||||||
|
|
||||||
// switch (state) {
|
|
||||||
// case 0:
|
|
||||||
// _delay_ms(100); // Motor turnoff delay
|
|
||||||
// DCMOTOR_STOP;
|
|
||||||
|
|
||||||
// stepper_status_CARRIAGE.target_pos = 80;
|
|
||||||
// stepper_status_WHEEL.target_pos = 0;stat->lpstate = pstate;
|
|
||||||
// ptr = buf;
|
|
||||||
// debug_write(">");
|
|
||||||
// state++;
|
|
||||||
// break;
|
|
||||||
// case 1:
|
|
||||||
// if (UCSRA & (1 << RXC)) {
|
|
||||||
// //stepper_status_WHEEL.target_pos += 2;
|
|
||||||
// *ptr = UDR;
|
|
||||||
// uart_putc(*ptr);
|
|
||||||
// if (*ptr == '\r') {
|
|
||||||
// debug_write("\r\nOK.\r\n");
|
|
||||||
// DCMOTOR_EN;
|
|
||||||
// _delay_ms(100); // Let motor get up to speed
|
|
||||||
|
|
||||||
// state++;
|
|
||||||
|
|
||||||
// stepper_status_CARRIAGE.target_pos = 80;
|
|
||||||
// rdptr = buf;
|
|
||||||
// } else {
|
|
||||||
// ptr++;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// break;
|
|
||||||
// case 2:
|
|
||||||
// stepper_status_CARRIAGE.target_pos += 10;
|
|
||||||
// translated = pgm_read_byte(&ascii_translation_table[*rdptr]);
|
|
||||||
// if (translated != PRINTER_NO_CHAR) {
|
|
||||||
// //debug_printf("Prepare: %x (%c) -> %d", *rdptr, *rdptr, translated);
|
|
||||||
// SET_TARGET(WHEEL, translated * 2);
|
|
||||||
// state++;
|
|
||||||
// } else {
|
|
||||||
// //debug_printf("Skip: %x (%c) -> %d\r\n", *rdptr, *rdptr, translated);
|
|
||||||
// rdptr++;
|
|
||||||
// if (rdptr == ptr) {
|
|
||||||
// state = 0;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// break;
|
|
||||||
// case 3:
|
|
||||||
// if (POSITION_REACHED(CARRIAGE) && POSITION_REACHED(WHEEL)) {
|
|
||||||
// //debug_write("!!!\r\n");
|
|
||||||
// //DCMOTOR_EN;
|
|
||||||
// arm_hammer();
|
|
||||||
// _delay_ms(50);
|
|
||||||
// //DCMOTOR_STOP;
|
|
||||||
// rdptr++;
|
|
||||||
// if (rdptr == ptr) {
|
|
||||||
// state = 0;
|
|
||||||
// } else {
|
|
||||||
// state--;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// break;
|
|
||||||
// default:
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// stepper_perform_movement(&stepper_status_CARRIAGE, &STEPPER_CFG_CARRIAGE);
|
|
||||||
// stepper_perform_movement(&stepper_status_WHEEL, &STEPPER_CFG_WHEEL);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
void systick_test()
|
|
||||||
{
|
|
||||||
debug_write("[tmr] System timer test\r\n");
|
|
||||||
while (1) {
|
|
||||||
if (block_for(TIM_SYSTEM, 1000 * TIMESCALE)) {
|
|
||||||
debug_write("tick.\r\n");
|
|
||||||
}
|
|
||||||
if (UCSRA & (1 << RXC)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void hardfault() {
|
|
||||||
debug_write("HARDFAULT!\r\n");
|
|
||||||
STEPPER_STOP(WHEEL);
|
|
||||||
STEPPER_STOP(CARRIAGE);
|
|
||||||
STEPPER_STOP(LINEFEED);
|
|
||||||
DDRB = 0;
|
|
||||||
DDRC = 0;
|
|
||||||
DDRD = 0;
|
|
||||||
PORTB = 0;
|
|
||||||
PORTC = 0;
|
|
||||||
PORTD = 0;
|
|
||||||
while(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SPI */
|
|
||||||
#define PRINT_BUFFER_SIZE 256 // Important: must be 256 atm, when changed, you need to change code handling print_buffer_*.
|
#define PRINT_BUFFER_SIZE 256 // Important: must be 256 atm, when changed, you need to change code handling print_buffer_*.
|
||||||
volatile char print_buffer[PRINT_BUFFER_SIZE];
|
volatile char print_buffer[PRINT_BUFFER_SIZE];
|
||||||
volatile uint8_t print_buffer_wr = 0;
|
volatile uint8_t print_buffer_wr = 0;
|
||||||
volatile uint8_t print_buffer_rd = 0;
|
volatile uint8_t print_buffer_rd = 0;
|
||||||
|
|
||||||
#define SPI_COMMAND_NONE 0x00
|
|
||||||
|
|
||||||
#define SPI_COMMAND_PRINTER_WRITE 0x01
|
|
||||||
#define SPI_COMMAND_PRINTER_RESET 0x02
|
|
||||||
#define SPI_COMMAND_PRINTER_SETMODE 0x03
|
|
||||||
#define SPI_COMMAND_PRINTER_MANUAL 0x04
|
|
||||||
#define SPI_COMMAND_PRINTER_PAUSE 0x05
|
|
||||||
#define SPI_COMMAND_PRINTER_RESUME 0x06
|
|
||||||
#define SPI_COMMAND_PRINTER_CLEARBUF 0x07
|
|
||||||
|
|
||||||
#define SPI_COMMAND_KEYBOARD_GETKEY 0x20
|
|
||||||
#define SPI_COMMAND_KEYBOARD_CLEARBUF 0x21
|
|
||||||
|
|
||||||
#define SPI_COMMAND_SYSTEM_BACKLIGHT 0x40
|
|
||||||
|
|
||||||
#define UART_BYTE_READY (UCSRA & (1 << RXC))
|
#define UART_BYTE_READY (UCSRA & (1 << RXC))
|
||||||
|
|
||||||
|
ISR(USART_RXC_vect)
|
||||||
inline void spi_process_data()
|
|
||||||
{
|
{
|
||||||
//print_buffer[print_buffer_wr++] = SPDR; // WARNING: No overflow protection
|
if (UCSRA & (1 << RXC)) {
|
||||||
|
print_buffer[print_buffer_wr++] = UDR;// WARNING: No overflow protection
|
||||||
// Will auto wrap at 256; print_buffer_wr = print_buffer_wr % PRINT_BUFFER_SIZE;
|
// Will auto wrap at 256; print_buffer_wr = print_buffer_wr % PRINT_BUFFER_SIZE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/*ISR(SPI_STC_vect)
|
|
||||||
{
|
|
||||||
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
#define PRINT_CHARACTER_WIDTH 10
|
#define PRINT_CHARACTER_WIDTH 10
|
||||||
@ -969,7 +855,7 @@ void printer_process()
|
|||||||
}
|
}
|
||||||
backward = 0; // Re-evaluate backward. Default is forward.
|
backward = 0; // Re-evaluate backward. Default is forward.
|
||||||
|
|
||||||
stepper_status_LINEFEED.target_pos -= PRINT_LINE_HEIGHT;
|
stepper_status_LINEFEED.target_pos += PRINT_LINE_HEIGHT;
|
||||||
uart_putc('\n');
|
uart_putc('\n');
|
||||||
current_is_linebreak--;
|
current_is_linebreak--;
|
||||||
//_delay_ms(1000);
|
//_delay_ms(1000);
|
||||||
@ -1057,7 +943,36 @@ void printer_process()
|
|||||||
stepper_perform_movement(&stepper_status_WHEEL, &STEPPER_CFG_WHEEL);
|
stepper_perform_movement(&stepper_status_WHEEL, &STEPPER_CFG_WHEEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int system_test_auto()
|
/* Test Functions */
|
||||||
|
void systick_test()
|
||||||
|
{
|
||||||
|
debug_write("[tmr] System timer test\r\n");
|
||||||
|
while (1) {
|
||||||
|
if (block_for(TIM_SYSTEM, 1000 * TIMESCALE)) {
|
||||||
|
debug_write("tick.\r\n");
|
||||||
|
}
|
||||||
|
if (UCSRA & (1 << RXC)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void system_test_printer()
|
||||||
|
{
|
||||||
|
debug_write("[sys] Entering printer test mode\r\n");
|
||||||
|
initialize_paperfeed();
|
||||||
|
move_carriage_to_far_left(1);
|
||||||
|
align_daisy_wheel();
|
||||||
|
reset_printhead();
|
||||||
|
|
||||||
|
uart_irq_enable();
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
printer_process();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void system_test_auto()
|
||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
int do_it = 0;
|
int do_it = 0;
|
||||||
@ -1186,6 +1101,13 @@ int system_test_auto()
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Launch programs */
|
||||||
|
switch (c) {
|
||||||
|
case 'P':
|
||||||
|
system_test_printer();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1235,7 +1157,9 @@ int main()
|
|||||||
PORTD = 0;
|
PORTD = 0;
|
||||||
|
|
||||||
/* Set up UART */
|
/* Set up UART */
|
||||||
|
UCSRA = 0;
|
||||||
UCSRB = (1 << TXEN) | (1 << RXEN);
|
UCSRB = (1 << TXEN) | (1 << RXEN);
|
||||||
|
UCSRC = 0;
|
||||||
UBRRH = ((((F_CPU / BAUDRATE) / 16) - 1) >> 8);
|
UBRRH = ((((F_CPU / BAUDRATE) / 16) - 1) >> 8);
|
||||||
UBRRL = (((F_CPU / BAUDRATE) / 16) - 1);
|
UBRRL = (((F_CPU / BAUDRATE) / 16) - 1);
|
||||||
|
|
||||||
@ -1262,7 +1186,7 @@ int main()
|
|||||||
sei();
|
sei();
|
||||||
|
|
||||||
/* Align printer */
|
/* Align printer */
|
||||||
initialize_paperfeed();
|
//initialize_paperfeed();
|
||||||
//move_carriage_to_far_left(1);
|
//move_carriage_to_far_left(1);
|
||||||
//align_daisy_wheel();
|
//align_daisy_wheel();
|
||||||
//reset_printhead();
|
//reset_printhead();
|
||||||
|
Loading…
Reference in New Issue
Block a user