On Wed, 2 Jan 2013, Phil Dibowitz wrote:

Unfortunately, no it cannot.  It needs to be able to store/act on that
information, and it can't do that without its pointer.

Did you have any further thoughts on this?  I suppose we could just add
another pointer argument to the callback?

Also, any comments on any of my other patches?  :-)

Yeah, I think we should just add another callback. It sucks, but I think it's
the cleanest solution.

Add another callback?  You mean like add a separate callback function, but
just for announcing the stages?

No, I meant another argument, sorry.

As in the attached?

Comments?
Add a stages parameter to the callback definition to pass an array of the
stages that will be performed for a given operation file and remote.  At the
moment, the stages are provided only for config updates (pure HID & Zwave) and
firmware updates (pure HID).

Index: concordance/concordance.c
===================================================================
RCS file: /cvsroot/concordance/concordance/concordance/concordance.c,v
retrieving revision 1.41.2.22
diff -u -p -r1.41.2.22 concordance.c
--- concordance/concordance.c   28 Mar 2012 00:10:29 -0000      1.41.2.22
+++ concordance/concordance.c   4 Jan 2013 03:48:45 -0000
@@ -166,9 +166,11 @@ void print_stage_name(int stage_id)
  *   total => the number 'curr' is trying to reach
  *   counter_type => what 'curr' represents (bytes, percent, etc.)
  *   arg => an extra value we can ask libconcord to pass us.
