命令CMD_ISSUE_TKN_X的第一個參數(shù)應(yīng)該填什么呢,牛人們幫忙看一下,非常感謝
第一個字節(jié)是同步標志: 同步標志的位 7 為主機端點的接收器的同步觸發(fā)標志, 位 6 為主機端點的發(fā)送器的同步觸發(fā)標志,位 5~位 0 必須為 0
第二個字節(jié)是事物屬性:事務(wù)屬性的低 4 位指定事務(wù)的令牌 PID,高 4 位指定 USB 設(shè)備的目的端點號。
這個我知道我的意思是如果我接收是不是就把第7位置1,發(fā)送就把位6置1,如果發(fā)送SETUP包我把位7和6置9還是1呢
成功接收到要翻轉(zhuǎn)位7,1->0或0->1。發(fā)送也是一樣的,翻轉(zhuǎn)的是位6。
發(fā)送SET包位6一定要為0 ,控制傳輸都是從DATA0包開始的。
我剛才按您說的這樣進行了發(fā)送,我前面獲取枚舉的已經(jīng)可以了,就是往打印機發(fā)送指令打印機老是沒反應(yīng),您看一下我的發(fā)送有什么問題嗎
void ch376_send_data(int len,char *buf)
{
char l,stuse,out;
out = 0x40;
while(len)
{
l = len > endp_out_size ? endp_out_size : len;
ch376_WR_HOST_DATA(l,buf);
stuse = ch376_ISSUE_TKN_X(out,endp_out_addr << 4 | DEF_USB_PID_OUT);
u3_printf("stuse = %x\r\n",stuse);
if(stuse == USB_INT_SUCCESS)
{
u3_printf("send is success");
out = (~out & 0x40);
len -= l;
buf += l;
delay_us(10);
}
}
}
我就簡單讓打印機做個進紙的動作,我的打印機是hp deskjet1000使用的是PCL3的指令協(xié)議,我寫的進紙的指令是 ? ? ?ESCE ? 復(fù)位
????????FF ? ? ?進紙
????????ESCE ? ?復(fù)位
我是把指令字符換成了十進制放到數(shù)組中發(fā)生到打印機的是{27,69,12,27,69};我不知道這樣可不可以。請您看到的時候幫我看一下,謝謝您了
?
out初始賦值不要放函數(shù)里。
u3_printf("stuse = %x\r\n",stuse);打印值是多少?
CH376一次發(fā)送最大包64字節(jié)。大數(shù)據(jù)包分段傳至于設(shè)備能不能識別,需要驗證。
?
謝謝您的解答
stuse的值是0x14,
ch376_ISSUE_TKN_X(out,endp_out_addr << 4 | DEF_USB_PID_OUT);
的返回值應(yīng)該也是對的,我每次才發(fā)送5個字節(jié)左右的指令,沒有大于64字節(jié),我感覺這些指令應(yīng)該發(fā)送帶打印機了,可能發(fā)送指令的格式有問題,您知道發(fā)送給打印機的格式是怎樣的嗎?