Start a new topic

Orba 2 Hacking Knowledge Base

image

This forum is intended to share Orba 2 hacking tips amongst the Orba 2 community. NOTE: Please post facts that are well understood & useful. If you have theories to discuss, please start another forum and link to it here.


2 people like this idea

P.S. actually it is four types  of tunings in collectiions, if we take chords into considerations:

tunings = {

    "1efc1a01a23c5f12c4d0b44a076c2d6d": {

        "Bass": {

            "tuning": "48, 50, 52, 53, 55, 57, 59, 60",

            "intervals": "P1, M2, M3, P4, P5, M6, M7, P8",

            "key": "C",

            "chord_minor": "n/a",

            "chord_major": "n/a",

            "name": "Major",

        },

        "Chords": {

            "tuning": "48, 50, 52, 53, 55, 57, 59, 60",

            "intervals": "P1, M2, M3, P4, P5, M6, M7, P8",

            "key": "C",

            "chord_minor": "0, 3, 7, 0; 0, 3, 8, 0; 0, 4, 7, 0; 0, 3, 7, 0; 0, 3, 7, 0; 0, 4, 7, 0; 0, 4, 7, 0; 0, 3, 7, 0; ",

            "chord_major": "0, 7, 12, 16; 0, 7, 12, 15; 0, 7, 12, 15; 0, 4, 7, 16; 0, 4, 7, 12; 0, 3, 7, 12; 0, 3, 12, -4; 0, 4, 12, -5; ",

            "name": "Major",

        },

        "Lead": {

            "tuning": "60, 62, 64, 67, 69, 72, 74, 76",

            "intervals": "P1, M2, M3, P5, M6, P8, M9, M10",

            "key": "C",

            "chord_minor": "n/a",

            "chord_major": "n/a",

            "name": "Major Pentatonic",

        },

    },

    "4ca3e15c6794d6f08ef95c6475ad0b61": {

        "Bass": {

            "tuning": "48, 50, 52, 53, 55, 57, 59, 60",

            "intervals": "P1, M2, M3, P4, P5, M6, M7, P8",

            "key": "C",

            "chord_minor": "n/a",

            "chord_major": "n/a",

            "name": "Major",

        },

        "Chords": {

            "tuning": "48, 50, 52, 53, 55, 57, 59, 60",

            "intervals": "P1, M2, M3, P4, P5, M6, M7, P8",

            "key": "C",

            "chord_minor": "0, 7, 15, 24; 0, 8, 15, 24; 0, 7, 16, 24; 0, 7, 15, 19; 0, 7, 15, 19; 0, 7, 12, 16; 0, 7, 12, 16; -12, 3, 12, 19; ",

            "chord_major": "0, 7, 16, 24; 0, 7, 15, 24; 0, 7, 15, 24; 0, 7, 16, 24; 0, 4, 12, 19; 0, 3, 12, 19; 0, 3, 8, 15; -12, 4, 12, 19; ",

            "name": "Major",

        },

        "Lead": {

            "tuning": "60, 62, 64, 67, 69, 72, 74, 76",

            "intervals": "P1, M2, M3, P5, M6, P8, M9, M10",

            "key": "C",

            "chord_minor": "n/a",

            "chord_major": "n/a",

            "name": "Major Pentatonic",

        },

    },

    "739dc66cb7f613dd50afb537615686fa": {

        "Bass": {

            "tuning": "57, 59, 60, 62, 64, 65, 67, 69",

            "intervals": "P1, M2, m3, P4, P5, m6, m7, P8",

            "key": "A",

            "chord_minor": "n/a",

            "chord_major": "n/a",

            "name": "Major",

        },

        "Chords": {

            "tuning": "57, 59, 60, 62, 64, 65, 67, 69",

            "intervals": "P1, M2, m3, P4, P5, m6, m7, P8",

            "key": "A",

            "chord_minor": "0, 3, 7, 0; 0, 3, 8, 0; 0, 4, 7, 0; 0, 3, 7, 0; 0, 3, 7, 0; 0, 4, 7, 0; 0, 4, 7, 0; 0, 3, 7, 0; ",

            "chord_major": "0, 7, 12, 16; 0, 7, 12, 15; 0, 7, 12, 15; 0, 4, 7, 16; 0, 4, 7, 12; 0, 3, 7, 12; 0, 3, 12, -4; 0, 4, 12, -5; ",

            "name": "Natural Minor",

        },

        "Lead": {

            "tuning": "69, 72, 74, 76, 79, 81, 84, 86",

            "intervals": "P1, m3, P4, P5, m7, P8, m10, P11",

            "key": "A",

            "chord_minor": "n/a",

            "chord_major": "n/a",

            "name": "Minor Pentatonic",

        },

    },

    "0b9b7ef83936a6d57302e117d13aa6f9": {

        "Bass": {

            "tuning": "50, 52, 53, 55, 57, 58, 60, 62",

            "intervals": "P1, M2, m3, P4, P5, m6, m7, P8",

            "key": "D",

            "chord_minor": "n/a",

            "chord_major": "n/a",

            "name": "Natural Minor",

        },

        "Chords": {

            "tuning": "50, 52, 53, 55, 57, 58, 60, 62",

            "intervals": "P1, M2, m3, P4, P5, m6, m7, P8",

            "key": "D",

            "chord_minor": "0, 3, 7, 0; 0, 3, 8, 0; 0, 4, 7, 0; 0, 3, 7, 0; 0, 3, 7, 0; 0, 4, 7, 0; 0, 4, 7, 0; 0, 3, 7, 0; ",

            "chord_major": "0, 7, 12, 16; 0, 7, 12, 15; 0, 7, 12, 15; 0, 4, 7, 16; 0, 4, 7, 12; 0, 3, 7, 12; 0, 3, 12, -4; 0, 4, 12, -5; ",

            "name": "Natural Minor",

        },

        "Lead": {

            "tuning": "62, 65, 67, 69, 72, 74, 77, 79",

            "intervals": "P1, m3, P4, P5, m7, P8, m10, P11",

            "key": "D",

            "chord_minor": "n/a",

            "chord_major": "n/a",

            "name": "Minor Pentatonic",

        },

    },

}


