18 June 2016

Lots of new code

The last week has seen very good progress on the programming front. I've added lots of new control functions, including control of VFO lock, APF, noise blanker (normal and wide) and ANR. All these functions have two components, on/off and level, so they each have the option to allocate a rotary encode and a switch to the function. All this is under the direction of the Profile file, so any switch (hardware or software) and any encoder can be optionally set to provide each function.

I've also taken the opportunity to tidy up a lot of the original code to bring it up to the same programming standards as the later code. Early code necessarily tends to be rather messy and fragmented, so it's a good plan to revisit it later in the project!

I thought you might be interested in an overall view of the development environment I am now running...


In the background you can see the Maestro, which is running on 6m and is the SSDR client. My controller is working with the Maestro and shows the same information. In front of the Maestro you can see the PCB, now fully populated with push buttons and encoders. In front of that is the controller stack, comprising an Arduino Due processor, Ethernet shield, LCD shield and LCD display.

Just in front of the Maestro you can perhaps see some ribbon cable sets, constructed ready for full hardware implementation on the PCB. These will connect the PCB to the processor stack in due course. You can also see a small toggle switch to the right of the PCB. This is the power control switch, which is completely software driven, as I discussed a while back.

With all these additions the default profile is now significantly more complex than it was a couple of months ago.



* G3WGVFlex controller default profile
* Note: files must follow 8.3 naming convention
* See FlexFunctions.h for list of control function names
* Manually updated: 2016-06-17

********** ENCODERS
* Encoder Shift0 & Shift1 values are the associated
* Control number

Encoder 0
Shift0 1
Shift1 2
/Encoder

Encoder 1
Shift0 0
Shift1 3
/Encoder

Encoder 2
Shift0 11
Shift1 12
/Encoder

Encoder 3
Shift0 9
Shift1 10
/Encoder

Encoder 4
Shift0 8
Shift1 15
/Encoder

Encoder 5
Shift0 13
Shift1 14
/Encoder

Encoder 6
Shift0 4
Shift1 5
/Encoder

Encoder 7
Shift0 6
Shift1 7
/Encoder

********** CONTROLS

Control 0
Enabled Yes
Name Volume-A
Function setAudioGain
Slice 0
Shift 0
MaxValue 100
MinValue 0
StepValue 1
/Control

Control 1
Enabled Yes
Name Width-A
Function setRxFiltWidth
Slice 0
MaxValue 10000
MinValue 100
StepValue 10
/Control

Control 2
Enabled Yes
Name Shift-A
Function setRxFiltShift
Slice 0
MaxValue 2000
MinValue -2000
StepValue 10
/Control

Control 3
Enabled Yes
Name Pan-A
Function setAudioPan
Slice 0
MaxValue 100
MinValue 0
StepValue 1
/Control

Control 4
Enabled Yes
Name Volume-B
Function setAudioGain
Slice 1
MaxValue 100
MinValue 0
StepValue 1
/Control

Control 5
Enabled Yes
Name Pan-B
Function setAudioPan
Slice 1
MaxValue 100
MinValue 0
StepValue 1
/Control

Control 6
Enabled Yes
Name Width-B
Function setRxFiltWidth
Slice 1
MaxValue 10000
MinValue 100
StepValue 10
/Control

Control 7
Enabled Yes
Name Shift-B
Function setRxFiltShift
Slice 1
MaxValue 2000
MinValue -2000
StepValue 10
/Control

Control 8
Enabled Yes
Name CW-speed
Function setCwSpeed
MaxValue 5
MinValue 40
StepValue 1
/Control

Control 9
Enabled Yes
Name TX-Power
Function setRfPower
MaxValue 0
MinValue 100
StepValue 1
/Control

Control 10
Enabled Yes
Name Tune-Power
Function setTunePower
MaxValue 0
MinValue 100
StepValue 1
/Control

Control 11
Enabled Yes
Name RIT-A
Function setRitFreq
Slice 0
MaxValue 10000
MinValue -10000
StepValue 10
/Control

Control 12
Enabled Yes
Name XIT-A
Function setXitFreq
Slice 0
MaxValue 10000
MinValue -10000
StepValue 10
/Control

Control 13
Enabled Yes
Name RIT-B
Function setRitFreq
Slice 1
MaxValue 10000
MinValue -10000
StepValue 10
/Control

Control 14
Enabled Yes
Name XIT-B
Function setXitFreq
Slice 1
MaxValue 10000
MinValue -10000
StepValue 10
/Control

Control 15
Enabled Yes
Name CW-pitch
Function setCwPitch
MaxValue 300
MinValue 1000
StepValue 10
/Control

Control 16
Enabled Yes
Name APF-A
Function setApfLevel
Slice 0
MaxValue 0
MinValue 100
StepValue 1
/Control

Control 17
Enabled Yes
Name APF-B
Function setApfLevel
Slice 1
MaxValue 0
MinValue 100
StepValue 1
/Control

Control 18
Enabled Yes
Name NB-A
Function setNbLevel
Slice 0
MaxValue 0
MinValue 100
StepValue 1
/Control

