10 static void handle_generic(struct usbdev_data
*data
, struct blob_attr
**tb
)
12 fprintf(stderr
, "Do generic switch!\n");
15 static void handle_huawei(struct usbdev_data
*data
, struct blob_attr
**tb
)
20 static void handle_sierra(struct usbdev_data
*data
, struct blob_attr
**tb
)
25 static void handle_sony(struct usbdev_data
*data
, struct blob_attr
**tb
)
30 static void handle_qisda(struct usbdev_data
*data
, struct blob_attr
**tb
)
35 static void handle_gct(struct usbdev_data
*data
, struct blob_attr
**tb
)
40 static void handle_kobil(struct usbdev_data
*data
, struct blob_attr
**tb
)
45 static void handle_sequans(struct usbdev_data
*data
, struct blob_attr
**tb
)
50 static void handle_mobile_action(struct usbdev_data
*data
, struct blob_attr
**tb
)
55 static void handle_cisco(struct usbdev_data
*data
, struct blob_attr
**tb
)
76 void (*cb
)(struct usbdev_data
*data
, struct blob_attr
**tb
);
77 } modeswitch_cb
[__MODE_MAX
] = {
78 [MODE_GENERIC
] = { "Generic", handle_generic
},
79 [MODE_HUAWEI
] = { "Huawei", handle_huawei
},
80 [MODE_SIERRA
] = { "Sierra", handle_sierra
},
81 [MODE_SONY
] = { "Sony", handle_sony
},
82 [MODE_QISDA
] = { "Qisda", handle_qisda
},
83 [MODE_GCT
] = { "GCT", handle_gct
},
84 [MODE_KOBIL
] = { "Kobil", handle_kobil
},
85 [MODE_SEQUANS
] = { "Sequans", handle_sequans
},
86 [MODE_MOBILE_ACTION
] = { "MobileAction", handle_mobile_action
},
87 [MODE_CISCO
] = { "Cisco", handle_cisco
},
90 void handle_switch(struct usbdev_data
*data
)
92 static const struct blobmsg_policy data_policy
[__DATA_MAX
] = {
93 [DATA_MODE
] = { .name
= "mode", .type
= BLOBMSG_TYPE_STRING
},
94 [DATA_MSG
] = { .name
= "msg", .type
= BLOBMSG_TYPE_ARRAY
},
95 [DATA_INTERFACE
] = { .name
= "interface", .type
= BLOBMSG_TYPE_INT32
},
97 struct blob_attr
*tb
[__DATA_MAX
];
98 int mode
= MODE_GENERIC
;
100 blobmsg_parse(data_policy
, __DATA_MAX
, tb
, blobmsg_data(data
->info
), blobmsg_data_len(data
->info
));
102 if (tb
[DATA_INTERFACE
])
103 data
->interface
= blobmsg_get_u32(tb
[DATA_INTERFACE
]);
109 modestr
= blobmsg_data(tb
[DATA_MODE
]);
110 for (i
= 0; i
< __MODE_MAX
; i
++) {
111 if (strcmp(modeswitch_cb
[i
].name
, modestr
) != 0)
119 modeswitch_cb
[mode
].cb(data
, tb
);