Ejemplo n.º 1
0
/**
 * The same as test.c, only it reads from the first argument
 * and prints 0s and 1s instead of picture.
 *
 * It's used for compiling to JavaScript, because we can set up
 * argument and read 1/0s more easily
 */
int main(int argc, char **argv)
{
	int side, i, j, a;
	uint8_t bitdata[QR_MAX_BITDATA];

    if (argc<2){
        printf("1");
        return 1;
    }

    char *str=argv[1];

	side = qr_encode(QR_LEVEL_M, 0, str, 0, bitdata);


	//for (i = 0; i < side + 2; i++) printf("1");
	for (i = 0; i < side; i++) {
	//	printf("1");
		for (j = 0; j < side; j++) {
			a = i * side + j;
			printf((bitdata[a / 8] & (1 << (7 - a % 8))) ? "0" : "1");
		}
	//	printf("1");
	}
	//for (i = 0; i < side + 2; i++) printf("1");

	return 0;
}
Ejemplo n.º 2
0
/*
 * layout_address() - Draws QR code of address
 *
 * INPUT
 *     - address: address to QR code for
 * OUTPUT
 *     none
 */
void layout_address(const char *address)
{
    static unsigned char bitdata[QR_MAX_BITDATA];
    Canvas *canvas = layout_get_canvas();

    int a, i, j;
    int side = qr_encode(QR_LEVEL_M, 0, address, 0, bitdata);

    if(side > 0 && side <= 29)
    {
        /* Draw QR background */
        draw_box_simple(canvas, 0xFF, QR_DISPLAY_X, QR_DISPLAY_Y,
                        (side + 2) * QR_DISPLAY_SCALE, (side + 2) * QR_DISPLAY_SCALE);

        /* Fill in QR */
        for(i = 0; i < side; i++)
        {
            for(j = 0; j < side; j++)
            {
                a = j * side + i;

                if(bitdata[a / 8] & (1 << (7 - a % 8)))
                {
                    draw_box_simple(canvas, 0x00,
                                    QR_DISPLAY_SCALE + (i + QR_DISPLAY_X) * QR_DISPLAY_SCALE,
                                    QR_DISPLAY_SCALE + (j + QR_DISPLAY_Y) * QR_DISPLAY_SCALE,
                                    QR_DISPLAY_SCALE, QR_DISPLAY_SCALE);
                }
            }
        }
    }
}
Ejemplo n.º 3
0
END_TEST

START_TEST(test_alphabet)
{
	int side;
	unsigned char bitdata[QR_MAX_BITDATA];

	memset(bitdata, sizeof(bitdata), 0);
	side = qr_encode(QR_LEVEL_L, 0, "test", 0, bitdata);
	ck_assert_int_eq(side, 21);
	ck_assert_int_eq(memcmp(bitdata, RESULT_ALPHA_1, bitsize(side)), 0);

	memset(bitdata, sizeof(bitdata), 0);
	side = qr_encode(QR_LEVEL_M, 0, "test", 0, bitdata);
	ck_assert_int_eq(side, 21);
	ck_assert_int_eq(memcmp(bitdata, RESULT_ALPHA_2, bitsize(side)), 0);

	memset(bitdata, sizeof(bitdata), 0);
	side = qr_encode(QR_LEVEL_Q, 0, "test", 0, bitdata);
	ck_assert_int_eq(side, 21);
	ck_assert_int_eq(memcmp(bitdata, RESULT_ALPHA_3, bitsize(side)), 0);

	memset(bitdata, sizeof(bitdata), 0);
	side = qr_encode(QR_LEVEL_H, 0, "test", 0, bitdata);
	ck_assert_int_eq(side, 21);
	ck_assert_int_eq(memcmp(bitdata, RESULT_ALPHA_4, bitsize(side)), 0);

#if QR_MAX_VERSION >= QR_VERSION_M
	const char *lipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras at risus sodales, rhoncus arcu eu, accumsan augue. Mauris a mauris et ante porta eleifend. Sed condimentum metus vitae tortor bibendum, et scelerisque quam placerat. Nam at sapien lacus. Proin magna ipsum, dapibus non dignissim a, posuere vitae nulla. Donec pretium odio sit amet lorem interdum, nec ullamcorper diam iaculis. Mauris at est sit amet purus venenatis pretium vitae sed magna.";

	memset(bitdata, sizeof(bitdata), 0);
	side = qr_encode(QR_LEVEL_L, 0, lipsum, 0, bitdata);
	ck_assert_int_eq(side, 73);
	ck_assert_int_eq(memcmp(bitdata, RESULT_ALPHA_5, bitsize(side)), 0);

	memset(bitdata, sizeof(bitdata), 0);
	side = qr_encode(QR_LEVEL_M, 0, lipsum, 0, bitdata);
	ck_assert_int_eq(side, 85);
	ck_assert_int_eq(memcmp(bitdata, RESULT_ALPHA_6, bitsize(side)), 0);

	memset(bitdata, sizeof(bitdata), 0);
	side = qr_encode(QR_LEVEL_Q, 0, lipsum, 0, bitdata);
	ck_assert_int_eq(side, 97);
	ck_assert_int_eq(memcmp(bitdata, RESULT_ALPHA_7, bitsize(side)), 0);

	memset(bitdata, sizeof(bitdata), 0);
	side = qr_encode(QR_LEVEL_H, 0, lipsum, 0, bitdata);
	ck_assert_int_eq(side, 109);
	ck_assert_int_eq(memcmp(bitdata, RESULT_ALPHA_8, bitsize(side)), 0);
#endif
}
Ejemplo n.º 4
0
void layoutAddress(const char *address, const char *desc, bool qrcode, bool ignorecase, const uint32_t *address_n, size_t address_n_count, bool address_is_account)
{
	if (layoutLast != layoutAddress) {
		layoutSwipe();
	} else {
		oledClear();
	}
	layoutLast = layoutAddress;

	uint32_t addrlen = strlen(address);
	if (qrcode) {
		static unsigned char bitdata[QR_MAX_BITDATA];
		char address_upcase[addrlen + 1];
		if (ignorecase) {
			for (uint32_t i = 0; i < addrlen + 1; i++) {
				address_upcase[i] = address[i] >= 'a' && address[i] <= 'z' ?
					address[i] + 'A' - 'a' : address[i];
			}
		}
		int side = qr_encode(addrlen <= (ignorecase ? 60 : 40) ? QR_LEVEL_M : QR_LEVEL_L, 0,
							 ignorecase ? address_upcase : address, 0, bitdata);

		oledInvert(0, 0, 63, 63);
		if (side > 0 && side <= 29) {
			int offset = 32 - side;
			for (int i = 0; i < side; i++) {
				for (int j = 0; j< side; j++) {
					int a = j * side + i;
					if (bitdata[a / 8] & (1 << (7 - a % 8))) {
						oledBox(offset + i * 2, offset + j * 2,
								offset + 1 + i * 2, offset + 1 + j * 2, false);
					}
				}
			}
		} else if (side > 0 && side <= 60) {
			int offset = 32 - (side / 2); 
			for (int i = 0; i < side; i++) {
				for (int j = 0; j< side; j++) {
					int a = j * side + i;
					if (bitdata[a / 8] & (1 << (7 - a % 8))) {
						oledClearPixel(offset + i, offset + j);
					}
				}
			}
		}
	} else {
		if (desc) {
			oledDrawString(0, 0 * 9, desc, FONT_STANDARD);
		}
		if (addrlen > 10) { // don't split short addresses
			uint32_t rowlen = (addrlen - 1) / (addrlen <= 42 ? 2 : addrlen <= 63 ? 3 : 4) + 1;
			const char **str = split_message((const uint8_t *)address, addrlen, rowlen);
			for (int i = 0; i < 4; i++) {
				oledDrawString(0, (i + 1) * 9 + 4, str[i], FONT_FIXED);
			}
		} else {
			oledDrawString(0, (0 + 1) * 9 + 4, address, FONT_FIXED);
		}
		oledDrawString(0, 42, address_n_str(address_n, address_n_count, address_is_account), FONT_STANDARD);
	}

	if (!qrcode) {
		layoutButtonNo(_("QR Code"));
	}

	layoutButtonYes(_("Continue"));
	oledRefresh();
}