Jump to content

ESI Juli@ / Envy 24 with OSX86 - Any progress?


  • Please log in to reply
971 replies to this topic

#81
Bonkey

Bonkey

    InsanelyMac Protégé

  • Members
  • PipPip
  • 59 posts

The 2496 will be supported by my Envy24 driver.

Woohoo! It showed up in HalLab (an audio testing tool) and it actually played some kind of sound!! :)
It froze after that though with the sound looping, but that's quite 'normal' when developing an audio driver and running it for the first time.
Gonna try and fix it!

I'll keep you posted.


W00t, progress. i love it :)

Audiodriverwriter, i might have skipped the part about Envy24PT support, any news on that?

All the info i could find on this chipset: VIA Envy24PT w/ VIA VT1617A Codec, Wolfson WM8728 DAC - 8 Channel

#82
audiodriverwriter

audiodriverwriter

    InsanelyMac Sage

  • Members
  • PipPipPipPipPip
  • 318 posts

W00t, progress. i love it :D

Audiodriverwriter, i might have skipped the part about Envy24PT support, any news on that?

All the info i could find on this chipset: VIA Envy24PT w/ VIA VT1617A Codec, Wolfson WM8728 DAC - 8 Channel



The Envy24PT seems to have the same PCI device and vendor ID as the HT. That means that the driver will recognize it, but since the codecs are different, it will not work. I assume it's on a motherboard? In that case, I can not easily go out and buy one.

#83
ChromeBio

ChromeBio

    InsanelyMac Protégé

  • Members
  • Pip
  • 10 posts
Yeahooo, great!!! Progress in progress... :(
Can't wait until you did some first alpha, to try it!

#84
Bonkey

Bonkey

    InsanelyMac Protégé

  • Members
  • PipPip
  • 59 posts

The Envy24PT seems to have the same PCI device and vendor ID as the HT. That means that the driver will recognize it, but since the codecs are different, it will not work. I assume it's on a motherboard? In that case, I can not easily go out and buy one.


Yes, it's an onboard chipset. will give it a try if you can make a kext. thx for your help.

#85
audiodriverwriter

audiodriverwriter

    InsanelyMac Sage

  • Members
  • PipPipPipPipPip
  • 318 posts

Yes, it's an onboard chipset. will give it a try if you can make a kext. thx for your help.



You can try, but really, it won't work since there is no init code for the codecs.

#86
blink41

blink41

    InsanelyMac Protégé

  • Members
  • Pip
  • 37 posts
I was just thinking of something : will asio be supported with your driver ? If yes, it would be incredible !!!

#87
Pyroman

Pyroman

    InsanelyMac Protégé

  • Members
  • Pip
  • 20 posts

I was just thinking of something : will asio be supported with your driver ? If yes, it would be incredible !!!


ASIO is for windows, u mean CoreAudio?

#88
audiodriverwriter

audiodriverwriter

    InsanelyMac Sage

  • Members
  • PipPipPipPipPip
  • 318 posts

I was just thinking of something : will asio be supported with your driver ? If yes, it would be incredible !!!


No, this is a CoreAudio driver.

Notes on the progress (warning, can be a bit too technical!) :
I seem to be having problems writing to the 2nd base address of the PCI device. The first (BAR 0) is going perfectly fine, but for some strange reason, an ioWrite32() to BAR1 doesn't do a thing. There seem to be some values set in the BAR1 range, so it might be that ioWrite8() works, but ioWrite32() doesn't. I need to investigate that further.
Anyway, that's probably the only thing that blocks this thing from working yet.

I'll keep you posted.

#89
Funky frank

Funky frank

    InsanelyMac Sage

  • Members
  • PipPipPipPipPip
  • 326 posts
A coreaudio driver for Envy24 would be great!

#90
blink41

blink41

    InsanelyMac Protégé

  • Members
  • Pip
  • 37 posts
Thanks for your answer, i just searched a little and found that there's no coreaudio mentioned about the juli@... Will i be able to work with it like i do with asio on windows (i will use reaper, maybe logic when i got enough money)

#91
Pyroman

Pyroman

    InsanelyMac Protégé

  • Members
  • Pip
  • 20 posts

Thanks for your answer, i just searched a little and found that there's no coreaudio mentioned about the juli@... Will i be able to work with it like i do with asio on windows (i will use reaper, maybe logic when i got enough money)


U can use reaper with linux(official supported) tooo! For "try"! Logic its enought a simle motherboard like ALC888 or 889 blabla

#92
blink41

blink41

    InsanelyMac Protégé

  • Members
  • Pip
  • 37 posts
i got an alc888 integrated chipset, but juli@ is a little bit different, if you know what i mean ... :)

