title
Products            Buy            Support Forum            Professional            About            Codec Central
 

Does anyone have a copy of an application call Flexware from Amtren

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • daring_t

    • Aug 2023
    • 5

    Does anyone have a copy of an application call Flexware from Amtren

    Hello all,

    I have been recently been trying to get my Amtren Elite Micro CD Duplicator to work and change it to rip instead of duplicate. I have tried scoring the Internet and on the Wayback Machine and can not find an application called Flexware to use the serial COMM port correctly. Does anyone still has a copy saved if so can the future Elite Micro users and myself have a copy? Also if you have any questions or thoughts please let me know.


    Thanks for reading,
    Daren
  • daring_t

    • Aug 2023
    • 5

    #2
    Re: Does anyone have a copy of an application call Flexware from Amtren

    Also if no one has heard of Flexware, does anyone one have the original software for the Amtren Elite Micro Automatic Duplicator like the application called (ACC) Autoloader Control Center. I need it to reverse engineer the Serial COM connection for a DVD Ripping Project I am working on.

    Thanks,
    Daren

    Comment

    • daring_t

      • Aug 2023
      • 5

      #3
      Re: Does anyone have a copy of an application call Flexware from Amtren

      If anyone needs it I was able to locate a copy of Flexware for the Elite Micro and Discus for the printer that some can come with it. Its uploaded to archive.org for anyone to download. https://archive.org/details/amtren-d...s-elite-series

      Comment

      • daring_t

        • Aug 2023
        • 5

        #4
        Re: Does anyone have a copy of an application call Flexware from Amtren

        Also here is the c source code for how to use the Amtren autoloader without using this old program. Save it to a file and run "gcc -o theoutputcompiledfilename.exe thecfilename.c

        ---------------------------------------------- For Windows --------------------------------------------------------------

        *include <stdio.h>
        *include <string.h>
        *include <windows.h>

        char* write_port(char *device_name, char *command, char *buf) {
        HANDLE hSerial;
        DCB dcbSerialParams = {0};
        COMMTIMEOUTS timeouts = {0};
        DWORD dwBytesWritten, dwBytesRead;

        hSerial = CreateFile(device_name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

        if (hSerial == INVALID_HANDLE_VALUE) {
        fprintf(stderr, "Unable to open %s\n", device_name);
        return NULL;
        }

        dcbSerialParams.DCBlength = sizeof(dcbSerialParams);

        if (!GetCommState(hSerial, &dcbSerialParams)) {
        fprintf(stderr, "Error getting serial port state\n");
        CloseHandle(hSerial);
        return NULL;
        }

        dcbSerialParams.BaudRate = CBR_9600;
        dcbSerialParams.ByteSize = 8;
        dcbSerialParams.StopBits = ONESTOPBIT;
        dcbSerialParams.Parity = NOPARITY;

        if (!SetCommState(hSerial, &dcbSerialParams)) {
        fprintf(stderr, "Error setting serial port state\n");
        CloseHandle(hSerial);
        return NULL;
        }

        timeouts.ReadIntervalTimeout = 50;
        timeouts.ReadTotalTimeoutConstant = 50;
        timeouts.ReadTotalTimeoutMultiplier = 10;
        timeouts.WriteTotalTimeoutConstant = 50;
        timeouts.WriteTotalTimeoutMultiplier = 10;

        if (!SetCommTimeouts(hSerial, &timeouts)) {
        fprintf(stderr, "Error setting timeouts\n");
        CloseHandle(hSerial);
        return NULL;
        }

        if (!WriteFile(hSerial, command, 1, &dwBytesWritten, NULL)) {
        fprintf(stderr, "WriteFile failed!\n");
        CloseHandle(hSerial);
        return NULL;
        }

        if (!ReadFile(hSerial, buf, 255, &dwBytesRead, NULL)) {
        fprintf(stderr, "ReadFile failed!\n");
        CloseHandle(hSerial);
        return NULL;
        }

        buf[dwBytesRead] = '\0';

        CloseHandle(hSerial);

        return buf;
        }

        void usage() {
        printf("serial_drive <device> <command>\n");
        printf("serial_drive COM1 [C|I|A|G|S|V]\n");

        printf("V: Signup or version(sometimes required as first command)");
        printf("C: Reset or Calibrate unit");
        printf("I: Input disc from bin to drive");
        printf("A: Accept disc from drive to output bin");
        printf("G: Get disc from drive and hold in picker(required before R and sometimes A)");
        printf("R: Move disc from picker to Reject bin");
        printf("S: Status of mechanism Trial and Error");
        printf("B: 'G'rab from Printer");
        printf("H: If 'G'rabbing, put in CD Tray");
        printf("P: Same as G");
        printf("K: Input stack -> Printer,");
        printf("If currently 'G'rabbing,");
        printf("it will move that to the input queue,");
        printf("drop it, and then move it to the printer.");
        printf("D: Down");
        printf("U: Up");
        printf("L: Load Printer");
        printf("M: Drop");
        printf("N: Get from Printer");
        printf("Q: Accept from Printer");
        printf("T: Test(input -> cd_tray, cd_tray -> accept_bin)");
        printf("W: some type of 3 number status");


        int main(int argc, char *argv[]) {
        char buf[255];

        if (argc != 3) {
        usage();
        return 1;
        }

        if (write_port(argv[1], argv[2], buf) != NULL) {
        printf("%s\n", buf);
        return 0;
        }

        return 1;
        }
        ------------------------------------------------------------------------------------------------------------


        ------------------------------------------ For Linux -------------------------------------------------------
        *include <stdio.h>
        *include <string.h> /* String function definitions */
        *include <unistd.h> /* UNIX standard function definitions */
        *include <fcntl.h> /* File control definitions */
        *include <errno.h> /* Error number definitions */
        *include <termios.h> /* POSIX terminal control definitions */
        *include <stdlib.h>

        char* write_port(char *device_name,char *command,char *buf) {
        struct termios config;
        unsigned short x;
        int fd, n, m, o;

        memset(buf, 255, sizeof(char));
        fd = open(device_name, O_RDWR | O_NOCTTY | O_NDELAY);
        if (fd == -1){
        fprintf(stderr,"open_port: Unable to open %s", device_name);
        printf("You may need to use sudo privilages");
        }else{
        if(!isatty(fd)){
        fprintf(stderr,"%s is not a tty\n",device_name);
        exit(-1);
        }
        if(tcgetattr(fd, &config) < 0) {
        fprintf(stderr,"unable to read config for %s\n",device_name);
        exit(-1);
        }
        config.c_iflag &= ~(IGNBRK | BRKINT | ICRNL | INLCR | PARMRK | INPCK | ISTRIP | IXON);
        config.c_oflag = 0;
        config.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN | ISIG);
        config.c_cflag &= ~(CSIZE | PARENB);
        config.c_cflag |= CS8; // 8n1
        config.c_cc[VMIN] = 1;
        config.c_cc[VTIME] = 0;
        if(cfsetispeed(&config, B9600) < 0 || cfsetospeed(&config, B9600) < 0) {
        fprintf(stderr,"unable to write config for %s\n",device_name);
        exit(-1);
        }
        if(tcsetattr(fd, TCSAFLUSH, &config) < 0) {
        fprintf(stderr,"unable to apply the config for %s\n",device_name);
        exit(-1);
        }
        fcntl(fd, F_SETFL, 0);
        o = write(fd, command, 1);
        if (o < 0) fputs("write() of 1 byte failed!\n", stderr);
        fcntl(fd, F_SETFL, 0);
        m=read(fd, buf,255);
        buf[m]=0;
        close(fd);

        }
        return(buf);
        }

        void usage(){
        printf("serial_drive <device> <command>\n");
        printf("serial_drive COM1 [C|I|A|G|S|V]\n\n");

        printf("V: Signup or version(sometimes required as first command)\n");
        printf("C: Reset or Calibrate unit\n");
        printf("I: Input disc from bin to drive\n");
        printf("A: Accept disc from drive to output bin\n");
        printf("G: Get disc from drive and hold in picker(required before R and sometimes A)\n");
        printf("R: Move disc from picker to Reject bin\n");
        printf("S: Status of mechanism Trial and Error\n");
        printf("B: 'G'rab from Printer\n");
        printf("H: If 'G'rabbing, put in CD Tray\n");
        printf("P: Same as G\n");
        printf("K: Input stack -> Printer,\n");
        printf("If currently 'G'rabbing,\n");
        printf("it will move that to the input queue,\n");
        printf("drop it, and then move it to the printer.\n");
        printf("D: Down\n");
        printf("U: Up\n");
        printf("L: Load Printer\n");
        printf("M: Drop\n");
        printf("N: Get from Printer\n");
        printf("Q: Accept from Printer\n");
        printf("T: Test(input -> cd_tray, cd_tray -> accept_bin)\n");
        printf("W: some type of 3 number status\n");
        }

        int main(int argc, char *argv[]){
        int count=0;
        char buf[255];
        if(argc < 3 || argc >3){
        usage();
        exit(1);
        }
        write_port(argv[1],argv[2],buf);
        printf("%s\n",buf);
        exit (0);
        }
        -----------------------------------------------------------------------------------------------------------

        Comment

        • Lavdert Toaner

          • May 2024
          • 1

          #5
          I understand your frustration. Unfortunately, I don't have a copy of Flexware. Have you tried contacting Amtren support for assistance? They might be able to help.

          Comment

          Working...

          ]]>