Mock-ril:

Install:

Install protoc see the external/protobuf/INSTALL.txt and
external/protobuf/python/README.txt. The short answer is:

    $ cd external/protobuf
    $ ./configure
    $ make
    $ make check
    $ make install
    $ cd python
    $ python setup.py install

If you get "from google.protobuf import xxxx" statements
that google.protobuf is not found you didn't install the
python support for protobuf. Also on Mac OSX I got an
error running the protoc tests but installing was fine.

Running/testing:

See "Testing a new ril:" below for general instructions but
for the mock-ril I've added some targets to the Makefile to
ease testing.

Execute the "first" target first to setup appropriate
environment:
  $ cd hardware/ril/mock-ril
  $ make first

If changes made to ".proto" files run make with the default
"all" target:
  $ make

If changes are made to "c++" file create a new library and
run the "test" target:
  $ mm
  $ make test

If changes to only the execute "js" target:
  $ make js

To run the test control server:
  $ make tcs

Implementation:

The mock-ril is a library where the ril is implemented primarily
in javascript, mock-ril.js. In addition it can be controlled by
sending messages from another computer to port 54312 (TODO make
programmable) to the ctrlServer, a Worker in In mock-ril.js.

See mock_ril.js for additional documentation.

files:
  ctrl.proto                    Protobuf messages for the control server
  ctrl.*                        Protobuf generated files.
  ctrl_pb2.py                   Python files generated from ctrl.proto
  ctrl_server.*                 Cpp interface routines between ctrlServer
                                in javascript and the controller.
  experiments.*                 Early experiments
  js_support.*                  Java script support methods. Exposes various
                                routines to javascript, such as print, readFile
                                and include.
  logging.h                     LOG_TAG and include utils/log.h
  mock_ril.[cpp|h]              Main module inteface code.
  mock_ril.js                   The mock ril
  node_buffer.*                 A Buffer for communicating between c++ and js.
                                This was ported from nodejs.org.
  node_object.*                 An object wrapper to make it easier to expose
                                c++ code to js. Ported from nodejs.org.
  node_util.*                   Some utilities ported from nodejs.org.
  protobuf_v8.*                 Protobuf code for javascript ported from
                                http://code.google.com/p/protobuf-for-node/.
  requests.*                    Interface code for handling framework requests.
  responses*                    Interface code for handling framework responses.
  ril.proto                     The protobuf version of ril.h
  ril_vars.js                   Some additional variables defined for enums in
                                ril.h.
  ril_pb2.py                    Python files generated from ril.proto.
  status.h                      STATUS constants.
  tcs.py                        Test the ctrlServer.
  util.*                        Utility routines
  worker.*                      Define WorkerThread and WorkerQueue.
  worker_v8.*                   Expose WorkerQueue to js.


TODO: more documentation.


Testing a new ril:

The Makefile is used to generate files and make testing easier.
I has several targets:

all         runs protoc and generates files, ril.desc ril.pb.*

clean       target removes generated files.

first       changes to root, remounts r/w and copies some files.

test        copies the latest libmock_ril.so and kills rild
            to run the new mockril

General instructions for testing ril's:

1) On the device login in as root and remount file system so it's read/write:
     $ adb root
     restarting adbd as root

     $ adb remount
     remount succeeded

2) Set rild.libpath to the name of the ril:
     adb shell setprop rild.libpath /system/lib/libmock_ril.so

  Using setprop makes the change temporary and the old ril will be
  used after rebooting. (Another option is to set rild.libpath in
  /data/local.prop, but don't forget to reboot for it to take effect).

3) Compile and copy the ril to /system/lib/:
   adb push out/target/product/passion/system/lib/libmock_ril.so /system/lib/

4) To restart the ril, kill the currently running ril and the new one
   will automatically be restarted. You can use the ps command to find
   /system/bin/rild PID, 3212 below and kill it:
     $ adb shell ps | grep rild
     radio     3212  1     3224   628   ffffffff afd0e4fc S /system/bin/rild

     $ adb shell kill 3212

5) Make modifications, go to step 3.