#93
Pyroman

Pyroman

    InsanelyMac Protégé

  • Members
  • Pip
  • 20 posts

i got an alc888 integrated chipset, but juli@ is a little bit different, if you know what i mean ... ^_^


"For "try"! Logic its enought",
so i mean just for TRY ES2

Anyway, if audriodriverwriter is finishd, we have the envy24 power for using full Logic

#94
audiodriverwriter

audiodriverwriter

    InsanelyMac Sage

  • Members
  • PipPipPipPipPip
  • 318 posts
Yeah, but audiodriverwriter is still a bit stuck! :rolleyes:

It seems that writing to BAR1 works now, but it still hangs at playback.
What I used to debug when writing drivers on other operating systems, was a serial cable between two computers. This way I could insert serial debug statements (synchronous) inside the interrupt handler. Now, nothing is written to the system log when using IOLog() in an interrupt handler (perhaps it's not even allowed!), even with the synchronous bit set in debug.iokit.
Anyone knows if a plain serial port (no USB!) works on these machines?

#95
ChromeBio

ChromeBio

    InsanelyMac Protégé

  • Members
  • Pip
  • 10 posts
man, you making really hard work... but I'm sorry that can't help you with develope... :(

#96
blink41

blink41

    InsanelyMac Protégé

  • Members
  • Pip
  • 37 posts
audiodriverwriter, i don't think our hackintoshes support serial ports, but i don't know well...

#97
Pyroman

Pyroman

    InsanelyMac Protégé

  • Members
  • Pip
  • 20 posts

Yeah, but audiodriverwriter is still a bit stuck! :D

It seems that writing to BAR1 works now, but it still hangs at playback.
What I used to debug when writing drivers on other operating systems, was a serial cable between two computers. This way I could insert serial debug statements (synchronous) inside the interrupt handler. Now, nothing is written to the system log when using IOLog() in an interrupt handler (perhaps it's not even allowed!), even with the synchronous bit set in debug.iokit.
Anyone knows if a plain serial port (no USB!) works on these machines?


I am not a developer, but maybe its help 4 u:

"
Well if you can connect to that device in Windows through Hyper Terminal, then u can use the "screen" command. After you find out the speed at which its COM port works, then you just need to find out the commands the windows app sends and manually type them after connecting to the board.

After you got all that working, then simply make a bunch of Apple scripts.

Example: My Router is connected to my comp using the COM1 port. I connect to it using either Hyperterminal or the Screen command in Mac. Its speed is set at 115200bps. It uses a linux kernel, so commands are not a problem. Heres what I do:

1) Open Terminal
2) Type in "screen /dev/tty1 115200"
3) Send commands to router
4) Quit by typing Apple+A and Apple+
"

The originap topic:

Serial Port Hardware Interfacing

audiodriverwriter, i don't think our hackintoshes support serial ports, but i don't know well...


I dont think so, because many industrial system use just serial port for programming or controlling the interfaces, like CNC machines etc..
The Mac osx is based on freebsd, so BSD system, i thing for get serial working is simple unix command in console. But "simple" for who know unix, not for me...:)

#98
Kotman

Kotman

    InsanelyMac Protégé

  • Members
  • Pip
  • 9 posts
Serial port works perfectly. I used dialup serial modem on AMD-based Hackintosh with "Tiger" and used Siemens ME45 via craddle as GPRS-modem on Intel-based Hackintosh with "Leo".

But!!! AMD-based variant must use flag "cpus=1", because 2 CPU cores crashed internet surfing. (10.4.8)



Good luck! ;)



