Are you seeing this as another version of the current RF12 protocol or another layer on top of RF12? As an extension of the existing protocol, I would say that it should be agreed with Jean-Claude for future compatibility, but if you think it as another layer using the RF12 as a lower level protocol, it would be an independent protocol. What we should also consider are the services provided by this new protocol:
1. Connection oriented or unconnected
2. Reliable communications (retries, time to live (timeouts), acknowledges...)
3. Order preserving
4. Packet assembly and disassembly into the lower layers (LEN not limited by the RF12 protocol)(How? Good question!)
5. More???
This would be like an hybrid approach, complements the RF12 protocol and provides new services keeping a certain independence (of course this can be implemented gradually). Take a look:
[CTL DST ACK DESTID5][OPCODE3 SRCID5][SEQ][LEN][DATA]
Still more overhead! (1 byte for RF12, 3 bytes for your version and 4 in mine!!!)
Since RF12 protocol does not include the SRCID, we are obliged to put it here. It has the same format as the original hdr, but leaving behind the bitmapped functions of the first three bits. These bits are now an OPCODE (just like Jean-Claude suggested as a change for the RF12 hdr).
As you can see, LEN is a byte, so packets of upto 255 bytes payload could be passed, if the SEQ numbers are specially tailored:
SEQ
Bits 7-3: packet sequence
Bits 2-0: frame (sub packet sequence)
Some ideas for the OPCODE
OPCODE
000 Unsequenced packet - Not acknowledged (No SEQ byte at all)
001 Sequenced packet - Acknowledge needed
010 ACK packet #SEQ - LEN=0, no DATA
011 SYNC ?? (Connection)
100 CONTINUE ?? (Connection)
101 SYNC ACK ?? (Connection)
110 RESET ?? (Connection)
111
What do you think? Myself, I think it is a big work, specially for an Arduino with no timed interrupts (timers are all assigned), 30KB flash, 2KB RAM (the high end, not even think of an ATmega8!)... and specially because I have 8 hours programing experience in Arduinos!!!
BTW, nice libs you mentioned. IMHO, the Arduino libs is the way to go... Just one more comment: error handling + FIFOs. Application should be aware of what has happened with the communications... and for retry/pending TX/RX, FIFOs are a good solution, I'll write a little lib (I didn't find anything in the Arduino Playgroud)