Thanks for this. When I first received my Orba 2, I had a look through the Orba 2 App binary and found the following:

  <TuningList category="percussion" keySelection="false">
    <TuningEntry name="All Kicks" />
    <TuningEntry name="Drum Kit" />
    <TuningEntry name="Electro Kit" />
  </TuningList>
  <TuningList category="tonal" keySelection="true">
      <TuningEntry name="Major"            type="tonal" intervals="P1, M2, M3, P4, P5, M6, M7, P8" />
      <TuningEntry name="Natural Minor"    type="tonal" intervals="P1, M2, m3, P4, P5, m6, m7, P8" />
      <TuningEntry name="Harmonic Minor"   type="tonal" intervals="P1, M2, m3, P4, P5, m6, M7, P8" />
      <TuningEntry name="Melodic Minor"    type="tonal" intervals="P1, M2, m3, P4, P5, M6, M7, P8" />
      <TuningEntry name="Major Pentatonic" type="tonal" intervals="P1, M2, M3, P5, M6, P8, M9, M10" />
      <TuningEntry name="Minor Pentatonic" type="tonal" intervals="P1, m3, P4, P5, m7, P8, m10, P11" />
      <!--
      <TuningEntry name="Dorian"     type="tonal" intervals="P1, M2, m3, P4, P5, M6, m7, P8" />
      <TuningEntry name="Phrygian"   type="tonal" intervals="P1, m2, m3, P4, P5, m6, m7, P8" />
      <TuningEntry name="Lydian"     type="tonal" intervals="P1, M2, M3, A4, P5, M6, M7, P8" />
      <TuningEntry name="Mixolydian" type="tonal" intervals="P1, M2, M3, P4, P5, M6, m7, P8" />
      <TuningEntry name="Locrian"    type="tonal" intervals="P1, m2, m3, P4, d5, m6, m7, P8" />
       -->
  </TuningList>

 I thought at one point I had succeeded in Harmonic Minor and Melodic Minor but I haven't been able to re-create this. I had tried setting tunings from the voices and also from the songs to see how to get these to take effect. I believe it had something to do with being in Chord mode but had not invested much time to figure this out. I found it interesting that there are other modes in there but they are commented out. This is likely because it really messes up Chord mode if you leave the current tunings.


