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);
	
	
    }
}
Exemple #2
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);
}
Exemple #3
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);
}
Exemple #4
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;
}
Exemple #5
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;
}
Exemple #6
0
int RobbyClose(void)
{
  Output &= ~O_CLOSE;
  
  if( WriteSerial(Output) == -1)
    {
	return (-1);
    }
usleep(PAUSE);    
  if( ReadSerial(&Input) == -1)
    {
	return (-1);
    }
  return (0);
}
Exemple #7
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;
}    
Exemple #9
0
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;
}
Exemple #10
0
void Serial::processSerial()
{
    connect(SerialPort,SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError)));
    connect(SerialPort, SIGNAL(readyRead()),this,SLOT(ReadSerial()));
}
Exemple #11
0
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;
	
}
Exemple #12
0
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;
}
Exemple #13
0
//SCIF_SCFRDR2
u32 ReadSerialData()
{
	s32 rd=ReadSerial();
	return (u8)rd ;
}