void main(void) { OSCTUNEbits.PLLEN = 1; LCDInit(); LCDClear(); InitPins(); ConfigPeriph(); ConfigInterrupts(); while (1) { received = ReadSerial(); LCDClear(); switch(received) { case 'a': received2 = ReadSerial(); sprintf(output,"Received char:%c",received2); /* * FIXME : PIC18 doesn't transmit back to RPi * python script hangs on serial.read(1) * Same behavior with cat -A /dev/ttyACM0 * * * _delay(2); // 2 cycle delay *while(!PIR1bits.TX1IF); *sprintf(output,"TRANSMIT"); *LCDWriteLine(output,0); *TXREG1=received2; * */ break ; case 'b': potentiometer = ReadPot(); sprintf(output,"Pot value: %d", potentiometer); LATD =~ LATD; break; case 'c': received2=ReadSerial(); sprintf(output,"Set LED to 0x%X",received2); LATD = received2; break; default: sprintf(output, ">>UNKNOWN %c",received); break; } LCDWriteLine(output,0); } }
int RobbyUp(void) { Output &= ~O_DOWN; // if UP then !DOWN Output |= O_UP; while(1) { if( WriteSerial(Output) == -1) { return (-1); } usleep(PAUSE); if( ReadSerial(&Input) == -1) { return (-1); } if((~Input & I_UP) == I_UP) { Output &= ~O_UP; if( WriteSerial(Output) == -1) { return (-1); } break; } else { usleep(50); } } return (0); }
int RobbyRight(void) { Output &= ~O_LEFT; Output |= O_RIGHT; while(1) { if( WriteSerial(Output) == -1) { return (-1); } usleep(PAUSE); if( ReadSerial(&Input) == -1) { return (-1); } if((~Input & I_RIGHT) == I_RIGHT) { usleep(140000); // permet de continuer le mouvement pour atteindre la butée mécanique Output &= ~O_RIGHT; if( WriteSerial(Output) == -1) { return (-1); } break; } else { usleep(50); } } return (0); }
int CNewCardThread::DoInit() { int ret = -1; BYTE ucCardNo[5] = ""; BYTE max_cardno[5] = {0xFE, 0xFF, 0xFF, 0xFF, 0x00}; char stuemp_no[21] = ""; SMT_SleepCard(); // ¶ÁÈ¡ÊÚȨ¿¨ ret = ReadSerial(ucCardNo); if (ret < 0) { Sleep(1000); return 0; } if (_mbsncmp(ucCardNo, max_cardno, sizeof(ucCardNo) - 1) == 0) { Sleep(1000); return 0; } ((CReadCardInfoDlg*)m_pMainWnd)->SimulateKeyPress(ucCardNo); Sleep(1000); return 0; }
int CALLAPI TA_FastGetCardNo(unsigned int *CardNo) { TEST_COM_OPEN; int ret; unsigned char serial_no[8]; ret = ReadSerial(serial_no); if(ret) return ERR_TA_READCARD; ret = do_convert_card_phyno(serial_no,CardNo); if(ret) return ERR_TA_READCARD; return ERR_OK; }
int RobbyClose(void) { Output &= ~O_CLOSE; if( WriteSerial(Output) == -1) { return (-1); } usleep(PAUSE); if( ReadSerial(&Input) == -1) { return (-1); } return (0); }
int RobbyOpen(void) { Output |= O_OPEN; if( WriteSerial(Output) == -1) { return (-1); } usleep(PAUSE); if( ReadSerial(&Input) == -1) { return (-1); } return (0); }
bool GetData(const unsigned char type, const int id, float *val1, float *val2, float *val3) { bool read_flag = true; unsigned char szPtr[128]; unsigned char data[128]; int i = 0; memset(szPtr, 0, sizeof(szPtr)); memset(data, 0, sizeof(data)); // First we need to send out the request for the robot to send its // data: szPtr[0] = type; szPtr[1] = (id+0x30); szPtr[2] = 0xFF-((type+id+0x30) & 0xFF); write(fd, szPtr, SHORT_PACKET_SIZE); fsync(fd); ROS_INFO("Sending request string to Robot %d:", id); for(i = 0; i < SHORT_PACKET_SIZE; i++) printf("%02X ",szPtr[i]); printf("\n"); // Now, we need to get the data sent back: if(ReadSerial(data)) { // Good read! Let's check validity: if(DataChecker(type, data)) { read_flag = false; // If it is good data, let's interpret it: *val1 = InterpNumber(&data[2]); *val2 = InterpNumber(&data[5]); *val3 = InterpNumber(&data[8]); return read_flag; } else ROS_WARN("Full string received, but not valid"); } else ROS_WARN("Not enough data received"); // Then let's estimate the data: *val1 = 0.0; *val2 = 0.0; *val3 = 0.0; return read_flag; }
static int SerparRead(DriverCall *dc, bool block) { static unsigned char readbuf[MAXREADSIZE]; static int rbindex = 0; int nread; int read_errno; int c = 0; re_status restatus; int ret_code = -1; /* assume bad packet or error */ /* * we must not overflow buffer, and must start after * the existing data */ #ifdef COMPILING_ON_WINDOWS { BOOL dummy = FALSE; nread = BytesInRXBufferSerial(); if (nread > MAXREADSIZE - rbindex) nread = MAXREADSIZE - rbindex; read_errno = ReadSerial(readbuf+rbindex, nread, &dummy); if (pfnProgressCallback != NULL && read_errno == COM_OK) { progressInfo.nRead += nread; (*pfnProgressCallback)(&progressInfo); } } #else nread = Unix_ReadSerial(readbuf+rbindex, MAXREADSIZE-rbindex, block); read_errno = errno; #endif if ((nread > 0) || (rbindex > 0)) { #ifdef DO_TRACE printf("[%d@%d] ", nread, rbindex); #endif if (nread > 0) rbindex = rbindex + nread; do { restatus = Angel_RxEngine(readbuf[c], &(dc->dc_packet), &rxstate); #ifdef DO_TRACE printf("<%02X ",readbuf[c]); #endif c++; } while (c < rbindex && ((restatus == RS_IN_PKT) || (restatus == RS_WAIT_PKT))); #ifdef DO_TRACE printf("\n"); #endif switch(restatus) { case RS_GOOD_PKT: ret_code = 1; /* fall through to: */ case RS_BAD_PKT: /* * We now need to shuffle any left over data down to the * beginning of our private buffer ready to be used *for the next packet */ #ifdef DO_TRACE printf("SerparRead() processed %d, moving down %d\n", c, rbindex - c); #endif if (c != rbindex) memmove((char *) readbuf, (char *) (readbuf + c), rbindex - c); rbindex -= c; break; case RS_IN_PKT: case RS_WAIT_PKT: rbindex = 0; /* will have processed all we had */ ret_code = 0; break; default: #ifdef DEBUG printf("Bad re_status in SerparRead()\n"); #endif break; } } else if (nread == 0) /* nothing to read */ ret_code = 0; else if (read_errno == ERRNO_FOR_BLOCKED_IO) /* nread < 0 */ ret_code = 0; #ifdef DEBUG if ((nread < 0) && (read_errno != ERRNO_FOR_BLOCKED_IO)) perror("read() error in SerparRead()"); #endif return ret_code; }
void Serial::processSerial() { connect(SerialPort,SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError))); connect(SerialPort, SIGNAL(readyRead()),this,SLOT(ReadSerial())); }
int CALLAPI TA_Consume(CardConsume *pCardCons, bool IsVerfy, short TimeOut=10) { TEST_COM_OPEN; int ret,term_idx; int card_id; int trade_serial = 0; double trade_amt,out_amt; int trade_money,out_money; char now_date[9] = ""; char now_time[7] = ""; char last_trade_date[9] = ""; char card_serial_no[9] = ""; //AccountMsg acc; MONEY_PACK_INFO purse_info; TimeOut = (TimeOut > 0 && TimeOut < 30) ? TimeOut : 10; TimeOut *= 1000; if(pCardCons->TranAmt >= 0) { return ERR_TA_TRANAMT; } term_idx = do_find_dev_by_termno(pCardCons->TerminalNo); if(term_idx<0) { return ERR_TRN_STATION; } if((pCardCons->TranAmt*-1) >= g_devices.devices[term_idx].trade_limit_per_cnt) { if(strlen(pCardCons->PassWord) == 0) { return ERR_TA_EXCEED_QUOTA; } } if(pCardCons->TranJnl < g_devices.devices[term_idx].maxjnl) { return ERR_TA_PARA; } ret = ReadCardNO(&card_id); if(ret) { return ERR_TA_READCARD; } ret = ReadSerial((unsigned char*)card_serial_no); if(ret) { return ERR_TA_READCARD; } memset(&purse_info,0,sizeof purse_info); ret = SMT_GetPacketInfo(g_devices.devices[term_idx].purse_no,&purse_info); if(ret) { return ERR_TA_READCARD; } if(purse_info.bala + pCardCons->TranAmt < 0) { return ERR_TA_TRANAMT; } // 比较日期 do_get_date_time(now_date,now_time); sprintf(last_trade_date,"20%02d%02d%02d",purse_info.date/10000%100 ,purse_info.date/100%100,purse_info.date%100); if(strcmp(last_trade_date,now_date) == 0) { if(purse_info.daybala - pCardCons->TranAmt > g_devices.devices[term_idx].day_trade_limit) { if(strlen(pCardCons->PassWord) == 0) { return ERR_TA_EXCEED_QUOTA; } } } KS_YKT_Clt clt; // 请求交易 clt.SetIntFieldByName("lcert_code",827111); // 交易卡号 clt.SetIntFieldByName("lvol0",card_id); // 卡使用次数 clt.SetIntFieldByName("lvol1",purse_info.time_cnt); // 钱包号 clt.SetIntFieldByName("lvol2",g_devices.devices[term_idx].purse_no); // 子系统号 clt.SetIntFieldByName("lvol3",g_devices.devices[term_idx].sys_id); // 设备ID clt.SetIntFieldByName("lvol4",g_devices.devices[term_idx].device_id); // 终端流水号 clt.SetIntFieldByName("lvol5",pCardCons->TranJnl); // 入卡值 clt.SetDoubleFieldByName("damt0",purse_info.bala/100.0); // 交易金额 clt.SetDoubleFieldByName("damt1",(pCardCons->TranAmt * -1)/100.0); // 操作员 clt.SetStringFieldByName("scust_no",g_devices.devices[term_idx].oper_code); // 密码 clt.SetStringFieldByName("semp_pwd",pCardCons->PassWord); // 物理卡号 clt.SetStringFieldByName("sdate1",card_serial_no); // 交易日期 clt.SetStringFieldByName("sdate0",now_date); clt.SetStringFieldByName("stime0",now_time); // 摘要 clt.SetStringFieldByName("vsmess",pCardCons->Abstract); if(!clt.SendRequest(FUNC_CONSUME,TimeOut)) { ret = ERR_FAIL; } pCardCons->RetCode = clt.GetReturnCode(); if(ret) return ret; if(pCardCons->RetCode) return ERR_FAIL; if(clt.HasMoreRecord()) { clt.GetNextPackage(); clt.GetIntFieldByName("lvol0",&trade_serial); clt.GetDoubleFieldByName("damt0",&out_amt); clt.GetDoubleFieldByName("damt1",&trade_amt); out_money = (int)d4u5(out_amt*100.0); trade_money = (int)d4u5(trade_amt*100.0); int curr_card_id; ret = ReadCardNO(&curr_card_id); if(ret) return ERR_TA_READCARD; int retries = 3; while(retries-->0) { if(curr_card_id != card_id) return ERR_TA_NOT_SAMECARD; ret = SMT_PacketSetMoney(g_devices.devices[term_idx].purse_no,out_money); if(!ret) break; } if(ret) return ERR_TA_WRITECARD; clt.ResetHandler(); // 请求交易 clt.SetIntFieldByName("lcert_code",827111); // 交易卡号 clt.SetIntFieldByName("lvol0",card_id); // 卡使用次数 clt.SetIntFieldByName("lvol1",purse_info.time_cnt); // 钱包号 clt.SetIntFieldByName("lvol2",g_devices.devices[term_idx].purse_no); // 子系统号 clt.SetIntFieldByName("lvol3",g_devices.devices[term_idx].sys_id); // 设备ID clt.SetIntFieldByName("lvol4",g_devices.devices[term_idx].device_id); // 终端流水号 clt.SetIntFieldByName("lvol5",pCardCons->TranJnl); // 入卡值 clt.SetDoubleFieldByName("damt0",purse_info.bala/100.0); // 交易金额 clt.SetDoubleFieldByName("damt1",(pCardCons->TranAmt * -1)/100.0); // 操作员 clt.SetStringFieldByName("scust_no",g_devices.devices[term_idx].oper_code); // 密码 clt.SetStringFieldByName("semp_pwd",pCardCons->PassWord); // 后台流水号 clt.SetIntFieldByName("lvol6",trade_serial); if(clt.SendRequest(FUNC_CONSUME_CONFIRM)) { pCardCons->TranAmt = trade_money; return ERR_OK; } pCardCons->RetCode = clt.GetReturnCode(); } return ERR_FAIL; }
void SerialProc(void) { WORD numBytesRead; BYTE i; char buff[10]; char *buffPtr; BYTE *readPtr; char state; // 0:readed ',' 1:readed number BYTE exit; WORD byteOrWord; // 0:未設定 WORD pos; WORD v; WORD bpos; // check whether data is recieved from uart if (!DataRdyUSART()) return; bpos = 0; // read data from uart numBytesRead = ReadSerial(uartInBuffer, sizeof(uartInBuffer)); if (numBytesRead == 0 || numBytesRead == 0xFFFF) return; state = 0; buffPtr = buff; readPtr = uartInBuffer; pos = 0; byteOrWord = 0; exit = 0; loop: for(i=0;i<numBytesRead;i++) { if (readPtr[i]=='\r' || readPtr[i]=='\n'){ if (pos>0) { if (buffPtr==buff) { sprintf(uartOutBuffer, (far rom char*)"parse error. need number. [%d,%c]\r\n", bpos+i,readPtr[i]); PutsStringCPtr(uartOutBuffer); return; } *buffPtr++ = '\0'; v = atoi(buff); exit += WriteBuffer(v,&pos,&byteOrWord); buffPtr = buff; WriteEOF(pos); SendIRImpl(); PrintIRBuffer("echo,"); } return; } else if (state==0) { if(readPtr[i] != 'H' && readPtr[i] != 'L') { sprintf(uartOutBuffer, (far rom char*)"parse error. need 'H' or 'L'. [%d,%c]\r\n", bpos+i,readPtr[i]); PutsStringCPtr(uartOutBuffer); WriteEOF(pos); PrintIRBuffer("echo,"); return; } state = 1; } else if (state==1) { if (readPtr[i] == ',') { state = 0; if (buffPtr==buff) { sprintf(uartOutBuffer, (far rom char*)"parse error. need number. [%d,%c]\r\n", bpos+i,readPtr[i]); PutsStringCPtr(uartOutBuffer); WriteEOF(pos); PrintIRBuffer("echo,"); return; } *buffPtr++ = '\0'; v = atoi(buff); exit += WriteBuffer(v,&pos,&byteOrWord); buffPtr = buff; } else if ('0' <= readPtr[i] && readPtr[i] <= '9') { *buffPtr++ = readPtr[i]; } else { sprintf(uartOutBuffer, (far rom char*)"parse error. need ',' or number. [%d,%c]\r\n", bpos+i,readPtr[i]); PutsStringCPtr(uartOutBuffer); WriteEOF(pos); PrintIRBuffer("echo,"); return; } } } bpos += numBytesRead; numBytesRead = ReadSerial(uartInBuffer, sizeof(uartInBuffer)); if (numBytesRead == 0xFFFF) return; goto loop; }
//SCIF_SCFRDR2 u32 ReadSerialData() { s32 rd=ReadSerial(); return (u8)rd ; }