Multipro

S

snowbert

ik heb hier een server draaien op sme linux.
daar wil ik nu een Multipro RS232 serial op aansluiten.(cardpro)
maar hij start staandaard op op 3.57mhz maar ik wil hem staandaard op 6.00mhz wie heeft goei raad

met vriendenlijke groet snowman
 
Phoe, goede vraag. Is dat onder windows mogelijk met een stukje software? Zoja, dan zul je er ook software voor nodig hebben voor onder linux.
 
Tja dat weet ik ook niet,, onder windows kan je inderdaad cardpro even opstarten en dan handmatig veranderen naar 6.00 en weer afsluiten en dan blijft die standaard op 6 Mhz staan als je die gekozen hebt.
 
Is het dan niet mogelijk hem even aan een windows machine te hangen, zo op 6mhz te zetten en dan weer aan de linuxmachine te koppelen? Of springt ie automatisch weer naar 3,57mhz als de stroom of serieel eraf is geweest?
 
kun je niks met het cardpro prg voor windows en die opstarten op je linux server met behulp van WINE ?
 
ik heb zelf een server lopen (newcamd) met een multipro geen enkele probleem
ik heb in het begin ook behoorlijk geknoeid
zorg dat je firewall uit staat.

Vago
 
Is eigelijk niet zo moeilijk; documentantie is voor handen:

http://www.duwgati.com/archive/CardPro_MultiPro/Technote.pdf

dus heb gauw een programma in elkaar geflanst:

Code:
#include <sys/ioctl.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> 

/* we need a termios structure to clear the HUPCL bit */
struct termios tio;

//original api code (delphi, jikes!)
/*  procedure SendInstruction(Command,SubCommand:Byte);
var Str:string;
I:integer;
Ch,Chksm:Char;
begin
Str:='';
//Start with 10 times Chr(21)
for I:=1 to 10 do Str:=Str+Chr(21);
//Select the Command
Str:=Str+Chr(Command);
//Select the Sub-Command
Str:=Str + Chr(SubCommand);
//Begin checksum is 0
Chksm:=#$00;
//Calculate the checksum of the instruction string
For I:=1 to Length(Str) do
Chksm:=Chr(CheckSum(Ord(Chksm),Ord(Str[I])));
Str:=Str+Chksm;
//Open the comport and set the RTS and DTR line in high state
Form1.Comport1.Open;
Form1.Comport1.SetRTS(True);
Form1.ComPort1.SetDTR(True);
//Send the instruction string
For I:=1 to Length(Str) do
begin
Ch:=Str[I];
delay(5);
Form1.Comport1.Write(Ch,1,True);
end;
//close the com-port
Form1.Comport1.Close;
end;
*/

