RE: [PATCH] ifx: adding Infineon modem self test

2010-12-12 Thread Bastian, Waldo
  The conclusion was that these two test commands should be issued from the 
  AP to ensure that the modem is functioning properly.
 
 I am not aware of the conclusion. My understanding is still that the
 modem firmware is suppose to do its selftests all by itself.

It does not.

 So what is the reasoning behind doing these selftests from the host.

It makes it easier for the host to record diagnostics / error codes this way. 
At the moment this is limited to recording it in the log file, as oFono doesn't 
provide a good way for reporting back error conditions when powering up a modem 
fails.

Cheers,
Waldo
___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


RE: [PATCH] ifx: adding Infineon modem self test

2010-12-12 Thread Marcel Holtmann
Hi Waldo,

   The conclusion was that these two test commands should be issued from the 
   AP to ensure that the modem is functioning properly.
  
  I am not aware of the conclusion. My understanding is still that the
  modem firmware is suppose to do its selftests all by itself.
 
 It does not.

this is really new to me. Last time this has been talked about, that was
different.

  So what is the reasoning behind doing these selftests from the host.
 
 It makes it easier for the host to record diagnostics / error codes this way. 
 At the moment this is limited to recording it in the log file, as oFono 
 doesn't provide a good way for reporting back error conditions when powering 
 up a modem fails.

There is nothing more that you can provide to the host anyway. Just
having one AT command to read the selftest log from the modem would have
been just fine. Right now I am not seeing any advantage why the host
should execute selftests.

And essentially this really only makes sense once the oFono core can
mark a modem as broken and then just not even try to re-enable it.

We don't even have a state for this since it was never a requirement to
have such a state. While Lockdown comes pretty close, it is semantically
something totally different.

There is also the other thing, that we have no numbers on the expected
execution time of these selftests. This needs to be documented inside
the code. Otherwise this gets out of control.

And just to make this clear. These are run on every oFono modem enabling
execution. This is different from just on initial modem power on. Are
you okay with the impact on modem enabling time?

Regards

Marcel


___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


Re: [PATCH] ifx: adding Infineon modem self test

2010-12-12 Thread Marcel Holtmann
Hi Robertino,
 
  static const char *none_prefix[] = { NULL };
  static const char *xdrv_prefix[] = { +XDRV:, NULL };
 +static const char *empty_prefix[] = { , NULL };

this is essentially to just passing NULL as argument. What are you
trying to achieve here?

 +static const char *modem_self_tests[][2] = {
 + { RTC Test, a...@rtc:rtc_gti_test_verify_32khz() },
 + { Version Info Test, a...@vers:device_version_id() 
 },
 + { NULL, NULL } };

The coding style is broken here. Please check the oFono source code for
example on how to format these type of array correctly.

