Toyomasa Watarai
/
AS-289R2_Hello-World
AS-289R2 library test code for mbed 2 (classic)
Diff: main.cpp
- Revision:
- 0:c407b8539f80
- Child:
- 1:3a6d4c7a3a73
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Sep 03 04:33:46 2016 +0000 @@ -0,0 +1,168 @@ + + +#include "mbed.h" + +Serial _serial(D1, D0); // tx, rx + +#define AS289_FNC_ENABLE 0x31 +#define AS289_FNC_DISABLE 0x30 + +#define AS289_KANJI_24x24 0x30 +#define AS289_KANJI_16x16 0x31 + +#define AS289_ANK_8x16 0x30 +#define AS289_ANK_12x16 0x31 +#define AS289_ANK_16x16 0x32 +#define AS289_ANK_24x24 0x33 +#define AS289_ANK_DEFAULT 0x31 + +#define AS289_QR_ERR_LVL_L 0x4C +#define AS289_QR_ERR_LVL_M 0x4D +#define AS289_QR_ERR_LVL_Q 0x51 +#define AS289_QR_ERR_LVL_H 0x48 + +#define AS289_BCODE_UPC_A 0x30 +#define AS289_BCODE_JAN13 0x32 +#define AS289_BCODE_JAN8 0x33 +#define AS289_BCODE_CODE39 0x34 +#define AS289_BCODE_ITF 0x35 +#define AS289_BCODE_CODABAR 0x36 + +void LineFeed(uint32_t lines); +void Init(void); +void ClearBuffer(void); +void DoubleSizeHeight(uint32_t param); +void DoubleSizeWidth(uint32_t param); +void SetLargeFont(uint32_t param); +void PrintQRCode(uint32_t err, char* buf); +void PrintBarCode(uint32_t code, char* param); +void SetANKFont(uint32_t font); +void PrintBitmapImage(uint32_t cmd, uint32_t lines, char * image); + + +void LineFeed(uint32_t lines) +{ + for(uint32_t i = 0; i < lines; i++) { + _serial.putc('\r'); + } +} + +void Init(void) +{ + _serial.printf("\x1B\x40"); +} + +void ClearBuffer(void) +{ + _serial.putc(0x18); +} + +void DoubleSizeHeight(uint32_t param) +{ + char buf[3] = {0x1B, 0x4E}; + buf[2] = param; + for (uint32_t i = 0; i < sizeof(buf); i++) { + _serial.putc(buf[i]); + } +} + +void DoubleSizeWidth(uint32_t param) +{ + char buf[3] = {0x1B, 0x57}; + buf[2] = param; + for (uint32_t i = 0; i < sizeof(buf); i++) { + _serial.putc(buf[i]); + } +} + +void SetLargeFont(uint32_t param) +{ + char buf[3] = {0x1B, 0x4C}; + buf[2] = param; + for (uint32_t i = 0; i < sizeof(buf); i++) { + _serial.putc(buf[i]); + } +} + +void SetANKFont(uint32_t font) +{ + char buf[3] = {0x1B, 0x68}; + buf[2] = font; + for (uint32_t i = 0; i < sizeof(buf); i++) { + _serial.putc(buf[i]); + } +} + +void PrintQRCode(uint32_t err, char* param) +{ + uint32_t len = strlen(param); + char buf[4] = {0x1D, 0x78}; + buf[2] = err; + buf[3] = len; + for (uint32_t i = 0; i < sizeof(buf); i++) { + _serial.putc(buf[i]); + } + for (uint32_t i = 0; i < len; i++) { + _serial.putc(param[i]); + } +} + +void PrintBarCode(uint32_t code, char* param) +{ + char buf[3] = {0x1D, 0x6B}; + buf[2] = code; + for (uint32_t i = 0; i < sizeof(buf); i++) { + _serial.putc(buf[i]); + } + for (uint32_t i = 0; i < strlen(param); i++) { + _serial.putc(param[i]); + } + _serial.putc('\0'); +} + +void PrintBitmapImage(uint32_t mode, uint16_t lines, char * image) +{ + char buf[3] = {0x1C, 0x2A}; + buf[2] = mode; + for (uint32_t i = 0; i < sizeof(buf); i++) { + _serial.putc(buf[i]); + } + _serial.putc((lines >> 8) & 0xFF); // n1 + _serial.putc((lines >> 0) & 0xFF); // n2 + + if (mode == 0x61) { + return; + } + + for (uint32_t i = 0; i < (48 * lines); i++) { + _serial.putc(image[i]); + } +} + +int main() +{ + Init(); + LineFeed(2); + + // Text print + _serial.printf("** Thermal Printer Shield **\r"); + DoubleSizeWidth(AS289_FNC_ENABLE); + _serial.printf("AS-289R2\r\r"); + DoubleSizeWidth(AS289_FNC_DISABLE); + _serial.printf("日本語文字列の印字テストです。\r\r"); + DoubleSizeHeight(AS289_FNC_DISABLE); + _serial.printf("0123456789\r"); + LineFeed(2); + + // Barcode print + SetANKFont(AS289_ANK_8x16); + _serial.printf("QR\r"); + PrintQRCode(AS289_QR_ERR_LVL_M, "https://developer.mbed.org"); + LineFeed(2); + + _serial.printf("UPC-A\r"); + PrintBarCode(AS289_BCODE_UPC_A, "01234567890"); + LineFeed(6); + + while(1); +}