int main(int argc, char *argv[])
{
  int fd;
  int status;
  int i;
  unsigned char chksum, prev, result;
  unsigned char string[13];
  char mode;

  if ( (argc != 3) || ( atoi(argv[2]) < 0) || (atoi(argv[2]) > 7) )
  {
    printf("Usage: multipro port mode\n");
    printf("Usage: multipro /dev/ttyS0|/dev/ttyS1 0|1|2|3|4|5|6|7\n");
    printf("00 Idle mode, Programmer in idle state --> No power on smartcard\n");
    printf("01 Phoenix 3.57MHz\n");
    printf("02 Phoenix 6.00MHz\n");
    printf("03 Smartmouse 3.57MHz\n");
    printf("04 Smartmouse 6.00MHz\n");
    printf("05 PonyProg 3.57MHz (Default)\n");
    printf("06 PonyProg 6.00MHz\n");
    printf("07 JDM emulation\n");
    exit( 1 );
  }

  if ((fd = open(argv[1],O_RDWR)) < 0)
  {
    printf("Couldn't open %s\n",argv[1]);
    exit(1);
  }
  tcgetattr(fd, &tio);          /* get the termio information */
  tio.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
  tio.c_cflag &= ~HUPCL;        /* clear the HUPCL bit */
  tcsetattr(fd, TCSANOW, &tio); /* set the termio information */

  ioctl(fd, TIOCMGET, &status); /* get the serial port status */

  /* start with 10x '21' */
  for(i = 0; i < 10; i++) {
	string[i] = 21;
  }
  /* put the command in (00) */
  string[10] = 0;
  /* put the sub-command in (04) */
  string[11] = atoi(argv[2]);
  /* calculate checksum over the data */
  chksum = 0;
  printf("Calculating checksum...\n");
  for(i = 0; i < 12; i++) {
  	result = chksum ^ string[i];
	if((result & 128) == 128)
		result <<= 1;
        else
		result = (result << 1) + 1;
	chksum = result;
  }
  /* put checksum in the string */
  string[12] = chksum;

  /* check the string */
  printf("Characters to send\n");
  for(i = 0; i < 13; i++) {
  	printf("%02x ", (unsigned char) string[i]);
  }
  printf("\n");

  /* set DTR & RTS */
  status |= TIOCM_DTR;
  status |= TIOCM_RTS;

  ioctl(fd, TIOCMSET, &status); /* set the serial port status */
  result = 0;
  /* write command */
  for(i = 0; i < 13; i++) {
  	result += write(fd, &string[i], 1);
        usleep(5000);
  }
  if (result < 0)
  {
    fputs("write failed\n", stderr);
    close(fd);
    exit(1);
  }
  printf("%d bytes written\n", result);
  close(fd);                    /* close the device file */
}

wel even gcc op je linux bak installeren, en dit in een .c file gooien. Dan aanroepen met gcc "bestandsnaam" -o "doelnaam".
en dan doel bestand uitvoeren. Dus na 9 jaar eindelijk antwoord (had hem nodig voor en camserver).
 
Dus na 9 jaar eindelijk antwoord (had hem nodig voor en camserver).
En in die tijd zeker het tellen verleerd, want bij mij is van december 2006 tot januari 2011 net iets meer dan 4 jaar en geen 9 jaar.:biggrin:

Maar toch bedankt voor het plaatsen van dit mooi stukje werk.
 
Black Tiger;213308 zei:
En in die tijd zeker het tellen verleerd, want bij mij is van december 2006 tot januari 2011 net iets meer dan 4 jaar en geen 9 jaar.:biggrin:

Maar toch bedankt voor het plaatsen van dit mooi stukje werk.

Aha, idd niet goed gekeken, ik dacht dat de vraag dateerde van 2002. Anyhow, er zit nog een klein bugje in de app, hij werkt nu alleen als van te voren newcs al een keer heeft proberen te communiceren met de multipro. Ga ik nog wel even fixen.
Misschien kan ik dit beknopte stukje coden committen bij oscam of zo.
 
theeuwke;213352 zei:
Anyhow, er zit nog een klein bugje in de app, hij werkt nu alleen als van te voren newcs al een keer heeft proberen te communiceren met de multipro. Ga ik nog wel even fixen.
Misschien kan ik dit beknopte stukje coden committen bij oscam of zo.

Theewke, ik zou het top vinden als je het foutje er nog uitkrijgt en het progje opnieuw zou posten. Ik gebruik nu cardpro in Wine om de multipro op 6MHz te krijgen. Dit valt alleen niet te scripten naar een start/stop script. Dus nogmaals top als je deze nog kan oplossen
 
helaas probleem er niet uit gekregen. Vervolgens een script gemaakt die het progje killed, opnieuw start en newcs start. Dan werkt het wel...
 
Probleem gevonden; het lag aan de usb naar serieel converter. Kortom helemaal geen bug, maar probleempje in de kabel. Bij werkt het nu perfect icm freetz (custom fritzbox firmware) en oscam. Dus mooie energiebesparende cardserver voor m'n mediacenter
 
Kijk da's mooi om te horen, gelukkig dat het gefixed is en bedankt voor het mededelen van de oplossing!
 



Hosting Fun

Advertenties

Terug
Bovenaan Onderaan