1 person likes this

I have been trying to get to grips with synth based presets for the Orba 2.

I thought I would post what I've come to understand or suspect so far and hopefully it will be useful to others, and perhaps some can add their own input as well.


While the OrbaSynth app is only for Orba 1, it can be useful for the Orba 2 as a synthPatch from it can be pasted into a Orba 2 preset.

Unlike the Orba 1 the Orba 2 synth based presets don't have a Modifier List section, instead there is a Modifier Chain section but this seems to be un-used. The SeekerEntrys are now a set of parameters in human friendly-ish terms rather than the Base64 encoded strings. These things mean there are no Base64 strings to deal with at all. (I was misled about this at first because I was trying to convert Orba 1 presets for Orba 2.)


Seekers I guess are related to something like listeners which I have seen in PC programming where to get input from a device (eg: a digital pen) you have to add a listener to tell the computer to "listen" for it's output. The Seeker settings perhaps affect the way it handles or passes on these inputs.

In the SeekerEntrys the metricSelection can be Shake, MPE X, MPE Y, MPE Z. While these may seem to be for Midi output only, they do affect the Orba 2's standalone sound. As far as I can tell Shake refers to Shake events (obviously) for which midi may not have an equivalent (I don't know). MPE Z to Tilt, MPE Y to movement on the keypad from the circumference towards the A key, and MPE X from side to side on the keypad. But I'm not certain - it's just what I have observed.


I have been thinking of the SynthPatch in two parts. First the settings that relate to the oscilators, VCA, LFO etc. and the mod settings which I assume are relating to modifiers. If you change the first section eg: copy and paste from another preset it will affect the effects to some degree. In the case of pitch bend I found with the original synth settings I got a full tone pitch bend over 90 degrees tilt. With a different synth setting that became over 60 degrees (roughly) with no change in pitch beyond that.


The first seeker entry picks up the first touch of a keypad (perhaps it's lifting off as well) and so is necessary. The rest seem to be optional.


The mod section is a bit of a mystery to me still - it is divided into four groups mod1, mod2 etc. Each of the groups can have two or three divisions eg: mod1_2. I have some ideas about it but I've not established anything coherent about it yet. It is clearly dealing with modifying effects and I suspect each relates to a different effect - I guess some of those folks who have been hacking Orba1 presets may have ideas or knowledge about that.


I apologise if some or all of this is already known - but I hope it at least helps someone.


Thanks to SUbskybox,BJG145,Andrea Mannocci, Ignis32 and others. Even when I don't understand or it's not directly relevant to what I'm trying to do it still seems to help!

 

 

 

 

 

 

 

 

 

Oh, it's just dawned on me. The mod entries in the synthPatch define the parameters for each effect and the seekers tell the Orba when they should be used. So if there's no seeker to send the signal to an effect if won't do anything. (It seems to have a clear logic like that - even if I'm wrong!)

Oh, and another thought on seekers.

If the inMin and inMax defines the limits of what input  it will pay attention to, and the outMin and outMax are the top and bottom values it it will turn the input into for passing on -  this might explain some of the weird behaviour that has been noted elsewhere. The maxRate is then perhaps controlling how much data is being accepted - giving the device enough time to be able to process it.