#99
audiodriverwriter

audiodriverwriter

    InsanelyMac Sage

  • Members
  • PipPipPipPipPip
  • 318 posts
Ok, good to hear it works. Now I only need to know how I send messages to the serial port from C/C++ (so, no script or whatever) and if I can do that within an interrupt.

Anyway, I now have verified that all the registers of the Envy24HT chip on the hackintosh machine are the same as on my other system, right before sending the signal to start playing, so there can't be anything wrongly set-up now. By having serial debug in the interrupt handler I could find out if it enters the handler at all.

#100
Pyroman

Pyroman

    InsanelyMac Protégé

  • Members
  • Pip
  • 20 posts

Ok, good to hear it works. Now I only need to know how I send messages to the serial port from C/C++ (so, no script or whatever) and if I can do that within an interrupt.

Anyway, I now have verified that all the registers of the Envy24HT chip on the hackintosh machine are the same as on my other system, right before sending the signal to start playing, so there can't be anything wrongly set-up now. By having serial debug in the interrupt handler I could find out if it enters the handler at all.


Opening the Serial Port original link


OR u can search "serial port" at apple developer


To open a serial port, the MyOpenSerialPort function, shown in Listing 1-7, calls the open function, passing the device file path, as well as the following constants:

*

O_RDWR: open for reading and writing
*

O_NOCTTY: dont assign a controlling terminal
*

O_NONBLOCK: allow subsequent I/O on the device to be nonblocking

These constants and the open and fcntl functions are defined in fcntl.h.

If open returns a valid file descriptor, MyOpenSerialPort performs the following additional steps:

1.

It calls the ioctl function, passing TIOCEXCL, to prevent additional opens on the device, except from a root-owned process.
2.

It calls the fcntl function, passing the value F_SETFL to clear the O_NONBLOCK flag so subsequent I/O will block.
3.

It calls the tcgetattr function to save the current file settings in the global static structure gOriginalTTYAttrs, of type termios. These values will be restored later by the MyCLoseSerialPort function (Listing 1-10). The termios structure and the tcgetattr and tcsetattr functions are defined in the header termios.h.
4.

It sets some fields of options, a local termios structure, using values defined in the header termios.h. These options specify, among other things, raw input mode, a one second timeout value for blocking reads, and input and output baud rates. MyOpenSerialPort then passes the options structure to the tcsetattr function to set new values for the serial port (the changes wont take effect until the call to tcsetattr). The constant TCSANOW is also defined in termios.h, and indicates that the change should be made immediately.
5.

Finally, it returns the file descriptor obtained from the call to open.

You can find the headers mentioned in this section in header files in Kernel.framework, System.framework, or the directory /usr/include.

Listing 1-7 Opening the serial port specified by the passed device file

static int MyOpenSerialPort(const char *deviceFilePath)