In addition the string array is wrong. It should be a struct array. The
magic of [1] and [2] for picking the command or the text string is not
intuitive and leads to unreadable code.

  struct ifx_data {
   GIOChannel *device;
 @@ -99,6 +105,8 @@ struct ifx_data {
   int audio_loopback;
   struct ofono_sim *sim;
   gboolean have_sim;
 + guint self_test_timeout;
 + int self_test_idx;
  };
  
  static void ifx_debug(const char *str, void *user_data)
 @@ -545,6 +553,82 @@ static gboolean mux_timeout_cb(gpointer user_data)
   return FALSE;
  }
  
 +static gboolean self_test_timeout_cb(gpointer user_data)
 +{
 + struct ofono_modem *modem = user_data;
 + struct ifx_data *data = ofono_modem_get_data(modem);
 +
 + ofono_error(Timeout with modem self_test);

You need an extra empty line here. The error is logically separated.

 + g_source_remove(data-self_test_timeout);

You can not remove a source in its own callback. Have you tested this
code path actually?

 + data-self_test_timeout = 0;
 +
 + shutdown_device(data);

You can not use shutdown_device here since the multiplexer is not ready
yet. If you decide the execute the selftests before bringing up the
multiplexer then this is a different error path.

You need to cleanup data-dlcs[AUX_DLC] and data-device in this failure
case.

 + ofono_modem_set_powered(modem, FALSE);

This needs an extra empty before the return statement.

 + return FALSE;
 +}
 +
 +static void ifx_self_test_get_device_resp(GAtResult *result, int test_id)
 +{

The function is just wrong in conjunction with your array approach.

 + GAtResultIter iter;
 + const char *str;
 +
 + ofono_info(Modem Response: %s,
 + modem_self_tests[test_id][0]);

Can you give an example on a positive and negative selftest response
here. I don't wanna spam the logs with details if everything is fine.

This should use ofono_error and that only in case of an error.

 + g_at_result_iter_init(iter, result);
 +
 + while (g_at_result_iter_next(iter, NULL)) {
 +
 + if (g_at_result_iter_next_string(iter, str))
 + ofono_info(Modem Response: %s, str);
 + }

What is this while loop actually doing? How does a response look like.

 +}
 +
 +static void ifx_self_test_cb(gboolean ok, GAtResult *result,
 + gpointer user_data)
 +{
 + struct ofono_modem *modem = user_data;
 + struct ifx_data *data = ofono_modem_get_data(modem);
 +
 + if (ok) {

This needs to be a if (!ok) here actually and then leaving this function
with a simple error case.

Having the positive handling nested is not a good idea and we don't
really do it that way.

 +
 + if (data-self_test_timeout  0) {
 + g_source_remove(data-self_test_timeout);
 + data-self_test_timeout = 0;
 + }
 +
 + ifx_self_test_get_device_resp(result, data-self_test_idx);
 + data-self_test_idx++;
 +
 + if (modem_self_tests[data-self_test_idx][1] != NULL) {
 +

No empty line here.

 + g_at_chat_send(data-dlcs[AUX_DLC],
 + modem_self_tests[data-self_test_idx][1],
 + empty_prefix, ifx_self_test_cb, modem, NULL);
 +
 + data-self_test_timeout = g_timeout_add_seconds(10,
 + self_test_timeout_cb, modem);
 + return;

No empty line here, but this is not needed in case of (!ok) anyway.

 + } else {
 +

No empty line here either.

 + /* Enable  MUX Channels */
 + data-frame_size = 1509;
 + g_at_chat_send(data-dlcs[AUX_DLC],
 + AT+CMUX=0,0,,1509,10,3,30,,, NULL,
 + mux_setup_cb, modem, NULL);
 +
 + data-mux_init_timeout = g_timeout_add_seconds(5,
 + mux_timeout_cb, modem);
 + return;
 + }
 + }

With proper if (error) { ... ; return; } coding style this function
becomes a lot more readable.

 +
 + ofono_error(Modem %s: FAIL, modem_self_tests[data-self_test_idx][0]);
 + shutdown_device(data);

Again here, the 

RE: [PATCH] ifx: adding Infineon modem self test

2010-12-11 Thread Bastian, Waldo
  Adding Infineon modem selftest to the plugin. It executes couple of AT
  commands, and based on the responses,  it continues with ifx modem
  enabling or powers the modem down.
 
 didn't we conclude that the modem should do all these by itself? My
 understanding is that the modem executes these. And not that we have to
 trigger them.

The conclusion was that these two test commands should be issued from the AP to 
ensure that the modem is functioning properly.

Cheers,
Waldo

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


RE: [PATCH] ifx: adding Infineon modem self test

2010-12-11 Thread Marcel Holtmann
Hi Waldo,

   Adding Infineon modem selftest to the plugin. It executes couple of AT
   commands, and based on the responses,  it continues with ifx modem
   enabling or powers the modem down.
  
  didn't we conclude that the modem should do all these by itself? My
  understanding is that the modem executes these. And not that we have to
  trigger them.
 
 The conclusion was that these two test commands should be issued from the AP 
 to ensure that the modem is functioning properly.

I am not aware of the conclusion. My understanding is still that the
modem firmware is suppose to do its selftests all by itself.

So what is the reasoning behind doing these selftests from the host.
Right now I am failing to see the benefit of these.

Regards

Marcel


___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


Re: [PATCH] ifx: adding Infineon modem self test

2010-12-10 Thread Marcel Holtmann
Hi Robertino,

 Adding Infineon modem selftest to the plugin. It executes couple of AT
 commands, and based on the responses,  it continues with ifx modem
 enabling or powers the modem down.

didn't we conclude that the modem should do all these by itself? My
understanding is that the modem executes these. And not that we have to
trigger them.

Regards

Marcel


___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono