偶然发现的,觉得蛮有创意,就集成进xboot,每次上电开机,串口都会通过二维码的形式展示芯片唯一ID。
还见到另外一个创意,也觉得蛮有意思,PC跟手机传文件,写个命令行的程序,运行参数带文件路径,运行后开启http服务,并通过终端展示二维码,然后手机微信扫码,就直接下载了。也觉得蛮有用。
离线
补充下,需要终端开启UTF8支持,对于minicom可以通天 -R参数来选择utf8
sudo minicom -R utf8 -D /dev/ttyUSB0
离线
生成串口二维码的代码,不复杂,就4种字符,其中一个是空格,其他是UTF8字符。支持反显,大部分linux终端,都是黑底白字,所有需要反色显示,当然对于微信,无所谓,正反都可以,但阿里的app,就不支持反显扫码了,这一点,还是微信做的好点。
/* ▀▄█ */
#define UTF8_EMPTY(inv) do{ if(inv) { *p++ = 0xe2; *p++ = 0x96; *p++ = 0x88; } else { *p++ = 0x20; } } while(0)
#define UTF8_TOPHALF(inv) do{ if(inv) { *p++ = 0xe2; *p++ = 0x96; *p++ = 0x84; } else { *p++ = 0xe2; *p++ = 0x96; *p++ = 0x80; } } while(0)
#define UTF8_BOTTOMHALF(inv) do{ if(inv) { *p++ = 0xe2; *p++ = 0x96; *p++ = 0x80; } else { *p++ = 0xe2; *p++ = 0x96; *p++ = 0x84; } } while(0)
#define UTF8_FULL(inv) do{ if(inv) { *p++ = 0x20; } else { *p++ = 0xe2; *p++ = 0x96; *p++ = 0x88; } } while(0)
#define UTF8_NEWLINE() do{ *p++ = '\r'; *p++ = '\n'; } while(0)
#define UTF8_END() do{ *p++ = '\0'; } while(0)
char * qrcgen_tostring(const char * txt, int invert)
{
uint8_t qrc[QRCGEN_BUFFER_LEN_MAX];
uint8_t tmp[QRCGEN_BUFFER_LEN_MAX];
int qrs, x, y, i;
int t, b;
char *s, *p;
if(qrcgen_encode_text(txt, tmp, qrc, QRCGEN_ECC_MEDIUM, QRCGEN_VERSION_MIN, QRCGEN_VERSION_MAX, QRCGEN_MASK_AUTO, 1))
{
qrs = qrcgen_get_size(qrc);
if(qrs > 0)
{
p = s = malloc(((qrs + 4) * 3 + 2) * (qrs / 2 + 1 + 2) + 1);
if(s)
{
for(i = 0; i < qrs + 4; ++i)
UTF8_EMPTY(invert);
UTF8_NEWLINE();
for(y = 0; y < qrs; y += 2)
{
UTF8_EMPTY(invert);
UTF8_EMPTY(invert);
for(x = 0; x < qrs; x++)
{
t = qrcgen_get_pixel(qrc, x, y);
b = 0;
if(y + 1 < qrs)
b = qrcgen_get_pixel(qrc, x, y + 1);
if(t)
{
if(b)
UTF8_FULL(invert);
else
UTF8_TOPHALF(invert);
}
else
{
if(b)
UTF8_BOTTOMHALF(invert);
else
UTF8_EMPTY(invert);
}
}
UTF8_EMPTY(invert);
UTF8_EMPTY(invert);
UTF8_NEWLINE();
}
for(i = 0; i < qrs + 4; i++)
UTF8_EMPTY(invert);
UTF8_NEWLINE();
UTF8_END();
return s;
}
}
}
return NULL;
}
离线