AS-289R2 library test code for mbed 2 (classic)

Dependencies:   AS289R2 mbed

Revision:
1:3a6d4c7a3a73
Parent:
0:c407b8539f80
Child:
2:89363d1cba42
--- a/main.cpp	Sat Sep 03 04:33:46 2016 +0000
+++ b/main.cpp	Sat Sep 03 05:22:24 2016 +0000
@@ -2,7 +2,6 @@
 
 #include "mbed.h"
 
-Serial _serial(D1, D0);  // tx, rx
 
 #define AS289_FNC_ENABLE    0x31
 #define AS289_FNC_DISABLE   0x30
@@ -27,37 +26,100 @@
 #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)
+class AS289R2 : public Stream {
+public:
+
+    /** Create a AS289R2 instance
+     *  which is connected to specified I2C pins with specified address
+     *
+     * @param tx I2C-bus SDA pin
+     * @param rx I2C-bus SCL pin
+     * @param baud (option) I2C-bus address (default: 0x76)
+     */
+    AS289R2(PinName tx, PinName rx, uint32_t baud = 9600);
+
+    /** Create a BME280 instance
+     *  which is connected to specified I2C pins with specified address
+     *
+     * @param i2c_obj I2C object (instance)
+     * @param slave_adr (option) I2C-bus address (default: 0x76)
+     */
+    AS289R2(Serial &serial_obj, uint32_t baud = 9600);
+
+    /** Destructor of BME280
+     */
+    virtual ~AS289R2();
+
+    /** Initializa BME280 sensor
+     *
+     *  Configure sensor setting and read parameters for calibration
+     *
+     */
+    void initialize(void);
+    void putLineFeed(uint32_t lines);
+    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, uint16_t lines, char * image);
+
+private:
+    Serial      *_serial_p;
+    Serial      &_serial;
+
+protected:
+    // Stream implementation functions
+    virtual int _putc(int value);
+    virtual int _getc();
+};
+
+AS289R2::AS289R2(PinName tx, PinName rx, uint32_t baud)
+    :
+    _serial_p(new Serial(tx, tx)), 
+    _serial(*_serial_p)
+{
+    _serial.baud(baud);
+    initialize();
+}
+
+AS289R2::AS289R2(Serial &serial_obj, uint32_t baud)
+    :
+    _serial_p(NULL), 
+    _serial(serial_obj)
+{
+    _serial.baud(9600);
+    initialize();
+}
+
+AS289R2::~AS289R2()
+{
+}
+
+void AS289R2::initialize(void)
+{
+    _serial.printf("\x1B\x40");
+}
+
+
+
+void AS289R2::putLineFeed(uint32_t lines)
 {
     for(uint32_t i = 0; i < lines; i++) {
         _serial.putc('\r');
     }
 }
 
-void Init(void)
-{
-    _serial.printf("\x1B\x40");
-}
-
-void ClearBuffer(void)
+void AS289R2::clearBuffer(void)
 {
     _serial.putc(0x18);
 }
 
-void DoubleSizeHeight(uint32_t param)
+void AS289R2::DoubleSizeHeight(uint32_t param)
 {
     char buf[3] = {0x1B, 0x4E};
     buf[2] = param;
@@ -66,7 +128,7 @@
     }
 }
 
-void DoubleSizeWidth(uint32_t param)
+void AS289R2::DoubleSizeWidth(uint32_t param)
 {
     char buf[3] = {0x1B, 0x57};
     buf[2] = param;
@@ -75,7 +137,7 @@
     }
 }
 
-void SetLargeFont(uint32_t param)
+void AS289R2::setLargeFont(uint32_t param)
 {
     char buf[3] = {0x1B, 0x4C};
     buf[2] = param;
@@ -84,7 +146,7 @@
     }
 }
 
-void SetANKFont(uint32_t font)
+void AS289R2::setANKFont(uint32_t font)
 {
     char buf[3] = {0x1B, 0x68};
     buf[2] = font;
@@ -93,7 +155,7 @@
     }
 }
 
-void PrintQRCode(uint32_t err, char* param)
+void AS289R2::printQRCode(uint32_t err, char* param)
 {
     uint32_t len = strlen(param);
     char buf[4] = {0x1D, 0x78};
@@ -107,7 +169,7 @@
     }
 }
 
-void PrintBarCode(uint32_t code, char* param)
+void AS289R2::printBarCode(uint32_t code, char* param)
 {
     char buf[3] = {0x1D, 0x6B};
     buf[2] = code;
@@ -120,7 +182,7 @@
     _serial.putc('\0');
 }
 
-void PrintBitmapImage(uint32_t mode, uint16_t lines, char * image)
+void AS289R2::printBitmapImage(uint32_t mode, uint16_t lines, char * image)
 {
     char buf[3] = {0x1C, 0x2A};
     buf[2] = mode;
@@ -129,40 +191,51 @@
     }
     _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 AS289R2::_putc(int value) {
+    _serial.putc(value);
+    return value;
+}
+ 
+int AS289R2::_getc() {
+    return -1;
+}
+
+AS289R2 tprn(D1, D0);  // tx, rx
+
 int main()
 {
-    Init();
-    LineFeed(2);
+    tprn.initialize();
+    tprn.putLineFeed(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);
+    tprn.printf("** Thermal Printer Shield **\r");
+    tprn.DoubleSizeWidth(AS289_FNC_ENABLE);
+    tprn.printf("AS-289R2\r\r");
+    tprn.DoubleSizeWidth(AS289_FNC_DISABLE);
+    tprn.printf("日本語文字列の印字テストです。\r\r");
+    tprn.DoubleSizeHeight(AS289_FNC_DISABLE);
+    tprn.printf("0123456789\r");
+    tprn.putLineFeed(2);
 
     // Barcode print
-    SetANKFont(AS289_ANK_8x16);
-    _serial.printf("QR\r");
-    PrintQRCode(AS289_QR_ERR_LVL_M, "https://developer.mbed.org");
-    LineFeed(2);
+    tprn.setANKFont(AS289_ANK_8x16);
+    tprn.printf("QR\r");
+    tprn.printQRCode(AS289_QR_ERR_LVL_M, "https://developer.mbed.org");
+    tprn.putLineFeed(2);
 
-    _serial.printf("UPC-A\r");
-    PrintBarCode(AS289_BCODE_UPC_A, "01234567890");
-    LineFeed(6);
+    tprn.printf("UPC-A\r");
+    tprn.printBarCode(AS289_BCODE_UPC_A, "01234567890");
+    tprn.putLineFeed(6);
 
     while(1);
 }