CCNET для CashCode
-
Гость
Драйвер для CashCode (CCNET) на Delphi. Пишу реализацию CCNet на Delphi. Работает, но сыро и много чего не учтено. Времени мало осталось, а чтоб полноценно доделать, ещё очень много надо дотестить и дописать. В инете искал драйвер - нашёл только платный. Если у кого есть реализация нормальная, залейте (можно на C).
CCNet CashCode пару команд
CCNet CashCode пару команд. Вопрос состоит вот в чем :
какая команда на CashCode опрашивает сколько и каких купюр он принял , и еще команда одна интерисует сбросить этот счетчик..
ПС: принимать купюры уже умею .
ПС:ПС:ком порт.. готов ответить на все ваши вопросы , по моему вопросу*)
какая команда на CashCode опрашивает сколько и каких купюр он принял , и еще команда одна интерисует сбросить этот счетчик..
ПС: принимать купюры уже умею .
ПС:ПС:ком порт.. готов ответить на все ваши вопросы , по моему вопросу*)
Sapog писал(а):Вопщем вопрос состоит вот в чем :
какая команда на CashCode опрашивает сколько и каких купюр он принял , и еще команда одна интерисует сбросить этот счетчик..
ПС: принимать купюры уже умею .
ПС:ПС:ком порт.. готов ответить на все ваши вопросы , по моему вопросу*)
:* Ага, а если есть удаленный доступ к ПО термика, так еще и каждый платеж отдельно посмотреть из каких купюр он состоял, не вставая со стула.
PAVEL78 писал(а):Sapog писал(а):Вопщем вопрос состоит вот в чем :
какая команда на CashCode опрашивает сколько и каких купюр он принял , и еще команда одна интерисует сбросить этот счетчик..
ПС: принимать купюры уже умею .
ПС:ПС:ком порт.. готов ответить на все ваши вопросы , по моему вопросу*)
:* Ага, а если есть удаленный доступ к ПО термика, так еще и каждый платеж отдельно посмотреть из каких купюр он состоял, не вставая со стула.
Клоун что ли?
-|
Я пишу ПО для терема, лень мне сейчас для демонстрации реализовывать полность протокол CCNEt.
(Херню спорол и ржет:~ )
-
Гость
Sapog писал(а):Вопщем вопрос состоит вот в чем :
какая команда на CashCode опрашивает сколько и каких купюр он принял , и еще команда одна интерисует сбросить этот счетчик..
ПС: принимать купюры уже умею .
ПС:ПС:ком порт.. готов ответить на все ваши вопросы , по моему вопросу*)
Я тоже сейчас пишу своё ПО для приема платежей, но пока дальше понятия, что нужно работать с COM-портом не продвинулся. |( Ты мог бы подсобить с исходником команд приема купюр? Разберусь в твоих исходниках, а там может и тебе чем-нибудь помогу. Одна голова хорошо, а две - лучше.
PAVEL78 писал(а)::* Ага, а если есть удаленный доступ к ПО термика, так еще и каждый платеж отдельно посмотреть из каких купюр он состоял, не вставая со стула.
угу, и такое есть.
а вы уважаемый слабы на голову.. если так откровенно дебилуете.
PS Ребят не обращайте на придурка внимание, раскапывайте дальше протокол
Земледелие и скотоводство были славянам хорошо известны, поэтому они ими не занимались.
Ребят укажите какой нибудь ресурс, куда выложить наброски кода(прием и разбор номинала купюр ) .Я здесь не так часто бываю, пишите urkanah@mail.ru.
Есть и наброски кода для работы с MEI кеш ином... Могу и с ним помоч, но тогда ребят наверное и от вас помощи жду. Пишу на java , само ПО для работы с Кеш ином будет кросс платформенным~) ... Пока только наброски , но купюры принимаем , номинал знаем , некоторые таблицы типа аудита тоже разбераем.*)
Есть и наброски кода для работы с MEI кеш ином... Могу и с ним помоч, но тогда ребят наверное и от вас помощи жду. Пишу на java , само ПО для работы с Кеш ином будет кросс платформенным~) ... Пока только наброски , но купюры принимаем , номинал знаем , некоторые таблицы типа аудита тоже разбераем.*)
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
public class StartPoll extends Thread{
//GeneralComPort port = new GeneralComPort();
Data data = new Data();
boolean quit = false;
//PortStreamWriter portW = new PortStreamWriter();
//PortStreamReader portR = new PortStreamReader();
ComPortStreamer comPortStreamer = new ComPortStreamer();
synchronized private void waiter(int timeOut)
{
try
{
this.wait(timeOut);
}
catch(InterruptedException IE)
{
IE.printStackTrace();
}
}
public void quit()
{
this.quit=true;
System.out.println("Begin stoping thread[StartPoll]");
}
private String parsedBytes(byte[] buff)
{
String str ="";
for(int i=0;i<=buff.length-1;i++)
{
str=str+buff[i]+".";
}
//System.out.println("Length = "+str.length());
return str;
}
public void run()
{
while(!quit)
{
byte[] buff = new byte[128];
buff=comPortStreamer.action(data.ConIdent, true, 100);
comPortStreamer.action(data.ConReACK, false, 0);
buff=comPortStreamer.action(data.ConStPoll, true, 100);
if(buff!=null)
{
if(buff[3]==19)
{
System.out.println("*Inicialization*");
}
if(buff[3]==25)
{
System.out.println("Wait for money");
byte[] buff2 = new byte[128];
buff2=comPortStreamer.action(data.ConEnBT, true,100);
this.waiter(10);
}
if(buff[3]==21)
{
System.out.println("**Accept**");
}
if(buff[3]==23)
{
System.out.println("**Stack**");
}
String str="";
for(int i=0;i<=buff.length-1;i++)
{
//System.out.print(Integer.reverseBytes(buff[i]));
if(buff[i]<0)
{
int itog = buff[i]+255;
str=str+itog;
}else
{
str=str+buff[i];
}
}
//System.out.println("");
/*for(int i=0;i<=buff.length-1;i++)
{
if(buff[i]==25)
{
System.out.println(i);
}
str=str+buff[i];
}*/
System.out.println(str);
boolean isDetected = false;
if(str.length()>=7)
{
if(str.substring(0,7).equals(data.nominal200))
{
System.out.println("200 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal500))
{
System.out.println("500 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal1000))
{
System.out.println("1000 tenge");
isDetected = true;
}
//System.out.println("Substring 1-7["+str.substring(1, 7)+"]");
//System.out.println("Substring 1-6["+str.substring(1, 6)+"]");
if(str.substring(0,7).equals(data.nominal2000))
{
System.out.println("2000 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal5000))
{
System.out.println("5000 tenge");
isDetected = true;
}
if(str.substring(0,7).equals("23728101"))
{
System.out.println("Biaka1");
isDetected = true;
}
if(str.substring(0,7).equals("23728108"))
{
System.out.println("biaka2");
isDetected = true;
}
if(str.substring(0,7).equals("23728100"))
{
System.out.println("biaka3");
isDetected = true;
}
}
}
/*portW.write("Ресет",data.ConReset);
this.waiter(10);
portW.write("Inicialization",data.ConIdent);
this.waiter(10);
portR.Read();
this.waiter(10);
while(!quit)
{
portW.write("ReACK",data.ConReACK);
this.waiter(10);
portW.write("StartPoll",data.ConStPoll);
this.waiter(10);
portR.Read();
this.waiter(10);
portW.write("Wait money",data.ConEnBT);
this.waiter(10);
portR.Read();
this.waiter(10);
}*/
}
System.out.println("thread [StartPoll]...stoped!");
}
}
/*private void portWriter(String text,byte[] data)
{
try
{
OutputStream out =port.port.getOutputStream();
out.write(data);
System.out.println(text+"->"+data);
out.close();
}
catch(IOException IOE)
{
IOE.printStackTrace();
}
}
private void portListener()
{
try
{
InputStream in = port.port.getInputStream();
int inBytes ;
String str="";
boolean isDetected = false;
while((inBytes=in.read())!=-1)
{
str=str+inBytes;
}
//System.out.println("str=["+str+"]");
/*byte[] buff = new byte[1024];
in.read(buff);
boolean isDetected = false;
String str = "";
for(int i=0;i<=buff.length;i++)
{
str=str+buff[i];
}
System.out.println("str=["+str+"]");*/
//hyuString str = Byte[].toString(buff);
/* if(str.length()>=7)
{
//String str = new String(buff).trim();
if(str.substring(0,7).equals(data.nominal200))
{
System.out.println("200 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal500))
{
System.out.println("500 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal1000))
{
System.out.println("1000 tenge");
isDetected = true;
}
//System.out.println("Substring 1-7["+str.substring(1, 7)+"]");
//System.out.println("Substring 1-6["+str.substring(1, 6)+"]");
if(str.substring(0,7).equals(data.nominal2000))
{
System.out.println("2000 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal5000))
{
System.out.println("5000 tenge");
isDetected = true;
}
if(str.substring(0,7).equals("23728101"))
{
System.out.println("Biaka1");
isDetected = true;
}
if(str.substring(0,7).equals("23728108"))
{
System.out.println("biaka2");
isDetected = true;
}
if(str.substring(0,7).equals("23728100"))
{
System.out.println("biaka3");
isDetected = true;
}
}
if(!isDetected)
{
System.out.println(str);
isDetected = false;
}
/* int inBytes;
char symvol;
while((inBytes=in.read())!=-1)
{
System.out.print(inBytes);
}*/
/*in.close();
// buff=null;
}catch(IOException IOE)
{
IOE.printStackTrace();
}
}*/
/*public void startPoll()
{
try
{
OutputStream out=port.port.getOutputStream();
System.out.println("->"+data.ConReset);
out.write(data.ConReset);
out.close();
InputStream in = port.port.getInputStream();
int inBytes;
int[] b = new int[64];
System.out.println("");
System.out.print("<-");
// int i =0;
byte[] buff = new byte[128];
in.read(buff);
/*while((inBytes=in.read())!=-1)
{
b[i]=inBytes;
i++;
//System.out.print(inBytes);
}*/
/*System.out.println(new String(buff).trim());
in.close();
//out.close();
/*for(int i=0;i<=data.ConStPoll.length;i++)
{
out.write(data.ConStPoll[i]);
}
out.close();*/
/*}
catch(IOException IOE)
{
IOE.printStackTrace();
}
}*/
import java.io.IOException;
import java.io.InputStream;
public class StartPoll extends Thread{
//GeneralComPort port = new GeneralComPort();
Data data = new Data();
boolean quit = false;
//PortStreamWriter portW = new PortStreamWriter();
//PortStreamReader portR = new PortStreamReader();
ComPortStreamer comPortStreamer = new ComPortStreamer();
synchronized private void waiter(int timeOut)
{
try
{
this.wait(timeOut);
}
catch(InterruptedException IE)
{
IE.printStackTrace();
}
}
public void quit()
{
this.quit=true;
System.out.println("Begin stoping thread[StartPoll]");
}
private String parsedBytes(byte[] buff)
{
String str ="";
for(int i=0;i<=buff.length-1;i++)
{
str=str+buff[i]+".";
}
//System.out.println("Length = "+str.length());
return str;
}
public void run()
{
while(!quit)
{
byte[] buff = new byte[128];
buff=comPortStreamer.action(data.ConIdent, true, 100);
comPortStreamer.action(data.ConReACK, false, 0);
buff=comPortStreamer.action(data.ConStPoll, true, 100);
if(buff!=null)
{
if(buff[3]==19)
{
System.out.println("*Inicialization*");
}
if(buff[3]==25)
{
System.out.println("Wait for money");
byte[] buff2 = new byte[128];
buff2=comPortStreamer.action(data.ConEnBT, true,100);
this.waiter(10);
}
if(buff[3]==21)
{
System.out.println("**Accept**");
}
if(buff[3]==23)
{
System.out.println("**Stack**");
}
String str="";
for(int i=0;i<=buff.length-1;i++)
{
//System.out.print(Integer.reverseBytes(buff[i]));
if(buff[i]<0)
{
int itog = buff[i]+255;
str=str+itog;
}else
{
str=str+buff[i];
}
}
//System.out.println("");
/*for(int i=0;i<=buff.length-1;i++)
{
if(buff[i]==25)
{
System.out.println(i);
}
str=str+buff[i];
}*/
System.out.println(str);
boolean isDetected = false;
if(str.length()>=7)
{
if(str.substring(0,7).equals(data.nominal200))
{
System.out.println("200 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal500))
{
System.out.println("500 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal1000))
{
System.out.println("1000 tenge");
isDetected = true;
}
//System.out.println("Substring 1-7["+str.substring(1, 7)+"]");
//System.out.println("Substring 1-6["+str.substring(1, 6)+"]");
if(str.substring(0,7).equals(data.nominal2000))
{
System.out.println("2000 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal5000))
{
System.out.println("5000 tenge");
isDetected = true;
}
if(str.substring(0,7).equals("23728101"))
{
System.out.println("Biaka1");
isDetected = true;
}
if(str.substring(0,7).equals("23728108"))
{
System.out.println("biaka2");
isDetected = true;
}
if(str.substring(0,7).equals("23728100"))
{
System.out.println("biaka3");
isDetected = true;
}
}
}
/*portW.write("Ресет",data.ConReset);
this.waiter(10);
portW.write("Inicialization",data.ConIdent);
this.waiter(10);
portR.Read();
this.waiter(10);
while(!quit)
{
portW.write("ReACK",data.ConReACK);
this.waiter(10);
portW.write("StartPoll",data.ConStPoll);
this.waiter(10);
portR.Read();
this.waiter(10);
portW.write("Wait money",data.ConEnBT);
this.waiter(10);
portR.Read();
this.waiter(10);
}*/
}
System.out.println("thread [StartPoll]...stoped!");
}
}
/*private void portWriter(String text,byte[] data)
{
try
{
OutputStream out =port.port.getOutputStream();
out.write(data);
System.out.println(text+"->"+data);
out.close();
}
catch(IOException IOE)
{
IOE.printStackTrace();
}
}
private void portListener()
{
try
{
InputStream in = port.port.getInputStream();
int inBytes ;
String str="";
boolean isDetected = false;
while((inBytes=in.read())!=-1)
{
str=str+inBytes;
}
//System.out.println("str=["+str+"]");
/*byte[] buff = new byte[1024];
in.read(buff);
boolean isDetected = false;
String str = "";
for(int i=0;i<=buff.length;i++)
{
str=str+buff[i];
}
System.out.println("str=["+str+"]");*/
//hyuString str = Byte[].toString(buff);
/* if(str.length()>=7)
{
//String str = new String(buff).trim();
if(str.substring(0,7).equals(data.nominal200))
{
System.out.println("200 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal500))
{
System.out.println("500 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal1000))
{
System.out.println("1000 tenge");
isDetected = true;
}
//System.out.println("Substring 1-7["+str.substring(1, 7)+"]");
//System.out.println("Substring 1-6["+str.substring(1, 6)+"]");
if(str.substring(0,7).equals(data.nominal2000))
{
System.out.println("2000 tenge");
isDetected = true;
}
if(str.substring(0,7).equals(data.nominal5000))
{
System.out.println("5000 tenge");
isDetected = true;
}
if(str.substring(0,7).equals("23728101"))
{
System.out.println("Biaka1");
isDetected = true;
}
if(str.substring(0,7).equals("23728108"))
{
System.out.println("biaka2");
isDetected = true;
}
if(str.substring(0,7).equals("23728100"))
{
System.out.println("biaka3");
isDetected = true;
}
}
if(!isDetected)
{
System.out.println(str);
isDetected = false;
}
/* int inBytes;
char symvol;
while((inBytes=in.read())!=-1)
{
System.out.print(inBytes);
}*/
/*in.close();
// buff=null;
}catch(IOException IOE)
{
IOE.printStackTrace();
}
}*/
/*public void startPoll()
{
try
{
OutputStream out=port.port.getOutputStream();
System.out.println("->"+data.ConReset);
out.write(data.ConReset);
out.close();
InputStream in = port.port.getInputStream();
int inBytes;
int[] b = new int[64];
System.out.println("");
System.out.print("<-");
// int i =0;
byte[] buff = new byte[128];
in.read(buff);
/*while((inBytes=in.read())!=-1)
{
b[i]=inBytes;
i++;
//System.out.print(inBytes);
}*/
/*System.out.println(new String(buff).trim());
in.close();
//out.close();
/*for(int i=0;i<=data.ConStPoll.length;i++)
{
out.write(data.ConStPoll[i]);
}
out.close();*/
/*}
catch(IOException IOE)
{
IOE.printStackTrace();
}
}*/
public class Data
{
public static final byte[] ConReACK = {(byte)0x02,(byte)0x03,(byte)06,(byte)0x00,(byte)0xc2,(byte)0x82};
public static final byte[] ConReset ={(byte)0x02,(byte)0x03,(byte)0x06,(byte)0x30,(byte)0x41,(byte)0xB3};
public static final byte[] ConGetSt ={0x02,0x03,0x06,0x31,(byte)0xC8,(byte)0xA2};
public static final byte[] ConStPoll ={0x02,0x03,0x06,0x33,(byte)0xDA,(byte)0x81};
public static final byte[] ConIdent ={0x02,0x03,0x06,0x37,(byte)0xFE,(byte)0xC7};
public static final byte[] ConGetBT = {0x02,0x03,0x06,0x41,0x4F,(byte)0xD1};
public static final byte[] ConStack = {0x02,0x03,0x06,0x35,(byte)0xEC,(byte)0xE4};
public static final byte[] ConReturn = {0x02,0x03,0x06,0x36,0x77,(byte)0xD6};
public static final byte[] ConHold = {0x02,0x03,0x06,0x38,0x09,0x3F};
public static final byte[] ConExtBD = {0x02,0x03,0x06,0x3A,0x1B,0x1C};
public static final byte[] ConReqSt = {0x02,0x03,0x06,0x60,(byte)0xC4,(byte)0xE1};
public static final byte[] ConEnBT = {0x02,0x03,0x0C,0x34,(byte)0xFF,(byte)0xFF,(byte)0xFF,0x00,0x00,0x00,(byte)0xB5,(byte)0xC1};
public static final byte[] ConDiBT = {0x02,0x03,0x0C,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x0C};
public static final String nominal200="237121";
public static final String nominal500="2371282";
public static final String nominal1000="2371283";
public static final String nominal2000="2371284";
public static final String nominal5000="2371285";
public static final String Bad1 = "23728101";
public static final String Bad2 = "23728108";
public static final String Bad3 = "23728100";
}
{
public static final byte[] ConReACK = {(byte)0x02,(byte)0x03,(byte)06,(byte)0x00,(byte)0xc2,(byte)0x82};
public static final byte[] ConReset ={(byte)0x02,(byte)0x03,(byte)0x06,(byte)0x30,(byte)0x41,(byte)0xB3};
public static final byte[] ConGetSt ={0x02,0x03,0x06,0x31,(byte)0xC8,(byte)0xA2};
public static final byte[] ConStPoll ={0x02,0x03,0x06,0x33,(byte)0xDA,(byte)0x81};
public static final byte[] ConIdent ={0x02,0x03,0x06,0x37,(byte)0xFE,(byte)0xC7};
public static final byte[] ConGetBT = {0x02,0x03,0x06,0x41,0x4F,(byte)0xD1};
public static final byte[] ConStack = {0x02,0x03,0x06,0x35,(byte)0xEC,(byte)0xE4};
public static final byte[] ConReturn = {0x02,0x03,0x06,0x36,0x77,(byte)0xD6};
public static final byte[] ConHold = {0x02,0x03,0x06,0x38,0x09,0x3F};
public static final byte[] ConExtBD = {0x02,0x03,0x06,0x3A,0x1B,0x1C};
public static final byte[] ConReqSt = {0x02,0x03,0x06,0x60,(byte)0xC4,(byte)0xE1};
public static final byte[] ConEnBT = {0x02,0x03,0x0C,0x34,(byte)0xFF,(byte)0xFF,(byte)0xFF,0x00,0x00,0x00,(byte)0xB5,(byte)0xC1};
public static final byte[] ConDiBT = {0x02,0x03,0x0C,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x0C};
public static final String nominal200="237121";
public static final String nominal500="2371282";
public static final String nominal1000="2371283";
public static final String nominal2000="2371284";
public static final String nominal5000="2371285";
public static final String Bad1 = "23728101";
public static final String Bad2 = "23728108";
public static final String Bad3 = "23728100";
}
Sapog писал(а):Ребят укажите какой нибудь ресурс, куда выложить наброски кода(прием и разбор номинала купюр )
В файловый архив можно выкладывать - http://kiosknews.ru/forums/index.php?au ... =downloads
Думаешь, я - в беде? Я и есть беда.
Sapog писал(а):Вопщем вопрос состоит вот в чем :
какая команда на CashCode опрашивает сколько и каких купюр он принял , и еще команда одна интерисует сбросить этот счетчик..
ПС: принимать купюры уже умею .
ПС:ПС:ком порт.. готов ответить на все ваши вопросы , по моему вопросу*)
В инете пошарься. Сомневаюсь, что здесь кто-нить подскажет. Народ жадный
- Вложения
-
- ccnetd1v2_4_3.pdf
- (1.04 МБ) 500 скачиваний
Каждый человек имеет право в любом месте громко заявить о своих правах. И быстро убежать на всякий случай.
Я заинтерисован найти в Алмате и не только людей занимающихся разработкой ПО под железки, для обмена готовыми набросками и тд, для помощи друг другу. Есть что пишите на urkanah@mail.ru.~)
Sapog, на фига разрабатывать свое ПО, да еще и в одно лицо? Мне кажется, что ты даже не представляешь сложности. Это не просто интерфейс, который может работать с купом. И не будет у тебя легкореализуемой кроссплатформенности. Хочешь прославиться, то напиши opensource ПО под Линукс, которое будет работать напрямую с тремя крупнейшими ПС, и поддерживать хотя бы половину оборудования.
Linux в массы!
sergkhar писал(а):Sapog, на фига разрабатывать свое ПО, да еще и в одно лицо? Мне кажется, что ты даже не представляешь сложности. Это не просто интерфейс, который может работать с купом. И не будет у тебя легкореализуемой кроссплатформенности. Хочешь прославиться, то напиши opensource ПО под Линукс, которое будет работать напрямую с тремя крупнейшими ПС, и поддерживать хотя бы половину оборудования.
А кто сказал про одиночку?~) Есть задача разработать ПО я и еще десяток людей выполняют эту задачу, а зачем , я не знаю.. А Open Source-никогда:
1)-Безопасность.
2)-Не я хозяин этой реализации.
Просто по некоторым вещам можно с людьми объединиться, и вместе мы качественней и в более короткий срок сделаем продукт.~)
-
Гость
-
Гость
Реализовал "драйвер" для купюроприемника CashCode по протоколу CCNET, среда разработки Delphi 2009. Исходники и демка во вложении.
- Вложения
-
- CCode_02.rar
- (339.52 КБ) 2835 скачиваний
-
- demo.JPG (43.66 КБ) 21796 просмотров
-
- CCode.rar
- (334.74 КБ) 2823 скачивания
Вернуться в «Купюроприемники CashCode и CashCode GX»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость
