Close
0%
0%

Nikon N90/N90s Film Cameras utils

Modern utils to get datas out and configure the Nikon N90/F90 and N90s/F90x film cameras that talks the Data Link protocol.

Similar projects worth following
The N90/N90s film cameras from Nikon features a Data Link protocol (serial 1200 and 9600) that allows configuration of some "hidden" (from the main buttons) settings, and also enabling and retrieving "EXIF-like" datas, every roll made is recorded and for each frames iso, f-stop, etc.

My C/C++ coding with such things is very bad and I would love some help on that side.

The repository does contains test code in C++ and a pseudo-library for the Datalink protocol itself.

It also contains the source code of a very old linux app and a PalmOS 3.x one, both using the Datalink protocol, and some text files describing the protocol itself.

serial1.pcapng

An exhaustive dump using SoftTALK 2000 and loading all tabs

pcapng - 63.07 kB - 04/24/2021 at 14:55

Download

serial2.pcapng

Only launching SoftTALK 2000, and loading the Basic Controls pane

pcapng - 24.79 kB - 04/24/2021 at 14:55

Download

  • more debug

    Valérianne04/25/2021 at 06:04 0 comments

    I've added more debug, looks like everything pinpoints an issue in readDataPacket.

    Either the check byte or stop mark are wrong/weird, maybe some timing issue but I doubt. adding a startSession after the first sendCommand fix the second one, but doing so for the others leads to a segfault, so there is definitely something going on with the buffers.

    The repository is up to date, the two serial logs has been uploaded here.

    I'm giving up (for now maybe...) I can't understand what's going on, and I'm wasting too much time on that.

  • no progress, only findings

    Valérianne04/24/2021 at 14:53 0 comments

    I have been able to make two serial dumps (pcaps) of the serial communication between a N90s and a windows (obsolete) app.

    That confirmed some things that I did right, like the baudrate switch, it works, it's just the check that is failing, commented for now.

    I still have no clues about why the rest of the get_settings fails.

    Also cleaned some debugs and added better ones.

  • Can retrieve frame number but buffers issues are blocking

    Valérianne04/17/2021 at 16:11 1 comment

    I have started working on retrieving some settings and values, for now only the frame number works, everything else fails.

    It seems I have something wonky on the side of buffers, I get some of the identification string when i dataRead() after sending a command to retrieve the frame number... where it shouldn't since after the identification we should be "clean", adding some libserialport flush didn't help.

    dashie@ubuntu-shared:~/pikon$ ./pikon get_settings
    16:06:28 INFO  src/nikonDatalink.cpp:36: Starting session.
    16:06:28 INFO  src/nikonDatalink.cpp:133: libserialport version: 0.1.1
    16:06:28 INFO  src/nikonDatalink.cpp:134: Port name: /dev/ttyUSB0
    16:06:28 INFO  src/nikonDatalink.cpp:135: Description: FT232R USB UART - A50285BI
    16:06:28 INFO  src/nikonDatalink.cpp:169: Identifying camera...
    16:06:28 INFO  src/nikonDatalink.cpp:170: Sending wakeup string...
    16:06:28 INFO  src/nikonDatalink.cpp:184: Sending nikon inquiry string...
    16:06:30 INFO  src/nikonDatalink.cpp:184: Sending nikon inquiry string...
    16:06:30 INFO  src/nikonDatalink.cpp:55: Camera is a N90/F90
    Film present, frame 23
    ISO: 6
    Lens: id: 0 - focal min: - - ap min: 1
    Focale: -
    16:06:32 INFO  src/nikonDatalink.cpp:79: Ending session.

    Here everything after the frame should not be empty (ISO should be 400). It is to be noted that the frame counter returned by the Nikon is the next frame so here it does -1 to show the actual one.

    Verbosly annoying debug log:

    Notes:

    XXXXXXX is the limit between all the wakeup + identification part, and start of retrieval (sendCommand etc.)

    The first retrieval is at address 0x0000FD21 which is the frame counter, and the readData after that command seems to return "F90/N90" which is part of the identification string. After ident we should be clear but something is wrong, adding libserialport flush didn't helped.

    Somehow the retrieval of frame number ends up working, but every sendCommand after that fails and returns garbage.

    Also adding a longer sleep (like 3 seconds) after ident make everything fails, but it might be due to how the protocol/mcu works.

    16:14:01 INFO  src/nikonDatalink.cpp:169: Identifying camera...
    16:14:01 INFO  src/nikonDatalink.cpp:170: Sending wakeup string...
    16:14:01 DEBUG src/nikonDatalink.cpp:259: writeDataSlow: '', size: 1
    16:14:01 INFO  src/nikonDatalink.cpp:184: Sending nikon inquiry string...
    16:14:01 DEBUG src/nikonDatalink.cpp:259: writeDataSlow: 'S1000', size: 6
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA84' / '', read: 0, expected: 1, err: -1
    16:14:03 INFO  src/nikonDatalink.cpp:184: Sending nikon inquiry string...
    16:14:03 DEBUG src/nikonDatalink.cpp:259: writeDataSlow: 'S1000', size: 6
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA84' / '1', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA85' / '0', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA86' / '1', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA87' / '0��X��', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA88' / 'F�X��', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA89' / '9X��', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA8A' / '0��', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA8B' / '/�', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA8C' / 'N', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA8D' / '9', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA8E' / '0', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData: 'ED58CA8F' / '', read: 1, expected: 1, err: 0
    16:14:03 DEBUG src/nikonDatalink.cpp:345: readData:...
    Read more »

  • Trigger Shutter works

    Valérianne04/15/2021 at 20:02 0 comments

    dashie@ubuntu-shared:~/pikon$ ./pikon fire_shutter
    20:01:08 INFO  src/nikonDatalink.cpp:36: Starting session.
    20:01:08 INFO  src/nikonDatalink.cpp:133: libserialport version: 0.1.1
    20:01:08 INFO  src/nikonDatalink.cpp:134: Port name: /dev/ttyUSB0
    20:01:08 INFO  src/nikonDatalink.cpp:135: Description: FT232R USB UART - A50285BI
    20:01:08 INFO  src/nikonDatalink.cpp:169: Identifying camera...
    20:01:08 INFO  src/nikonDatalink.cpp:170: Sending wakeup string...
    20:01:08 INFO  src/nikonDatalink.cpp:181: Sending nikon inquiry string...
    20:01:10 INFO  src/nikonDatalink.cpp:181: Sending nikon inquiry string...
    20:01:10 INFO  src/nikonDatalink.cpp:57: Camera is a N90s/F90x
    20:01:10 INFO  src/nikonDatalink.cpp:645: Triggering shutter
    20:01:10 INFO  src/nikonDatalink.cpp:79: Ending session.
    dashie@ubuntu-shared:~/pikon$ 

    It does successfully trigger the shutter after doing focus. Standalone focus command still doesn't work, nor 9600 bauds negociation.

  • Camera identification

    Valérianne04/15/2021 at 13:49 0 comments

    For now only the camera identification works, N90/F90 vs N90s/F90x.

    I'm bad at C and the switch to 9600bps isn't working or not totally, initial payload is made at 1200bps.

View all 5 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates