452 lines · 13.6 KB · C
RawDownload
/*----------------------------------------------------------------------------  ChucK Concurrent, On-the-fly Audio Programming Language    Compiler and Virtual Machine   Copyright (c) 2004 Ge Wang and Perry R. Cook.  All rights reserved.    http://chuck.stanford.edu/    http://chuck.cs.princeton.edu/   This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2 of the License, or  (at your option) any later version.   This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.   You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  U.S.A.-----------------------------------------------------------------------------*/ //-----------------------------------------------------------------------------// name: chuck_io.h// desc: chuck i/o//// authors: Spencer Salazar (spencer@ccrma.stanford.edu)//    date: Summer 2012//-----------------------------------------------------------------------------#ifndef __CHUCK_IO_H__#define __CHUCK_IO_H__ #include "chuck_oo.h"#include "chuck_dl.h"#ifndef __DISABLE_SERIAL__#include "util_thread.h"#endif#include "util_buffers.h"#include <list>    // class initialization// do not __DISABLE_MIDI__ this one in particulart_CKBOOL init_class_Midi( Chuck_Env * env );#ifndef __DISABLE_MIDI__t_CKBOOL init_class_MidiRW( Chuck_Env * env );#endif#ifndef __DISABLE_HID__t_CKBOOL init_class_HID( Chuck_Env * env );#endift_CKBOOL init_class_io( Chuck_Env * env, Chuck_Type * type );// #ifndef __DISABLE_FILEIO__t_CKBOOL init_class_fileio( Chuck_Env * env, Chuck_Type * type );// #endif// added 1.3.0.0 -- moved to be full-fledged classt_CKBOOL init_class_chout( Chuck_Env * env, Chuck_Type * type );// added 1.3.0.0 -- moved to be full-fledged classt_CKBOOL init_class_cherr( Chuck_Env * env, Chuck_Type * type );#ifndef __DISABLE_SERIAL__ // added 1.3.1t_CKBOOL init_class_serialio( Chuck_Env * env );#endif     //-----------------------------------------------------------------------------// io API//-----------------------------------------------------------------------------CK_DLL_MFUN( io_dummy_int );CK_DLL_MFUN( io_dummy_float );CK_DLL_MFUN( io_dummy_string );CK_DLL_MFUN( io_dummy_void );CK_DLL_SFUN( io_newline );CK_DLL_SFUN( io_openfile );  // #ifndef __DISABLE_FILEIO__//-----------------------------------------------------------------------------// fileio API//-----------------------------------------------------------------------------CK_DLL_CTOR( fileio_ctor );CK_DLL_DTOR( fileio_dtor );CK_DLL_MFUN( fileio_open );CK_DLL_MFUN( fileio_openflags );CK_DLL_MFUN( fileio_good );CK_DLL_MFUN( fileio_close );CK_DLL_MFUN( fileio_flush );CK_DLL_MFUN( fileio_getmode );CK_DLL_MFUN( fileio_setmode );CK_DLL_MFUN( fileio_size );CK_DLL_MFUN( fileio_seek );CK_DLL_MFUN( fileio_tell );CK_DLL_MFUN( fileio_isdir );CK_DLL_MFUN( fileio_dirlist );CK_DLL_MFUN( fileio_read );CK_DLL_MFUN( fileio_readline );CK_DLL_MFUN( fileio_readint );CK_DLL_MFUN( fileio_readintflags );CK_DLL_MFUN( fileio_readint8 );CK_DLL_MFUN( fileio_readint16 );CK_DLL_MFUN( fileio_readint32 );CK_DLL_MFUN( fileio_readfloat );CK_DLL_MFUN( fileio_readfloatflags );CK_DLL_MFUN( fileio_eof );CK_DLL_MFUN( fileio_more );CK_DLL_MFUN( fileio_writestring );CK_DLL_MFUN( fileio_writeint );CK_DLL_MFUN( fileio_writeintflags );CK_DLL_MFUN( fileio_writefloat );CK_DLL_MFUN( fileio_writefloatflags );// #endif // __DISABLE_FILEIO__  //-----------------------------------------------------------------------------// chout API -- added 1.3.0.0 as full class//-----------------------------------------------------------------------------CK_DLL_MFUN( chout_good );CK_DLL_MFUN( chout_close );CK_DLL_MFUN( chout_flush );CK_DLL_MFUN( chout_getmode );CK_DLL_MFUN( chout_setmode );CK_DLL_MFUN( chout_read );CK_DLL_MFUN( chout_readline );CK_DLL_MFUN( chout_readint );CK_DLL_MFUN( chout_readintflags );CK_DLL_MFUN( chout_readfloat );CK_DLL_MFUN( chout_eof );CK_DLL_MFUN( chout_more );CK_DLL_MFUN( chout_writestring );CK_DLL_MFUN( chout_writeint );CK_DLL_MFUN( chout_writefloat );  //-----------------------------------------------------------------------------// cherr API -- added 1.3.0.0 as full class//-----------------------------------------------------------------------------CK_DLL_MFUN( cherr_good );CK_DLL_MFUN( cherr_close );CK_DLL_MFUN( cherr_flush );CK_DLL_MFUN( cherr_getmode );CK_DLL_MFUN( cherr_setmode );CK_DLL_MFUN( cherr_read );CK_DLL_MFUN( cherr_readline );CK_DLL_MFUN( cherr_readint );CK_DLL_MFUN( cherr_readintflags );CK_DLL_MFUN( cherr_readfloat );CK_DLL_MFUN( cherr_eof );CK_DLL_MFUN( cherr_more );CK_DLL_MFUN( cherr_writestring );CK_DLL_MFUN( cherr_writeint );CK_DLL_MFUN( cherr_writefloat );    //-----------------------------------------------------------------------------// MidiMsg API//-----------------------------------------------------------------------------CK_DLL_CTOR( MidiMsg_ctor ); extern t_CKUINT MidiMsg_offset_data1;extern t_CKUINT MidiMsg_offset_data2;extern t_CKUINT MidiMsg_offset_data3;extern t_CKUINT MidiMsg_offset_when; #ifndef __DISABLE_MIDI__//-----------------------------------------------------------------------------// MidiRW API//-----------------------------------------------------------------------------CK_DLL_CTOR( MidiRW_ctor );CK_DLL_DTOR( MidiRW_dtor );CK_DLL_MFUN( MidiRW_open );CK_DLL_MFUN( MidiRW_close );CK_DLL_MFUN( MidiRW_read );CK_DLL_MFUN( MidiRW_write );  //-----------------------------------------------------------------------------// MidiMsgOut API//-----------------------------------------------------------------------------CK_DLL_CTOR( MidiMsgOut_ctor );CK_DLL_DTOR( MidiMsgOut_dtor );CK_DLL_MFUN( MidiMsgOut_open );CK_DLL_MFUN( MidiMsgOut_close );CK_DLL_MFUN( MidiMsgOut_write );  //-----------------------------------------------------------------------------// MidiMsgIn API//-----------------------------------------------------------------------------CK_DLL_CTOR( MidiMsgIn_ctor );CK_DLL_DTOR( MidiMsgIn_dtor );CK_DLL_MFUN( MidiMsgIn_open );CK_DLL_MFUN( MidiMsgIn_close );CK_DLL_MFUN( MidiMsgIn_read );  //-----------------------------------------------------------------------------// MidiIn API//-----------------------------------------------------------------------------CK_DLL_CTOR( MidiIn_ctor );CK_DLL_DTOR( MidiIn_dtor );CK_DLL_MFUN( MidiIn_open );CK_DLL_MFUN( MidiIn_open_named ); // added 1.3.0.0CK_DLL_MFUN( MidiIn_open_named_i ); // added 1.3.0.0CK_DLL_MFUN( MidiIn_good );CK_DLL_MFUN( MidiIn_num );CK_DLL_MFUN( MidiIn_name );CK_DLL_MFUN( MidiIn_printerr );CK_DLL_MFUN( MidiIn_recv );CK_DLL_MFUN( MidiIn_can_wait );  //-----------------------------------------------------------------------------// MidiOut API//-----------------------------------------------------------------------------CK_DLL_CTOR( MidiOut_ctor );CK_DLL_DTOR( MidiOut_dtor );CK_DLL_MFUN( MidiOut_open );CK_DLL_MFUN( MidiOut_open_named ); // added 1.3.0.0CK_DLL_MFUN( MidiOut_open_named_i); // added 1.3.0.0CK_DLL_MFUN( MidiOut_good );CK_DLL_MFUN( MidiOut_num );CK_DLL_MFUN( MidiOut_name );CK_DLL_MFUN( MidiOut_printerr );CK_DLL_MFUN( MidiOut_send );#endif // __DISABLE_MIDI__   #ifndef __DISABLE_HID__//-----------------------------------------------------------------------------// HidMsg API//-----------------------------------------------------------------------------CK_DLL_MFUN( HidMsg_is_axis_motion );CK_DLL_MFUN( HidMsg_is_button_down );CK_DLL_MFUN( HidMsg_is_button_up );CK_DLL_MFUN( HidMsg_is_mouse_motion );CK_DLL_MFUN( HidMsg_is_hat_motion );CK_DLL_MFUN( HidMsg_is_wheel_motion ); //-----------------------------------------------------------------------------// HidIn API//-----------------------------------------------------------------------------CK_DLL_CTOR( HidIn_ctor );CK_DLL_DTOR( HidIn_dtor );CK_DLL_MFUN( HidIn_open );CK_DLL_MFUN( HidIn_open_named );CK_DLL_MFUN( HidIn_open_named_i ); // added 1.3.0.0CK_DLL_MFUN( HidIn_open_joystick );CK_DLL_MFUN( HidIn_open_mouse );CK_DLL_MFUN( HidIn_open_keyboard );CK_DLL_MFUN( HidIn_open_tiltsensor );CK_DLL_MFUN( HidIn_good );CK_DLL_MFUN( HidIn_num );CK_DLL_MFUN( HidIn_name );CK_DLL_MFUN( HidIn_printerr );CK_DLL_MFUN( HidIn_recv );CK_DLL_MFUN( HidIn_read );CK_DLL_MFUN( HidIn_send );CK_DLL_MFUN( HidIn_can_wait );CK_DLL_SFUN( HidIn_read_tilt_sensor );CK_DLL_SFUN( HidIn_ctrl_tiltPollRate );CK_DLL_SFUN( HidIn_cget_tiltPollRate );CK_DLL_SFUN( HidIn_start_cursor_track );CK_DLL_SFUN( HidIn_stop_cursor_track );  //-----------------------------------------------------------------------------// HidOut API//-----------------------------------------------------------------------------CK_DLL_CTOR( HidOut_ctor );CK_DLL_DTOR( HidOut_dtor );CK_DLL_MFUN( HidOut_open );CK_DLL_MFUN( HidOut_good );CK_DLL_MFUN( HidOut_num );CK_DLL_MFUN( HidOut_name );CK_DLL_MFUN( HidOut_printerr );CK_DLL_MFUN( HidOut_send );#endif // __DISABLE_HID__   #ifndef __DISABLE_SERIAL__//-----------------------------------------------------------------------------// name: struct Chuck_IO_Serial// desc: chuck serial I/O//-----------------------------------------------------------------------------struct Chuck_IO_Serial : public Chuck_IO{public:    Chuck_IO_Serial( Chuck_VM * vm );    virtual ~Chuck_IO_Serial();     static void shutdown(); public:    // meta    virtual t_CKBOOL open( const t_CKUINT i, t_CKINT flags, t_CKUINT baud = CK_BAUD_9600 );    virtual t_CKBOOL open( const std::string & path, t_CKINT flags, t_CKUINT baud = CK_BAUD_9600 );     virtual t_CKBOOL can_wait();     virtual t_CKBOOL good();    virtual void close();    virtual void flush();    virtual t_CKINT mode();    virtual void mode( t_CKINT flag );     // reading    virtual Chuck_String * readLine();    virtual t_CKINT readInt( t_CKINT flags );    virtual t_CKFLOAT readFloat();    virtual t_CKFLOAT readFloat( t_CKINT flags );    virtual t_CKBOOL readString( std::string & str );    virtual t_CKBOOL eof();     // writing    virtual void write( const std::string & val );    virtual void write( t_CKINT val );    virtual void write( t_CKINT val, t_CKINT flags );    virtual void writeBytes( Chuck_Array4 * arr );    virtual void write( t_CKFLOAT val );    virtual void write( t_CKFLOAT val, t_CKINT flags );     // serial stuff    virtual t_CKBOOL setBaudRate( t_CKUINT rate );    virtual t_CKUINT getBaudRate();     // async reading    virtual t_CKBOOL readAsync( t_CKUINT type, t_CKUINT num );    virtual Chuck_String * getLine();    virtual t_CKINT getByte();    virtual Chuck_Array * getBytes();    virtual Chuck_Array * getInts();    virtual Chuck_Array * getFloats();    virtual Chuck_String * getString();     static const t_CKUINT TYPE_NONE;    static const t_CKUINT TYPE_BYTE;    static const t_CKUINT TYPE_WORD;    static const t_CKUINT TYPE_INT;    static const t_CKUINT TYPE_FLOAT;    static const t_CKUINT TYPE_STRING;    static const t_CKUINT TYPE_LINE;    static const t_CKUINT TYPE_WRITE;     struct Request    {        t_CKUINT m_type; // type        t_CKUINT m_num; // how many        t_CKUINT m_status;        t_CKUINT m_val; // ISSUE: 64-bit         enum Status        {            RQ_STATUS_PENDING,            RQ_STATUS_SUCCESS,            RQ_STATUS_FAILURE,            RQ_STATUS_INVALID,            RQ_STATUS_EOF,        };    };     virtual t_CKBOOL ready();     // available baud rates    static const t_CKUINT CK_BAUD_2400;    static const t_CKUINT CK_BAUD_4800;    static const t_CKUINT CK_BAUD_9600;    static const t_CKUINT CK_BAUD_19200;    static const t_CKUINT CK_BAUD_38400;    static const t_CKUINT CK_BAUD_7200;    static const t_CKUINT CK_BAUD_14400;    static const t_CKUINT CK_BAUD_28800;    static const t_CKUINT CK_BAUD_57600;    static const t_CKUINT CK_BAUD_76800;    static const t_CKUINT CK_BAUD_115200;    static const t_CKUINT CK_BAUD_230400; protected:     void start_read_thread();    XThread * m_read_thread;    static void *shell_read_cb(void *);    void read_cb();     XThread * m_write_thread;    static void *shell_write_cb(void *);    void write_cb();     void close_int();     t_CKBOOL get_buffer(t_CKINT timeout_ms = 1);    t_CKINT peek_buffer();    t_CKINT pull_buffer();    t_CKINT buffer_bytes_to_tmp(t_CKINT num_bytes);     t_CKBOOL handle_line(Request &);    t_CKBOOL handle_string(Request &);    t_CKBOOL handle_float_ascii(Request &);    t_CKBOOL handle_int_ascii(Request &);    t_CKBOOL handle_byte(Request &);    t_CKBOOL handle_float_binary(Request &);    t_CKBOOL handle_int_binary(Request &);     bool m_do_read_thread;    bool m_do_write_thread;     CircularBuffer<Request> m_asyncRequests;    CircularBuffer<Request> m_asyncResponses;    CBufferSimple * m_event_buffer;     int m_fd;    FILE * m_cfd;     std::string m_path;     unsigned char * m_io_buf;    t_CKUINT m_io_buf_max;    t_CKUINT m_io_buf_available;    t_CKUINT m_io_buf_pos;     unsigned char * m_tmp_buf;    t_CKUINT m_tmp_buf_max;     CircularBuffer<Request> m_asyncWriteRequests;    CircularBuffer<char> m_writeBuffer;     t_CKINT m_flags;    t_CKINT m_iomode; // SYNC or ASYNC    t_CKBOOL m_eof;     t_CKBOOL m_do_exit;     static std::list<Chuck_IO_Serial *> s_serials;     Chuck_VM * m_vmRef;};#endif // __DISABLE_SERIAL__     #endif // __CHUCK_IO_H__

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t