{

int fileDescriptor = -1;

int handshake;

struct termios options;



// Open the serial port read/write, with no controlling terminal,

// and don't wait for a connection.

// The O_NONBLOCK flag also causes subsequent I/O on the device to

// be non-blocking.

// See open(2) ("man 2 open") for details.



fileDescriptor = open(deviceFilePath, O_RDWR | O_NOCTTY | O_NONBLOCK);

if (fileDescriptor == -1)

{

printf("Error opening serial port %s - %s(%d).\n",

deviceFilePath, strerror(errno), errno);

goto error;

}



// Note that open() follows POSIX semantics: multiple open() calls to

// the same file will succeed unless the TIOCEXCL ioctl is issued.

// This will prevent additional opens except by root-owned processes.

// See tty(4) ("man 4 tty") and ioctl(2) ("man 2 ioctl") for details.



if (ioctl(fileDescriptor, TIOCEXCL) == kMyErrReturn)

{

printf("Error setting TIOCEXCL on %s - %s(%d).\n",

deviceFilePath, strerror(errno), errno);

goto error;

}



// Now that the device is open, clear the O_NONBLOCK flag so

// subsequent I/O will block.

// See fcntl(2) ("man 2 fcntl") for details.



if (fcntl(fileDescriptor, F_SETFL, 0) == kMyErrReturn)

{

printf("Error clearing O_NONBLOCK %s - %s(%d).\n",

deviceFilePath, strerror(errno), errno);

goto error;

}



// Get the current options and save them so we can restore the

// default settings later.

if (tcgetattr(fileDescriptor, &gOriginalTTYAttrs) == kMyErrReturn)

{

printf("Error getting tty attributes %s - %s(%d).\n",

deviceFilePath, strerror(errno), errno);

goto error;

}



// The serial port attributes such as timeouts and baud rate are set by

// modifying the termios structure and then calling tcsetattr to

// cause the changes to take effect. Note that the

// changes will not take effect without the tcsetattr() call.

// See tcsetattr(4) ("man 4 tcsetattr") for details.



options = gOriginalTTYAttrs;



// Print the current input and output baud rates.

// See tcsetattr(4) ("man 4 tcsetattr") for details.



printf("Current input baud rate is %d\n", (int) cfgetispeed(&options));

printf("Current output baud rate is %d\n", (int) cfgetospeed(&options));



// Set raw input (non-canonical) mode, with reads blocking until either

// a single character has been received or a one second timeout expires.

// See tcsetattr(4) ("man 4 tcsetattr") and termios(4) ("man 4 termios")

// for details.



cfmakeraw(&options);

options.c_cc[VMIN] = 1;

options.c_cc[VTIME] = 10;



// The baud rate, word length, and handshake options can be set as follows:



cfsetspeed(&options, B19200); // Set 19200 baud

options.c_cflag |= (CS7 |// Use 7 bit words

PARENB | // Enable parity (even parity if PARODD

// not also set)

CCTS_OFLOW | // CTS flow control of output

CRTS_IFLOW); // RTS flow control of input



// Print the new input and output baud rates.



printf("Input baud rate changed to %d\n", (int) cfgetispeed(&options));

printf("Output baud rate changed to %d\n", (int) cfgetospeed(&options));



// Cause the new options to take effect immediately.

if (tcsetattr(fileDescriptor, TCSANOW, &options) == kMyErrReturn)

{

printf("Error setting tty attributes %s - %s(%d).\n",

deviceFilePath, strerror(errno), errno);

goto error;

}



// To set the modem handshake lines, use the following ioctls.

// See tty(4) ("man 4 tty") and ioctl(2) ("man 2 ioctl") for details.



if (ioctl(fileDescriptor, TIOCSDTR) == kMyErrReturn)

// Assert Data Terminal Ready (DTR)

{

printf("Error asserting DTR %s - %s(%d).\n",

deviceFilePath, strerror(errno), errno);

}



if (ioctl(fileDescriptor, TIOCCDTR) == kMyErrReturn)

// Clear Data Terminal Ready (DTR)

{

printf("Error clearing DTR %s - %s(%d).\n",

deviceFilePath, strerror(errno), errno);

}



handshake = TIOCM_DTR | TIOCM_RTS | TIOCM_CTS | TIOCM_DSR;

// Set the modem lines depending on the bits set in handshake.

if (ioctl(fileDescriptor, TIOCMSET, &handshake) == kMyErrReturn)

{

printf("Error setting handshake lines %s - %s(%d).\n",

deviceFilePath, strerror(errno), errno);

}



// To read the state of the modem lines, use the following ioctl.

// See tty(4) ("man 4 tty") and ioctl(2) ("man 2 ioctl") for details.



if (ioctl(fileDescriptor, TIOCMGET, &handshake) == kMyErrReturn)

// Store the state of the modem lines in handshake.

{

printf("Error getting handshake lines %s - %s(%d).\n",

deviceFilePath, strerror(errno), errno);

}



printf("Handshake lines currently set to %d\n", handshake);



// Success:

return fileDescriptor;



// Failure:

error:

if (fileDescriptor != kMyErrReturn)

{

close(fileDescriptor);

}



return -1;

}





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

© 2014 InsanelyMac  |   News  |   Forum  |   Downloads  |   OSx86 Wiki  |   Mac Netbook  |   PHP hosting by CatN  |   Designed by Ed Gain  |   Logo by irfan  |   Privacy Policy