Control 19
Enabled Yes
Name NB-B
Function setNbLevel
Slice 1
MaxValue 0
MinValue 100
StepValue 1
/Control

Control 20
Enabled Yes
Name WNB-A
Function setWnbLevel
Slice 0
MaxValue 0
MinValue 100
StepValue 1
/Control

Control 21
Enabled Yes
Name WNB-B
Function setWnbLevel
Slice 1
MaxValue 0
MinValue 100
StepValue 1
/Control

Control 22
Enabled Yes
Name NR-A
Function setNrLevel
Slice 0
MaxValue 0
MinValue 100
StepValue 1
/Control

Control 23
Enabled Yes
Name NR-A
Function setNrLevel
Slice 0
MaxValue 0
MinValue 100
StepValue 1
/Control

Control 24
Enabled No
/Control

Control 25
Enabled No
/Control

Control 26
Enabled No
/Control

Control 27
Enabled No
/Control

Control 28
Enabled No
/Control

Control 29
Enabled No
/Control

Control 30
Enabled No
/Control

Control 31
Enabled No
/Control

********** SLICES

Slice 0
Name VFO-A
/Slice

Slice 1
Name VFO-B
/slice

Slice 2
Name Slice-3
/slice

Slice 3
Name Slice-4
/slice

********** VFOs

VFO 0
Enabled Yes
Name VFO-A
Slice 0
/VFO

VFO 1
Enabled Yes
Name VFO-B
Slice 1
/VFO

********** SWITCHES

Switch 0
Enabled Yes
Name VFOA-Band
Function swVFOABand
/Switch

Switch 1
Enabled Yes
Name VFOA-Mode
Function swVFOAMode
/Switch

Switch 2
Enabled Yes
Name ConfigDump
Function swConfigDump
/Switch

Switch 3
Enabled Yes
Name VFOA-Lock
Function swVFOALock
/Switch

Switch 4
Enabled Yes
Name VFOA-Rx
Function swVFOAReceive
/Switch

Switch 5
Enabled Yes
Name VFOA-Tx
Function swVFOATransmit
/Switch

Switch 6
Enabled No
/Switch

Switch 7
Enabled No
/Switch

Switch 8
Enabled No
/Switch

Switch 9
Enabled No
/Switch

Switch 10
Enabled Yes
Name Encoder-0
Function swEncoder0
/Switch

Switch 11
Enabled Yes
Name Encoder-1
Function swEncoder1
/Switch

Switch 12
Enabled Yes
Name Encoder-2
Function swEncoder2
/Switch

Switch 13
Enabled Yes
Name Encoder-3
Function swEncoder3
/Switch

Switch 14
Enabled Yes
Name Encoder-4
Function swEncoder4
/Switch

Switch 15
Enabled Yes
Name Encoder-5
Function swEncoder5
/Switch

Switch 16
Enabled No
/Switch

Switch 17
Enabled No
/Switch

Switch 18
Enabled No
/Switch

Switch 19
Enabled No
/Switch

Switch 20
Enabled Yes
Name VFOB-Rx
Function swVFOBReceive
/Switch

Switch 21
Enabled Yes
Name VFOB-Tx
Function swVFOBTransmit
/Switch

Switch 22
Enabled Yes
Name VFOB-Band
Function swVFOBBand
/Switch

Switch 23
Enabled Yes
Name VFOB-Mode
Function swVFOBMode
/Switch

Switch 24
Enabled No
/Switch

Switch 25
Enabled Yes
Name VFOB-Lock
Function swVFOBLock
/Switch

Switch 26
Enabled Yes
Name Encoder-7
Function swEncoder7
/Switch

Switch 27
Enabled Yes
Name Encoder-6
Function swEncoder6
/Switch

Switch 28
Enabled No
/Switch

Switch 29
Enabled No
/Switch

Switch 30
Enabled No
/Switch

Switch 31
Enabled Yes
Name Power
Function swPower
/Switch



Eventually, it will be possible to have multiple profile files and switch between them at will, making the panel layout completely user configurable. More code required!

2 comments:

  1. Hi John
    Looking good!
    Is your "vision" on the software side, for folk to directly code or set ini content, etc. to control / assign functionality to the various control surfaces and switches, etc., or, to have some form of admin / setup utility? Appreciate the latter can be at least as big a project as the main coding! I'm comfortable with either: just curious.
    73, Ian

    ReplyDelete
  2. Hi Ian,

    Don't know yet. One of the really interesting aspects of the profile approach is the idea of having multiple profiles, selectable at will. Obviously the profiles need to be selectable on the controller but whether they should/need to be editable on the controller is a quite different debate.

    One option, that I think may have "legs" is that profiles are created and managed by a Windows application and then uploaded to the controller. That would make it possible to have nice graphical representation of how the profile would look, using the big screen, keyboard and mouse to make adjustments. I already have the ability to upload profiles, so it's just a case of writing the Windows app to wrap around that functionality.

    73, John, 'WGV

    ReplyDelete