Now I shall try and rest my weary mind.  

Last night I was playing about with Orbasynth trying to create a particular sound but what I was got to instead was a harmonica sound.

Today I decided to see how well it would work with pitch bend and tried some presets for the Orba 2.


One observation was that using pitch bend with the MPE Y setting was by far the best way of getting a realistic blues harp sound - however, as was discussed in an Orba 1 thread on pitch bend, it is also prone to creating a cacophony when two discordant notes are sounding at the same time. (MPE Y changed the pitch by moving the finger from close to the centre of the Orba towards the circumference and vice versa)

Using MPE X was good to use at all, I felt. 

Another thing was that I found the best way of using tilt was by holding the orba facing me and vertical. The scale was diatonic in C but I was effectively playing in D and using tilt to lower the pitch.

The pitch thing  also worked  well on the keys.


This begs the question - is it possible to reverse the actions of gestures? I mean making the effect on by default and diminished by the gesture. I've not worked out if I can get a viable gesture to go from below the true pitch to above it, and if that is actually practical - I suspect it might not.


SInce the voice I have seems to be pretty good I will experiment with it to see if I can make a good preset without pitch bend. But I would be interested if anyone wanted to try them and comment.

I have made two versions (both with the same id and hash so they can just be written over by the other.

v1 uses the tilt gesture, v2 uses movement on the keys. These versions are not the finished things.

zip
zip

@David Benton

Thanks for documenting this! I did know some of it, but it was really nice to confirm some of what is known. You are spot on with your Seeker / Listener analogy. There was another user who documented uids/sensors/cc#s for Seekers for Orba 1. I haven't had time yet to check them against Orba 2:


https://github.com/IanHalbwachs/orba-presets/blob/main/All%20Gestures.xml


I believe they simply started unrolling the Base64 stuff so that it was easier to edit and work with in the future:

<!-- tap [note] -->
<!-- tilt [cc1] -->
<!-- vibrato [pitch wheel] -->
<!-- spin [cc 112] -->
<!-- radiate [cc74] -->
<!-- press [channel pressure] -->
<!-- shake note [note 69] -->
<!-- shake cc [cc 2] -->
<!-- move cc [cc 113] -->
<!-- bump [note 39] -->

BE CAREFUL! I wouldn't mess with the Modifier Chains unless you really know what you are doing. I believe this data is written directly to specific memory pointers in Orba firmware space. This can overwrite important parts of the firmware and brick your device. As a rule of thumb do not change the length of any arrays or ModifierChain pointers because the current firmware does not validate this.


2 people like this

@Subskybox - I appreciate your reply, especially the warning about the Modifier Chains. I wasn't going to touch that section in the xml for now - but I might have in desperation to get something to work! With the mod entries  in the synth patch I have been copy and pasting entries from elsewhere and perhaps changing  values that have been used elsewhere. (and much the same with Seekers.)

I had seen Ian Walbachs  list and am currently trying to get an understanding of the seekers and this has helped - I'd like get to a point where I have the equivalent for the Orba 2.


By the way, I did have a thought about a glitch  with pitch bend that you or Ignis (I think) mentioned in the Orba 1 hacking thread - I wondered whether this could be a Y2K type problem - where when a value gets to a level where more bits are used they get misread. ie: if the program expects 4 bits but gets 8 it ignores the 4 high values, or perhaps only accepts them and ignores the lower bits. But that might be just my imagination running wild!



@Subskybox - and I should have said that your Pandrum preset is really nice - it has become my default preset - because it's the most fun to play.

Oh, and yesterday I noticed that all the inMax and outMax values used for pitch bend that I have found seem to vary by 171 or multiples of it. Not entirely certain what that means though. (I had expected that they might be on an exponential curve. I had wondered whether the changing the bezier curves might help produce a more natural sounding pitch bend - but my maths  isn't anywhere near good enough to even think of trying to change them!)

>> wouldn't mess with the Modifier Chains unless you really know what you are doing.


Actually,   I guess that's a Vietnam flashback from Orba1,  I've looked into presets I have on hand for Orba2 and there are no ModiferChains with modifierdata encoded stuff anymore. Could not find even one.


However we still have these cryptic curves data to be scared by.


Ive found only two unique values for event_curve_assignments_entry.curveAssignmentsData 


AQEBAQEBAQEBAQEBAQE=


AQEBAQEBAQEBAQQBAQE=


These mean the following in hex:


0101010101010101010101010101

0101010101010101010104010101



for gesture_curve_assignments_entry.curveAssignmentsData  there are 4 unique variants:




AQUFBQUFBQUFAQEBAQEBAQEBAQEBAQEBAQYGBgYGBgYGAQEFAQEBAQEEAQEBAQE=


AQUFBQUFBQUFAQEBAQEBAQEBAQEBAQEBAQMDAwMDAwMDAQEFAQEBAQEEAQEBAQE=


AQUFBQUFBQUFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFAQEBAQEEAQEBAQE=


AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEEAQEBAQE=


In hex that would be 

0105050505050505050101010101010101010101010101010106060606060606060101050101010101040101010101


0105050505050505050101010101010101010101010101010103030303030303030101050101010101040101010101


0105050505050505050101010101010101010101010101010101010101010101010101050101010101040101010101


0101010101010101010101010101010101010101010101010101010101010101010101010101010101040101010101




Bezier curves  (bezier_curves_entry.bezierCurvesData ) are much more diverse:


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



In hex it would be like:

0000000000000000 1b21db45b8799446 42d56346ad60d046 00feff4600feff46

0000000000000000 71f4a846a3c07544 52dffa46ed45e145 00feff4600feff46

0000000000000000 67981946d0d5a343 7b50384652dffa46 00feff4600feff46

0000000000000000 be279c46c2d5a343 a3c0f546c2d52344 00feff4600fe7f46

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46



0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4a846a3c07544 52dffa46ed45e145 00feff4600feff46 

0000000000000000 67981946d0d5a343 7b50384652dffa46 00feff4600feff46 

0000000000000000 be279c465832a243 4d31f346aca41b44 00feff4600fe7f46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46



0000000000000000 1b21db4530389446 27c86346ad60d046 00feff4600feff46 

0000000000000000 71f4a8468d8f6d44 52dffa46eb45e145 00feff4600feff46 

0000000000000000 67981946c2d5a343 7b50384652dffa46 00feff4600feff46 

0000000000000000 be279c465832a243 1b7ff546aca41b44 00feff4600fe7f46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46



0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4a8468d8f6d44 52dffa46eb45e145 00feff4600feff46 

0000000000000000 67981946c2d5a343 7b50384652dffa46 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46



0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4a8468e8f6d44 52dffa46ed45e145 00feff4600feff46 

0000000000000000 67981946c2d5a343 7b50384652dffa46 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46



0000000000000000 1b21db4530389446 27c86346ad60d046 00feff4600feff46 

0000000000000000 71f4a8468d8f6d44 52dffa46eb45e145 00feff4600feff46 

0000000000000000 67981946c2d5a343 7b50384652dffa46 00feff4600feff46 

0000000000000000 be279c46d2aba343 17baf5460d042344 00feff4600fe7f46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46



0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4a8468d8f6d44 52dffa46eb45e145 00feff4600feff46 

0000000000000000 67981946c2d5a343 7b50384652dffa46 00feff4600feff46 

0000000000000000 be279c465832a243 17baf546ff2d2344 00feff4600fe7f46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46 

0000000000000000 71f4284671f42846 71f4a84671f4a846 00feff4600feff46  


I've grouped hex data into four sets of 16 hex digits here, I think it has much more sense looking on data that way, maybe it will provide some insight on the data structure.


-------


Common pattern is that length of  data is always the same, so I think that it is true that you are at least never should change length when modifying.


>> BE CAREFUL! I wouldn't mess with the Modifier Chains unless you really know what you are doing. I believe this data is written directly to specific memory pointers in Orba firmware space.


I hope that these arrays are not loaded to permanent storage and just go to RAM, but at this point I would not bet my Orba2 on that.

 



It's possible to break the Orba 2 beyond the help of Artiphon tech support by hacking presets. I finally got round to sending mine back for replacement yesterday and look forward to catching up with some of the latest discoveries.

 

At the time I was messing around with entries like:

 

<SeekerEntry inputLength="Default" inMin="0" inMax="1" outMin="0" outMax="127"
 seekerType="Note" eventSource="Modifier 0 0" noteOffset="0"/>

 

...and made a random change to "Modifier 5 5" directly on the device. The result was a boot loop that neither me, Artiphon or @Subskybox could fix.

Wow, that's serious. Thank you for the warning, that part did not look that intimidating.


Did it not even go to the dfu mode? Theoretically there could be a service firmware that cleans the storage, and it could be nice to be prepared for this scenario,  but it is unlikely that we can do that on our own, unless we know the hardware specifics.


 At least, seems that ESP32 on board  with which I have some experience, is not the main processor, it seems to be  only responsible for providing the bluetooth connection.  ( esp32 part of the firmware had not changed since fw 1.0.10,  ble  mac address of Orba2 belongs to the Espressif range,  esp32 part of the firmware seems to contain only ble related IDF library strings and nothing else )


Main firmware seems to be the one that is   temari_XiP_BEE, it is most probably encrypted and  belongs to some nxp microcontroller, and that's beyond my expertise :(

I'd be happy to get back into rambling discussions about this thing, but I know that @SUbskybox was originally hoping to keep this thread fairly focussed so I don't know if I should start another thread for background conversarion, but just a bit more on this while I'm waiting for my new Orba 2...


The Orba 1 experiments were a long time ago and it's going to take me a while to catch up on what you've discovered about the Orba 2. But firstly, DFU mode...I'm not sure that the Orba 2 has what could strictly be called DFU mode, or not one we've found out how to access...? (I don't have any expert knowledge of this stuff.)

It was possible to boot the Orba 1 into a mode where it could be recognised as a DFU device by dfu-util IIRC, but the 'bootloader' mode on Orba 2 seems to work differently. It's not seen as a DFU device. Instead, the Vol/Power startup makes a bootloader partition available. The device also has a secondary "fallback" bootloader partition, and a data partition.

The mistake I made was to edit a preset as above directly on the data partition. It might be possible to mess it up in the same way by loading a preset; I'm not sure. What I think happened is that the Orba 2 would boot, attempt to load the default preset, fail/crash, and restart. 

You could still use Vol/Power to access one of the bootloader partitions, and after about 16 restarts it would give up and open the other. It was possible to reset/fix these; you could wipe them entirely and the Orba recovery options would rebuild them. However, these utilities don't fix or rebuild the data partition, and there was no way to access that. The only way into it in the first place was via a serial connection and console command, but after it got stuck in the boot loop it was no longer possible to connect to it to send it the command to open the data partition in order to repair it.

**********************************

I was just comparing omne of the old Orba 1 presets with an Orba 2 equivalent. With Orba 1 there were always these matched lists of "SeekerEntry" and "ModifierEntry". We made a little progress with understanding what these did but never fully mapped them out. Orba 2 presets still have the "SeekerEntry" lists, now readable, but not the "ModifierEntry" lists, but I don't know where they've gone; how whatever they did is handled now.

(PS I share your pain at not being able to edit posts; I must be more careful in future or I'll end up endlessly deleting them and re-posting them to fix typos like in the old days...can't be bothered with that...!)

Login or Signup to post a comment