84 lines
2.4 KiB
C
84 lines
2.4 KiB
C
#include "_devices.h"
|
|
|
|
#include "smb_at24c64an.h"
|
|
#include "smb_ds2460.h"
|
|
#include "smb_ds28cn01.h"
|
|
#include "smb_pca9535.h"
|
|
|
|
typedef struct _device_list {
|
|
const char* m_Name;
|
|
FnComDeviceThread* m_Thread;
|
|
struct _device_list* m_Next;
|
|
} device_list_t;
|
|
device_list_t device_list = { .m_Next = NULL };
|
|
|
|
#define _start_device_n(n) \
|
|
if (strcmp(MiceConfig.devices.com##n, name) == 0) attach_com_device(n, thread)
|
|
|
|
inline void start_device(const char* name, FnComDeviceThread* thread) {
|
|
_start_device_n(1);
|
|
_start_device_n(2);
|
|
_start_device_n(3);
|
|
_start_device_n(5);
|
|
_start_device_n(6);
|
|
_start_device_n(7);
|
|
_start_device_n(8);
|
|
}
|
|
|
|
#define _stop_if_unregistered(n) \
|
|
if (MiceConfig.devices.com##n[0] == '\0') detach_com_device(n)
|
|
|
|
inline void stop_old_devices() {
|
|
_stop_if_unregistered(1);
|
|
_stop_if_unregistered(2);
|
|
_stop_if_unregistered(3);
|
|
_stop_if_unregistered(5);
|
|
_stop_if_unregistered(6);
|
|
_stop_if_unregistered(7);
|
|
_stop_if_unregistered(8);
|
|
}
|
|
|
|
void start_devices() {
|
|
stop_old_devices();
|
|
|
|
device_list_t* device = &device_list;
|
|
while (device->m_Next) {
|
|
device = device->m_Next;
|
|
start_device(device->m_Name, device->m_Thread);
|
|
}
|
|
}
|
|
|
|
void register_device(const char* name, FnComDeviceThread* thread) {
|
|
device_list_t* tail = &device_list;
|
|
while (tail->m_Next) tail = tail->m_Next;
|
|
|
|
device_list_t* us = tail->m_Next = malloc(sizeof(device_list_t));
|
|
|
|
us->m_Name = name;
|
|
us->m_Thread = thread;
|
|
us->m_Next = NULL;
|
|
}
|
|
|
|
void install_devices() {
|
|
install_led_bd();
|
|
install_touch_bd();
|
|
install_aime_bd();
|
|
install_servo_15069();
|
|
|
|
start_devices();
|
|
|
|
smbus_install(/* 0x20 */ PCA9535_ADDRESS, &smbus_PCA9535_write, &smbus_PCA9535_read);
|
|
|
|
// mxkN2CmdWriteData(byte addr,byte *data,ushort nbytes,ushort *nbytesOut)
|
|
// -> smbusWriteByte(addr, command:0xcc, byte:data[i])
|
|
// -> smbusWriteI2C(addr, command:0xcc, data+i, n)
|
|
smbus_install(0x30, &smbus_N2_write, &smbus_N2_read);
|
|
|
|
// mxkDsExioRequestComputeMac() -> smbusWriteByte(addr:0x54, command:0x5c, byte:0x94)
|
|
smbus_install(/* 0x54 */ DS2460_ADDRESS, &smbus_ds2460_write, &smbus_ds2460_read);
|
|
|
|
// mxkDsKeychipComputeMac
|
|
smbus_install(/* 0x55 */ DS28CN01_ADDRESS, &smbus_ds28cn01_write, &smbus_ds28cn01_read);
|
|
smbus_install(/* 0x57 */ AT24C64AN_ADDRESS, &smbus_AT24C64AN_write, &smbus_AT24C64AN_read);
|
|
}
|