使用espidf环境,通过s3usb host,发送ESCPOS指令集传输给热敏打印机,打印文字和图片。
个人对usb协议不了解,也对官方文档看不明白
想寻求一个可以解决的代码方案,谢谢
是usb host模式的不?
结合STM32的例程,把USB库换成ESP32S3的
这是我之前windows调试USB打印机的代码 希望对你有帮助
#include "stdafx.h"
#include "SysPublic.h"
#include <setupapi.h>
#include <windows.h>
#include "stdio.h"
#include "bmp.h"
HANDLE UsbHandle;
//#define HEAD_STRING "������Ʊ<11ѡ5>\r\n"
#define HEAD_STRING "��ʱ���11ѡ5\r\n"
#define NUMBER_STRING "000010-188264-149000-010038 226402"
#define NUMBER1_STARING "aq6QKl\r\n"
#define PER_STRING "�� 17111116�� ��5��"
#define OPEN_STRING "17/11/11����\r\n"
#define STRING_TEST "��ѡ�� ��ʽƱ 3�� �ϼ�60Ԫ\r\n�� 01+02+03+04+05\r\n�� 02+08+09+10+11\r\n \r\n \r\n \r\n \r\n"
#define STRING_CUT_LINE "------------------------------------------\r\n"
#define _EXT_LINE_ "**������� ��������**�������أ�46.41�ڣ������Ƽ����ƿ�˹��VS�����¸����洫ͳ����ʤƽ��4��1���н����Ͳ�Ʊ\r\n"
#define _EXT_LINE_1 "�����������Ͻ�40��\r\n"
#pragma warning(disable:4996)
#pragma warning(disable:4267)
void GetPath(char * path)
{
GUID InterfaceClassGuid = {0xa5dcbf10L, 0x6530, 0x11d2, {0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed}};
HDEVINFO hdevClassInfo;
hdevClassInfo = SetupDiGetClassDevs(&InterfaceClassGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
DWORD nMemberIndex;
for(nMemberIndex = 0; true; nMemberIndex++)
{
SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
BOOL nStatus = SetupDiEnumDeviceInterfaces(hdevClassInfo, NULL, &InterfaceClassGuid, nMemberIndex, &DeviceInterfaceData);
if (!nStatus)
{
break;
}
DWORD RequiredSize;
nStatus = SetupDiGetDeviceInterfaceDetail(hdevClassInfo, &DeviceInterfaceData, NULL, 0, &RequiredSize, NULL);
PSP_DEVICE_INTERFACE_DETAIL_DATA pBuffer;
pBuffer = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(RequiredSize);
pBuffer->cbSize = sizeof(*pBuffer);
SP_DEVINFO_DATA DeviceInfoData;
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA) ;
nStatus = SetupDiGetDeviceInterfaceDetail(hdevClassInfo, &DeviceInterfaceData, pBuffer, RequiredSize, &RequiredSize, &DeviceInfoData);
if(!nStatus)
{
break;
}
if(strstr(pBuffer->DevicePath,"vid_0483&pid_5743"))
{
strcpy(path,pBuffer->DevicePath);
break;
}
}
}
BOOL DeviceWrite(HANDLE handle, LPCVOID lpBuffer, DWORD dwSize)
{
DWORD dwRet;
BOOL bRet;
bRet = WriteFile(handle, lpBuffer, dwSize, &dwRet, NULL);
return bRet;
}
void UsbRead(void)
{
printf("ThreadOne is Runing\n");
char buffer[1024] = {0x00};
DWORD read = 0;
while(1)
{
ReadFile(UsbHandle, buffer, sizeof(buffer), &read, NULL);
if(read != 0)
{
for(DWORD i = 0; i < read; i++)
{
TRACE("%02x ",buffer[i]);
}
}
Sleep(100);
}
}
char ReadFlag = 0;
DWORD WINAPI ThreadReadUSB(LPVOID lpParameter)
{
char buffer[2] = {0x00};
DWORD read = 0;
DeviceWrite(UsbHandle,"\x10\x04\x01",3);
while(ReadFlag)
{
Sleep(100);
BOOL a = ReadFile(UsbHandle, buffer, 1, &read, NULL);
if(read == 1)
{
TRACE("%02x ",buffer[0]);
}
}
return 0;
}
void OpenUSB(void)
{
char path[256] = {0x00};
//HANDLE HOne;
ReadFlag = 0;
GetPath(path);
UsbHandle = CreateFile(path,GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,OPEN_EXISTING, 0, NULL);
ReadFlag = 1;
// HOne=CreateThread(NULL,0,ThreadReadUSB,NULL,0,NULL);
}
void SetXY(char x, char y)
{
char buf[4] = {0x00};
buf[0] = 0x1D;
buf[1] = 0x50;
buf[2] = x;
buf[3] = y;
DeviceWrite(UsbHandle,buf, 4);
}
void SetLeft(void)
{
DeviceWrite(UsbHandle,"\x1B\x61\x00", 3);
}
void SetRight(void)
{
DeviceWrite(UsbHandle,"\x1B\x61\x02", 3);
}
void Dark24_24(bool mode)
{
if(mode)
{
DeviceWrite(UsbHandle,"\x1B\x21\x29", 3);
}else{
DeviceWrite(UsbHandle,"\x1B\x21\x00", 3);
}
}
void FontZoom(char var)
{
switch(var)
{
case 1:
DeviceWrite(UsbHandle,"\x1D\x21\x00", 3);
break;
case 2:
DeviceWrite(UsbHandle,"\x1D\x21\x11", 3);
break;
case 3:
DeviceWrite(UsbHandle,"\x1D\x21\x22", 3);
break;
case 4:
DeviceWrite(UsbHandle,"\x1D\x21\x33", 3);
break;
default:
break;
}
}
void PrintTest(void)
{
OpenUSB();
//PrintHead();
//Sleep(1000);
SetCenter();
FontZoomIn();
DeviceWrite(UsbHandle,HEAD_STRING, strlen(HEAD_STRING));
SetLF();
FontZoomOut();
CancleDark();
DeviceWrite(UsbHandle,NUMBER_STRING, strlen(NUMBER_STRING));
SetDark();
DeviceWrite(UsbHandle,"5", 1);
CancleDark();;
DeviceWrite(UsbHandle,NUMBER1_STARING, strlen(NUMBER1_STARING));
DeviceWrite(UsbHandle,PER_STRING, strlen(PER_STRING));
DeviceWrite(UsbHandle,OPEN_STRING, strlen(OPEN_STRING));
SetDark();
DeviceWrite(UsbHandle,STRING_TEST, strlen(STRING_TEST));
StartPrintAndCutPaper();
}
SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
BOOL nStatus = SetupDiEnumDeviceInterfaces(hdevClassInfo, NULL, &InterfaceClassGuid, nMemberIndex, &DeviceInterfaceData);
if (!nStatus)
{
break;
}
DWORD RequiredSize;
nStatus = SetupDiGetDeviceInterfaceDetail(hdevClassInfo, &DeviceInterfaceData, NULL, 0, &RequiredSize, NULL);
PSP_DEVICE_INTERFACE_DETAIL_DATA pBuffer;
pBuffer = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(RequiredSize);
pBuffer->cbSize = sizeof(*pBuffer);
SP_DEVINFO_DATA DeviceInfoData;
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA) ;
nStatus = SetupDiGetDeviceInterfaceDetail(hdevClassInfo, &DeviceInterfaceData, pBuffer, RequiredSize, &RequiredSize, &DeviceInfoData)
把USB库换成ESP32S3