<property name="pos"></property>\r
<property name="resize">Resizable</property>\r
<property name="show">1</property>\r
- <property name="size">732,507</property>\r
+ <property name="size">761,500</property>\r
<property name="style">wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER</property>\r
<property name="subclass"></property>\r
<property name="title">FDMDV2</property>\r
<property name="style">wxGA_SMOOTH|wxGA_VERTICAL</property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
- <property name="tooltip"></property>\r
+ <property name="tooltip">Display signal to noise ratio.</property>\r
<property name="validator_data_type"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="style">wxTE_READONLY</property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
- <property name="tooltip"></property>\r
+ <property name="tooltip">Show S/N ratio numerically.</property>\r
<property name="validator_data_type"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="style">wxGA_SMOOTH|wxGA_VERTICAL</property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
- <property name="tooltip"></property>\r
+ <property name="tooltip">Display signal level.</property>\r
<property name="validator_data_type"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="border">1</property>\r
<property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND</property>\r
<property name="proportion">4</property>\r
- <object class="wxBoxSizer" expanded="0">\r
+ <object class="wxBoxSizer" expanded="1">\r
<property name="minimum_size"></property>\r
<property name="name">centerSizer</property>\r
<property name="orient">wxVERTICAL</property>\r
<property name="permission">none</property>\r
- <object class="sizeritem" expanded="0">\r
+ <object class="sizeritem" expanded="1">\r
<property name="border">0</property>\r
<property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALIGN_TOP|wxEXPAND</property>\r
<property name="proportion">1</property>\r
- <object class="wxBoxSizer" expanded="0">\r
+ <object class="wxBoxSizer" expanded="1">\r
<property name="minimum_size"></property>\r
<property name="name">upperSizer</property>\r
<property name="orient">wxVERTICAL</property>\r
<property name="enabled">1</property>\r
<property name="fg"></property>\r
<property name="floatable">1</property>\r
- <property name="font"></property>\r
+ <property name="font">,90,90,6,70,0</property>\r
<property name="gripper">0</property>\r
<property name="hidden">0</property>\r
<property name="id">wxID_ANY</property>\r
<object class="sizeritem" expanded="0">\r
<property name="border">3</property>\r
<property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND</property>\r
- <property name="proportion">3</property>\r
+ <property name="proportion">2</property>\r
<object class="wxStaticBoxSizer" expanded="0">\r
<property name="id">wxID_ANY</property>\r
<property name="label">SQ</property>\r
<property name="style">wxSL_AUTOTICKS|wxSL_INVERSE|wxSL_VERTICAL</property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
- <property name="tooltip"></property>\r
+ <property name="tooltip">Set Squelch level.</property>\r
<property name="validator_data_type"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="style">wxCHK_2STATE</property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
- <property name="tooltip"></property>\r
+ <property name="tooltip">Activate/Deactivate Squelch</property>\r
<property name="validator_data_type"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
</object>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="0">\r
+ <object class="sizeritem" expanded="1">\r
<property name="border">3</property>\r
<property name="flag">wxALIGN_CENTER|wxALL|wxEXPAND</property>\r
<property name="proportion">2</property>\r
- <object class="wxStaticBoxSizer" expanded="0">\r
+ <object class="wxStaticBoxSizer" expanded="1">\r
<property name="id">wxID_ANY</property>\r
<property name="label">Control</property>\r
<property name="minimum_size"></property>\r
<property name="orient">wxVERTICAL</property>\r
<property name="permission">none</property>\r
<event name="OnUpdateUI"></event>\r
- <object class="sizeritem" expanded="0">\r
+ <object class="sizeritem" expanded="1">\r
+ <property name="border">1</property>\r
+ <property name="flag">wxEXPAND</property>\r
+ <property name="proportion">0</property>\r
+ <object class="wxBoxSizer" expanded="1">\r
+ <property name="minimum_size"></property>\r
+ <property name="name">bSizer1511</property>\r
+ <property name="orient">wxVERTICAL</property>\r
+ <property name="permission">none</property>\r
+ <object class="sizeritem" expanded="1">\r
+ <property name="border">1</property>\r
+ <property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</property>\r
+ <property name="proportion">0</property>\r
+ <object class="wxToggleButton" expanded="1">\r
+ <property name="BottomDockable">1</property>\r
+ <property name="LeftDockable">1</property>\r
+ <property name="RightDockable">1</property>\r
+ <property name="TopDockable">1</property>\r
+ <property name="aui_layer"></property>\r
+ <property name="aui_name"></property>\r
+ <property name="aui_position"></property>\r
+ <property name="aui_row"></property>\r
+ <property name="best_size"></property>\r
+ <property name="bg"></property>\r
+ <property name="caption"></property>\r
+ <property name="caption_visible">1</property>\r
+ <property name="center_pane">0</property>\r
+ <property name="close_button">1</property>\r
+ <property name="context_help"></property>\r
+ <property name="context_menu">1</property>\r
+ <property name="default_pane">0</property>\r
+ <property name="dock">Dock</property>\r
+ <property name="dock_fixed">0</property>\r
+ <property name="docking">Left</property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="floatable">1</property>\r
+ <property name="font"></property>\r
+ <property name="gripper">0</property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_ANY</property>\r
+ <property name="label">Start</property>\r
+ <property name="max_size"></property>\r
+ <property name="maximize_button">0</property>\r
+ <property name="maximum_size"></property>\r
+ <property name="min_size"></property>\r
+ <property name="minimize_button">0</property>\r
+ <property name="minimum_size"></property>\r
+ <property name="moveable">1</property>\r
+ <property name="name">m_togBtnOnOff</property>\r
+ <property name="pane_border">1</property>\r
+ <property name="pane_position"></property>\r
+ <property name="pane_size"></property>\r
+ <property name="permission">protected</property>\r
+ <property name="pin_button">1</property>\r
+ <property name="pos"></property>\r
+ <property name="resize">Resizable</property>\r
+ <property name="show">1</property>\r
+ <property name="size"></property>\r
+ <property name="subclass"></property>\r
+ <property name="toolbar_pane">0</property>\r
+ <property name="tooltip">Begin receiving data.</property>\r
+ <property name="validator_data_type"></property>\r
+ <property name="validator_style">wxFILTER_NONE</property>\r
+ <property name="validator_type">wxDefaultValidator</property>\r
+ <property name="validator_variable"></property>\r
+ <property name="value">0</property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style"></property>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnToggleButton">OnTogBtnOnOff</event>\r
+ <event name="OnUpdateUI"></event>\r
+ </object>\r
+ </object>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem" expanded="1">\r
<property name="border">1</property>\r
<property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND</property>\r
<property name="proportion">0</property>\r
- <object class="wxBoxSizer" expanded="0">\r
+ <object class="wxBoxSizer" expanded="1">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer151</property>\r
<property name="orient">wxVERTICAL</property>\r
<property name="size"></property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
- <property name="tooltip">Toggle Split mode.</property>\r
+ <property name="tooltip">Toggle split frequency mode.</property>\r
<property name="validator_data_type"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="size"></property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
- <property name="tooltip">Toggle ALC Mode.</property>\r
+ <property name="tooltip">Toggle automatic level control mode.</property>\r
<property name="validator_data_type"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="size"></property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
- <property name="tooltip"></property>\r
+ <property name="tooltip">Switch between Receive and Transmit</property>\r
<property name="validator_data_type"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
</object>\r
</object>\r
</object>\r
- <object class="Dialog" expanded="1">\r
+ <object class="Dialog" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<property name="pos"></property>\r
<property name="resize">Resizable</property>\r
<property name="show">1</property>\r
- <property name="size">553,381</property>\r
+ <property name="size">555,419</property>\r
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>\r
<property name="subclass"></property>\r
<property name="title">Audio Options</property>\r
<event name="OnSetFocus"></event>\r
<event name="OnSize"></event>\r
<event name="OnUpdateUI"></event>\r
- <object class="wxBoxSizer" expanded="1">\r
+ <object class="wxBoxSizer" expanded="0">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer32</property>\r
<property name="orient">wxVERTICAL</property>\r
<property name="permission">none</property>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">1</property>\r
<property name="flag">wxEXPAND | wxALL</property>\r
<property name="proportion">1</property>\r
- <object class="wxNotebook" expanded="1">\r
+ <object class="wxNotebook" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<event name="OnSetFocus"></event>\r
<event name="OnSize"></event>\r
<event name="OnUpdateUI"></event>\r
- <object class="notebookpage" expanded="1">\r
+ <object class="notebookpage" expanded="0">\r
<property name="bitmap"></property>\r
<property name="label">Devices</property>\r
<property name="select">1</property>\r
- <object class="wxPanel" expanded="1">\r
+ <object class="wxPanel" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<event name="OnSetFocus"></event>\r
<event name="OnSize"></event>\r
<event name="OnUpdateUI"></event>\r
- <object class="wxBoxSizer" expanded="1">\r
+ <object class="wxBoxSizer" expanded="0">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer34</property>\r
<property name="orient">wxVERTICAL</property>\r
<property name="permission">none</property>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">1</property>\r
- <object class="wxStaticBoxSizer" expanded="1">\r
+ <object class="wxStaticBoxSizer" expanded="0">\r
<property name="id">wxID_ANY</property>\r
<property name="label">PortAudio</property>\r
<property name="minimum_size"></property>\r
<property name="name">sbSizer10</property>\r
- <property name="orient">wxVERTICAL</property>\r
+ <property name="orient">wxHORIZONTAL</property>\r
<property name="permission">none</property>\r
<event name="OnUpdateUI"></event>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">1</property>\r
- <object class="wxBoxSizer" expanded="1">\r
+ <object class="wxBoxSizer" expanded="0">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer41</property>\r
<property name="orient">wxHORIZONTAL</property>\r
<property name="permission">none</property>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
- <property name="flag">wxEXPAND</property>\r
+ <property name="flag">wxALL</property>\r
<property name="proportion">0</property>\r
- <object class="wxBoxSizer" expanded="1">\r
- <property name="minimum_size"></property>\r
- <property name="name">bSizer37</property>\r
- <property name="orient">wxVERTICAL</property>\r
+ <object class="wxGridSizer" expanded="0">\r
+ <property name="cols">1</property>\r
+ <property name="hgap">0</property>\r
+ <property name="minimum_size">115,-1</property>\r
+ <property name="name">gSizer6</property>\r
<property name="permission">none</property>\r
- <object class="sizeritem" expanded="1">\r
+ <property name="rows">3</property>\r
+ <property name="vgap">0</property>\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
- <property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</property>\r
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>\r
<property name="proportion">1</property>\r
- <object class="wxRadioButton" expanded="1">\r
+ <object class="wxRadioButton" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<event name="OnUpdateUI"></event>\r
</object>\r
</object>\r
+ <object class="sizeritem" expanded="0">\r
+ <property name="border">5</property>\r
+ <property name="flag">wxEXPAND</property>\r
+ <property name="proportion">0</property>\r
+ <object class="wxGridSizer" expanded="0">\r
+ <property name="cols">2</property>\r
+ <property name="hgap">0</property>\r
+ <property name="minimum_size">110,-1</property>\r
+ <property name="name">gSizer51</property>\r
+ <property name="permission">none</property>\r
+ <property name="rows">2</property>\r
+ <property name="vgap">0</property>\r
+ <object class="sizeritem" expanded="0">\r
+ <property name="border">5</property>\r
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL|wxEXPAND</property>\r
+ <property name="proportion">1</property>\r
+ <object class="wxStaticText" expanded="0">\r
+ <property name="BottomDockable">1</property>\r
+ <property name="LeftDockable">1</property>\r
+ <property name="RightDockable">1</property>\r
+ <property name="TopDockable">1</property>\r
+ <property name="aui_layer"></property>\r
+ <property name="aui_name"></property>\r
+ <property name="aui_position"></property>\r
+ <property name="aui_row"></property>\r
+ <property name="best_size"></property>\r
+ <property name="bg"></property>\r
+ <property name="caption"></property>\r
+ <property name="caption_visible">1</property>\r
+ <property name="center_pane">0</property>\r
+ <property name="close_button">1</property>\r
+ <property name="context_help"></property>\r
+ <property name="context_menu">1</property>\r
+ <property name="default_pane">0</property>\r
+ <property name="dock">Dock</property>\r
+ <property name="dock_fixed">0</property>\r
+ <property name="docking">Left</property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="floatable">1</property>\r
+ <property name="font">,90,90,7,70,0</property>\r
+ <property name="gripper">0</property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_ANY</property>\r
+ <property name="label"># Ch Out:</property>\r
+ <property name="max_size"></property>\r
+ <property name="maximize_button">0</property>\r
+ <property name="maximum_size">80,-1</property>\r
+ <property name="min_size"></property>\r
+ <property name="minimize_button">0</property>\r
+ <property name="minimum_size">80,-1</property>\r
+ <property name="moveable">1</property>\r
+ <property name="name">m_staticText151</property>\r
+ <property name="pane_border">1</property>\r
+ <property name="pane_position"></property>\r
+ <property name="pane_size"></property>\r
+ <property name="permission">protected</property>\r
+ <property name="pin_button">1</property>\r
+ <property name="pos"></property>\r
+ <property name="resize">Resizable</property>\r
+ <property name="show">1</property>\r
+ <property name="size">80,-1</property>\r
+ <property name="style">wxALIGN_RIGHT</property>\r
+ <property name="subclass"></property>\r
+ <property name="toolbar_pane">0</property>\r
+ <property name="tooltip"></property>\r
+ <property name="validator_data_type"></property>\r
+ <property name="validator_style">wxFILTER_NONE</property>\r
+ <property name="validator_type">wxDefaultValidator</property>\r
+ <property name="validator_variable"></property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style"></property>\r
+ <property name="wrap">-1</property>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnUpdateUI"></event>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem" expanded="0">\r
+ <property name="border">5</property>\r
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL</property>\r
+ <property name="proportion">1</property>\r
+ <object class="wxTextCtrl" expanded="0">\r
+ <property name="BottomDockable">1</property>\r
+ <property name="LeftDockable">1</property>\r
+ <property name="RightDockable">1</property>\r
+ <property name="TopDockable">1</property>\r
+ <property name="aui_layer"></property>\r
+ <property name="aui_name"></property>\r
+ <property name="aui_position"></property>\r
+ <property name="aui_row"></property>\r
+ <property name="best_size"></property>\r
+ <property name="bg"></property>\r
+ <property name="caption"></property>\r
+ <property name="caption_visible">1</property>\r
+ <property name="center_pane">0</property>\r
+ <property name="close_button">1</property>\r
+ <property name="context_help"></property>\r
+ <property name="context_menu">1</property>\r
+ <property name="default_pane">0</property>\r
+ <property name="dock">Dock</property>\r
+ <property name="dock_fixed">0</property>\r
+ <property name="docking">Left</property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="floatable">1</property>\r
+ <property name="font">,90,90,7,70,0</property>\r
+ <property name="gripper">0</property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_ANY</property>\r
+ <property name="max_size"></property>\r
+ <property name="maximize_button">0</property>\r
+ <property name="maximum_size">30,-1</property>\r
+ <property name="maxlength">0</property>\r
+ <property name="min_size"></property>\r
+ <property name="minimize_button">0</property>\r
+ <property name="minimum_size">30,-1</property>\r
+ <property name="moveable">1</property>\r
+ <property name="name">m_textNumChOut</property>\r
+ <property name="pane_border">1</property>\r
+ <property name="pane_position"></property>\r
+ <property name="pane_size"></property>\r
+ <property name="permission">protected</property>\r
+ <property name="pin_button">1</property>\r
+ <property name="pos"></property>\r
+ <property name="resize">Resizable</property>\r
+ <property name="show">1</property>\r
+ <property name="size">30,-1</property>\r
+ <property name="style">wxTE_READONLY</property>\r
+ <property name="subclass"></property>\r
+ <property name="toolbar_pane">0</property>\r
+ <property name="tooltip"></property>\r
+ <property name="validator_data_type"></property>\r
+ <property name="validator_style">wxFILTER_NONE</property>\r
+ <property name="validator_type">wxDefaultValidator</property>\r
+ <property name="validator_variable"></property>\r
+ <property name="value"></property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style"></property>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnText"></event>\r
+ <event name="OnTextEnter"></event>\r
+ <event name="OnTextMaxLen"></event>\r
+ <event name="OnTextURL"></event>\r
+ <event name="OnUpdateUI"></event>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem" expanded="0">\r
+ <property name="border">5</property>\r
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL|wxEXPAND</property>\r
+ <property name="proportion">1</property>\r
+ <object class="wxStaticText" expanded="0">\r
+ <property name="BottomDockable">1</property>\r
+ <property name="LeftDockable">1</property>\r
+ <property name="RightDockable">1</property>\r
+ <property name="TopDockable">1</property>\r
+ <property name="aui_layer"></property>\r
+ <property name="aui_name"></property>\r
+ <property name="aui_position"></property>\r
+ <property name="aui_row"></property>\r
+ <property name="best_size"></property>\r
+ <property name="bg"></property>\r
+ <property name="caption"></property>\r
+ <property name="caption_visible">1</property>\r
+ <property name="center_pane">0</property>\r
+ <property name="close_button">1</property>\r
+ <property name="context_help"></property>\r
+ <property name="context_menu">1</property>\r
+ <property name="default_pane">0</property>\r
+ <property name="dock">Dock</property>\r
+ <property name="dock_fixed">0</property>\r
+ <property name="docking">Left</property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="floatable">1</property>\r
+ <property name="font">,90,90,7,70,0</property>\r
+ <property name="gripper">0</property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_ANY</property>\r
+ <property name="label"># Ch In:</property>\r
+ <property name="max_size"></property>\r
+ <property name="maximize_button">0</property>\r
+ <property name="maximum_size">90,-1</property>\r
+ <property name="min_size"></property>\r
+ <property name="minimize_button">0</property>\r
+ <property name="minimum_size">80,-1</property>\r
+ <property name="moveable">1</property>\r
+ <property name="name">m_staticText141</property>\r
+ <property name="pane_border">1</property>\r
+ <property name="pane_position"></property>\r
+ <property name="pane_size"></property>\r
+ <property name="permission">protected</property>\r
+ <property name="pin_button">1</property>\r
+ <property name="pos"></property>\r
+ <property name="resize">Resizable</property>\r
+ <property name="show">1</property>\r
+ <property name="size">80,-1</property>\r
+ <property name="style">wxALIGN_RIGHT</property>\r
+ <property name="subclass"></property>\r
+ <property name="toolbar_pane">0</property>\r
+ <property name="tooltip"></property>\r
+ <property name="validator_data_type"></property>\r
+ <property name="validator_style">wxFILTER_NONE</property>\r
+ <property name="validator_type">wxDefaultValidator</property>\r
+ <property name="validator_variable"></property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style"></property>\r
+ <property name="wrap">-1</property>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnUpdateUI"></event>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem" expanded="0">\r
+ <property name="border">4</property>\r
+ <property name="flag">wxALL</property>\r
+ <property name="proportion">0</property>\r
+ <object class="wxTextCtrl" expanded="0">\r
+ <property name="BottomDockable">1</property>\r
+ <property name="LeftDockable">1</property>\r
+ <property name="RightDockable">1</property>\r
+ <property name="TopDockable">1</property>\r
+ <property name="aui_layer"></property>\r
+ <property name="aui_name"></property>\r
+ <property name="aui_position"></property>\r
+ <property name="aui_row"></property>\r
+ <property name="best_size"></property>\r
+ <property name="bg"></property>\r
+ <property name="caption"></property>\r
+ <property name="caption_visible">1</property>\r
+ <property name="center_pane">0</property>\r
+ <property name="close_button">1</property>\r
+ <property name="context_help"></property>\r
+ <property name="context_menu">1</property>\r
+ <property name="default_pane">0</property>\r
+ <property name="dock">Dock</property>\r
+ <property name="dock_fixed">0</property>\r
+ <property name="docking">Left</property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="floatable">1</property>\r
+ <property name="font">,90,90,7,70,0</property>\r
+ <property name="gripper">0</property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_ANY</property>\r
+ <property name="max_size"></property>\r
+ <property name="maximize_button">0</property>\r
+ <property name="maximum_size">30,-1</property>\r
+ <property name="maxlength">0</property>\r
+ <property name="min_size"></property>\r
+ <property name="minimize_button">0</property>\r
+ <property name="minimum_size">30,-1</property>\r
+ <property name="moveable">1</property>\r
+ <property name="name">m_textNumChIn</property>\r
+ <property name="pane_border">1</property>\r
+ <property name="pane_position"></property>\r
+ <property name="pane_size"></property>\r
+ <property name="permission">protected</property>\r
+ <property name="pin_button">1</property>\r
+ <property name="pos"></property>\r
+ <property name="resize">Resizable</property>\r
+ <property name="show">1</property>\r
+ <property name="size">30,-1</property>\r
+ <property name="style">wxTE_READONLY</property>\r
+ <property name="subclass"></property>\r
+ <property name="toolbar_pane">0</property>\r
+ <property name="tooltip"></property>\r
+ <property name="validator_data_type"></property>\r
+ <property name="validator_style">wxFILTER_NONE</property>\r
+ <property name="validator_type">wxDefaultValidator</property>\r
+ <property name="validator_variable"></property>\r
+ <property name="value"></property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style"></property>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnText"></event>\r
+ <event name="OnTextEnter"></event>\r
+ <event name="OnTextMaxLen"></event>\r
+ <event name="OnTextURL"></event>\r
+ <event name="OnUpdateUI"></event>\r
+ </object>\r
+ </object>\r
+ </object>\r
+ </object>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
- <property name="flag">wxEXPAND</property>\r
- <property name="proportion">1</property>\r
- <object class="wxGridSizer" expanded="1">\r
- <property name="cols">1</property>\r
+ <property name="flag">wxALL|wxEXPAND</property>\r
+ <property name="proportion">0</property>\r
+ <object class="wxGridSizer" expanded="0">\r
+ <property name="cols">2</property>\r
<property name="hgap">0</property>\r
<property name="minimum_size"></property>\r
<property name="name">gSizer7</property>\r
<property name="permission">none</property>\r
<property name="rows">4</property>\r
<property name="vgap">0</property>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>\r
<property name="proportion">0</property>\r
- <object class="wxStaticText" expanded="1">\r
+ <object class="wxStaticText" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<property name="resize">Resizable</property>\r
<property name="show">1</property>\r
<property name="size"></property>\r
- <property name="style">wxALIGN_RIGHT</property>\r
+ <property name="style">wxALIGN_RIGHT|wxST_NO_AUTORESIZE</property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
<property name="tooltip"></property>\r
<event name="OnUpdateUI"></event>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
- <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>\r
- <property name="proportion">0</property>\r
- <object class="wxStaticText" expanded="1">\r
+ <property name="flag">wxALL</property>\r
+ <property name="proportion">1</property>\r
+ <object class="wxComboBox" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<property name="caption"></property>\r
<property name="caption_visible">1</property>\r
<property name="center_pane">0</property>\r
+ <property name="choices"></property>\r
<property name="close_button">1</property>\r
<property name="context_help"></property>\r
<property name="context_menu">1</property>\r
<property name="gripper">0</property>\r
<property name="hidden">0</property>\r
<property name="id">wxID_ANY</property>\r
- <property name="label">codec -> Radio Tx: </property>\r
<property name="max_size"></property>\r
<property name="maximize_button">0</property>\r
<property name="maximum_size"></property>\r
<property name="minimize_button">0</property>\r
<property name="minimum_size"></property>\r
<property name="moveable">1</property>\r
- <property name="name">m_staticText15</property>\r
+ <property name="name">m_comboAudioCodec</property>\r
<property name="pane_border">1</property>\r
<property name="pane_position"></property>\r
<property name="pane_size"></property>\r
<property name="pin_button">1</property>\r
<property name="pos"></property>\r
<property name="resize">Resizable</property>\r
+ <property name="selection">-1</property>\r
<property name="show">1</property>\r
<property name="size"></property>\r
- <property name="style">wxALIGN_RIGHT</property>\r
+ <property name="style"></property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
<property name="tooltip"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="validator_variable"></property>\r
+ <property name="value"><default></property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
- <property name="wrap">-1</property>\r
<event name="OnChar"></event>\r
+ <event name="OnCombobox"></event>\r
<event name="OnEnterWindow"></event>\r
<event name="OnEraseBackground"></event>\r
<event name="OnKeyDown"></event>\r
<event name="OnRightUp"></event>\r
<event name="OnSetFocus"></event>\r
<event name="OnSize"></event>\r
+ <event name="OnText"></event>\r
+ <event name="OnTextEnter"></event>\r
<event name="OnUpdateUI"></event>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
- <property name="flag">wxALIGN_RIGHT|wxALL</property>\r
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>\r
<property name="proportion">0</property>\r
- <object class="wxStaticText" expanded="1">\r
+ <object class="wxStaticText" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<property name="gripper">0</property>\r
<property name="hidden">0</property>\r
<property name="id">wxID_ANY</property>\r
- <property name="label">Radio Rx -> codec:</property>\r
+ <property name="label">codec -> Radio Tx:</property>\r
<property name="max_size"></property>\r
<property name="maximize_button">0</property>\r
<property name="maximum_size"></property>\r
<property name="minimize_button">0</property>\r
<property name="minimum_size"></property>\r
<property name="moveable">1</property>\r
- <property name="name">m_staticText16</property>\r
+ <property name="name">m_staticText15</property>\r
<property name="pane_border">1</property>\r
<property name="pane_position"></property>\r
<property name="pane_size"></property>\r
<property name="resize">Resizable</property>\r
<property name="show">1</property>\r
<property name="size"></property>\r
- <property name="style">wxALIGN_RIGHT</property>\r
+ <property name="style">wxALIGN_RIGHT|wxST_NO_AUTORESIZE</property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
<property name="tooltip"></property>\r
<event name="OnUpdateUI"></event>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
- <property name="flag">wxALIGN_RIGHT|wxALL</property>\r
- <property name="proportion">0</property>\r
- <object class="wxStaticText" expanded="1">\r
+ <property name="flag">wxALL</property>\r
+ <property name="proportion">1</property>\r
+ <object class="wxComboBox" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<property name="caption"></property>\r
<property name="caption_visible">1</property>\r
<property name="center_pane">0</property>\r
+ <property name="choices"></property>\r
<property name="close_button">1</property>\r
<property name="context_help"></property>\r
<property name="context_menu">1</property>\r
<property name="gripper">0</property>\r
<property name="hidden">0</property>\r
<property name="id">wxID_ANY</property>\r
- <property name="label">codec -> Audio out (spkr):</property>\r
<property name="max_size"></property>\r
<property name="maximize_button">0</property>\r
<property name="maximum_size"></property>\r
<property name="minimize_button">0</property>\r
<property name="minimum_size"></property>\r
<property name="moveable">1</property>\r
- <property name="name">m_staticText17</property>\r
+ <property name="name">m_comboCodecTx</property>\r
<property name="pane_border">1</property>\r
<property name="pane_position"></property>\r
<property name="pane_size"></property>\r
<property name="pin_button">1</property>\r
<property name="pos"></property>\r
<property name="resize">Resizable</property>\r
+ <property name="selection">-1</property>\r
<property name="show">1</property>\r
<property name="size"></property>\r
- <property name="style">wxALIGN_RIGHT</property>\r
+ <property name="style"></property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
<property name="tooltip"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="validator_variable"></property>\r
+ <property name="value"><default></property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
- <property name="wrap">-1</property>\r
<event name="OnChar"></event>\r
+ <event name="OnCombobox"></event>\r
<event name="OnEnterWindow"></event>\r
<event name="OnEraseBackground"></event>\r
<event name="OnKeyDown"></event>\r
<event name="OnRightUp"></event>\r
<event name="OnSetFocus"></event>\r
<event name="OnSize"></event>\r
+ <event name="OnText"></event>\r
+ <event name="OnTextEnter"></event>\r
<event name="OnUpdateUI"></event>\r
</object>\r
</object>\r
- </object>\r
- </object>\r
- <object class="sizeritem" expanded="1">\r
- <property name="border">5</property>\r
- <property name="flag">wxEXPAND</property>\r
- <property name="proportion">1</property>\r
- <object class="wxGridSizer" expanded="1">\r
- <property name="cols">1</property>\r
- <property name="hgap">0</property>\r
- <property name="minimum_size"></property>\r
- <property name="name">gSizer5</property>\r
- <property name="permission">none</property>\r
- <property name="rows">4</property>\r
- <property name="vgap">0</property>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
- <property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND</property>\r
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>\r
<property name="proportion">0</property>\r
- <object class="wxComboBox" expanded="1">\r
+ <object class="wxStaticText" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<property name="caption"></property>\r
<property name="caption_visible">1</property>\r
<property name="center_pane">0</property>\r
- <property name="choices"></property>\r
<property name="close_button">1</property>\r
<property name="context_help"></property>\r
<property name="context_menu">1</property>\r
<property name="gripper">0</property>\r
<property name="hidden">0</property>\r
<property name="id">wxID_ANY</property>\r
+ <property name="label">Radio Rx -> codec:</property>\r
<property name="max_size"></property>\r
<property name="maximize_button">0</property>\r
<property name="maximum_size"></property>\r
<property name="minimize_button">0</property>\r
<property name="minimum_size"></property>\r
<property name="moveable">1</property>\r
- <property name="name">m_comboBox1</property>\r
+ <property name="name">m_staticText16</property>\r
<property name="pane_border">1</property>\r
<property name="pane_position"></property>\r
<property name="pane_size"></property>\r
<property name="pin_button">1</property>\r
<property name="pos"></property>\r
<property name="resize">Resizable</property>\r
- <property name="selection">-1</property>\r
<property name="show">1</property>\r
<property name="size"></property>\r
- <property name="style"></property>\r
+ <property name="style">wxALIGN_RIGHT|wxST_NO_AUTORESIZE</property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
<property name="tooltip"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="validator_variable"></property>\r
- <property name="value">Combo!</property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
+ <property name="wrap">-1</property>\r
<event name="OnChar"></event>\r
- <event name="OnCombobox"></event>\r
<event name="OnEnterWindow"></event>\r
<event name="OnEraseBackground"></event>\r
<event name="OnKeyDown"></event>\r
<event name="OnRightUp"></event>\r
<event name="OnSetFocus"></event>\r
<event name="OnSize"></event>\r
- <event name="OnText"></event>\r
- <event name="OnTextEnter"></event>\r
<event name="OnUpdateUI"></event>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
- <property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND</property>\r
- <property name="proportion">0</property>\r
- <object class="wxComboBox" expanded="1">\r
+ <property name="flag">wxALL</property>\r
+ <property name="proportion">1</property>\r
+ <object class="wxComboBox" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<property name="minimize_button">0</property>\r
<property name="minimum_size"></property>\r
<property name="moveable">1</property>\r
- <property name="name">m_comboBox2</property>\r
+ <property name="name">m_comboRadioRx</property>\r
<property name="pane_border">1</property>\r
<property name="pane_position"></property>\r
<property name="pane_size"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="validator_variable"></property>\r
- <property name="value">Combo!</property>\r
+ <property name="value"><default></property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
<event name="OnUpdateUI"></event>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
- <property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND</property>\r
+ <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>\r
<property name="proportion">0</property>\r
- <object class="wxComboBox" expanded="1">\r
+ <object class="wxStaticText" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<property name="caption"></property>\r
<property name="caption_visible">1</property>\r
<property name="center_pane">0</property>\r
- <property name="choices"></property>\r
<property name="close_button">1</property>\r
<property name="context_help"></property>\r
<property name="context_menu">1</property>\r
<property name="gripper">0</property>\r
<property name="hidden">0</property>\r
<property name="id">wxID_ANY</property>\r
+ <property name="label">codec -> Audio out (spkr):</property>\r
<property name="max_size"></property>\r
<property name="maximize_button">0</property>\r
<property name="maximum_size"></property>\r
<property name="minimize_button">0</property>\r
<property name="minimum_size"></property>\r
<property name="moveable">1</property>\r
- <property name="name">m_comboBox11</property>\r
+ <property name="name">m_staticText17</property>\r
<property name="pane_border">1</property>\r
<property name="pane_position"></property>\r
<property name="pane_size"></property>\r
<property name="pin_button">1</property>\r
<property name="pos"></property>\r
<property name="resize">Resizable</property>\r
- <property name="selection">-1</property>\r
<property name="show">1</property>\r
<property name="size"></property>\r
- <property name="style"></property>\r
+ <property name="style">wxALIGN_RIGHT|wxST_NO_AUTORESIZE</property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
<property name="tooltip"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="validator_variable"></property>\r
- <property name="value">Combo!</property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
+ <property name="wrap">-1</property>\r
<event name="OnChar"></event>\r
- <event name="OnCombobox"></event>\r
<event name="OnEnterWindow"></event>\r
<event name="OnEraseBackground"></event>\r
<event name="OnKeyDown"></event>\r
<event name="OnRightUp"></event>\r
<event name="OnSetFocus"></event>\r
<event name="OnSize"></event>\r
- <event name="OnText"></event>\r
- <event name="OnTextEnter"></event>\r
<event name="OnUpdateUI"></event>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
- <property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND</property>\r
+ <property name="flag">wxALL</property>\r
<property name="proportion">0</property>\r
- <object class="wxComboBox" expanded="1">\r
+ <object class="wxComboBox" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<property name="minimize_button">0</property>\r
<property name="minimum_size"></property>\r
<property name="moveable">1</property>\r
- <property name="name">m_comboBox12</property>\r
+ <property name="name">m_comboCodecSpkr</property>\r
<property name="pane_border">1</property>\r
<property name="pane_position"></property>\r
<property name="pane_size"></property>\r
<property name="validator_style">wxFILTER_NONE</property>\r
<property name="validator_type">wxDefaultValidator</property>\r
<property name="validator_variable"></property>\r
- <property name="value">Combo!</property>\r
+ <property name="value"><default></property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
</object>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">1</property>\r
- <object class="wxStaticBoxSizer" expanded="1">\r
+ <object class="wxStaticBoxSizer" expanded="0">\r
<property name="id">wxID_ANY</property>\r
<property name="label">File I/O</property>\r
<property name="minimum_size"></property>\r
<property name="orient">wxHORIZONTAL</property>\r
<property name="permission">none</property>\r
<event name="OnUpdateUI"></event>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">0</property>\r
- <object class="wxBoxSizer" expanded="1">\r
+ <object class="wxBoxSizer" expanded="0">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer38</property>\r
<property name="orient">wxVERTICAL</property>\r
<property name="permission">none</property>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
<property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</property>\r
<property name="proportion">1</property>\r
- <object class="wxRadioButton" expanded="1">\r
+ <object class="wxRadioButton" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<property name="resize">Resizable</property>\r
<property name="show">1</property>\r
<property name="size"></property>\r
- <property name="style">wxRB_GROUP</property>\r
+ <property name="style"></property>\r
<property name="subclass"></property>\r
<property name="toolbar_pane">0</property>\r
<property name="tooltip"></property>\r
</object>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">1</property>\r
- <object class="wxBoxSizer" expanded="1">\r
+ <object class="wxBoxSizer" expanded="0">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer45</property>\r
<property name="orient">wxVERTICAL</property>\r
<property name="permission">none</property>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">1</property>\r
- <object class="wxBoxSizer" expanded="1">\r
+ <object class="wxBoxSizer" expanded="0">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer46</property>\r
<property name="orient">wxVERTICAL</property>\r
</object>\r
</object>\r
</object>\r
- <object class="notebookpage" expanded="1">\r
+ <object class="notebookpage" expanded="0">\r
<property name="bitmap"></property>\r
<property name="label">Settings</property>\r
<property name="select">0</property>\r
- <object class="wxPanel" expanded="1">\r
+ <object class="wxPanel" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<event name="OnSetFocus"></event>\r
<event name="OnSize"></event>\r
<event name="OnUpdateUI"></event>\r
- <object class="wxBoxSizer" expanded="1">\r
+ <object class="wxBoxSizer" expanded="0">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer27</property>\r
<property name="orient">wxVERTICAL</property>\r
</object>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">1</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">1</property>\r
</object>\r
</object>\r
</object>\r
- <object class="notebookpage" expanded="1">\r
+ <object class="notebookpage" expanded="0">\r
<property name="bitmap"></property>\r
<property name="label">Right Channel</property>\r
<property name="select">0</property>\r
- <object class="wxPanel" expanded="1">\r
+ <object class="wxPanel" expanded="0">\r
<property name="BottomDockable">1</property>\r
<property name="LeftDockable">1</property>\r
<property name="RightDockable">1</property>\r
<event name="OnSetFocus"></event>\r
<event name="OnSize"></event>\r
<event name="OnUpdateUI"></event>\r
- <object class="wxBoxSizer" expanded="1">\r
+ <object class="wxBoxSizer" expanded="0">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer36</property>\r
<property name="orient">wxVERTICAL</property>\r
</object>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">0</property>\r
- <object class="wxBoxSizer" expanded="1">\r
+ <object class="wxBoxSizer" expanded="0">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer28</property>\r
<property name="orient">wxVERTICAL</property>\r
</object>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="1">\r
+ <object class="sizeritem" expanded="0">\r
<property name="border">5</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">0</property>\r
- <object class="spacer" expanded="1">\r
+ <object class="spacer" expanded="0">\r
<property name="height">15</property>\r
<property name="permission">protected</property>\r
<property name="width">0</property>\r
//==========================================================================\r
#include "dlg_audio.h"\r
\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+// Class AudioDlg( wxWindow* parent ) : DlgAudio( parent )\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
AudioDlg::AudioDlg( wxWindow* parent ) : DlgAudio( parent )\r
{\r
\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnCancel()\r
+//-------------------------------------------------------------------------\r
void AudioDlg::OnCancel( wxCommandEvent& event )\r
{\r
this->EndModal(wxID_OK);\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnOK()\r
+//-------------------------------------------------------------------------\r
void AudioDlg::OnOK( wxCommandEvent& event )\r
{\r
this->EndModal(wxID_OK);\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnApply()\r
+//-------------------------------------------------------------------------\r
void AudioDlg::OnApply( wxCommandEvent& event )\r
{\r
this->EndModal(wxID_OK);\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnClose()\r
+//-------------------------------------------------------------------------\r
void AudioDlg::OnClose( wxCloseEvent& event )\r
{\r
this->EndModal(wxID_OK);\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnInitDialog()\r
+//-------------------------------------------------------------------------\r
void AudioDlg::OnInitDialog( wxInitDialogEvent& event )\r
{\r
//wxMessageBox(wxT("got OnInitDialog()"), wxT("Select"), wxOK);\r
populateAudioInfo();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnRxInputSelect()\r
+//-------------------------------------------------------------------------\r
void AudioDlg::OnRxInputSelect( wxCommandEvent& event )\r
{\r
wxMessageBox(wxT("got OnRxInputSelect()"), wxT("Select"), wxOK);\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnTxOutputSelect()\r
+//-------------------------------------------------------------------------\r
void AudioDlg::OnTxOutputSelect( wxCommandEvent& event )\r
{\r
wxMessageBox(wxT("got OnTxOutputSelect()"), wxT("Select"), wxOK);\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnVoiceInputSelect()\r
+//-------------------------------------------------------------------------\r
void AudioDlg::OnVoiceInputSelect( wxCommandEvent& event )\r
{\r
wxMessageBox(wxT("got OnVoiceInputSelect()"), wxT("Select"), wxOK);\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnVoiceOutputSelect()\r
+//-------------------------------------------------------------------------\r
void AudioDlg::OnVoiceOutputSelect( wxCommandEvent& event )\r
{\r
wxMessageBox(wxT("got OnVoiceOutputSelect()"), wxT("Select"), wxOK);\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// populateStandardSampleRates()\r
+//-------------------------------------------------------------------------\r
void AudioDlg::populateStandardSampleRates(\r
- wxListBox* target,
+ wxComboBox* target,
const portaudio::DirectionSpecificStreamParameters &inputParameters,
const portaudio::DirectionSpecificStreamParameters &outputParameters)
{
if (tmp.isSupported())
{
tStr.Printf("%i %8.2f", printCount, STANDARD_SAMPLE_RATES[i]);\r
- target->InsertItems(1, &tStr, 0);
+ target->Append(tStr);
++printCount;
}
}
if (printCount == 0)
{
tStr = "None\n";
- target->InsertItems(1, &tStr, 0);
+ target->Append(tStr);
}
}
+//-------------------------------------------------------------------------\r
+// OnActivate()\r
+//-------------------------------------------------------------------------\r
int AudioDlg::populateAudioInfo()
{
wxString tStr;\r
try
{
portaudio::AutoSystem autoSys;
- portaudio::System &sys = portaudio::System::instance();
+ portaudio::System &sys = portaudio::System::instance();\r
/*
tStr.Printf("PortAudio version number: %i\n", sys.version());
/*\r
tStr.Printf("---------- device #: %i ----------\n", (*i).index());
m_textTopRight->AppendText(tStr);
-
bool defaultDisplayed = false;
-
if ((*i).isSystemDefaultInputDevice())
{
tStr.Printf("[ System Default Input %s", (*i).hostApi().name());
m_textTopRight->AppendText(tStr);
defaultDisplayed = true;
}\r
-
if (defaultDisplayed)
{
tStr = " ]\n";
m_textTopRight->AppendText(tStr);
}
-\r
ttStr.Printf("Name : %s\n", (*i).name());
tStr += ttStr;
ttStr.Printf("Host API : %s\n", (*i).hostApi().name());
tStr += ttStr;
ttStr.Printf("Max outputs : %i\n\n", (*i).maxOutputChannels());\r
tStr += ttStr;
-
ttStr.Printf("Default low input latency : %8.3f\n", (*i).defaultLowInputLatency());\r
tStr += ttStr;
ttStr.Printf("Default low output latency : %8.3f\n", (*i).defaultLowOutputLatency());\r
if ((*i).hostApi().typeId() == paASIO)
{
portaudio::AsioDeviceAdapter asioDevice((*i));
-
//std::cout << "ASIO minimum buffer size = " << asioDevice.minBufferSize() << std::endl;
//std::cout << "ASIO maximum buffer size = " << asioDevice.maxBufferSize() << std::endl;
//std::cout << "ASIO preferred buffer size = " << asioDevice.preferredBufferSize() << std::endl;
-
if (asioDevice.granularity() == -1)
{
//std::cout << "ASIO buffer granularity = power of 2" << std::endl;
tStr.Printf("Default sample rate : %8.2f\n", (*i).defaultSampleRate());
m_textTopRight->AppendText(tStr);
+ wxComboBox* m_comboAudioCodec;\r
+ wxComboBox* m_comboCodecTx;\r
+ wxComboBox* m_comboRadioRx;\r
+ wxComboBox* m_comboCodecSpkr;\r
*/
// Poll for standard sample rates:
portaudio::DirectionSpecificStreamParameters inputParameters((*i), (*i).maxInputChannels(), portaudio::INT16, true, 0.0, NULL);
portaudio::DirectionSpecificStreamParameters outputParameters((*i), (*i).maxOutputChannels(), portaudio::INT16, true, 0.0, NULL);
if (inputParameters.numChannels() > 0)
{
- tStr = "Supported standard Input sample rates\n";\r
- m_lbRxInput->InsertItems(1, &tStr, 0);
- tStr.Printf(" for half-duplex 16 bit %i channel input = ", inputParameters.numChannels());
- m_lbRxInput->InsertItems(1, &tStr, 0);
- populateStandardSampleRates(m_lbRxInput, inputParameters, portaudio::DirectionSpecificStreamParameters::null());
+// tStr = "Supported standard Input sample rates\n";\r
+// m_comboAudioCodec->Append(tStr);
+// tStr.Printf(" for half-duplex 16 bit %i channel input = ", inputParameters.numChannels());
+// m_comboAudioCodec->InsertItems(1, &tStr, 0);
+// m_comboAudioCodec->Append(tStr);
+ populateStandardSampleRates(m_comboAudioCodec, inputParameters, portaudio::DirectionSpecificStreamParameters::null());
}
if (outputParameters.numChannels() > 0)
{
- tStr = "Supported standard Output sample rates\n";\r
- m_lbTxOutput->InsertItems(1, &tStr, 0);
- tStr.Printf(" for half-duplex 16 bit %i channel output = ", outputParameters.numChannels());
- m_lbTxOutput->InsertItems(1, &tStr, 0);
- populateStandardSampleRates(m_lbTxOutput, portaudio::DirectionSpecificStreamParameters::null(), outputParameters);
+// tStr = "Supported standard Output sample rates\n";\r
+// m_comboRadioRx->Append(tStr);
+// tStr.Printf(" for half-duplex 16 bit %i channel output = ", outputParameters.numChannels());
+// m_comboRadioRx->Append(tStr);
+ populateStandardSampleRates(m_comboRadioRx, portaudio::DirectionSpecificStreamParameters::null(), outputParameters);
+ }
+ if (inputParameters.numChannels() > 0 && inputParameters.numChannels() > 0)
+ {
+// tStr = "Supported full-duplex sample rates\n";\r
+// m_comboCodecTx->Append(tStr);
+// tStr.Printf(" for full-duplex 16 bit %i channel input, %i", inputParameters.numChannels(), outputParameters.numChannels());
+// m_comboCodecTx->InsertItems(1, &tStr, 0);
+// m_comboCodecTx->Append(tStr);
+ populateStandardSampleRates(m_comboCodecTx, inputParameters, outputParameters);
}
- if (inputParameters.numChannels() > 0 && outputParameters.numChannels() > 0)
+ if (outputParameters.numChannels() > 0 && outputParameters.numChannels() > 0)
{
- tStr = "Supported full-duplex sample rates\n";\r
- m_lbVoiceInput->InsertItems(1, &tStr, 0);
- tStr.Printf(" for full-duplex 16 bit %i channel input, %i", inputParameters.numChannels(), outputParameters.numChannels());
- m_lbVoiceInput->InsertItems(1, &tStr, 0);
- populateStandardSampleRates(m_lbVoiceInput, inputParameters, outputParameters);
+// tStr = "Supported full-duplex sample rates\n";\r
+// m_comboCodecSpkr->Append(tStr);
+// tStr.Printf(" for full-duplex 16 bit %i channel input, %i", inputParameters.numChannels(), outputParameters.numChannels());
+// m_comboCodecTx->InsertItems(1, &tStr, 0);
+ populateStandardSampleRates(m_comboCodecSpkr, inputParameters, outputParameters);
}
}
}
void OnInitDialog( wxInitDialogEvent& event );\r
void OnApply( wxCommandEvent& event );\r
void populateStandardSampleRates(
- wxListBox* target,
+ wxComboBox* target,
const portaudio::DirectionSpecificStreamParameters &inputParameters,
const portaudio::DirectionSpecificStreamParameters &outputParameters);
int populateAudioInfo();
*/\r
\r
/*\r
- * The text above constitutes the entire PortAudio license; however, \r
+ * The text above constitutes the entire PortAudio license; however,\r
* the PortAudio community also makes the following non-binding requests:\r
*\r
* Any person wishing to distribute modifications to the Software is\r
* requested to send the modifications to the original developer so that\r
- * they can be incorporated into the canonical version. It is also \r
- * requested that these non-binding requests be included along with the \r
+ * they can be incorporated into the canonical version. It is also\r
+ * requested that these non-binding requests be included along with the\r
* license above.\r
*/\r
\r
{\r
#endif /* __cplusplus */\r
\r
- \r
+\r
/** Retrieve the release number of the currently running PortAudio build,\r
eg 1900.\r
*/\r
and Pa_GetErrorText(), this function MUST be called before using any other\r
PortAudio API functions.\r
\r
- If Pa_Initialize() is called multiple times, each successful \r
- call must be matched with a corresponding call to Pa_Terminate(). \r
- Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not \r
+ If Pa_Initialize() is called multiple times, each successful\r
+ call must be matched with a corresponding call to Pa_Terminate().\r
+ Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not\r
required to be fully nested.\r
\r
Note that if Pa_Initialize() returns an error code, Pa_Terminate() should\r
\r
@return paNoError if successful, otherwise an error code indicating the cause\r
of failure.\r
- \r
+\r
@see Pa_Initialize\r
*/\r
PaError Pa_Terminate( void );\r
if no default output device is available.\r
*/\r
PaDeviceIndex defaultOutputDevice;\r
- \r
+\r
} PaHostApiInfo;\r
\r
\r
@return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or,\r
a PaErrorCode (which are always negative) if PortAudio is not initialized\r
or an error is encountered.\r
- \r
+\r
The paHostApiNotFound error code indicates that the host API specified by the\r
type parameter is not available.\r
\r
\r
A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter\r
is out of range.\r
- \r
+\r
@see PaHostApiInfo\r
*/\r
PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi,\r
*/\r
const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void );\r
\r
-\r
-\r
/* Device enumeration and capabilities */\r
\r
/** Retrieve the number of available devices. The number of available devices\r
PaDeviceIndex Pa_GetDefaultOutputDevice( void );\r
\r
\r
-/** The type used to represent monotonic time in seconds. PaTime is \r
- used for the fields of the PaStreamCallbackTimeInfo argument to the \r
+/** The type used to represent monotonic time in seconds. PaTime is\r
+ used for the fields of the PaStreamCallbackTimeInfo argument to the\r
PaStreamCallback and as the result of Pa_GetStreamTime().\r
\r
PaTime values have unspecified origin.\r
- \r
+\r
@see PaStreamCallback, PaStreamCallbackTimeInfo, Pa_GetStreamTime\r
*/\r
typedef double PaTime;\r
\r
paUInt8 is an unsigned 8 bit format where 128 is considered "ground"\r
\r
- The paNonInterleaved flag indicates that audio data is passed as an array \r
+ The paNonInterleaved flag indicates that audio data is passed as an array\r
of pointers to separate buffers, one buffer for each channel. Usually,\r
when this flag is not used, audio data is passed as a single buffer with\r
all channels interleaved.\r
int structVersion; /* this is struct version 2 */\r
const char *name;\r
PaHostApiIndex hostApi; /**< note this is a host API index, not a type id*/\r
- \r
+\r
int maxInputChannels;\r
int maxOutputChannels;\r
\r
This field must not be set to paNoDevice.\r
*/\r
PaDeviceIndex device;\r
- \r
+\r
/** The number of channels of sound to be delivered to the\r
stream callback or accessed by Pa_ReadStream() or Pa_WriteStream().\r
It can range from 1 to the value of maxInputChannels in the\r
A single PaStream can provide multiple channels of real-time\r
streaming audio input and output to a client application. A stream\r
provides access to audio hardware represented by one or more\r
- PaDevices. Depending on the underlying Host API, it may be possible \r
- to open multiple streams using the same device, however this behavior \r
- is implementation defined. Portable applications should assume that \r
+ PaDevices. Depending on the underlying Host API, it may be possible\r
+ to open multiple streams using the same device, however this behavior\r
+ is implementation defined. Portable applications should assume that\r
a PaDevice may be simultaneously used by at most one PaStream.\r
\r
Pointers to PaStream objects are passed between PortAudio functions that\r
/** Call the stream callback to fill initial output buffers, rather than the\r
default behavior of priming the buffers with zeros (silence). This flag has\r
no effect for input-only and blocking read/write streams.\r
- \r
+\r
@see PaStreamFlags\r
*/\r
#define paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008)\r
Timing information for the buffers passed to the stream callback.\r
\r
Time values are expressed in seconds and are synchronised with the time base used by Pa_GetStreamTime() for the associated stream.\r
- \r
+\r
@see PaStreamCallback, Pa_GetStreamTime\r
*/\r
typedef struct PaStreamCallbackTimeInfo{\r
active PortAudio stream.\r
\r
When a stream is running, PortAudio calls the stream callback periodically.\r
- The callback function is responsible for processing buffers of audio samples \r
+ The callback function is responsible for processing buffers of audio samples\r
passed via the input and output parameters.\r
\r
The PortAudio stream callback runs at very high or real-time priority.\r
- It is required to consistently meet its time deadlines. Do not allocate \r
- memory, access the file system, call library functions or call other functions \r
+ It is required to consistently meet its time deadlines. Do not allocate\r
+ memory, access the file system, call library functions or call other functions\r
from the stream callback that may block or take an unpredictable amount of\r
time to complete.\r
\r
In order for a stream to maintain glitch-free operation the callback\r
must consume and return audio data faster than it is recorded and/or\r
- played. PortAudio anticipates that each callback invocation may execute for \r
- a duration approaching the duration of frameCount audio frames at the stream \r
+ played. PortAudio anticipates that each callback invocation may execute for\r
+ a duration approaching the duration of frameCount audio frames at the stream\r
sample rate. It is reasonable to expect to be able to utilise 70% or more of\r
- the available CPU time in the PortAudio callback. However, due to buffer size \r
- adaption and other factors, not all host APIs are able to guarantee audio \r
- stability under heavy CPU load with arbitrary fixed callback buffer sizes. \r
- When high callback CPU utilisation is required the most robust behavior \r
- can be achieved by using paFramesPerBufferUnspecified as the \r
+ the available CPU time in the PortAudio callback. However, due to buffer size\r
+ adaption and other factors, not all host APIs are able to guarantee audio\r
+ stability under heavy CPU load with arbitrary fixed callback buffer sizes.\r
+ When high callback CPU utilisation is required the most robust behavior\r
+ can be achieved by using paFramesPerBufferUnspecified as the\r
Pa_OpenStream() framesPerBuffer parameter.\r
- \r
+\r
@param input and @param output are either arrays of interleaved samples or;\r
- if non-interleaved samples were requested using the paNonInterleaved sample \r
- format flag, an array of buffer pointers, one non-interleaved buffer for \r
+ if non-interleaved samples were requested using the paNonInterleaved sample\r
+ format flag, an array of buffer pointers, one non-interleaved buffer for\r
each channel.\r
\r
The format, packing and number of channels used by the buffers are\r
determined by parameters to Pa_OpenStream().\r
- \r
+\r
@param frameCount The number of sample frames to be processed by\r
the stream callback.\r
\r
@param timeInfo Timestamps indicating the ADC capture time of the first sample\r
in the input buffer, the DAC output time of the first sample in the output buffer\r
- and the time the callback was invoked. \r
+ and the time the callback was invoked.\r
See PaStreamCallbackTimeInfo and Pa_GetStreamTime()\r
\r
@param statusFlags Flags indicating whether input and/or output buffers\r
\r
\r
/** Opens a stream for either input, output or both.\r
- \r
+\r
@param stream The address of a PaStream pointer which will receive\r
a pointer to the newly opened stream.\r
- \r
+\r
@param inputParameters A structure that describes the input parameters used by\r
the opened stream. See PaStreamParameters for a description of these parameters.\r
inputParameters must be NULL for output-only streams.\r
@param outputParameters A structure that describes the output parameters used by\r
the opened stream. See PaStreamParameters for a description of these parameters.\r
outputParameters must be NULL for input-only streams.\r
- \r
+\r
@param sampleRate The desired sampleRate. For full-duplex streams it is the\r
sample rate for both input and output\r
- \r
+\r
@param framesPerBuffer The number of frames passed to the stream callback\r
function, or the preferred block granularity for a blocking read/write stream.\r
The special value paFramesPerBufferUnspecified (0) may be used to request that\r
will be kept to the theoretical minimum however, it is strongly recommended\r
that a non-zero framesPerBuffer value only be used when your algorithm\r
requires a fixed number of frames per stream callback.\r
- \r
+\r
@param streamFlags Flags which modify the behavior of the streaming process.\r
This parameter may contain a combination of flags ORed together. Some flags may\r
only be relevant to certain buffer formats.\r
- \r
+\r
@param streamCallback A pointer to a client supplied function that is responsible\r
for processing and filling input and output buffers. If this parameter is NULL\r
the stream will be opened in 'blocking read/write' mode. In blocking mode,\r
function. It could for example, contain a pointer to instance data necessary\r
for processing the audio buffers. This parameter is ignored if streamCallback\r
is NULL.\r
- \r
+\r
@return\r
Upon success Pa_OpenStream() returns paNoError and places a pointer to a\r
valid PaStream in the stream argument. The stream is inactive (stopped).\r
\r
@param stream The address of a PaStream pointer which will receive\r
a pointer to the newly opened stream.\r
- \r
+\r
@param numInputChannels The number of channels of sound that will be supplied\r
to the stream callback or returned by Pa_ReadStream. It can range from 1 to\r
the value of maxInputChannels in the PaDeviceInfo record for the default input\r
provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream.\r
sampleFormat may be any of the formats described by the PaSampleFormat\r
enumeration.\r
- \r
+\r
@param sampleRate Same as Pa_OpenStream parameter of the same name.\r
@param framesPerBuffer Same as Pa_OpenStream parameter of the same name.\r
@param streamCallback Same as Pa_OpenStream parameter of the same name.\r
PaError Pa_CloseStream( PaStream *stream );\r
\r
\r
-/** Functions of type PaStreamFinishedCallback are implemented by PortAudio \r
+/** Functions of type PaStreamFinishedCallback are implemented by PortAudio\r
clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback\r
function. Once registered they are called when the stream becomes inactive\r
(ie once a call to Pa_StopStream() will not block).\r
output, if the stream callback returns paComplete, or Pa_StopStream is called,\r
the stream finished callback will not be called until all generated sample data\r
has been played.\r
- \r
+\r
@param userData The userData parameter supplied to Pa_OpenStream()\r
\r
@see Pa_SetStreamFinishedCallback\r
typedef void PaStreamFinishedCallback( void *userData );\r
\r
\r
-/** Register a stream finished callback function which will be called when the \r
- stream becomes inactive. See the description of PaStreamFinishedCallback for \r
+/** Register a stream finished callback function which will be called when the\r
+ stream becomes inactive. See the description of PaStreamFinishedCallback for\r
further details about when the callback will be called.\r
\r
@param stream a pointer to a PaStream that is in the stopped state - if the\r
- stream is not stopped, the stream's finished callback will remain unchanged \r
+ stream is not stopped, the stream's finished callback will remain unchanged\r
and an error code will be returned.\r
\r
@param streamFinishedCallback a pointer to a function with the same signature\r
\r
@see PaStreamFinishedCallback\r
*/\r
-PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); \r
+PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback );\r
\r
\r
/** Commences audio processing.\r
parameter passed to Pa_OpenStream().\r
*/\r
double sampleRate;\r
- \r
+\r
} PaStreamInfo;\r
\r
\r
\r
/** Returns the current time in seconds for a stream according to the same clock used\r
to generate callback PaStreamCallbackTimeInfo timestamps. The time values are\r
- monotonically increasing and have unspecified origin. \r
- \r
+ monotonically increasing and have unspecified origin.\r
+\r
Pa_GetStreamTime returns valid time values for the entire life of the stream,\r
from when the stream is opened until it is closed. Starting and stopping the stream\r
does not affect the passage of time returned by Pa_GetStreamTime.\r
\r
- This time may be used for synchronizing other events to the audio stream, for \r
+ This time may be used for synchronizing other events to the audio stream, for\r
example synchronizing audio to MIDI.\r
- \r
+\r
@return The stream's current time in seconds, or 0 if an error occurred.\r
\r
@see PaTime, PaStreamCallback, PaStreamCallbackTimeInfo\r
\r
This function may be called from the stream callback function or the\r
application.\r
- \r
+\r
@return\r
A floating point value, typically between 0.0 and 1.0, where 1.0 indicates\r
that the stream callback is consuming the maximum number of CPU cycles possible\r
system to supply the data.\r
\r
@param stream A pointer to an open stream previously created with Pa_OpenStream.\r
- \r
+\r
@param buffer A pointer to a buffer of sample frames. The buffer contains\r
samples in the format specified by the inputParameters->sampleFormat field\r
used to open the stream, and the number of channels specified by\r
inputParameters->numChannels. If non-interleaved samples were requested using\r
- the paNonInterleaved sample format flag, buffer is a pointer to the first element \r
+ the paNonInterleaved sample format flag, buffer is a pointer to the first element\r
of an array of buffer pointers, one non-interleaved buffer for each channel.\r
\r
@param frames The number of frames to be read into buffer. This parameter\r
samples in the format specified by the outputParameters->sampleFormat field\r
used to open the stream, and the number of channels specified by\r
outputParameters->numChannels. If non-interleaved samples were requested using\r
- the paNonInterleaved sample format flag, buffer is a pointer to the first element \r
+ the paNonInterleaved sample format flag, buffer is a pointer to the first element\r
of an array of buffer pointers, one non-interleaved buffer for each channel.\r
\r
@param frames The number of frames to be written from buffer. This parameter\r
## Auto Generated makefile by CodeLite IDE\r
## any manual changes will be erased \r
##\r
-## Release\r
+## Debug\r
ProjectName :=fdmdv2\r
-ConfigurationName :=Release\r
-IntermediateDirectory :=./Release\r
+ConfigurationName :=Debug\r
+IntermediateDirectory :=./Debug\r
OutDir := $(IntermediateDirectory)\r
WorkspacePath := "C:\Users\wittend\Projects\Radio\fdmdv2"\r
ProjectPath := "C:\Users\wittend\Projects\Radio\fdmdv2"\r
CurrentFilePath :=\r
CurrentFileFullPath :=\r
User :=wittend\r
-Date :=5/30/2012\r
+Date :=6/12/2012\r
CodeLitePath :="C:\Program Files\CodeLite"\r
LinkerName :=g++\r
ArchiveTool :=ar rcus\r
ObjectsFileList :="C:\Users\wittend\Projects\Radio\fdmdv2\fdmdv2.txt"\r
PCHCompileFlags :=\r
MakeDirCommand :=makedir\r
-CmpOptions := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) $(Preprocessors)\r
-C_CmpOptions := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) $(Preprocessors)\r
-LinkOptions := -mwindows -s $(shell wx-config --debug=no --libs --unicode=yes)\r
+CmpOptions := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) $(Preprocessors)\r
+C_CmpOptions := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) $(Preprocessors)\r
+LinkOptions := -mwindows $(shell wx-config --debug=yes --libs --unicode=yes)\r
IncludePath := $(IncludeSwitch). $(IncludeSwitch)./extern/include \r
IncludePCH := \r
RcIncludePath := \r
PATH:=$(WXWIN)\lib\gcc_dll;$(PATH)\r
WXCFG:=gcc_dll\mswu\r
UNIT_TEST_PP_SRC_DIR:=C:\bin\UnitTest++-1.3\r
-Objects=$(IntermediateDirectory)/topFrame$(ObjectSuffix) $(IntermediateDirectory)/dlg_about$(ObjectSuffix) $(IntermediateDirectory)/dlg_audio$(ObjectSuffix) $(IntermediateDirectory)/dlg_options$(ObjectSuffix) $(IntermediateDirectory)/dlg_comports$(ObjectSuffix) $(IntermediateDirectory)/fdmdv2_plot$(ObjectSuffix) $(IntermediateDirectory)/fdmdv2_main$(ObjectSuffix) \r
+Objects=$(IntermediateDirectory)/topFrame$(ObjectSuffix) $(IntermediateDirectory)/dlg_about$(ObjectSuffix) $(IntermediateDirectory)/dlg_audio$(ObjectSuffix) $(IntermediateDirectory)/dlg_options$(ObjectSuffix) $(IntermediateDirectory)/dlg_comports$(ObjectSuffix) $(IntermediateDirectory)/fdmdv2_plot$(ObjectSuffix) $(IntermediateDirectory)/fdmdv2_main$(ObjectSuffix) $(IntermediateDirectory)/paclass$(ObjectSuffix) \r
\r
##\r
## Main Build Targets \r
$(LinkerName) $(OutputSwitch)$(OutputFile) @$(ObjectsFileList) $(LibPath) $(Libs) $(LinkOptions)\r
\r
$(IntermediateDirectory)/.d:\r
- @$(MakeDirCommand) "./Release"\r
+ @$(MakeDirCommand) "./Debug"\r
\r
PreBuild:\r
\r
$(IntermediateDirectory)/fdmdv2_main$(PreprocessSuffix): fdmdv2_main.cpp\r
@$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/fdmdv2_main$(PreprocessSuffix) "C:/Users/wittend/Projects/Radio/fdmdv2/fdmdv2_main.cpp"\r
\r
+$(IntermediateDirectory)/paclass$(ObjectSuffix): paclass.cpp $(IntermediateDirectory)/paclass$(DependSuffix)\r
+ $(CompilerName) $(IncludePCH) $(SourceSwitch) "C:/Users/wittend/Projects/Radio/fdmdv2/paclass.cpp" $(CmpOptions) $(ObjectSwitch)$(IntermediateDirectory)/paclass$(ObjectSuffix) $(IncludePath)\r
+$(IntermediateDirectory)/paclass$(DependSuffix): paclass.cpp\r
+ @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/paclass$(ObjectSuffix) -MF$(IntermediateDirectory)/paclass$(DependSuffix) -MM "C:/Users/wittend/Projects/Radio/fdmdv2/paclass.cpp"\r
+\r
+$(IntermediateDirectory)/paclass$(PreprocessSuffix): paclass.cpp\r
+ @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/paclass$(PreprocessSuffix) "C:/Users/wittend/Projects/Radio/fdmdv2/paclass.cpp"\r
+\r
\r
-include $(IntermediateDirectory)/*$(DependSuffix)\r
##\r
$(RM) $(IntermediateDirectory)/fdmdv2_main$(ObjectSuffix)\r
$(RM) $(IntermediateDirectory)/fdmdv2_main$(DependSuffix)\r
$(RM) $(IntermediateDirectory)/fdmdv2_main$(PreprocessSuffix)\r
+ $(RM) $(IntermediateDirectory)/paclass$(ObjectSuffix)\r
+ $(RM) $(IntermediateDirectory)/paclass$(DependSuffix)\r
+ $(RM) $(IntermediateDirectory)/paclass$(PreprocessSuffix)\r
$(RM) $(OutputFile)\r
$(RM) $(OutputFile).exe\r
- $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-release\fdmdv2"\r
+ $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-debug\fdmdv2"\r
\r
\r
<File Name="dlg_comports.cpp"/>
<File Name="fdmdv2_plot.cpp"/>
<File Name="fdmdv2_main.cpp"/>
- <File Name="extern/include/portaudiocpp/AsioDeviceAdapter.hxx"/>
- <File Name="extern/include/portaudiocpp/AutoSystem.hxx"/>
- <File Name="extern/include/portaudiocpp/BlockingStream.hxx"/>
- <File Name="extern/include/portaudiocpp/CallbackInterface.hxx"/>
- <File Name="extern/include/portaudiocpp/CallbackStream.hxx"/>
- <File Name="extern/include/portaudiocpp/CFunCallbackStream.hxx"/>
- <File Name="extern/include/portaudiocpp/CppFunCallbackStream.hxx"/>
- <File Name="extern/include/portaudiocpp/Device.hxx"/>
- <File Name="extern/include/portaudiocpp/DirectionSpecificStreamParameters.hxx"/>
- <File Name="extern/include/portaudiocpp/Exception.hxx"/>
- <File Name="extern/include/portaudiocpp/HostApi.hxx"/>
- <File Name="extern/include/portaudiocpp/InterfaceCallbackStream.hxx"/>
- <File Name="extern/include/portaudiocpp/MemFunCallbackStream.hxx"/>
- <File Name="extern/include/portaudiocpp/PortAudioCpp.hxx"/>
- <File Name="extern/include/portaudiocpp/SampleDataFormat.hxx"/>
- <File Name="extern/include/portaudiocpp/Stream.hxx"/>
- <File Name="extern/include/portaudiocpp/StreamParameters.hxx"/>
- <File Name="extern/include/portaudiocpp/System.hxx"/>
- <File Name="extern/include/portaudiocpp/SystemDeviceIterator.hxx"/>
- <File Name="extern/include/portaudiocpp/SystemHostApiIterator.hxx"/>
+ <File Name="paclass.cpp"/>
</VirtualDirectory>
<VirtualDirectory Name="include">
<File Name="topFrame.h"/>
<File Name="extern/include/rig_dll.h"/>
<File Name="extern/include/riglist.h"/>
<File Name="extern/include/samplerate.h"/>
+ <VirtualDirectory Name="portaudio_cpp">
+ <File Name="extern/include/portaudiocpp/AsioDeviceAdapter.hxx"/>
+ <File Name="extern/include/portaudiocpp/AutoSystem.hxx"/>
+ <File Name="extern/include/portaudiocpp/BlockingStream.hxx"/>
+ <File Name="extern/include/portaudiocpp/CallbackInterface.hxx"/>
+ <File Name="extern/include/portaudiocpp/CallbackStream.hxx"/>
+ <File Name="extern/include/portaudiocpp/CFunCallbackStream.hxx"/>
+ <File Name="extern/include/portaudiocpp/CppFunCallbackStream.hxx"/>
+ <File Name="extern/include/portaudiocpp/Device.hxx"/>
+ <File Name="extern/include/portaudiocpp/DirectionSpecificStreamParameters.hxx"/>
+ <File Name="extern/include/portaudiocpp/Exception.hxx"/>
+ <File Name="extern/include/portaudiocpp/HostApi.hxx"/>
+ <File Name="extern/include/portaudiocpp/InterfaceCallbackStream.hxx"/>
+ <File Name="extern/include/portaudiocpp/MemFunCallbackStream.hxx"/>
+ <File Name="extern/include/portaudiocpp/PortAudioCpp.hxx"/>
+ <File Name="extern/include/portaudiocpp/SampleDataFormat.hxx"/>
+ <File Name="extern/include/portaudiocpp/Stream.hxx"/>
+ <File Name="extern/include/portaudiocpp/StreamParameters.hxx"/>
+ <File Name="extern/include/portaudiocpp/System.hxx"/>
+ <File Name="extern/include/portaudiocpp/SystemDeviceIterator.hxx"/>
+ <File Name="extern/include/portaudiocpp/SystemHostApiIterator.hxx"/>
+ </VirtualDirectory>
+ <File Name="paclass.h"/>
</VirtualDirectory>
<VirtualDirectory Name="resources">
<File Name="FDMDV2.fbp"/>
</GlobalSettings>
<Configuration Name="Debug" CompilerType="gnu g++" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
<Compiler Options="-g;-O0;-Wall;$(shell wx-config --cxxflags --unicode=yes --debug=yes)" C_Options="-g;-O0;-Wall;$(shell wx-config --cxxflags --unicode=yes --debug=yes)" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" UseDifferentPCHFlags="no" PCHFlags="">
+ <IncludePath Value="./extern/include"/>
<Preprocessor Value="__WX__"/>
</Compiler>
<Linker Options="-mwindows;$(shell wx-config --debug=yes --libs --unicode=yes)" Required="yes">
<LibraryPath Value="./libsndfile/bin"/>
+ <LibraryPath Value="./extern/lib"/>
<Library Value="libsndfile-1.dll"/>
+ <Library Value="libcodec2.a"/>
+ <Library Value="libportaudio.a"/>
+ <Library Value="libportaudiocpp.a"/>
</Linker>
<ResourceCompiler Options="$(shell wx-config --rcflags)" Required="no"/>
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Debug" Command="./$(ProjectName)" CommandArguments="" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="$(IntermediateDirectory)" PauseExecWhenProcTerminates="yes"/>
<CustomPostBuild/>
<CustomPreBuild/>
</AdditionalRules>
- <Completion>
+ <Completion EnableCpp11="no">
<ClangCmpFlags/>
<ClangPP/>
<SearchPaths/>
<CustomPostBuild/>
<CustomPreBuild/>
</AdditionalRules>
- <Completion>
+ <Completion EnableCpp11="no">
<ClangCmpFlags/>
<ClangPP/>
<SearchPaths/>
-./Release/topFrame.o ./Release/dlg_about.o ./Release/dlg_audio.o ./Release/dlg_options.o ./Release/dlg_comports.o ./Release/fdmdv2_plot.o ./Release/fdmdv2_main.o \r
+./Debug/topFrame.o ./Debug/dlg_about.o ./Debug/dlg_audio.o ./Debug/dlg_options.o ./Debug/dlg_comports.o ./Debug/fdmdv2_plot.o ./Debug/fdmdv2_main.o ./Debug/paclass.o \r
<Project Name="pa_test" Path="pa_test/pa_test.project" Active="No"/>
<Project Name="pa_cppbinding_test" Path="pa_cppbinding_test/pa_cppbinding_test.project" Active="No"/>
<BuildMatrix>
- <WorkspaceConfiguration Name="Debug" Selected="no">
+ <WorkspaceConfiguration Name="Debug" Selected="yes">
<Project Name="test_sndfile" ConfigName="Debug"/>
<Project Name="test_portaudio" ConfigName="Debug"/>
<Project Name="test_codec2" ConfigName="Debug"/>
<Project Name="pa_test" ConfigName="Debug"/>
<Project Name="pa_cppbinding_test" ConfigName="Debug"/>
</WorkspaceConfiguration>
- <WorkspaceConfiguration Name="Release" Selected="yes">
+ <WorkspaceConfiguration Name="Release" Selected="no">
<Project Name="test_sndfile" ConfigName="Release"/>
<Project Name="test_portaudio" ConfigName="Release"/>
<Project Name="test_codec2" ConfigName="Release"/>
// initialize the application\r
IMPLEMENT_APP(MainApp);\r
\r
-// `Main program' equivalent: the program execution "starts" here\r
//-------------------------------------------------------------------------\r
// OnInit()\r
//-------------------------------------------------------------------------\r
// m_bitmap = bitmap;\r
m_sound = NULL;\r
m_zoom = 1.;\r
+ m_SquelchActive = false;\r
\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// ~MainFrame()\r
+//-------------------------------------------------------------------------\r
MainFrame::~MainFrame()\r
{\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnCloseFrame()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnCloseFrame(wxCloseEvent& event)\r
{\r
Destroy();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnExitClick()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnExitClick(wxCommandEvent& event)\r
{\r
Destroy();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnPaint()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnPaint(wxPaintEvent& WXUNUSED(event))\r
{\r
wxPaintDC dc(this);\r
dc.DrawBitmap(m_bitmap, dc.DeviceToLogicalX((size.x - m_zoom * m_bitmap.GetWidth()) / 2), dc.DeviceToLogicalY((size.y - m_zoom * m_bitmap.GetHeight()) / 2), true);\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnCmdSliderScroll()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnCmdSliderScroll(wxScrollEvent& event)\r
{\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnCmdSliderScrollChanged()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnCmdSliderScrollChanged(wxScrollEvent& event)\r
{\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnSliderScrollTop()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnSliderScrollTop(wxScrollEvent& event)\r
{\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnSliderScrollBottom()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnSliderScrollBottom(wxScrollEvent& event)\r
{\r
wxMessageBox(wxT("Got Click!"), wxT("OnSliderScrollBottom"), wxOK);\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnCheckSQClick()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnCheckSQClick(wxCommandEvent& event)\r
{\r
- wxMessageBox(wxT("Got Click!"), wxT("OnCheckSQClick"), wxOK);\r
- event.Skip();\r
+ if(!m_SquelchActive)\r
+ {\r
+ m_SquelchActive = true;\r
+ //wxMessageBox(wxT("Squelch On!"), wxT("Squelch On"), wxOK);\r
+ }\r
+ else\r
+ {\r
+ m_SquelchActive = false;\r
+ //wxMessageBox(wxT("Squelch Off!"), wxT("Squelch Off"), wxOK);\r
+ }\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnTogBtnTXClick()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnTogBtnTXClick(wxCommandEvent& event)\r
{\r
m_soundFile = wxT("./hts1a.wav");\r
m_sound->Play();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnTogBtnRxID()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnTogBtnRxID(wxCommandEvent& event)\r
{\r
wxMessageBox("Got Click!", "OnTogBtnRxID", wxOK);\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnTogBtnTxID()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnTogBtnTxID(wxCommandEvent& event)\r
{\r
wxMessageBox("Got Click!", "OnTogBtnTxID", wxOK);\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnTogBtnSplitClick()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnTogBtnSplitClick(wxCommandEvent& event)\r
{\r
wxMessageBox("Got Click!", "OnTogBtnSplitClick", wxOK);\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnTogBtnAnalogClick()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnTogBtnAnalogClick (wxCommandEvent& event)\r
{\r
wxMessageBox("Got Click!", "OnTogBtnAnalogClick", wxOK);\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnTogBtnALCClick()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnTogBtnALCClick(wxCommandEvent& event)\r
{\r
wxMessageBox("Got Click!", "OnTogBtnALCClick", wxOK);\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// audioCallback()\r
+//-------------------------------------------------------------------------\r
+static int audioCallback( const void *inputBuffer,\r
+ void *outputBuffer,\r
+ unsigned long framesPerBuffer,\r
+ const PaStreamCallbackTimeInfo *outTime,\r
+ PaStreamCallbackFlags statusFlags,\r
+ void *userData\r
+ )\r
+{\r
+ float *out = (float *) outputBuffer;\r
+ float *in = (float *) inputBuffer;\r
+ float leftInput;\r
+ float rightInput;\r
+ unsigned int i;\r
+\r
+ if(inputBuffer == NULL)\r
+ {\r
+ return 0;\r
+ }\r
+ // Read input buffer, process data, and fill output buffer.\r
+ for(i = 0; i < framesPerBuffer; i++)\r
+ {\r
+ leftInput = *in++; // Get interleaved samples from input buffer.\r
+ rightInput = *in++;\r
+ *out++ = leftInput * rightInput; // ring modulation\r
+ *out++ = 0.5f * (leftInput + rightInput); // mixing\r
+ }\r
+ return paContinue; // 0;\r
+}
+\r
+/*\r
+#define FUZZ(x) CubicAmplifier(CubicAmplifier(CubicAmplifier(CubicAmplifier(x))))
+static int gNumNoInputs = 0;\r
+//-------------------------------------------------------------------------\r
+// fuzzCallback()\r
+//-------------------------------------------------------------------------\r
+static int fuzzCallback(const void *inputBuffer,
+ void *outputBuffer,
+ unsigned long framesPerBuffer,
+ const PaStreamCallbackTimeInfo* timeInfo,
+ PaStreamCallbackFlags statusFlags,
+ void *userData)
+{
+ SAMPLE *out = (SAMPLE*)outputBuffer;
+ const SAMPLE *in = (const SAMPLE*)inputBuffer;
+ unsigned int i;
+ (void) timeInfo; // Prevent unused variable warnings.
+ (void) statusFlags;
+ (void) userData;
+
+ if(inputBuffer == NULL)
+ {
+ for(i = 0; i < framesPerBuffer; i++)
+ {
+ *out++ = 0; // left - silent
+ *out++ = 0; // right - silent
+ }
+ gNumNoInputs += 1;
+ }
+ else
+ {
+ for(i = 0; i < framesPerBuffer; i++)
+ {
+ *out++ = FUZZ(*in++); // left - distorted
+ *out++ = *in++; // right - clean
+ }
+ }
+ return paContinue;
+}
+*/\r
+
+//-------------------------------------------------------------------------\r
+// OnTogBtnOnOff()\r
+//-------------------------------------------------------------------------\r
+void MainFrame::OnTogBtnOnOff(wxCommandEvent& event)\r
+{\r
+ PortAudioWrap pa;\r
+ if(!m_radioRunning)\r
+ {\r
+ m_radioRunning = true;\r
+ pa = PortAudioWrap();
+ err = pa.init();
+
+ inputDevice = pa.getDefaultInputDevice(); // default input device
+ if(inputDevice == paNoDevice)
+ {
+ wxMessageBox("Error: No default input device.", "Error", wxOK);\r
+ return;\r
+ }
+ err = pa.setInputDevice(inputDevice);
+ err = pa.setInputChannelCount(2); // stereo input
+ err = pa.setInputSampleFormat(PA_SAMPLE_TYPE);
+ err = pa.setInputLatency(pa.getInputDefaultLowLatency());\r
+ pa.setInputHostApiStreamInfo(NULL);
+
+ outputDevice = pa.getDefaultOutputDevice(); // default output device
+ if (outputDevice == paNoDevice)
+ {
+ wxMessageBox("Error: No default output device.", "Error", wxOK);\r
+ return;\r
+ }
+ err = pa.setOutputDevice(outputDevice);
+ err = pa.setOutputChannelCount(2); // stereo input
+ err = pa.setOutputSampleFormat(PA_SAMPLE_TYPE);\r
+
+ err = pa.setOutputLatency(pa.getOutputDefaultLowLatency());
+ pa.setOutputHostApiStreamInfo(NULL);
+
+ err = pa.setFramesPerBuffer(FRAMES_PER_BUFFER);
+ err = pa.setSampleRate(SAMPLE_RATE);
+ err = pa.setStreamFlags(0);
+ err = pa.setCallback(audioCallback);
+ err = pa.streamOpen();
+
+ if(err != paNoError)
+ {
+ wxMessageBox("Open/Setup error.", "Error", wxOK);\r
+ return;\r
+ }
+ err = pa.streamStart();
+ if(err != paNoError)
+ {
+ wxMessageBox("Stream Start Error.", "Error", wxOK);\r
+ return;\r
+ }
+ m_togBtnOnOff->SetLabel(wxT("Stop"));\r
+ }\r
+ else\r
+ {\r
+ m_radioRunning = false;\r
+ pa.terminate();
+ m_togBtnOnOff->SetLabel(wxT("Start"));\r
+ }\r
+}\r
+\r
+//-------------------------------------------------------------------------\r
+// OnOpen()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnOpen( wxCommandEvent& event )\r
{\r
- wxMessageBox("Got Click!", "OnOpen", wxOK);\r
- event.Skip();\r
+ if(m_sound != NULL)\r
+ {\r
+ if (wxMessageBox(wxT("Current content has not been saved! Proceed?"),wxT("Please confirm"), wxICON_QUESTION | wxYES_NO, this) == wxNO )\r
+ {\r
+ return;\r
+ }\r
+ }\r
+ wxFileDialog openFileDialog(this,\r
+ wxT("Open Sound file"),\r
+ wxEmptyString,\r
+ wxEmptyString,\r
+ wxT("WAV files (*.wav)|*.wav|")\r
+ wxT("RAW files (*.raw)|*.raw|")\r
+ wxT("SPEEX files (*.spx)|*.spx|")\r
+ wxT("FLAC files (*.flc)|*.flc|")\r
+ wxT("All files (*.*)|*.*|"),\r
+ wxFD_OPEN | wxFD_FILE_MUST_EXIST);\r
+ if (openFileDialog.ShowModal() == wxID_CANCEL)\r
+ {\r
+ return; // the user changed idea...\r
+ }\r
+ // proceed loading the file chosen by the user;\r
+ m_sound->Play(openFileDialog.GetPath());\r
+/*\r
+ // this can be done with e.g. wxWidgets input streams:\r
+ wxFileInputStream input_stream(openFileDialog.GetPath());\r
+ if (!input_stream.IsOk())\r
+ {\r
+ wxLogError("Cannot open file '%s'.", openFileDialog.GetPath());\r
+ return;\r
+ }\r
+*/\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnOpenUpdateUI()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnOpenUpdateUI( wxUpdateUIEvent& event )\r
{\r
// wxMessageBox("Got Click!", "OnOpenUpdateUI", wxOK);\r
// event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnSaveUpdateUI()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnSaveUpdateUI( wxUpdateUIEvent& event )\r
{\r
// wxMessageBox("Got Click!", "OnSaveUpdateUI", wxOK);\r
// event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnClose()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnClose( wxCommandEvent& event )\r
{\r
if(m_sound != NULL)\r
{\r
// if(m_sound->IsPlaying())\r
// {\r
- m_sound->Stop();\r
- m_sound = NULL;\r
+ m_sound->Stop();\r
+ m_sound = NULL;\r
// }\r
}\r
// wxMessageBox("Got Click!", "OnClose", wxOK);\r
// event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnCloseUpdateUI()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnCloseUpdateUI( wxUpdateUIEvent& event )\r
{\r
-// wxMessageBox("Got Click!", "OnCloseUpdateUI", wxOK);\r
-// event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnExit()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnExit( wxCommandEvent& event )\r
{\r
wxMessageBox("Got Click!", "OnExit", wxOK);\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnCopy()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnCopy( wxCommandEvent& event )\r
{\r
wxMessageBox("Got Click!", "OnCopy", wxOK);\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnCopyUpdateUI()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnCopyUpdateUI( wxUpdateUIEvent& event )\r
{\r
-// wxMessageBox("Got Click!", "OnCopyUpdateUI", wxOK);\r
-// event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnCut()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnCut( wxCommandEvent& event )\r
{\r
wxMessageBox("Got Click!", "OnCut", wxOK);\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnCutUpdateUI()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnCutUpdateUI( wxUpdateUIEvent& event )\r
{\r
-// wxMessageBox("Got Click!", "OnCutUpdateUI", wxOK);\r
-// event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnPaste()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnPaste( wxCommandEvent& event )\r
{\r
wxMessageBox("Got Click!", "OnPaste", wxOK);\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnPasteUpdateUI()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnPasteUpdateUI( wxUpdateUIEvent& event )\r
{\r
-// wxMessageBox("Got Click!", "OnPasteUpdateUI", wxOK);\r
-// event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnToolsOptions()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnToolsOptions( wxCommandEvent& event )\r
{\r
OptionsDlg *dlg = new OptionsDlg(NULL);\r
dlg->ShowModal();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnToolsOptionsUI()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnToolsOptionsUI( wxUpdateUIEvent& event )\r
{\r
-// OptionsDlg *dlg = new OptionsDlg(NULL);\r
-// dlg->ShowModal();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnToolsAudio()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnToolsAudio( wxCommandEvent& event )\r
{\r
AudioDlg *dlg = new AudioDlg(NULL);\r
dlg->ShowModal();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnToolsAudioUI()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnToolsAudioUI( wxUpdateUIEvent& event )\r
{\r
-// OptionsDlg *dlg = new OptionsDlg(NULL);\r
-// dlg->ShowModal();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnToolsComCfg()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnToolsComCfg( wxCommandEvent& event )\r
{\r
ComPortsDlg *dlg = new ComPortsDlg(NULL);\r
dlg->ShowModal();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnToolsComCfgUI()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnToolsComCfgUI( wxUpdateUIEvent& event )\r
{\r
event.Enable(!m_radioRunning);\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnHelpCheckUpdates()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnHelpCheckUpdates( wxCommandEvent& event )\r
{\r
wxMessageBox("Got Click!", "OnHelpCheckUpdates", wxOK);\r
event.Skip();\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnHelpCheckUpdatesUI()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnHelpCheckUpdatesUI( wxUpdateUIEvent& event )\r
{\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnHelpAbout()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnHelpAbout( wxCommandEvent& event )\r
{\r
AboutDlg *dlg = new AboutDlg(NULL);\r
}\r
\r
\r
+//-------------------------------------------------------------------------\r
+// LoadUserImage()\r
+//-------------------------------------------------------------------------\r
wxString MainFrame::LoadUserImage(wxImage& image)\r
{\r
wxString filename;\r
return filename;\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// OnSave()\r
+//-------------------------------------------------------------------------\r
void MainFrame::OnSave(wxCommandEvent& WXUNUSED(event))\r
{\r
wxImage image = m_bitmap.ConvertToImage();\r
\r
- wxString savefilename = wxFileSelector(wxT("Save Image"),\r
+ wxString savefilename = wxFileSelector(wxT("Save Sound File"),\r
wxEmptyString,\r
wxEmptyString,\r
(const wxChar *)NULL,\r
- wxT("BMP files (*.bmp)|*.bmp|")\r
- wxT("PNG files (*.png)|*.png|")\r
- wxT("JPEG files (*.jpg)|*.jpg|")\r
- wxT("GIF files (*.gif)|*.gif|")\r
- wxT("TIFF files (*.tif)|*.tif|")\r
- wxT("PCX files (*.pcx)|*.pcx|")\r
- wxT("ICO files (*.ico)|*.ico|")\r
- wxT("CUR files (*.cur)|*.cur"),\r
+ wxT("WAV files (*.wav)|*.wav|")\r
+ wxT("RAW files (*.raw)|*.raw|")\r
+ wxT("SPEEX files (*.spx)|*.spx|")\r
+ wxT("FLAC files (*.flc)|*.flc|"),\r
wxFD_SAVE,\r
this);\r
\r
#ifndef __FDMDV2_MAIN__
#define __FDMDV2_MAIN__
-#include <wx/wx.h>
-#include "wx/image.h"
+#include <wx/wx.h>\r
+
#include "wx/file.h"
#include "wx/filename.h"
#include "wx/graphics.h"
#include "wx/versioninfo.h"
#include <wx/sound.h>
#include <wx/thread.h>
+#include "libsndfile/include/sndfile.h"\r
+#include "extern/include/portaudio.h"
+#include "paclass.h"
+//#include "extern/include/portaudiocpp/PortAudioCpp.hxx"
\r
#include "topFrame.h"
+#include "codec2.h"
#include "dlg_about.h"\r
#include "dlg_audio.h"\r
#include "dlg_options.h"\r
return 0;
}
- protected:
+ protected:\r
//void DeleteBitmaps();
//bool LoadImages();
};
public:
MainFrame(wxWindow *parent);
virtual ~MainFrame();
- DrawPanel* m_panelSpectrum;\r
- DrawPanel* m_panelWaterfall;\r
- DrawPanel* m_panelExtra1;\r
- DrawPanel* m_panelExtra2;\r
- bool m_radioRunning;\r
+ DrawPanel* m_panelSpectrum;\r
+ DrawPanel* m_panelWaterfall;\r
+ DrawPanel* m_panelExtra1;\r
+ DrawPanel* m_panelExtra2;\r
+ bool m_radioRunning;\r
+ bool m_SquelchActive;\r
+ CODEC2 *m_RXCodec2;\r
+ CODEC2 *m_TXCodec2;\r
+ PaError err;
+ PaDeviceIndex inputDevice;
+ PaDeviceIndex outputDevice;
+
+// PortAudioWrap stream;\r
+// portaudio::AutoSystem autoSys;\r
+// portaudio::System *sys; // = portaudio::System::instance();\r
+// StreamParameters\r
\r
void DoStartThread();\r
void DoPauseThread();\r
void OnTogBtnRxID( wxCommandEvent& event );\r
void OnTogBtnTxID( wxCommandEvent& event );\r
void OnTogBtnTXClick( wxCommandEvent& event );\r
-
+ void OnTogBtnOnOff( wxCommandEvent& event );
void OnPaint(wxPaintEvent& event);
void OnClose( wxCloseEvent& event );
void OnSize( wxSizeEvent& event );
.PHONY: clean All
All:
- @echo ----------Building project:[ fdmdv2 - Release ]----------
- @"mingw32-make.exe" -j 2 -f "fdmdv2.mk"
+ @echo ----------Building project:[ test_sndfile - Debug ]----------
+ @cd "libsndfile\Projects\w32-mingw" && "mingw32-make.exe" -j 2 -f "test_sndfile.mk"
clean:
- @echo ----------Cleaning project:[ fdmdv2 - Release ]----------
- @"mingw32-make.exe" -j 2 -f "fdmdv2.mk" clean
+ @echo ----------Cleaning project:[ test_sndfile - Debug ]----------
+ @cd "libsndfile\Projects\w32-mingw" && "mingw32-make.exe" -j 2 -f "test_sndfile.mk" clean
## Auto Generated makefile by CodeLite IDE\r
## any manual changes will be erased \r
##\r
-## Release\r
+## Debug\r
ProjectName :=test_hamlib\r
-ConfigurationName :=Release\r
-IntermediateDirectory :=./Release\r
+ConfigurationName :=Debug\r
+IntermediateDirectory :=./Debug\r
OutDir := $(IntermediateDirectory)\r
WorkspacePath := "C:\Users\wittend\Projects\Radio\fdmdv2"\r
ProjectPath := "C:\Users\wittend\Projects\Radio\fdmdv2\hamlib-3.0\test_hamlib"\r
CurrentFilePath :=\r
CurrentFileFullPath :=\r
User :=wittend\r
-Date :=5/13/2012\r
+Date :=6/12/2012\r
CodeLitePath :="C:\Program Files\CodeLite"\r
LinkerName :=g++\r
ArchiveTool :=ar rcus\r
ObjectsFileList :="C:\Users\wittend\Projects\Radio\fdmdv2\hamlib-3.0\test_hamlib\test_hamlib.txt"\r
PCHCompileFlags :=\r
MakeDirCommand :=makedir\r
-CmpOptions := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) $(Preprocessors)\r
-C_CmpOptions := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) $(Preprocessors)\r
-LinkOptions := -s $(shell wx-config --debug=no --libs --unicode=yes)\r
+CmpOptions := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) $(Preprocessors)\r
+C_CmpOptions := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) $(Preprocessors)\r
+LinkOptions := $(shell wx-config --debug=yes --libs --unicode=yes)\r
IncludePath := $(IncludeSwitch). $(IncludeSwitch)../include/ \r
IncludePCH := \r
RcIncludePath := \r
$(LinkerName) $(OutputSwitch)$(OutputFile) @$(ObjectsFileList) $(LibPath) $(Libs) $(LinkOptions)\r
\r
$(IntermediateDirectory)/.d:\r
- @$(MakeDirCommand) "./Release"\r
+ @$(MakeDirCommand) "./Debug"\r
\r
PreBuild:\r
\r
$(RM) $(IntermediateDirectory)/main$(PreprocessSuffix)\r
$(RM) $(OutputFile)\r
$(RM) $(OutputFile).exe\r
- $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-release\test_hamlib"\r
+ $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-debug\test_hamlib"\r
\r
\r
## Auto Generated makefile by CodeLite IDE\r
## any manual changes will be erased \r
##\r
-## Release\r
+## Debug\r
ProjectName :=test_sndfile\r
-ConfigurationName :=Release\r
-IntermediateDirectory :=./Release\r
+ConfigurationName :=Debug\r
+IntermediateDirectory :=./Debug\r
OutDir := $(IntermediateDirectory)\r
WorkspacePath := "C:\Users\wittend\Projects\Radio\fdmdv2"\r
ProjectPath := "C:\Users\wittend\Projects\Radio\fdmdv2\libsndfile\Projects\w32-mingw"\r
CurrentFilePath :=\r
CurrentFileFullPath :=\r
User :=wittend\r
-Date :=5/24/2012\r
+Date :=6/12/2012\r
CodeLitePath :="C:\Program Files\CodeLite"\r
LinkerName :=g++\r
ArchiveTool :=ar rcus\r
ObjectsFileList :="C:\Users\wittend\Projects\Radio\fdmdv2\libsndfile\Projects\w32-mingw\test_sndfile.txt"\r
PCHCompileFlags :=\r
MakeDirCommand :=makedir\r
-CmpOptions := -O2 -Wall $(Preprocessors)\r
-C_CmpOptions := -O2 -Wall $(Preprocessors)\r
+CmpOptions := -g -O0 -Wall $(Preprocessors)\r
+C_CmpOptions := -g -O0 -Wall $(Preprocessors)\r
LinkOptions := \r
IncludePath := $(IncludeSwitch). $(IncludeSwitch). \r
IncludePCH := \r
$(LinkerName) $(OutputSwitch)$(OutputFile) @$(ObjectsFileList) $(LibPath) $(Libs) $(LinkOptions)\r
\r
$(IntermediateDirectory)/.d:\r
- @$(MakeDirCommand) "./Release"\r
+ @$(MakeDirCommand) "./Debug"\r
\r
PreBuild:\r
\r
$(RM) $(IntermediateDirectory)/main$(PreprocessSuffix)\r
$(RM) $(OutputFile)\r
$(RM) $(OutputFile).exe\r
- $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-release\test_sndfile"\r
+ $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-debug\test_sndfile"\r
\r
\r
## Auto Generated makefile by CodeLite IDE\r
## any manual changes will be erased \r
##\r
-## Release\r
+## Debug\r
ProjectName :=pa_cppbinding_test\r
-ConfigurationName :=Release\r
-IntermediateDirectory :=./Release\r
+ConfigurationName :=Debug\r
+IntermediateDirectory :=./Debug\r
OutDir := $(IntermediateDirectory)\r
WorkspacePath := "C:\Users\wittend\Projects\Radio\fdmdv2"\r
ProjectPath := "C:\Users\wittend\Projects\Radio\fdmdv2\pa_cppbinding_test"\r
CurrentFilePath :=\r
CurrentFileFullPath :=\r
User :=wittend\r
-Date :=5/29/2012\r
+Date :=6/12/2012\r
CodeLitePath :="C:\Program Files\CodeLite"\r
LinkerName :=g++\r
ArchiveTool :=ar rcus\r
ObjectsFileList :="C:\Users\wittend\Projects\Radio\fdmdv2\pa_cppbinding_test\pa_cppbinding_test.txt"\r
PCHCompileFlags :=\r
MakeDirCommand :=makedir\r
-CmpOptions := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) $(Preprocessors)\r
-C_CmpOptions := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) $(Preprocessors)\r
-LinkOptions := -mwindows -s $(shell wx-config --debug=no --libs --unicode=yes)\r
-IncludePath := $(IncludeSwitch). $(IncludeSwitch)./ $(IncludeSwitch)C:/bin/MinGW/msys/1.0/local/include $(IncludeSwitch)./portaudiocpp \r
+CmpOptions := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) $(Preprocessors)\r
+C_CmpOptions := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) $(Preprocessors)\r
+LinkOptions := -mwindows $(shell wx-config --debug=yes --libs --unicode=yes)\r
+IncludePath := $(IncludeSwitch). \r
IncludePCH := \r
RcIncludePath := \r
-Libs := $(LibrarySwitch)portaudiocpp-0 $(LibrarySwitch)portaudio-2 \r
+Libs := $(LibrarySwitch)portaudiocpp.la $(LibrarySwitch)portaudio.la \r
LibPath := $(LibraryPathSwitch). $(LibraryPathSwitch). \r
\r
\r
$(LinkerName) $(OutputSwitch)$(OutputFile) @$(ObjectsFileList) $(LibPath) $(Libs) $(LinkOptions)\r
\r
$(IntermediateDirectory)/.d:\r
- @$(MakeDirCommand) "./Release"\r
+ @$(MakeDirCommand) "./Debug"\r
\r
PreBuild:\r
\r
$(RM) $(IntermediateDirectory)/main$(PreprocessSuffix)\r
$(RM) $(OutputFile)\r
$(RM) $(OutputFile).exe\r
- $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-release\pa_cppbinding_test"\r
+ $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-debug\pa_cppbinding_test"\r
\r
\r
PaError PortAudioWrap::setInputChannelCount(int count)
{
- if(!isActive())
- {
+// if(!isActive())
+// {
inputBuffer.channelCount = count;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
PaError PortAudioWrap::setInputSampleFormat(PaSampleFormat format)
{
- if(!isActive())
- {
+// if(!isActive())
+// {
inputBuffer.sampleFormat = format;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
PaError PortAudioWrap::setInputLatency(PaTime latency)
{
- if(!isActive())
- {
+// if(!isActive())
+// {
inputBuffer.suggestedLatency = latency;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
\r
void PortAudioWrap::setInputHostApiStreamInfo(void *info)
PaError PortAudioWrap::setOutputChannelCount(int count)
{
- if(!isActive())
- {
+// if(!isActive())
+// {
outputBuffer.channelCount = count;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
PaError PortAudioWrap::setOutputSampleFormat(PaSampleFormat format)
{
- if(!isActive())
- {
+// if(!isActive())
+// {
outputBuffer.sampleFormat = format;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
PaError PortAudioWrap::setOutputLatency(PaTime latency)
{
- if(!isOpen())
- {
+// if(!isOpen())
+// {
outputBuffer.suggestedLatency = latency;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
void PortAudioWrap::setOutputHostApiStreamInfo(void *info)
PaError PortAudioWrap::setFramesPerBuffer(unsigned long size)
{
- if(!isOpen())
- {
+// if(!isOpen())
+// {
framesPerBuffer = size;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
PaError PortAudioWrap::setSampleRate(unsigned long rate)\r
{
- if(!isOpen())
- {
+// if(!isOpen())
+// {
samplerate = rate;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
PaError PortAudioWrap::setStreamFlags(PaStreamFlags flags)\r
{
- if(!isOpen())
- {
+// if(!isOpen())
+// {
statusFlags = flags;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
PaError PortAudioWrap::setInputDevice(PaDeviceIndex flags)\r
{
- if(!isOpen())
- {
+// if(!isOpen())
+// {
inputDevice = flags;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
PaError PortAudioWrap::setOutputDevice(PaDeviceIndex flags)\r
{
- if(!isOpen())
- {
+// if(!isOpen())
+// {
outputDevice = flags;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
PaError PortAudioWrap::setCallback(PaStreamCallback *callback)\r
{
- if(!isOpen())
- {
+// if(!isOpen())
+// {
streamCallback = callback;
return paNoError;
- }
- return paStreamIsNotStopped;
+// }
+// return paStreamIsNotStopped;
}
~PortAudioWrap();\r
\r
private:\r
- PaStream *stream;\r
- PaStreamParameters inputBuffer;
- PaStreamParameters outputBuffer;
- void *userData;\r
- int samplerate;\r
- unsigned long framesPerBuffer;
- PaStreamCallbackFlags statusFlags;\r
- PaStreamCallback *streamCallback;\r
- PaStreamFinishedCallback *streamFinishedCallback;\r
- const PaStreamCallbackTimeInfo* timeInfo;
- PaDeviceIndex inputDevice;
- PaDeviceIndex outputDevice;
+ PaStream *stream;\r
+ PaStreamParameters inputBuffer;
+ PaStreamParameters outputBuffer;
+ void *userData;\r
+ int samplerate;\r
+ unsigned long framesPerBuffer;
+ PaStreamCallbackFlags statusFlags;\r
+ PaStreamCallback *streamCallback;\r
+ PaStreamFinishedCallback *streamFinishedCallback;\r
+ const PaStreamCallbackTimeInfo *timeInfo;
+ PaDeviceIndex inputDevice;
+ PaDeviceIndex outputDevice;
\r
public:\r
ConfigurationName :=Debug\r
IntermediateDirectory :=./Debug\r
OutDir := $(IntermediateDirectory)\r
-WorkspacePath := "C:\Users\wittend\Projects\audio\portaudio_test\paEcho"\r
-ProjectPath := "C:\Users\wittend\Projects\audio\portaudio_test\paEcho\pa_test"\r
+WorkspacePath := "C:\Users\wittend\Projects\Radio\fdmdv2"\r
+ProjectPath := "C:\Users\wittend\Projects\Radio\fdmdv2\pa_test"\r
CurrentFileName :=\r
CurrentFilePath :=\r
CurrentFileFullPath :=\r
User :=wittend\r
-Date :=5/15/2012\r
+Date :=6/12/2012\r
CodeLitePath :="C:\Program Files\CodeLite"\r
LinkerName :=g++\r
ArchiveTool :=ar rcus\r
ObjectSwitch :=-o \r
ArchiveOutputSwitch := \r
PreprocessOnlySwitch :=-E \r
-ObjectsFileList :="C:\Users\wittend\Projects\audio\portaudio_test\paEcho\pa_test\pa_test.txt"\r
+ObjectsFileList :="C:\Users\wittend\Projects\Radio\fdmdv2\pa_test\pa_test.txt"\r
PCHCompileFlags :=\r
MakeDirCommand :=makedir\r
CmpOptions := -g -O0 -Wall $(Preprocessors)\r
C_CmpOptions := -g -O0 -Wall $(Preprocessors)\r
LinkOptions := \r
-IncludePath := $(IncludeSwitch). $(IncludeSwitch). $(IncludeSwitch)../../../portaudio/include \r
+IncludePath := $(IncludeSwitch). $(IncludeSwitch). $(IncludeSwitch)../extern/include $(IncludeSwitch)../../../portaudio/include \r
IncludePCH := \r
RcIncludePath := \r
Libs := $(LibrarySwitch)portaudio \r
## Objects\r
##\r
$(IntermediateDirectory)/pa_class$(ObjectSuffix): pa_class.cpp $(IntermediateDirectory)/pa_class$(DependSuffix)\r
- $(CompilerName) $(IncludePCH) $(SourceSwitch) "C:/Users/wittend/Projects/audio/portaudio_test/paEcho/pa_test/pa_class.cpp" $(CmpOptions) $(ObjectSwitch)$(IntermediateDirectory)/pa_class$(ObjectSuffix) $(IncludePath)\r
+ $(CompilerName) $(IncludePCH) $(SourceSwitch) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_test/pa_class.cpp" $(CmpOptions) $(ObjectSwitch)$(IntermediateDirectory)/pa_class$(ObjectSuffix) $(IncludePath)\r
$(IntermediateDirectory)/pa_class$(DependSuffix): pa_class.cpp\r
- @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/pa_class$(ObjectSuffix) -MF$(IntermediateDirectory)/pa_class$(DependSuffix) -MM "C:/Users/wittend/Projects/audio/portaudio_test/paEcho/pa_test/pa_class.cpp"\r
+ @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/pa_class$(ObjectSuffix) -MF$(IntermediateDirectory)/pa_class$(DependSuffix) -MM "C:/Users/wittend/Projects/Radio/fdmdv2/pa_test/pa_class.cpp"\r
\r
$(IntermediateDirectory)/pa_class$(PreprocessSuffix): pa_class.cpp\r
- @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/pa_class$(PreprocessSuffix) "C:/Users/wittend/Projects/audio/portaudio_test/paEcho/pa_test/pa_class.cpp"\r
+ @$(CompilerName) $(CmpOptions) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/pa_class$(PreprocessSuffix) "C:/Users/wittend/Projects/Radio/fdmdv2/pa_test/pa_class.cpp"\r
\r
\r
-include $(IntermediateDirectory)/*$(DependSuffix)\r
$(RM) $(IntermediateDirectory)/pa_class$(PreprocessSuffix)\r
$(RM) $(OutputFile)\r
$(RM) $(OutputFile).exe\r
- $(RM) "C:\Users\wittend\Projects\audio\portaudio_test\paEcho\.build-debug\pa_test"\r
+ $(RM) "C:\Users\wittend\Projects\Radio\fdmdv2\.build-debug\pa_test"\r
\r
\r
<VirtualDirectory Name="include">
<File Name="pa_class.h"/>
</VirtualDirectory>
+ <Dependencies Name="Debug"/>
+ <Dependencies Name="Release"/>
<Settings Type="Executable">
<GlobalSettings>
<Compiler Options="" C_Options="">
<Configuration Name="Debug" CompilerType="gnu g++" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
<Compiler Options="-g;-O0;-Wall" C_Options="-g;-O0;-Wall" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" UseDifferentPCHFlags="no" PCHFlags="">
<IncludePath Value="."/>
- <IncludePath Value="."/>
- <IncludePath Value="extern/include"/>
+ <IncludePath Value="../extern/include"/>
<IncludePath Value="../../../portaudio/include"/>
</Compiler>
<Linker Options="" Required="yes">
<CustomPostBuild/>
<CustomPreBuild/>
</AdditionalRules>
- <Completion>
+ <Completion EnableCpp11="no">
<ClangCmpFlags/>
<ClangPP/>
<SearchPaths/>
<CustomPostBuild/>
<CustomPreBuild/>
</AdditionalRules>
- <Completion>
+ <Completion EnableCpp11="no">
<ClangCmpFlags/>
<ClangPP/>
<SearchPaths/>
</Completion>
</Configuration>
</Settings>
- <Dependencies Name="Debug"/>
- <Dependencies Name="Release"/>
</CodeLite_Project>
--- /dev/null
+#include "paclass.h"
+
+PortAudioWrap::PortAudioWrap()
+{
+ stream = NULL;\r
+ userData = NULL;\r
+ samplerate = 0;\r
+ framesPerBuffer = 0;
+ statusFlags = 0;\r
+ streamCallback = NULL;\r
+ streamFinishedCallback = NULL;\r
+ timeInfo = 0;
+}
+
+PortAudioWrap::~PortAudioWrap()
+{
+}
+
+PaError PortAudioWrap::init()
+{
+ return Pa_Initialize();
+}
+
+PaError PortAudioWrap::streamOpen()\r
+{
+ return Pa_OpenStream(
+ &stream,
+ &inputBuffer,
+ &outputBuffer,
+ samplerate,
+ framesPerBuffer,
+ statusFlags,
+ *streamCallback,
+ userData
+ );
+}
+
+PaError PortAudioWrap::streamStart()\r
+{
+ return Pa_StartStream(this->stream);
+}
+
+PaError PortAudioWrap::streamClose()\r
+{
+ if(isOpen())
+ {
+ PaError rv = Pa_CloseStream(this->stream);
+ this->stream = NULL;
+ return rv;
+ }
+ else
+ {
+ return paNoError;
+ }
+}
+\r
+void PortAudioWrap::terminate()\r
+{
+ if(Pa_IsStreamStopped(stream) != paNoError)
+ {
+ Pa_StopStream(stream);
+ }
+ Pa_Terminate();
+}
+\r
+void PortAudioWrap::stop()
+{
+ Pa_StopStream(stream);
+}
+
+void PortAudioWrap::abort()
+{
+ Pa_AbortStream(stream);
+}
+
+bool PortAudioWrap::isStopped() const
+{
+ PaError ret = Pa_IsStreamStopped(stream);
+ return ret;
+}
+
+bool PortAudioWrap::isActive() const
+{
+ PaError ret = Pa_IsStreamActive(stream);
+ return ret;
+}
+
+bool PortAudioWrap::isOpen() const\r
+{\r
+ return (stream != NULL);\r
+}\r
+
+PaDeviceIndex PortAudioWrap::getDefaultInputDevice()
+{
+ return Pa_GetDefaultInputDevice();
+}
+
+PaDeviceIndex PortAudioWrap::getDefaultOutputDevice()
+{
+ return Pa_GetDefaultOutputDevice();
+}
+
+PaError PortAudioWrap::setInputChannelCount(int count)
+{
+ inputBuffer.channelCount = count;
+ return paNoError;
+}
+
+PaError PortAudioWrap::getInputChannelCount()
+{
+ return inputBuffer.channelCount;
+}
+
+PaError PortAudioWrap::setInputSampleFormat(PaSampleFormat format)
+{
+ inputBuffer.sampleFormat = format;
+ return paNoError;
+}
+
+PaError PortAudioWrap::setInputLatency(PaTime latency)
+{
+ inputBuffer.suggestedLatency = latency;
+ return paNoError;
+}
+\r
+void PortAudioWrap::setInputHostApiStreamInfo(void *info)
+{
+ inputBuffer.hostApiSpecificStreamInfo = info;
+}
+\r
+PaTime PortAudioWrap::getInputDefaultLowLatency()
+{
+ return Pa_GetDeviceInfo(inputBuffer.device)->defaultLowInputLatency;
+}
+
+PaError PortAudioWrap::setOutputChannelCount(int count)
+{
+ outputBuffer.channelCount = count;
+ return paNoError;
+}
+
+int PortAudioWrap::getOutputChannelCount()
+{
+ return outputBuffer.channelCount;
+}
+
+const char *PortAudioWrap::getDeviceName(PaDeviceIndex dev)
+{
+ const PaDeviceInfo *info;
+ info = Pa_GetDeviceInfo(dev);
+ return info->name;
+}
+
+PaError PortAudioWrap::setOutputSampleFormat(PaSampleFormat format)
+{
+ outputBuffer.sampleFormat = format;
+ return paNoError;
+}
+
+PaError PortAudioWrap::setOutputLatency(PaTime latency)
+{
+ outputBuffer.suggestedLatency = latency;
+ return paNoError;
+}
+
+void PortAudioWrap::setOutputHostApiStreamInfo(void *info)
+{
+ outputBuffer.hostApiSpecificStreamInfo = info;
+}
+
+PaTime PortAudioWrap::getOutputDefaultLowLatency()
+{
+ return Pa_GetDeviceInfo(outputBuffer.device)->defaultLowOutputLatency;
+}
+
+PaError PortAudioWrap::setFramesPerBuffer(unsigned long size)
+{
+ framesPerBuffer = size;
+ return paNoError;
+}
+
+PaError PortAudioWrap::setSampleRate(unsigned long rate)\r
+{
+ samplerate = rate;
+ return paNoError;
+}
+
+PaError PortAudioWrap::setStreamFlags(PaStreamFlags flags)\r
+{
+ statusFlags = flags;
+ return paNoError;
+}
+
+PaError PortAudioWrap::setInputDevice(PaDeviceIndex index)\r
+{
+// inputDevice = index;
+ inputBuffer.device = index;
+ return paNoError;
+}
+
+PaError PortAudioWrap::setOutputDevice(PaDeviceIndex index)\r
+{
+// outputDevice = index;
+ outputBuffer.device = index;
+ return paNoError;
+}
+
+PaError PortAudioWrap::setCallback(PaStreamCallback *callback)\r
+{
+ streamCallback = callback;
+ return paNoError;
+}
--- /dev/null
+#include <stdio.h>
+#include <math.h>
+#include "portaudio.h"
+\r
+// Note that many of the older ISA sound cards on PCs do NOT support
+// full duplex audio (simultaneous record and playback).
+// And some only support full duplex at lower sample rates.
+#define SAMPLE_RATE (44100)
+#define PA_SAMPLE_TYPE paFloat32 //paInt16
+#define FRAMES_PER_BUFFER (64)
+
+typedef float SAMPLE;
+
+float CubicAmplifier(float input);
+
+class PortAudioWrap\r
+{\r
+ public:\r
+ PortAudioWrap();\r
+ ~PortAudioWrap();\r
+\r
+ private:\r
+ PaStream *stream;\r
+ PaStreamParameters inputBuffer;
+ PaStreamParameters outputBuffer;
+ void *userData;\r
+ int samplerate;\r
+ unsigned long framesPerBuffer;
+ PaStreamCallbackFlags statusFlags;\r
+ PaStreamCallback *streamCallback;\r
+ PaStreamFinishedCallback *streamFinishedCallback;\r
+ const PaStreamCallbackTimeInfo *timeInfo;
+ PaDeviceIndex inputDevice;
+ PaDeviceIndex outputDevice;
+\r
+ public:\r
+
+ PaError streamOpen();\r
+\r
+ PaDeviceIndex getDefaultInputDevice();
+ PaDeviceIndex getDefaultOutputDevice();\r
+\r
+ PaStreamParameters *getDeviceInfo(PaDeviceIndex idx);\r
+ PaError setFramesPerBuffer(unsigned long size);\r
+ PaError setSampleRate(unsigned long size);\r
+ PaError setStreamFlags(PaStreamFlags flags);\r
+ PaError setCallback(PaStreamCallback *streamCallback);\r
+ PaError setStreamCallback(PaStream *stream, PaStreamCallback* callback ) { streamCallback = callback; return 0;}
+ PaError setStreamFinishedCallback(PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback );
+
+ PaError setInputDevice(PaDeviceIndex dev);\r
+ PaError setInputChannelCount(int count);
+ int getInputChannelCount();
+ PaError setInputSampleFormat(PaSampleFormat format);
+ PaError setInputSampleRate(PaSampleFormat format);
+ PaError setInputLatency(PaTime latency);\r
+ void setInputHostApiStreamInfo(void *info = NULL);\r
+ PaTime getInputDefaultLowLatency();
+ const char *getDeviceName(PaDeviceIndex dev);
+
+ PaError setOutputDevice(PaDeviceIndex dev);\r
+ PaError setOutputChannelCount(int count);
+ int getOutputChannelCount();
+ PaError setOutputSampleFormat(PaSampleFormat format);
+ PaError setOutputLatency(PaTime latency);
+ void setOutputHostApiStreamInfo(void *info = NULL);
+ PaTime getOutputDefaultLowLatency();
+\r
+ PaError init();\r
+ PaError streamStart();\r
+ PaError streamClose();\r
+ void terminate();\r
+ bool isOpen() const;\r
+ void stop();
+ void abort();
+ bool isStopped() const;
+ bool isActive() const;
+};\r
//==========================================================================\r
// Name: thread_audio.cpp\r
//\r
-// Purpose: Implements simple wxWidgets application with GUI.\r
+// Purpose: Implements a thread for processing an audio data stream.\r
// Created: May 11, 2012
// Initial author: David Witten\r
// License: BSD License (other licenses may apply to other\r
}\r
return 0;\r
}\r
+\r
+AudioThread::AudioThread()
+{
+}
+
+AudioThread::~AudioThread()
+{
+}
+
+void* AudioThread::Entry()
+{
+ return NULL;
+}
+void AudioThread::OnDelete()
+{
+}
+void AudioThread::OnExit()
+{
+}
+void AudioThread::OnKill()
+{
+}\r
+
+// bool Fdmdv2ThreadAudio::TestDestroy()
+// {
+// }
+\r
#ifdef PORTAUDIO_MAIN\r
/* Use a PortAudioStream to process audio data. */\r
int main(void)\r
#include <wx/thread.h>
#include "fdmdv2_main.h"\r
\r
+#ifndef __THREAD_AUDIO__
+#define __THREAD_AUDIO__
+\r
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
// Class AudioThread\r
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
public:\r
AudioThread(MainFrame *handler) : wxThread(wxTHREAD_DETACHED){ m_pHandler = handler; }\r
~AudioThread();\r
+ void *Entry();
+ void OnDelete();
+ void OnExit();
+ void OnKill();
+ bool TestDestroy();
\r
protected:\r
- virtual ExitCode Entry();\r
+ //ExitCode Entry();\r
MainFrame *m_pHandler;\r
};\r
\r
+ // declare a new type of event, to be used by our MyThread class:\r
+ wxDECLARE_EVENT(wxEVT_COMMAND_MYTHREAD_COMPLETED, wxThreadEvent);\r
+ wxDECLARE_EVENT(wxEVT_COMMAND_MYTHREAD_UPDATE, wxThreadEvent);\r
+ class MyFrame;\r
+\r
+ class MyThread : public wxThread\r
+ {\r
+ public:\r
+ MyThread(MyFrame *handler)\r
+ : wxThread(wxTHREAD_DETACHED)\r
+ { m_pHandler = handler }\r
+ ~MyThread();\r
+\r
+ protected:\r
+ virtual ExitCode Entry();\r
+ MyFrame *m_pHandler;\r
+ };\r
+\r
+ class MyFrame : public wxFrame\r
+ {\r
+ public:\r
+ ...\r
+ ~MyFrame()\r
+ {\r
+ // it's better to do any thread cleanup in the OnClose()\r
+ // event handler, rather than in the destructor.\r
+ // This is because the event loop for a top-level window is not\r
+ // active anymore when its destructor is called and if the thread\r
+ // sends events when ending, they won't be processed unless\r
+ // you ended the thread from OnClose.\r
+ // See @ref overview_windowdeletion for more info.\r
+ }\r
+ ...\r
+ void DoStartThread();\r
+ void DoPauseThread();\r
+\r
+ // a resume routine would be nearly identic to DoPauseThread()\r
+ void DoResumeThread() { ... }\r
+\r
+ void OnThreadUpdate(wxThreadEvent&);\r
+ void OnThreadCompletion(wxThreadEvent&);\r
+ void OnClose(wxCloseEvent&);\r
+\r
+ protected:\r
+ MyThread *m_pThread;\r
+ wxCriticalSection m_pThreadCS; // protects the m_pThread pointer\r
+\r
+ wxDECLARE_EVENT_TABLE();\r
+ };\r
+\r
+ wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)\r
+ EVT_CLOSE(MyFrame::OnClose)\r
+ EVT_MENU(Minimal_Start, MyFrame::DoStartThread)\r
+ EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_MYTHREAD_UPDATE, MyFrame::OnThreadUpdate)\r
+ EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_MYTHREAD_COMPLETED, MyFrame::OnThreadCompletion)\r
+ wxEND_EVENT_TABLE()\r
+\r
+ wxDEFINE_EVENT(wxEVT_COMMAND_MYTHREAD_COMPLETED, wxThreadEvent)\r
+ wxDEFINE_EVENT(wxEVT_COMMAND_MYTHREAD_UPDATE, wxThreadEvent)\r
+\r
+ void MyFrame::DoStartThread()\r
+ {\r
+ m_pThread = new MyThread(this);\r
+\r
+ if ( m_pThread->Create() != wxTHREAD_NO_ERROR )\r
+ {\r
+ wxLogError("Can't create the thread!");\r
+ delete m_pThread;\r
+ m_pThread = NULL;\r
+ }\r
+ else\r
+ {\r
+ if (m_pThread->Run() != wxTHREAD_NO_ERROR )\r
+ {\r
+ wxLogError("Can't create the thread!");\r
+ delete m_pThread;\r
+ m_pThread = NULL;\r
+ }\r
+\r
+ // after the call to wxThread::Run(), the m_pThread pointer is "unsafe":\r
+ // at any moment the thread may cease to exist (because it completes its work).\r
+ // To avoid dangling pointers OnThreadExit() will set m_pThread\r
+ // to NULL when the thread dies.\r
+ }\r
+ }\r
+\r
+ wxThread::ExitCode MyThread::Entry()\r
+ {\r
+ while (!TestDestroy())\r
+ {\r
+ // ... do a bit of work...\r
+\r
+ wxQueueEvent(m_pHandler, new wxThreadEvent(wxEVT_COMMAND_MYTHREAD_UPDATE));\r
+ }\r
+\r
+ // signal the event handler that this thread is going to be destroyed\r
+ // NOTE: here we assume that using the m_pHandler pointer is safe,\r
+ // (in this case this is assured by the MyFrame destructor)\r
+ wxQueueEvent(m_pHandler, new wxThreadEvent(wxEVT_COMMAND_MYTHREAD_COMPLETED));\r
+\r
+ return (wxThread::ExitCode)0; // success\r
+ }\r
+\r
+ MyThread::~MyThread()\r
+ {\r
+ wxCriticalSectionLocker enter(m_pHandler->m_pThreadCS);\r
+\r
+ // the thread is being destroyed; make sure not to leave dangling pointers around\r
+ m_pHandler->m_pThread = NULL;\r
+ }\r
+\r
+ void MyFrame::OnThreadCompletion(wxThreadEvent&)\r
+ {\r
+ wxMessageOutputDebug().Printf("MYFRAME: MyThread exited!\n");\r
+ }\r
+\r
+ void MyFrame::OnThreadUpdate(wxThreadEvent&)\r
+ {\r
+ wxMessageOutputDebug().Printf("MYFRAME: MyThread update...\n");\r
+ }\r
+\r
+ void MyFrame::DoPauseThread()\r
+ {\r
+ // anytime we access the m_pThread pointer we must ensure that it won't\r
+ // be modified in the meanwhile; since only a single thread may be\r
+ // inside a given critical section at a given time, the following code\r
+ // is safe:\r
+ wxCriticalSectionLocker enter(m_pThreadCS);\r
+\r
+ if (m_pThread) // does the thread still exist?\r
+ {\r
+ // without a critical section, once reached this point it may happen\r
+ // that the OS scheduler gives control to the MyThread::Entry() function,\r
+ // which in turn may return (because it completes its work) making\r
+ // invalid the m_pThread pointer\r
+\r
+ if (m_pThread->Pause() != wxTHREAD_NO_ERROR )\r
+ wxLogError("Can't pause the thread!");\r
+ }\r
+ }\r
+\r
+ void MyFrame::OnClose(wxCloseEvent&)\r
+ {\r
+ {\r
+ wxCriticalSectionLocker enter(m_pThreadCS);\r
+\r
+ if (m_pThread) // does the thread still exist?\r
+ {\r
+ wxMessageOutputDebug().Printf("MYFRAME: deleting thread");\r
+\r
+ if (m_pThread->Delete() != wxTHREAD_NO_ERROR )\r
+ wxLogError("Can't delete the thread!");\r
+ }\r
+ } // exit from the critical section to give the thread\r
+ // the possibility to enter its destructor\r
+ // (which is guarded with m_pThreadCS critical section!)\r
+\r
+ while (1)\r
+ {\r
+ { // was the ~MyThread() function executed?\r
+ wxCriticalSectionLocker enter(m_pThreadCS);\r
+ if (!m_pThread) break;\r
+ }\r
+\r
+ // wait for thread completion\r
+ wxThread::This()->Sleep(1);\r
+ }\r
+\r
+ Destroy();\r
+ }\r
+\r
+\r
+#endif // __THREAD_AUDIO__
snrSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("SNR") ), wxVERTICAL );\r
\r
m_gaugeSNR = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( 15,135 ), wxGA_SMOOTH|wxGA_VERTICAL );\r
+ m_gaugeSNR->SetToolTip( _("Display signal to noise ratio.") );\r
+ \r
snrSizer->Add( m_gaugeSNR, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 10 );\r
\r
wxBoxSizer* bSizer29;\r
bSizer29 = new wxBoxSizer( wxVERTICAL );\r
\r
m_textSNR = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxPoint( -1,-1 ), wxSize( 35,25 ), wxTE_READONLY );\r
+ m_textSNR->SetToolTip( _("Show S/N ratio numerically.") );\r
m_textSNR->SetMinSize( wxSize( 35,25 ) );\r
\r
bSizer29->Add( m_textSNR, 0, wxALIGN_CENTER|wxALL, 1 );\r
levelSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Level") ), wxVERTICAL );\r
\r
m_gaugeLevel = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( 15,135 ), wxGA_SMOOTH|wxGA_VERTICAL );\r
+ m_gaugeLevel->SetToolTip( _("Display signal level.") );\r
+ \r
levelSizer->Add( m_gaugeLevel, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 10 );\r
\r
\r
upperSizer = new wxBoxSizer( wxVERTICAL );\r
\r
m_auiNbookCtrl = new wxAuiNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_NB_BOTTOM|wxAUI_NB_DEFAULT_STYLE );\r
+ m_auiNbookCtrl->SetFont( wxFont( 6, 70, 90, 90, false, wxEmptyString ) );\r
+ \r
\r
upperSizer->Add( m_auiNbookCtrl, 1, wxALIGN_TOP|wxEXPAND, 1 );\r
\r
sbSizer3 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("SQ") ), wxVERTICAL );\r
\r
m_sliderSQ = new wxSlider( this, wxID_ANY, 50, 0, 100, wxDefaultPosition, wxSize( -1,100 ), wxSL_AUTOTICKS|wxSL_INVERSE|wxSL_VERTICAL );\r
+ m_sliderSQ->SetToolTip( _("Set Squelch level.") );\r
+ \r
sbSizer3->Add( m_sliderSQ, 2, wxALIGN_CENTER|wxALL, 1 );\r
\r
wxBoxSizer* bSizer131;\r
bSizer131 = new wxBoxSizer( wxVERTICAL );\r
\r
m_ckboxSQ = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );\r
+ m_ckboxSQ->SetToolTip( _("Activate/Deactivate Squelch") );\r
+ \r
bSizer131->Add( m_ckboxSQ, 0, wxALIGN_CENTER|wxALL, 5 );\r
\r
\r
sbSizer3->Add( bSizer131, 0, wxALIGN_CENTER, 5 );\r
\r
\r
- rightSizer->Add( sbSizer3, 3, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 3 );\r
+ rightSizer->Add( sbSizer3, 2, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 3 );\r
\r
wxStaticBoxSizer* sbSizer5;\r
sbSizer5 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Control") ), wxVERTICAL );\r
\r
+ wxBoxSizer* bSizer1511;\r
+ bSizer1511 = new wxBoxSizer( wxVERTICAL );\r
+ \r
+ m_togBtnOnOff = new wxToggleButton( this, wxID_ANY, _("Start"), wxDefaultPosition, wxDefaultSize, 0 );\r
+ m_togBtnOnOff->SetToolTip( _("Begin receiving data.") );\r
+ \r
+ bSizer1511->Add( m_togBtnOnOff, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
+ \r
+ \r
+ sbSizer5->Add( bSizer1511, 0, wxEXPAND, 1 );\r
+ \r
wxBoxSizer* bSizer151;\r
bSizer151 = new wxBoxSizer( wxVERTICAL );\r
\r
m_togBtnSplit = new wxToggleButton( this, wxID_ANY, _("Split"), wxDefaultPosition, wxDefaultSize, 0 );\r
- m_togBtnSplit->SetToolTip( _("Toggle Split mode.") );\r
+ m_togBtnSplit->SetToolTip( _("Toggle split frequency mode.") );\r
\r
bSizer151->Add( m_togBtnSplit, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
\r
bSizer14 = new wxBoxSizer( wxVERTICAL );\r
\r
m_togBtnALC = new wxToggleButton( this, wxID_ANY, _("ALC"), wxDefaultPosition, wxDefaultSize, 0 );\r
- m_togBtnALC->SetToolTip( _("Toggle ALC Mode.") );\r
+ m_togBtnALC->SetToolTip( _("Toggle automatic level control mode.") );\r
\r
bSizer14->Add( m_togBtnALC, 0, wxALL, 1 );\r
\r
bSizer11 = new wxBoxSizer( wxVERTICAL );\r
\r
m_btnTogTX = new wxToggleButton( this, wxID_ANY, _("TX"), wxDefaultPosition, wxDefaultSize, 0 );\r
+ m_btnTogTX->SetToolTip( _("Switch between Receive and Transmit") );\r
+ \r
bSizer11->Add( m_btnTogTX, 1, wxALIGN_CENTER|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1 );\r
\r
\r
m_sliderSQ->Connect( wxEVT_SCROLL_CHANGED, wxScrollEventHandler( TopFrame::OnCmdSliderScrollChanged ), NULL, this );\r
m_sliderSQ->Connect( wxEVT_SCROLL_TOP, wxScrollEventHandler( TopFrame::OnSliderScrollTop ), NULL, this );\r
m_ckboxSQ->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( TopFrame::OnCheckSQClick ), NULL, this );\r
+ m_togBtnOnOff->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( TopFrame::OnTogBtnOnOff ), NULL, this );\r
m_togBtnSplit->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( TopFrame::OnTogBtnSplitClick ), NULL, this );\r
m_togBtnAnalog->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( TopFrame::OnTogBtnAnalogClick ), NULL, this );\r
m_togBtnALC->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( TopFrame::OnTogBtnALCClick ), NULL, this );\r
m_sliderSQ->Disconnect( wxEVT_SCROLL_CHANGED, wxScrollEventHandler( TopFrame::OnCmdSliderScrollChanged ), NULL, this );\r
m_sliderSQ->Disconnect( wxEVT_SCROLL_TOP, wxScrollEventHandler( TopFrame::OnSliderScrollTop ), NULL, this );\r
m_ckboxSQ->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( TopFrame::OnCheckSQClick ), NULL, this );\r
+ m_togBtnOnOff->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( TopFrame::OnTogBtnOnOff ), NULL, this );\r
m_togBtnSplit->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( TopFrame::OnTogBtnSplitClick ), NULL, this );\r
m_togBtnAnalog->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( TopFrame::OnTogBtnAnalogClick ), NULL, this );\r
m_togBtnALC->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( TopFrame::OnTogBtnALCClick ), NULL, this );\r
bSizer34 = new wxBoxSizer( wxVERTICAL );\r
\r
wxStaticBoxSizer* sbSizer10;\r
- sbSizer10 = new wxStaticBoxSizer( new wxStaticBox( m_panelDevices, wxID_ANY, _("PortAudio") ), wxVERTICAL );\r
+ sbSizer10 = new wxStaticBoxSizer( new wxStaticBox( m_panelDevices, wxID_ANY, _("PortAudio") ), wxHORIZONTAL );\r
\r
wxBoxSizer* bSizer41;\r
bSizer41 = new wxBoxSizer( wxHORIZONTAL );\r
\r
- wxBoxSizer* bSizer37;\r
- bSizer37 = new wxBoxSizer( wxVERTICAL );\r
+ wxGridSizer* gSizer6;\r
+ gSizer6 = new wxGridSizer( 3, 1, 0, 0 );\r
\r
+ gSizer6->SetMinSize( wxSize( 115,-1 ) ); \r
m_radioBtnPortAudio = new wxRadioButton( m_panelDevices, wxID_ANY, _("PortAudio"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );\r
m_radioBtnPortAudio->SetValue( true ); \r
- bSizer37->Add( m_radioBtnPortAudio, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );\r
+ gSizer6->Add( m_radioBtnPortAudio, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );\r
+ \r
+ wxGridSizer* gSizer51;\r
+ gSizer51 = new wxGridSizer( 2, 2, 0, 0 );\r
+ \r
+ gSizer51->SetMinSize( wxSize( 110,-1 ) ); \r
+ m_staticText151 = new wxStaticText( m_panelDevices, wxID_ANY, _("# Ch Out:"), wxDefaultPosition, wxSize( 80,-1 ), wxALIGN_RIGHT );\r
+ m_staticText151->Wrap( -1 );\r
+ m_staticText151->SetFont( wxFont( 7, 70, 90, 90, false, wxEmptyString ) );\r
+ m_staticText151->SetMinSize( wxSize( 80,-1 ) );\r
+ m_staticText151->SetMaxSize( wxSize( 80,-1 ) );\r
+ \r
+ gSizer51->Add( m_staticText151, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL|wxEXPAND, 5 );\r
+ \r
+ m_textNumChOut = new wxTextCtrl( m_panelDevices, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 30,-1 ), wxTE_READONLY );\r
+ m_textNumChOut->SetFont( wxFont( 7, 70, 90, 90, false, wxEmptyString ) );\r
+ m_textNumChOut->SetMinSize( wxSize( 30,-1 ) );\r
+ m_textNumChOut->SetMaxSize( wxSize( 30,-1 ) );\r
+ \r
+ gSizer51->Add( m_textNumChOut, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL, 5 );\r
\r
+ m_staticText141 = new wxStaticText( m_panelDevices, wxID_ANY, _("# Ch In:"), wxDefaultPosition, wxSize( 80,-1 ), wxALIGN_RIGHT );\r
+ m_staticText141->Wrap( -1 );\r
+ m_staticText141->SetFont( wxFont( 7, 70, 90, 90, false, wxEmptyString ) );\r
+ m_staticText141->SetMinSize( wxSize( 80,-1 ) );\r
+ m_staticText141->SetMaxSize( wxSize( 90,-1 ) );\r
\r
- bSizer41->Add( bSizer37, 0, wxEXPAND, 5 );\r
+ gSizer51->Add( m_staticText141, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL|wxEXPAND, 5 );\r
+ \r
+ m_textNumChIn = new wxTextCtrl( m_panelDevices, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 30,-1 ), wxTE_READONLY );\r
+ m_textNumChIn->SetFont( wxFont( 7, 70, 90, 90, false, wxEmptyString ) );\r
+ m_textNumChIn->SetMinSize( wxSize( 30,-1 ) );\r
+ m_textNumChIn->SetMaxSize( wxSize( 30,-1 ) );\r
+ \r
+ gSizer51->Add( m_textNumChIn, 0, wxALL, 4 );\r
+ \r
+ \r
+ gSizer6->Add( gSizer51, 0, wxEXPAND, 5 );\r
+ \r
+ \r
+ bSizer41->Add( gSizer6, 0, wxALL, 5 );\r
\r
wxGridSizer* gSizer7;\r
- gSizer7 = new wxGridSizer( 4, 1, 0, 0 );\r
+ gSizer7 = new wxGridSizer( 4, 2, 0, 0 );\r
\r
- m_staticText14 = new wxStaticText( m_panelDevices, wxID_ANY, _("Audio in (mic) -> codec:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );\r
+ m_staticText14 = new wxStaticText( m_panelDevices, wxID_ANY, _("Audio in (mic) -> codec:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT|wxST_NO_AUTORESIZE );\r
m_staticText14->Wrap( -1 );\r
gSizer7->Add( m_staticText14, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
\r
- m_staticText15 = new wxStaticText( m_panelDevices, wxID_ANY, _("codec -> Radio Tx: "), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );\r
+ m_comboAudioCodec = new wxComboBox( m_panelDevices, wxID_ANY, _("<default>"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); \r
+ gSizer7->Add( m_comboAudioCodec, 1, wxALL, 5 );\r
+ \r
+ m_staticText15 = new wxStaticText( m_panelDevices, wxID_ANY, _("codec -> Radio Tx:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT|wxST_NO_AUTORESIZE );\r
m_staticText15->Wrap( -1 );\r
gSizer7->Add( m_staticText15, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
\r
- m_staticText16 = new wxStaticText( m_panelDevices, wxID_ANY, _("Radio Rx -> codec:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );\r
- m_staticText16->Wrap( -1 );\r
- gSizer7->Add( m_staticText16, 0, wxALIGN_RIGHT|wxALL, 5 );\r
+ m_comboCodecTx = new wxComboBox( m_panelDevices, wxID_ANY, _("<default>"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); \r
+ gSizer7->Add( m_comboCodecTx, 1, wxALL, 5 );\r
\r
- m_staticText17 = new wxStaticText( m_panelDevices, wxID_ANY, _("codec -> Audio out (spkr):"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );\r
- m_staticText17->Wrap( -1 );\r
- gSizer7->Add( m_staticText17, 0, wxALIGN_RIGHT|wxALL, 5 );\r
- \r
- \r
- bSizer41->Add( gSizer7, 1, wxEXPAND, 5 );\r
- \r
- wxGridSizer* gSizer5;\r
- gSizer5 = new wxGridSizer( 4, 1, 0, 0 );\r
- \r
- m_comboBox1 = new wxComboBox( m_panelDevices, wxID_ANY, _("Combo!"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); \r
- gSizer5->Add( m_comboBox1, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );\r
+ m_staticText16 = new wxStaticText( m_panelDevices, wxID_ANY, _("Radio Rx -> codec:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT|wxST_NO_AUTORESIZE );\r
+ m_staticText16->Wrap( -1 );\r
+ gSizer7->Add( m_staticText16, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
\r
- m_comboBox2 = new wxComboBox( m_panelDevices, wxID_ANY, _("Combo!"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); \r
- gSizer5->Add( m_comboBox2, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );\r
+ m_comboRadioRx = new wxComboBox( m_panelDevices, wxID_ANY, _("<default>"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); \r
+ gSizer7->Add( m_comboRadioRx, 1, wxALL, 5 );\r
\r
- m_comboBox11 = new wxComboBox( m_panelDevices, wxID_ANY, _("Combo!"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); \r
- gSizer5->Add( m_comboBox11, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );\r
+ m_staticText17 = new wxStaticText( m_panelDevices, wxID_ANY, _("codec -> Audio out (spkr):"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT|wxST_NO_AUTORESIZE );\r
+ m_staticText17->Wrap( -1 );\r
+ gSizer7->Add( m_staticText17, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );\r
\r
- m_comboBox12 = new wxComboBox( m_panelDevices, wxID_ANY, _("Combo!"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); \r
- gSizer5->Add( m_comboBox12, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );\r
+ m_comboCodecSpkr = new wxComboBox( m_panelDevices, wxID_ANY, _("<default>"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); \r
+ gSizer7->Add( m_comboCodecSpkr, 0, wxALL, 5 );\r
\r
\r
- bSizer41->Add( gSizer5, 1, wxEXPAND, 5 );\r
+ bSizer41->Add( gSizer7, 0, wxALL|wxEXPAND, 5 );\r
\r
\r
sbSizer10->Add( bSizer41, 1, wxEXPAND, 5 );\r
wxBoxSizer* bSizer38;\r
bSizer38 = new wxBoxSizer( wxVERTICAL );\r
\r
- m_radioBtnFileOnly = new wxRadioButton( m_panelDevices, wxID_ANY, _("File Only"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );\r
+ m_radioBtnFileOnly = new wxRadioButton( m_panelDevices, wxID_ANY, _("File Only"), wxDefaultPosition, wxDefaultSize, 0 );\r
bSizer38->Add( m_radioBtnFileOnly, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );\r
\r
\r
wxToggleButton* m_togTxID;\r
wxSlider* m_sliderSQ;\r
wxCheckBox* m_ckboxSQ;\r
+ wxToggleButton* m_togBtnOnOff;\r
wxToggleButton* m_togBtnSplit;\r
wxToggleButton* m_togBtnAnalog;\r
wxToggleButton* m_togBtnALC;\r
virtual void OnCmdSliderScrollChanged( wxScrollEvent& event ) { event.Skip(); }\r
virtual void OnSliderScrollTop( wxScrollEvent& event ) { event.Skip(); }\r
virtual void OnCheckSQClick( wxCommandEvent& event ) { event.Skip(); }\r
+ virtual void OnTogBtnOnOff( wxCommandEvent& event ) { event.Skip(); }\r
virtual void OnTogBtnSplitClick( wxCommandEvent& event ) { event.Skip(); }\r
virtual void OnTogBtnAnalogClick( wxCommandEvent& event ) { event.Skip(); }\r
virtual void OnTogBtnALCClick( wxCommandEvent& event ) { event.Skip(); }\r
public:\r
wxAuiNotebook* m_auiNbookCtrl;\r
\r
- TopFrame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("FDMDV2"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 732,507 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL );\r
+ TopFrame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("FDMDV2"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 761,500 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL );\r
\r
~TopFrame();\r
\r
wxNotebook* m_nbAudioOptions;\r
wxPanel* m_panelDevices;\r
wxRadioButton* m_radioBtnPortAudio;\r
+ wxStaticText* m_staticText151;\r
+ wxTextCtrl* m_textNumChOut;\r
+ wxStaticText* m_staticText141;\r
+ wxTextCtrl* m_textNumChIn;\r
wxStaticText* m_staticText14;\r
+ wxComboBox* m_comboAudioCodec;\r
wxStaticText* m_staticText15;\r
+ wxComboBox* m_comboCodecTx;\r
wxStaticText* m_staticText16;\r
+ wxComboBox* m_comboRadioRx;\r
wxStaticText* m_staticText17;\r
- wxComboBox* m_comboBox1;\r
- wxComboBox* m_comboBox2;\r
- wxComboBox* m_comboBox11;\r
- wxComboBox* m_comboBox12;\r
+ wxComboBox* m_comboCodecSpkr;\r
wxRadioButton* m_radioBtnFileOnly;\r
wxPanel* m_panelSettings;\r
wxListBox* m_lbRxInput;\r
\r
public:\r
\r
- DlgAudio( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Audio Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 553,381 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); \r
+ DlgAudio( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Audio Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 555,419 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); \r
~DlgAudio();\r
\r
};\r
class TopFrame ( wx.Frame ):\r
\r
def __init__( self, parent ):\r
- wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = _(u"FDMDV2"), pos = wx.DefaultPosition, size = wx.Size( 732,507 ), style = wx.DEFAULT_FRAME_STYLE|wx.RESIZE_BORDER|wx.TAB_TRAVERSAL )\r
+ wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = _(u"FDMDV2"), pos = wx.DefaultPosition, size = wx.Size( 761,500 ), style = wx.DEFAULT_FRAME_STYLE|wx.RESIZE_BORDER|wx.TAB_TRAVERSAL )\r
\r
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )\r
self.SetForegroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOWTEXT ) )\r
snrSizer = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, _(u"SNR") ), wx.VERTICAL )\r
\r
self.m_gaugeSNR = wx.Gauge( self, wx.ID_ANY, 100, wx.DefaultPosition, wx.Size( 15,135 ), wx.GA_SMOOTH|wx.GA_VERTICAL )\r
+ self.m_gaugeSNR.SetToolTipString( _(u"Display signal to noise ratio.") )\r
+ \r
snrSizer.Add( self.m_gaugeSNR, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 10 )\r
\r
bSizer29 = wx.BoxSizer( wx.VERTICAL )\r
\r
self.m_textSNR = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.Point( -1,-1 ), wx.Size( 35,25 ), wx.TE_READONLY )\r
+ self.m_textSNR.SetToolTipString( _(u"Show S/N ratio numerically.") )\r
self.m_textSNR.SetMinSize( wx.Size( 35,25 ) )\r
\r
bSizer29.Add( self.m_textSNR, 0, wx.ALIGN_CENTER|wx.ALL, 1 )\r
levelSizer = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, _(u"Level") ), wx.VERTICAL )\r
\r
self.m_gaugeLevel = wx.Gauge( self, wx.ID_ANY, 100, wx.DefaultPosition, wx.Size( 15,135 ), wx.GA_SMOOTH|wx.GA_VERTICAL )\r
+ self.m_gaugeLevel.SetToolTipString( _(u"Display signal level.") )\r
+ \r
levelSizer.Add( self.m_gaugeLevel, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 10 )\r
\r
\r
upperSizer = wx.BoxSizer( wx.VERTICAL )\r
\r
self.m_auiNbookCtrl = wx.aui.AuiNotebook( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.aui.AUI_NB_BOTTOM|wx.aui.AUI_NB_DEFAULT_STYLE )\r
+ self.m_auiNbookCtrl.SetFont( wx.Font( 6, 70, 90, 90, False, wx.EmptyString ) )\r
+ \r
\r
upperSizer.Add( self.m_auiNbookCtrl, 1, wx.ALIGN_TOP|wx.EXPAND, 1 )\r
\r
sbSizer3 = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, _(u"SQ") ), wx.VERTICAL )\r
\r
self.m_sliderSQ = wx.Slider( self, wx.ID_ANY, 50, 0, 100, wx.DefaultPosition, wx.Size( -1,100 ), wx.SL_AUTOTICKS|wx.SL_INVERSE|wx.SL_VERTICAL )\r
+ self.m_sliderSQ.SetToolTipString( _(u"Set Squelch level.") )\r
+ \r
sbSizer3.Add( self.m_sliderSQ, 2, wx.ALIGN_CENTER|wx.ALL, 1 )\r
\r
bSizer131 = wx.BoxSizer( wx.VERTICAL )\r
\r
self.m_ckboxSQ = wx.CheckBox( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.CHK_2STATE )\r
+ self.m_ckboxSQ.SetToolTipString( _(u"Activate/Deactivate Squelch") )\r
+ \r
bSizer131.Add( self.m_ckboxSQ, 0, wx.ALIGN_CENTER|wx.ALL, 5 )\r
\r
\r
sbSizer3.Add( bSizer131, 0, wx.ALIGN_CENTER, 5 )\r
\r
\r
- rightSizer.Add( sbSizer3, 3, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL|wx.EXPAND, 3 )\r
+ rightSizer.Add( sbSizer3, 2, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL|wx.EXPAND, 3 )\r
\r
sbSizer5 = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, _(u"Control") ), wx.VERTICAL )\r
\r
+ bSizer1511 = wx.BoxSizer( wx.VERTICAL )\r
+ \r
+ self.m_togBtnOnOff = wx.ToggleButton( self, wx.ID_ANY, _(u"Start"), wx.DefaultPosition, wx.DefaultSize, 0 )\r
+ self.m_togBtnOnOff.SetToolTipString( _(u"Begin receiving data.") )\r
+ \r
+ bSizer1511.Add( self.m_togBtnOnOff, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 1 )\r
+ \r
+ \r
+ sbSizer5.Add( bSizer1511, 0, wx.EXPAND, 1 )\r
+ \r
bSizer151 = wx.BoxSizer( wx.VERTICAL )\r
\r
self.m_togBtnSplit = wx.ToggleButton( self, wx.ID_ANY, _(u"Split"), wx.DefaultPosition, wx.DefaultSize, 0 )\r
- self.m_togBtnSplit.SetToolTipString( _(u"Toggle Split mode.") )\r
+ self.m_togBtnSplit.SetToolTipString( _(u"Toggle split frequency mode.") )\r
\r
bSizer151.Add( self.m_togBtnSplit, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 1 )\r
\r
bSizer14 = wx.BoxSizer( wx.VERTICAL )\r
\r
self.m_togBtnALC = wx.ToggleButton( self, wx.ID_ANY, _(u"ALC"), wx.DefaultPosition, wx.DefaultSize, 0 )\r
- self.m_togBtnALC.SetToolTipString( _(u"Toggle ALC Mode.") )\r
+ self.m_togBtnALC.SetToolTipString( _(u"Toggle automatic level control mode.") )\r
\r
bSizer14.Add( self.m_togBtnALC, 0, wx.ALL, 1 )\r
\r
bSizer11 = wx.BoxSizer( wx.VERTICAL )\r
\r
self.m_btnTogTX = wx.ToggleButton( self, wx.ID_ANY, _(u"TX"), wx.DefaultPosition, wx.DefaultSize, 0 )\r
+ self.m_btnTogTX.SetToolTipString( _(u"Switch between Receive and Transmit") )\r
+ \r
bSizer11.Add( self.m_btnTogTX, 1, wx.ALIGN_CENTER|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 1 )\r
\r
\r
self.m_sliderSQ.Bind( wx.EVT_SCROLL_CHANGED, self.OnCmdSliderScrollChanged )\r
self.m_sliderSQ.Bind( wx.EVT_SCROLL_TOP, self.OnSliderScrollTop )\r
self.m_ckboxSQ.Bind( wx.EVT_CHECKBOX, self.OnCheckSQClick )\r
+ self.m_togBtnOnOff.Bind( wx.EVT_TOGGLEBUTTON, self.OnTogBtnOnOff )\r
self.m_togBtnSplit.Bind( wx.EVT_TOGGLEBUTTON, self.OnTogBtnSplitClick )\r
self.m_togBtnAnalog.Bind( wx.EVT_TOGGLEBUTTON, self.OnTogBtnAnalogClick )\r
self.m_togBtnALC.Bind( wx.EVT_TOGGLEBUTTON, self.OnTogBtnALCClick )\r
def OnCheckSQClick( self, event ):\r
event.Skip()\r
\r
+ def OnTogBtnOnOff( self, event ):\r
+ event.Skip()\r
+ \r
def OnTogBtnSplitClick( self, event ):\r
event.Skip()\r
\r
class DlgAudio ( wx.Dialog ):\r
\r
def __init__( self, parent ):\r
- wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = _(u"Audio Options"), pos = wx.DefaultPosition, size = wx.Size( 553,381 ), style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER )\r
+ wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = _(u"Audio Options"), pos = wx.DefaultPosition, size = wx.Size( 555,419 ), style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER )\r
\r
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )\r
\r
self.m_panelDevices = wx.Panel( self.m_nbAudioOptions, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )\r
bSizer34 = wx.BoxSizer( wx.VERTICAL )\r
\r
- sbSizer10 = wx.StaticBoxSizer( wx.StaticBox( self.m_panelDevices, wx.ID_ANY, _(u"PortAudio") ), wx.VERTICAL )\r
+ sbSizer10 = wx.StaticBoxSizer( wx.StaticBox( self.m_panelDevices, wx.ID_ANY, _(u"PortAudio") ), wx.HORIZONTAL )\r
\r
bSizer41 = wx.BoxSizer( wx.HORIZONTAL )\r
\r
- bSizer37 = wx.BoxSizer( wx.VERTICAL )\r
+ gSizer6 = wx.GridSizer( 3, 1, 0, 0 )\r
\r
+ gSizer6.SetMinSize( wx.Size( 115,-1 ) ) \r
self.m_radioBtnPortAudio = wx.RadioButton( self.m_panelDevices, wx.ID_ANY, _(u"PortAudio"), wx.DefaultPosition, wx.DefaultSize, wx.RB_GROUP )\r
self.m_radioBtnPortAudio.SetValue( True ) \r
- bSizer37.Add( self.m_radioBtnPortAudio, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )\r
+ gSizer6.Add( self.m_radioBtnPortAudio, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )\r
\r
+ gSizer51 = wx.GridSizer( 2, 2, 0, 0 )\r
\r
- bSizer41.Add( bSizer37, 0, wx.EXPAND, 5 )\r
+ gSizer51.SetMinSize( wx.Size( 110,-1 ) ) \r
+ self.m_staticText151 = wx.StaticText( self.m_panelDevices, wx.ID_ANY, _(u"# Ch Out:"), wx.DefaultPosition, wx.Size( 80,-1 ), wx.ALIGN_RIGHT )\r
+ self.m_staticText151.Wrap( -1 )\r
+ self.m_staticText151.SetFont( wx.Font( 7, 70, 90, 90, False, wx.EmptyString ) )\r
+ self.m_staticText151.SetMinSize( wx.Size( 80,-1 ) )\r
+ self.m_staticText151.SetMaxSize( wx.Size( 80,-1 ) )\r
\r
- gSizer7 = wx.GridSizer( 4, 1, 0, 0 )\r
+ gSizer51.Add( self.m_staticText151, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL|wx.EXPAND, 5 )\r
\r
- self.m_staticText14 = wx.StaticText( self.m_panelDevices, wx.ID_ANY, _(u"Audio in (mic) -> codec:"), wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT )\r
- self.m_staticText14.Wrap( -1 )\r
- gSizer7.Add( self.m_staticText14, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 )\r
+ self.m_textNumChOut = wx.TextCtrl( self.m_panelDevices, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 30,-1 ), wx.TE_READONLY )\r
+ self.m_textNumChOut.SetFont( wx.Font( 7, 70, 90, 90, False, wx.EmptyString ) )\r
+ self.m_textNumChOut.SetMinSize( wx.Size( 30,-1 ) )\r
+ self.m_textNumChOut.SetMaxSize( wx.Size( 30,-1 ) )\r
\r
- self.m_staticText15 = wx.StaticText( self.m_panelDevices, wx.ID_ANY, _(u"codec -> Radio Tx: "), wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT )\r
- self.m_staticText15.Wrap( -1 )\r
- gSizer7.Add( self.m_staticText15, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 )\r
+ gSizer51.Add( self.m_textNumChOut, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 )\r
\r
- self.m_staticText16 = wx.StaticText( self.m_panelDevices, wx.ID_ANY, _(u"Radio Rx -> codec:"), wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT )\r
- self.m_staticText16.Wrap( -1 )\r
- gSizer7.Add( self.m_staticText16, 0, wx.ALIGN_RIGHT|wx.ALL, 5 )\r
+ self.m_staticText141 = wx.StaticText( self.m_panelDevices, wx.ID_ANY, _(u"# Ch In:"), wx.DefaultPosition, wx.Size( 80,-1 ), wx.ALIGN_RIGHT )\r
+ self.m_staticText141.Wrap( -1 )\r
+ self.m_staticText141.SetFont( wx.Font( 7, 70, 90, 90, False, wx.EmptyString ) )\r
+ self.m_staticText141.SetMinSize( wx.Size( 80,-1 ) )\r
+ self.m_staticText141.SetMaxSize( wx.Size( 90,-1 ) )\r
\r
- self.m_staticText17 = wx.StaticText( self.m_panelDevices, wx.ID_ANY, _(u"codec -> Audio out (spkr):"), wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT )\r
- self.m_staticText17.Wrap( -1 )\r
- gSizer7.Add( self.m_staticText17, 0, wx.ALIGN_RIGHT|wx.ALL, 5 )\r
+ gSizer51.Add( self.m_staticText141, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL|wx.EXPAND, 5 )\r
+ \r
+ self.m_textNumChIn = wx.TextCtrl( self.m_panelDevices, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 30,-1 ), wx.TE_READONLY )\r
+ self.m_textNumChIn.SetFont( wx.Font( 7, 70, 90, 90, False, wx.EmptyString ) )\r
+ self.m_textNumChIn.SetMinSize( wx.Size( 30,-1 ) )\r
+ self.m_textNumChIn.SetMaxSize( wx.Size( 30,-1 ) )\r
+ \r
+ gSizer51.Add( self.m_textNumChIn, 0, wx.ALL, 4 )\r
+ \r
+ \r
+ gSizer6.Add( gSizer51, 0, wx.EXPAND, 5 )\r
+ \r
+ \r
+ bSizer41.Add( gSizer6, 0, wx.ALL, 5 )\r
\r
+ gSizer7 = wx.GridSizer( 4, 2, 0, 0 )\r
\r
- bSizer41.Add( gSizer7, 1, wx.EXPAND, 5 )\r
+ self.m_staticText14 = wx.StaticText( self.m_panelDevices, wx.ID_ANY, _(u"Audio in (mic) -> codec:"), wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT|wx.ST_NO_AUTORESIZE )\r
+ self.m_staticText14.Wrap( -1 )\r
+ gSizer7.Add( self.m_staticText14, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 )\r
+ \r
+ m_comboAudioCodecChoices = []\r
+ self.m_comboAudioCodec = wx.ComboBox( self.m_panelDevices, wx.ID_ANY, _(u"<default>"), wx.DefaultPosition, wx.DefaultSize, m_comboAudioCodecChoices, 0 )\r
+ gSizer7.Add( self.m_comboAudioCodec, 1, wx.ALL, 5 )\r
+ \r
+ self.m_staticText15 = wx.StaticText( self.m_panelDevices, wx.ID_ANY, _(u"codec -> Radio Tx:"), wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT|wx.ST_NO_AUTORESIZE )\r
+ self.m_staticText15.Wrap( -1 )\r
+ gSizer7.Add( self.m_staticText15, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 )\r
\r
- gSizer5 = wx.GridSizer( 4, 1, 0, 0 )\r
+ m_comboCodecTxChoices = []\r
+ self.m_comboCodecTx = wx.ComboBox( self.m_panelDevices, wx.ID_ANY, _(u"<default>"), wx.DefaultPosition, wx.DefaultSize, m_comboCodecTxChoices, 0 )\r
+ gSizer7.Add( self.m_comboCodecTx, 1, wx.ALL, 5 )\r
\r
- m_comboBox1Choices = []\r
- self.m_comboBox1 = wx.ComboBox( self.m_panelDevices, wx.ID_ANY, _(u"Combo!"), wx.DefaultPosition, wx.DefaultSize, m_comboBox1Choices, 0 )\r
- gSizer5.Add( self.m_comboBox1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.EXPAND, 5 )\r
+ self.m_staticText16 = wx.StaticText( self.m_panelDevices, wx.ID_ANY, _(u"Radio Rx -> codec:"), wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT|wx.ST_NO_AUTORESIZE )\r
+ self.m_staticText16.Wrap( -1 )\r
+ gSizer7.Add( self.m_staticText16, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 )\r
\r
- m_comboBox2Choices = []\r
- self.m_comboBox2 = wx.ComboBox( self.m_panelDevices, wx.ID_ANY, _(u"Combo!"), wx.DefaultPosition, wx.DefaultSize, m_comboBox2Choices, 0 )\r
- gSizer5.Add( self.m_comboBox2, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.EXPAND, 5 )\r
+ m_comboRadioRxChoices = []\r
+ self.m_comboRadioRx = wx.ComboBox( self.m_panelDevices, wx.ID_ANY, _(u"<default>"), wx.DefaultPosition, wx.DefaultSize, m_comboRadioRxChoices, 0 )\r
+ gSizer7.Add( self.m_comboRadioRx, 1, wx.ALL, 5 )\r
\r
- m_comboBox11Choices = []\r
- self.m_comboBox11 = wx.ComboBox( self.m_panelDevices, wx.ID_ANY, _(u"Combo!"), wx.DefaultPosition, wx.DefaultSize, m_comboBox11Choices, 0 )\r
- gSizer5.Add( self.m_comboBox11, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.EXPAND, 5 )\r
+ self.m_staticText17 = wx.StaticText( self.m_panelDevices, wx.ID_ANY, _(u"codec -> Audio out (spkr):"), wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT|wx.ST_NO_AUTORESIZE )\r
+ self.m_staticText17.Wrap( -1 )\r
+ gSizer7.Add( self.m_staticText17, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 )\r
\r
- m_comboBox12Choices = []\r
- self.m_comboBox12 = wx.ComboBox( self.m_panelDevices, wx.ID_ANY, _(u"Combo!"), wx.DefaultPosition, wx.DefaultSize, m_comboBox12Choices, 0 )\r
- gSizer5.Add( self.m_comboBox12, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.EXPAND, 5 )\r
+ m_comboCodecSpkrChoices = []\r
+ self.m_comboCodecSpkr = wx.ComboBox( self.m_panelDevices, wx.ID_ANY, _(u"<default>"), wx.DefaultPosition, wx.DefaultSize, m_comboCodecSpkrChoices, 0 )\r
+ gSizer7.Add( self.m_comboCodecSpkr, 0, wx.ALL, 5 )\r
\r
\r
- bSizer41.Add( gSizer5, 1, wx.EXPAND, 5 )\r
+ bSizer41.Add( gSizer7, 0, wx.ALL|wx.EXPAND, 5 )\r
\r
\r
sbSizer10.Add( bSizer41, 1, wx.EXPAND, 5 )\r
\r
bSizer38 = wx.BoxSizer( wx.VERTICAL )\r
\r
- self.m_radioBtnFileOnly = wx.RadioButton( self.m_panelDevices, wx.ID_ANY, _(u"File Only"), wx.DefaultPosition, wx.DefaultSize, wx.RB_GROUP )\r
+ self.m_radioBtnFileOnly = wx.RadioButton( self.m_panelDevices, wx.ID_ANY, _(u"File Only"), wx.DefaultPosition, wx.DefaultSize, 0 )\r
bSizer38.Add( self.m_radioBtnFileOnly, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )\r
\r
\r
<resource xmlns="http://www.wxwindows.org/wxxrc" version="2.3.0.1">\r
<object class="wxFrame" name="TopFrame">\r
<style>wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL</style>\r
- <size>732,507</size>\r
+ <size>761,500</size>\r
<bg>#e3e3e3</bg>\r
<fg>#000000</fg>\r
<title>FDMDV2</title>\r
<object class="wxGauge" name="m_gaugeSNR">\r
<style>wxGA_SMOOTH|wxGA_VERTICAL</style>\r
<size>15,135</size>\r
+ <tooltip>Display signal to noise ratio.</tooltip>\r
<range>100</range>\r
<value>0</value>\r
</object>\r
<style>wxTE_READONLY</style>\r
<pos>-1,-1</pos>\r
<size>35,25</size>\r
+ <tooltip>Show S/N ratio numerically.</tooltip>\r
<value></value>\r
<maxlength>0</maxlength>\r
</object>\r
<object class="wxGauge" name="m_gaugeLevel">\r
<style>wxGA_SMOOTH|wxGA_VERTICAL</style>\r
<size>15,135</size>\r
+ <tooltip>Display signal level.</tooltip>\r
<range>100</range>\r
<value>0</value>\r
</object>\r
<object class="wxBoxSizer">\r
<orient>wxVERTICAL</orient>\r
<object class="sizeritem">\r
- <option>3</option>\r
+ <option>2</option>\r
<flag>wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND</flag>\r
<border>3</border>\r
<object class="wxStaticBoxSizer">\r
<object class="wxSlider" name="m_sliderSQ">\r
<style>wxSL_AUTOTICKS|wxSL_INVERSE|wxSL_VERTICAL</style>\r
<size>-1,100</size>\r
+ <tooltip>Set Squelch level.</tooltip>\r
<value>50</value>\r
<min>0</min>\r
<max>100</max>\r
<border>5</border>\r
<object class="wxCheckBox" name="m_ckboxSQ">\r
<style>wxCHK_2STATE</style>\r
+ <tooltip>Activate/Deactivate Squelch</tooltip>\r
<label></label>\r
<checked>0</checked>\r
</object>\r
<object class="wxStaticBoxSizer">\r
<orient>wxVERTICAL</orient>\r
<label>Control</label>\r
+ <object class="sizeritem">\r
+ <option>0</option>\r
+ <flag>wxEXPAND</flag>\r
+ <border>1</border>\r
+ <object class="wxBoxSizer">\r
+ <orient>wxVERTICAL</orient>\r
+ <object class="sizeritem">\r
+ <option>0</option>\r
+ <flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</flag>\r
+ <border>1</border>\r
+ <object class="wxToggleButton" name="m_togBtnOnOff">\r
+ <tooltip>Begin receiving data.</tooltip>\r
+ <label>Start</label>\r
+ <checked>0</checked>\r
+ </object>\r
+ </object>\r
+ </object>\r
+ </object>\r
<object class="sizeritem">\r
<option>0</option>\r
<flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND</flag>\r
<flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</flag>\r
<border>1</border>\r
<object class="wxToggleButton" name="m_togBtnSplit">\r
- <tooltip>Toggle Split mode.</tooltip>\r
+ <tooltip>Toggle split frequency mode.</tooltip>\r
<label>Split</label>\r
<checked>0</checked>\r
</object>\r
<flag>wxALL</flag>\r
<border>1</border>\r
<object class="wxToggleButton" name="m_togBtnALC">\r
- <tooltip>Toggle ALC Mode.</tooltip>\r
+ <tooltip>Toggle automatic level control mode.</tooltip>\r
<label>ALC</label>\r
<checked>0</checked>\r
</object>\r
<flag>wxALIGN_CENTER|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</flag>\r
<border>1</border>\r
<object class="wxToggleButton" name="m_btnTogTX">\r
+ <tooltip>Switch between Receive and Transmit</tooltip>\r
<label>TX</label>\r
<checked>0</checked>\r
</object>\r
</object>\r
<object class="wxDialog" name="DlgAudio">\r
<style>wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</style>\r
- <size>553,381</size>\r
+ <size>555,419</size>\r
<title>Audio Options</title>\r
<centered>1</centered>\r
<object class="wxBoxSizer">\r
<flag>wxEXPAND</flag>\r
<border>5</border>\r
<object class="wxStaticBoxSizer">\r
- <orient>wxVERTICAL</orient>\r
+ <orient>wxHORIZONTAL</orient>\r
<label>PortAudio</label>\r
<object class="sizeritem">\r
<option>1</option>\r
<orient>wxHORIZONTAL</orient>\r
<object class="sizeritem">\r
<option>0</option>\r
- <flag>wxEXPAND</flag>\r
+ <flag>wxALL</flag>\r
<border>5</border>\r
- <object class="wxBoxSizer">\r
- <orient>wxVERTICAL</orient>\r
+ <object class="wxGridSizer">\r
+ <minsize>115,-1</minsize>\r
+ <rows>3</rows>\r
+ <cols>1</cols>\r
+ <vgap>0</vgap>\r
+ <hgap>0</hgap>\r
<object class="sizeritem">\r
<option>1</option>\r
- <flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</flag>\r
+ <flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>\r
<border>5</border>\r
<object class="wxRadioButton" name="m_radioBtnPortAudio">\r
<style>wxRB_GROUP</style>\r
<value>1</value>\r
</object>\r
</object>\r
+ <object class="sizeritem">\r
+ <option>0</option>\r
+ <flag>wxEXPAND</flag>\r
+ <border>5</border>\r
+ <object class="wxGridSizer">\r
+ <minsize>110,-1</minsize>\r
+ <rows>2</rows>\r
+ <cols>2</cols>\r
+ <vgap>0</vgap>\r
+ <hgap>0</hgap>\r
+ <object class="sizeritem">\r
+ <option>1</option>\r
+ <flag>wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL|wxEXPAND</flag>\r
+ <border>5</border>\r
+ <object class="wxStaticText" name="m_staticText151">\r
+ <style>wxALIGN_RIGHT</style>\r
+ <size>80,-1</size>\r
+ <font>\r
+ <size>7</size>\r
+ <family>default</family>\r
+ <style>normal</style>\r
+ <weight>normal</weight>\r
+ <underlined>0</underlined>\r
+ </font>\r
+ <label># Ch Out:</label>\r
+ <wrap>-1</wrap>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem">\r
+ <option>1</option>\r
+ <flag>wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL</flag>\r
+ <border>5</border>\r
+ <object class="wxTextCtrl" name="m_textNumChOut">\r
+ <style>wxTE_READONLY</style>\r
+ <size>30,-1</size>\r
+ <font>\r
+ <size>7</size>\r
+ <family>default</family>\r
+ <style>normal</style>\r
+ <weight>normal</weight>\r
+ <underlined>0</underlined>\r
+ </font>\r
+ <value></value>\r
+ <maxlength>0</maxlength>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem">\r
+ <option>1</option>\r
+ <flag>wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL|wxEXPAND</flag>\r
+ <border>5</border>\r
+ <object class="wxStaticText" name="m_staticText141">\r
+ <style>wxALIGN_RIGHT</style>\r
+ <size>80,-1</size>\r
+ <font>\r
+ <size>7</size>\r
+ <family>default</family>\r
+ <style>normal</style>\r
+ <weight>normal</weight>\r
+ <underlined>0</underlined>\r
+ </font>\r
+ <label># Ch In:</label>\r
+ <wrap>-1</wrap>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem">\r
+ <option>0</option>\r
+ <flag>wxALL</flag>\r
+ <border>4</border>\r
+ <object class="wxTextCtrl" name="m_textNumChIn">\r
+ <style>wxTE_READONLY</style>\r
+ <size>30,-1</size>\r
+ <font>\r
+ <size>7</size>\r
+ <family>default</family>\r
+ <style>normal</style>\r
+ <weight>normal</weight>\r
+ <underlined>0</underlined>\r
+ </font>\r
+ <value></value>\r
+ <maxlength>0</maxlength>\r
+ </object>\r
+ </object>\r
+ </object>\r
+ </object>\r
</object>\r
</object>\r
<object class="sizeritem">\r
- <option>1</option>\r
- <flag>wxEXPAND</flag>\r
+ <option>0</option>\r
+ <flag>wxALL|wxEXPAND</flag>\r
<border>5</border>\r
<object class="wxGridSizer">\r
<rows>4</rows>\r
- <cols>1</cols>\r
+ <cols>2</cols>\r
<vgap>0</vgap>\r
<hgap>0</hgap>\r
<object class="sizeritem">\r
<flag>wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</flag>\r
<border>5</border>\r
<object class="wxStaticText" name="m_staticText14">\r
- <style>wxALIGN_RIGHT</style>\r
+ <style>wxALIGN_RIGHT|wxST_NO_AUTORESIZE</style>\r
<label>Audio in (mic) -> codec:</label>\r
<wrap>-1</wrap>\r
</object>\r
</object>\r
<object class="sizeritem">\r
- <option>0</option>\r
- <flag>wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</flag>\r
+ <option>1</option>\r
+ <flag>wxALL</flag>\r
<border>5</border>\r
- <object class="wxStaticText" name="m_staticText15">\r
- <style>wxALIGN_RIGHT</style>\r
- <label>codec -> Radio Tx: </label>\r
- <wrap>-1</wrap>\r
+ <object class="wxComboBox" name="m_comboAudioCodec">\r
+ <value><default></value>\r
+ <content />\r
</object>\r
</object>\r
<object class="sizeritem">\r
<option>0</option>\r
- <flag>wxALIGN_RIGHT|wxALL</flag>\r
+ <flag>wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</flag>\r
<border>5</border>\r
- <object class="wxStaticText" name="m_staticText16">\r
- <style>wxALIGN_RIGHT</style>\r
- <label>Radio Rx -> codec:</label>\r
+ <object class="wxStaticText" name="m_staticText15">\r
+ <style>wxALIGN_RIGHT|wxST_NO_AUTORESIZE</style>\r
+ <label>codec -> Radio Tx:</label>\r
<wrap>-1</wrap>\r
</object>\r
</object>\r
<object class="sizeritem">\r
- <option>0</option>\r
- <flag>wxALIGN_RIGHT|wxALL</flag>\r
+ <option>1</option>\r
+ <flag>wxALL</flag>\r
<border>5</border>\r
- <object class="wxStaticText" name="m_staticText17">\r
- <style>wxALIGN_RIGHT</style>\r
- <label>codec -> Audio out (spkr):</label>\r
- <wrap>-1</wrap>\r
+ <object class="wxComboBox" name="m_comboCodecTx">\r
+ <value><default></value>\r
+ <content />\r
</object>\r
</object>\r
- </object>\r
- </object>\r
- <object class="sizeritem">\r
- <option>1</option>\r
- <flag>wxEXPAND</flag>\r
- <border>5</border>\r
- <object class="wxGridSizer">\r
- <rows>4</rows>\r
- <cols>1</cols>\r
- <vgap>0</vgap>\r
- <hgap>0</hgap>\r
<object class="sizeritem">\r
<option>0</option>\r
- <flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND</flag>\r
+ <flag>wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</flag>\r
<border>5</border>\r
- <object class="wxComboBox" name="m_comboBox1">\r
- <value>Combo!</value>\r
- <content />\r
+ <object class="wxStaticText" name="m_staticText16">\r
+ <style>wxALIGN_RIGHT|wxST_NO_AUTORESIZE</style>\r
+ <label>Radio Rx -> codec:</label>\r
+ <wrap>-1</wrap>\r
</object>\r
</object>\r
<object class="sizeritem">\r
- <option>0</option>\r
- <flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND</flag>\r
+ <option>1</option>\r
+ <flag>wxALL</flag>\r
<border>5</border>\r
- <object class="wxComboBox" name="m_comboBox2">\r
- <value>Combo!</value>\r
+ <object class="wxComboBox" name="m_comboRadioRx">\r
+ <value><default></value>\r
<content />\r
</object>\r
</object>\r
<object class="sizeritem">\r
<option>0</option>\r
- <flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND</flag>\r
+ <flag>wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</flag>\r
<border>5</border>\r
- <object class="wxComboBox" name="m_comboBox11">\r
- <value>Combo!</value>\r
- <content />\r
+ <object class="wxStaticText" name="m_staticText17">\r
+ <style>wxALIGN_RIGHT|wxST_NO_AUTORESIZE</style>\r
+ <label>codec -> Audio out (spkr):</label>\r
+ <wrap>-1</wrap>\r
</object>\r
</object>\r
<object class="sizeritem">\r
<option>0</option>\r
- <flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND</flag>\r
+ <flag>wxALL</flag>\r
<border>5</border>\r
- <object class="wxComboBox" name="m_comboBox12">\r
- <value>Combo!</value>\r
+ <object class="wxComboBox" name="m_comboCodecSpkr">\r
+ <value><default></value>\r
<content />\r
</object>\r
</object>\r
<flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</flag>\r
<border>5</border>\r
<object class="wxRadioButton" name="m_radioBtnFileOnly">\r
- <style>wxRB_GROUP</style>\r
<label>File Only</label>\r
<value>0</value>\r
</object>\r