+ *   stages => the array of stages that will be performed
  */
 void cb_print_percent_status(uint32_t stage_id, uint32_t count, uint32_t curr,
-       uint32_t total, uint32_t counter_type, void *arg)
+       uint32_t total, uint32_t counter_type, void *arg,
+       const uint32_t *stages)
 {
 
        if (stage_id == LC_CB_STAGE_NUM_STAGES) {
Index: libconcord/libconcord.cpp
===================================================================
RCS file: /cvsroot/concordance/concordance/libconcord/libconcord.cpp,v
retrieving revision 1.42.2.22
diff -u -p -r1.42.2.22 libconcord.cpp
--- libconcord/libconcord.cpp   15 Jul 2012 07:17:08 -0000      1.42.2.22
+++ libconcord/libconcord.cpp   4 Jan 2013 03:48:45 -0000
@@ -590,9 +590,68 @@ int is_fw_update_supported(int direct)
 }
 
 void _report_number_of_stages(lc_callback cb, void *cb_arg, int num) {
-        cb(LC_CB_STAGE_NUM_STAGES, num, 0, 0, 0, cb_arg);
+        cb(LC_CB_STAGE_NUM_STAGES, num, 0, 0, 0, cb_arg, NULL);
 }
 
+void _report_stages(lc_callback cb, void *cb_arg, int num, const uint32_t
+       *stages)
+{
+       cb(LC_CB_STAGE_NUM_STAGES, num, 0, 0, 0, cb_arg, stages);
+}
+
+static const uint32_t update_configuration_hid_stages[]={
+       LC_CB_STAGE_INITIALIZE_UPDATE,
+       LC_CB_STAGE_INVALIDATE_FLASH,
+       LC_CB_STAGE_ERASE_FLASH,
+       LC_CB_STAGE_WRITE_CONFIG,
+       LC_CB_STAGE_VERIFY_CONFIG,
+       LC_CB_STAGE_RESET,
+};
+static const int update_configuration_hid_num_stages = 6;
+
+static const uint32_t update_configuration_hid_noreset_stages[]={
+       LC_CB_STAGE_INITIALIZE_UPDATE,
+       LC_CB_STAGE_INVALIDATE_FLASH,
+       LC_CB_STAGE_ERASE_FLASH,
+       LC_CB_STAGE_WRITE_CONFIG,
+       LC_CB_STAGE_VERIFY_CONFIG,
+};
+static const int update_configuration_hid_noreset_num_stages = 5;
+
+static const uint32_t update_configuration_zwave_stages[]={
+       LC_CB_STAGE_INITIALIZE_UPDATE,
+       LC_CB_STAGE_WRITE_CONFIG,
+       LC_CB_STAGE_FINALIZE_UPDATE,
+};
+static const int update_configuration_zwave_num_stages = 3;
+
+static const uint32_t update_configuration_usbnet_stages[]={
+       LC_CB_STAGE_INITIALIZE_UPDATE,
+       LC_CB_STAGE_WRITE_CONFIG,
+       LC_CB_STAGE_FINALIZE_UPDATE,
+       LC_CB_STAGE_RESET,
+};
+static const int update_configuration_usbnet_num_stages = 4;
+
+static const uint32_t update_firmware_hid_stages[]={
+       LC_CB_STAGE_INITIALIZE_UPDATE,
+       LC_CB_STAGE_INVALIDATE_FLASH,
+       LC_CB_STAGE_ERASE_FLASH,
+       LC_CB_STAGE_WRITE_FIRMWARE,
+       LC_CB_STAGE_FINALIZE_UPDATE,
+       LC_CB_STAGE_RESET,
+       LC_CB_STAGE_SET_TIME,
+};
+static const int update_firmware_hid_num_stages = 7;
+
+static const uint32_t update_firmware_hid_direct_stages[]={
+       LC_CB_STAGE_INVALIDATE_FLASH,
+       LC_CB_STAGE_ERASE_FLASH,
+       LC_CB_STAGE_WRITE_FIRMWARE,
+       LC_CB_STAGE_RESET,
+       LC_CB_STAGE_SET_TIME,
+};
+static const int update_firmware_hid_direct_num_stages = 5;
 
 /*
  * GENERAL REMOTE STUFF
@@ -688,13 +747,15 @@ int reset_remote(lc_callback cb, void *c
 {
        int err;
        if (cb)
-               cb(LC_CB_STAGE_RESET, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS, 
cb_arg);
+               cb(LC_CB_STAGE_RESET, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS,
+                       cb_arg, NULL);
 
        if ((err = rmt->Reset(COMMAND_RESET_DEVICE)))
                return err;
 
        if (cb)
-               cb(LC_CB_STAGE_RESET, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, 
cb_arg);
+               cb(LC_CB_STAGE_RESET, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS,
+                       cb_arg, NULL);
 
        deinit_concord();
        for (int i = 0; i < MAX_WAIT_FOR_BOOT; i++) {
@@ -713,7 +774,8 @@ int reset_remote(lc_callback cb, void *c
                return err;
 
        if (cb)
-               cb(LC_CB_STAGE_RESET, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS, 
cb_arg);
+               cb(LC_CB_STAGE_RESET, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS,
+                       cb_arg, NULL);
 
        return 0;
 }
@@ -738,13 +800,15 @@ int post_preconfig(lc_callback cb, void 
 {
        int err;
        if (cb)
-               cb(LC_CB_STAGE_HTTP, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(LC_CB_STAGE_HTTP, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                       NULL);
        if ((err = Post(of->GetXml(), of->GetXmlSize(), "POSTOPTIONS", ri,
                        true))) {
                return err;
        }
        if (cb)
-               cb(LC_CB_STAGE_HTTP, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(LC_CB_STAGE_HTTP, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                       NULL);
        return 0;
 }
 
@@ -752,14 +816,16 @@ int post_postfirmware(lc_callback cb, vo
 {
        int err;
        if (cb)
-               cb(LC_CB_STAGE_HTTP, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(LC_CB_STAGE_HTTP, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                       NULL);
 
        if ((err = Post(of->GetXml(), of->GetXmlSize(), "COMPLETEPOSTOPTIONS", 
ri,
                        false)))
                return err;
 
        if (cb)
-               cb(LC_CB_STAGE_HTTP, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(LC_CB_STAGE_HTTP, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                       NULL);
        return 0;
 }
 
@@ -767,14 +833,16 @@ int post_postconfig(lc_callback cb, void
 {
        int err;
        if (cb)
-               cb(LC_CB_STAGE_HTTP, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(LC_CB_STAGE_HTTP, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                       NULL);
 
        if ((err = Post(of->GetXml(), of->GetXmlSize(), "COMPLETEPOSTOPTIONS", 
ri,
                        true, false, is_z_remote() ? true : false, NULL, NULL)))
                return err;
 
        if (cb)
-               cb(LC_CB_STAGE_HTTP, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(LC_CB_STAGE_HTTP, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                       NULL);
 
        return 0;
 }
@@ -798,14 +866,16 @@ int post_connect_test_success(lc_callbac
        }
 
        if (cb)
-               cb(LC_CB_STAGE_HTTP, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(LC_CB_STAGE_HTTP, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                       NULL);
 
        if ((err = Post(of->GetXml(), of->GetXmlSize(), "POSTOPTIONS", ri, true,
                        add_cookiekeyval)))
                return err;
 
        if (cb)
-               cb(LC_CB_STAGE_HTTP, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(LC_CB_STAGE_HTTP, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                       NULL);
 
        return 0;
 }
@@ -825,7 +895,7 @@ int _set_time(lc_callback cb, void *cb_a
        struct tm *lt = localtime(&t);
 
        if (cb)
-               cb(cb_stage, 0, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 0, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        rtime.second = lt->tm_sec;
        rtime.minute = lt->tm_min;
@@ -842,7 +912,7 @@ int _set_time(lc_callback cb, void *cb_a
                return err;
        }
        if (cb)
-               cb(cb_stage, 1, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 1, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        return 0;
 }
@@ -1077,11 +1147,24 @@ int update_configuration(lc_callback cb,
 {
        int err;
        if (is_z_remote()) {
-               _report_number_of_stages(cb, cb_arg, 3);
+               if (is_usbnet_remote())
+                       _report_stages(cb, cb_arg,
+                               update_configuration_usbnet_num_stages,
+                               update_configuration_usbnet_stages);
+               else
+                       _report_stages(cb, cb_arg,
+                               update_configuration_zwave_num_stages,
+                               update_configuration_zwave_stages);
                err = _update_configuration_zwave(cb, cb_arg);
        } else {
-               _report_number_of_stages(cb, cb_arg,
-                       (noreset) ? 5 : 6);
+               if (noreset)
+                       _report_stages(cb, cb_arg,
+                               update_configuration_hid_noreset_num_stages,
+                               update_configuration_hid_noreset_stages);
+               else
+                       _report_stages(cb, cb_arg,
+                               update_configuration_hid_num_stages,
+                               update_configuration_hid_stages);
                err = _update_configuration_hid(cb, cb_arg);
        }
 
@@ -1303,6 +1386,15 @@ int update_firmware(lc_callback cb, void
                return LC_ERROR_UNSUPP;
        }
 
+       if (direct)
+               _report_stages(cb, cb_arg,
+                       update_firmware_hid_direct_num_stages,
+                       update_firmware_hid_direct_stages);
+       else
+               _report_stages(cb, cb_arg,
+                       update_firmware_hid_num_stages,
+                       update_firmware_hid_stages);
+
        if (!direct) {
                if ((err = prep_firmware(cb, cb_arg)))
                        return err;
@@ -1523,7 +1615,8 @@ int post_new_code(char *key_name, char *
        string learn_key, learn_seq;
 
        if (cb)
-               cb(LC_CB_STAGE_HTTP, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(LC_CB_STAGE_HTTP, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                       NULL);
 
        if (key_name == NULL || encoded_signal == NULL) {
                return LC_ERROR_POST;   /* cannot do anything without */
@@ -1533,14 +1626,16 @@ int post_new_code(char *key_name, char *
        learn_seq = encoded_signal;
 
        if (cb)
-               cb(LC_CB_STAGE_HTTP, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(LC_CB_STAGE_HTTP, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                       NULL);
 
        if ((err = Post(of->GetXml(), of->GetXmlSize(), "POSTOPTIONS", ri, true,
                        false, false, &learn_seq, &learn_key)))
                return err;
 
        if (cb)
-               cb(LC_CB_STAGE_HTTP, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(LC_CB_STAGE_HTTP, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                       NULL);
 
        return 0;
 }
Index: libconcord/libconcord.h
===================================================================
RCS file: /cvsroot/concordance/concordance/libconcord/libconcord.h,v
retrieving revision 1.22.2.16
diff -u -p -r1.22.2.16 libconcord.h
--- libconcord/libconcord.h     22 Oct 2012 00:40:42 -0000      1.22.2.16
+++ libconcord/libconcord.h     4 Jan 2013 03:48:45 -0000
@@ -114,9 +114,12 @@ extern "C" {
  *   uint32_t counter_type - the type of counter (bytes, steps, etc.)
  *   void *arg      - opaque object you can pass to functions to have them
  *                    pass back to your callback.
+ *   const uint32_t* stages - a pointer to the stages that will be
+ *                            performed for this operation.  Only used when
+ *                            LC_CB_STAGE_NUM_STAGES is the callback stage.
  */
 typedef void (*lc_callback)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t,
-       void*);
+       void*, const uint32_t*);
 
 /*
  * REMOTE INFORMATION ACCESSORS
Index: libconcord/remote.cpp
===================================================================
RCS file: /cvsroot/concordance/concordance/libconcord/remote.cpp,v
retrieving revision 1.40.2.9
diff -u -p -r1.40.2.9 remote.cpp
--- libconcord/remote.cpp       28 Mar 2012 00:10:29 -0000      1.40.2.9
+++ libconcord/remote.cpp       4 Jan 2013 03:48:45 -0000
@@ -145,7 +145,7 @@ int CRemote::GetIdentity(TRemoteInfo &ri
        }
        if (cb) {
                cb(cb_stage, cb_count++, 1, 2,
-                       LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+                       LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
        }
 
        /*
@@ -193,7 +193,7 @@ int CRemote::GetIdentity(TRemoteInfo &ri
 
        if (cb) {
                cb(cb_stage, cb_count++, 2, 2,
-                       LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+                       LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
        }
 
        make_serial(rsp, ri);
@@ -285,7 +285,7 @@ int CRemote::ReadFlash(uint32_t addr, co
 
                if (cb) {
                        cb(cb_stage, cb_count++, bytes_read, len,
-                               LC_CB_COUNTER_TYPE_BYTES, cb_arg);
+                               LC_CB_COUNTER_TYPE_BYTES, cb_arg, NULL);
                }
        } while (err == 0 && addr < end);
 
@@ -299,13 +299,13 @@ int CRemote::InvalidateFlash(lc_callback
        int err;
 
        if (cb)
-               cb(lc_stage, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(lc_stage, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        if ((err = HID_WriteReport(ivf)))
                return err;
 
        if (cb)
-               cb(lc_stage, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(lc_stage, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        uint8_t rsp[68];
        if ((err = HID_ReadReport(rsp)))
@@ -317,14 +317,14 @@ int CRemote::InvalidateFlash(lc_callback
        }
 
        if (cb)
-               cb(lc_stage, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(lc_stage, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        return 0;
 }
 
 
 int CRemote::EraseFlash(uint32_t addr, uint32_t len,  const TRemoteInfo &ri,
-       lc_callback cb, void *arg, uint32_t cb_stage)
+       lc_callback cb, void *cb_arg, uint32_t cb_stage)
 {
        const unsigned int *sectors = ri.flash->sectors;
        const unsigned int flash_base = ri.arch->flash_base;
@@ -368,7 +368,7 @@ int CRemote::EraseFlash(uint32_t addr, u
 
                if (cb) {
                        cb(cb_stage, i, i+1, num_sectors,
-                               LC_CB_COUNTER_TYPE_STEPS, arg);
+                               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
                }
                debug("erase sector %2i: %06X - %06X", n, sector_begin,
                        sector_end);
@@ -386,7 +386,7 @@ int CRemote::PrepFirmware(const TRemoteI
        uint8_t data[1] = { 0x00 };
 
        if (cb)
-               cb(cb_stage, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        if (ri.arch->firmware_update_base == ri.arch->firmware_base) {
                /*
@@ -400,7 +400,8 @@ int CRemote::PrepFirmware(const TRemoteI
                        return LC_ERROR;
 
                if (cb)
-                       cb(cb_stage, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+                       cb(cb_stage, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                               NULL);
 
                if ((err = WriteFlash(0x200000, 1, data, ri.protocol, NULL,
                                NULL, 0)))
@@ -415,7 +416,8 @@ int CRemote::PrepFirmware(const TRemoteI
                        return LC_ERROR_WRITE;
 
                if (cb)
-                       cb(cb_stage, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+                       cb(cb_stage, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                               NULL);
 
                if ((err = ReadRam(0, 1, data)))
                        return LC_ERROR_WRITE;
@@ -423,7 +425,7 @@ int CRemote::PrepFirmware(const TRemoteI
                        return LC_ERROR_VERIFY;
        }
        if (cb)
-               cb(cb_stage, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        return 0;
 }
@@ -434,7 +436,7 @@ int CRemote::FinishFirmware(const TRemot
        int err = 0;
 
        if (cb)
-               cb(cb_stage, 0, 0, 3, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 0, 0, 3, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        uint8_t data[1];
        if (ri.arch->firmware_update_base == ri.arch->firmware_base) {
@@ -443,7 +445,8 @@ int CRemote::FinishFirmware(const TRemot
                        NULL, 0)))
                        return LC_ERROR;
                if (cb)
-                       cb(cb_stage, 1, 1, 3, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+                       cb(cb_stage, 1, 1, 3, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                               NULL);
        } else {
                data[0] = 0x02;
                if ((err = WriteRam(0, 1, data))) {
@@ -451,13 +454,15 @@ int CRemote::FinishFirmware(const TRemot
                        return LC_ERROR_WRITE;
                }
                if (cb)
-                       cb(cb_stage, 1, 1, 3, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+                       cb(cb_stage, 1, 1, 3, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                               NULL);
                if ((err = ReadRam(0, 1, data))) {
                        debug("Failed to from RAM 0");
                        return LC_ERROR_WRITE;
                }
                if (cb)
-                       cb(cb_stage, 2, 2, 3, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+                       cb(cb_stage, 2, 2, 3, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                               NULL);
                if (data[0] != 2) {
                        printf("byte is %d\n", data[0]);
                        debug("Finalize byte didn't match");
@@ -465,7 +470,7 @@ int CRemote::FinishFirmware(const TRemot
                }
        }
        if (cb)
-               cb(cb_stage, 3, 3, 3, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 3, 3, 3, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        return 0;
 }
@@ -478,28 +483,30 @@ int CRemote::PrepConfig(const TRemoteInf
 
        if (ri.architecture != 14) {
                if (cb) {
-                       cb(cb_stage, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
-                       cb(cb_stage, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+                       cb(cb_stage, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                               NULL);
+                       cb(cb_stage, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg,
+                               NULL);
                }
                return 0;
        }
 
        if (cb)
-               cb(cb_stage, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        if ((err = WriteMiscByte(0x02, 1, COMMAND_MISC_RESTART_CONFIG, 
data_zero))) {
                return err;
        }
 
        if (cb)
-               cb(cb_stage, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        if ((err = WriteMiscByte(0x05, 1, COMMAND_MISC_RESTART_CONFIG, 
data_zero))) {
                return err;
        }
 
        if (cb)
-               cb(cb_stage, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        return 0;
 }
@@ -516,21 +523,21 @@ int CRemote::FinishConfig(const TRemoteI
        }
 
        if (cb)
-               cb(cb_stage, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 0, 0, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        if ((err = WriteMiscByte(0x03, 1, COMMAND_MISC_RESTART_CONFIG, 
data_one))) {
                return err;
        }
 
        if (cb)
-               cb(cb_stage, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 1, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        if ((err = WriteMiscByte(0x06, 1, COMMAND_MISC_RESTART_CONFIG, 
data_zero))) {
                return err;
        }
 
        if (cb)
-               cb(cb_stage, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 2, 2, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        return 0;
 }
@@ -546,7 +553,7 @@ int CRemote::ReadRam(uint32_t addr, cons
 }
 
 int CRemote::WriteFlash(uint32_t addr, const uint32_t len, const uint8_t *wr,
-       unsigned int protocol, lc_callback cb, void *arg, uint32_t cb_stage)
+       unsigned int protocol, lc_callback cb, void *cb_arg, uint32_t cb_stage)
 {
        uint32_t cb_count = 0;
        const unsigned int max_chunk_len =
@@ -606,7 +613,7 @@ int CRemote::WriteFlash(uint32_t addr, c
 
                if (cb) {
                        cb(cb_stage, cb_count++, bytes_written, len,
-                               LC_CB_COUNTER_TYPE_BYTES, arg);
+                               LC_CB_COUNTER_TYPE_BYTES, cb_arg, NULL);
                }
        } while (addr < end);
 
@@ -765,7 +772,7 @@ int CRemote::SetTime(const TRemoteInfo &
 
        if (cb)
                cb(cb_stage, cb_count++, 0, 2, LC_CB_COUNTER_TYPE_STEPS,
-                       cb_arg);
+                       cb_arg, NULL);
 
        if (ri.architecture < 8) {
                uint8_t tsv[8];
@@ -779,7 +786,7 @@ int CRemote::SetTime(const TRemoteInfo &
                        return err;
                if (cb)
                        cb(cb_stage, cb_count++, 1, 3, LC_CB_COUNTER_TYPE_STEPS,
-                               cb_arg);
+                               cb_arg, NULL);
 
                tsv[0] = ht.second;
                err = WriteMiscByte(0, 1, COMMAND_MISC_STATE, tsv);
@@ -796,7 +803,7 @@ int CRemote::SetTime(const TRemoteInfo &
                        return err;
                if (cb)
                        cb(cb_stage, cb_count++, 1, 3, LC_CB_COUNTER_TYPE_STEPS,
-                               cb_arg);
+                               cb_arg, NULL);
                tsv[0] = ht.second;
                if ((err = WriteMiscWord(0, 1, COMMAND_MISC_STATE, tsv)))
                        return err;
@@ -811,7 +818,7 @@ int CRemote::SetTime(const TRemoteInfo &
        }
        if (cb)
                cb(cb_stage, cb_count++, 2, 3, LC_CB_COUNTER_TYPE_STEPS,
-                       cb_arg);
+                       cb_arg, NULL);
 
         if (err != 0) {
                return err;
@@ -835,7 +842,7 @@ int CRemote::SetTime(const TRemoteInfo &
        }
        if (cb)
                cb(cb_stage, cb_count++, 3, 3, LC_CB_COUNTER_TYPE_STEPS,
-                       cb_arg);
+                       cb_arg, NULL);
 
        return err;
 }
@@ -953,7 +960,7 @@ int CRemote::LearnIR(uint32_t *freq, uin
        static const uint8_t stop_ir_learn[64] = { COMMAND_STOP_IRCAP };
 
        if (cb) {
-               cb(cb_stage, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 0, 0, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
        }
 
        if (HID_WriteReport(start_ir_learn) != 0) {
@@ -1039,7 +1046,7 @@ int CRemote::LearnIR(uint32_t *freq, uin
        } while ((rsp[0] & COMMAND_MASK) != RESPONSE_DONE);
 
        if (cb && !err) {
-               cb(cb_stage, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 1, 1, 1, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
        }
 
        return err;
Index: libconcord/remote_z.cpp
===================================================================
RCS file: /cvsroot/concordance/concordance/libconcord/remote_z.cpp,v
retrieving revision 1.25.2.16
diff -u -p -r1.25.2.16 remote_z.cpp
--- libconcord/remote_z.cpp     4 Jun 2012 07:09:49 -0000       1.25.2.16
+++ libconcord/remote_z.cpp     4 Jan 2013 03:48:45 -0000
@@ -374,7 +374,7 @@ int CRemoteZ_USBNET::TCPSendAndCheck(uin
 }
 
 int CRemoteZ_USBNET::UpdateConfig(const uint32_t len, const uint8_t *wr,
-       lc_callback cb, void *arg, uint32_t cb_stage)
+       lc_callback cb, void *cb_arg, uint32_t cb_stage)
 {
        int err = 0;
        int cb_count = 0;
@@ -383,7 +383,7 @@ int CRemoteZ_USBNET::UpdateConfig(const 
        uint8_t status;
 
        cb(LC_CB_STAGE_INITIALIZE_UPDATE, cb_count++, 0, 2,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* ACK it with a command to start an update */
        debug("START_UPDATE");
@@ -395,7 +395,7 @@ int CRemoteZ_USBNET::UpdateConfig(const 
        }
 
        cb(LC_CB_STAGE_INITIALIZE_UPDATE, cb_count++, 1, 2,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* write update-header */
        debug("UPDATE_HEADER");
@@ -412,7 +412,7 @@ int CRemoteZ_USBNET::UpdateConfig(const 
        }
 
        cb(LC_CB_STAGE_INITIALIZE_UPDATE, cb_count++, 2, 2,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
        cb_count = 0;
 
        /* write data */
@@ -452,14 +452,14 @@ int CRemoteZ_USBNET::UpdateConfig(const 
                if (cb) {
                        cb(LC_CB_STAGE_WRITE_CONFIG, cb_count++,
                                (int)(wr_ptr - wr), len,
-                               LC_CB_COUNTER_TYPE_BYTES, arg);
+                               LC_CB_COUNTER_TYPE_BYTES, cb_arg, NULL);
                }
        }
 
        /* write update-done */
        cb_count = 0;
        cb(LC_CB_STAGE_FINALIZE_UPDATE, cb_count++, 0, 3,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        debug("UPDATE_DATA_DONE");
        cmd[0] = 0x01; // 1 parameter
@@ -470,7 +470,7 @@ int CRemoteZ_USBNET::UpdateConfig(const 
        }
 
        cb(LC_CB_STAGE_FINALIZE_UPDATE, cb_count++, 1, 3,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* send get-cheksum */
        debug("GET_CHECKSUM");
@@ -485,7 +485,7 @@ int CRemoteZ_USBNET::UpdateConfig(const 
        }
 
        cb(LC_CB_STAGE_FINALIZE_UPDATE, cb_count++, 2, 3,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* send finish-update */
        debug("FINISH_UPDATE");
@@ -499,7 +499,7 @@ int CRemoteZ_USBNET::UpdateConfig(const 
        }
 
        cb(LC_CB_STAGE_FINALIZE_UPDATE, cb_count++, 3, 3,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        return 0;
 }
@@ -652,7 +652,7 @@ int CRemoteZ_USBNET::ReadRegion(uint8_t 
 
                if (cb) {
                        cb(cb_stage, cb_count++, rgn_len - data_to_read,
-                               rgn_len, LC_CB_COUNTER_TYPE_BYTES, cb_arg);
+                               rgn_len, LC_CB_COUNTER_TYPE_BYTES, cb_arg, 
NULL);
                }
        }
 
@@ -723,7 +723,7 @@ int CRemoteZ_Base::GetIdentity(TRemoteIn
        }
 
        if (cb) {
-               cb(cb_stage, 0, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg);
+               cb(cb_stage, 0, 1, 2, LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
        }
 
        CRemoteZ_Base::TParamList pl;
@@ -768,7 +768,7 @@ int CRemoteZ_Base::GetIdentity(TRemoteIn
 
        if (cb) {
                cb(LC_CB_STAGE_GET_IDENTITY, 1, 2, 2, LC_CB_COUNTER_TYPE_STEPS,
-                       cb_arg);
+                       cb_arg, NULL);
        }
 
        ParseParams(len, rsp, pl);
@@ -1084,13 +1084,13 @@ int CRemoteZ_HID::TCPSendAndCheck(uint8_
 }
 
 int CRemoteZ_HID::UpdateConfig(const uint32_t len, const uint8_t *wr,
-       lc_callback cb, void *arg, uint32_t cb_stage)
+       lc_callback cb, void *cb_arg, uint32_t cb_stage)
 {
        int err = 0;
        int cb_count = 0;
 
        cb(LC_CB_STAGE_INITIALIZE_UPDATE, cb_count++, 0, 4,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
        /* Start a TCP transfer */
        if ((err = Write(TYPE_REQUEST, COMMAND_INITIATE_UPDATE_TCP_CHANNEL))) {
                debug("Failed to write to remote");
@@ -1112,7 +1112,7 @@ int CRemoteZ_HID::UpdateConfig(const uin
                return LC_ERROR;
        }
        cb(LC_CB_STAGE_INITIALIZE_UPDATE, cb_count++, 1, 4,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* Look for a SYN packet */
        debug("Looking for syn");
@@ -1126,7 +1126,7 @@ int CRemoteZ_HID::UpdateConfig(const uin
                return LC_ERROR;
        }
        cb(LC_CB_STAGE_INITIALIZE_UPDATE, cb_count++, 2, 4,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* ACK it with a command to start an update */
        debug("START_UPDATE");
@@ -1148,7 +1148,7 @@ int CRemoteZ_HID::UpdateConfig(const uin
                return LC_ERROR;
        }
        cb(LC_CB_STAGE_INITIALIZE_UPDATE, cb_count++, 3, 4,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* write update-header */
        debug("UPDATE_HEADER");
@@ -1162,7 +1162,7 @@ int CRemoteZ_HID::UpdateConfig(const uin
                return err;
        }
        cb(LC_CB_STAGE_INITIALIZE_UPDATE, cb_count++, 4, 4,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
        cb_count = 0;
 
        /* write data */
@@ -1190,20 +1190,20 @@ int CRemoteZ_HID::UpdateConfig(const uin
                if (cb) {
                        cb(LC_CB_STAGE_WRITE_CONFIG, cb_count++,
                                (int)(wr_ptr - wr), len,
-                               LC_CB_COUNTER_TYPE_BYTES, arg);
+                               LC_CB_COUNTER_TYPE_BYTES, cb_arg, NULL);
                }
        }
 
        /* write update-done */
        cb_count = 0;
        cb(LC_CB_STAGE_FINALIZE_UPDATE, cb_count++, 0, 6,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
        debug("UPDATE_DATA_DONE");
        if ((err = TCPSendAndCheck(COMMAND_WRITE_UPDATE_DATA_DONE))) {
                return err;
        }
        cb(LC_CB_STAGE_FINALIZE_UPDATE, cb_count++, 1, 6,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* Funky ACK exchange - part 1 */
        debug("FUNKY-ACK");
@@ -1229,7 +1229,7 @@ int CRemoteZ_HID::UpdateConfig(const uin
                return LC_ERROR_READ;
        }
        cb(LC_CB_STAGE_FINALIZE_UPDATE, cb_count++, 2, 6,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* send get-cheksum */
        debug("GET_CHECKSUM");
@@ -1240,7 +1240,7 @@ int CRemoteZ_HID::UpdateConfig(const uin
                return err;
        }
        cb(LC_CB_STAGE_FINALIZE_UPDATE, cb_count++, 3, 6,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* send finish-update */
        debug("FINISH_UPDATE");
@@ -1255,7 +1255,7 @@ int CRemoteZ_HID::UpdateConfig(const uin
                return err;
        }
        cb(LC_CB_STAGE_FINALIZE_UPDATE, cb_count++, 4, 6,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* Funky ACK exchange */
        debug("FUNKY-ACK");
@@ -1287,7 +1287,7 @@ int CRemoteZ_HID::UpdateConfig(const uin
                return LC_ERROR;
        }
        cb(LC_CB_STAGE_FINALIZE_UPDATE, cb_count++, 5, 6,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /* FIN-ACK */
        debug("FIN-ACK");
@@ -1312,7 +1312,7 @@ int CRemoteZ_HID::UpdateConfig(const uin
                return LC_ERROR_WRITE;
        }
        cb(LC_CB_STAGE_FINALIZE_UPDATE, cb_count++, 6, 6,
-               LC_CB_COUNTER_TYPE_STEPS, arg);
+               LC_CB_COUNTER_TYPE_STEPS, cb_arg, NULL);
 
        /*
         * Official traces seem to show a final ack to the above ack, but for us
Index: libconcord/bindings/python/libconcord.py
===================================================================
RCS file: 
/cvsroot/concordance/concordance/libconcord/bindings/python/libconcord.py,v
retrieving revision 1.9.2.4
diff -u -p -r1.9.2.4 libconcord.py
--- libconcord/bindings/python/libconcord.py    22 Oct 2012 00:40:43 -0000      
1.9.2.4
+++ libconcord/bindings/python/libconcord.py    4 Jan 2013 03:48:45 -0000
@@ -46,9 +46,9 @@ else:
 # Public libconcord API: Custom types
 
 # typedef void (*lc_callback)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t,
-#     void*);
+#     void*, const uint32_t*);
 callback_type = CFUNCTYPE(None, c_uint, c_uint, c_uint, c_uint, c_uint, \
-                py_object)
+                py_object, POINTER(c_uint))
 
 # Public libconcord API: Error codes
 
------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
concordance-devel mailing list
concordance-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/concordance-devel

Reply via email to