Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
u8g_dev_a2_micro_printer.c
00001 /* 00002 00003 u8g_dev_a2_micro_printer_ds.c 00004 00005 Use DC2 bitmap command of the A2 Micro panel termal printer 00006 double stroke 00007 00008 Universal 8bit Graphics Library 00009 00010 Copyright (c) 2013, olikraus@gmail.com 00011 All rights reserved. 00012 00013 Redistribution and use in source and binary forms, with or without modification, 00014 are permitted provided that the following conditions are met: 00015 00016 * Redistributions of source code must retain the above copyright notice, this list 00017 of conditions and the following disclaimer. 00018 00019 * Redistributions in binary form must reproduce the above copyright notice, this 00020 list of conditions and the following disclaimer in the documentation and/or other 00021 materials provided with the distribution. 00022 00023 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 00024 CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 00025 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00026 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00027 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 00028 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00029 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 00030 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00031 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00032 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 00033 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00034 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 00035 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00036 00037 00038 */ 00039 00040 #include "u8g.h" 00041 00042 #define WIDTH 240 00043 #define HEIGHT 128 00044 #define PAGE_HEIGHT 8 00045 00046 #define LINE_DELAY 40 00047 00048 00049 uint8_t u8g_dev_a2_micro_printer_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) 00050 { 00051 switch(msg) 00052 { 00053 case U8G_DEV_MSG_INIT: 00054 u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE); 00055 break; 00056 case U8G_DEV_MSG_STOP: 00057 break; 00058 case U8G_DEV_MSG_PAGE_NEXT: 00059 { 00060 uint8_t y, i, j; 00061 uint8_t *ptr; 00062 u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem); 00063 00064 y = pb->p.page_y0; 00065 ptr = pb->buf; 00066 00067 u8g_WriteByte(u8g, dev, 27); /* ESC */ 00068 u8g_WriteByte(u8g, dev, 55 ); /* parameter command */ 00069 u8g_WriteByte(u8g, dev, 7); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1)*/ 00070 u8g_WriteByte(u8g, dev, 160); /* 3-255 Heating time,Unit(10us),Default:80(800us) */ 00071 u8g_WriteByte(u8g, dev, 20); /* 0-255 Heating interval,Unit(10us),Default:2(20us)*/ 00072 00073 u8g_WriteByte(u8g, dev, 18); /* DC2 */ 00074 u8g_WriteByte(u8g, dev, 42 ); /* * */ 00075 u8g_WriteByte(u8g, dev, pb->p.page_height ); 00076 u8g_WriteByte(u8g, dev, pb->width/8 ); 00077 00078 for( i = 0; i < pb->p.page_height; i ++ ) 00079 { 00080 for( j = 0; j < pb->width/8; j++ ) 00081 { 00082 u8g_WriteByte(u8g, dev, *ptr); 00083 ptr++; 00084 } 00085 u8g_Delay(LINE_DELAY); 00086 y++; 00087 } 00088 00089 /* set parameters back to their default values */ 00090 u8g_WriteByte(u8g, dev, 27); /* ESC */ 00091 u8g_WriteByte(u8g, dev, 55 ); /* parameter command */ 00092 u8g_WriteByte(u8g, dev, 7); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1)*/ 00093 u8g_WriteByte(u8g, dev, 80); /* 3-255 Heating time,Unit(10us),Default:80(800us) */ 00094 u8g_WriteByte(u8g, dev, 2); /* 0-255 Heating interval,Unit(10us),Default:2(20us)*/ 00095 00096 } 00097 break; 00098 } 00099 return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg); 00100 } 00101 00102 static uint8_t u8g_dev_expand4(uint8_t val) 00103 { 00104 uint8_t a,b,c,d; 00105 a = val&1; 00106 b = (val&2)<<1; 00107 c = (val&4)<<2; 00108 d = (val&8)<<3; 00109 a |=b; 00110 a |=c; 00111 a |=d; 00112 a |= a<<1; 00113 return a; 00114 } 00115 00116 uint8_t u8g_dev_a2_micro_printer_double_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) 00117 { 00118 switch(msg) 00119 { 00120 case U8G_DEV_MSG_INIT: 00121 u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE); 00122 break; 00123 case U8G_DEV_MSG_STOP: 00124 break; 00125 case U8G_DEV_MSG_PAGE_FIRST: 00126 { 00127 //u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem); 00128 //u8g_WriteByte(u8g, dev, 18); /* DC2 */ 00129 //u8g_WriteByte(u8g, dev, 42 ); /* * */ 00130 //u8g_WriteByte(u8g, dev, pb->p.total_height*2 ); 00131 //u8g_WriteByte(u8g, dev, pb->width/8*2 ); 00132 } 00133 break; 00134 case U8G_DEV_MSG_PAGE_NEXT: 00135 { 00136 uint8_t y, i, j; 00137 uint8_t *ptr; 00138 uint8_t *p2; 00139 u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem); 00140 00141 y = pb->p.page_y0; 00142 ptr = pb->buf; 00143 //u8g_WriteByte(u8g, dev, 18); /* DC2 */ 00144 //u8g_WriteByte(u8g, dev, 35 ); /* # */ 00145 //u8g_WriteByte(u8g, dev, 0x0ff ); /* max */ 00146 00147 u8g_WriteByte(u8g, dev, 27); /* ESC */ 00148 u8g_WriteByte(u8g, dev, 55 ); /* parameter command */ 00149 u8g_WriteByte(u8g, dev, 7); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1)*/ 00150 u8g_WriteByte(u8g, dev, 160); /* 3-255 Heating time,Unit(10us),Default:80(800us) */ 00151 u8g_WriteByte(u8g, dev, 20); /* 0-255 Heating interval,Unit(10us),Default:2(20us)*/ 00152 00153 u8g_WriteByte(u8g, dev, 18); /* DC2 */ 00154 u8g_WriteByte(u8g, dev, 42 ); /* * */ 00155 u8g_WriteByte(u8g, dev, pb->p.page_height*2 ); 00156 u8g_WriteByte(u8g, dev, pb->width/8*2 ); 00157 00158 for( i = 0; i < pb->p.page_height; i ++ ) 00159 { 00160 p2 = ptr; 00161 for( j = 0; j < pb->width/8; j++ ) 00162 { 00163 u8g_WriteByte(u8g, dev, u8g_dev_expand4(*p2 >> 4)); 00164 u8g_WriteByte(u8g, dev, u8g_dev_expand4(*p2 & 15)); 00165 p2++; 00166 } 00167 u8g_Delay(LINE_DELAY); 00168 p2 = ptr; 00169 for( j = 0; j < pb->width/8; j++ ) 00170 { 00171 u8g_WriteByte(u8g, dev, u8g_dev_expand4(*p2 >> 4)); 00172 u8g_WriteByte(u8g, dev, u8g_dev_expand4(*p2 & 15)); 00173 p2++; 00174 } 00175 u8g_Delay(LINE_DELAY); 00176 ptr += pb->width/8; 00177 y++; 00178 } 00179 00180 /* set parameters back to their default values */ 00181 u8g_WriteByte(u8g, dev, 27); /* ESC */ 00182 u8g_WriteByte(u8g, dev, 55 ); /* parameter command */ 00183 u8g_WriteByte(u8g, dev, 7); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1)*/ 00184 u8g_WriteByte(u8g, dev, 80); /* 3-255 Heating time,Unit(10us),Default:80(800us) */ 00185 u8g_WriteByte(u8g, dev, 2); /* 0-255 Heating interval,Unit(10us),Default:2(20us)*/ 00186 00187 } 00188 break; 00189 } 00190 return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg); 00191 } 00192 00193 #if defined(U8G_16BIT) 00194 U8G_PB_DEV(u8g_dev_a2_micro_printer_384x240, 384, 240, 8, u8g_dev_a2_micro_printer_fn, u8g_com_null_fn); 00195 #else 00196 U8G_PB_DEV(u8g_dev_a2_micro_printer_384x240, 240, 240, 8, u8g_dev_a2_micro_printer_fn, u8g_com_null_fn); 00197 #endif 00198 00199 U8G_PB_DEV(u8g_dev_a2_micro_printer_192x120_ds, 192, 120, 8, u8g_dev_a2_micro_printer_double_fn, u8g_com_null_fn); 00200
Generated on Tue Jul 12 2022 17:30:57 by
1.7.2