3 static void handle_generic(struct usbdev_data
*data
, struct blob_attr
**tb
)
5 fprintf(stderr
, "Do generic switch!\n");
8 static void handle_huawei(struct usbdev_data
*data
, struct blob_attr
**tb
)
13 static void handle_sierra(struct usbdev_data
*data
, struct blob_attr
**tb
)
18 static void handle_sony(struct usbdev_data
*data
, struct blob_attr
**tb
)
23 static void handle_qisda(struct usbdev_data
*data
, struct blob_attr
**tb
)
28 static void handle_gct(struct usbdev_data
*data
, struct blob_attr
**tb
)
33 static void handle_kobil(struct usbdev_data
*data
, struct blob_attr
**tb
)
38 static void handle_sequans(struct usbdev_data
*data
, struct blob_attr
**tb
)
43 static void handle_mobile_action(struct usbdev_data
*data
, struct blob_attr
**tb
)
48 static void handle_cisco(struct usbdev_data
*data
, struct blob_attr
**tb
)
69 void (*cb
)(struct usbdev_data
*data
, struct blob_attr
**tb
);
70 } modeswitch_cb
[__MODE_MAX
] = {
71 [MODE_GENERIC
] = { "Generic", handle_generic
},
72 [MODE_HUAWEI
] = { "Huawei", handle_huawei
},
73 [MODE_SIERRA
] = { "Sierra", handle_sierra
},
74 [MODE_SONY
] = { "Sony", handle_sony
},
75 [MODE_QISDA
] = { "Qisda", handle_qisda
},
76 [MODE_GCT
] = { "GCT", handle_gct
},
77 [MODE_KOBIL
] = { "Kobil", handle_kobil
},
78 [MODE_SEQUANS
] = { "Sequans", handle_sequans
},
79 [MODE_MOBILE_ACTION
] = { "MobileAction", handle_mobile_action
},
80 [MODE_CISCO
] = { "Cisco", handle_cisco
},
83 void handle_switch(struct usbdev_data
*data
)
85 static const struct blobmsg_policy data_policy
[__DATA_MAX
] = {
86 [DATA_MODE
] = { .name
= "mode", .type
= BLOBMSG_TYPE_STRING
},
87 [DATA_MSG
] = { .name
= "msg", .type
= BLOBMSG_TYPE_INT32
},
88 [DATA_MSG2
] = { .name
= "msg2", .type
= BLOBMSG_TYPE_INT32
},
89 [DATA_MSG3
] = { .name
= "msg3", .type
= BLOBMSG_TYPE_INT32
},
91 struct blob_attr
*tb
[__DATA_MAX
];
92 int mode
= MODE_GENERIC
;
94 blobmsg_parse(data_policy
, __DATA_MAX
, tb
, blobmsg_data(data
->info
), blobmsg_data_len(data
->info
));
100 modestr
= blobmsg_data(tb
[DATA_MODE
]);
101 for (i
= 0; i
< __MODE_MAX
; i
++) {
102 if (strcmp(modeswitch_cb
[i
].name
, modestr
) != 0)
110 modeswitch_cb
[mode
].cb(data
, tb
);