1
我目前正試圖將POS系統與Artema混合CC手持設備集成。我想知道是否有其他人已經在這個或類似的工作。Artema與Linux上的C++混合通信
我可以從設備讀取數據,也就是我收到ENQ,並在線程中發回一個ACK,並保持打開以進行讀/寫操作,但是我試圖從中寫入的所有內容都不做任何事情。
這裏是該函數寫數據的代碼:
void PayLife::sendPayLifeData(QString data) {
int len = data.length();
int i = 0;
char lrc = 0;
char stx = 0x02;
char etx = 0x03;
char ack = 0x06;
char * bytes;
int ret;
char buffer[132];
bytes = (char *) malloc(sizeof(char) * len + 10);
strcpy(bytes,data.toLatin1().data());
qDebug() << "PayLife Sending data: " << data << " of len " << QString::number(len) <<
" " << " Bytes is: " << bytes ;
while (i < len) {
lrc ^= bytes[i];
i++;
}
/* sprintf(buffer,"%c%c%s%c%c",ack,stx,bytes,etx,lrc);
for (i = 0; i < strlen(buffer); i++) {
printf("c: %X ", buffer[i]);
}
printf(" [[ %s ]] \n", buffer); */
qDebug() << "Starting";
write(this->descriptor,&ack,1);
usleep(100000);
write(this->descriptor,&stx,1);
usleep(100000);
ret = write(this->descriptor,bytes,132);
usleep(100000);
write(this->descriptor,&etx,1);
usleep(100000);
write(this->descriptor,&lrc,1);
qDebug() << "Done";
free(bytes);
}
數據的說法是:E11U000008507000099VZ000000
當然,文檔有德語,我不說話,所以這是我所得到的。我已經基本上有1個月來實現這一點,然後我必須讓設備回來。
如果任何人有任何指針,或一些示例代碼將是非常棒的。
/傑森
這或多或少都是我想到的。是的,因爲它證明了ETX必須在LRC中,所以我很高興地說它目前在Linux中工作,但我不想讓它在Windows上工作,所以這個QSerialPort可能是答案,所以謝謝! –