iforce2d Chris / Mbed 2 deprecated ubxDistanceMeter

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers u8g_dev_a2_micro_printer.c Source File

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